diff --git a/404.html b/404.html index a6fb0881195..b715113a4ff 100644 --- a/404.html +++ b/404.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/api.html b/api.html index 122435cb9d6..53f0232704d 100644 --- a/api.html +++ b/api.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report.html b/api/report.html index b4f72e6a787..5130a311196 100644 --- a/api/report.html +++ b/api/report.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/formatDuration.html b/api/report/function/formatDuration.html index 95dd01523de..b799fb5d927 100644 --- a/api/report/function/formatDuration.html +++ b/api/report/function/formatDuration.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/formatTime.html b/api/report/function/formatTime.html index 736c4f4d439..b008ec99ca4 100644 --- a/api/report/function/formatTime.html +++ b/api/report/function/formatTime.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/getDurationInMillis.html b/api/report/function/getDurationInMillis.html index 5c0451487c7..481d1ecf335 100644 --- a/api/report/function/getDurationInMillis.html +++ b/api/report/function/getDurationInMillis.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/getIconForStatus.html b/api/report/function/getIconForStatus.html index 86bab5730b0..1112a14b7f3 100644 --- a/api/report/function/getIconForStatus.html +++ b/api/report/function/getIconForStatus.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/hasFailed.html b/api/report/function/hasFailed.html index 56e57f45f3d..1a87e3d69f4 100644 --- a/api/report/function/hasFailed.html +++ b/api/report/function/hasFailed.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/hasPassed.html b/api/report/function/hasPassed.html index c606c24c2a1..50db2272567 100644 --- a/api/report/function/hasPassed.html +++ b/api/report/function/hasPassed.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/isFlaky.html b/api/report/function/isFlaky.html index 52074513aef..e360a38934c 100644 --- a/api/report/function/isFlaky.html +++ b/api/report/function/isFlaky.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/isSlow.html b/api/report/function/isSlow.html index 8d71a788cb0..d2f7c0c6f07 100644 --- a/api/report/function/isSlow.html +++ b/api/report/function/isSlow.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/prepareReportActions.html b/api/report/function/prepareReportActions.html index 9e8fefa1103..cafa05dc2dd 100644 --- a/api/report/function/prepareReportActions.html +++ b/api/report/function/prepareReportActions.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/function/sortReport.html b/api/report/function/sortReport.html index 6e72b6ac671..ba0d0919ae3 100644 --- a/api/report/function/sortReport.html +++ b/api/report/function/sortReport.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/report/interface/PreparedAction.html b/api/report/interface/PreparedAction.html index 896af56fbf2..4b418efe1ea 100644 --- a/api/report/interface/PreparedAction.html +++ b/api/report/interface/PreparedAction.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/runtime.html b/api/runtime.html index 5cac8cec6b4..ec2c07412ea 100644 --- a/api/runtime.html +++ b/api/runtime.html @@ -13,15 +13,15 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/runtime/function/getContext.html b/api/runtime/function/getContext.html index 4d0e56c02f3..d1d89574ec7 100644 --- a/api/runtime/function/getContext.html +++ b/api/runtime/function/getContext.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/runtime/interface/RuntimeContext.html b/api/runtime/interface/RuntimeContext.html index abce8a64bf0..f9ff0e69949 100644 --- a/api/runtime/interface/RuntimeContext.html +++ b/api/runtime/interface/RuntimeContext.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types.html b/api/types.html index 8076fed3444..07733cf4181 100644 --- a/api/types.html +++ b/api/types.html @@ -13,15 +13,15 @@ - - + +
Skip to main content

@moonrepo/types

build status npm version -npm license

Reusable TypeScript types for moon projects, tasks, and configurations.

Index

Interfaces

Type Aliases

Type Aliases

ActionNode

ActionStatus

ActionStatus: cached-from-remote | cached | failed-and-abort | failed | invalid | passed | running | skipped

BinEntry

BinEntry: string | BinConfig

CodeownersOrderBy

CodeownersOrderBy: file-source | project-name

DependencyScope

DependencyScope: build | development | peer | production | root

DependencySource

DependencySource: explicit | implicit

EventType

EventType: action.finished | action.started | dependencies.installed | dependencies.installing | pipeline.aborted | pipeline.finished | pipeline.started | project.synced | project.syncing | target-output.archived | target-output.archiving | target-output.cache-check | target-output.hydrated | target-output.hydrating | target.ran | target.running | tool.installed | tool.installing | workspace.synced | workspace.syncing

HasherOptimization

HasherOptimization: accuracy | performance

HasherWalkStrategy

HasherWalkStrategy: glob | vcs

LanguageType

LanguageType: bash | batch | go | javascript | php | python | ruby | rust | typescript | unknown

NodePackageManager

NodePackageManager: npm | pnpm | yarn

NodeProjectAliasFormat

NodeProjectAliasFormat: name-and-scope | name-only

NodeVersionFormat

NodeVersionFormat: file | link | star | version | version-caret | version-tilde | workspace | workspace-caret | workspace-tilde

NodeVersionManager

NodeVersionManager: nodenv | nvm

Nullable

Nullable<T>: { [ K in keyof T ]: T[K] | null }

Type parameters

  • T

OwnersPaths

OwnersPaths: string[] | Record<string, string[]>

PartialBinEntry

PartialBinEntry: string | PartialBinConfig

PartialOwnersPaths

PartialOwnersPaths: string[] | Record<string, string[]>

PartialProjectDependsOn

PartialProjectDependsOn: string | PartialDependencyConfig

PartialTaskCommandArgs

PartialTaskCommandArgs: null | string | string[]

PartialTemplateVariable

PartialTemplateVariableEnumValue

PartialTemplateVariableEnumValue: string | PartialTemplateVariableEnumValueConfig

PartialWorkspaceProjects

PartialWorkspaceProjects: PartialWorkspaceProjectsConfig | string[] | Record<string, string>

PayloadActionFinished

PayloadActionFinished: WebhookPayload<action.finished, EventActionFinished>

PayloadActionStarted

PayloadActionStarted: WebhookPayload<action.started, EventActionStarted>

PayloadDependenciesInstalled

PayloadDependenciesInstalled: WebhookPayload<dependencies.installed, EventDependenciesInstalled>

PayloadDependenciesInstalling

PayloadDependenciesInstalling: WebhookPayload<dependencies.installing, EventDependenciesInstalling>

PayloadPipelineAborted

PayloadPipelineAborted: WebhookPayload<pipeline.aborted, EventPipelineAborted>

PayloadPipelineFinished

PayloadPipelineFinished: WebhookPayload<pipeline.finished, EventPipelineFinished>

PayloadPipelineStarted

PayloadPipelineStarted: WebhookPayload<pipeline.started, EventPipelineStarted>

PayloadProjectSynced

PayloadProjectSynced: WebhookPayload<project.synced, EventProjectSynced>

PayloadProjectSyncing

PayloadProjectSyncing: WebhookPayload<project.syncing, EventProjectSyncing>

PayloadTargetOutputArchived

PayloadTargetOutputArchived: WebhookPayload<target-output.archived, EventTargetOutputArchived>

PayloadTargetOutputArchiving

PayloadTargetOutputArchiving: WebhookPayload<target-output.archiving, EventTargetOutputArchiving>

PayloadTargetOutputCacheCheck

PayloadTargetOutputCacheCheck: WebhookPayload<target-output.cache-check, EventTargetOutputCacheCheck>

PayloadTargetOutputHydrated

PayloadTargetOutputHydrated: WebhookPayload<target-output.hydrated, EventTargetOutputHydrated>

PayloadTargetOutputHydrating

PayloadTargetOutputHydrating: WebhookPayload<target-output.hydrating, EventTargetOutputHydrating>

PayloadTargetRan

PayloadTargetRan: WebhookPayload<target.ran, EventTargetRan>

PayloadTargetRunning

PayloadTargetRunning: WebhookPayload<target.running, EventTargetRunning>

PayloadToolInstalled

PayloadToolInstalled: WebhookPayload<tool.installed, EventToolInstalled>

PayloadToolInstalling

PayloadToolInstalling: WebhookPayload<tool.installing, EventToolInstalling>

PayloadWorkspaceSynced

PayloadWorkspaceSynced: WebhookPayload<workspace.synced, EventWorkspaceSynced>

PayloadWorkspaceSyncing

PayloadWorkspaceSyncing: WebhookPayload<workspace.syncing, {}>

PlatformType

PlatformType: deno | node | rust | system | unknown

ProjectDependsOn

ProjectDependsOn: string | DependencyConfig

ProjectType

ProjectType: application | library | tool | unknown

TaskCommandArgs

TaskCommandArgs: null | string | string[]

TaskMergeStrategy

TaskMergeStrategy: append | prepend | replace

TaskOptionAffectedFiles

TaskOptionAffectedFiles: boolean | args | env

TaskOptionEnvFile

TaskOptionEnvFile: boolean | string

TaskOutputStyle

TaskOutputStyle: buffer | buffer-only-failure | hash | none | stream

TaskType

TaskType: build | run | test

TemplateVariable

TemplateVariableEnumValue

TemplateVariableEnumValue: string | TemplateVariableEnumValueConfig

VcsManager

VcsManager: git

VcsProvider

VcsProvider: bitbucket | github | gitlab | other

WorkspaceProjects

WorkspaceProjects: WorkspaceProjectsConfig | string[] | Record<string, string>
- - +npm license

Reusable TypeScript types for moon projects, tasks, and configurations.

Index

Interfaces

Type Aliases

Type Aliases

ActionNode

ActionStatus

ActionStatus: cached-from-remote | cached | failed-and-abort | failed | invalid | passed | running | skipped

BinEntry

BinEntry: string | BinConfig

CodeownersOrderBy

CodeownersOrderBy: file-source | project-name

DependencyScope

DependencyScope: build | development | peer | production | root

DependencySource

DependencySource: explicit | implicit

EventType

EventType: action.finished | action.started | dependencies.installed | dependencies.installing | pipeline.aborted | pipeline.finished | pipeline.started | project.synced | project.syncing | target-output.archived | target-output.archiving | target-output.cache-check | target-output.hydrated | target-output.hydrating | target.ran | target.running | tool.installed | tool.installing | workspace.synced | workspace.syncing

HasherOptimization

HasherOptimization: accuracy | performance

HasherWalkStrategy

HasherWalkStrategy: glob | vcs

LanguageType

LanguageType: bash | batch | go | javascript | php | python | ruby | rust | typescript | unknown

NodePackageManager

NodePackageManager: npm | pnpm | yarn

NodeProjectAliasFormat

NodeProjectAliasFormat: name-and-scope | name-only

NodeVersionFormat

NodeVersionFormat: file | link | star | version | version-caret | version-tilde | workspace | workspace-caret | workspace-tilde

NodeVersionManager

NodeVersionManager: nodenv | nvm

Nullable

Nullable<T>: { [ K in keyof T ]: T[K] | null }

Type parameters

  • T

OwnersPaths

OwnersPaths: string[] | Record<string, string[]>

PartialBinEntry

PartialBinEntry: string | PartialBinConfig

PartialOwnersPaths

PartialOwnersPaths: string[] | Record<string, string[]>

PartialProjectDependsOn

PartialProjectDependsOn: string | PartialDependencyConfig

PartialTaskCommandArgs

PartialTaskCommandArgs: null | string | string[]

PartialTemplateVariable

PartialTemplateVariableEnumValue

PartialTemplateVariableEnumValue: string | PartialTemplateVariableEnumValueConfig

PartialWorkspaceProjects

PartialWorkspaceProjects: PartialWorkspaceProjectsConfig | string[] | Record<string, string>

PayloadActionFinished

PayloadActionFinished: WebhookPayload<action.finished, EventActionFinished>

PayloadActionStarted

PayloadActionStarted: WebhookPayload<action.started, EventActionStarted>

PayloadDependenciesInstalled

PayloadDependenciesInstalled: WebhookPayload<dependencies.installed, EventDependenciesInstalled>

PayloadDependenciesInstalling

PayloadDependenciesInstalling: WebhookPayload<dependencies.installing, EventDependenciesInstalling>

PayloadPipelineAborted

PayloadPipelineAborted: WebhookPayload<pipeline.aborted, EventPipelineAborted>

PayloadPipelineFinished

PayloadPipelineFinished: WebhookPayload<pipeline.finished, EventPipelineFinished>

PayloadPipelineStarted

PayloadPipelineStarted: WebhookPayload<pipeline.started, EventPipelineStarted>

PayloadProjectSynced

PayloadProjectSynced: WebhookPayload<project.synced, EventProjectSynced>

PayloadProjectSyncing

PayloadProjectSyncing: WebhookPayload<project.syncing, EventProjectSyncing>

PayloadTargetOutputArchived

PayloadTargetOutputArchived: WebhookPayload<target-output.archived, EventTargetOutputArchived>

PayloadTargetOutputArchiving

PayloadTargetOutputArchiving: WebhookPayload<target-output.archiving, EventTargetOutputArchiving>

PayloadTargetOutputCacheCheck

PayloadTargetOutputCacheCheck: WebhookPayload<target-output.cache-check, EventTargetOutputCacheCheck>

PayloadTargetOutputHydrated

PayloadTargetOutputHydrated: WebhookPayload<target-output.hydrated, EventTargetOutputHydrated>

PayloadTargetOutputHydrating

PayloadTargetOutputHydrating: WebhookPayload<target-output.hydrating, EventTargetOutputHydrating>

PayloadTargetRan

PayloadTargetRan: WebhookPayload<target.ran, EventTargetRan>

PayloadTargetRunning

PayloadTargetRunning: WebhookPayload<target.running, EventTargetRunning>

PayloadToolInstalled

PayloadToolInstalled: WebhookPayload<tool.installed, EventToolInstalled>

PayloadToolInstalling

PayloadToolInstalling: WebhookPayload<tool.installing, EventToolInstalling>

PayloadWorkspaceSynced

PayloadWorkspaceSynced: WebhookPayload<workspace.synced, EventWorkspaceSynced>

PayloadWorkspaceSyncing

PayloadWorkspaceSyncing: WebhookPayload<workspace.syncing, {}>

PlatformType

PlatformType: deno | node | rust | system | unknown

ProjectDependsOn

ProjectDependsOn: string | DependencyConfig

ProjectType

ProjectType: application | library | tool | unknown

TaskCommandArgs

TaskCommandArgs: null | string | string[]

TaskMergeStrategy

TaskMergeStrategy: append | prepend | replace

TaskOptionAffectedFiles

TaskOptionAffectedFiles: boolean | args | env

TaskOptionEnvFile

TaskOptionEnvFile: boolean | string

TaskOutputStyle

TaskOutputStyle: buffer | buffer-only-failure | hash | none | stream

TaskType

TaskType: build | run | test

TemplateVariable

TemplateVariableEnumValue

TemplateVariableEnumValue: string | TemplateVariableEnumValueConfig

VcsManager

VcsManager: git

VcsProvider

VcsProvider: bitbucket | github | gitlab | other

WorkspaceProjects

WorkspaceProjects: WorkspaceProjectsConfig | string[] | Record<string, string>
+ + \ No newline at end of file diff --git a/api/types/interface/Action.html b/api/types/interface/Action.html index 56da4963621..f5ef7d0b12f 100644 --- a/api/types/interface/Action.html +++ b/api/types/interface/Action.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Action

Index

Properties

optionalallowFailure

allowFailure?: boolean

attempts

attempts: null | Attempt[]

createdAt

createdAt: string

duration

duration: null | Duration

error

error: null | string

finishedAt

finishedAt: null | string

flaky

flaky: boolean

label

label: null | string

nodeIndex

nodeIndex: number

startedAt

startedAt: null | string

status

status: ActionStatus
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionContext.html b/api/types/interface/ActionContext.html index e521746c44c..705320ae243 100644 --- a/api/types/interface/ActionContext.html +++ b/api/types/interface/ActionContext.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

ActionContext

Index

Properties

affectedOnly

affectedOnly: boolean

initialTargets

initialTargets: string[]

passthroughArgs

passthroughArgs: string[]

primaryTargets

primaryTargets: string[]

profile

profile: null | cpu | heap

targetStates

targetStates: Record<string, TargetState>

touchedFiles

touchedFiles: string[]

workspaceRoot

workspaceRoot: string
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeInstallDeps.html b/api/types/interface/ActionNodeInstallDeps.html index 78e472a24cf..9553eca46f1 100644 --- a/api/types/interface/ActionNodeInstallDeps.html +++ b/api/types/interface/ActionNodeInstallDeps.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeInstallProjectDeps.html b/api/types/interface/ActionNodeInstallProjectDeps.html index 4dc2cf5f310..4a41449e50c 100644 --- a/api/types/interface/ActionNodeInstallProjectDeps.html +++ b/api/types/interface/ActionNodeInstallProjectDeps.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeRunTask.html b/api/types/interface/ActionNodeRunTask.html index babb40f2955..c64b87fe5a6 100644 --- a/api/types/interface/ActionNodeRunTask.html +++ b/api/types/interface/ActionNodeRunTask.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeSetupTool.html b/api/types/interface/ActionNodeSetupTool.html index f69c383ae72..92da15fb3ec 100644 --- a/api/types/interface/ActionNodeSetupTool.html +++ b/api/types/interface/ActionNodeSetupTool.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeSyncProject.html b/api/types/interface/ActionNodeSyncProject.html index 51c8a8f67aa..0e91604e434 100644 --- a/api/types/interface/ActionNodeSyncProject.html +++ b/api/types/interface/ActionNodeSyncProject.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ActionNodeSyncWorkspace.html b/api/types/interface/ActionNodeSyncWorkspace.html index 9985f12d1bc..17c36005cad 100644 --- a/api/types/interface/ActionNodeSyncWorkspace.html +++ b/api/types/interface/ActionNodeSyncWorkspace.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Attempt.html b/api/types/interface/Attempt.html index a38a2466227..635a0a0319e 100644 --- a/api/types/interface/Attempt.html +++ b/api/types/interface/Attempt.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/BinConfig.html b/api/types/interface/BinConfig.html index 236b8497167..ec73af7154d 100644 --- a/api/types/interface/BinConfig.html +++ b/api/types/interface/BinConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/CodeownersConfig.html b/api/types/interface/CodeownersConfig.html index 77e8fe1d127..1f9ab53cdba 100644 --- a/api/types/interface/CodeownersConfig.html +++ b/api/types/interface/CodeownersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ConstraintsConfig.html b/api/types/interface/ConstraintsConfig.html index 455d459e648..3cf3bc268d9 100644 --- a/api/types/interface/ConstraintsConfig.html +++ b/api/types/interface/ConstraintsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/DenoConfig.html b/api/types/interface/DenoConfig.html index 49bc4ef69ca..fd54fe35838 100644 --- a/api/types/interface/DenoConfig.html +++ b/api/types/interface/DenoConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/DependencyConfig.html b/api/types/interface/DependencyConfig.html index a878ef4d6ba..da1f96e8fb4 100644 --- a/api/types/interface/DependencyConfig.html +++ b/api/types/interface/DependencyConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Duration.html b/api/types/interface/Duration.html index d4431734217..0208522ab76 100644 --- a/api/types/interface/Duration.html +++ b/api/types/interface/Duration.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventActionFinished.html b/api/types/interface/EventActionFinished.html index f5ec8fa5697..4b07b4a0487 100644 --- a/api/types/interface/EventActionFinished.html +++ b/api/types/interface/EventActionFinished.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventActionStarted.html b/api/types/interface/EventActionStarted.html index 4473a065678..48d670ff03a 100644 --- a/api/types/interface/EventActionStarted.html +++ b/api/types/interface/EventActionStarted.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventDependenciesInstalled.html b/api/types/interface/EventDependenciesInstalled.html index 46deac58d60..1e09cc05842 100644 --- a/api/types/interface/EventDependenciesInstalled.html +++ b/api/types/interface/EventDependenciesInstalled.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventDependenciesInstalling.html b/api/types/interface/EventDependenciesInstalling.html index 707a8e74170..6abdc43d121 100644 --- a/api/types/interface/EventDependenciesInstalling.html +++ b/api/types/interface/EventDependenciesInstalling.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventPipelineAborted.html b/api/types/interface/EventPipelineAborted.html index 8ee1f61603e..1cbad80db91 100644 --- a/api/types/interface/EventPipelineAborted.html +++ b/api/types/interface/EventPipelineAborted.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventPipelineFinished.html b/api/types/interface/EventPipelineFinished.html index 0575f773aa8..c152fd87988 100644 --- a/api/types/interface/EventPipelineFinished.html +++ b/api/types/interface/EventPipelineFinished.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventPipelineStarted.html b/api/types/interface/EventPipelineStarted.html index d6bf343356b..3aed8454966 100644 --- a/api/types/interface/EventPipelineStarted.html +++ b/api/types/interface/EventPipelineStarted.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventProjectSynced.html b/api/types/interface/EventProjectSynced.html index ad2a2e8a97d..764f2b799d3 100644 --- a/api/types/interface/EventProjectSynced.html +++ b/api/types/interface/EventProjectSynced.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventProjectSyncing.html b/api/types/interface/EventProjectSyncing.html index ea267c6987d..d5c21de3493 100644 --- a/api/types/interface/EventProjectSyncing.html +++ b/api/types/interface/EventProjectSyncing.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputArchived.html b/api/types/interface/EventTargetOutputArchived.html index 32bdfb26abd..c9cf9758614 100644 --- a/api/types/interface/EventTargetOutputArchived.html +++ b/api/types/interface/EventTargetOutputArchived.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputArchiving.html b/api/types/interface/EventTargetOutputArchiving.html index a7277e2b13c..c40786b78e3 100644 --- a/api/types/interface/EventTargetOutputArchiving.html +++ b/api/types/interface/EventTargetOutputArchiving.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputCacheCheck.html b/api/types/interface/EventTargetOutputCacheCheck.html index d24482135a6..ec9b62216fa 100644 --- a/api/types/interface/EventTargetOutputCacheCheck.html +++ b/api/types/interface/EventTargetOutputCacheCheck.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputHydrated.html b/api/types/interface/EventTargetOutputHydrated.html index a8197a69ea2..cbe80eddf23 100644 --- a/api/types/interface/EventTargetOutputHydrated.html +++ b/api/types/interface/EventTargetOutputHydrated.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetOutputHydrating.html b/api/types/interface/EventTargetOutputHydrating.html index 344836b40db..f67775119a7 100644 --- a/api/types/interface/EventTargetOutputHydrating.html +++ b/api/types/interface/EventTargetOutputHydrating.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetRan.html b/api/types/interface/EventTargetRan.html index ddc445a6967..5dbb4f66b54 100644 --- a/api/types/interface/EventTargetRan.html +++ b/api/types/interface/EventTargetRan.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventTargetRunning.html b/api/types/interface/EventTargetRunning.html index fa1797dff15..d92fa7fbafd 100644 --- a/api/types/interface/EventTargetRunning.html +++ b/api/types/interface/EventTargetRunning.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventToolInstalled.html b/api/types/interface/EventToolInstalled.html index 3ea1ea4f570..6b71ee1b087 100644 --- a/api/types/interface/EventToolInstalled.html +++ b/api/types/interface/EventToolInstalled.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventToolInstalling.html b/api/types/interface/EventToolInstalling.html index 94b35e623dd..4d64a612826 100644 --- a/api/types/interface/EventToolInstalling.html +++ b/api/types/interface/EventToolInstalling.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/EventWorkspaceSynced.html b/api/types/interface/EventWorkspaceSynced.html index be190ed2db3..e9208dc13cf 100644 --- a/api/types/interface/EventWorkspaceSynced.html +++ b/api/types/interface/EventWorkspaceSynced.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/ExperimentsConfig.html b/api/types/interface/ExperimentsConfig.html index f58442cf0c5..dd0b87d222d 100644 --- a/api/types/interface/ExperimentsConfig.html +++ b/api/types/interface/ExperimentsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/FileGroup.html b/api/types/interface/FileGroup.html index 072db815cfe..1e2d6daa898 100644 --- a/api/types/interface/FileGroup.html +++ b/api/types/interface/FileGroup.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/GeneratorConfig.html b/api/types/interface/GeneratorConfig.html index 2c173ed59ea..6140f9f48c9 100644 --- a/api/types/interface/GeneratorConfig.html +++ b/api/types/interface/GeneratorConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/HasherConfig.html b/api/types/interface/HasherConfig.html index 24783518f4b..44b13225509 100644 --- a/api/types/interface/HasherConfig.html +++ b/api/types/interface/HasherConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/InheritedTasksConfig.html b/api/types/interface/InheritedTasksConfig.html index 9cce8566502..46349f9010d 100644 --- a/api/types/interface/InheritedTasksConfig.html +++ b/api/types/interface/InheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

InheritedTasksConfig

Index

Properties

$schema

$schema: string = 'https://moonrepo.dev/schemas/tasks.json'

extends

extends: null | string

fileGroups

fileGroups: Record<string, string[]>

implicitDeps

implicitDeps: string[]

implicitInputs

implicitInputs: string[]

tasks

tasks: Record<string, TaskConfig>
- - + + \ No newline at end of file diff --git a/api/types/interface/NodeConfig.html b/api/types/interface/NodeConfig.html index d50d62b7020..35f37c0f4bd 100644 --- a/api/types/interface/NodeConfig.html +++ b/api/types/interface/NodeConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

NodeConfig

Index

Properties

addEnginesConstraint

addEnginesConstraint: boolean = true

aliasPackageNames

aliasPackageNames: NodeProjectAliasFormat

binExecArgs

binExecArgs: string[]

dedupeOnLockfileChange

dedupeOnLockfileChange: boolean = true

dependencyVersionFormat

dependencyVersionFormat: NodeVersionFormat

inferTasksFromScripts

inferTasksFromScripts: boolean

npm

packageManager

packageManager: NodePackageManager

plugin

plugin: null | string

pnpm

pnpm: null | PnpmConfig

syncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies: boolean = true

syncVersionManagerConfig

syncVersionManagerConfig: null | NodeVersionManager

version

version: null | string

yarn

yarn: null | YarnConfig
- - + + \ No newline at end of file diff --git a/api/types/interface/NotifierConfig.html b/api/types/interface/NotifierConfig.html index 19a72b66de2..f015e36a9ee 100644 --- a/api/types/interface/NotifierConfig.html +++ b/api/types/interface/NotifierConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/NpmConfig.html b/api/types/interface/NpmConfig.html index f2c3fdf59d5..05882d32e31 100644 --- a/api/types/interface/NpmConfig.html +++ b/api/types/interface/NpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/OwnersConfig.html b/api/types/interface/OwnersConfig.html index b2c70b9652c..c9c517e04ef 100644 --- a/api/types/interface/OwnersConfig.html +++ b/api/types/interface/OwnersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialBinConfig.html b/api/types/interface/PartialBinConfig.html index 3464ce99075..00ac8e7ef88 100644 --- a/api/types/interface/PartialBinConfig.html +++ b/api/types/interface/PartialBinConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialCodeownersConfig.html b/api/types/interface/PartialCodeownersConfig.html index 80750e6417c..db47ff0fb50 100644 --- a/api/types/interface/PartialCodeownersConfig.html +++ b/api/types/interface/PartialCodeownersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialConstraintsConfig.html b/api/types/interface/PartialConstraintsConfig.html index 8b44ae57cc3..476a91ae609 100644 --- a/api/types/interface/PartialConstraintsConfig.html +++ b/api/types/interface/PartialConstraintsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialDenoConfig.html b/api/types/interface/PartialDenoConfig.html index 0badff223c0..8e5e5bdac4d 100644 --- a/api/types/interface/PartialDenoConfig.html +++ b/api/types/interface/PartialDenoConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialDependencyConfig.html b/api/types/interface/PartialDependencyConfig.html index 31a39c11db4..3e301b87836 100644 --- a/api/types/interface/PartialDependencyConfig.html +++ b/api/types/interface/PartialDependencyConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialExperimentsConfig.html b/api/types/interface/PartialExperimentsConfig.html index ebf5fae713f..b0f4c0109c8 100644 --- a/api/types/interface/PartialExperimentsConfig.html +++ b/api/types/interface/PartialExperimentsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialGeneratorConfig.html b/api/types/interface/PartialGeneratorConfig.html index 86cc186c98c..b759a9ece7f 100644 --- a/api/types/interface/PartialGeneratorConfig.html +++ b/api/types/interface/PartialGeneratorConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialHasherConfig.html b/api/types/interface/PartialHasherConfig.html index 1eedf3e8705..64ac681b066 100644 --- a/api/types/interface/PartialHasherConfig.html +++ b/api/types/interface/PartialHasherConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialHasherConfig

Index

Properties

optionalbatchSize

batchSize?: null | number = null | number

optionalignoreMissingPatterns

ignoreMissingPatterns?: null | string[]

optionalignorePatterns

ignorePatterns?: null | string[]

optionaloptimization

optimization?: null | HasherOptimization

optionalwalkStrategy

walkStrategy?: null | HasherWalkStrategy

optionalwarnOnMissingInputs

warnOnMissingInputs?: null | boolean = null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialInheritedTasksConfig.html b/api/types/interface/PartialInheritedTasksConfig.html index 66180361c1d..18a57c3d6d8 100644 --- a/api/types/interface/PartialInheritedTasksConfig.html +++ b/api/types/interface/PartialInheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialInheritedTasksConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalextends

extends?: null | string

optionalfileGroups

fileGroups?: null | Record<string, string[]>

optionalimplicitDeps

implicitDeps?: null | string[]

optionalimplicitInputs

implicitInputs?: null | string[]

optionaltasks

tasks?: null | Record<string, PartialTaskConfig>
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialNodeConfig.html b/api/types/interface/PartialNodeConfig.html index a825079488a..d1b24cbac7c 100644 --- a/api/types/interface/PartialNodeConfig.html +++ b/api/types/interface/PartialNodeConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialNodeConfig

Index

Properties

optionaladdEnginesConstraint

addEnginesConstraint?: null | boolean = null | boolean

optionalaliasPackageNames

aliasPackageNames?: null | NodeProjectAliasFormat

optionalbinExecArgs

binExecArgs?: null | string[]

optionaldedupeOnLockfileChange

dedupeOnLockfileChange?: null | boolean = null | boolean

optionaldependencyVersionFormat

dependencyVersionFormat?: null | NodeVersionFormat

optionalinferTasksFromScripts

inferTasksFromScripts?: null | boolean

optionalnpm

npm?: null | PartialNpmConfig

optionalpackageManager

packageManager?: null | NodePackageManager

optionalplugin

plugin?: null | string

optionalpnpm

pnpm?: null | PartialPnpmConfig

optionalsyncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies?: null | boolean = null | boolean

optionalsyncVersionManagerConfig

syncVersionManagerConfig?: null | NodeVersionManager

optionalversion

version?: null | string

optionalyarn

yarn?: null | PartialYarnConfig
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialNotifierConfig.html b/api/types/interface/PartialNotifierConfig.html index c72bdc3d45b..a467c5a0282 100644 --- a/api/types/interface/PartialNotifierConfig.html +++ b/api/types/interface/PartialNotifierConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialNpmConfig.html b/api/types/interface/PartialNpmConfig.html index 97e34f7f740..72569cb28b9 100644 --- a/api/types/interface/PartialNpmConfig.html +++ b/api/types/interface/PartialNpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialOwnersConfig.html b/api/types/interface/PartialOwnersConfig.html index 97e4fde6b7b..b54e44b92df 100644 --- a/api/types/interface/PartialOwnersConfig.html +++ b/api/types/interface/PartialOwnersConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialPnpmConfig.html b/api/types/interface/PartialPnpmConfig.html index 2ecd376d008..93874985497 100644 --- a/api/types/interface/PartialPnpmConfig.html +++ b/api/types/interface/PartialPnpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectConfig.html b/api/types/interface/PartialProjectConfig.html index 329b299e17b..2634af76b87 100644 --- a/api/types/interface/PartialProjectConfig.html +++ b/api/types/interface/PartialProjectConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialProjectConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionaldependsOn

dependsOn?: null | PartialProjectDependsOn[]

optionalenv

env?: null | Record<string, string>

optionalfileGroups

fileGroups?: null | Record<string, string[]>

optionallanguage

language?: null | LanguageType

optionalowners

owners?: null | PartialOwnersConfig

optionalplatform

platform?: null | PlatformType

optionalproject

optionaltags

tags?: null | string[]

optionaltasks

tasks?: null | Record<string, PartialTaskConfig>

optionaltoolchain

optionaltype

type?: null | ProjectType

optionalworkspace

- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectMetadataConfig.html b/api/types/interface/PartialProjectMetadataConfig.html index bb5996083c8..7a20036a2d9 100644 --- a/api/types/interface/PartialProjectMetadataConfig.html +++ b/api/types/interface/PartialProjectMetadataConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectToolchainCommonToolConfig.html b/api/types/interface/PartialProjectToolchainCommonToolConfig.html index b07dbc4bc39..822da9bdcbb 100644 --- a/api/types/interface/PartialProjectToolchainCommonToolConfig.html +++ b/api/types/interface/PartialProjectToolchainCommonToolConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectToolchainConfig.html b/api/types/interface/PartialProjectToolchainConfig.html index 3f21ee3cd76..8ab13282728 100644 --- a/api/types/interface/PartialProjectToolchainConfig.html +++ b/api/types/interface/PartialProjectToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectToolchainTypeScriptConfig.html b/api/types/interface/PartialProjectToolchainTypeScriptConfig.html index 9deaf70c269..5b712ae1305 100644 --- a/api/types/interface/PartialProjectToolchainTypeScriptConfig.html +++ b/api/types/interface/PartialProjectToolchainTypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialProjectToolchainTypeScriptConfig

Index

Properties

optionaldisabled

disabled?: null | boolean

optionalrouteOutDirToCache

routeOutDirToCache?: null | boolean

optionalsyncProjectReferences

syncProjectReferences?: null | boolean

optionalsyncProjectReferencesToPaths

syncProjectReferencesToPaths?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectWorkspaceConfig.html b/api/types/interface/PartialProjectWorkspaceConfig.html index 12d50c21274..8ebc3f7224d 100644 --- a/api/types/interface/PartialProjectWorkspaceConfig.html +++ b/api/types/interface/PartialProjectWorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html b/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html index 0909e0f3359..939d6cbc707 100644 --- a/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html +++ b/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialRunnerConfig.html b/api/types/interface/PartialRunnerConfig.html index 4d68329d783..ceca2cfee11 100644 --- a/api/types/interface/PartialRunnerConfig.html +++ b/api/types/interface/PartialRunnerConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialRunnerConfig

Index

Properties

optionalarchivableTargets

archivableTargets?: null | string[]

optionalcacheLifetime

cacheLifetime?: null | string = null | string

optionalinheritColorsForPipedTasks

inheritColorsForPipedTasks?: null | boolean = null | boolean

optionallogRunningCommand

logRunningCommand?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialRustConfig.html b/api/types/interface/PartialRustConfig.html index f27d3b4aba3..0e6859309bf 100644 --- a/api/types/interface/PartialRustConfig.html +++ b/api/types/interface/PartialRustConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTaskConfig.html b/api/types/interface/PartialTaskConfig.html index 15503b46283..4b428b02023 100644 --- a/api/types/interface/PartialTaskConfig.html +++ b/api/types/interface/PartialTaskConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialTaskConfig

Index

Properties

optionalargs

optionalcommand

optionaldeps

deps?: null | string[]

optionalenv

env?: null | Record<string, string>

optionalextends

extends?: null | string

optionalinputs

inputs?: null | string[]

optionallocal

local?: null | boolean

optionaloptions

options?: null | PartialTaskOptionsConfig

optionaloutputs

outputs?: null | string[]

optionalplatform

platform?: null | PlatformType

optionaltype

type?: null | TaskType
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTaskOptionsConfig.html b/api/types/interface/PartialTaskOptionsConfig.html index d3bc1cb0d7b..2bd947cbd82 100644 --- a/api/types/interface/PartialTaskOptionsConfig.html +++ b/api/types/interface/PartialTaskOptionsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialTaskOptionsConfig

Index

Properties

optionalaffectedFiles

affectedFiles?: null | TaskOptionAffectedFiles

optionalallowFailure

allowFailure?: null | boolean

optionalcache

cache?: null | boolean

optionalenvFile

envFile?: null | TaskOptionEnvFile

optionalinteractive

interactive?: null | boolean

optionalmergeArgs

mergeArgs?: null | TaskMergeStrategy

optionalmergeDeps

mergeDeps?: null | TaskMergeStrategy

optionalmergeEnv

mergeEnv?: null | TaskMergeStrategy

optionalmergeInputs

mergeInputs?: null | TaskMergeStrategy

optionalmergeOutputs

mergeOutputs?: null | TaskMergeStrategy

optionaloutputStyle

outputStyle?: null | TaskOutputStyle

optionalpersistent

persistent?: null | boolean

optionalretryCount

retryCount?: null | number

optionalrunDepsInParallel

runDepsInParallel?: null | boolean

optionalrunFromWorkspaceRoot

runFromWorkspaceRoot?: null | boolean

optionalrunInCI

runInCI?: null | boolean

optionalshell

shell?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateConfig.html b/api/types/interface/PartialTemplateConfig.html index ca1d52ec869..bbe7b88e914 100644 --- a/api/types/interface/PartialTemplateConfig.html +++ b/api/types/interface/PartialTemplateConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateFrontmatterConfig.html b/api/types/interface/PartialTemplateFrontmatterConfig.html index 0b33d5d6840..1220c3f8cea 100644 --- a/api/types/interface/PartialTemplateFrontmatterConfig.html +++ b/api/types/interface/PartialTemplateFrontmatterConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableBoolSetting.html b/api/types/interface/PartialTemplateVariableBoolSetting.html index 5798bf0fb98..7fa2db433a0 100644 --- a/api/types/interface/PartialTemplateVariableBoolSetting.html +++ b/api/types/interface/PartialTemplateVariableBoolSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableEnumSetting.html b/api/types/interface/PartialTemplateVariableEnumSetting.html index 2687c82896b..7e1fcfac6ea 100644 --- a/api/types/interface/PartialTemplateVariableEnumSetting.html +++ b/api/types/interface/PartialTemplateVariableEnumSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableEnumValueConfig.html b/api/types/interface/PartialTemplateVariableEnumValueConfig.html index 7a80621b991..9ea1ec80837 100644 --- a/api/types/interface/PartialTemplateVariableEnumValueConfig.html +++ b/api/types/interface/PartialTemplateVariableEnumValueConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableNumberSetting.html b/api/types/interface/PartialTemplateVariableNumberSetting.html index 640546ee4c8..aac1f575298 100644 --- a/api/types/interface/PartialTemplateVariableNumberSetting.html +++ b/api/types/interface/PartialTemplateVariableNumberSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTemplateVariableStringSetting.html b/api/types/interface/PartialTemplateVariableStringSetting.html index 40bb014f278..7e87ceab22e 100644 --- a/api/types/interface/PartialTemplateVariableStringSetting.html +++ b/api/types/interface/PartialTemplateVariableStringSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialToolchainConfig.html b/api/types/interface/PartialToolchainConfig.html index c4655a7ceb7..c80f57e0f4c 100644 --- a/api/types/interface/PartialToolchainConfig.html +++ b/api/types/interface/PartialToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialToolchainConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionaldeno

deno?: null | PartialDenoConfig

optionalextends

extends?: null | string

optionalnode

node?: null | PartialNodeConfig

optionalrust

rust?: null | PartialRustConfig

optionaltypescript

typescript?: null | PartialTypeScriptConfig
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialTypeScriptConfig.html b/api/types/interface/PartialTypeScriptConfig.html index 427d35c8d2c..becc8f91d37 100644 --- a/api/types/interface/PartialTypeScriptConfig.html +++ b/api/types/interface/PartialTypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialTypeScriptConfig

Index

Properties

optionalcreateMissingConfig

createMissingConfig?: null | boolean = null | boolean

optionalprojectConfigFileName

projectConfigFileName?: null | string = null | string

optionalrootConfigFileName

rootConfigFileName?: null | string = null | string

optionalrootOptionsConfigFileName

rootOptionsConfigFileName?: null | string = null | string

optionalrouteOutDirToCache

routeOutDirToCache?: null | boolean

optionalsyncProjectReferences

syncProjectReferences?: null | boolean = null | boolean

optionalsyncProjectReferencesToPaths

syncProjectReferencesToPaths?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialVcsConfig.html b/api/types/interface/PartialVcsConfig.html index 1995021757e..2ef7a9b8c9a 100644 --- a/api/types/interface/PartialVcsConfig.html +++ b/api/types/interface/PartialVcsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialVcsConfig

Index

Properties

optionaldefaultBranch

defaultBranch?: null | string = null | string

optionalhooks

hooks?: null | Record<string, string[]>

optionalmanager

manager?: null | git

optionalprovider

provider?: null | VcsProvider

optionalremoteCandidates

remoteCandidates?: null | string[]

optionalsyncHooks

syncHooks?: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialWorkspaceConfig.html b/api/types/interface/PartialWorkspaceConfig.html index af6672799f9..3a3012a5e4d 100644 --- a/api/types/interface/PartialWorkspaceConfig.html +++ b/api/types/interface/PartialWorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

PartialWorkspaceConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalcodeowners

codeowners?: null | PartialCodeownersConfig

optionalconstraints

constraints?: null | PartialConstraintsConfig

optionalexperiments

experiments?: null | PartialExperimentsConfig

optionalextends

extends?: null | string

optionalgenerator

generator?: null | PartialGeneratorConfig

optionalhasher

hasher?: null | PartialHasherConfig

optionalnotifier

notifier?: null | PartialNotifierConfig

optionalprojects

projects?: null | PartialWorkspaceProjects

optionalrunner

runner?: null | PartialRunnerConfig

optionaltelemetry

telemetry?: null | boolean = null | boolean

optionalvcs

vcs?: null | PartialVcsConfig

optionalversionConstraint

versionConstraint?: null | string
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialWorkspaceProjectsConfig.html b/api/types/interface/PartialWorkspaceProjectsConfig.html index 226f1498e9f..5d34bc766b2 100644 --- a/api/types/interface/PartialWorkspaceProjectsConfig.html +++ b/api/types/interface/PartialWorkspaceProjectsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PartialYarnConfig.html b/api/types/interface/PartialYarnConfig.html index 2381cc179ce..d08ba3f6064 100644 --- a/api/types/interface/PartialYarnConfig.html +++ b/api/types/interface/PartialYarnConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/PnpmConfig.html b/api/types/interface/PnpmConfig.html index 0dcfd76da5d..81a172242c2 100644 --- a/api/types/interface/PnpmConfig.html +++ b/api/types/interface/PnpmConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Project.html b/api/types/interface/Project.html index 740cabf2032..a0e852b18ab 100644 --- a/api/types/interface/Project.html +++ b/api/types/interface/Project.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Project

Index

Properties

alias

alias: null | string

config

dependencies

dependencies: Record<string, DependencyConfig>

fileGroups

fileGroups: Record<string, FileGroup>

id

id: string

inherited

inherited: { config: InheritedTasksConfig; layers: Record<string, PartialInheritedTasksConfig>; order: string[] }

language

language: LanguageType

platform

platform: PlatformType

root

root: string

source

source: string

tasks

tasks: Record<string, Task>

type

- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectConfig.html b/api/types/interface/ProjectConfig.html index 28201201691..f3a77469e65 100644 --- a/api/types/interface/ProjectConfig.html +++ b/api/types/interface/ProjectConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

ProjectConfig

Index

Properties

$schema

$schema: string = 'https://moonrepo.dev/schemas/project.json'

dependsOn

dependsOn: ProjectDependsOn[]

env

env: Record<string, string>

fileGroups

fileGroups: Record<string, string[]>

language

language: LanguageType

owners

owners: OwnersConfig

platform

platform: null | PlatformType

project

project: null | ProjectMetadataConfig

tags

tags: string[]

tasks

tasks: Record<string, TaskConfig>

toolchain

type

workspace

- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectMetadataConfig.html b/api/types/interface/ProjectMetadataConfig.html index fb19d3299bb..9d2b41c0a88 100644 --- a/api/types/interface/ProjectMetadataConfig.html +++ b/api/types/interface/ProjectMetadataConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectToolchainCommonToolConfig.html b/api/types/interface/ProjectToolchainCommonToolConfig.html index 23be174b11d..71d128434ec 100644 --- a/api/types/interface/ProjectToolchainCommonToolConfig.html +++ b/api/types/interface/ProjectToolchainCommonToolConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectToolchainConfig.html b/api/types/interface/ProjectToolchainConfig.html index a7be8b8a0b3..1875354c846 100644 --- a/api/types/interface/ProjectToolchainConfig.html +++ b/api/types/interface/ProjectToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectToolchainTypeScriptConfig.html b/api/types/interface/ProjectToolchainTypeScriptConfig.html index 5ae28fb8182..7979294bc3a 100644 --- a/api/types/interface/ProjectToolchainTypeScriptConfig.html +++ b/api/types/interface/ProjectToolchainTypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectWorkspaceConfig.html b/api/types/interface/ProjectWorkspaceConfig.html index bdd37046d48..275c9ca1431 100644 --- a/api/types/interface/ProjectWorkspaceConfig.html +++ b/api/types/interface/ProjectWorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html b/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html index 6e76f9f96c8..0939ffe4a5b 100644 --- a/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html +++ b/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ProviderEnvironment.html b/api/types/interface/ProviderEnvironment.html index 02524a080bf..3da87a86d7d 100644 --- a/api/types/interface/ProviderEnvironment.html +++ b/api/types/interface/ProviderEnvironment.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/RunReport.html b/api/types/interface/RunReport.html index 3974302f3e0..12dc2e1fd65 100644 --- a/api/types/interface/RunReport.html +++ b/api/types/interface/RunReport.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

RunReport

Index

Properties

actions

actions: Action[]

comparisonEstimate

comparisonEstimate: { duration: Duration; gain: null | Duration; loss: null | Duration; percent: number; tasks: Record<string, { count: number; total: Duration }> }

context

context: ActionContext

duration

duration: Duration

optionalestimatedSavings

estimatedSavings?: null | Duration

optionalprojectedDuration

projectedDuration?: Duration
- - + + \ No newline at end of file diff --git a/api/types/interface/RunnerConfig.html b/api/types/interface/RunnerConfig.html index 32709609cb1..2bd94e6dfe9 100644 --- a/api/types/interface/RunnerConfig.html +++ b/api/types/interface/RunnerConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Runtime.html b/api/types/interface/Runtime.html index 386f561651b..1c21186b8b3 100644 --- a/api/types/interface/Runtime.html +++ b/api/types/interface/Runtime.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/RustConfig.html b/api/types/interface/RustConfig.html index 194ba5fccf5..b6ebf6fda56 100644 --- a/api/types/interface/RustConfig.html +++ b/api/types/interface/RustConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TargetState.html b/api/types/interface/TargetState.html index a7ff32f7d82..d0ffb8f9a92 100644 --- a/api/types/interface/TargetState.html +++ b/api/types/interface/TargetState.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/Task.html b/api/types/interface/Task.html index f03db1896c4..3e762cd0125 100644 --- a/api/types/interface/Task.html +++ b/api/types/interface/Task.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

Task

Index

Properties

args

args: string[]

command

command: string

deps

deps: string[]

env

env: Record<string, string>

id

id: string

inputFiles

inputFiles: string[]

inputGlobs

inputGlobs: string[]

inputVars

inputVars: string[]

inputs

inputs: string[]

options

options: TaskOptions

outputFiles

outputFiles: string[]

outputGlobs

outputGlobs: string[]

outputs

outputs: string[]

platform

platform: PlatformType

target

target: string

type

type: TaskType
- - + + \ No newline at end of file diff --git a/api/types/interface/TaskConfig.html b/api/types/interface/TaskConfig.html index bc83b6c2fd4..7a7d12934bc 100644 --- a/api/types/interface/TaskConfig.html +++ b/api/types/interface/TaskConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TaskConfig

Index

Properties

args

command

deps

deps: string[]

env

env: Record<string, string>

extends

extends: null | string

inputs

inputs: null | string[]

local

local: null | boolean

options

outputs

outputs: null | string[]

platform

platform: PlatformType

type

type: null | TaskType
- - + + \ No newline at end of file diff --git a/api/types/interface/TaskOptions.html b/api/types/interface/TaskOptions.html index 4152fc47246..92503aa77b5 100644 --- a/api/types/interface/TaskOptions.html +++ b/api/types/interface/TaskOptions.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TaskOptions

Index

Properties

affectedFiles

affectedFiles: boolean | args | env

cache

cache: boolean

envFile

envFile: null | string

mergeArgs

mergeDeps

mergeEnv

mergeInputs

mergeInputs: TaskMergeStrategy

mergeOutputs

mergeOutputs: TaskMergeStrategy

outputStyle

outputStyle: null | TaskOutputStyle

persistent

persistent: boolean

retryCount

retryCount: number

runDepsInParallel

runDepsInParallel: boolean

runFromWorkspaceRoot

runFromWorkspaceRoot: boolean

runInCI

runInCI: boolean

shell

shell: boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/TaskOptionsConfig.html b/api/types/interface/TaskOptionsConfig.html index 4464276f0cb..18e23b55433 100644 --- a/api/types/interface/TaskOptionsConfig.html +++ b/api/types/interface/TaskOptionsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TaskOptionsConfig

Index

Properties

affectedFiles

affectedFiles: null | TaskOptionAffectedFiles

allowFailure

allowFailure: null | boolean

cache

cache: null | boolean

envFile

envFile: null | TaskOptionEnvFile

interactive

interactive: null | boolean

mergeArgs

mergeArgs: null | TaskMergeStrategy

mergeDeps

mergeDeps: null | TaskMergeStrategy

mergeEnv

mergeEnv: null | TaskMergeStrategy

mergeInputs

mergeInputs: null | TaskMergeStrategy

mergeOutputs

mergeOutputs: null | TaskMergeStrategy

outputStyle

outputStyle: null | TaskOutputStyle

persistent

persistent: null | boolean

retryCount

retryCount: null | number

runDepsInParallel

runDepsInParallel: null | boolean

runFromWorkspaceRoot

runFromWorkspaceRoot: null | boolean

runInCI

runInCI: null | boolean

shell

shell: null | boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateConfig.html b/api/types/interface/TemplateConfig.html index 268076e7356..29e99b4ddd5 100644 --- a/api/types/interface/TemplateConfig.html +++ b/api/types/interface/TemplateConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateFrontmatterConfig.html b/api/types/interface/TemplateFrontmatterConfig.html index e33a493361a..59196264a5e 100644 --- a/api/types/interface/TemplateFrontmatterConfig.html +++ b/api/types/interface/TemplateFrontmatterConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableBoolSetting.html b/api/types/interface/TemplateVariableBoolSetting.html index 28603889605..62723174360 100644 --- a/api/types/interface/TemplateVariableBoolSetting.html +++ b/api/types/interface/TemplateVariableBoolSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableEnumSetting.html b/api/types/interface/TemplateVariableEnumSetting.html index 69b5d52c608..e6fef9de1a2 100644 --- a/api/types/interface/TemplateVariableEnumSetting.html +++ b/api/types/interface/TemplateVariableEnumSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableEnumValueConfig.html b/api/types/interface/TemplateVariableEnumValueConfig.html index 145bf8b1ab3..b6d0c3d6520 100644 --- a/api/types/interface/TemplateVariableEnumValueConfig.html +++ b/api/types/interface/TemplateVariableEnumValueConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableNumberSetting.html b/api/types/interface/TemplateVariableNumberSetting.html index e4e2e02076f..56a35a5aeaf 100644 --- a/api/types/interface/TemplateVariableNumberSetting.html +++ b/api/types/interface/TemplateVariableNumberSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TemplateVariableStringSetting.html b/api/types/interface/TemplateVariableStringSetting.html index 2e840e1ebb4..6605a19af7d 100644 --- a/api/types/interface/TemplateVariableStringSetting.html +++ b/api/types/interface/TemplateVariableStringSetting.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/ToolchainConfig.html b/api/types/interface/ToolchainConfig.html index 6880e34c549..300ba2619fa 100644 --- a/api/types/interface/ToolchainConfig.html +++ b/api/types/interface/ToolchainConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/TypeScriptConfig.html b/api/types/interface/TypeScriptConfig.html index b0f035ecb42..d7703f97767 100644 --- a/api/types/interface/TypeScriptConfig.html +++ b/api/types/interface/TypeScriptConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

TypeScriptConfig

Index

Properties

createMissingConfig

createMissingConfig: boolean = true

projectConfigFileName

projectConfigFileName: string = 'tsconfig.json'

rootConfigFileName

rootConfigFileName: string = 'tsconfig.json'

rootOptionsConfigFileName

rootOptionsConfigFileName: string = 'tsconfig.options.json'

routeOutDirToCache

routeOutDirToCache: boolean

syncProjectReferences

syncProjectReferences: boolean = true

syncProjectReferencesToPaths

syncProjectReferencesToPaths: boolean
- - + + \ No newline at end of file diff --git a/api/types/interface/VcsConfig.html b/api/types/interface/VcsConfig.html index 468754a0883..7c499278e0f 100644 --- a/api/types/interface/VcsConfig.html +++ b/api/types/interface/VcsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/WebhookPayload.html b/api/types/interface/WebhookPayload.html index ba9b50d9741..bcaf13de955 100644 --- a/api/types/interface/WebhookPayload.html +++ b/api/types/interface/WebhookPayload.html @@ -13,13 +13,13 @@ - - + +
-
Skip to main content
- - +
Skip to main content
+ + \ No newline at end of file diff --git a/api/types/interface/WorkspaceConfig.html b/api/types/interface/WorkspaceConfig.html index 7c70b7ae5ac..93e5de9575d 100644 --- a/api/types/interface/WorkspaceConfig.html +++ b/api/types/interface/WorkspaceConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content

WorkspaceConfig

Index

Properties

$schema

$schema: string = 'https://moonrepo.dev/schemas/workspace.json'

codeowners

codeowners: CodeownersConfig

constraints

constraints: ConstraintsConfig

experiments

experiments: ExperimentsConfig

extends

extends: null | string

generator

generator: GeneratorConfig

hasher

hasher: HasherConfig

notifier

notifier: NotifierConfig

projects

runner

runner: RunnerConfig

telemetry

telemetry: boolean = true

vcs

versionConstraint

versionConstraint: null | string
- - + + \ No newline at end of file diff --git a/api/types/interface/WorkspaceProjectsConfig.html b/api/types/interface/WorkspaceProjectsConfig.html index 689283ec7a4..a8fc0366b5d 100644 --- a/api/types/interface/WorkspaceProjectsConfig.html +++ b/api/types/interface/WorkspaceProjectsConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/api/types/interface/YarnConfig.html b/api/types/interface/YarnConfig.html index a7f25ded1dd..b73bb30581a 100644 --- a/api/types/interface/YarnConfig.html +++ b/api/types/interface/YarnConfig.html @@ -13,13 +13,13 @@ - - + +
Skip to main content
- - + + \ No newline at end of file diff --git a/assets/js/0034bcd6.07008b68.js b/assets/js/0034bcd6.07008b68.js deleted file mode 100644 index 9defa153f8b..00000000000 --- a/assets/js/0034bcd6.07008b68.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7424],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=r,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||l;return n?a.createElement(g,o(o({ref:t},p),{},{components:n})):a.createElement(g,o({ref:t},p))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var c=2;c{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const c="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:c}=e;const u=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(m(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:g,onClick:d},o,{className:(0,l.Z)("tabs__item",p,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",c)},r.createElement(u,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function c(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=c(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=u({queryString:n,groupId:r}),[g,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),f=(()=>{const e=m??g;return p({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),v(e)}),[d,v,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function c(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},88297:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),l=(n(36642),n(27457),n(32189));const o={title:"SvelteKit example",sidebar_label:"SvelteKit"},i=void 0,s={unversionedId:"guides/examples/sveltekit",id:"guides/examples/sveltekit",title:"SvelteKit example",description:"SvelteKit is built on Svelte, a UI framework that",source:"@site/docs/guides/examples/sveltekit.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/sveltekit",permalink:"/docs/guides/examples/sveltekit",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/sveltekit.mdx",tags:[],version:"current",frontMatter:{title:"SvelteKit example",sidebar_label:"SvelteKit"},sidebar:"guides",previous:{title:"Storybook",permalink:"/docs/guides/examples/storybook"},next:{title:"TypeScript",permalink:"/docs/guides/examples/typescript"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/sveltekit",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://kit.svelte.dev"},"SvelteKit")," is built on ",(0,r.kt)("a",{parentName:"p",href:"https://svelte.dev"},"Svelte"),", a UI framework that\nuses a compiler to let you write breathtakingly concise components that do minimal work in the\nbrowser, using languages you already know \u2014 HTML, CSS and JavaScript. It's a love letter to web\ndevelopment."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npm create svelte@latest \n")),(0,r.kt)("p",null,"You will be prompted to choose between select templates, TypeScript, ESLint, Prettier, Playwright\nand Vitest among other options. moon supports and has guides for many of these tools."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"We highly suggest reading our documentation on ",(0,r.kt)("a",{parentName:"p",href:"./vite"},"using Vite (and Vitest) with moon"),",\n",(0,r.kt)("a",{parentName:"p",href:"./eslint"},"using ESLint with moon")," and ",(0,r.kt)("a",{parentName:"p",href:"./prettier"},"using Prettier with moon")," for a more holistic\nview.")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since SvelteKit is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting SvelteKit tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/sveltekit"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"# Inherit tasks from the `sveltekit` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['sveltekit']\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"SvelteKit provides an option to setup ESLint along with your project, with moon you can use a\n",(0,r.kt)("a",{parentName:"p",href:"./eslint"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"lint")," task"),". We encourage using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task for consistency across all\nprojects within the repository. With this approach, the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint")," command itself will be ran and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"svelte3")," rules will still be used."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n # Extends the top-level lint\n lint:\n args:\n - '--ext'\n - '.ts,.svelte'\n")),(0,r.kt)("p",null,"Be sure to enable the Svelte parser and plugin in a project local ESLint configuration file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.cjs"',title:'".eslintrc.cjs"'},"module.exports = {\n plugins: ['svelte3'],\n ignorePatterns: ['*.cjs'],\n settings: {\n 'svelte3/typescript': () => require('typescript'),\n },\n overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],\n};\n")),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"SvelteKit also has built-in support for TypeScript, but has similar caveats to the\n",(0,r.kt)("a",{parentName:"p",href:"#eslint-integration"},"ESLint integration"),". TypeScript itself is a bit involved, so we suggest\nreading the official ",(0,r.kt)("a",{parentName:"p",href:"https://kit.svelte.dev/docs/introduction"},"SvelteKit documentation")," before\ncontinuing."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository. However, because Svelte isn't standard\nJavaScript, it requires the use of the ",(0,r.kt)("inlineCode",{parentName:"p"},"svelte-check")," command for type-checking."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/sveltekit"},"moon configuration preset"),"\nprovides the ",(0,r.kt)("inlineCode",{parentName:"p"},"check")," task below.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['typecheck']\n\ntasks:\n check:\n command: 'svelte-check --tsconfig ./tsconfig.json'\n deps:\n - 'typecheck-sync'\n inputs:\n - '@group(svelte)'\n - 'tsconfig.json'\n")),(0,r.kt)("p",null,"In case Svelte doesn't automatically create a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", you can use the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="/tsconfig.json"',title:'"/tsconfig.json"'},'{\n "extends": "./.svelte-kit/tsconfig.json",\n "compilerOptions": {\n "allowJs": true,\n "checkJs": true,\n "esModuleInterop": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true,\n "skipLibCheck": true,\n "sourceMap": true,\n "strict": true\n }\n}\n')),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as SvelteKit should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"vite")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new SvelteKit project, a\n",(0,r.kt)("a",{parentName:"p",href:"https://kit.svelte.dev/docs/configuration"},(0,r.kt)("inlineCode",{parentName:"a"},"svelte.config.js"))," is created, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the\nproject root. This allows each project to configure SvelteKit for their needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="/svelte.config.js"',title:'"/svelte.config.js"'},"import adapter from '@sveltejs/adapter-auto';\nimport { vitePreprocess } from '@sveltejs/kit/vite';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n // Consult https://kit.svelte.dev/docs/integrations#preprocessors\n // for more information about preprocessors\n preprocess: vitePreprocess(),\n\n kit: {\n adapter: adapter(),\n },\n};\n\nexport default config;\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0034bcd6.e6748a63.js b/assets/js/0034bcd6.e6748a63.js new file mode 100644 index 00000000000..0d65b1c3856 --- /dev/null +++ b/assets/js/0034bcd6.e6748a63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97424],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=r,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||l;return n?a.createElement(g,o(o({ref:t},p),{},{components:n})):a.createElement(g,o({ref:t},p))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var c=2;c{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const c="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:c}=e;const u=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(m(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:g,onClick:d},o,{className:(0,l.Z)("tabs__item",p,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",c)},r.createElement(u,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function c(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=c(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=u({queryString:n,groupId:r}),[g,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),f=(()=>{const e=m??g;return p({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),v(e)}),[d,v,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function c(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},88297:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),l=(n(36642),n(27457),n(32189));const o={title:"SvelteKit example",sidebar_label:"SvelteKit"},i=void 0,s={unversionedId:"guides/examples/sveltekit",id:"guides/examples/sveltekit",title:"SvelteKit example",description:"SvelteKit is built on Svelte, a UI framework that",source:"@site/docs/guides/examples/sveltekit.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/sveltekit",permalink:"/docs/guides/examples/sveltekit",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/sveltekit.mdx",tags:[],version:"current",frontMatter:{title:"SvelteKit example",sidebar_label:"SvelteKit"},sidebar:"guides",previous:{title:"Storybook",permalink:"/docs/guides/examples/storybook"},next:{title:"TypeScript",permalink:"/docs/guides/examples/typescript"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/sveltekit",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://kit.svelte.dev"},"SvelteKit")," is built on ",(0,r.kt)("a",{parentName:"p",href:"https://svelte.dev"},"Svelte"),", a UI framework that\nuses a compiler to let you write breathtakingly concise components that do minimal work in the\nbrowser, using languages you already know \u2014 HTML, CSS and JavaScript. It's a love letter to web\ndevelopment."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npm create svelte@latest \n")),(0,r.kt)("p",null,"You will be prompted to choose between select templates, TypeScript, ESLint, Prettier, Playwright\nand Vitest among other options. moon supports and has guides for many of these tools."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"We highly suggest reading our documentation on ",(0,r.kt)("a",{parentName:"p",href:"./vite"},"using Vite (and Vitest) with moon"),",\n",(0,r.kt)("a",{parentName:"p",href:"./eslint"},"using ESLint with moon")," and ",(0,r.kt)("a",{parentName:"p",href:"./prettier"},"using Prettier with moon")," for a more holistic\nview.")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since SvelteKit is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting SvelteKit tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/sveltekit"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"# Inherit tasks from the `sveltekit` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['sveltekit']\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"SvelteKit provides an option to setup ESLint along with your project, with moon you can use a\n",(0,r.kt)("a",{parentName:"p",href:"./eslint"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"lint")," task"),". We encourage using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task for consistency across all\nprojects within the repository. With this approach, the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint")," command itself will be ran and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"svelte3")," rules will still be used."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n # Extends the top-level lint\n lint:\n args:\n - '--ext'\n - '.ts,.svelte'\n")),(0,r.kt)("p",null,"Be sure to enable the Svelte parser and plugin in a project local ESLint configuration file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.cjs"',title:'".eslintrc.cjs"'},"module.exports = {\n plugins: ['svelte3'],\n ignorePatterns: ['*.cjs'],\n settings: {\n 'svelte3/typescript': () => require('typescript'),\n },\n overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],\n};\n")),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"SvelteKit also has built-in support for TypeScript, but has similar caveats to the\n",(0,r.kt)("a",{parentName:"p",href:"#eslint-integration"},"ESLint integration"),". TypeScript itself is a bit involved, so we suggest\nreading the official ",(0,r.kt)("a",{parentName:"p",href:"https://kit.svelte.dev/docs/introduction"},"SvelteKit documentation")," before\ncontinuing."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository. However, because Svelte isn't standard\nJavaScript, it requires the use of the ",(0,r.kt)("inlineCode",{parentName:"p"},"svelte-check")," command for type-checking."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/sveltekit"},"moon configuration preset"),"\nprovides the ",(0,r.kt)("inlineCode",{parentName:"p"},"check")," task below.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['typecheck']\n\ntasks:\n check:\n command: 'svelte-check --tsconfig ./tsconfig.json'\n deps:\n - 'typecheck-sync'\n inputs:\n - '@group(svelte)'\n - 'tsconfig.json'\n")),(0,r.kt)("p",null,"In case Svelte doesn't automatically create a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", you can use the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="/tsconfig.json"',title:'"/tsconfig.json"'},'{\n "extends": "./.svelte-kit/tsconfig.json",\n "compilerOptions": {\n "allowJs": true,\n "checkJs": true,\n "esModuleInterop": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true,\n "skipLibCheck": true,\n "sourceMap": true,\n "strict": true\n }\n}\n')),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as SvelteKit should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"vite")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new SvelteKit project, a\n",(0,r.kt)("a",{parentName:"p",href:"https://kit.svelte.dev/docs/configuration"},(0,r.kt)("inlineCode",{parentName:"a"},"svelte.config.js"))," is created, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the\nproject root. This allows each project to configure SvelteKit for their needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="/svelte.config.js"',title:'"/svelte.config.js"'},"import adapter from '@sveltejs/adapter-auto';\nimport { vitePreprocess } from '@sveltejs/kit/vite';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n // Consult https://kit.svelte.dev/docs/integrations#preprocessors\n // for more information about preprocessors\n preprocess: vitePreprocess(),\n\n kit: {\n adapter: adapter(),\n },\n};\n\nexport default config;\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/00568285.1866b646.js b/assets/js/00568285.1866b646.js new file mode 100644 index 00000000000..f7fc7989e0f --- /dev/null +++ b/assets/js/00568285.1866b646.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84470],{24422:e=>{e.exports=JSON.parse('{"title":"sync","description":"Operations for syncing the workspace to a healthy state.","keywords":["sync","codeowners","projects"],"slug":"/commands/sync","permalink":"/docs/commands/sync","navigation":{"previous":{"title":"setup","permalink":"/docs/commands/setup"},"next":{"title":"codeowners","permalink":"/docs/commands/sync/codeowners"}}}')}}]); \ No newline at end of file diff --git a/assets/js/00568285.33494716.js b/assets/js/00568285.33494716.js deleted file mode 100644 index 59470088634..00000000000 --- a/assets/js/00568285.33494716.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4470],{24422:e=>{e.exports=JSON.parse('{"title":"sync","description":"Operations for syncing the workspace to a healthy state.","keywords":["sync","codeowners","projects"],"slug":"/commands/sync","permalink":"/docs/commands/sync","navigation":{"previous":{"title":"setup","permalink":"/docs/commands/setup"},"next":{"title":"codeowners","permalink":"/docs/commands/sync/codeowners"}}}')}}]); \ No newline at end of file diff --git a/assets/js/016d6d21.6204358b.js b/assets/js/016d6d21.6204358b.js new file mode 100644 index 00000000000..2e6f7802979 --- /dev/null +++ b/assets/js/016d6d21.6204358b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82056],{93105:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/deno","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/016d6d21.df7ca08e.js b/assets/js/016d6d21.df7ca08e.js deleted file mode 100644 index 263bec1d0af..00000000000 --- a/assets/js/016d6d21.df7ca08e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2056],{93105:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/deno","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.3b1d4df3.js b/assets/js/01a85c17.3b1d4df3.js new file mode 100644 index 00000000000..8fbb1086e16 --- /dev/null +++ b/assets/js/01a85c17.3b1d4df3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64013],{55228:(e,t,a)=>{a.d(t,{Z:()=>h});var l=a(27378),n=a(37140),r=a(64654),s=a(58357),c=a(81884),i=a(99213);const m="sidebar_CLW8",o="sidebarItemTitle_DQfJ",u="sidebarItemList_rvuc",g="sidebarItem__RMN",d="sidebarItemLink_Ony9",b="sidebarItemLinkActive_MJ75";function E(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(m,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(o,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(u,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:g},l.createElement(c.default,{isNavLink:!0,to:e.permalink,className:d,activeClassName:b},e.title)))))))}var p=a(63471);function f(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(c.default,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function v(e){return l.createElement(p.Zo,{component:f,props:e})}function N(e){let{sidebar:t}=e;const a=(0,s.i)();return t?.items.length?"mobile"===a?l.createElement(v,{sidebar:t}):l.createElement(E,{sidebar:t}):null}function h(e){const{sidebar:t,toc:a,children:s,...c}=e,i=t&&t.items.length>0;return l.createElement(r.Z,c,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(N,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},s),a&&l.createElement("div",{className:"col col--2"},a))))}},79898:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var l=a(27378),n=a(37140),r=a(75846),s=a(1123),c=a(75484),i=a(55228),m=a(34672),o=a(60505);function u(e){let{tags:t,sidebar:a}=e;const u=(0,r.M)();return l.createElement(s.FG,{className:(0,n.Z)(c.k.wrapper.blogPages,c.k.page.blogTagsListPage)},l.createElement(s.d,{title:u}),l.createElement(o.Z,{tag:"blog_tags_list"}),l.createElement(i.Z,{sidebar:a},l.createElement("h1",null,u),l.createElement(m.Z,{tags:t})))}},51478:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(27378),n=a(37140),r=a(81884);const s="tag_otG2",c="tagRegular_s0E1",i="tagWithCount_PGyn";function m(e){let{permalink:t,label:a,count:m}=e;return l.createElement(r.default,{href:t,className:(0,n.Z)(s,m?i:c)},a,m&&l.createElement("span",null,m))}},34672:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(27378),n=a(75846),r=a(51478);const s="tag_FHL6";function c(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:s},l.createElement(r.Z,e))))),l.createElement("hr",null))}function i(e){let{tags:t}=e;const a=(0,n.P)(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(c,{key:e.letter,letterEntry:e}))))}},75846:(e,t,a)=>{a.d(t,{M:()=>n,P:()=>r});var l=a(99213);const n=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.9c5c9b0d.js b/assets/js/01a85c17.9c5c9b0d.js deleted file mode 100644 index d1ac62829ff..00000000000 --- a/assets/js/01a85c17.9c5c9b0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4013],{55228:(e,t,a)=>{a.d(t,{Z:()=>h});var l=a(27378),n=a(37140),r=a(64654),s=a(58357),c=a(81884),i=a(99213);const m="sidebar_CLW8",o="sidebarItemTitle_DQfJ",u="sidebarItemList_rvuc",g="sidebarItem__RMN",d="sidebarItemLink_Ony9",b="sidebarItemLinkActive_MJ75";function E(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(m,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(o,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(u,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:g},l.createElement(c.default,{isNavLink:!0,to:e.permalink,className:d,activeClassName:b},e.title)))))))}var p=a(63471);function f(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(c.default,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function v(e){return l.createElement(p.Zo,{component:f,props:e})}function N(e){let{sidebar:t}=e;const a=(0,s.i)();return t?.items.length?"mobile"===a?l.createElement(v,{sidebar:t}):l.createElement(E,{sidebar:t}):null}function h(e){const{sidebar:t,toc:a,children:s,...c}=e,i=t&&t.items.length>0;return l.createElement(r.Z,c,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(N,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},s),a&&l.createElement("div",{className:"col col--2"},a))))}},79898:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var l=a(27378),n=a(37140),r=a(75846),s=a(1123),c=a(75484),i=a(55228),m=a(34672),o=a(60505);function u(e){let{tags:t,sidebar:a}=e;const u=(0,r.M)();return l.createElement(s.FG,{className:(0,n.Z)(c.k.wrapper.blogPages,c.k.page.blogTagsListPage)},l.createElement(s.d,{title:u}),l.createElement(o.Z,{tag:"blog_tags_list"}),l.createElement(i.Z,{sidebar:a},l.createElement("h1",null,u),l.createElement(m.Z,{tags:t})))}},51478:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(27378),n=a(37140),r=a(81884);const s="tag_otG2",c="tagRegular_s0E1",i="tagWithCount_PGyn";function m(e){let{permalink:t,label:a,count:m}=e;return l.createElement(r.default,{href:t,className:(0,n.Z)(s,m?i:c)},a,m&&l.createElement("span",null,m))}},34672:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(27378),n=a(75846),r=a(51478);const s="tag_FHL6";function c(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:s},l.createElement(r.Z,e))))),l.createElement("hr",null))}function i(e){let{tags:t}=e;const a=(0,n.P)(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(c,{key:e.letter,letterEntry:e}))))}},75846:(e,t,a)=>{a.d(t,{M:()=>n,P:()=>r});var l=a(99213);const n=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/02401b2b.84d5a897.js b/assets/js/02401b2b.84d5a897.js new file mode 100644 index 00000000000..9e6900470e7 --- /dev/null +++ b/assets/js/02401b2b.84d5a897.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85027],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),s=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=s(n),m=a,f=d["".concat(u,".").concat(m)]||d[m]||p[m]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),u=n(76457);const s="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:u,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),r=s[n].value;r!==i&&(d(t),u(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,u.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function u(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function s(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??u(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=s(e),[l,u]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:a}),[f,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),b=(()=>{const e=d??f;return c({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{b&&u(b)}),[b]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),m(e),h(e)}),[m,h,o]),tabValues:o}}},84851:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(25773),a=(n(27378),n(35318));n(33337),n(39798);const o={title:"Deno handbook",toc_max_heading_level:6},l=void 0,i={unversionedId:"guides/javascript/deno-handbook",id:"guides/javascript/deno-handbook",title:"Deno handbook",description:"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we'll",source:"@site/docs/guides/javascript/deno-handbook.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/deno-handbook",permalink:"/docs/guides/javascript/deno-handbook",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/deno-handbook.mdx",tags:[],version:"current",frontMatter:{title:"Deno handbook",toc_max_heading_level:6},sidebar:"guides",previous:{title:"VCS hooks",permalink:"/docs/guides/vcs-hooks"},next:{title:"Node.js handbook",permalink:"/docs/guides/javascript/node-handbook"}},u={},s=[{value:"moon setup",id:"moon-setup",level:2},{value:"Enabling the language",id:"enabling-the-language",level:3},{value:"Work in progress",id:"work-in-progress",level:3},{value:"Coming soon!",id:"coming-soon",level:2}],c={toc:s};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we'll\nhelp guide you through this process."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"This guide is a living document and will continue to be updated over time!")),(0,a.kt)("h2",{id:"moon-setup"},"moon setup"),(0,a.kt)("p",null,"For this part of the handbook, we'll be focusing on ",(0,a.kt)("a",{parentName:"p",href:"/moon"},"moon"),", our task runner. To start,\nlanguages in moon act like plugins, where their functionality and support ",(0,a.kt)("em",{parentName:"p"},"is not")," enabled unless\nexplicitly configured. We follow this approach to avoid unnecessary overhead."),(0,a.kt)("h3",{id:"enabling-the-language"},"Enabling the language"),(0,a.kt)("p",null,"To enable TypeScript support via Deno, define the ",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#deno"},(0,a.kt)("inlineCode",{parentName:"a"},"deno"))," setting in\n",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", even if an empty object."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Deno\ndeno: {}\n\n# Enable Deno and override default settings\ndeno:\n lockfile: true\n")),(0,a.kt)("p",null,"Or by pinning a ",(0,a.kt)("inlineCode",{parentName:"p"},"deno")," version in ",(0,a.kt)("a",{parentName:"p",href:"../../proto/config"},(0,a.kt)("inlineCode",{parentName:"a"},".prototools"))," in the workspace root."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'deno = "1.31.0"\n')),(0,a.kt)("p",null,"This will enable the Deno platform and provide the following automations around its ecosystem:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Automatic handling and caching of lockfiles (when the setting is enabled)."),(0,a.kt)("li",{parentName:"ul"},"Relationships between projects will automatically be discovered based on ",(0,a.kt)("inlineCode",{parentName:"li"},"imports"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"importMap"),",\nand ",(0,a.kt)("inlineCode",{parentName:"li"},"deps.ts")," (currently experimental)."),(0,a.kt)("li",{parentName:"ul"},"And more to come!")),(0,a.kt)("h3",{id:"work-in-progress"},"Work in progress"),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Deno support is currently experimental while we finalize the implementation.")),(0,a.kt)("p",null,"The following features are not supported:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"deno.jsonc")," files (use ",(0,a.kt)("inlineCode",{parentName:"li"},"deno.json")," instead)."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"npm:")," imports do not consider Node.js dependencies as hash sources."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"files.exclude")," are currently considered an input. These will be filtered in a future release.")),(0,a.kt)("h2",{id:"coming-soon"},"Coming soon!"),(0,a.kt)("p",null,"The handbook is currently being written while we finalize our Deno integration support!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/02401b2b.b8f7007a.js b/assets/js/02401b2b.b8f7007a.js deleted file mode 100644 index 342fd1ec291..00000000000 --- a/assets/js/02401b2b.b8f7007a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5027],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),s=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=s(n),m=a,f=d["".concat(u,".").concat(m)]||d[m]||p[m]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),u=n(76457);const s="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:u,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),r=s[n].value;r!==i&&(d(t),u(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,u.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function u(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function s(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??u(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=s(e),[l,u]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:a}),[f,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),b=(()=>{const e=d??f;return c({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{b&&u(b)}),[b]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),m(e),h(e)}),[m,h,o]),tabValues:o}}},84851:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(25773),a=(n(27378),n(35318));n(33337),n(39798);const o={title:"Deno handbook",toc_max_heading_level:6},l=void 0,i={unversionedId:"guides/javascript/deno-handbook",id:"guides/javascript/deno-handbook",title:"Deno handbook",description:"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we'll",source:"@site/docs/guides/javascript/deno-handbook.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/deno-handbook",permalink:"/docs/guides/javascript/deno-handbook",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/deno-handbook.mdx",tags:[],version:"current",frontMatter:{title:"Deno handbook",toc_max_heading_level:6},sidebar:"guides",previous:{title:"VCS hooks",permalink:"/docs/guides/vcs-hooks"},next:{title:"Node.js handbook",permalink:"/docs/guides/javascript/node-handbook"}},u={},s=[{value:"moon setup",id:"moon-setup",level:2},{value:"Enabling the language",id:"enabling-the-language",level:3},{value:"Work in progress",id:"work-in-progress",level:3},{value:"Coming soon!",id:"coming-soon",level:2}],c={toc:s};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we'll\nhelp guide you through this process."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"This guide is a living document and will continue to be updated over time!")),(0,a.kt)("h2",{id:"moon-setup"},"moon setup"),(0,a.kt)("p",null,"For this part of the handbook, we'll be focusing on ",(0,a.kt)("a",{parentName:"p",href:"/moon"},"moon"),", our task runner. To start,\nlanguages in moon act like plugins, where their functionality and support ",(0,a.kt)("em",{parentName:"p"},"is not")," enabled unless\nexplicitly configured. We follow this approach to avoid unnecessary overhead."),(0,a.kt)("h3",{id:"enabling-the-language"},"Enabling the language"),(0,a.kt)("p",null,"To enable TypeScript support via Deno, define the ",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#deno"},(0,a.kt)("inlineCode",{parentName:"a"},"deno"))," setting in\n",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", even if an empty object."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Deno\ndeno: {}\n\n# Enable Deno and override default settings\ndeno:\n lockfile: true\n")),(0,a.kt)("p",null,"Or by pinning a ",(0,a.kt)("inlineCode",{parentName:"p"},"deno")," version in ",(0,a.kt)("a",{parentName:"p",href:"../../proto/config"},(0,a.kt)("inlineCode",{parentName:"a"},".prototools"))," in the workspace root."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'deno = "1.31.0"\n')),(0,a.kt)("p",null,"This will enable the Deno platform and provide the following automations around its ecosystem:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Automatic handling and caching of lockfiles (when the setting is enabled)."),(0,a.kt)("li",{parentName:"ul"},"Relationships between projects will automatically be discovered based on ",(0,a.kt)("inlineCode",{parentName:"li"},"imports"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"importMap"),",\nand ",(0,a.kt)("inlineCode",{parentName:"li"},"deps.ts")," (currently experimental)."),(0,a.kt)("li",{parentName:"ul"},"And more to come!")),(0,a.kt)("h3",{id:"work-in-progress"},"Work in progress"),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Deno support is currently experimental while we finalize the implementation.")),(0,a.kt)("p",null,"The following features are not supported:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"deno.jsonc")," files (use ",(0,a.kt)("inlineCode",{parentName:"li"},"deno.json")," instead)."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"npm:")," imports do not consider Node.js dependencies as hash sources."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"files.exclude")," are currently considered an input. These will be filtered in a future release.")),(0,a.kt)("h2",{id:"coming-soon"},"Coming soon!"),(0,a.kt)("p",null,"The handbook is currently being written while we finalize our Deno integration support!"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/03193cc0.865f0bad.js b/assets/js/03193cc0.865f0bad.js new file mode 100644 index 00000000000..cc1cef31a33 --- /dev/null +++ b/assets/js/03193cc0.865f0bad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43363],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(f,l(l({ref:t},p),{},{components:n})):r.createElement(f,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var c=2;c{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const c="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:c}=e;const u=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=u.indexOf(t),r=c[n].value;r!==i&&(d(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",p,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",c)},a.createElement(u,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function c(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=c(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=u({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=d??f;return p({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(27378),a=n(30780),o=n(39798),l=n(33337);function i(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function c(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),r.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(o.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},i(e,!1,!1))),r.createElement(o.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(o.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(o.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(83469),o=n(31792);function l(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(o.Z,{icon:a.dT$}))}},21311:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var r=n(25773),a=(n(27378),n(35318)),o=n(36642),l=n(32189);const i={title:"TypeScript example",sidebar_label:"TypeScript"},s=void 0,c={unversionedId:"guides/examples/typescript",id:"guides/examples/typescript",title:"TypeScript example",description:"In this guide, you'll learn how to integrate TypeScript into moon. We'll be",source:"@site/docs/guides/examples/typescript.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/typescript",permalink:"/docs/guides/examples/typescript",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/typescript.mdx",tags:[],version:"current",frontMatter:{title:"TypeScript example",sidebar_label:"TypeScript"},sidebar:"guides",previous:{title:"SvelteKit",permalink:"/docs/guides/examples/sveltekit"},next:{title:"Vite & Vitest",permalink:"/docs/guides/examples/vite"}},p={},u=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Sharing",id:"sharing",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to preserve pretty output?",id:"how-to-preserve-pretty-output",level:3}],d={toc:u};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(l.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L95",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/"},"TypeScript")," into moon. We'll be\nusing ",(0,a.kt)("a",{parentName:"p",href:"../javascript/typescript-project-refs"},"project references"),", as it ensures that only affected\nprojects are built, and not the entire repository."),(0,a.kt)("p",null,"Begin by installing ",(0,a.kt)("inlineCode",{parentName:"p"},"typescript")," and any pre-configured tsconfig packages in your root. We suggest\nusing the same version across the entire repository."),(0,a.kt)(o.Z,{dep:"typescript tsconfig-moon",dev:!0,mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Since typechecking is a universal workflow, add a ",(0,a.kt)("inlineCode",{parentName:"p"},"typecheck")," task to\n",(0,a.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n typecheck:\n command:\n - 'tsc'\n # Use incremental builds with project references\n - '--build'\n # Always use pretty output\n - '--pretty'\n # Use verbose logging to see affected projects\n - '--verbose'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Type declarations\n - 'types/**/*'\n # Project configs\n - 'tsconfig.json'\n - 'tsconfig.*.json'\n # Root configs (extended from only)\n - '/tsconfig.options.json'\n outputs:\n # Matches `compilerOptions.outDir`\n - 'lib'\n")),(0,a.kt)("p",null,"Projects can extend this task and provide additional parameters if need be, for example."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n typecheck:\n args:\n # Force build every time\n - '--force'\n")),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("h3",{id:"root-level"},"Root-level"),(0,a.kt)("p",null,"Multiple root-level TypeScript configs are ",(0,a.kt)("em",{parentName:"p"},"required"),", as we need to define compiler options that\nare shared across the repository, and we need to house a list of all project references."),(0,a.kt)("p",null,"To start, let's create a ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.options.json")," that will contain our compiler options. In our\nexample, we'll extend ",(0,a.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/tsconfig-moon"},"tsconfig-moon")," for convenience.\nSpecifically, the ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.workspaces.json")," config, which enables ECMAScript modules, composite\nmode, declaration emitting, and incremental builds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.options.json"',title:'"tsconfig.options.json"'},'{\n "extends": "tsconfig-moon/tsconfig.projects.json",\n "compilerOptions": {\n // Your custom options\n "moduleResolution": "nodenext",\n "target": "es2022"\n }\n}\n')),(0,a.kt)("p",null,"We'll also need the standard ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," to house our project references. This is used by\neditors and tooling for deep integrations."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n "extends": "./tsconfig.options.json",\n "files": [],\n // All project references in the repo\n "references": []\n}\n')),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The ",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#rootconfigfilename"},(0,a.kt)("inlineCode",{parentName:"a"},"typescript.rootConfigFileName"))," setting can be\nused to change the root-level config name and the\n",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferences"},(0,a.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting will\nautomatically keep project references in sync!")),(0,a.kt)("h3",{id:"project-level"},"Project-level"),(0,a.kt)("p",null,"Every project will require a ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", as TypeScript itself requires it. The following\n",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," will typecheck the entire project, including source and test files."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="/tsconfig.json"',title:'"/tsconfig.json"'},'{\n // Extend the root compiler options\n "extends": "../../tsconfig.options.json",\n "compilerOptions": {\n // Declarations are written here\n "outDir": "lib"\n },\n // Include files in the project\n "include": ["src/**/*", "tests/**/*"],\n // Depends on other projects\n "references": []\n}\n')),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The ",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#projectconfigfilename"},(0,a.kt)("inlineCode",{parentName:"a"},"typescript.projectConfigFileName"))," setting can\nbe used to change the project-level config name.")),(0,a.kt)("h3",{id:"sharing"},"Sharing"),(0,a.kt)("p",null,"To share configuration across projects, you have 3 options:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Define settings in a ",(0,a.kt)("a",{parentName:"li",href:"#root-level"},"root-level config"),". This only applies to the parent repository."),(0,a.kt)("li",{parentName:"ul"},"Create and publish an\n",(0,a.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#tsconfig-bases"},(0,a.kt)("inlineCode",{parentName:"a"},"tsconfig base")),"\nnpm package. This can be used in any repository."),(0,a.kt)("li",{parentName:"ul"},"A combination of 1 and 2.")),(0,a.kt)("p",null,"For options 2 and 3, if you're utilizing package workspaces, create a local package with the\nfollowing content."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="packages/tsconfig-company/tsconfig.json"',title:'"packages/tsconfig-company/tsconfig.json"'},'{\n "compilerOptions": {\n // ...\n "lib": ["esnext"]\n }\n}\n')),(0,a.kt)("p",null,"Within another ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", you can extend this package to inherit the settings."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n "extends": "tsconfig-company/tsconfig.json"\n}\n')),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h3",{id:"how-to-preserve-pretty-output"},"How to preserve pretty output?"),(0,a.kt)("p",null,"TypeScript supports a pretty format where it includes codeframes and color highlighting for\nfailures. However, when ",(0,a.kt)("inlineCode",{parentName:"p"},"tsc")," is piped or the terminal is not a TTY, the pretty format is lost. To\npreserve and always display the pretty format, be sure to pass the ",(0,a.kt)("inlineCode",{parentName:"p"},"--pretty")," argument!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/03193cc0.f387ef9b.js b/assets/js/03193cc0.f387ef9b.js deleted file mode 100644 index aa70a4f4717..00000000000 --- a/assets/js/03193cc0.f387ef9b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3363],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=c(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(f,l(l({ref:t},p),{},{components:n})):r.createElement(f,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var c=2;c{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const c="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:c}=e;const u=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=u.indexOf(t),r=c[n].value;r!==i&&(d(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",p,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",c)},a.createElement(u,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function c(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=c(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=u({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=d??f;return p({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(27378),a=n(30780),o=n(39798),l=n(33337);function i(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function c(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),r.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(o.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},i(e,!1,!1))),r.createElement(o.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(o.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(o.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(83469),o=n(31792);function l(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(o.Z,{icon:a.dT$}))}},21311:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var r=n(25773),a=(n(27378),n(35318)),o=n(36642),l=n(32189);const i={title:"TypeScript example",sidebar_label:"TypeScript"},s=void 0,c={unversionedId:"guides/examples/typescript",id:"guides/examples/typescript",title:"TypeScript example",description:"In this guide, you'll learn how to integrate TypeScript into moon. We'll be",source:"@site/docs/guides/examples/typescript.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/typescript",permalink:"/docs/guides/examples/typescript",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/typescript.mdx",tags:[],version:"current",frontMatter:{title:"TypeScript example",sidebar_label:"TypeScript"},sidebar:"guides",previous:{title:"SvelteKit",permalink:"/docs/guides/examples/sveltekit"},next:{title:"Vite & Vitest",permalink:"/docs/guides/examples/vite"}},p={},u=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Sharing",id:"sharing",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to preserve pretty output?",id:"how-to-preserve-pretty-output",level:3}],d={toc:u};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(l.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L95",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/"},"TypeScript")," into moon. We'll be\nusing ",(0,a.kt)("a",{parentName:"p",href:"../javascript/typescript-project-refs"},"project references"),", as it ensures that only affected\nprojects are built, and not the entire repository."),(0,a.kt)("p",null,"Begin by installing ",(0,a.kt)("inlineCode",{parentName:"p"},"typescript")," and any pre-configured tsconfig packages in your root. We suggest\nusing the same version across the entire repository."),(0,a.kt)(o.Z,{dep:"typescript tsconfig-moon",dev:!0,mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Since typechecking is a universal workflow, add a ",(0,a.kt)("inlineCode",{parentName:"p"},"typecheck")," task to\n",(0,a.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n typecheck:\n command:\n - 'tsc'\n # Use incremental builds with project references\n - '--build'\n # Always use pretty output\n - '--pretty'\n # Use verbose logging to see affected projects\n - '--verbose'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Type declarations\n - 'types/**/*'\n # Project configs\n - 'tsconfig.json'\n - 'tsconfig.*.json'\n # Root configs (extended from only)\n - '/tsconfig.options.json'\n outputs:\n # Matches `compilerOptions.outDir`\n - 'lib'\n")),(0,a.kt)("p",null,"Projects can extend this task and provide additional parameters if need be, for example."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n typecheck:\n args:\n # Force build every time\n - '--force'\n")),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("h3",{id:"root-level"},"Root-level"),(0,a.kt)("p",null,"Multiple root-level TypeScript configs are ",(0,a.kt)("em",{parentName:"p"},"required"),", as we need to define compiler options that\nare shared across the repository, and we need to house a list of all project references."),(0,a.kt)("p",null,"To start, let's create a ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.options.json")," that will contain our compiler options. In our\nexample, we'll extend ",(0,a.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/tsconfig-moon"},"tsconfig-moon")," for convenience.\nSpecifically, the ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.workspaces.json")," config, which enables ECMAScript modules, composite\nmode, declaration emitting, and incremental builds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.options.json"',title:'"tsconfig.options.json"'},'{\n "extends": "tsconfig-moon/tsconfig.projects.json",\n "compilerOptions": {\n // Your custom options\n "moduleResolution": "nodenext",\n "target": "es2022"\n }\n}\n')),(0,a.kt)("p",null,"We'll also need the standard ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," to house our project references. This is used by\neditors and tooling for deep integrations."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n "extends": "./tsconfig.options.json",\n "files": [],\n // All project references in the repo\n "references": []\n}\n')),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The ",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#rootconfigfilename"},(0,a.kt)("inlineCode",{parentName:"a"},"typescript.rootConfigFileName"))," setting can be\nused to change the root-level config name and the\n",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferences"},(0,a.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting will\nautomatically keep project references in sync!")),(0,a.kt)("h3",{id:"project-level"},"Project-level"),(0,a.kt)("p",null,"Every project will require a ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", as TypeScript itself requires it. The following\n",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," will typecheck the entire project, including source and test files."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="/tsconfig.json"',title:'"/tsconfig.json"'},'{\n // Extend the root compiler options\n "extends": "../../tsconfig.options.json",\n "compilerOptions": {\n // Declarations are written here\n "outDir": "lib"\n },\n // Include files in the project\n "include": ["src/**/*", "tests/**/*"],\n // Depends on other projects\n "references": []\n}\n')),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The ",(0,a.kt)("a",{parentName:"p",href:"../../config/toolchain#projectconfigfilename"},(0,a.kt)("inlineCode",{parentName:"a"},"typescript.projectConfigFileName"))," setting can\nbe used to change the project-level config name.")),(0,a.kt)("h3",{id:"sharing"},"Sharing"),(0,a.kt)("p",null,"To share configuration across projects, you have 3 options:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Define settings in a ",(0,a.kt)("a",{parentName:"li",href:"#root-level"},"root-level config"),". This only applies to the parent repository."),(0,a.kt)("li",{parentName:"ul"},"Create and publish an\n",(0,a.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#tsconfig-bases"},(0,a.kt)("inlineCode",{parentName:"a"},"tsconfig base")),"\nnpm package. This can be used in any repository."),(0,a.kt)("li",{parentName:"ul"},"A combination of 1 and 2.")),(0,a.kt)("p",null,"For options 2 and 3, if you're utilizing package workspaces, create a local package with the\nfollowing content."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="packages/tsconfig-company/tsconfig.json"',title:'"packages/tsconfig-company/tsconfig.json"'},'{\n "compilerOptions": {\n // ...\n "lib": ["esnext"]\n }\n}\n')),(0,a.kt)("p",null,"Within another ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", you can extend this package to inherit the settings."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n "extends": "tsconfig-company/tsconfig.json"\n}\n')),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h3",{id:"how-to-preserve-pretty-output"},"How to preserve pretty output?"),(0,a.kt)("p",null,"TypeScript supports a pretty format where it includes codeframes and color highlighting for\nfailures. However, when ",(0,a.kt)("inlineCode",{parentName:"p"},"tsc")," is piped or the terminal is not a TTY, the pretty format is lost. To\npreserve and always display the pretty format, be sure to pass the ",(0,a.kt)("inlineCode",{parentName:"p"},"--pretty")," argument!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/046e2194.aa145bbf.js b/assets/js/046e2194.aa145bbf.js new file mode 100644 index 00000000000..02c540f696c --- /dev/null +++ b/assets/js/046e2194.aa145bbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48667],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||l;return n?a.createElement(g,o(o({ref:t},p),{},{components:n})):a.createElement(g,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",p="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=u[n].value;a!==i&&(d(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},o,{className:(0,l.Z)("tabs__item",p,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=c({queryString:n,groupId:r}),[g,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),f=(()=>{const e=d??g;return p({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),h(e)}),[m,h,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27915:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(9619);function o(e){let{text:t}=e;return a.createElement(l.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),r=n(81884),l=n(25773),o=n(9928),i=n(83469),s=n(31792);const u={discord:o.omb,github:o.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:o.mdU,workspace:i.emM,"workspace-config":i.cRF};function p(e){let{name:t,...n}=e;return a.createElement(s.Z,(0,l.Z)({},n,{icon:u[t]}))}function c(e){let{links:t}=e;return a.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>a.createElement(r.default,{key:e.url,href:e.url,className:"focus:outline-none"},a.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},a.createElement("div",{className:"flex-shrink-0"},a.createElement(p,{size:"lg",name:e.icon})),a.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),l=n(31792);const o={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?o[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},96841:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),l=(n(33337),n(39798),n(27915)),o=n(9634),i=n(36642);const s={title:"Install moon"},u=void 0,p={unversionedId:"install",id:"install",title:"Install moon",description:"The following guide can be used to install moon and integrate it into an existing repository (with",source:"@site/docs/install.mdx",sourceDirName:".",slug:"/install",permalink:"/docs/install",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/install.mdx",tags:[],version:"current",frontMatter:{title:"Install moon"},sidebar:"docs",previous:{title:"Action graph",permalink:"/docs/how-it-works/action-graph"},next:{title:"Setup workspace",permalink:"/docs/setup-workspace"}},c={},d=[{value:"Installing",id:"installing",level:2},{value:"proto",id:"proto",level:3},{value:"Linux, macOS, WSL",id:"linux-macos-wsl",level:3},{value:"Windows",id:"windows",level:3},{value:"Node.js",id:"nodejs",level:3},{value:"Other",id:"other",level:3},{value:"Upgrading",id:"upgrading",level:2},{value:"Nightly releases",id:"nightly-releases",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:d};function g(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,r.kt)("p",null,"The following guide can be used to install moon and integrate it into an existing repository (with\nor without incremental adoption), or to a fresh repository."),(0,r.kt)("h2",{id:"installing"},"Installing"),(0,r.kt)("p",null,"The entirety of moon is packaged and shipped as a single binary. It works on all major operating\nsystems, and does not require any external dependencies. For convenience, we provide the following\nscripts to download and install moon."),(0,r.kt)("h3",{id:"proto"},"proto"),(0,r.kt)("p",null,"moon can be installed and managed in ",(0,r.kt)("a",{parentName:"p",href:"/proto"},"proto's toolchain")," using a TOML plugin. This will\ninstall moon to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/moon")," and make the binary available at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/bin"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'proto add-plugin moon "source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml"\nproto install moon\n')),(0,r.kt)("p",null,"Furthermore, the version of moon can be pinned on a per-project basis using the ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'moon = "1.3.0"\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"We suggest using proto to manage moon (and other tools), as it allows for multiple versions to be\ninstalled and used. The other installation options only allow for a single version (typically the\nlatest).")),(0,r.kt)("h3",{id:"linux-macos-wsl"},"Linux, macOS, WSL"),(0,r.kt)("p",null,"In a terminal that supports Bash, run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"curl -fsSL https://moonrepo.dev/install/moon.sh | bash\n")),(0,r.kt)("p",null,"This will install moon to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.moon/bin"),". You'll then need to set ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," manually in your shell\nprofile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'export PATH="$HOME/.moon/bin:$PATH"\n')),(0,r.kt)("h3",{id:"windows"},"Windows"),(0,r.kt)("p",null,"In Powershell or Windows Terminal, run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"irm https://moonrepo.dev/install/moon.ps1 | iex\n")),(0,r.kt)("p",null,"This will install moon to ",(0,r.kt)("inlineCode",{parentName:"p"},"~\\.moon\\bin")," and prepend to the ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," environment variable for the\ncurrent session. To persist across sessions, update ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," manually."),(0,r.kt)("h3",{id:"nodejs"},"Node.js"),(0,r.kt)("p",null,"moon is also packaged and shipped as a single binary through the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@moonrepo/cli"},(0,r.kt)("inlineCode",{parentName:"a"},"@moonrepo/cli"))," npm package. Begin by installing this\npackage at the root of the repository. This is also useful in ",(0,r.kt)("em",{parentName:"p"},"pinning the exact version")," the\nrepository should be using."),(0,r.kt)(i.Z,{dep:"@moonrepo/cli",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h3",{id:"other"},"Other"),(0,r.kt)("p",null,"moon can also be downloaded and installed manually, by downloading an asset from\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases"},"https://github.com/moonrepo/moon/releases"),". Be sure to\nrename the file after downloading, and apply the executable bit (",(0,r.kt)("inlineCode",{parentName:"p"},"chmod +x"),") on macOS and Linux."),(0,r.kt)("h2",{id:"upgrading"},"Upgrading"),(0,r.kt)("p",null,"If using proto, moon can be upgraded using the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"proto install moon --pin\n")),(0,r.kt)("p",null,"Otherwise, moon can be upgraded with the ",(0,r.kt)("a",{parentName:"p",href:"./commands/upgrade"},(0,r.kt)("inlineCode",{parentName:"a"},"moon upgrade"))," command. However, this\nwill only upgrade moon if it was installed in ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.moon/bin"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon upgrade\n")),(0,r.kt)("p",null,"Otherwise, you can re-run the installers above and it will download, install, and overwrite with the\nlatest version."),(0,r.kt)("h2",{id:"nightly-releases"},"Nightly releases"),(0,r.kt)("p",null,"moon supports nightly releases, which are built and published once a day, and for each merged\nfeature to our develop branches. When using a nightly release, you'll need to download and execute\nthe binaries manually."),(0,r.kt)("p",null,"Nightlies are published to the following channels:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"To our npm package\n",(0,r.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/@moonrepo/cli?activeTab=versions"},(0,r.kt)("inlineCode",{parentName:"a"},"@moonrepo/cli"))," under the\n",(0,r.kt)("inlineCode",{parentName:"li"},"nightly")," tag. Releases are versioned by date."),(0,r.kt)("li",{parentName:"ul"},"As a ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon/releases/tag/nightly"},"GitHub prerelease")," using the\n",(0,r.kt)("inlineCode",{parentName:"li"},"nightly")," tag. This tag always represents the latest release, and is not historical.")),(0,r.kt)("h2",{id:"next-steps"},"Next steps"),(0,r.kt)(o.Z,{links:[{icon:"workspace-config",label:"Setup workspace",url:"./setup-workspace"}],mdxType:"NextSteps"}))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/046e2194.cd029424.js b/assets/js/046e2194.cd029424.js deleted file mode 100644 index 5c131ec27b9..00000000000 --- a/assets/js/046e2194.cd029424.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8667],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||l;return n?a.createElement(g,o(o({ref:t},p),{},{components:n})):a.createElement(g,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",p="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=u[n].value;a!==i&&(d(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},o,{className:(0,l.Z)("tabs__item",p,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=c({queryString:n,groupId:r}),[g,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),f=(()=>{const e=d??g;return p({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),h(e)}),[m,h,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27915:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(9619);function o(e){let{text:t}=e;return a.createElement(l.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),r=n(81884),l=n(25773),o=n(9928),i=n(83469),s=n(31792);const u={discord:o.omb,github:o.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:o.mdU,workspace:i.emM,"workspace-config":i.cRF};function p(e){let{name:t,...n}=e;return a.createElement(s.Z,(0,l.Z)({},n,{icon:u[t]}))}function c(e){let{links:t}=e;return a.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>a.createElement(r.default,{key:e.url,href:e.url,className:"focus:outline-none"},a.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},a.createElement("div",{className:"flex-shrink-0"},a.createElement(p,{size:"lg",name:e.icon})),a.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),l=n(31792);const o={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?o[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},96841:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),l=(n(33337),n(39798),n(27915)),o=n(9634),i=n(36642);const s={title:"Install moon"},u=void 0,p={unversionedId:"install",id:"install",title:"Install moon",description:"The following guide can be used to install moon and integrate it into an existing repository (with",source:"@site/docs/install.mdx",sourceDirName:".",slug:"/install",permalink:"/docs/install",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/install.mdx",tags:[],version:"current",frontMatter:{title:"Install moon"},sidebar:"docs",previous:{title:"Action graph",permalink:"/docs/how-it-works/action-graph"},next:{title:"Setup workspace",permalink:"/docs/setup-workspace"}},c={},d=[{value:"Installing",id:"installing",level:2},{value:"proto",id:"proto",level:3},{value:"Linux, macOS, WSL",id:"linux-macos-wsl",level:3},{value:"Windows",id:"windows",level:3},{value:"Node.js",id:"nodejs",level:3},{value:"Other",id:"other",level:3},{value:"Upgrading",id:"upgrading",level:2},{value:"Nightly releases",id:"nightly-releases",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:d};function g(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,r.kt)("p",null,"The following guide can be used to install moon and integrate it into an existing repository (with\nor without incremental adoption), or to a fresh repository."),(0,r.kt)("h2",{id:"installing"},"Installing"),(0,r.kt)("p",null,"The entirety of moon is packaged and shipped as a single binary. It works on all major operating\nsystems, and does not require any external dependencies. For convenience, we provide the following\nscripts to download and install moon."),(0,r.kt)("h3",{id:"proto"},"proto"),(0,r.kt)("p",null,"moon can be installed and managed in ",(0,r.kt)("a",{parentName:"p",href:"/proto"},"proto's toolchain")," using a TOML plugin. This will\ninstall moon to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/moon")," and make the binary available at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/bin"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'proto add-plugin moon "source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml"\nproto install moon\n')),(0,r.kt)("p",null,"Furthermore, the version of moon can be pinned on a per-project basis using the ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'moon = "1.3.0"\n')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"We suggest using proto to manage moon (and other tools), as it allows for multiple versions to be\ninstalled and used. The other installation options only allow for a single version (typically the\nlatest).")),(0,r.kt)("h3",{id:"linux-macos-wsl"},"Linux, macOS, WSL"),(0,r.kt)("p",null,"In a terminal that supports Bash, run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"curl -fsSL https://moonrepo.dev/install/moon.sh | bash\n")),(0,r.kt)("p",null,"This will install moon to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.moon/bin"),". You'll then need to set ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," manually in your shell\nprofile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'export PATH="$HOME/.moon/bin:$PATH"\n')),(0,r.kt)("h3",{id:"windows"},"Windows"),(0,r.kt)("p",null,"In Powershell or Windows Terminal, run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"irm https://moonrepo.dev/install/moon.ps1 | iex\n")),(0,r.kt)("p",null,"This will install moon to ",(0,r.kt)("inlineCode",{parentName:"p"},"~\\.moon\\bin")," and prepend to the ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," environment variable for the\ncurrent session. To persist across sessions, update ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," manually."),(0,r.kt)("h3",{id:"nodejs"},"Node.js"),(0,r.kt)("p",null,"moon is also packaged and shipped as a single binary through the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@moonrepo/cli"},(0,r.kt)("inlineCode",{parentName:"a"},"@moonrepo/cli"))," npm package. Begin by installing this\npackage at the root of the repository. This is also useful in ",(0,r.kt)("em",{parentName:"p"},"pinning the exact version")," the\nrepository should be using."),(0,r.kt)(i.Z,{dep:"@moonrepo/cli",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h3",{id:"other"},"Other"),(0,r.kt)("p",null,"moon can also be downloaded and installed manually, by downloading an asset from\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases"},"https://github.com/moonrepo/moon/releases"),". Be sure to\nrename the file after downloading, and apply the executable bit (",(0,r.kt)("inlineCode",{parentName:"p"},"chmod +x"),") on macOS and Linux."),(0,r.kt)("h2",{id:"upgrading"},"Upgrading"),(0,r.kt)("p",null,"If using proto, moon can be upgraded using the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"proto install moon --pin\n")),(0,r.kt)("p",null,"Otherwise, moon can be upgraded with the ",(0,r.kt)("a",{parentName:"p",href:"./commands/upgrade"},(0,r.kt)("inlineCode",{parentName:"a"},"moon upgrade"))," command. However, this\nwill only upgrade moon if it was installed in ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.moon/bin"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon upgrade\n")),(0,r.kt)("p",null,"Otherwise, you can re-run the installers above and it will download, install, and overwrite with the\nlatest version."),(0,r.kt)("h2",{id:"nightly-releases"},"Nightly releases"),(0,r.kt)("p",null,"moon supports nightly releases, which are built and published once a day, and for each merged\nfeature to our develop branches. When using a nightly release, you'll need to download and execute\nthe binaries manually."),(0,r.kt)("p",null,"Nightlies are published to the following channels:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"To our npm package\n",(0,r.kt)("a",{parentName:"li",href:"https://www.npmjs.com/package/@moonrepo/cli?activeTab=versions"},(0,r.kt)("inlineCode",{parentName:"a"},"@moonrepo/cli"))," under the\n",(0,r.kt)("inlineCode",{parentName:"li"},"nightly")," tag. Releases are versioned by date."),(0,r.kt)("li",{parentName:"ul"},"As a ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon/releases/tag/nightly"},"GitHub prerelease")," using the\n",(0,r.kt)("inlineCode",{parentName:"li"},"nightly")," tag. This tag always represents the latest release, and is not historical.")),(0,r.kt)("h2",{id:"next-steps"},"Next steps"),(0,r.kt)(o.Z,{links:[{icon:"workspace-config",label:"Setup workspace",url:"./setup-workspace"}],mdxType:"NextSteps"}))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/04d8c43e.aee81211.js b/assets/js/04d8c43e.aee81211.js deleted file mode 100644 index 9d0b2697c48..00000000000 --- a/assets/js/04d8c43e.aee81211.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6551],{48632:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/global","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/04d8c43e.c36837fb.js b/assets/js/04d8c43e.c36837fb.js new file mode 100644 index 00000000000..df8fb8aef3d --- /dev/null +++ b/assets/js/04d8c43e.c36837fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86551],{48632:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/global","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0627e785.223d2568.js b/assets/js/0627e785.223d2568.js new file mode 100644 index 00000000000..3e4b5fbd295 --- /dev/null +++ b/assets/js/0627e785.223d2568.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74824],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||r;return n?o.createElement(g,i(i({ref:t},c),{},{components:n})):o.createElement(g,i({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.d(t,{Z:()=>i});var o=n(27378),a=n(83469),r=n(9619);function i(e){let{text:t}=e;return o.createElement(r.Z,{text:t,icon:a.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},79022:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(27378),a=n(9619);function r(e){let{header:t,inline:n,updated:r,version:i}=e;return o.createElement(a.Z,{text:`v${i}`,variant:r?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(27378),a=n(40624),r=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return o.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(r.Z,{icon:n,className:"mr-1"}),l)}},33440:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var o=n(25773),a=(n(27378),n(35318)),r=n(27915),i=n(79022);const l={title:"Configuration"},s=void 0,p={unversionedId:"proto/config",id:"proto/config",title:"Configuration",description:"We support configuration for both projects and users. Both config files are in",source:"@site/docs/proto/config.mdx",sourceDirName:"proto",slug:"/proto/config",permalink:"/docs/proto/config",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/config.mdx",tags:[],version:"current",frontMatter:{title:"Configuration"},sidebar:"proto",previous:{title:"Version detection",permalink:"/docs/proto/detection"},next:{title:"Supported tools",permalink:"/docs/proto/tools"}},c={},u=[{value:"Project configuration",id:"project-configuration",level:2},{value:"[plugins]",id:"plugins",level:3},{value:"User configuration",id:"user-configuration",level:2},{value:"auto-install",id:"auto-install",level:3},{value:"auto-clean",id:"auto-clean",level:3},{value:"node-intercept-globals",id:"node-intercept-globals",level:3},{value:'pin-latest',id:"pin-latest",level:3},{value:'[http]',id:"http",level:3},{value:"[plugins]",id:"plugins-1",level:3},{value:"GitHub Action",id:"github-action",level:2}],m={toc:u};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(r.Z,{text:"1 min",mdxType:"HeaderLabel"}),(0,a.kt)("p",null,"We support configuration for both projects and users. Both config files are in\n",(0,a.kt)("a",{parentName:"p",href:"https://toml.io/en/"},"TOML"),"."),(0,a.kt)("h2",{id:"project-configuration"},"Project configuration"),(0,a.kt)("p",null,"proto supports pinning versions of tools on a per-project or per-directory basis through our\n",(0,a.kt)("inlineCode",{parentName:"p"},".prototools")," configuration file. This file takes precedence during ",(0,a.kt)("a",{parentName:"p",href:"./detection"},"version detection"),"\nand can be created/updated with ",(0,a.kt)("a",{parentName:"p",href:"./commands/pin"},(0,a.kt)("inlineCode",{parentName:"a"},"proto pin")),"."),(0,a.kt)("p",null,"This configuration simply maps tools to versions for the current directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "16.16.0"\nnpm = "9"\ngo = "1.20"\nrust = "1.68.0"\n')),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The names of tools are the same used on the command line!")),(0,a.kt)("h3",{id:"plugins"},(0,a.kt)("inlineCode",{parentName:"h3"},"[plugins]")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"./plugins"},"Plugins")," can also be configured with the ",(0,a.kt)("inlineCode",{parentName:"p"},"[plugins]")," section.\n",(0,a.kt)("a",{parentName:"p",href:"./plugins#enabling-plugins"},"Learn more about this syntax"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nmy-tool = "source:https://raw.githubusercontent.com/my/tool/master/proto-plugin.toml"\n')),(0,a.kt)("p",null,"Once configured, you can run a plugin as if it was a built-in tool:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install my-tool\n")),(0,a.kt)("h2",{id:"user-configuration"},"User configuration"),(0,a.kt)("p",null,"proto operates with sane defaults and accomplishes its goals very well. However, we also believe in\nuser choice and customization, and as such, support a user configuration file located at\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),", which can be used to customize the behavior of proto."),(0,a.kt)("p",null,"Some of these settings (excluding plugins) can also be configured via environment variables."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"PROTO_AUTO_INSTALL=true proto run node\n")),(0,a.kt)("h3",{id:"auto-install"},(0,a.kt)("inlineCode",{parentName:"h3"},"auto-install")),(0,a.kt)("p",null,"When enabled, will automatically installing missing tools when ",(0,a.kt)("a",{parentName:"p",href:"./commands/run"},(0,a.kt)("inlineCode",{parentName:"a"},"proto run"))," is run,\ninstead of erroring. Defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"auto-install = true\n")),(0,a.kt)("h3",{id:"auto-clean"},(0,a.kt)("inlineCode",{parentName:"h3"},"auto-clean")),(0,a.kt)("p",null,"When enabled, will automatically clean up the proto cache when ",(0,a.kt)("a",{parentName:"p",href:"./commands/use"},(0,a.kt)("inlineCode",{parentName:"a"},"proto use"))," is run.\nDefaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"auto-clean = true\n")),(0,a.kt)("h3",{id:"node-intercept-globals"},(0,a.kt)("inlineCode",{parentName:"h3"},"node-intercept-globals")),(0,a.kt)("p",null,"When enabled, will intercept global package installs for node/npm/pnpm/yarn and suggest using\n",(0,a.kt)("a",{parentName:"p",href:"./commands/install-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto install-global"))," instead. Defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"node-intercept-globals = false\n")),(0,a.kt)("h3",{id:"pin-latest"},(0,a.kt)("inlineCode",{parentName:"h3"},"pin-latest"),(0,a.kt)(i.Z,{version:"0.19.0",mdxType:"VersionLabel"})),(0,a.kt)("p",null,'When defined and a tool is installed with the "latest" version, will automatically pin the resolved\nversion to the configured location. Accepts the following locations:'),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"global")," - Pins globally to ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/config.toml"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"local")," - Pins locally to ",(0,a.kt)("inlineCode",{parentName:"li"},".prototools"),".")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'pin-latest = "local"\n')),(0,a.kt)("h3",{id:"http"},(0,a.kt)("inlineCode",{parentName:"h3"},"[http]"),(0,a.kt)(i.Z,{version:"0.18.0",mdxType:"VersionLabel"})),(0,a.kt)("p",null,"Can be used to customize the HTTP client used by proto and warpgate, primarily for requesting files\nto download, available versions, and more. The following settings are available:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"allow-invalid-certs")," - When enabled, will allow invalid certificates instead of failing. This is\nan ",(0,a.kt)("em",{parentName:"li"},"escape hatch")," and should only be used if other settings have failed. Be sure you know what\nyou're doing!"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"proxies")," - A list of proxy URLs to use for requests."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"root-cert")," - The path to a root certificate to use for requests. This is useful for overriding\nthe native certificate, or for using a self-signed certificate, especially when in a\ncorporate/internal environment. Supports ",(0,a.kt)("inlineCode",{parentName:"li"},"pem")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"der")," files.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'[http]\nroot-cert = "/path/to/root/cert.pem"\n')),(0,a.kt)("h3",{id:"plugins-1"},(0,a.kt)("inlineCode",{parentName:"h3"},"[plugins]")),(0,a.kt)("p",null,"A mapping of plugins available to the user, and not just a project/directory. Refer to the\n",(0,a.kt)("a",{parentName:"p",href:"#plugins"},(0,a.kt)("inlineCode",{parentName:"a"},"[plugins]"))," section above for more information."),(0,a.kt)("h2",{id:"github-action"},"GitHub Action"),(0,a.kt)("p",null,"To streamline GitHub CI workflows, we provide the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-proto"},(0,a.kt)("inlineCode",{parentName:"a"},"moonrepo/setup-proto"))," action, which can be used to\ninstall ",(0,a.kt)("inlineCode",{parentName:"p"},"proto")," globally, and cache the toolchain found at ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n - uses: 'moonrepo/setup-proto@v1'\n - run: 'proto use'\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0627e785.d76891bf.js b/assets/js/0627e785.d76891bf.js deleted file mode 100644 index e050569cb32..00000000000 --- a/assets/js/0627e785.d76891bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4824],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||r;return n?o.createElement(g,i(i({ref:t},c),{},{components:n})):o.createElement(g,i({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.d(t,{Z:()=>i});var o=n(27378),a=n(83469),r=n(9619);function i(e){let{text:t}=e;return o.createElement(r.Z,{text:t,icon:a.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},79022:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(27378),a=n(9619);function r(e){let{header:t,inline:n,updated:r,version:i}=e;return o.createElement(a.Z,{text:`v${i}`,variant:r?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(27378),a=n(40624),r=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return o.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(r.Z,{icon:n,className:"mr-1"}),l)}},33440:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var o=n(25773),a=(n(27378),n(35318)),r=n(27915),i=n(79022);const l={title:"Configuration"},s=void 0,p={unversionedId:"proto/config",id:"proto/config",title:"Configuration",description:"We support configuration for both projects and users. Both config files are in",source:"@site/docs/proto/config.mdx",sourceDirName:"proto",slug:"/proto/config",permalink:"/docs/proto/config",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/config.mdx",tags:[],version:"current",frontMatter:{title:"Configuration"},sidebar:"proto",previous:{title:"Version detection",permalink:"/docs/proto/detection"},next:{title:"Supported tools",permalink:"/docs/proto/tools"}},c={},u=[{value:"Project configuration",id:"project-configuration",level:2},{value:"[plugins]",id:"plugins",level:3},{value:"User configuration",id:"user-configuration",level:2},{value:"auto-install",id:"auto-install",level:3},{value:"auto-clean",id:"auto-clean",level:3},{value:"node-intercept-globals",id:"node-intercept-globals",level:3},{value:'pin-latest',id:"pin-latest",level:3},{value:'[http]',id:"http",level:3},{value:"[plugins]",id:"plugins-1",level:3},{value:"GitHub Action",id:"github-action",level:2}],m={toc:u};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(r.Z,{text:"1 min",mdxType:"HeaderLabel"}),(0,a.kt)("p",null,"We support configuration for both projects and users. Both config files are in\n",(0,a.kt)("a",{parentName:"p",href:"https://toml.io/en/"},"TOML"),"."),(0,a.kt)("h2",{id:"project-configuration"},"Project configuration"),(0,a.kt)("p",null,"proto supports pinning versions of tools on a per-project or per-directory basis through our\n",(0,a.kt)("inlineCode",{parentName:"p"},".prototools")," configuration file. This file takes precedence during ",(0,a.kt)("a",{parentName:"p",href:"./detection"},"version detection"),"\nand can be created/updated with ",(0,a.kt)("a",{parentName:"p",href:"./commands/pin"},(0,a.kt)("inlineCode",{parentName:"a"},"proto pin")),"."),(0,a.kt)("p",null,"This configuration simply maps tools to versions for the current directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "16.16.0"\nnpm = "9"\ngo = "1.20"\nrust = "1.68.0"\n')),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The names of tools are the same used on the command line!")),(0,a.kt)("h3",{id:"plugins"},(0,a.kt)("inlineCode",{parentName:"h3"},"[plugins]")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"./plugins"},"Plugins")," can also be configured with the ",(0,a.kt)("inlineCode",{parentName:"p"},"[plugins]")," section.\n",(0,a.kt)("a",{parentName:"p",href:"./plugins#enabling-plugins"},"Learn more about this syntax"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nmy-tool = "source:https://raw.githubusercontent.com/my/tool/master/proto-plugin.toml"\n')),(0,a.kt)("p",null,"Once configured, you can run a plugin as if it was a built-in tool:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install my-tool\n")),(0,a.kt)("h2",{id:"user-configuration"},"User configuration"),(0,a.kt)("p",null,"proto operates with sane defaults and accomplishes its goals very well. However, we also believe in\nuser choice and customization, and as such, support a user configuration file located at\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),", which can be used to customize the behavior of proto."),(0,a.kt)("p",null,"Some of these settings (excluding plugins) can also be configured via environment variables."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"PROTO_AUTO_INSTALL=true proto run node\n")),(0,a.kt)("h3",{id:"auto-install"},(0,a.kt)("inlineCode",{parentName:"h3"},"auto-install")),(0,a.kt)("p",null,"When enabled, will automatically installing missing tools when ",(0,a.kt)("a",{parentName:"p",href:"./commands/run"},(0,a.kt)("inlineCode",{parentName:"a"},"proto run"))," is run,\ninstead of erroring. Defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"auto-install = true\n")),(0,a.kt)("h3",{id:"auto-clean"},(0,a.kt)("inlineCode",{parentName:"h3"},"auto-clean")),(0,a.kt)("p",null,"When enabled, will automatically clean up the proto cache when ",(0,a.kt)("a",{parentName:"p",href:"./commands/use"},(0,a.kt)("inlineCode",{parentName:"a"},"proto use"))," is run.\nDefaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"auto-clean = true\n")),(0,a.kt)("h3",{id:"node-intercept-globals"},(0,a.kt)("inlineCode",{parentName:"h3"},"node-intercept-globals")),(0,a.kt)("p",null,"When enabled, will intercept global package installs for node/npm/pnpm/yarn and suggest using\n",(0,a.kt)("a",{parentName:"p",href:"./commands/install-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto install-global"))," instead. Defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"node-intercept-globals = false\n")),(0,a.kt)("h3",{id:"pin-latest"},(0,a.kt)("inlineCode",{parentName:"h3"},"pin-latest"),(0,a.kt)(i.Z,{version:"0.19.0",mdxType:"VersionLabel"})),(0,a.kt)("p",null,'When defined and a tool is installed with the "latest" version, will automatically pin the resolved\nversion to the configured location. Accepts the following locations:'),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"global")," - Pins globally to ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/config.toml"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"local")," - Pins locally to ",(0,a.kt)("inlineCode",{parentName:"li"},".prototools"),".")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'pin-latest = "local"\n')),(0,a.kt)("h3",{id:"http"},(0,a.kt)("inlineCode",{parentName:"h3"},"[http]"),(0,a.kt)(i.Z,{version:"0.18.0",mdxType:"VersionLabel"})),(0,a.kt)("p",null,"Can be used to customize the HTTP client used by proto and warpgate, primarily for requesting files\nto download, available versions, and more. The following settings are available:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"allow-invalid-certs")," - When enabled, will allow invalid certificates instead of failing. This is\nan ",(0,a.kt)("em",{parentName:"li"},"escape hatch")," and should only be used if other settings have failed. Be sure you know what\nyou're doing!"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"proxies")," - A list of proxy URLs to use for requests."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"root-cert")," - The path to a root certificate to use for requests. This is useful for overriding\nthe native certificate, or for using a self-signed certificate, especially when in a\ncorporate/internal environment. Supports ",(0,a.kt)("inlineCode",{parentName:"li"},"pem")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"der")," files.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'[http]\nroot-cert = "/path/to/root/cert.pem"\n')),(0,a.kt)("h3",{id:"plugins-1"},(0,a.kt)("inlineCode",{parentName:"h3"},"[plugins]")),(0,a.kt)("p",null,"A mapping of plugins available to the user, and not just a project/directory. Refer to the\n",(0,a.kt)("a",{parentName:"p",href:"#plugins"},(0,a.kt)("inlineCode",{parentName:"a"},"[plugins]"))," section above for more information."),(0,a.kt)("h2",{id:"github-action"},"GitHub Action"),(0,a.kt)("p",null,"To streamline GitHub CI workflows, we provide the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-proto"},(0,a.kt)("inlineCode",{parentName:"a"},"moonrepo/setup-proto"))," action, which can be used to\ninstall ",(0,a.kt)("inlineCode",{parentName:"p"},"proto")," globally, and cache the toolchain found at ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n - uses: 'moonrepo/setup-proto@v1'\n - run: 'proto use'\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/062a1a43.8907525f.js b/assets/js/062a1a43.8907525f.js new file mode 100644 index 00000000000..1ab13088778 --- /dev/null +++ b/assets/js/062a1a43.8907525f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54403],{88217:s=>{s.exports=JSON.parse('{"label":"git-hooks","permalink":"/docs/tags/git-hooks","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/062a1a43.da8f58eb.js b/assets/js/062a1a43.da8f58eb.js deleted file mode 100644 index 046fd40bc0a..00000000000 --- a/assets/js/062a1a43.da8f58eb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4403],{88217:s=>{s.exports=JSON.parse('{"label":"git-hooks","permalink":"/docs/tags/git-hooks","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/0681d8e1.ae51b0af.js b/assets/js/0681d8e1.ae51b0af.js new file mode 100644 index 00000000000..5be126b0b61 --- /dev/null +++ b/assets/js/0681d8e1.ae51b0af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30601],{99663:e=>{e.exports=JSON.parse('{"label":"version","permalink":"/blog/tags/version","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/0681d8e1.c4a8ee4d.js b/assets/js/0681d8e1.c4a8ee4d.js deleted file mode 100644 index 318de41000f..00000000000 --- a/assets/js/0681d8e1.c4a8ee4d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8357],{99663:e=>{e.exports=JSON.parse('{"label":"version","permalink":"/blog/tags/version","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/0684a904.15fdecc8.js b/assets/js/0684a904.15fdecc8.js new file mode 100644 index 00000000000..e57d7ebc2ea --- /dev/null +++ b/assets/js/0684a904.15fdecc8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50670],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=a,h=m["".concat(p,".").concat(d)]||m[d]||c[d]||r;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var o=n(25773),a=(n(27378),n(35318));const r={slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},i=void 0,l={permalink:"/blog/proto-v0.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx",source:"@site/blog/2023-05-23_proto-v0.9.mdx",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",description:"This is a small release that provides many internal improvements.",date:"2023-05-23T00:00:00.000Z",formattedDate:"May 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"action",permalink:"/blog/tags/action"},{label:"github",permalink:"/blog/tags/github"}],readingTime:1.68,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},prevItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"},nextItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"}},p={image:n(22917).Z,authorsImageUrls:[void 0]},s=[{value:"New moonrepo/setup-proto GitHub action",id:"new-moonreposetup-proto-github-action",level:2},{value:"Added install.unpack to TOML plugin",id:"added-installunpack-to-toml-plugin",level:2},{value:"Initial support for node-gyp",id:"initial-support-for-node-gyp",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function c(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This is a small release that provides many internal improvements."),(0,a.kt)("h2",{id:"new-moonreposetup-proto-github-action"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"moonrepo/setup-proto")," GitHub action"),(0,a.kt)("p",null,"If you're using proto in GitHub Actions and would love to automate the workflow as much as possible,\nwell look no further, as we're introducing the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-proto"},"moonrepo/setup-proto")," action. Thanks to\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/tomdavidson"},"Tom Davidson")," for the initial spike of work!"),(0,a.kt)("p",null,"This action will automatically install the ",(0,a.kt)("inlineCode",{parentName:"p"},"proto")," binary globally, and cache the toolchain at\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto")," (be sure to run ",(0,a.kt)("inlineCode",{parentName:"p"},"proto use")," to download and install tools)."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n - uses: 'moonrepo/setup-proto@v0'\n - run: 'proto use'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"If you're using moon, be sure to use\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},"moonrepo/setup-moon")," instead.")),(0,a.kt)("h2",{id:"added-installunpack-to-toml-plugin"},"Added ",(0,a.kt)("inlineCode",{parentName:"h2"},"install.unpack")," to TOML plugin"),(0,a.kt)("p",null,"Our ",(0,a.kt)("a",{parentName:"p",href:"./proto-v0.7#toml-plugins"},"TOML plugins")," have been quite popular, and the community has been\nusing them to much success. However, the plugin assumed that all downloaded files are archives (tar,\nzip) and will attempt to unpack them based on file extension. This is not always the case, as some\ndownloads are just raw executables."),(0,a.kt)("p",null,"Because of this, unpacking would sometimes fail, or we'd be unable to extract the correct file\nextension. To work around this limitation, we're introducing a new setting, ",(0,a.kt)("inlineCode",{parentName:"p"},"install.unpack"),", that\ncontrols whether the downloaded file should be unpacked or not. By default this setting is ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,a.kt)("p",null,"Here's an example using ",(0,a.kt)("a",{parentName:"p",href:"/moon"},"moon"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'# ...\n\n[platform.linux]\ndownload-file = "moon-{arch}-unknown-linux-{libc}"\n\n[platform.macos]\ndownload-file = "moon-{arch}-apple-darwin"\n\n[platform.windows]\ndownload-file = "moon-{arch}-pc-windows-msvc.exe"\n\n[install]\ndownload-url = "https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}"\nunpack = false\n')),(0,a.kt)("h2",{id:"initial-support-for-node-gyp"},"Initial support for ",(0,a.kt)("inlineCode",{parentName:"h2"},"node-gyp")),(0,a.kt)("p",null,"The ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/nodejs/node-gyp"},(0,a.kt)("inlineCode",{parentName:"a"},"node-gyp")," binary")," is required for building Node.js native\naddons, and was previously not supported in proto. We will now create a ",(0,a.kt)("inlineCode",{parentName:"p"},"node-gyp")," binary in\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," when the ",(0,a.kt)("inlineCode",{parentName:"p"},"npm")," tool is installed. Why npm? Because ",(0,a.kt)("inlineCode",{parentName:"p"},"node-gyp")," comes packaged with npm\ninstead of Node.js... for some reason."),(0,a.kt)("p",null,"With that being said, this is currently experimental, as we haven't tested it thoroughly, and are\nunaware of all the possible edge cases. So keep that in mind!"),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.9.0"},"official release")," for a full list\nof changes."))}c.isMDXComponent=!0},22917:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.9-c189afd32d83182c9ce2677593363d17.png"}}]); \ No newline at end of file diff --git a/assets/js/0684a904.db1d8b27.js b/assets/js/0684a904.db1d8b27.js deleted file mode 100644 index bbb3e6e151b..00000000000 --- a/assets/js/0684a904.db1d8b27.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[670],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=a,h=m["".concat(p,".").concat(d)]||m[d]||c[d]||r;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var o=n(25773),a=(n(27378),n(35318));const r={slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},i=void 0,l={permalink:"/blog/proto-v0.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx",source:"@site/blog/2023-05-23_proto-v0.9.mdx",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",description:"This is a small release that provides many internal improvements.",date:"2023-05-23T00:00:00.000Z",formattedDate:"May 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"action",permalink:"/blog/tags/action"},{label:"github",permalink:"/blog/tags/github"}],readingTime:1.68,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},prevItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"},nextItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"}},p={image:n(22917).Z,authorsImageUrls:[void 0]},s=[{value:"New moonrepo/setup-proto GitHub action",id:"new-moonreposetup-proto-github-action",level:2},{value:"Added install.unpack to TOML plugin",id:"added-installunpack-to-toml-plugin",level:2},{value:"Initial support for node-gyp",id:"initial-support-for-node-gyp",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function c(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This is a small release that provides many internal improvements."),(0,a.kt)("h2",{id:"new-moonreposetup-proto-github-action"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"moonrepo/setup-proto")," GitHub action"),(0,a.kt)("p",null,"If you're using proto in GitHub Actions and would love to automate the workflow as much as possible,\nwell look no further, as we're introducing the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-proto"},"moonrepo/setup-proto")," action. Thanks to\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/tomdavidson"},"Tom Davidson")," for the initial spike of work!"),(0,a.kt)("p",null,"This action will automatically install the ",(0,a.kt)("inlineCode",{parentName:"p"},"proto")," binary globally, and cache the toolchain at\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto")," (be sure to run ",(0,a.kt)("inlineCode",{parentName:"p"},"proto use")," to download and install tools)."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n - uses: 'moonrepo/setup-proto@v0'\n - run: 'proto use'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"If you're using moon, be sure to use\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},"moonrepo/setup-moon")," instead.")),(0,a.kt)("h2",{id:"added-installunpack-to-toml-plugin"},"Added ",(0,a.kt)("inlineCode",{parentName:"h2"},"install.unpack")," to TOML plugin"),(0,a.kt)("p",null,"Our ",(0,a.kt)("a",{parentName:"p",href:"./proto-v0.7#toml-plugins"},"TOML plugins")," have been quite popular, and the community has been\nusing them to much success. However, the plugin assumed that all downloaded files are archives (tar,\nzip) and will attempt to unpack them based on file extension. This is not always the case, as some\ndownloads are just raw executables."),(0,a.kt)("p",null,"Because of this, unpacking would sometimes fail, or we'd be unable to extract the correct file\nextension. To work around this limitation, we're introducing a new setting, ",(0,a.kt)("inlineCode",{parentName:"p"},"install.unpack"),", that\ncontrols whether the downloaded file should be unpacked or not. By default this setting is ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,a.kt)("p",null,"Here's an example using ",(0,a.kt)("a",{parentName:"p",href:"/moon"},"moon"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'# ...\n\n[platform.linux]\ndownload-file = "moon-{arch}-unknown-linux-{libc}"\n\n[platform.macos]\ndownload-file = "moon-{arch}-apple-darwin"\n\n[platform.windows]\ndownload-file = "moon-{arch}-pc-windows-msvc.exe"\n\n[install]\ndownload-url = "https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}"\nunpack = false\n')),(0,a.kt)("h2",{id:"initial-support-for-node-gyp"},"Initial support for ",(0,a.kt)("inlineCode",{parentName:"h2"},"node-gyp")),(0,a.kt)("p",null,"The ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/nodejs/node-gyp"},(0,a.kt)("inlineCode",{parentName:"a"},"node-gyp")," binary")," is required for building Node.js native\naddons, and was previously not supported in proto. We will now create a ",(0,a.kt)("inlineCode",{parentName:"p"},"node-gyp")," binary in\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," when the ",(0,a.kt)("inlineCode",{parentName:"p"},"npm")," tool is installed. Why npm? Because ",(0,a.kt)("inlineCode",{parentName:"p"},"node-gyp")," comes packaged with npm\ninstead of Node.js... for some reason."),(0,a.kt)("p",null,"With that being said, this is currently experimental, as we haven't tested it thoroughly, and are\nunaware of all the possible edge cases. So keep that in mind!"),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.9.0"},"official release")," for a full list\nof changes."))}c.isMDXComponent=!0},22917:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.9-c189afd32d83182c9ce2677593363d17.png"}}]); \ No newline at end of file diff --git a/assets/js/068b8e98.6678dce6.js b/assets/js/068b8e98.6678dce6.js new file mode 100644 index 00000000000..b248c4e18e2 --- /dev/null +++ b/assets/js/068b8e98.6678dce6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35666],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,f=u["".concat(c,".").concat(d)]||u[d]||p[d]||o;return n?r.createElement(f,i(i({ref:t},m),{},{components:n})):r.createElement(f,i({ref:t},m))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(25773),a=(n(27378),n(35318));const o={title:"ci"},i=void 0,l={unversionedId:"commands/ci",id:"commands/ci",title:"ci",description:"The moon ci command is a special command that should be ran in a continuous integration (CI)",source:"@site/docs/commands/ci.mdx",sourceDirName:"commands",slug:"/commands/ci",permalink:"/docs/commands/ci",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/ci.mdx",tags:[],version:"current",frontMatter:{title:"ci"},sidebar:"docs",previous:{title:"bin",permalink:"/docs/commands/bin"},next:{title:"check",permalink:"/docs/commands/check"}},c={},s=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],m={toc:s};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon ci")," command is a special command that should be ran in a continuous integration (CI)\nenvironment, as it does all the heavy lifting necessary for effectively running tasks."),(0,a.kt)("p",null,"By default this will run all tasks that are affected by touched files and have the\n",(0,a.kt)("a",{parentName:"p",href:"../config/project#runinci"},(0,a.kt)("inlineCode",{parentName:"a"},"runInCI"))," task option enabled."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon ci\n")),(0,a.kt)("p",null,"However, you can provide a list of targets to run, instead of relying on ",(0,a.kt)("inlineCode",{parentName:"p"},"runInCI"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon ci :build :lint\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"View the official ",(0,a.kt)("a",{parentName:"p",href:"../guides/ci"},"continuous integration guide")," for a more in-depth example of how\nto utilize this command.")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"...[target]")," - ",(0,a.kt)("a",{parentName:"li",href:"../concepts/target"},"Targets")," to run.")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--base ")," - Base branch, commit, or revision to compare against. Can be set with ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON_BASE"),".\nDefaults to ",(0,a.kt)("a",{parentName:"li",href:"../config/workspace#defaultbranch"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--head ")," - Current branch, commit, or revision to compare with. Can be set with ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON_HEAD"),".\nDefaults to ",(0,a.kt)("inlineCode",{parentName:"li"},"HEAD"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--job ")," - Index of the current job."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--jobTotal ")," Total amount of jobs to run.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/068b8e98.a59995ff.js b/assets/js/068b8e98.a59995ff.js deleted file mode 100644 index b17c9ab0df8..00000000000 --- a/assets/js/068b8e98.a59995ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5666],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,f=u["".concat(c,".").concat(d)]||u[d]||p[d]||o;return n?r.createElement(f,i(i({ref:t},m),{},{components:n})):r.createElement(f,i({ref:t},m))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(25773),a=(n(27378),n(35318));const o={title:"ci"},i=void 0,l={unversionedId:"commands/ci",id:"commands/ci",title:"ci",description:"The moon ci command is a special command that should be ran in a continuous integration (CI)",source:"@site/docs/commands/ci.mdx",sourceDirName:"commands",slug:"/commands/ci",permalink:"/docs/commands/ci",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/ci.mdx",tags:[],version:"current",frontMatter:{title:"ci"},sidebar:"docs",previous:{title:"bin",permalink:"/docs/commands/bin"},next:{title:"check",permalink:"/docs/commands/check"}},c={},s=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],m={toc:s};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon ci")," command is a special command that should be ran in a continuous integration (CI)\nenvironment, as it does all the heavy lifting necessary for effectively running tasks."),(0,a.kt)("p",null,"By default this will run all tasks that are affected by touched files and have the\n",(0,a.kt)("a",{parentName:"p",href:"../config/project#runinci"},(0,a.kt)("inlineCode",{parentName:"a"},"runInCI"))," task option enabled."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon ci\n")),(0,a.kt)("p",null,"However, you can provide a list of targets to run, instead of relying on ",(0,a.kt)("inlineCode",{parentName:"p"},"runInCI"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon ci :build :lint\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"View the official ",(0,a.kt)("a",{parentName:"p",href:"../guides/ci"},"continuous integration guide")," for a more in-depth example of how\nto utilize this command.")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"...[target]")," - ",(0,a.kt)("a",{parentName:"li",href:"../concepts/target"},"Targets")," to run.")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--base ")," - Base branch, commit, or revision to compare against. Can be set with ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON_BASE"),".\nDefaults to ",(0,a.kt)("a",{parentName:"li",href:"../config/workspace#defaultbranch"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--head ")," - Current branch, commit, or revision to compare with. Can be set with ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON_HEAD"),".\nDefaults to ",(0,a.kt)("inlineCode",{parentName:"li"},"HEAD"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--job ")," - Index of the current job."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--jobTotal ")," Total amount of jobs to run.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/073e718f.74f8d7fd.js b/assets/js/073e718f.74f8d7fd.js deleted file mode 100644 index 4bdd979dfbb..00000000000 --- a/assets/js/073e718f.74f8d7fd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2656],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"Root-level project"},i=void 0,s={unversionedId:"guides/root-project",id:"guides/root-project",title:"Root-level project",description:"Coming from other repositories or task runner, you may be familiar with tasks available at the",source:"@site/docs/guides/root-project.mdx",sourceDirName:"guides",slug:"/guides/root-project",permalink:"/docs/guides/root-project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/root-project.mdx",tags:[],version:"current",frontMatter:{title:"Root-level project"},sidebar:"guides",previous:{title:"Remote caching",permalink:"/docs/guides/remote-cache"},next:{title:"Sharing workspace configuration",permalink:"/docs/guides/sharing-config"}},l={},c=[{value:"Caveats",id:"caveats",level:2},{value:"Greedy inputs",id:"greedy-inputs",level:3},{value:"Inherited tasks",id:"inherited-tasks",level:3}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Coming from other repositories or task runner, you may be familiar with tasks available at the\nrepository root, in which one-off, organization, maintenance, or process oriented tasks can be ran.\nmoon supports this through a concept known as a root-level project."),(0,o.kt)("p",null,"Begin by adding the root to ",(0,o.kt)("a",{parentName:"p",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects"))," with a source value of ",(0,o.kt)("inlineCode",{parentName:"p"},"."),"\n(current directory relative from the workspace)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"# As a map\nprojects:\n root: '.'\n\n# As a list of globs\nprojects:\n - '.'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using globs, the root project's name will be inferred from the repository folder name. Be\nwary of this as it can change based on what a developer has checked out as.")),(0,o.kt)("p",null,"Once added, create a ",(0,o.kt)("a",{parentName:"p",href:"../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," in the root of the repository. From here you\ncan define tasks that can be ran using this new root-level project name, for example,\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon run root:"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n versionCheck:\n command: 'yarn version check'\n inputs: []\n options:\n cache: false\n")),(0,o.kt)("p",null,"And that's it, but there are a few caveats to be aware of..."),(0,o.kt)("h2",{id:"caveats"},"Caveats"),(0,o.kt)("h3",{id:"greedy-inputs"},"Greedy inputs"),(0,o.kt)("p",null,"Task ",(0,o.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,o.kt)("inlineCode",{parentName:"a"},"inputs"))," default to ",(0,o.kt)("inlineCode",{parentName:"p"},"**/*"),", which would result in root-level tasks\nscanning ",(0,o.kt)("em",{parentName:"p"},"all")," files in the repository. This will be a very expensive operation! We suggest\nrestricting inputs to a very succinct whitelist, or disabling inputs entirely."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n oneOff:\n # ...\n inputs: []\n")),(0,o.kt)("h3",{id:"inherited-tasks"},"Inherited tasks"),(0,o.kt)("p",null,"Because a root project is still a project in the workspace, it will inherit all tasks defined in\n",(0,o.kt)("a",{parentName:"p",href:"../config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),", which may be unexpected. To mitigate this, you can exclude\nsome or all of these tasks in the root config with\n",(0,o.kt)("a",{parentName:"p",href:"../config/project#inheritedtasks"},(0,o.kt)("inlineCode",{parentName:"a"},"workspace.inheritedTasks")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"workspace:\n inheritedTasks:\n include: []\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/073e718f.7eb896e0.js b/assets/js/073e718f.7eb896e0.js new file mode 100644 index 00000000000..a2b21af1e01 --- /dev/null +++ b/assets/js/073e718f.7eb896e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42656],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"Root-level project"},i=void 0,s={unversionedId:"guides/root-project",id:"guides/root-project",title:"Root-level project",description:"Coming from other repositories or task runner, you may be familiar with tasks available at the",source:"@site/docs/guides/root-project.mdx",sourceDirName:"guides",slug:"/guides/root-project",permalink:"/docs/guides/root-project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/root-project.mdx",tags:[],version:"current",frontMatter:{title:"Root-level project"},sidebar:"guides",previous:{title:"Remote caching",permalink:"/docs/guides/remote-cache"},next:{title:"Sharing workspace configuration",permalink:"/docs/guides/sharing-config"}},l={},c=[{value:"Caveats",id:"caveats",level:2},{value:"Greedy inputs",id:"greedy-inputs",level:3},{value:"Inherited tasks",id:"inherited-tasks",level:3}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Coming from other repositories or task runner, you may be familiar with tasks available at the\nrepository root, in which one-off, organization, maintenance, or process oriented tasks can be ran.\nmoon supports this through a concept known as a root-level project."),(0,o.kt)("p",null,"Begin by adding the root to ",(0,o.kt)("a",{parentName:"p",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects"))," with a source value of ",(0,o.kt)("inlineCode",{parentName:"p"},"."),"\n(current directory relative from the workspace)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"# As a map\nprojects:\n root: '.'\n\n# As a list of globs\nprojects:\n - '.'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using globs, the root project's name will be inferred from the repository folder name. Be\nwary of this as it can change based on what a developer has checked out as.")),(0,o.kt)("p",null,"Once added, create a ",(0,o.kt)("a",{parentName:"p",href:"../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," in the root of the repository. From here you\ncan define tasks that can be ran using this new root-level project name, for example,\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon run root:"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n versionCheck:\n command: 'yarn version check'\n inputs: []\n options:\n cache: false\n")),(0,o.kt)("p",null,"And that's it, but there are a few caveats to be aware of..."),(0,o.kt)("h2",{id:"caveats"},"Caveats"),(0,o.kt)("h3",{id:"greedy-inputs"},"Greedy inputs"),(0,o.kt)("p",null,"Task ",(0,o.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,o.kt)("inlineCode",{parentName:"a"},"inputs"))," default to ",(0,o.kt)("inlineCode",{parentName:"p"},"**/*"),", which would result in root-level tasks\nscanning ",(0,o.kt)("em",{parentName:"p"},"all")," files in the repository. This will be a very expensive operation! We suggest\nrestricting inputs to a very succinct whitelist, or disabling inputs entirely."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n oneOff:\n # ...\n inputs: []\n")),(0,o.kt)("h3",{id:"inherited-tasks"},"Inherited tasks"),(0,o.kt)("p",null,"Because a root project is still a project in the workspace, it will inherit all tasks defined in\n",(0,o.kt)("a",{parentName:"p",href:"../config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),", which may be unexpected. To mitigate this, you can exclude\nsome or all of these tasks in the root config with\n",(0,o.kt)("a",{parentName:"p",href:"../config/project#inheritedtasks"},(0,o.kt)("inlineCode",{parentName:"a"},"workspace.inheritedTasks")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"workspace:\n inheritedTasks:\n include: []\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/088b3228.a4173c89.js b/assets/js/088b3228.a4173c89.js new file mode 100644 index 00000000000..b2c15e57d34 --- /dev/null +++ b/assets/js/088b3228.a4173c89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72882],{596:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/typescript","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/088b3228.c92fd087.js b/assets/js/088b3228.c92fd087.js deleted file mode 100644 index 37b04bd4df2..00000000000 --- a/assets/js/088b3228.c92fd087.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2882],{596:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/typescript","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/09d7020f.897cc5fb.js b/assets/js/09d7020f.897cc5fb.js new file mode 100644 index 00000000000..addd8b20e09 --- /dev/null +++ b/assets/js/09d7020f.897cc5fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30959],{1150:e=>{e.exports=JSON.parse('{"label":"code","permalink":"/docs/tags/code","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","permalink":"/docs/guides/codeowners"}]}')}}]); \ No newline at end of file diff --git a/assets/js/09d7020f.b3cae273.js b/assets/js/09d7020f.b3cae273.js deleted file mode 100644 index 223a6cb1dcf..00000000000 --- a/assets/js/09d7020f.b3cae273.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[959],{1150:e=>{e.exports=JSON.parse('{"label":"code","permalink":"/docs/tags/code","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","permalink":"/docs/guides/codeowners"}]}')}}]); \ No newline at end of file diff --git a/assets/js/0ae21139.9dd01147.js b/assets/js/0ae21139.9dd01147.js new file mode 100644 index 00000000000..5db89a641df --- /dev/null +++ b/assets/js/0ae21139.9dd01147.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64788],{36585:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/projects","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0ae21139.dafa5cb4.js b/assets/js/0ae21139.dafa5cb4.js deleted file mode 100644 index d3783d54714..00000000000 --- a/assets/js/0ae21139.dafa5cb4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4788],{36585:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/projects","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0b1dc2cd.207f9a3e.js b/assets/js/0b1dc2cd.207f9a3e.js deleted file mode 100644 index 0fb595879a4..00000000000 --- a/assets/js/0b1dc2cd.207f9a3e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5971],{51973:e=>{e.exports=JSON.parse('{"title":"query","description":"Query information about moon, its projects, their tasks, the environment, the pipeline, and many other aspects of the workspace.","keywords":["cli","commands","query"],"slug":"/commands/query","permalink":"/docs/commands/query","navigation":{"previous":{"title":"project-graph","permalink":"/docs/commands/project-graph"},"next":{"title":"hash","permalink":"/docs/commands/query/hash"}}}')}}]); \ No newline at end of file diff --git a/assets/js/0b1dc2cd.2e288bee.js b/assets/js/0b1dc2cd.2e288bee.js new file mode 100644 index 00000000000..045e5c45163 --- /dev/null +++ b/assets/js/0b1dc2cd.2e288bee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[25971],{51973:e=>{e.exports=JSON.parse('{"title":"query","description":"Query information about moon, its projects, their tasks, the environment, the pipeline, and many other aspects of the workspace.","keywords":["cli","commands","query"],"slug":"/commands/query","permalink":"/docs/commands/query","navigation":{"previous":{"title":"project-graph","permalink":"/docs/commands/project-graph"},"next":{"title":"hash","permalink":"/docs/commands/query/hash"}}}')}}]); \ No newline at end of file diff --git a/assets/js/0b289f4d.11ee9f8c.js b/assets/js/0b289f4d.11ee9f8c.js new file mode 100644 index 00000000000..63ab24ce98e --- /dev/null +++ b/assets/js/0b289f4d.11ee9f8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21575],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),d=r,f=p["".concat(s,".").concat(d)]||p[d]||m[d]||o;return n?a.createElement(f,l(l({ref:t},c),{},{components:n})):a.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=m.indexOf(t),a=u[n].value;a!==i&&(p(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=m.indexOf(e.currentTarget)+1;t=m[n]??m[0];break}case"ArrowLeft":{const n=m.indexOf(e.currentTarget)-1;t=m[n]??m[m.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>m.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function p(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(m,(0,a.Z)({},e,t)),r.createElement(p,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>p});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[p,d]=m({queryString:n,groupId:r}),[f,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),g=(()=>{const e=p??f;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}},239:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),o=n(33337),l=n(39798);const i={slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},s=void 0,u={permalink:"/blog/v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-21_v0.17.mdx",source:"@site/blog/2022-10-21_v0.17.mdx",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",description:"With this release, we're landing the first iteration of our notifier service, starting with",date:"2022-10-21T00:00:00.000Z",formattedDate:"October 21, 2022",tags:[{label:"notifier",permalink:"/blog/tags/notifier"},{label:"runner",permalink:"/blog/tags/runner"},{label:"config",permalink:"/blog/tags/config"},{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:3.18,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},prevItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"},nextItem:{title:"New VS Code extension!",permalink:"/blog/vscode-extension"}},c={image:n(41249).Z,authorsImageUrls:[void 0]},m=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Minor changes to ID formatting",id:"minor-changes-to-id-formatting",level:3},{value:"Task type has been renamed to platform",id:"task-type-has-been-renamed-to-platform",level:3},{value:"Webhook events (experimental)",id:"webhook-events-experimental",level:2},{value:"YAML anchors and aliases",id:"yaml-anchors-and-aliases",level:2},{value:"VS Code extension",id:"vs-code-extension",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:m};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're landing the first iteration of our notifier service, starting with\nwebhooks! We've also spent some time working on quality of life improvements."),(0,r.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,r.kt)("p",null,"To start, we have a few breaking changes this release to be aware of!"),(0,r.kt)("h3",{id:"minor-changes-to-id-formatting"},"Minor changes to ID formatting"),(0,r.kt)("p",null,"An ID refers to many things \u2014 project names, task names, target segments, so on and so forth. When\nparsing these values, we format them to remove unwanted characters, as these IDs are used in many\ncontexts, many of which need to be strict."),(0,r.kt)("p",null,"Previously, we would remove unwanted characters entirely. Instead, we now replace them with dashes\n(",(0,r.kt)("inlineCode",{parentName:"p"},"-"),") for better readability. Take the following for example:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"ID"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Old"),(0,r.kt)("th",{parentName:"tr",align:"left"},"New"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"domain.com"),(0,r.kt)("td",{parentName:"tr",align:"left"},"domaincom"),(0,r.kt)("td",{parentName:"tr",align:"left"},"domain-com")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"build:esm"),(0,r.kt)("td",{parentName:"tr",align:"left"},"buildesm"),(0,r.kt)("td",{parentName:"tr",align:"left"},"build-esm")))),(0,r.kt)("h3",{id:"task-type-has-been-renamed-to-platform"},"Task ",(0,r.kt)("inlineCode",{parentName:"h3"},"type")," has been renamed to ",(0,r.kt)("inlineCode",{parentName:"h3"},"platform")),(0,r.kt)("p",null,"This setting was renamed for a few reasons. To start, tasks actually have a\n",(0,r.kt)("a",{parentName:"p",href:"../docs/concepts/task#types"},"type internally")," that is not configured, but is inferred based on\nwhat's configured. This was a bit confusing."),(0,r.kt)("p",null,"And secondly, our toolchain refers to language integrations as platforms, and since this setting\ndetermines which tool to run with, we wanted to align on the platform terminology."),(0,r.kt)(o.Z,{groupId:"task-type",defaultValue:"before",values:[{label:"Before",value:"before"},{label:"After",value:"after"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"before",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n clean:\n command: 'rm -rf ./dist'\n type: 'system'\n"))),(0,r.kt)(l.Z,{value:"after",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n clean:\n command: 'rm -rf ./dist'\n platform: 'system'\n")))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Because of this change, the ",(0,r.kt)("inlineCode",{parentName:"p"},"$taskType")," token was also renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"$taskPlatform"),"!")),(0,r.kt)("h2",{id:"webhook-events-experimental"},"Webhook events (experimental)"),(0,r.kt)("p",null,"Looking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe\nyou want to send Slack or Discord notifications? With our new notifier system, this is now possible\nthrough webhooks!"),(0,r.kt)("p",null,"Simply enable the ",(0,r.kt)("a",{parentName:"p",href:"../docs/config/workspace#webhookurl"},(0,r.kt)("inlineCode",{parentName:"a"},"notifier.webhookUrl"))," setting to start\nreceiving events from your CI environments."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"notifier:\n webhookUrl: 'https://api.company.com/some/endpoint'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/webhooks"},"official guide on webhooks")," for a full list of events and an\nexample payload structure!")),(0,r.kt)("h2",{id:"yaml-anchors-and-aliases"},"YAML anchors and aliases"),(0,r.kt)("p",null,"We've updated our YAML configuration files to support extended syntax,\n",(0,r.kt)("a",{parentName:"p",href:"https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/"},"anchors (",(0,r.kt)("inlineCode",{parentName:"a"},"&"),") and aliases (",(0,r.kt)("inlineCode",{parentName:"a"},"*"),")"),".\nWith this new syntax, you're now able to reduce the amount of duplication required in your config\nfiles, especially when declaring tasks, as demonstrated below!"),(0,r.kt)(o.Z,{groupId:"yaml",defaultValue:"before",values:[{label:"Before",value:"before"},{label:"After",value:"after"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"before",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n astro:\n command: 'astro'\n local: true\n\n dev:\n command: 'astro dev'\n inputs:\n - '@group(astro)'\n local: true\n\n build:\n command: 'astro build'\n inputs:\n - '@group(astro)'\n outputs:\n - 'dist'\n\n check:\n command: 'astro check'\n inputs:\n - '@group(astro)'\n deps:\n - '~:typecheck'\n\n preview:\n command: 'astro preview'\n inputs:\n - '@group(astro)'\n deps:\n - '~:build'\n local: true\n"))),(0,r.kt)(l.Z,{value:"after",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"_astro: &astro\n command: 'astro'\n inputs:\n - '@group(astro)'\n\ntasks:\n dev:\n <<: *astro\n args: 'dev'\n local: true\n\n build:\n <<: *astro\n args: 'build'\n outputs:\n - 'dist'\n\n check:\n <<: *astro\n args: 'check'\n\n preview:\n <<: *astro\n args: 'preview'\n deps:\n - '~:build'\n local: true\n")))),(0,r.kt)("h2",{id:"vs-code-extension"},"VS Code extension"),(0,r.kt)("p",null,"If you missed the ",(0,r.kt)("a",{parentName:"p",href:"./vscode-extension"},"announcement earlier this week"),", we released the initial\nversion of our new VS Code extension! Give it a try and\n",(0,r.kt)("a",{parentName:"p",href:"../docs/editors/vscode"},"refer to the documentation")," for more information."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.17.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Increased runtime performance and reduced memory consumption."),(0,r.kt)("li",{parentName:"ul"},"Template enum variables can now define objects for their\n",(0,r.kt)("a",{parentName:"li",href:"../docs/config/template#values"},(0,r.kt)("inlineCode",{parentName:"a"},"values")),"."),(0,r.kt)("li",{parentName:"ul"},"Task ",(0,r.kt)("inlineCode",{parentName:"li"},"deps")," can now omit the ",(0,r.kt)("inlineCode",{parentName:"li"},"~:")," prefix for tasks within the current project."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"moon check")," command can now use the ",(0,r.kt)("inlineCode",{parentName:"li"},"--report")," option.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.18 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Workflow improvements for ",(0,r.kt)("inlineCode",{parentName:"li"},"moon init"),"."),(0,r.kt)("li",{parentName:"ul"},"Benchmarks and performance tuning."),(0,r.kt)("li",{parentName:"ul"},"Individual stdout/stderr log files when running tasks.")))}d.isMDXComponent=!0},41249:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.17-b3ee056e98fbfd5e347375782f5dd335.png"}}]); \ No newline at end of file diff --git a/assets/js/0b289f4d.9f04606d.js b/assets/js/0b289f4d.9f04606d.js deleted file mode 100644 index 37cbd9bae6d..00000000000 --- a/assets/js/0b289f4d.9f04606d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1575],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),d=r,f=p["".concat(s,".").concat(d)]||p[d]||m[d]||o;return n?a.createElement(f,l(l({ref:t},c),{},{components:n})):a.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=m.indexOf(t),a=u[n].value;a!==i&&(p(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=m.indexOf(e.currentTarget)+1;t=m[n]??m[0];break}case"ArrowLeft":{const n=m.indexOf(e.currentTarget)-1;t=m[n]??m[m.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>m.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function p(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(m,(0,a.Z)({},e,t)),r.createElement(p,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>p});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[p,d]=m({queryString:n,groupId:r}),[f,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),g=(()=>{const e=p??f;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}},239:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),o=n(33337),l=n(39798);const i={slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},s=void 0,u={permalink:"/blog/v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-21_v0.17.mdx",source:"@site/blog/2022-10-21_v0.17.mdx",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",description:"With this release, we're landing the first iteration of our notifier service, starting with",date:"2022-10-21T00:00:00.000Z",formattedDate:"October 21, 2022",tags:[{label:"notifier",permalink:"/blog/tags/notifier"},{label:"runner",permalink:"/blog/tags/runner"},{label:"config",permalink:"/blog/tags/config"},{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:3.18,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},prevItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"},nextItem:{title:"New VS Code extension!",permalink:"/blog/vscode-extension"}},c={image:n(41249).Z,authorsImageUrls:[void 0]},m=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Minor changes to ID formatting",id:"minor-changes-to-id-formatting",level:3},{value:"Task type has been renamed to platform",id:"task-type-has-been-renamed-to-platform",level:3},{value:"Webhook events (experimental)",id:"webhook-events-experimental",level:2},{value:"YAML anchors and aliases",id:"yaml-anchors-and-aliases",level:2},{value:"VS Code extension",id:"vs-code-extension",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:m};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're landing the first iteration of our notifier service, starting with\nwebhooks! We've also spent some time working on quality of life improvements."),(0,r.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,r.kt)("p",null,"To start, we have a few breaking changes this release to be aware of!"),(0,r.kt)("h3",{id:"minor-changes-to-id-formatting"},"Minor changes to ID formatting"),(0,r.kt)("p",null,"An ID refers to many things \u2014 project names, task names, target segments, so on and so forth. When\nparsing these values, we format them to remove unwanted characters, as these IDs are used in many\ncontexts, many of which need to be strict."),(0,r.kt)("p",null,"Previously, we would remove unwanted characters entirely. Instead, we now replace them with dashes\n(",(0,r.kt)("inlineCode",{parentName:"p"},"-"),") for better readability. Take the following for example:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"ID"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Old"),(0,r.kt)("th",{parentName:"tr",align:"left"},"New"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"domain.com"),(0,r.kt)("td",{parentName:"tr",align:"left"},"domaincom"),(0,r.kt)("td",{parentName:"tr",align:"left"},"domain-com")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"build:esm"),(0,r.kt)("td",{parentName:"tr",align:"left"},"buildesm"),(0,r.kt)("td",{parentName:"tr",align:"left"},"build-esm")))),(0,r.kt)("h3",{id:"task-type-has-been-renamed-to-platform"},"Task ",(0,r.kt)("inlineCode",{parentName:"h3"},"type")," has been renamed to ",(0,r.kt)("inlineCode",{parentName:"h3"},"platform")),(0,r.kt)("p",null,"This setting was renamed for a few reasons. To start, tasks actually have a\n",(0,r.kt)("a",{parentName:"p",href:"../docs/concepts/task#types"},"type internally")," that is not configured, but is inferred based on\nwhat's configured. This was a bit confusing."),(0,r.kt)("p",null,"And secondly, our toolchain refers to language integrations as platforms, and since this setting\ndetermines which tool to run with, we wanted to align on the platform terminology."),(0,r.kt)(o.Z,{groupId:"task-type",defaultValue:"before",values:[{label:"Before",value:"before"},{label:"After",value:"after"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"before",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n clean:\n command: 'rm -rf ./dist'\n type: 'system'\n"))),(0,r.kt)(l.Z,{value:"after",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n clean:\n command: 'rm -rf ./dist'\n platform: 'system'\n")))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Because of this change, the ",(0,r.kt)("inlineCode",{parentName:"p"},"$taskType")," token was also renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"$taskPlatform"),"!")),(0,r.kt)("h2",{id:"webhook-events-experimental"},"Webhook events (experimental)"),(0,r.kt)("p",null,"Looking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe\nyou want to send Slack or Discord notifications? With our new notifier system, this is now possible\nthrough webhooks!"),(0,r.kt)("p",null,"Simply enable the ",(0,r.kt)("a",{parentName:"p",href:"../docs/config/workspace#webhookurl"},(0,r.kt)("inlineCode",{parentName:"a"},"notifier.webhookUrl"))," setting to start\nreceiving events from your CI environments."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"notifier:\n webhookUrl: 'https://api.company.com/some/endpoint'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/webhooks"},"official guide on webhooks")," for a full list of events and an\nexample payload structure!")),(0,r.kt)("h2",{id:"yaml-anchors-and-aliases"},"YAML anchors and aliases"),(0,r.kt)("p",null,"We've updated our YAML configuration files to support extended syntax,\n",(0,r.kt)("a",{parentName:"p",href:"https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/"},"anchors (",(0,r.kt)("inlineCode",{parentName:"a"},"&"),") and aliases (",(0,r.kt)("inlineCode",{parentName:"a"},"*"),")"),".\nWith this new syntax, you're now able to reduce the amount of duplication required in your config\nfiles, especially when declaring tasks, as demonstrated below!"),(0,r.kt)(o.Z,{groupId:"yaml",defaultValue:"before",values:[{label:"Before",value:"before"},{label:"After",value:"after"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"before",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n astro:\n command: 'astro'\n local: true\n\n dev:\n command: 'astro dev'\n inputs:\n - '@group(astro)'\n local: true\n\n build:\n command: 'astro build'\n inputs:\n - '@group(astro)'\n outputs:\n - 'dist'\n\n check:\n command: 'astro check'\n inputs:\n - '@group(astro)'\n deps:\n - '~:typecheck'\n\n preview:\n command: 'astro preview'\n inputs:\n - '@group(astro)'\n deps:\n - '~:build'\n local: true\n"))),(0,r.kt)(l.Z,{value:"after",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"_astro: &astro\n command: 'astro'\n inputs:\n - '@group(astro)'\n\ntasks:\n dev:\n <<: *astro\n args: 'dev'\n local: true\n\n build:\n <<: *astro\n args: 'build'\n outputs:\n - 'dist'\n\n check:\n <<: *astro\n args: 'check'\n\n preview:\n <<: *astro\n args: 'preview'\n deps:\n - '~:build'\n local: true\n")))),(0,r.kt)("h2",{id:"vs-code-extension"},"VS Code extension"),(0,r.kt)("p",null,"If you missed the ",(0,r.kt)("a",{parentName:"p",href:"./vscode-extension"},"announcement earlier this week"),", we released the initial\nversion of our new VS Code extension! Give it a try and\n",(0,r.kt)("a",{parentName:"p",href:"../docs/editors/vscode"},"refer to the documentation")," for more information."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.17.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Increased runtime performance and reduced memory consumption."),(0,r.kt)("li",{parentName:"ul"},"Template enum variables can now define objects for their\n",(0,r.kt)("a",{parentName:"li",href:"../docs/config/template#values"},(0,r.kt)("inlineCode",{parentName:"a"},"values")),"."),(0,r.kt)("li",{parentName:"ul"},"Task ",(0,r.kt)("inlineCode",{parentName:"li"},"deps")," can now omit the ",(0,r.kt)("inlineCode",{parentName:"li"},"~:")," prefix for tasks within the current project."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"moon check")," command can now use the ",(0,r.kt)("inlineCode",{parentName:"li"},"--report")," option.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.18 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Workflow improvements for ",(0,r.kt)("inlineCode",{parentName:"li"},"moon init"),"."),(0,r.kt)("li",{parentName:"ul"},"Benchmarks and performance tuning."),(0,r.kt)("li",{parentName:"ul"},"Individual stdout/stderr log files when running tasks.")))}d.isMDXComponent=!0},41249:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.17-b3ee056e98fbfd5e347375782f5dd335.png"}}]); \ No newline at end of file diff --git a/assets/js/0c7f16c1.56b4a48e.js b/assets/js/0c7f16c1.56b4a48e.js deleted file mode 100644 index 764e298ccfc..00000000000 --- a/assets/js/0c7f16c1.56b4a48e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6297],{43871:e=>{e.exports=JSON.parse('{"label":"mql","permalink":"/docs/tags/mql","allTagsPath":"/docs/tags","count":1,"items":[{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","permalink":"/docs/concepts/query-lang"}]}')}}]); \ No newline at end of file diff --git a/assets/js/0c7f16c1.d84e68fc.js b/assets/js/0c7f16c1.d84e68fc.js new file mode 100644 index 00000000000..2438dbffba7 --- /dev/null +++ b/assets/js/0c7f16c1.d84e68fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36297],{43871:e=>{e.exports=JSON.parse('{"label":"mql","permalink":"/docs/tags/mql","allTagsPath":"/docs/tags","count":1,"items":[{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","permalink":"/docs/concepts/query-lang"}]}')}}]); \ No newline at end of file diff --git a/assets/js/0e22a4b2.1fc681f9.js b/assets/js/0e22a4b2.1fc681f9.js new file mode 100644 index 00000000000..1f7d91551c4 --- /dev/null +++ b/assets/js/0e22a4b2.1fc681f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11558],{60335:e=>{e.exports=JSON.parse('{"label":"projects","permalink":"/blog/tags/projects","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/0e22a4b2.d482b639.js b/assets/js/0e22a4b2.d482b639.js deleted file mode 100644 index 1a00d26b8fe..00000000000 --- a/assets/js/0e22a4b2.d482b639.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1558],{60335:e=>{e.exports=JSON.parse('{"label":"projects","permalink":"/blog/tags/projects","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/0e736169.d91f3868.js b/assets/js/0e736169.d91f3868.js deleted file mode 100644 index 262733edab7..00000000000 --- a/assets/js/0e736169.d91f3868.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3972],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),g=o,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));n(76911);const a={slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},i=void 0,s={permalink:"/blog/moon-v1.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx",source:"@site/blog/2023-05-15_moon-v1.6.mdx",title:"moon v1.6 - Persistent tasks and task extending RFC",description:"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending",date:"2023-05-15T00:00:00.000Z",formattedDate:"May 15, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"rfc",permalink:"/blog/tags/rfc"},{label:"log",permalink:"/blog/tags/log"}],readingTime:3.155,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},prevItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"},nextItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"}},l={image:n(69922).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending\ntasks."))}m.isMDXComponent=!0},69922:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.6-5fc0fb4e6b0bbe85a5016ff7f3c28b89.png"}}]); \ No newline at end of file diff --git a/assets/js/0e736169.fc563273.js b/assets/js/0e736169.fc563273.js new file mode 100644 index 00000000000..17c1c4e267d --- /dev/null +++ b/assets/js/0e736169.fc563273.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43972],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(n),g=o,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));n(76911);const a={slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},i=void 0,s={permalink:"/blog/moon-v1.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx",source:"@site/blog/2023-05-15_moon-v1.6.mdx",title:"moon v1.6 - Persistent tasks and task extending RFC",description:"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending",date:"2023-05-15T00:00:00.000Z",formattedDate:"May 15, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"rfc",permalink:"/blog/tags/rfc"},{label:"log",permalink:"/blog/tags/log"}],readingTime:3.155,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},prevItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"},nextItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"}},l={image:n(69922).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending\ntasks."))}m.isMDXComponent=!0},69922:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.6-5fc0fb4e6b0bbe85a5016ff7f3c28b89.png"}}]); \ No newline at end of file diff --git a/assets/js/0ff9eadc.6c7d2b09.js b/assets/js/0ff9eadc.6c7d2b09.js new file mode 100644 index 00000000000..1cae6ce9ac1 --- /dev/null +++ b/assets/js/0ff9eadc.6c7d2b09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[14640],{57376:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/checksum","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/110403ef.0565ca1d.js b/assets/js/110403ef.0565ca1d.js deleted file mode 100644 index 5824e4b0ff8..00000000000 --- a/assets/js/110403ef.0565ca1d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3443],{85687:e=>{e.exports=JSON.parse('{"label":"project","permalink":"/blog/tags/project","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/110403ef.341bc528.js b/assets/js/110403ef.341bc528.js new file mode 100644 index 00000000000..27360917ab2 --- /dev/null +++ b/assets/js/110403ef.341bc528.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[73443],{85687:e=>{e.exports=JSON.parse('{"label":"project","permalink":"/blog/tags/project","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/11ce4159.77186aad.js b/assets/js/11ce4159.77186aad.js new file mode 100644 index 00000000000..9894a600f86 --- /dev/null +++ b/assets/js/11ce4159.77186aad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1531],{75034:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/5","page":5,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/4","nextPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/11ce4159.fb2dd90d.js b/assets/js/11ce4159.fb2dd90d.js deleted file mode 100644 index d4cc66554a5..00000000000 --- a/assets/js/11ce4159.fb2dd90d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1531],{75034:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/5","page":5,"postsPerPage":10,"totalPages":6,"totalCount":51,"previousPage":"/blog/page/4","nextPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1202c0b0.36f9306b.js b/assets/js/1202c0b0.36f9306b.js new file mode 100644 index 00000000000..9299211665b --- /dev/null +++ b/assets/js/1202c0b0.36f9306b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59673],{96822:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hash","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1202c0b0.8ec8755c.js b/assets/js/1202c0b0.8ec8755c.js deleted file mode 100644 index c81e5b9aaf9..00000000000 --- a/assets/js/1202c0b0.8ec8755c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9673],{96822:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hash","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/12700.03a0accc.js b/assets/js/12700.03a0accc.js new file mode 100644 index 00000000000..344ed0cfa0e --- /dev/null +++ b/assets/js/12700.03a0accc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12700],{70412:(e,r,t)=>{t.d(r,{C:()=>u,n:()=>s});var o=t(27378),n=t(41763);const a=o.createContext(null);function s(e){let{children:r,content:t,isBlogPostPage:n=!1}=e;const s=function(e){let{content:r,isBlogPostPage:t}=e;return(0,o.useMemo)((()=>({metadata:r.metadata,frontMatter:r.frontMatter,assets:r.assets,toc:r.toc,isBlogPostPage:t})),[r,t])}({content:t,isBlogPostPage:n});return o.createElement(a.Provider,{value:s},r)}function u(){const e=(0,o.useContext)(a);if(null===e)throw new n.i6("BlogPostProvider");return e}},89446:(e,r,t)=>{t.d(r,{b:()=>s,k:()=>u});var o=t(27378),n=t(41763);const a=o.createContext(null);function s(e){let{children:r,content:t}=e;const n=function(e){return(0,o.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(t);return o.createElement(a.Provider,{value:n},r)}function u(){const e=(0,o.useContext)(a);if(null===e)throw new n.i6("DocProvider");return e}},36666:(e,r,t)=>{t.d(r,{D:()=>u,f:()=>l});var o=t(27378),n=t(41763);const a=Symbol("EmptyContext"),s=o.createContext(a);function u(e){let{children:r}=e;const[t,n]=(0,o.useState)(null),a=(0,o.useMemo)((()=>({expandedItem:t,setExpandedItem:n})),[t]);return o.createElement(s.Provider,{value:a},r)}function l(){const e=(0,o.useContext)(s);if(e===a)throw new n.i6("DocSidebarItemsExpandedStateProvider");return e}},69169:(e,r,t)=>{t.d(r,{a:()=>s});var o=t(27378),n=t(83457),a=t(24993);function s(e){let{threshold:r}=e;const[t,s]=(0,o.useState)(!1),u=(0,o.useRef)(!1),{startScroll:l,cancelScroll:i}=(0,n.Ct)();return(0,n.RF)(((e,t)=>{let{scrollY:o}=e;const n=t?.scrollY;n&&(u.current?u.current=!1:o>=n?(i(),s(!1)):o{e.location.hash&&(u.current=!0,s(!1))})),{shown:t,scrollToTop:()=>l(0)}}},81344:(e,r,t)=>{t.d(r,{S:()=>l});var o=t(27378),n=t(20624);function a(e){const r=e.getBoundingClientRect();return r.top===r.bottom?a(e.parentNode):r}function s(e,r){let{anchorTopOffset:t}=r;const o=e.find((e=>a(e).top>=t));if(o){return function(e){return e.top>0&&e.bottom{e.current=r?0:document.querySelector(".navbar").clientHeight}),[r]),e}function l(e){const r=(0,o.useRef)(void 0),t=u();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:o,linkActiveClassName:n,minHeadingLevel:a,maxHeadingLevel:u}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(o),l=function(e){let{minHeadingLevel:r,maxHeadingLevel:t}=e;const o=[];for(let n=r;n<=t;n+=1)o.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(o.join()))}({minHeadingLevel:a,maxHeadingLevel:u}),i=s(l,{anchorTopOffset:t.current}),c=e.find((e=>i&&i.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(r.current&&r.current!==e&&r.current.classList.remove(n),e.classList.add(n),r.current=e):e.classList.remove(n)}(e,e===c)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}},95709:(e,r,t)=>{t.r(r),t.d(r,{Collapsible:()=>l.z,ErrorBoundaryError:()=>x.aG,ErrorBoundaryTryAgainButton:()=>x.Cw,ErrorCauseBoundary:()=>x.QW,HtmlClassNameProvider:()=>m.FG,NavbarSecondaryMenuFiller:()=>g.Zo,PageMetadata:()=>m.d,ReactContextError:()=>d.i6,SkipToContentFallbackId:()=>L.u,SkipToContentLink:()=>L.l,ThemeClassNames:()=>i.k,composeProviders:()=>d.Qc,createStorageSlot:()=>n.WA,duplicates:()=>S.l,filterDocCardListItems:()=>s.MN,isMultiColumnFooterLinks:()=>b.a,isRegexpStringMatch:()=>C.F,listStorageKeys:()=>n._f,listTagsByLetters:()=>h.P,prefersReducedMotion:()=>c.n,processAdmonitionProps:()=>E,translateTagsPageTitle:()=>h.M,uniq:()=>S.j,useCollapsible:()=>l.u,useColorMode:()=>f.I,useContextualSearchFilters:()=>a._q,useCurrentSidebarCategory:()=>s.jA,useDocsPreferredVersion:()=>y.J,useEvent:()=>d.zX,useIsomorphicLayoutEffect:()=>d.LI,usePluralForm:()=>u.c,usePrevious:()=>d.D9,usePrismTheme:()=>P.p,useSearchLinkCreator:()=>v.M,useSearchQueryString:()=>v.K,useStorageSlot:()=>n.Nk,useThemeConfig:()=>o.L,useWindowSize:()=>p.i});var o=t(20624),n=t(71819),a=t(13149),s=t(45161),u=t(40689),l=t(80376),i=t(75484),c=t(56903),d=t(41763),m=t(1123),f=t(55421),g=t(63471),p=t(58357),h=t(75846),v=t(53584),b=t(33922),C=t(61503),S=t(70784),P=t(6499),y=t(24453),T=t(27378);function E(e){const{mdxAdmonitionTitle:r,rest:t}=function(e){const r=T.Children.toArray(e),t=r.find((e=>T.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=T.createElement(T.Fragment,null,r.filter((e=>e!==t)));return{mdxAdmonitionTitle:t?.props.children,rest:o}}(e.children),o=e.title??r;return{...e,...o&&{title:o},children:t}}var L=t(39360),x=t(19441)},12700:(e,r,t)=>{t.r(r),t.d(r,{AnnouncementBarProvider:()=>c.pl,BlogPostProvider:()=>l.n,Collapsible:()=>o.Collapsible,ColorModeProvider:()=>g.S,DEFAULT_SEARCH_TAG:()=>v.HX,DocProvider:()=>u.b,DocSidebarItemsExpandedStateProvider:()=>n.D,DocsPreferredVersionContextProvider:()=>i.L5,DocsSidebarProvider:()=>s.b,DocsVersionProvider:()=>a.q,ErrorBoundaryError:()=>o.ErrorBoundaryError,ErrorBoundaryTryAgainButton:()=>o.ErrorBoundaryTryAgainButton,ErrorCauseBoundary:()=>o.ErrorCauseBoundary,HtmlClassNameProvider:()=>o.HtmlClassNameProvider,NavbarProvider:()=>M.V,NavbarSecondaryMenuFiller:()=>o.NavbarSecondaryMenuFiller,PageMetadata:()=>o.PageMetadata,PluginHtmlClassNameProvider:()=>x.VC,ReactContextError:()=>o.ReactContextError,ScrollControllerProvider:()=>E.OC,SkipToContentFallbackId:()=>o.SkipToContentFallbackId,SkipToContentLink:()=>o.SkipToContentLink,ThemeClassNames:()=>o.ThemeClassNames,composeProviders:()=>o.composeProviders,containsLineNumbers:()=>h.nt,createStorageSlot:()=>o.createStorageSlot,docVersionSearchTag:()=>v.os,duplicates:()=>o.duplicates,filterDocCardListItems:()=>o.filterDocCardListItems,findFirstCategoryLink:()=>b.Wl,findSidebarCategory:()=>b.em,getPrismCssVariables:()=>h.QC,isActiveSidebarItem:()=>b._F,isDocsPluginEnabled:()=>b.cE,isMultiColumnFooterLinks:()=>o.isMultiColumnFooterLinks,isRegexpStringMatch:()=>o.isRegexpStringMatch,isSamePath:()=>L.Mg,keyboardFocusedClassName:()=>w.h,listStorageKeys:()=>o.listStorageKeys,listTagsByLetters:()=>o.listTagsByLetters,parseCodeBlockTitle:()=>h.bc,parseLanguage:()=>h.Vo,parseLines:()=>h.nZ,prefersReducedMotion:()=>o.prefersReducedMotion,processAdmonitionProps:()=>o.processAdmonitionProps,splitNavbarItems:()=>M.A,translateTagsPageTitle:()=>o.translateTagsPageTitle,uniq:()=>o.uniq,useAlternatePageUtils:()=>p.l,useAnnouncementBar:()=>c.nT,useBackToTopButton:()=>F.a,useBlogPost:()=>l.C,useCodeWordWrap:()=>D.F,useCollapsible:()=>o.useCollapsible,useColorMode:()=>o.useColorMode,useContextualSearchFilters:()=>o.useContextualSearchFilters,useCurrentSidebarCategory:()=>o.useCurrentSidebarCategory,useDoc:()=>u.k,useDocById:()=>b.xz,useDocRouteMetadata:()=>b.hI,useDocSidebarItemsExpandedState:()=>n.f,useDocsPreferredVersion:()=>o.useDocsPreferredVersion,useDocsPreferredVersionByPluginId:()=>i.Oh,useDocsSidebar:()=>s.V,useDocsVersion:()=>a.E,useDocsVersionCandidates:()=>b.lO,useEvent:()=>o.useEvent,useFilteredAndTreeifiedTOC:()=>T.b,useHideableNavbar:()=>I.c,useHistoryPopHandler:()=>y.Rb,useHistorySelector:()=>y.xL,useHomePageRoute:()=>L.Ns,useIsomorphicLayoutEffect:()=>o.useIsomorphicLayoutEffect,useKeyboardNavigation:()=>w.t,useLayoutDoc:()=>b.vY,useLayoutDocsSidebar:()=>b.oz,useLocalPathname:()=>P.b,useLocationChange:()=>S.S,useLockBodyScroll:()=>B.N,useNavbarMobileSidebar:()=>m.e,useNavbarSecondaryMenu:()=>f.Y,usePluralForm:()=>o.usePluralForm,usePrevious:()=>o.usePrevious,usePrismTheme:()=>o.usePrismTheme,useQueryStringValue:()=>y._X,useScrollController:()=>E.sG,useScrollPosition:()=>E.RF,useScrollPositionBlocker:()=>E.o5,useSearchLinkCreator:()=>o.useSearchLinkCreator,useSearchQueryString:()=>o.useSearchQueryString,useSidebarBreadcrumbs:()=>b.s1,useSmoothScrollTo:()=>E.Ct,useStorageSlot:()=>o.useStorageSlot,useTOCHighlight:()=>k.S,useTabs:()=>d.Y,useThemeConfig:()=>o.useThemeConfig,useTitleFormatter:()=>C.p,useTreeifiedTOC:()=>T.a,useWindowSize:()=>o.useWindowSize});var o=t(95709),n=t(36666),a=t(25611),s=t(52095),u=t(89446),l=t(70412),i=t(24453),c=t(10),d=t(35595),m=t(85536),f=t(15530),g=t(55421),p=t(43714),h=t(90433),v=t(13149),b=t(45161),C=t(99162),S=t(24993),P=t(43511),y=t(30654),T=t(86934),E=t(83457),L=t(8862),x=t(1123),M=t(63211),k=t(81344),I=t(82561),w=t(70174),B=t(37930),D=t(96177),F=t(69169)},35595:(e,r,t)=>{t.d(r,{Y:()=>m});var o=t(27378),n=t(35331),a=t(30654),s=t(70784),u=t(71819);function l(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:r,label:t,attributes:o,default:n}}=e;return{value:r,label:t,attributes:o,default:n}}))}function i(e){const{values:r,children:t}=e;return(0,o.useMemo)((()=>{const e=r??l(t);return function(e){const r=(0,s.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,t])}function c(e){let{value:r,tabValues:t}=e;return t.some((e=>e.value===r))}function d(e){let{queryString:r=!1,groupId:t}=e;const s=(0,n.k6)(),u=function(e){let{queryString:r=!1,groupId:t}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:r,groupId:t});return[(0,a._X)(u),(0,o.useCallback)((e=>{if(!u)return;const r=new URLSearchParams(s.location.search);r.set(u,e),s.replace({...s.location,search:r.toString()})}),[u,s])]}function m(e){const{defaultValue:r,queryString:t=!1,groupId:n}=e,a=i(e),[s,l]=(0,o.useState)((()=>function(e){let{defaultValue:r,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(r){if(!c({value:r,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const o=t.find((e=>e.default))??t[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:r,tabValues:a}))),[m,f]=d({queryString:t,groupId:n}),[g,p]=function(e){let{groupId:r}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(r),[n,a]=(0,u.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:n}),h=(()=>{const e=m??g;return c({value:e,tabValues:a})?e:null})();(0,o.useLayoutEffect)((()=>{h&&l(h)}),[h]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!c({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),f(e),p(e)}),[f,p,a]),tabValues:a}}},75846:(e,r,t)=>{t.d(r,{M:()=>n,P:()=>a});var o=t(99213);const n=()=>(0,o.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function a(e){const r={};return Object.values(e).forEach((e=>{const t=function(e){return e[0].toUpperCase()}(e.label);r[t]??=[],r[t].push(e)})),Object.entries(r).sort(((e,r)=>{let[t]=e,[o]=r;return t.localeCompare(o)})).map((e=>{let[r,t]=e;return{letter:r,tags:t.sort(((e,r)=>e.label.localeCompare(r.label)))}}))}},86934:(e,r,t)=>{t.d(r,{a:()=>a,b:()=>u});var o=t(27378);function n(e){const r=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);r.forEach(((e,r)=>{const o=t.slice(2,e.level);e.parentIndex=Math.max(...o),t[e.level]=r}));const o=[];return r.forEach((e=>{const{parentIndex:t,...n}=e;t>=0?r[t].children.push(n):o.push(n)})),o}function a(e){return(0,o.useMemo)((()=>n(e)),[e])}function s(e){let{toc:r,minHeadingLevel:t,maxHeadingLevel:o}=e;return r.flatMap((e=>{const r=s({toc:e.children,minHeadingLevel:t,maxHeadingLevel:o});return function(e){return e.level>=t&&e.level<=o}(e)?[{...e,children:r}]:r}))}function u(e){let{toc:r,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,o.useMemo)((()=>s({toc:n(r),minHeadingLevel:t,maxHeadingLevel:a})),[r,t,a])}},40689:(e,r,t)=>{t.d(r,{c:()=>i});var o=t(27378),n=t(50353);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((r=>e.includes(r)))}const u={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,n.default)();return(0,o.useMemo)((()=>{try{return function(e){const r=new Intl.PluralRules(e);return{locale:e,pluralForms:s(r.resolvedOptions().pluralCategories),select:e=>r.select(e)}}(e)}catch(r){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${r.message}\n`),u}}),[e])}function i(){const e=l();return{selectMessage:(r,t)=>function(e,r,t){const o=e.split("|");if(1===o.length)return o[0];o.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${o.length}: ${e}`);const n=t.select(r),a=t.pluralForms.indexOf(n);return o[Math.min(a,o.length-1)]}(t,r,e)}}}}]); \ No newline at end of file diff --git a/assets/js/128a5f34.52c1d322.js b/assets/js/128a5f34.52c1d322.js deleted file mode 100644 index 32dec6740f6..00000000000 --- a/assets/js/128a5f34.52c1d322.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5244],{49877:e=>{e.exports=JSON.parse('{"label":"cache","permalink":"/blog/tags/cache","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/128a5f34.7ae3698b.js b/assets/js/128a5f34.7ae3698b.js new file mode 100644 index 00000000000..4c45b7c1e27 --- /dev/null +++ b/assets/js/128a5f34.7ae3698b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45244],{49877:e=>{e.exports=JSON.parse('{"label":"cache","permalink":"/blog/tags/cache","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1365e0a6.43d2419c.js b/assets/js/1365e0a6.43d2419c.js new file mode 100644 index 00000000000..5022a0cbc43 --- /dev/null +++ b/assets/js/1365e0a6.43d2419c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29917],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,g=u["".concat(s,".").concat(d)]||u[d]||c[d]||r;return n?a.createElement(g,i(i({ref:t},m),{},{components:n})):a.createElement(g,i({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var a=n(25773),o=(n(27378),n(35318)),r=n(76911);const i={slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},l=void 0,s={permalink:"/blog/moon-v1.5",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx",source:"@site/blog/2023-05-08_moon-v1.5.mdx",title:"moon v1.5 - Rust tier 2 and 3 support",description:"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language.",date:"2023-05-08T00:00:00.000Z",formattedDate:"May 8, 2023",tags:[{label:"rust",permalink:"/blog/tags/rust"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tier",permalink:"/blog/tags/tier"}],readingTime:2.765,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},prevItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"},nextItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"}},p={image:n(52681).Z,authorsImageUrls:[void 0]},m=[{value:"New rust configurations",id:"new-rust-configurations",level:2},{value:"New rust task platform",id:"new-rust-task-platform",level:2},{value:"Updated moon init command",id:"updated-moon-init-command",level:2},{value:"Updated moon docker commands",id:"updated-moon-docker-commands",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:m};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language."),(0,o.kt)("p",null,"As big fans of Rust (moon is written in it), we're stoked to finally add full language support, and\nto integrate our first non-JavaScript language! This release is rather massive, and required a ton\nof internal work, most of which we'll skip over."),(0,o.kt)("p",null,"Instead we'll only talk about the key features that you, the consumers, will actually care about. To\nstart, we've started working on a Rust handbook, that outlines how to enable Rust, what kind of\nintegrations we support, and a handful of common questions."),(0,o.kt)("div",{class:"flex justify-center"},(0,o.kt)(r.Z,{label:"View Rust handbook",href:"/docs/guides/rust/handbook",size:"lg",mdxType:"Button"})),(0,o.kt)("h2",{id:"new-rust-configurations"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"rust")," configurations"),(0,o.kt)("p",null,"Languages in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#enabling-a-language"},"moon are enabled through configuration")," blocks in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and Rust is no different. We now support a\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain#rust"},(0,o.kt)("inlineCode",{parentName:"a"},"rust"))," toolchain setting\n(",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain#rust"},"view all available settings"),")."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"rust:\n version: '1.69.0'\n")),(0,o.kt)("p",null,"When the ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," setting is defined, it will enable the language and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#tier-2--platform"},"deep platform integration"),", and when the ",(0,o.kt)("inlineCode",{parentName:"p"},"version"),"\nfield is defined, it will further enable\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#tier-3--toolchain"},"toolchain support"),". Both of these features provide\nheavy automation, improving the overall developer experience."),(0,o.kt)("p",null,"This is fantastic, but what if another Rust project in the monorepo requires a different toolchain\nchannel/version? If so, they can use the new ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#rust"},(0,o.kt)("inlineCode",{parentName:"a"},"toolchain.rust"))," setting\nin ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," to define project-level overrides."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"toolchain:\n rust:\n version: '1.58.0'\n")),(0,o.kt)("h2",{id:"new-rust-task-platform"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"rust")," task platform"),(0,o.kt)("p",null,"The main benefit of Rust language support is that tasks can be ran within the context of our\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#tier-2--platform"},"Rust platform integration"),". This can easily be done\nby setting the project's ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language")),' to "rust" in\n',(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("p",null,"This will set the ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#platform-1"},(0,o.kt)("inlineCode",{parentName:"a"},"platform")),' of all tasks within the project to\n"rust", unless they have been explicitly configured to something else.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"language: 'rust'\ntype: 'application'\n")),(0,o.kt)("p",null,"If you're mixing languages within a single project, and can't use the ",(0,o.kt)("inlineCode",{parentName:"p"},"language")," setting above, you\ncan define ",(0,o.kt)("inlineCode",{parentName:"p"},"platform")," on the task directly."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n build:\n command: 'cargo build'\n platform: 'rust'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"We also attempt to detect this automatially by comparing command names and checking for the\nexistence of files like ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),".")),(0,o.kt)("h2",{id:"updated-moon-init-command"},"Updated ",(0,o.kt)("inlineCode",{parentName:"h2"},"moon init")," command"),(0,o.kt)("p",null,"As part of this release, we've also updated the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/init"},(0,o.kt)("inlineCode",{parentName:"a"},"moon init"))," command to\nsupport initializing Rust. By default, the command will prompt you on whether to install Rust or\nnot, otherwise, when ",(0,o.kt)("inlineCode",{parentName:"p"},"--yes")," is passed, the language will be installed if a ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file is\ndetected in the destination directory."),(0,o.kt)("p",null,"If you already have a moon workspace, you can pass ",(0,o.kt)("inlineCode",{parentName:"p"},"--tool rust")," to install Rust into the workspace."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init --tool rust\n")),(0,o.kt)("h2",{id:"updated-moon-docker-commands"},"Updated ",(0,o.kt)("inlineCode",{parentName:"h2"},"moon docker")," commands"),(0,o.kt)("p",null,"And lastly, we also want to provide a great ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/docker"},(0,o.kt)("inlineCode",{parentName:"a"},"Dockerfile")," experience")," when\nusing Rust. The ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," command has been updated to\ncopy ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"rust-toolchain.toml"),", and other Rust/Cargo related files. When\nusing Cargo workspaces, nested ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," files are also scaffolded."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"RUN moon docker scaffold rust-app\n")),(0,o.kt)("p",null,"Furthermore, we've also updated the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker prune"))," command to\nremove the entire ",(0,o.kt)("inlineCode",{parentName:"p"},"target")," directory, greatly reducing the size of the image. Pruning makes the\nassumption that it's being ran ",(0,o.kt)("em",{parentName:"p"},"after")," a release profile has been built."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"RUN moon run rust-app:build-release\nRUN moon docker prune\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.5.0"},"official release")," for a full list of\nchanges."))}u.isMDXComponent=!0},52681:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.5-c0d8c4fbb15e8449bad93fa566d3e9cf.png"}}]); \ No newline at end of file diff --git a/assets/js/1365e0a6.73ef177f.js b/assets/js/1365e0a6.73ef177f.js deleted file mode 100644 index 2eeb6c4b669..00000000000 --- a/assets/js/1365e0a6.73ef177f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9917],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,g=u["".concat(s,".").concat(d)]||u[d]||c[d]||r;return n?a.createElement(g,i(i({ref:t},m),{},{components:n})):a.createElement(g,i({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var a=n(25773),o=(n(27378),n(35318)),r=n(76911);const i={slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},l=void 0,s={permalink:"/blog/moon-v1.5",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx",source:"@site/blog/2023-05-08_moon-v1.5.mdx",title:"moon v1.5 - Rust tier 2 and 3 support",description:"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language.",date:"2023-05-08T00:00:00.000Z",formattedDate:"May 8, 2023",tags:[{label:"rust",permalink:"/blog/tags/rust"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tier",permalink:"/blog/tags/tier"}],readingTime:2.765,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},prevItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"},nextItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"}},p={image:n(52681).Z,authorsImageUrls:[void 0]},m=[{value:"New rust configurations",id:"new-rust-configurations",level:2},{value:"New rust task platform",id:"new-rust-task-platform",level:2},{value:"Updated moon init command",id:"updated-moon-init-command",level:2},{value:"Updated moon docker commands",id:"updated-moon-docker-commands",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:m};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language."),(0,o.kt)("p",null,"As big fans of Rust (moon is written in it), we're stoked to finally add full language support, and\nto integrate our first non-JavaScript language! This release is rather massive, and required a ton\nof internal work, most of which we'll skip over."),(0,o.kt)("p",null,"Instead we'll only talk about the key features that you, the consumers, will actually care about. To\nstart, we've started working on a Rust handbook, that outlines how to enable Rust, what kind of\nintegrations we support, and a handful of common questions."),(0,o.kt)("div",{class:"flex justify-center"},(0,o.kt)(r.Z,{label:"View Rust handbook",href:"/docs/guides/rust/handbook",size:"lg",mdxType:"Button"})),(0,o.kt)("h2",{id:"new-rust-configurations"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"rust")," configurations"),(0,o.kt)("p",null,"Languages in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#enabling-a-language"},"moon are enabled through configuration")," blocks in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and Rust is no different. We now support a\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain#rust"},(0,o.kt)("inlineCode",{parentName:"a"},"rust"))," toolchain setting\n(",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain#rust"},"view all available settings"),")."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"rust:\n version: '1.69.0'\n")),(0,o.kt)("p",null,"When the ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," setting is defined, it will enable the language and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#tier-2--platform"},"deep platform integration"),", and when the ",(0,o.kt)("inlineCode",{parentName:"p"},"version"),"\nfield is defined, it will further enable\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#tier-3--toolchain"},"toolchain support"),". Both of these features provide\nheavy automation, improving the overall developer experience."),(0,o.kt)("p",null,"This is fantastic, but what if another Rust project in the monorepo requires a different toolchain\nchannel/version? If so, they can use the new ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#rust"},(0,o.kt)("inlineCode",{parentName:"a"},"toolchain.rust"))," setting\nin ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," to define project-level overrides."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"toolchain:\n rust:\n version: '1.58.0'\n")),(0,o.kt)("h2",{id:"new-rust-task-platform"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"rust")," task platform"),(0,o.kt)("p",null,"The main benefit of Rust language support is that tasks can be ran within the context of our\n",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/languages#tier-2--platform"},"Rust platform integration"),". This can easily be done\nby setting the project's ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language")),' to "rust" in\n',(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("p",null,"This will set the ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#platform-1"},(0,o.kt)("inlineCode",{parentName:"a"},"platform")),' of all tasks within the project to\n"rust", unless they have been explicitly configured to something else.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"language: 'rust'\ntype: 'application'\n")),(0,o.kt)("p",null,"If you're mixing languages within a single project, and can't use the ",(0,o.kt)("inlineCode",{parentName:"p"},"language")," setting above, you\ncan define ",(0,o.kt)("inlineCode",{parentName:"p"},"platform")," on the task directly."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n build:\n command: 'cargo build'\n platform: 'rust'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"We also attempt to detect this automatially by comparing command names and checking for the\nexistence of files like ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),".")),(0,o.kt)("h2",{id:"updated-moon-init-command"},"Updated ",(0,o.kt)("inlineCode",{parentName:"h2"},"moon init")," command"),(0,o.kt)("p",null,"As part of this release, we've also updated the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/init"},(0,o.kt)("inlineCode",{parentName:"a"},"moon init"))," command to\nsupport initializing Rust. By default, the command will prompt you on whether to install Rust or\nnot, otherwise, when ",(0,o.kt)("inlineCode",{parentName:"p"},"--yes")," is passed, the language will be installed if a ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," file is\ndetected in the destination directory."),(0,o.kt)("p",null,"If you already have a moon workspace, you can pass ",(0,o.kt)("inlineCode",{parentName:"p"},"--tool rust")," to install Rust into the workspace."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init --tool rust\n")),(0,o.kt)("h2",{id:"updated-moon-docker-commands"},"Updated ",(0,o.kt)("inlineCode",{parentName:"h2"},"moon docker")," commands"),(0,o.kt)("p",null,"And lastly, we also want to provide a great ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/docker"},(0,o.kt)("inlineCode",{parentName:"a"},"Dockerfile")," experience")," when\nusing Rust. The ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," command has been updated to\ncopy ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"rust-toolchain.toml"),", and other Rust/Cargo related files. When\nusing Cargo workspaces, nested ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," files are also scaffolded."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"RUN moon docker scaffold rust-app\n")),(0,o.kt)("p",null,"Furthermore, we've also updated the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker prune"))," command to\nremove the entire ",(0,o.kt)("inlineCode",{parentName:"p"},"target")," directory, greatly reducing the size of the image. Pruning makes the\nassumption that it's being ran ",(0,o.kt)("em",{parentName:"p"},"after")," a release profile has been built."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"RUN moon run rust-app:build-release\nRUN moon docker prune\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.5.0"},"official release")," for a full list of\nchanges."))}u.isMDXComponent=!0},52681:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.5-c0d8c4fbb15e8449bad93fa566d3e9cf.png"}}]); \ No newline at end of file diff --git a/assets/js/140321b2.63ef4da2.js b/assets/js/140321b2.63ef4da2.js new file mode 100644 index 00000000000..3c79885a210 --- /dev/null +++ b/assets/js/140321b2.63ef4da2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80175],{89006:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/detect","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/140321b2.6d0c8ee2.js b/assets/js/140321b2.6d0c8ee2.js deleted file mode 100644 index e3331aabdc2..00000000000 --- a/assets/js/140321b2.6d0c8ee2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[175],{89006:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/detect","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/146ca1ad.1c442348.js b/assets/js/146ca1ad.1c442348.js new file mode 100644 index 00000000000..999868ced51 --- /dev/null +++ b/assets/js/146ca1ad.1c442348.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52753],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var p=2;p{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return r.createElement(a.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(27378),a=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},89478:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const i={title:"query tasks",sidebar_label:"tasks"},s=void 0,l={unversionedId:"commands/query/tasks",id:"commands/query/tasks",title:"query tasks",description:"Use the moon query tasks sub-command to query task information for all projects in the project",source:"@site/docs/commands/query/tasks.mdx",sourceDirName:"commands/query",slug:"/commands/query/tasks",permalink:"/docs/commands/query/tasks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/tasks.mdx",tags:[],version:"current",frontMatter:{title:"query tasks",sidebar_label:"tasks"},sidebar:"docs",previous:{title:"projects",permalink:"/docs/commands/query/projects"},next:{title:"touched-files",permalink:"/docs/commands/query/touched-files"}},p={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Filters",id:"filters",level:4}],u={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query tasks")," sub-command to query task information for all projects in the project\ngraph. The tasks list can be filtered by passing a ",(0,a.kt)("a",{parentName:"p",href:"../../concepts/query-lang"},"query statement")," as\nan argument, or by using ",(0,a.kt)("a",{parentName:"p",href:"#options"},"options")," arguments."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'# Find all tasks grouped by project\n$ moon query tasks\n\n# Find all tasks from projects with an id that matches "react"\n$ moon query tasks --id react\n$ moon query tasks "task~react"\n')),(0,a.kt)("p",null,"By default, this will output a list of projects, and tasks within the project being indented (with a\ntab) on their own line."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"web\n :lint | eslint\n :test | jest\napp\n :format | prettier\n")),(0,a.kt)("p",null,"The tasks can also be output in JSON (",(0,a.kt)("a",{parentName:"p",href:"/api/types/interface/Task"},"which contains all data"),") by\npassing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the following structure:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"{\n tasks: Record>,\n options: QueryOptions,\n}\n")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[query]")," - An optional ",(0,a.kt)("a",{parentName:"li",href:"../../concepts/query-lang"},"query statement")," to filter projects with. When\nprovided, all ",(0,a.kt)("a",{parentName:"li",href:"#filters"},"filter options")," are ignored. ",(0,a.kt)(o.Z,{version:"1.4.0",mdxType:"VersionLabel"}))),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--affected")," - Filter projects that have been affected by touched files. This will only filter\nbased on files, and ",(0,a.kt)("em",{parentName:"li"},"does not")," include upstream or downstream dependencies."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the projects in JSON format.")),(0,a.kt)("h4",{id:"filters"},"Filters"),(0,a.kt)("p",null,"All option values are case-insensitive regex patterns."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--alias ")," - Filter projects that match this alias."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--id ")," - Filter projects that match this ID/name."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--language ")," - Filter projects of this programming language."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--source ")," - Filter projects that match this source path."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--tasks ")," - Filter projects that have the following tasks."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--type ")," - Filter project of this type.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/146ca1ad.3d9bff70.js b/assets/js/146ca1ad.3d9bff70.js deleted file mode 100644 index 8e197b212b9..00000000000 --- a/assets/js/146ca1ad.3d9bff70.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2753],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var p=2;p{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return r.createElement(a.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(27378),a=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},89478:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const i={title:"query tasks",sidebar_label:"tasks"},s=void 0,l={unversionedId:"commands/query/tasks",id:"commands/query/tasks",title:"query tasks",description:"Use the moon query tasks sub-command to query task information for all projects in the project",source:"@site/docs/commands/query/tasks.mdx",sourceDirName:"commands/query",slug:"/commands/query/tasks",permalink:"/docs/commands/query/tasks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/tasks.mdx",tags:[],version:"current",frontMatter:{title:"query tasks",sidebar_label:"tasks"},sidebar:"docs",previous:{title:"projects",permalink:"/docs/commands/query/projects"},next:{title:"touched-files",permalink:"/docs/commands/query/touched-files"}},p={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Filters",id:"filters",level:4}],u={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query tasks")," sub-command to query task information for all projects in the project\ngraph. The tasks list can be filtered by passing a ",(0,a.kt)("a",{parentName:"p",href:"../../concepts/query-lang"},"query statement")," as\nan argument, or by using ",(0,a.kt)("a",{parentName:"p",href:"#options"},"options")," arguments."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'# Find all tasks grouped by project\n$ moon query tasks\n\n# Find all tasks from projects with an id that matches "react"\n$ moon query tasks --id react\n$ moon query tasks "task~react"\n')),(0,a.kt)("p",null,"By default, this will output a list of projects, and tasks within the project being indented (with a\ntab) on their own line."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"web\n :lint | eslint\n :test | jest\napp\n :format | prettier\n")),(0,a.kt)("p",null,"The tasks can also be output in JSON (",(0,a.kt)("a",{parentName:"p",href:"/api/types/interface/Task"},"which contains all data"),") by\npassing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the following structure:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"{\n tasks: Record>,\n options: QueryOptions,\n}\n")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[query]")," - An optional ",(0,a.kt)("a",{parentName:"li",href:"../../concepts/query-lang"},"query statement")," to filter projects with. When\nprovided, all ",(0,a.kt)("a",{parentName:"li",href:"#filters"},"filter options")," are ignored. ",(0,a.kt)(o.Z,{version:"1.4.0",mdxType:"VersionLabel"}))),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--affected")," - Filter projects that have been affected by touched files. This will only filter\nbased on files, and ",(0,a.kt)("em",{parentName:"li"},"does not")," include upstream or downstream dependencies."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the projects in JSON format.")),(0,a.kt)("h4",{id:"filters"},"Filters"),(0,a.kt)("p",null,"All option values are case-insensitive regex patterns."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--alias ")," - Filter projects that match this alias."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--id ")," - Filter projects that match this ID/name."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--language ")," - Filter projects of this programming language."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--source ")," - Filter projects that match this source path."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--tasks ")," - Filter projects that have the following tasks."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--type ")," - Filter project of this type.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.350b9fa4.js b/assets/js/14eb3368.350b9fa4.js deleted file mode 100644 index 34bf4feda33..00000000000 --- a/assets/js/14eb3368.350b9fa4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9817,2108],{80777:(e,t,n)=>{n.r(t),n.d(t,{default:()=>I});var a=n(27378),r=n(1123),l=n(45161),i=n(98948),o=n(37140),s=n(81884),c=n(45626),m=n(99213);const d="cardContainer_H47c",u="cardTitle_tTnA",h="cardDescription_rTl4";function g(e){let{href:t,children:n}=e;return a.createElement(s.default,{href:t,className:(0,o.Z)("card padding--lg",d)},n)}function p(e){let{href:t,icon:n,title:r,description:l}=e;return a.createElement(g,{href:t},a.createElement("h2",{className:(0,o.Z)("text--truncate",u),title:r},n," ",r),l&&a.createElement("p",{className:(0,o.Z)("text--truncate",h),title:l},l))}function v(e){let{item:t}=e;const n=(0,l.Wl)(t);return n?a.createElement(p,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,m.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function E(e){let{item:t}=e;const n=(0,c.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,l.xz)(t.docId??void 0);return a.createElement(p,{href:t.href,icon:n,title:t.label,description:t.description??r?.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return a.createElement(E,{item:t});case"category":return a.createElement(v,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function b(e){let{className:t}=e;const n=(0,l.jA)();return a.createElement(N,{items:n.items,className:t})}function N(e){const{items:t,className:n}=e;if(!t)return a.createElement(b,e);const r=(0,l.MN)(t);return a.createElement("section",{className:(0,o.Z)("row",n)},r.map(((e,t)=>a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(f,{item:e})))))}var Z=n(38274),w=n(84506),k=n(25069),y=n(78372),L=n(1999);const x="generatedIndexPage_cf3v",T="list_qoTc",S="title_Ww3I";function P(e){let{categoryGeneratedIndex:t}=e;return a.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,i.Z)(t.image)})}function C(e){let{categoryGeneratedIndex:t}=e;const n=(0,l.jA)();return a.createElement("div",{className:x},a.createElement(w.Z,null),a.createElement(y.default,null),a.createElement(k.default,null),a.createElement("header",null,a.createElement(L.default,{as:"h1",className:S},t.title),t.description&&a.createElement("p",null,t.description)),a.createElement("article",{className:"margin-top--lg"},a.createElement(N,{items:n.items,className:T})),a.createElement("footer",{className:"margin-top--lg"},a.createElement(Z.default,{previous:t.navigation.previous,next:t.navigation.next})))}function I(e){return a.createElement(a.Fragment,null,a.createElement(P,e),a.createElement(C,e))}},38274:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});var a=n(25773),r=n(27378),l=n(99213),i=n(44022);function o(e){const{previous:t,next:n}=e;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,l.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&r.createElement(i.Z,(0,a.Z)({},t,{subLabel:r.createElement(l.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&r.createElement(i.Z,(0,a.Z)({},n,{subLabel:r.createElement(l.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},25069:(e,t,n)=>{n.r(t),n.d(t,{default:()=>s});var a=n(27378),r=n(37140),l=n(99213),i=n(75484),o=n(25611);function s(e){let{className:t}=e;const n=(0,o.E)();return n.badge?a.createElement("span",{className:(0,r.Z)(t,i.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(l.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},84506:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(27378),r=n(37140),l=n(50353),i=n(81884),o=n(99213),s=n(62935),c=n(75484),m=n(24453),d=n(25611);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(o.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(o.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function h(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function g(e){let{versionLabel:t,to:n,onClick:r}=e;return a.createElement(o.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(i.default,{to:n,onClick:r},a.createElement(o.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function p(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,l.default)(),{pluginId:o}=(0,s.useActivePlugin)({failfast:!0}),{savePreferredVersionName:d}=(0,m.J)(o),{latestDocSuggestion:u,latestVersionSuggestion:p}=(0,s.useDocVersionSuggestions)(o),v=u??(E=p).docs.find((e=>e.id===E.mainDocId));var E;return a.createElement("div",{className:(0,r.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(h,{siteTitle:i,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(g,{versionLabel:p.label,to:v.path,onClick:()=>d(p.name)})))}function v(e){let{className:t}=e;const n=(0,d.E)();return n.banner?a.createElement(p,{className:t,versionMetadata:n}):null}},1999:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});var a=n(25773),r=n(27378),l=n(37140),i=n(99213),o=n(20624),s=n(81884);const c="anchorWithStickyNavbar_JmGV",m="anchorWithHideOnScrollNavbar_pMLv";function d(e){let{as:t,id:n,...d}=e;const{navbar:{hideOnScroll:u}}=(0,o.L)();if("h1"===t||!n)return r.createElement(t,(0,a.Z)({},d,{id:void 0}));const h=(0,i.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:n});return r.createElement(t,(0,a.Z)({},d,{className:(0,l.Z)("anchor",u?m:c,d.className),id:n}),d.children,r.createElement(s.default,{className:"hash-link",to:`#${n}`,"aria-label":h,title:h},"\u200b"))}},83828:(e,t,n)=>{n.d(t,{ZP:()=>c,gE:()=>s});var a=n(27378),r=n(35331);const l=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function i(){return"undefined"!=typeof window&&"localStorage"in window}function o(){return(i()?localStorage.getItem("moonrepo.language"):null)??"node"}function s(){const[e,t]=(0,a.useState)(o());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function c(){const[e,t]=(0,a.useState)(o()),n=(0,r.TH)(),s=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),i())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return l.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:s,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},78372:(e,t,n)=>{n.r(t),n.d(t,{default:()=>p});var a=n(27378),r=n(45161),l=n(8862),i=n(98948),o=n(83469),s=n(83828),c=n(31792),m=n(90728),d=n(30658);function u(e){let{active:t,children:n,href:r}=e;return r?a.createElement(m.Z,{"aria-current":t?"page":void 0,href:r,itemProp:"item",size:"sm",variant:"muted",weight:"medium"},a.createElement("span",{itemProp:"name"},n)):a.createElement(d.ZP,{"aria-current":t?"page":void 0,as:"span",itemProp:"item name",size:"sm",variant:"muted",weight:"medium",className:"m-0"},n)}function h(e){let{children:t,index:n}=e;return a.createElement("li",{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},a.createElement("div",{className:"flex items-center"},a.createElement(c.Z,{icon:o.yOZ,className:"flex-shrink-0 text-gray-600 mr-2","aria-hidden":"true"}),t,a.createElement("meta",{itemProp:"position",content:String(n+1)})))}function g(){const e=(0,i.Z)("/");return a.createElement("li",null,a.createElement(m.Z,{href:e,variant:"muted"},a.createElement(c.Z,{icon:o.yGT,className:"flex-shrink-0","aria-hidden":"true"}),a.createElement("span",{className:"sr-only"},"Home")))}function p(){const e=(0,r.s1)(),t=(0,l.Ns)();return e?a.createElement(a.Fragment,null,a.createElement("span",{className:"float-right ml-2"},a.createElement(s.ZP,null)),a.createElement("nav",{className:"flex pl-1 mb-2","aria-label":"Breadcrumb"},a.createElement("ol",{role:"list",className:"list-none p-0 m-0 flex items-center space-x-2",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(g,null),e.map(((t,n)=>a.createElement(h,{key:n,index:n},a.createElement(u,{href:n{n.d(t,{Z:()=>s});var a=n(27378),r=n(40624),l=n(83469),i=n(31792),o=n(90728);function s(e){let{permalink:t,title:n,isNext:s}=e;return a.createElement("div",{className:(0,r.Z)("flex-1",s?"text-right":"text-left")},a.createElement(o.Z,{weight:"bold",to:t},!s&&a.createElement(i.Z,{className:"mr-1 icon-previous",icon:l.A35}),n,s&&a.createElement(i.Z,{className:"ml-1 icon-next",icon:l._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.502e83b6.js b/assets/js/14eb3368.502e83b6.js new file mode 100644 index 00000000000..4fd3d21a09a --- /dev/null +++ b/assets/js/14eb3368.502e83b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9817,22108],{80777:(e,t,n)=>{n.r(t),n.d(t,{default:()=>I});var a=n(27378),r=n(1123),l=n(45161),i=n(98948),o=n(37140),s=n(81884),c=n(45626),m=n(99213);const d="cardContainer_H47c",u="cardTitle_tTnA",h="cardDescription_rTl4";function g(e){let{href:t,children:n}=e;return a.createElement(s.default,{href:t,className:(0,o.Z)("card padding--lg",d)},n)}function p(e){let{href:t,icon:n,title:r,description:l}=e;return a.createElement(g,{href:t},a.createElement("h2",{className:(0,o.Z)("text--truncate",u),title:r},n," ",r),l&&a.createElement("p",{className:(0,o.Z)("text--truncate",h),title:l},l))}function v(e){let{item:t}=e;const n=(0,l.Wl)(t);return n?a.createElement(p,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,m.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function E(e){let{item:t}=e;const n=(0,c.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,l.xz)(t.docId??void 0);return a.createElement(p,{href:t.href,icon:n,title:t.label,description:t.description??r?.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return a.createElement(E,{item:t});case"category":return a.createElement(v,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function b(e){let{className:t}=e;const n=(0,l.jA)();return a.createElement(N,{items:n.items,className:t})}function N(e){const{items:t,className:n}=e;if(!t)return a.createElement(b,e);const r=(0,l.MN)(t);return a.createElement("section",{className:(0,o.Z)("row",n)},r.map(((e,t)=>a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(f,{item:e})))))}var Z=n(38274),w=n(84506),k=n(25069),y=n(78372),L=n(1999);const x="generatedIndexPage_cf3v",T="list_qoTc",S="title_Ww3I";function P(e){let{categoryGeneratedIndex:t}=e;return a.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,i.Z)(t.image)})}function C(e){let{categoryGeneratedIndex:t}=e;const n=(0,l.jA)();return a.createElement("div",{className:x},a.createElement(w.Z,null),a.createElement(y.default,null),a.createElement(k.default,null),a.createElement("header",null,a.createElement(L.default,{as:"h1",className:S},t.title),t.description&&a.createElement("p",null,t.description)),a.createElement("article",{className:"margin-top--lg"},a.createElement(N,{items:n.items,className:T})),a.createElement("footer",{className:"margin-top--lg"},a.createElement(Z.default,{previous:t.navigation.previous,next:t.navigation.next})))}function I(e){return a.createElement(a.Fragment,null,a.createElement(P,e),a.createElement(C,e))}},38274:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});var a=n(25773),r=n(27378),l=n(99213),i=n(44022);function o(e){const{previous:t,next:n}=e;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,l.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&r.createElement(i.Z,(0,a.Z)({},t,{subLabel:r.createElement(l.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&r.createElement(i.Z,(0,a.Z)({},n,{subLabel:r.createElement(l.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},25069:(e,t,n)=>{n.r(t),n.d(t,{default:()=>s});var a=n(27378),r=n(37140),l=n(99213),i=n(75484),o=n(25611);function s(e){let{className:t}=e;const n=(0,o.E)();return n.badge?a.createElement("span",{className:(0,r.Z)(t,i.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(l.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},84506:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(27378),r=n(37140),l=n(50353),i=n(81884),o=n(99213),s=n(62935),c=n(75484),m=n(24453),d=n(25611);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(o.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(o.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function h(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function g(e){let{versionLabel:t,to:n,onClick:r}=e;return a.createElement(o.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(i.default,{to:n,onClick:r},a.createElement(o.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function p(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,l.default)(),{pluginId:o}=(0,s.useActivePlugin)({failfast:!0}),{savePreferredVersionName:d}=(0,m.J)(o),{latestDocSuggestion:u,latestVersionSuggestion:p}=(0,s.useDocVersionSuggestions)(o),v=u??(E=p).docs.find((e=>e.id===E.mainDocId));var E;return a.createElement("div",{className:(0,r.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(h,{siteTitle:i,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(g,{versionLabel:p.label,to:v.path,onClick:()=>d(p.name)})))}function v(e){let{className:t}=e;const n=(0,d.E)();return n.banner?a.createElement(p,{className:t,versionMetadata:n}):null}},1999:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});var a=n(25773),r=n(27378),l=n(37140),i=n(99213),o=n(20624),s=n(81884);const c="anchorWithStickyNavbar_JmGV",m="anchorWithHideOnScrollNavbar_pMLv";function d(e){let{as:t,id:n,...d}=e;const{navbar:{hideOnScroll:u}}=(0,o.L)();if("h1"===t||!n)return r.createElement(t,(0,a.Z)({},d,{id:void 0}));const h=(0,i.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:n});return r.createElement(t,(0,a.Z)({},d,{className:(0,l.Z)("anchor",u?m:c,d.className),id:n}),d.children,r.createElement(s.default,{className:"hash-link",to:`#${n}`,"aria-label":h,title:h},"\u200b"))}},83828:(e,t,n)=>{n.d(t,{ZP:()=>c,gE:()=>s});var a=n(27378),r=n(35331);const l=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function i(){return"undefined"!=typeof window&&"localStorage"in window}function o(){return(i()?localStorage.getItem("moonrepo.language"):null)??"node"}function s(){const[e,t]=(0,a.useState)(o());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function c(){const[e,t]=(0,a.useState)(o()),n=(0,r.TH)(),s=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),i())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return l.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:s,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},78372:(e,t,n)=>{n.r(t),n.d(t,{default:()=>p});var a=n(27378),r=n(45161),l=n(8862),i=n(98948),o=n(83469),s=n(83828),c=n(31792),m=n(90728),d=n(30658);function u(e){let{active:t,children:n,href:r}=e;return r?a.createElement(m.Z,{"aria-current":t?"page":void 0,href:r,itemProp:"item",size:"sm",variant:"muted",weight:"medium"},a.createElement("span",{itemProp:"name"},n)):a.createElement(d.ZP,{"aria-current":t?"page":void 0,as:"span",itemProp:"item name",size:"sm",variant:"muted",weight:"medium",className:"m-0"},n)}function h(e){let{children:t,index:n}=e;return a.createElement("li",{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},a.createElement("div",{className:"flex items-center"},a.createElement(c.Z,{icon:o.yOZ,className:"flex-shrink-0 text-gray-600 mr-2","aria-hidden":"true"}),t,a.createElement("meta",{itemProp:"position",content:String(n+1)})))}function g(){const e=(0,i.Z)("/");return a.createElement("li",null,a.createElement(m.Z,{href:e,variant:"muted"},a.createElement(c.Z,{icon:o.yGT,className:"flex-shrink-0","aria-hidden":"true"}),a.createElement("span",{className:"sr-only"},"Home")))}function p(){const e=(0,r.s1)(),t=(0,l.Ns)();return e?a.createElement(a.Fragment,null,a.createElement("span",{className:"float-right ml-2"},a.createElement(s.ZP,null)),a.createElement("nav",{className:"flex pl-1 mb-2","aria-label":"Breadcrumb"},a.createElement("ol",{role:"list",className:"list-none p-0 m-0 flex items-center space-x-2",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(g,null),e.map(((t,n)=>a.createElement(h,{key:n,index:n},a.createElement(u,{href:n{n.d(t,{Z:()=>s});var a=n(27378),r=n(40624),l=n(83469),i=n(31792),o=n(90728);function s(e){let{permalink:t,title:n,isNext:s}=e;return a.createElement("div",{className:(0,r.Z)("flex-1",s?"text-right":"text-left")},a.createElement(o.Z,{weight:"bold",to:t},!s&&a.createElement(i.Z,{className:"mr-1 icon-previous",icon:l.A35}),n,s&&a.createElement(i.Z,{className:"ml-1 icon-next",icon:l._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/14f81d84.b76e9d73.js b/assets/js/14f81d84.b76e9d73.js new file mode 100644 index 00000000000..7fb60ad2c4a --- /dev/null +++ b/assets/js/14f81d84.b76e9d73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42463],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),i=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=i(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),m=i(r),d=a,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:a,l[1]=u;for(var i=2;i{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),u=r(35595),s=r(76457);const i="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:u,selectValue:s,tabValues:i}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,r=p.indexOf(t),n=i[r].value;n!==u&&(m(t),s(n))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},i.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":u===t})}),r??t)})))}function m(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,u.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",i)},a.createElement(p,(0,n.Z)({},e,t)),a.createElement(m,(0,n.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>m});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),u=r(71819);function s(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function i(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??s(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(u),(0,n.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(l.location.search);t.set(u,e),l.replace({...l.location,search:t.toString()})}),[u,l])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=i(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:r,groupId:a}),[f,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=m??f;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),b(e)}),[d,b,o]),tabValues:o}}},81793:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798),r(76911);const o={slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},l=void 0,u={permalink:"/blog/v0.23",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx",source:"@site/blog/2023-01-30_v0.23.mdx",title:"moon v0.23 - Scoped task inheritance, and project config updates",description:"With this release, we're launching the next iteration of our task inheritance model, as well as",date:"2023-01-30T00:00:00.000Z",formattedDate:"January 30, 2023",tags:[{label:"survey",permalink:"/blog/tags/survey"},{label:"tasks",permalink:"/blog/tags/tasks"},{label:"projects",permalink:"/blog/tags/projects"}],readingTime:5.74,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},prevItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"},nextItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"}},s={image:r(57936).Z,authorsImageUrls:[void 0]},i=[],c={toc:i};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're launching the next iteration of our task inheritance model, as well as\nquality of life improvements for project configuration."))}p.isMDXComponent=!0},57936:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.23-7f465b99a3ddadd6415b79205a586713.png"}}]); \ No newline at end of file diff --git a/assets/js/14f81d84.dc0bc4b8.js b/assets/js/14f81d84.dc0bc4b8.js deleted file mode 100644 index c17e68aafb2..00000000000 --- a/assets/js/14f81d84.dc0bc4b8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2463],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),i=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=i(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),m=i(r),d=a,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:a,l[1]=u;for(var i=2;i{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),u=r(35595),s=r(76457);const i="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:u,selectValue:s,tabValues:i}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,r=p.indexOf(t),n=i[r].value;n!==u&&(m(t),s(n))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},i.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":u===t})}),r??t)})))}function m(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,u.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",i)},a.createElement(p,(0,n.Z)({},e,t)),a.createElement(m,(0,n.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>m});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),u=r(71819);function s(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function i(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??s(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(u),(0,n.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(l.location.search);t.set(u,e),l.replace({...l.location,search:t.toString()})}),[u,l])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=i(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:r,groupId:a}),[f,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=m??f;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),b(e)}),[d,b,o]),tabValues:o}}},81793:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798),r(76911);const o={slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},l=void 0,u={permalink:"/blog/v0.23",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx",source:"@site/blog/2023-01-30_v0.23.mdx",title:"moon v0.23 - Scoped task inheritance, and project config updates",description:"With this release, we're launching the next iteration of our task inheritance model, as well as",date:"2023-01-30T00:00:00.000Z",formattedDate:"January 30, 2023",tags:[{label:"survey",permalink:"/blog/tags/survey"},{label:"tasks",permalink:"/blog/tags/tasks"},{label:"projects",permalink:"/blog/tags/projects"}],readingTime:5.74,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},prevItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"},nextItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"}},s={image:r(57936).Z,authorsImageUrls:[void 0]},i=[],c={toc:i};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're launching the next iteration of our task inheritance model, as well as\nquality of life improvements for project configuration."))}p.isMDXComponent=!0},57936:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.23-7f465b99a3ddadd6415b79205a586713.png"}}]); \ No newline at end of file diff --git a/assets/js/151c652b.99da601a.js b/assets/js/151c652b.99da601a.js deleted file mode 100644 index bd2d824aaf0..00000000000 --- a/assets/js/151c652b.99da601a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7394],{7356:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/globals","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/151c652b.cf961f60.js b/assets/js/151c652b.cf961f60.js new file mode 100644 index 00000000000..dca59b76064 --- /dev/null +++ b/assets/js/151c652b.cf961f60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37394],{7356:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/globals","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/15a4ce61.1419bb38.js b/assets/js/15a4ce61.1419bb38.js deleted file mode 100644 index 22a3af3554f..00000000000 --- a/assets/js/15a4ce61.1419bb38.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2129],{86596:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/railway","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/15a4ce61.91fcd43e.js b/assets/js/15a4ce61.91fcd43e.js new file mode 100644 index 00000000000..323ca8e5eae --- /dev/null +++ b/assets/js/15a4ce61.91fcd43e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92129],{86596:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/railway","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/163fb342.03d52823.js b/assets/js/163fb342.03d52823.js new file mode 100644 index 00000000000..4091054ce9b --- /dev/null +++ b/assets/js/163fb342.03d52823.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36371],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,f=d["".concat(l,".").concat(m)]||d[m]||s[m]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={title:"upgrade"},i=void 0,c={unversionedId:"commands/upgrade",id:"commands/upgrade",title:"upgrade",description:"The moon upgrade command can be used to upgrade your current moon binary (if installed globally)",source:"@site/docs/commands/upgrade.mdx",sourceDirName:"commands",slug:"/commands/upgrade",permalink:"/docs/commands/upgrade",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/upgrade.mdx",tags:[],version:"current",frontMatter:{title:"upgrade"},sidebar:"docs",previous:{title:"teardown",permalink:"/docs/commands/teardown"},next:{title:"Cheat sheet",permalink:"/docs/cheat-sheet"}},l={},p=[],u={toc:p};function s(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon upgrade")," command can be used to upgrade your current moon binary (if installed globally)\nto the latest version."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon upgrade\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This command will only work if moon was installed in the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.moon")," directory, using our official\n",(0,o.kt)("a",{parentName:"p",href:"../install"},"installation script"),". If installed through Node.js, you'll need to upgrade manually.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/163fb342.2061f94e.js b/assets/js/163fb342.2061f94e.js deleted file mode 100644 index 5885a2cef8a..00000000000 --- a/assets/js/163fb342.2061f94e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6371],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,f=d["".concat(l,".").concat(m)]||d[m]||s[m]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={title:"upgrade"},i=void 0,c={unversionedId:"commands/upgrade",id:"commands/upgrade",title:"upgrade",description:"The moon upgrade command can be used to upgrade your current moon binary (if installed globally)",source:"@site/docs/commands/upgrade.mdx",sourceDirName:"commands",slug:"/commands/upgrade",permalink:"/docs/commands/upgrade",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/upgrade.mdx",tags:[],version:"current",frontMatter:{title:"upgrade"},sidebar:"docs",previous:{title:"teardown",permalink:"/docs/commands/teardown"},next:{title:"Cheat sheet",permalink:"/docs/cheat-sheet"}},l={},p=[],u={toc:p};function s(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon upgrade")," command can be used to upgrade your current moon binary (if installed globally)\nto the latest version."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon upgrade\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This command will only work if moon was installed in the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.moon")," directory, using our official\n",(0,o.kt)("a",{parentName:"p",href:"../install"},"installation script"),". If installed through Node.js, you'll need to upgrade manually.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/16ea2389.46d9e3cb.js b/assets/js/16ea2389.46d9e3cb.js new file mode 100644 index 00000000000..bf606d7db6e --- /dev/null +++ b/assets/js/16ea2389.46d9e3cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64414],{91511:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/source","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/16ea2389.992db5e1.js b/assets/js/16ea2389.992db5e1.js deleted file mode 100644 index 3f7750a6b79..00000000000 --- a/assets/js/16ea2389.992db5e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4414],{91511:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/source","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/170d6c86.809630d3.js b/assets/js/170d6c86.809630d3.js new file mode 100644 index 00000000000..8f57d1ec1b5 --- /dev/null +++ b/assets/js/170d6c86.809630d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42839],{56832:a=>{a.exports=JSON.parse('{"label":"roadmap","permalink":"/blog/tags/roadmap","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/170d6c86.ec9b8614.js b/assets/js/170d6c86.ec9b8614.js deleted file mode 100644 index bef0b31daa2..00000000000 --- a/assets/js/170d6c86.ec9b8614.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2839],{56832:a=>{a.exports=JSON.parse('{"label":"roadmap","permalink":"/blog/tags/roadmap","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1740b646.0a4424fc.js b/assets/js/1740b646.0a4424fc.js deleted file mode 100644 index 9a6ef7a4234..00000000000 --- a/assets/js/1740b646.0a4424fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7448],{17832:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/logging","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1740b646.a009b328.js b/assets/js/1740b646.a009b328.js new file mode 100644 index 00000000000..b3c572444eb --- /dev/null +++ b/assets/js/1740b646.a009b328.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67448],{17832:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/logging","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/17896441.9d895065.js b/assets/js/17896441.9d895065.js new file mode 100644 index 00000000000..9fd6c00353f --- /dev/null +++ b/assets/js/17896441.9d895065.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27918,22108],{74764:(e,t,n)=>{n.r(t),n.d(t,{default:()=>P});var a=n(27378),l=n(1123),r=n(89446);function o(){const{metadata:e,frontMatter:t,assets:n}=(0,r.k)();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var s=n(37140),i=n(58357),c=n(38274);function d(){const{metadata:e}=(0,r.k)();return a.createElement(c.default,{previous:e.previous,next:e.next})}var m=n(84506),u=n(25069),v=n(75484),p=n(99213);function f(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function g(e){let{lastUpdatedBy:t}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function h(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:v.k.common.lastUpdated},a.createElement(p.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(f,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(g,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var E=n(34565),b=n(28349);const L="lastUpdated_pbO5";function N(e){return a.createElement("div",{className:(0,s.Z)(v.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(b.Z,e)))}function k(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return a.createElement("div",{className:(0,s.Z)(v.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(E.Z,{editUrl:t})),a.createElement("div",{className:(0,s.Z)("col",L)},(n||l)&&a.createElement(h,{lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function Z(){const{metadata:e}=(0,r.k)(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o,tags:i}=e,c=i.length>0,d=!!(t||n||o);return c||d?a.createElement("footer",{className:(0,s.Z)(v.k.docs.docFooter,"docusaurus-mt-lg")},c&&a.createElement(N,{tags:i}),d&&a.createElement(k,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l})):null}var x=n(72218);const w="tocMobile_Ojys";function y(){const{toc:e,frontMatter:t}=(0,r.k)();return a.createElement(x.default,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,s.Z)(v.k.docs.docTocMobile,w)})}var C=n(17061);function _(){const{toc:e,frontMatter:t}=(0,r.k)();return a.createElement(C.default,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:v.k.docs.docTocDesktop})}var T=n(1999),H=n(40450);function U(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=(0,r.k)();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,s.Z)(v.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(T.default,{as:"h1"},n)),a.createElement(H.default,null,t))}var A=n(78372);const M="docItemContainer_tjFy",B="docItemCol_Qr34";function S(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=(0,r.k)(),n=(0,i.i)(),l=e.hide_table_of_contents,o=!l&&t.length>0;return{hidden:l,mobile:o?a.createElement(y,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(_,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,s.Z)("col",!n.hidden&&B)},a.createElement(m.Z,null),a.createElement("div",{className:M},a.createElement("article",null,a.createElement(A.default,null),a.createElement(u.default,null),n.mobile,a.createElement(U,null,t),a.createElement(Z,null)),a.createElement(d,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function P(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(r.b,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(o,null),a.createElement(S,null,a.createElement(n,null))))}},38274:(e,t,n)=>{n.r(t),n.d(t,{default:()=>s});var a=n(25773),l=n(27378),r=n(99213),o=n(44022);function s(e){const{previous:t,next:n}=e;return l.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&l.createElement(o.Z,(0,a.Z)({},t,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&l.createElement(o.Z,(0,a.Z)({},n,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},25069:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(37140),r=n(99213),o=n(75484),s=n(25611);function i(e){let{className:t}=e;const n=(0,s.E)();return n.badge?a.createElement("span",{className:(0,l.Z)(t,o.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(r.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},84506:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(27378),l=n(37140),r=n(50353),o=n(81884),s=n(99213),i=n(62935),c=n(75484),d=n(24453),m=n(25611);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function v(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function p(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(o.default,{to:n,onClick:l},a.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function f(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:o}}=(0,r.default)(),{pluginId:s}=(0,i.useActivePlugin)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(s),{latestDocSuggestion:u,latestVersionSuggestion:f}=(0,i.useDocVersionSuggestions)(s),g=u??(h=f).docs.find((e=>e.id===h.mainDocId));var h;return a.createElement("div",{className:(0,l.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(v,{siteTitle:o,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(p,{versionLabel:f.label,to:g.path,onClick:()=>m(f.name)})))}function g(e){let{className:t}=e;const n=(0,m.E)();return n.banner?a.createElement(f,{className:t,versionMetadata:n}):null}},34565:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(27378),l=n(99213),r=n(75484),o=n(25773),s=n(37140);const i="iconEdit_bHB7";function c(e){let{className:t,...n}=e;return a.createElement("svg",(0,o.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(i,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function d(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},a.createElement(c,null),a.createElement(l.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},40450:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});var a=n(27378),l=n(35318),r=n(36256);function o(e){let{children:t}=e;return a.createElement(l.Zo,{components:r.default},t)}},17061:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(25773),l=n(27378),r=n(37140),o=n(17148);const s="tableOfContents_XG6w";function i(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(s,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},72218:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var a=n(27378),l=n(37140),r=n(80376),o=n(17148),s=n(25773),i=n(99213);const c="tocCollapsibleButton_iI2p",d="tocCollapsibleButtonExpanded_cHjC";function m(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,s.Z)({type:"button"},n,{className:(0,l.Z)("clean-btn",c,!t&&d,n.className)}),a.createElement(i.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const u="tocCollapsible_wXna",v="tocCollapsibleContent_vea0",p="tocCollapsibleExpanded_BbRn";function f(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:i}=e;const{collapsed:c,toggleCollapsed:d}=(0,r.u)({initialState:!0});return a.createElement("div",{className:(0,l.Z)(u,!c&&p,n)},a.createElement(m,{collapsed:c,onClick:d}),a.createElement(r.z,{lazy:!0,className:v,collapsed:c},a.createElement(o.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:i})))}},17148:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(25773),l=n(27378),r=n(20624),o=n(86934),s=n(81344);function i(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(i,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const c=l.memo(i);function d(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:d,minHeadingLevel:m,maxHeadingLevel:u,...v}=e;const p=(0,r.L)(),f=m??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,h=(0,o.b)({toc:t,minHeadingLevel:f,maxHeadingLevel:g}),E=(0,l.useMemo)((()=>{if(i&&d)return{linkClassName:i,linkActiveClassName:d,minHeadingLevel:f,maxHeadingLevel:g}}),[i,d,f,g]);return(0,s.S)(E),l.createElement(c,(0,a.Z)({toc:h,className:n,linkClassName:i},v))}},51478:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),l=n(37140),r=n(81884);const o="tag_otG2",s="tagRegular_s0E1",i="tagWithCount_PGyn";function c(e){let{permalink:t,label:n,count:c}=e;return a.createElement(r.default,{href:t,className:(0,l.Z)(o,c?i:s)},n,c&&a.createElement("span",null,c))}},28349:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),l=n(37140),r=n(99213),o=n(51478);const s="tags_Ow0B",i="tag_DFxh";function c(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,l.Z)(s,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:i},a.createElement(o.Z,{label:t,permalink:n}))}))))}},89446:(e,t,n)=>{n.d(t,{b:()=>o,k:()=>s});var a=n(27378),l=n(41763);const r=a.createContext(null);function o(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:l},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocProvider");return e}},81344:(e,t,n)=>{n.d(t,{S:()=>i});var a=n(27378),l=n(20624);function r(e){const t=e.getBoundingClientRect();return t.top===t.bottom?r(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>r(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function i(e){const t=(0,a.useRef)(void 0),n=s();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:s}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:s}),c=o(i,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}},86934:(e,t,n)=>{n.d(t,{a:()=>r,b:()=>s});var a=n(27378);function l(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function r(e){return(0,a.useMemo)((()=>l(e)),[e])}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,a.useMemo)((()=>o({toc:l(t),minHeadingLevel:n,maxHeadingLevel:r})),[t,n,r])}},83828:(e,t,n)=>{n.d(t,{ZP:()=>c,gE:()=>i});var a=n(27378),l=n(35331);const r=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function o(){return"undefined"!=typeof window&&"localStorage"in window}function s(){return(o()?localStorage.getItem("moonrepo.language"):null)??"node"}function i(){const[e,t]=(0,a.useState)(s());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function c(){const[e,t]=(0,a.useState)(s()),n=(0,l.TH)(),i=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),o())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return r.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:i,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},78372:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var a=n(27378),l=n(45161),r=n(8862),o=n(98948),s=n(83469),i=n(83828),c=n(31792),d=n(90728),m=n(30658);function u(e){let{active:t,children:n,href:l}=e;return l?a.createElement(d.Z,{"aria-current":t?"page":void 0,href:l,itemProp:"item",size:"sm",variant:"muted",weight:"medium"},a.createElement("span",{itemProp:"name"},n)):a.createElement(m.ZP,{"aria-current":t?"page":void 0,as:"span",itemProp:"item name",size:"sm",variant:"muted",weight:"medium",className:"m-0"},n)}function v(e){let{children:t,index:n}=e;return a.createElement("li",{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},a.createElement("div",{className:"flex items-center"},a.createElement(c.Z,{icon:s.yOZ,className:"flex-shrink-0 text-gray-600 mr-2","aria-hidden":"true"}),t,a.createElement("meta",{itemProp:"position",content:String(n+1)})))}function p(){const e=(0,o.Z)("/");return a.createElement("li",null,a.createElement(d.Z,{href:e,variant:"muted"},a.createElement(c.Z,{icon:s.yGT,className:"flex-shrink-0","aria-hidden":"true"}),a.createElement("span",{className:"sr-only"},"Home")))}function f(){const e=(0,l.s1)(),t=(0,r.Ns)();return e?a.createElement(a.Fragment,null,a.createElement("span",{className:"float-right ml-2"},a.createElement(i.ZP,null)),a.createElement("nav",{className:"flex pl-1 mb-2","aria-label":"Breadcrumb"},a.createElement("ol",{role:"list",className:"list-none p-0 m-0 flex items-center space-x-2",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(p,null),e.map(((t,n)=>a.createElement(v,{key:n,index:n},a.createElement(u,{href:n{n.d(t,{Z:()=>i});var a=n(27378),l=n(40624),r=n(83469),o=n(31792),s=n(90728);function i(e){let{permalink:t,title:n,isNext:i}=e;return a.createElement("div",{className:(0,l.Z)("flex-1",i?"text-right":"text-left")},a.createElement(s.Z,{weight:"bold",to:t},!i&&a.createElement(o.Z,{className:"mr-1 icon-previous",icon:r.A35}),n,i&&a.createElement(o.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/17896441.d36c3217.js b/assets/js/17896441.d36c3217.js deleted file mode 100644 index a2fdcec6e15..00000000000 --- a/assets/js/17896441.d36c3217.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7918,2108],{74764:(e,t,n)=>{n.r(t),n.d(t,{default:()=>P});var a=n(27378),l=n(1123),r=n(89446);function o(){const{metadata:e,frontMatter:t,assets:n}=(0,r.k)();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var s=n(37140),i=n(58357),c=n(38274);function d(){const{metadata:e}=(0,r.k)();return a.createElement(c.default,{previous:e.previous,next:e.next})}var m=n(84506),u=n(25069),v=n(75484),p=n(99213);function f(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function g(e){let{lastUpdatedBy:t}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function h(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:v.k.common.lastUpdated},a.createElement(p.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(f,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(g,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var E=n(34565),b=n(28349);const L="lastUpdated_pbO5";function N(e){return a.createElement("div",{className:(0,s.Z)(v.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(b.Z,e)))}function k(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return a.createElement("div",{className:(0,s.Z)(v.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(E.Z,{editUrl:t})),a.createElement("div",{className:(0,s.Z)("col",L)},(n||l)&&a.createElement(h,{lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function Z(){const{metadata:e}=(0,r.k)(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o,tags:i}=e,c=i.length>0,d=!!(t||n||o);return c||d?a.createElement("footer",{className:(0,s.Z)(v.k.docs.docFooter,"docusaurus-mt-lg")},c&&a.createElement(N,{tags:i}),d&&a.createElement(k,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l})):null}var x=n(72218);const w="tocMobile_Ojys";function y(){const{toc:e,frontMatter:t}=(0,r.k)();return a.createElement(x.default,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,s.Z)(v.k.docs.docTocMobile,w)})}var C=n(17061);function _(){const{toc:e,frontMatter:t}=(0,r.k)();return a.createElement(C.default,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:v.k.docs.docTocDesktop})}var T=n(1999),H=n(40450);function U(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=(0,r.k)();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,s.Z)(v.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(T.default,{as:"h1"},n)),a.createElement(H.default,null,t))}var A=n(78372);const M="docItemContainer_tjFy",B="docItemCol_Qr34";function S(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=(0,r.k)(),n=(0,i.i)(),l=e.hide_table_of_contents,o=!l&&t.length>0;return{hidden:l,mobile:o?a.createElement(y,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(_,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,s.Z)("col",!n.hidden&&B)},a.createElement(m.Z,null),a.createElement("div",{className:M},a.createElement("article",null,a.createElement(A.default,null),a.createElement(u.default,null),n.mobile,a.createElement(U,null,t),a.createElement(Z,null)),a.createElement(d,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function P(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(r.b,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(o,null),a.createElement(S,null,a.createElement(n,null))))}},38274:(e,t,n)=>{n.r(t),n.d(t,{default:()=>s});var a=n(25773),l=n(27378),r=n(99213),o=n(44022);function s(e){const{previous:t,next:n}=e;return l.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&l.createElement(o.Z,(0,a.Z)({},t,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&l.createElement(o.Z,(0,a.Z)({},n,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},25069:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(37140),r=n(99213),o=n(75484),s=n(25611);function i(e){let{className:t}=e;const n=(0,s.E)();return n.badge?a.createElement("span",{className:(0,l.Z)(t,o.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(r.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},84506:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(27378),l=n(37140),r=n(50353),o=n(81884),s=n(99213),i=n(62935),c=n(75484),d=n(24453),m=n(25611);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function v(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function p(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(o.default,{to:n,onClick:l},a.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function f(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:o}}=(0,r.default)(),{pluginId:s}=(0,i.useActivePlugin)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(s),{latestDocSuggestion:u,latestVersionSuggestion:f}=(0,i.useDocVersionSuggestions)(s),g=u??(h=f).docs.find((e=>e.id===h.mainDocId));var h;return a.createElement("div",{className:(0,l.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(v,{siteTitle:o,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(p,{versionLabel:f.label,to:g.path,onClick:()=>m(f.name)})))}function g(e){let{className:t}=e;const n=(0,m.E)();return n.banner?a.createElement(f,{className:t,versionMetadata:n}):null}},34565:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(27378),l=n(99213),r=n(75484),o=n(25773),s=n(37140);const i="iconEdit_bHB7";function c(e){let{className:t,...n}=e;return a.createElement("svg",(0,o.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(i,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function d(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},a.createElement(c,null),a.createElement(l.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},40450:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});var a=n(27378),l=n(35318),r=n(36256);function o(e){let{children:t}=e;return a.createElement(l.Zo,{components:r.default},t)}},17061:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(25773),l=n(27378),r=n(37140),o=n(17148);const s="tableOfContents_XG6w";function i(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(s,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},72218:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var a=n(27378),l=n(37140),r=n(80376),o=n(17148),s=n(25773),i=n(99213);const c="tocCollapsibleButton_iI2p",d="tocCollapsibleButtonExpanded_cHjC";function m(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,s.Z)({type:"button"},n,{className:(0,l.Z)("clean-btn",c,!t&&d,n.className)}),a.createElement(i.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const u="tocCollapsible_wXna",v="tocCollapsibleContent_vea0",p="tocCollapsibleExpanded_BbRn";function f(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:i}=e;const{collapsed:c,toggleCollapsed:d}=(0,r.u)({initialState:!0});return a.createElement("div",{className:(0,l.Z)(u,!c&&p,n)},a.createElement(m,{collapsed:c,onClick:d}),a.createElement(r.z,{lazy:!0,className:v,collapsed:c},a.createElement(o.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:i})))}},17148:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(25773),l=n(27378),r=n(20624),o=n(86934),s=n(81344);function i(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(i,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const c=l.memo(i);function d(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:d,minHeadingLevel:m,maxHeadingLevel:u,...v}=e;const p=(0,r.L)(),f=m??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,h=(0,o.b)({toc:t,minHeadingLevel:f,maxHeadingLevel:g}),E=(0,l.useMemo)((()=>{if(i&&d)return{linkClassName:i,linkActiveClassName:d,minHeadingLevel:f,maxHeadingLevel:g}}),[i,d,f,g]);return(0,s.S)(E),l.createElement(c,(0,a.Z)({toc:h,className:n,linkClassName:i},v))}},51478:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),l=n(37140),r=n(81884);const o="tag_otG2",s="tagRegular_s0E1",i="tagWithCount_PGyn";function c(e){let{permalink:t,label:n,count:c}=e;return a.createElement(r.default,{href:t,className:(0,l.Z)(o,c?i:s)},n,c&&a.createElement("span",null,c))}},28349:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),l=n(37140),r=n(99213),o=n(51478);const s="tags_Ow0B",i="tag_DFxh";function c(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,l.Z)(s,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:i},a.createElement(o.Z,{label:t,permalink:n}))}))))}},89446:(e,t,n)=>{n.d(t,{b:()=>o,k:()=>s});var a=n(27378),l=n(41763);const r=a.createContext(null);function o(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:l},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocProvider");return e}},81344:(e,t,n)=>{n.d(t,{S:()=>i});var a=n(27378),l=n(20624);function r(e){const t=e.getBoundingClientRect();return t.top===t.bottom?r(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>r(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function i(e){const t=(0,a.useRef)(void 0),n=s();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:s}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:s}),c=o(i,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}},86934:(e,t,n)=>{n.d(t,{a:()=>r,b:()=>s});var a=n(27378);function l(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function r(e){return(0,a.useMemo)((()=>l(e)),[e])}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,a.useMemo)((()=>o({toc:l(t),minHeadingLevel:n,maxHeadingLevel:r})),[t,n,r])}},83828:(e,t,n)=>{n.d(t,{ZP:()=>c,gE:()=>i});var a=n(27378),l=n(35331);const r=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function o(){return"undefined"!=typeof window&&"localStorage"in window}function s(){return(o()?localStorage.getItem("moonrepo.language"):null)??"node"}function i(){const[e,t]=(0,a.useState)(s());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function c(){const[e,t]=(0,a.useState)(s()),n=(0,l.TH)(),i=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),o())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return r.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:i,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},78372:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var a=n(27378),l=n(45161),r=n(8862),o=n(98948),s=n(83469),i=n(83828),c=n(31792),d=n(90728),m=n(30658);function u(e){let{active:t,children:n,href:l}=e;return l?a.createElement(d.Z,{"aria-current":t?"page":void 0,href:l,itemProp:"item",size:"sm",variant:"muted",weight:"medium"},a.createElement("span",{itemProp:"name"},n)):a.createElement(m.ZP,{"aria-current":t?"page":void 0,as:"span",itemProp:"item name",size:"sm",variant:"muted",weight:"medium",className:"m-0"},n)}function v(e){let{children:t,index:n}=e;return a.createElement("li",{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},a.createElement("div",{className:"flex items-center"},a.createElement(c.Z,{icon:s.yOZ,className:"flex-shrink-0 text-gray-600 mr-2","aria-hidden":"true"}),t,a.createElement("meta",{itemProp:"position",content:String(n+1)})))}function p(){const e=(0,o.Z)("/");return a.createElement("li",null,a.createElement(d.Z,{href:e,variant:"muted"},a.createElement(c.Z,{icon:s.yGT,className:"flex-shrink-0","aria-hidden":"true"}),a.createElement("span",{className:"sr-only"},"Home")))}function f(){const e=(0,l.s1)(),t=(0,r.Ns)();return e?a.createElement(a.Fragment,null,a.createElement("span",{className:"float-right ml-2"},a.createElement(i.ZP,null)),a.createElement("nav",{className:"flex pl-1 mb-2","aria-label":"Breadcrumb"},a.createElement("ol",{role:"list",className:"list-none p-0 m-0 flex items-center space-x-2",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(p,null),e.map(((t,n)=>a.createElement(v,{key:n,index:n},a.createElement(u,{href:n{n.d(t,{Z:()=>i});var a=n(27378),l=n(40624),r=n(83469),o=n(31792),s=n(90728);function i(e){let{permalink:t,title:n,isNext:i}=e;return a.createElement("div",{className:(0,l.Z)("flex-1",i?"text-right":"text-left")},a.createElement(s.Z,{weight:"bold",to:t},!i&&a.createElement(o.Z,{className:"mr-1 icon-previous",icon:r.A35}),n,i&&a.createElement(o.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/17ae22f4.353e722b.js b/assets/js/17ae22f4.353e722b.js new file mode 100644 index 00000000000..44511f9df3b --- /dev/null +++ b/assets/js/17ae22f4.353e722b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76352],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=s(n),h=o,d=c["".concat(p,".").concat(h)]||c[h]||m[h]||r;return n?a.createElement(d,l(l({ref:t},u),{},{components:n})):a.createElement(d,l({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var a=n(25773),o=(n(27378),n(35318));const r={slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},l=void 0,i={permalink:"/blog/proto-v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx",source:"@site/blog/2023-09-11_proto-v0.17.mdx",title:"proto v0.17 - Experimental Python support and canary releases",description:"This release implements two long requested features, Python language support and canary releases.",date:"2023-09-11T00:00:00.000Z",formattedDate:"September 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"tool",permalink:"/blog/tags/tool"},{label:"canary",permalink:"/blog/tags/canary"},{label:"python",permalink:"/blog/tags/python"}],readingTime:2.39,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},prevItem:{title:"proto v0.18 - List installed tools and configure HTTP client",permalink:"/blog/proto-v0.18"},nextItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"}},p={image:n(72679).Z,authorsImageUrls:[void 0]},s=[{value:"Experimental Python support",id:"experimental-python-support",level:2},{value:"Install canary releases",id:"install-canary-releases",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release implements two long requested features, Python language support and canary releases."),(0,o.kt)("h2",{id:"experimental-python-support"},"Experimental Python support"),(0,o.kt)("p",null,"It's been quite a while since we've introduced a new language into proto, and we're excited to\nannounce the highly requested language, Python! Since Python is now an\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/python-plugin"},"officially supported language"),", installing Python (and\npip) is as simple as:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install python\n")),(0,o.kt)("p",null,"However, we're marking language support as experimental for the time being. We expect our\nimplementation to work for modern Python versions, but may not work for older versions, especially\nPython 2. The reasons for this are as follows:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"proto will install pre-built binaries from\n",(0,o.kt)("a",{parentName:"li",href:"https://github.com/indygreg/python-build-standalone"},"indygreg/python-build-standalone"),". This is\nan unofficial project, and ",(0,o.kt)("em",{parentName:"li"},"does not")," support all Python versions."),(0,o.kt)("li",{parentName:"ul"},"If ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md"},(0,o.kt)("inlineCode",{parentName:"a"},"python-build"))," is\navailable, we'll attempt to use it to build + install Python. This currently requires ",(0,o.kt)("inlineCode",{parentName:"li"},"pyenv")," to\nbe installed, and ",(0,o.kt)("em",{parentName:"li"},"does not")," work on Windows."),(0,o.kt)("li",{parentName:"ul"},"Furthermore, we only support ",(0,o.kt)("inlineCode",{parentName:"li"},"cpython")," at the moment, and do not support ",(0,o.kt)("inlineCode",{parentName:"li"},"pypy"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"jython"),", or\nother Python implementations. It's unknown whether this functionality should be in the core Python\nplugin, or another plugin entirely.")),(0,o.kt)("p",null,'In a future proto version, we want to support a true "build from source" approach for all tools.\nOnce that functionality has landed, we can properly support Python on all platforms, but until then,\nlet us know how this works for you!'),(0,o.kt)("h2",{id:"install-canary-releases"},"Install canary releases"),(0,o.kt)("p",null,"A canary release is a mechanism for rolling out new features and changes to a small subset of users,\nwithout it being an official release on an official channel. This allows users to opt-in and test\nfunctionality if they so choose. Canary releases are not meant to be used in production, and may\ncontain bugs or breaking changes. A canary is similar to a nightly (or weekly) release, depending on\nthe tool."),(0,o.kt)("p",null,"We now support this workflow in proto. To install a canary release, simply use the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/proto/commands/install"},(0,o.kt)("inlineCode",{parentName:"a"},"--canary")," flag when installing a tool"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install --canary\n")),(0,o.kt)("p",null,"This will install the latest canary release to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools//canary"),", and ",(0,o.kt)("em",{parentName:"p"},"only")," the latest\nrelease can be used. Re-installing with ",(0,o.kt)("inlineCode",{parentName:"p"},"--canary")," will overwrite the previous canary installation."),(0,o.kt)("p",null,"However, because we ",(0,o.kt)("a",{parentName:"p",href:"/docs/proto/detection"},"detect a version to run with at runtime"),", how should you\nactually run canary? The easiest way is to prefix the shim with an environment variable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ PROTO_BUN_VERSION=canary bun ./index.ts\n")),(0,o.kt)("p",null,"Or to explicitly configure the version in ",(0,o.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'bun = "canary"\n')),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.17.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added colors to command line ",(0,o.kt)("inlineCode",{parentName:"li"},"--help")," menus."),(0,o.kt)("li",{parentName:"ul"},"Updated the following locations to support partial versions and aliases:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tool versions in ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools"),"."),(0,o.kt)("li",{parentName:"ul"},"Pinning a default version with ",(0,o.kt)("inlineCode",{parentName:"li"},"proto install --pin"),"."),(0,o.kt)("li",{parentName:"ul"},"Setting global version with ",(0,o.kt)("inlineCode",{parentName:"li"},"proto global"),"."),(0,o.kt)("li",{parentName:"ul"},"Setting local version with ",(0,o.kt)("inlineCode",{parentName:"li"},"proto local"),"."))),(0,o.kt)("li",{parentName:"ul"},"Node, npm, pnpm, and yarn will again extract a version from ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," engines.")))}m.isMDXComponent=!0},72679:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.17-c6f866913e8dd547a862c49630b6a96b.png"}}]); \ No newline at end of file diff --git a/assets/js/17ae22f4.4339294e.js b/assets/js/17ae22f4.4339294e.js deleted file mode 100644 index e2743f70faf..00000000000 --- a/assets/js/17ae22f4.4339294e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6352],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=s(n),h=o,d=c["".concat(p,".").concat(h)]||c[h]||m[h]||r;return n?a.createElement(d,l(l({ref:t},u),{},{components:n})):a.createElement(d,l({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var a=n(25773),o=(n(27378),n(35318));const r={slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},l=void 0,i={permalink:"/blog/proto-v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx",source:"@site/blog/2023-09-11_proto-v0.17.mdx",title:"proto v0.17 - Experimental Python support and canary releases",description:"This release implements two long requested features, Python language support and canary releases.",date:"2023-09-11T00:00:00.000Z",formattedDate:"September 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"tool",permalink:"/blog/tags/tool"},{label:"canary",permalink:"/blog/tags/canary"},{label:"python",permalink:"/blog/tags/python"}],readingTime:2.39,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},prevItem:{title:"proto v0.18 - List installed tools and configure HTTP client",permalink:"/blog/proto-v0.18"},nextItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"}},p={image:n(72679).Z,authorsImageUrls:[void 0]},s=[{value:"Experimental Python support",id:"experimental-python-support",level:2},{value:"Install canary releases",id:"install-canary-releases",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release implements two long requested features, Python language support and canary releases."),(0,o.kt)("h2",{id:"experimental-python-support"},"Experimental Python support"),(0,o.kt)("p",null,"It's been quite a while since we've introduced a new language into proto, and we're excited to\nannounce the highly requested language, Python! Since Python is now an\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/python-plugin"},"officially supported language"),", installing Python (and\npip) is as simple as:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install python\n")),(0,o.kt)("p",null,"However, we're marking language support as experimental for the time being. We expect our\nimplementation to work for modern Python versions, but may not work for older versions, especially\nPython 2. The reasons for this are as follows:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"proto will install pre-built binaries from\n",(0,o.kt)("a",{parentName:"li",href:"https://github.com/indygreg/python-build-standalone"},"indygreg/python-build-standalone"),". This is\nan unofficial project, and ",(0,o.kt)("em",{parentName:"li"},"does not")," support all Python versions."),(0,o.kt)("li",{parentName:"ul"},"If ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md"},(0,o.kt)("inlineCode",{parentName:"a"},"python-build"))," is\navailable, we'll attempt to use it to build + install Python. This currently requires ",(0,o.kt)("inlineCode",{parentName:"li"},"pyenv")," to\nbe installed, and ",(0,o.kt)("em",{parentName:"li"},"does not")," work on Windows."),(0,o.kt)("li",{parentName:"ul"},"Furthermore, we only support ",(0,o.kt)("inlineCode",{parentName:"li"},"cpython")," at the moment, and do not support ",(0,o.kt)("inlineCode",{parentName:"li"},"pypy"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"jython"),", or\nother Python implementations. It's unknown whether this functionality should be in the core Python\nplugin, or another plugin entirely.")),(0,o.kt)("p",null,'In a future proto version, we want to support a true "build from source" approach for all tools.\nOnce that functionality has landed, we can properly support Python on all platforms, but until then,\nlet us know how this works for you!'),(0,o.kt)("h2",{id:"install-canary-releases"},"Install canary releases"),(0,o.kt)("p",null,"A canary release is a mechanism for rolling out new features and changes to a small subset of users,\nwithout it being an official release on an official channel. This allows users to opt-in and test\nfunctionality if they so choose. Canary releases are not meant to be used in production, and may\ncontain bugs or breaking changes. A canary is similar to a nightly (or weekly) release, depending on\nthe tool."),(0,o.kt)("p",null,"We now support this workflow in proto. To install a canary release, simply use the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/proto/commands/install"},(0,o.kt)("inlineCode",{parentName:"a"},"--canary")," flag when installing a tool"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install --canary\n")),(0,o.kt)("p",null,"This will install the latest canary release to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools//canary"),", and ",(0,o.kt)("em",{parentName:"p"},"only")," the latest\nrelease can be used. Re-installing with ",(0,o.kt)("inlineCode",{parentName:"p"},"--canary")," will overwrite the previous canary installation."),(0,o.kt)("p",null,"However, because we ",(0,o.kt)("a",{parentName:"p",href:"/docs/proto/detection"},"detect a version to run with at runtime"),", how should you\nactually run canary? The easiest way is to prefix the shim with an environment variable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ PROTO_BUN_VERSION=canary bun ./index.ts\n")),(0,o.kt)("p",null,"Or to explicitly configure the version in ",(0,o.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'bun = "canary"\n')),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.17.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added colors to command line ",(0,o.kt)("inlineCode",{parentName:"li"},"--help")," menus."),(0,o.kt)("li",{parentName:"ul"},"Updated the following locations to support partial versions and aliases:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tool versions in ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools"),"."),(0,o.kt)("li",{parentName:"ul"},"Pinning a default version with ",(0,o.kt)("inlineCode",{parentName:"li"},"proto install --pin"),"."),(0,o.kt)("li",{parentName:"ul"},"Setting global version with ",(0,o.kt)("inlineCode",{parentName:"li"},"proto global"),"."),(0,o.kt)("li",{parentName:"ul"},"Setting local version with ",(0,o.kt)("inlineCode",{parentName:"li"},"proto local"),"."))),(0,o.kt)("li",{parentName:"ul"},"Node, npm, pnpm, and yarn will again extract a version from ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," engines.")))}m.isMDXComponent=!0},72679:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.17-c6f866913e8dd547a862c49630b6a96b.png"}}]); \ No newline at end of file diff --git a/assets/js/17cacc08.723fb67e.js b/assets/js/17cacc08.723fb67e.js new file mode 100644 index 00000000000..4475fa61aad --- /dev/null +++ b/assets/js/17cacc08.723fb67e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88893],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,k=d["".concat(s,".").concat(u)]||d[u]||m[u]||i;return n?a.createElement(k,r(r({ref:t},c),{},{components:n})):a.createElement(k,r({ref:t},c))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;p{n.d(t,{Z:()=>r});var a=n(27378),o=n(37140);const i="tabItem_wHwb";function r(e){let{children:t,hidden:n,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i,r),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(25773),o=n(27378),i=n(37140),r=n(83457),l=n(35595),s=n(76457);const p="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:p}=e;const m=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=m.indexOf(t),a=p[n].value;a!==l&&(d(t),s(a))},k=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=m.indexOf(e.currentTarget)+1;t=m[n]??m[0];break}case"ArrowLeft":{const n=m.indexOf(e.currentTarget)-1;t=m[n]??m[m.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:r}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>m.push(e),onKeyDown:k,onClick:u},r,{className:(0,i.Z)("tabs__item",c,r?.className,{"tabs__item--active":l===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function u(e){const t=(0,l.Y)(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",p)},o.createElement(m,(0,a.Z)({},e,t)),o.createElement(d,(0,a.Z)({},e,t)))}function k(e){const t=(0,s.Z)();return o.createElement(u,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),o=n(35331),i=n(30654),r=n(70784),l=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,r.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(l),(0,a.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(r.location.search);t.set(l,e),r.replace({...r.location,search:t.toString()})}),[l,r])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=p(e),[r,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[d,u]=m({queryString:n,groupId:o}),[k,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,l.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),g=(()=>{const e=d??k;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}},32189:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378),o=n(83469),i=n(31792);function r(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(i.Z,{icon:o.dT$}))}},9785:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(9619);function i(e){let{text:t="Required"}=e;return a.createElement(o.Z,{text:t,variant:"failure",className:"ml-2"})}},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(9619);function i(e){let{header:t,inline:n,updated:i,version:r}=e;return a.createElement(o.Z,{text:`v${r}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(40624),i=n(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?r[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),l)}},28137:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>p,default:()=>k,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=n(25773),o=(n(27378),n(35318)),i=(n(33337),n(39798),n(32189)),r=n(9785),l=n(79022);const s={title:".moon/workspace.yml",toc_max_heading_level:6},p=void 0,c={unversionedId:"config/workspace",id:"config/workspace",title:".moon/workspace.yml",description:"The .moon/workspace.yml file configures projects and services in the workspace. This file is",source:"@site/docs/config/workspace.mdx",sourceDirName:"config",slug:"/config/workspace",permalink:"/docs/config/workspace",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/workspace.mdx",tags:[],version:"current",frontMatter:{title:".moon/workspace.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:"Config files",permalink:"/docs/config"},next:{title:".moon/toolchain.yml",permalink:"/docs/config/toolchain"}},m={},d=[{value:"extends",id:"extends",level:2},{value:"projects",id:"projects",level:2},{value:"Using a map",id:"using-a-map",level:3},{value:"Using globs",id:"using-globs",level:3},{value:"Using a map and globs",id:"using-a-map-and-globs",level:3},{value:'codeowners',id:"codeowners",level:2},{value:"globalPaths",id:"globalpaths",level:3},{value:"orderBy",id:"orderby",level:3},{value:"syncOnRun",id:"synconrun",level:3},{value:"constraints",id:"constraints",level:2},{value:"enforceProjectTypeRelationships",id:"enforceprojecttyperelationships",level:3},{value:"tagRelationships",id:"tagrelationships",level:3},{value:'experiments',id:"experiments",level:2},{value:"taskOutputBoundaries",id:"taskoutputboundaries",level:3},{value:"generator",id:"generator",level:2},{value:"templates",id:"templates",level:3},{value:"hasher",id:"hasher",level:2},{value:"batchSize",id:"batchsize",level:3},{value:'ignoreMissingPatterns',id:"ignoremissingpatterns",level:3},{value:'ignorePatterns',id:"ignorepatterns",level:3},{value:"optimization",id:"optimization",level:3},{value:"walkStrategy",id:"walkstrategy",level:3},{value:"warnOnMissingInputs",id:"warnonmissinginputs",level:3},{value:"notifier",id:"notifier",level:2},{value:"webhookUrl",id:"webhookurl",level:3},{value:"runner",id:"runner",level:2},{value:"cacheLifetime",id:"cachelifetime",level:3},{value:"archivableTargets",id:"archivabletargets",level:3},{value:"inheritColorsForPipedTasks",id:"inheritcolorsforpipedtasks",level:3},{value:"logRunningCommand",id:"logrunningcommand",level:3},{value:"telemetry",id:"telemetry",level:2},{value:"vcs",id:"vcs",level:2},{value:"defaultBranch",id:"defaultbranch",level:3},{value:'hooks',id:"hooks",level:3},{value:"manager",id:"manager",level:3},{value:'provider',id:"provider",level:3},{value:"remoteCandidates",id:"remotecandidates",level:3},{value:'syncHooks',id:"synchooks",level:3},{value:"versionConstraint",id:"versionconstraint",level:2}],u={toc:d};function k(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," file configures projects and services in the workspace. This file is\n",(0,o.kt)("em",{parentName:"p"},"required"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"$schema: 'https://moonrepo.dev/schemas/workspace.json'\n")),(0,o.kt)("h2",{id:"extends"},(0,o.kt)("inlineCode",{parentName:"h2"},"extends")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#extends",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines an external ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," to extend and inherit settings from. Perfect for\nreusability and sharing configuration across repositories and projects. When defined, this setting\nmust be an HTTPS URL ",(0,o.kt)("em",{parentName:"p"},"or")," relative file system path that points to a valid YAML document!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {1}',title:'".moon/workspace.yml"',"{1}":!0},"extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/workspace.yml'\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Settings will be merged recursively for blocks, with values defined in the local configuration\ntaking precedence over those defined in the extended configuration. However, the ",(0,o.kt)("inlineCode",{parentName:"p"},"projects")," setting\n",(0,o.kt)("em",{parentName:"p"},"does not merge"),"!")),(0,o.kt)("h2",{id:"projects"},(0,o.kt)("inlineCode",{parentName:"h2"},"projects"),(0,o.kt)(r.Z,{mdxType:"RequiredLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#projects",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the location of all ",(0,o.kt)("a",{parentName:"p",href:"../concepts/project"},"projects")," within the workspace. Supports either a\nmanual map of projects (default), a list of globs in which to automatically locate projects, ",(0,o.kt)("em",{parentName:"p"},"or"),"\nboth."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Projects that depend on each other and form a cycle must be avoided! While we do our best to avoid\nan infinite loop and disconnect nodes from each other, there's no guarantee that tasks will run in\nthe correct order.")),(0,o.kt)("h3",{id:"using-a-map"},"Using a map"),(0,o.kt)("p",null,"When using a map, each project must be ",(0,o.kt)("em",{parentName:"p"},"manually")," configured and requires a unique\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/project#names"},"name")," as the map key, where this name is used heavily on the command\nline and within the project graph for uniquely identifying the project amongst all projects. The map\nvalue (known as the project source) is a file system path to the project folder, relative from the\nworkspace root, and must be contained within the workspace boundary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n admin: 'apps/admin'\n apiClients: 'packages/api-clients'\n designSystem: 'packages/design-system'\n web: 'apps/web'\n")),(0,o.kt)("h3",{id:"using-globs"},"Using globs"),(0,o.kt)("p",null,"If manually mapping projects is too tedious or cumbersome, you may provide a list of\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/file-pattern#globs"},"globs")," to automatically locate all project folders, relative from\nthe workspace root."),(0,o.kt)("p",null,"When using this approach, the project name is derived from the project folder name, and is cleaned\nto our ",(0,o.kt)("a",{parentName:"p",href:"../concepts/project#names"},"supported characters")," . Furthermore, globbing ",(0,o.kt)("strong",{parentName:"p"},"does risk the\nchance of collision"),", and when that happens, we log a warning and skip the conflicting project from\nbeing configured in the project graph."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n - 'apps/*'\n - 'packages/*'\n")),(0,o.kt)("h3",{id:"using-a-map-and-globs"},"Using a map ",(0,o.kt)("em",{parentName:"h3"},"and")," globs"),(0,o.kt)("p",null,"For those situations where you want to use ",(0,o.kt)("em",{parentName:"p"},"both")," patterns, you can! The list of globs can be\ndefined under a ",(0,o.kt)("inlineCode",{parentName:"p"},"globs")," field, while the map of projects under a ",(0,o.kt)("inlineCode",{parentName:"p"},"sources")," field."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n globs:\n - 'apps/*'\n - 'packages/*'\n sources:\n www: 'www'\n")),(0,o.kt)("h2",{id:"codeowners"},(0,o.kt)("inlineCode",{parentName:"h2"},"codeowners"),(0,o.kt)(l.Z,{version:"1.8.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#codeowners",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures code owners (",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS"),") integration across the entire workspace."),(0,o.kt)("h3",{id:"globalpaths"},(0,o.kt)("inlineCode",{parentName:"h3"},"globalPaths")),(0,o.kt)(i.Z,{to:"/api/types/interface/CodeownersConfig#globalPaths",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"This setting defines file patterns and their owners at the workspace-level, and are applied to any\nmatching path, at any depth, within the entire workspace. This is useful for defining global or\nfallback owners when a granular ",(0,o.kt)("a",{parentName:"p",href:"./project#paths"},"project-level path")," does not match or exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-5}',title:'".moon/workspace.yml"',"{2-5}":!0},"codeowners:\n globalPaths:\n '*': ['@admins']\n 'config/': ['@infra']\n '/.github/': ['@infra']\n")),(0,o.kt)("h3",{id:"orderby"},(0,o.kt)("inlineCode",{parentName:"h3"},"orderBy")),(0,o.kt)(i.Z,{to:"/api/types/interface/CodeownersConfig#orderBy",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"The order in which code owners, grouped by project, are listed in the ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS"),' file. Accepts\n"file-source" (default) or "project-name".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"codeowners:\n orderBy: 'project-name'\n")),(0,o.kt)("h3",{id:"synconrun"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncOnRun")),(0,o.kt)(i.Z,{to:"/api/types/interface/CodeownersConfig#syncOnRun",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will automatically generate a ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file by aggregating and syncing all project\n",(0,o.kt)("a",{parentName:"p",href:"./project#owners"},(0,o.kt)("inlineCode",{parentName:"a"},"owners"))," in the workspace when a ",(0,o.kt)("a",{parentName:"p",href:"../concepts/target"},"target is run"),". The format\nand location of the ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file is based on the ",(0,o.kt)("a",{parentName:"p",href:"#provider"},(0,o.kt)("inlineCode",{parentName:"a"},"vcs.provider"))," setting. Defaults\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"codeowners:\n syncOnRun: true\n")),(0,o.kt)("h2",{id:"constraints"},(0,o.kt)("inlineCode",{parentName:"h2"},"constraints")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#constraints",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures constraints between projects that are enforced during project graph generation. This is\nalso known as project boundaries."),(0,o.kt)("h3",{id:"enforceprojecttyperelationships"},(0,o.kt)("inlineCode",{parentName:"h3"},"enforceProjectTypeRelationships")),(0,o.kt)(i.Z,{to:"/api/types/interface/ConstraintsConfig#enforceProjectTypeRelationships",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enforces allowed relationships between a project its dependencies based on the project's\n",(0,o.kt)("a",{parentName:"p",href:"./project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," setting. When a project depends on another project of an invalid type, an\nerror will be thrown when attempting to run a task. The following relationships are enforced when\nthis setting is enabled, which defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Applications can ",(0,o.kt)("em",{parentName:"li"},"only")," depend on libraries or tools."),(0,o.kt)("li",{parentName:"ul"},"Libraries can ",(0,o.kt)("em",{parentName:"li"},"only")," depend on other libraries."),(0,o.kt)("li",{parentName:"ul"},"Tools can ",(0,o.kt)("em",{parentName:"li"},"only")," depend on libraries.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"constraints:\n enforceProjectTypeRelationships: false\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Projects with an unconfigured or unknown type are ignored during enforcement.")),(0,o.kt)("h3",{id:"tagrelationships"},(0,o.kt)("inlineCode",{parentName:"h3"},"tagRelationships")),(0,o.kt)(i.Z,{to:"/api/types/interface/ConstraintsConfig#tagRelationships",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enforces allowed relationships between a project and its dependencies based on the project's\n",(0,o.kt)("a",{parentName:"p",href:"./project#tags"},(0,o.kt)("inlineCode",{parentName:"a"},"tags"))," setting. This works in a similar fashion to\n",(0,o.kt)("inlineCode",{parentName:"p"},"enforceProjectTypeRelationships"),", but gives you far more control over what these relationships look\nlike."),(0,o.kt)("p",null,"For example, let's enforce that Next.js projects using the ",(0,o.kt)("inlineCode",{parentName:"p"},"next")," tag can only depend on React\nprojects using the ",(0,o.kt)("inlineCode",{parentName:"p"},"react")," tag. If a dependency does not have one of the configured required tags,\nin this case ",(0,o.kt)("inlineCode",{parentName:"p"},"react"),", an error will occur."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2,3}',title:'".moon/workspace.yml"',"{2,3}":!0},"constraints:\n tagRelationships:\n next: ['react']\n")),(0,o.kt)("p",null,"On the project side, we would configure ",(0,o.kt)("a",{parentName:"p",href:"./project#tags"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," like so:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="app/moon.yml"',title:'"app/moon.yml"'},"tags: ['next']\ndependsOn: ['components']\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="packages/components/moon.yml"',title:'"packages/components/moon.yml"'},"tags: ['react']\n")),(0,o.kt)("h2",{id:"experiments"},(0,o.kt)("inlineCode",{parentName:"h2"},"experiments"),(0,o.kt)(l.Z,{version:"1.11.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#experiments",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enable or disable experiments that alter core functionality."),(0,o.kt)("h3",{id:"taskoutputboundaries"},(0,o.kt)("inlineCode",{parentName:"h3"},"taskOutputBoundaries")),(0,o.kt)(i.Z,{to:"/api/types/interface/ExperimentsConfig#taskOutputBoundaries",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enforces strict boundaries for task outputs and will error when multiple tasks write to the same\noutput location. This includes output globs that overlap with literal output file paths. Defaults to\n",(0,o.kt)("inlineCode",{parentName:"p"},"true"),", and will be fully enabled by default in a future release."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"experiments:\n taskOutputBoundaries: false\n")),(0,o.kt)("h2",{id:"generator"},(0,o.kt)("inlineCode",{parentName:"h2"},"generator")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#generator",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures aspects of the template generator."),(0,o.kt)("h3",{id:"templates"},(0,o.kt)("inlineCode",{parentName:"h3"},"templates")),(0,o.kt)(i.Z,{to:"/api/types/interface/GeneratorConfig#templates",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of file system paths where templates can be located, relative from the workspace root.\nDefaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"./templates"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"generator:\n templates:\n - './templates'\n - './other/templates'\n")),(0,o.kt)("h2",{id:"hasher"},(0,o.kt)("inlineCode",{parentName:"h2"},"hasher")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#hasher",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures aspects of the smart hashing layer."),(0,o.kt)("h3",{id:"batchsize"},(0,o.kt)("inlineCode",{parentName:"h3"},"batchSize")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#batchSize",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When hashing a list of files, we split the list into batches to help reduce memory footprint and\navoid overloading the configured VCS. This setting controls how many files are in each batch and\ndefaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"2500"),"."),(0,o.kt)("p",null,"If you're running into memory issues, or moon hanging during the file hashing process, lowering this\nnumber may help resolve the issue."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n batchSize: 1000\n")),(0,o.kt)("h3",{id:"ignoremissingpatterns"},(0,o.kt)("inlineCode",{parentName:"h3"},"ignoreMissingPatterns"),(0,o.kt)(l.Z,{version:"1.10.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#ignoreMissingPatterns",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When ",(0,o.kt)("a",{parentName:"p",href:"#warnonmissinginputs"},(0,o.kt)("inlineCode",{parentName:"a"},"hasher.warnOnMissingInputs"))," is enabled, moon will log a warning to the\nterminal that an input is missing. This is useful for uncovering misconfigurations, but can be quite\nnoisy when inputs are truly optional."),(0,o.kt)("p",null,"To ignore warnings for missing inputs, a list of ",(0,o.kt)("a",{parentName:"p",href:"../concepts/file-pattern#globs"},"glob patterns")," can\nbe configured to filter and ignore files. Files are matched against workspace relative paths, so\nprefixing patterns with ",(0,o.kt)("inlineCode",{parentName:"p"},"**/")," is suggested."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"hasher:\n ignoreMissingPatterns:\n - '**/.eslintrc.*'\n - '**/*.config.*'\n")),(0,o.kt)("h3",{id:"ignorepatterns"},(0,o.kt)("inlineCode",{parentName:"h3"},"ignorePatterns"),(0,o.kt)(l.Z,{version:"1.10.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#ignorePatterns",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of ",(0,o.kt)("a",{parentName:"p",href:"../concepts/file-pattern#globs"},"glob patterns")," used to filter and ignore files during the\ninputs hashing process. Files are matched against workspace relative paths, so prefixing patterns\nwith ",(0,o.kt)("inlineCode",{parentName:"p"},"**/")," is suggested."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2,3}',title:'".moon/workspace.yml"',"{2,3}":!0},"hasher:\n ignorePatterns:\n - '**/*.png'\n")),(0,o.kt)("h3",{id:"optimization"},(0,o.kt)("inlineCode",{parentName:"h3"},"optimization")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#optimization",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Determines the optimization level to utilize when hashing content before running targets."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"accuracy")," (default) - When hashing dependency versions, utilize the resolved value in the\nlockfile. This requires parsing the lockfile, which may reduce performance."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"performance")," - When hashing dependency versions, utilize the value defined in the manifest. This\nis typically a version range or requirement.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n optimization: 'performance'\n")),(0,o.kt)("h3",{id:"walkstrategy"},(0,o.kt)("inlineCode",{parentName:"h3"},"walkStrategy")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#walkStrategy",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file system walking strategy to utilize when discovering inputs to hash."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"glob")," - Walks the file system using glob patterns."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"vcs")," (default) - Calls out to the ",(0,o.kt)("a",{parentName:"li",href:"#vcs"},"VCS")," to extract files from its working tree.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n walkStrategy: 'glob'\n")),(0,o.kt)("h3",{id:"warnonmissinginputs"},(0,o.kt)("inlineCode",{parentName:"h3"},"warnOnMissingInputs")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#warnOnMissingInputs",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When enabled, will log warnings to the console when attempting to hash an input that does not exist.\nThis is useful in uncovering misconfigured tasks. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n warnOnMissingInputs: false\n")),(0,o.kt)("h2",{id:"notifier"},(0,o.kt)("inlineCode",{parentName:"h2"},"notifier")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#notifier",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures how moon notifies and interacts with a developer or an external system."),(0,o.kt)("h3",{id:"webhookurl"},(0,o.kt)("inlineCode",{parentName:"h3"},"webhookUrl")),(0,o.kt)(i.Z,{to:"/api/types/interface/NotifierConfig#webhookUrl",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines an HTTPS URL that all pipeline events will be posted to. View the\n",(0,o.kt)("a",{parentName:"p",href:"../guides/webhooks"},"webhooks guide for more information")," on available events."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"notifier:\n webhookUrl: 'https://api.company.com/some/endpoint'\n")),(0,o.kt)("h2",{id:"runner"},(0,o.kt)("inlineCode",{parentName:"h2"},"runner")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#runner",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures aspects of the action pipeline."),(0,o.kt)("h3",{id:"cachelifetime"},(0,o.kt)("inlineCode",{parentName:"h3"},"cacheLifetime")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#cacheLifetime",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'The maximum lifetime of cached artifacts before they\'re marked as stale and automatically removed by\nthe action pipeline. Defaults to "7 days". This field requires an integer and a timeframe unit that\ncan be ',(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/humantime/2.1.0/humantime/fn.parse_duration.html"},"parsed as a duration"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"runner:\n cacheLifetime: '24 hours'\n")),(0,o.kt)("h3",{id:"archivabletargets"},(0,o.kt)("inlineCode",{parentName:"h3"},"archivableTargets")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#archivableTargets",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines a list of ",(0,o.kt)("a",{parentName:"p",href:"../concepts/target"},"targets"),", with or without scope, that will be cached and\narchived within the runner. Tasks that produce ",(0,o.kt)("a",{parentName:"p",href:"./project#outputs"},"outputs")," are automatically\narchived, and do not need to be defined here. Defaults to an empty list."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"runner:\n archivableTargets:\n - ':test'\n - 'app:typecheck'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting primarily exists for ",(0,o.kt)("a",{parentName:"p",href:"../guides/remote-cache"},"remote caching")," as it will create and\npersist tar archives located in ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/cache/outputs"),".")),(0,o.kt)("h3",{id:"inheritcolorsforpipedtasks"},(0,o.kt)("inlineCode",{parentName:"h3"},"inheritColorsForPipedTasks")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#inheritColorsForPipedTasks",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Force colors to be inherited from the current terminal for all tasks that are ran as a child process\nand their output is piped to the action pipeline. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),".\n",(0,o.kt)("a",{parentName:"p",href:"../commands/overview#colors"},"View more about color handling in moon"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"runner:\n inheritColorsForPipedTasks: true\n")),(0,o.kt)("h3",{id:"logrunningcommand"},(0,o.kt)("inlineCode",{parentName:"h3"},"logRunningCommand")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#logRunningCommand",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When enabled, will log the task's command, resolved arguments, and working directory when a target\nis ran. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"runner:\n logRunningCommand: true\n")),(0,o.kt)("h2",{id:"telemetry"},(0,o.kt)("inlineCode",{parentName:"h2"},"telemetry")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#telemetry",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When enabled, will check for a newer moon version and send anonymous usage data to the moonrepo\nteam. This data is used to improve the quality and reliability of the tool. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {1}',title:'".moon/workspace.yml"',"{1}":!0},"telemetry: false\n")),(0,o.kt)("h2",{id:"vcs"},(0,o.kt)("inlineCode",{parentName:"h2"},"vcs")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#vcs",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures the version control system to utilize within the workspace (and repository). A VCS is\nrequired for determining touched (added, modified, etc) files, calculating file hashes, computing\naffected files, and much more."),(0,o.kt)("h3",{id:"defaultbranch"},(0,o.kt)("inlineCode",{parentName:"h3"},"defaultBranch")),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#defaultBranch",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'Defines the default branch in the repository for comparing differences against. For git, this is\ntypically "master" (default) or "main".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"vcs:\n defaultBranch: 'master'\n")),(0,o.kt)("h3",{id:"hooks"},(0,o.kt)("inlineCode",{parentName:"h3"},"hooks"),(0,o.kt)(l.Z,{version:"1.9.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#hooks",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines a mapping of hooks to a list of commands to run when that event is triggered. There are no\nrestrictions to what commands can be run, but the binaries for each command must exist on each\nmachine that will be running hooks."),(0,o.kt)("p",null,"For Git, each ",(0,o.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/githooks#_hooks"},"hook name")," must be a valid kebab-cased\nname. ",(0,o.kt)("a",{parentName:"p",href:"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks"},"Learn more about Git hooks"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-5}',title:'".moon/workspace.yml"',"{2-5}":!0},"vcs:\n hooks:\n pre-commit:\n - 'moon run :lint :format --affected --status=staged'\n - 'another-command'\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If running ",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," commands directly, the ",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," binary must be installed globally!")),(0,o.kt)("h3",{id:"manager"},(0,o.kt)("inlineCode",{parentName:"h3"},"manager")),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#manager",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'Defines the VCS tool/binary that is being used for managing the repository. Accepts "git" (default).\nExpect more version control systems in the future!'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"vcs:\n manager: 'git'\n")),(0,o.kt)("h3",{id:"provider"},(0,o.kt)("inlineCode",{parentName:"h3"},"provider"),(0,o.kt)(l.Z,{version:"1.8.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#provider",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'Defines the service provider that the repository is hosted on. Accepts "github" (default), "gitlab",\n"bitbucket", or "other".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"vcs:\n provider: 'github'\n")),(0,o.kt)("h3",{id:"remotecandidates"},(0,o.kt)("inlineCode",{parentName:"h3"},"remoteCandidates")),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#remoteCandidates",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'(Git only) Defines a list of remote candidates to query agaist to determine merge bases. Defaults to\n"origin" and "upstream".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"vcs:\n remoteCandidates:\n - 'origin'\n - 'upstream'\n")),(0,o.kt)("h3",{id:"synchooks"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncHooks"),(0,o.kt)(l.Z,{version:"1.9.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#syncHooks",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will automatically generate ",(0,o.kt)("a",{parentName:"p",href:"#hooks"},"hook scripts")," to ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/hooks")," and sync the scripts to the\nlocal VCS checkout. The hooks format and location is based on the ",(0,o.kt)("a",{parentName:"p",href:"#manager"},(0,o.kt)("inlineCode",{parentName:"a"},"vcs.manager"))," setting.\nDefaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {4}',title:'".moon/workspace.yml"',"{4}":!0},"vcs:\n hooks:\n # ...\n syncHooks: true\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"When enabled, this will sync hooks for ",(0,o.kt)("em",{parentName:"p"},"all")," users of the repository. For personal or small\nprojects, this may be fine, but for larger projects, this may be undesirable and disruptive!")),(0,o.kt)("h2",{id:"versionconstraint"},(0,o.kt)("inlineCode",{parentName:"h2"},"versionConstraint")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#versionConstraint",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines a version requirement for the currently running moon binary. This provides a mechanism for\nenforcing that the globally installed moon on every developers machine is using an applicable\nversion."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {1}',title:'".moon/workspace.yml"',"{1}":!0},"versionConstraint: '>=0.20.0'\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/17cacc08.e0e6fa7a.js b/assets/js/17cacc08.e0e6fa7a.js deleted file mode 100644 index 1d842fde3bc..00000000000 --- a/assets/js/17cacc08.e0e6fa7a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8893],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,k=d["".concat(s,".").concat(u)]||d[u]||m[u]||i;return n?a.createElement(k,r(r({ref:t},c),{},{components:n})):a.createElement(k,r({ref:t},c))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;p{n.d(t,{Z:()=>r});var a=n(27378),o=n(37140);const i="tabItem_wHwb";function r(e){let{children:t,hidden:n,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i,r),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(25773),o=n(27378),i=n(37140),r=n(83457),l=n(35595),s=n(76457);const p="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:p}=e;const m=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=m.indexOf(t),a=p[n].value;a!==l&&(d(t),s(a))},k=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=m.indexOf(e.currentTarget)+1;t=m[n]??m[0];break}case"ArrowLeft":{const n=m.indexOf(e.currentTarget)-1;t=m[n]??m[m.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:r}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>m.push(e),onKeyDown:k,onClick:u},r,{className:(0,i.Z)("tabs__item",c,r?.className,{"tabs__item--active":l===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function u(e){const t=(0,l.Y)(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",p)},o.createElement(m,(0,a.Z)({},e,t)),o.createElement(d,(0,a.Z)({},e,t)))}function k(e){const t=(0,s.Z)();return o.createElement(u,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),o=n(35331),i=n(30654),r=n(70784),l=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,r.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(l),(0,a.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(r.location.search);t.set(l,e),r.replace({...r.location,search:t.toString()})}),[l,r])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=p(e),[r,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[d,u]=m({queryString:n,groupId:o}),[k,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,l.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),g=(()=>{const e=d??k;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}},32189:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378),o=n(83469),i=n(31792);function r(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(i.Z,{icon:o.dT$}))}},9785:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(9619);function i(e){let{text:t="Required"}=e;return a.createElement(o.Z,{text:t,variant:"failure",className:"ml-2"})}},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(9619);function i(e){let{header:t,inline:n,updated:i,version:r}=e;return a.createElement(o.Z,{text:`v${r}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(40624),i=n(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?r[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),l)}},28137:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>p,default:()=>k,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=n(25773),o=(n(27378),n(35318)),i=(n(33337),n(39798),n(32189)),r=n(9785),l=n(79022);const s={title:".moon/workspace.yml",toc_max_heading_level:6},p=void 0,c={unversionedId:"config/workspace",id:"config/workspace",title:".moon/workspace.yml",description:"The .moon/workspace.yml file configures projects and services in the workspace. This file is",source:"@site/docs/config/workspace.mdx",sourceDirName:"config",slug:"/config/workspace",permalink:"/docs/config/workspace",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/workspace.mdx",tags:[],version:"current",frontMatter:{title:".moon/workspace.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:"Config files",permalink:"/docs/config"},next:{title:".moon/toolchain.yml",permalink:"/docs/config/toolchain"}},m={},d=[{value:"extends",id:"extends",level:2},{value:"projects",id:"projects",level:2},{value:"Using a map",id:"using-a-map",level:3},{value:"Using globs",id:"using-globs",level:3},{value:"Using a map and globs",id:"using-a-map-and-globs",level:3},{value:'codeowners',id:"codeowners",level:2},{value:"globalPaths",id:"globalpaths",level:3},{value:"orderBy",id:"orderby",level:3},{value:"syncOnRun",id:"synconrun",level:3},{value:"constraints",id:"constraints",level:2},{value:"enforceProjectTypeRelationships",id:"enforceprojecttyperelationships",level:3},{value:"tagRelationships",id:"tagrelationships",level:3},{value:'experiments',id:"experiments",level:2},{value:"taskOutputBoundaries",id:"taskoutputboundaries",level:3},{value:"generator",id:"generator",level:2},{value:"templates",id:"templates",level:3},{value:"hasher",id:"hasher",level:2},{value:"batchSize",id:"batchsize",level:3},{value:'ignoreMissingPatterns',id:"ignoremissingpatterns",level:3},{value:'ignorePatterns',id:"ignorepatterns",level:3},{value:"optimization",id:"optimization",level:3},{value:"walkStrategy",id:"walkstrategy",level:3},{value:"warnOnMissingInputs",id:"warnonmissinginputs",level:3},{value:"notifier",id:"notifier",level:2},{value:"webhookUrl",id:"webhookurl",level:3},{value:"runner",id:"runner",level:2},{value:"cacheLifetime",id:"cachelifetime",level:3},{value:"archivableTargets",id:"archivabletargets",level:3},{value:"inheritColorsForPipedTasks",id:"inheritcolorsforpipedtasks",level:3},{value:"logRunningCommand",id:"logrunningcommand",level:3},{value:"telemetry",id:"telemetry",level:2},{value:"vcs",id:"vcs",level:2},{value:"defaultBranch",id:"defaultbranch",level:3},{value:'hooks',id:"hooks",level:3},{value:"manager",id:"manager",level:3},{value:'provider',id:"provider",level:3},{value:"remoteCandidates",id:"remotecandidates",level:3},{value:'syncHooks',id:"synchooks",level:3},{value:"versionConstraint",id:"versionconstraint",level:2}],u={toc:d};function k(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," file configures projects and services in the workspace. This file is\n",(0,o.kt)("em",{parentName:"p"},"required"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"$schema: 'https://moonrepo.dev/schemas/workspace.json'\n")),(0,o.kt)("h2",{id:"extends"},(0,o.kt)("inlineCode",{parentName:"h2"},"extends")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#extends",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines an external ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," to extend and inherit settings from. Perfect for\nreusability and sharing configuration across repositories and projects. When defined, this setting\nmust be an HTTPS URL ",(0,o.kt)("em",{parentName:"p"},"or")," relative file system path that points to a valid YAML document!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {1}',title:'".moon/workspace.yml"',"{1}":!0},"extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/workspace.yml'\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Settings will be merged recursively for blocks, with values defined in the local configuration\ntaking precedence over those defined in the extended configuration. However, the ",(0,o.kt)("inlineCode",{parentName:"p"},"projects")," setting\n",(0,o.kt)("em",{parentName:"p"},"does not merge"),"!")),(0,o.kt)("h2",{id:"projects"},(0,o.kt)("inlineCode",{parentName:"h2"},"projects"),(0,o.kt)(r.Z,{mdxType:"RequiredLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#projects",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the location of all ",(0,o.kt)("a",{parentName:"p",href:"../concepts/project"},"projects")," within the workspace. Supports either a\nmanual map of projects (default), a list of globs in which to automatically locate projects, ",(0,o.kt)("em",{parentName:"p"},"or"),"\nboth."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Projects that depend on each other and form a cycle must be avoided! While we do our best to avoid\nan infinite loop and disconnect nodes from each other, there's no guarantee that tasks will run in\nthe correct order.")),(0,o.kt)("h3",{id:"using-a-map"},"Using a map"),(0,o.kt)("p",null,"When using a map, each project must be ",(0,o.kt)("em",{parentName:"p"},"manually")," configured and requires a unique\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/project#names"},"name")," as the map key, where this name is used heavily on the command\nline and within the project graph for uniquely identifying the project amongst all projects. The map\nvalue (known as the project source) is a file system path to the project folder, relative from the\nworkspace root, and must be contained within the workspace boundary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n admin: 'apps/admin'\n apiClients: 'packages/api-clients'\n designSystem: 'packages/design-system'\n web: 'apps/web'\n")),(0,o.kt)("h3",{id:"using-globs"},"Using globs"),(0,o.kt)("p",null,"If manually mapping projects is too tedious or cumbersome, you may provide a list of\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/file-pattern#globs"},"globs")," to automatically locate all project folders, relative from\nthe workspace root."),(0,o.kt)("p",null,"When using this approach, the project name is derived from the project folder name, and is cleaned\nto our ",(0,o.kt)("a",{parentName:"p",href:"../concepts/project#names"},"supported characters")," . Furthermore, globbing ",(0,o.kt)("strong",{parentName:"p"},"does risk the\nchance of collision"),", and when that happens, we log a warning and skip the conflicting project from\nbeing configured in the project graph."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n - 'apps/*'\n - 'packages/*'\n")),(0,o.kt)("h3",{id:"using-a-map-and-globs"},"Using a map ",(0,o.kt)("em",{parentName:"h3"},"and")," globs"),(0,o.kt)("p",null,"For those situations where you want to use ",(0,o.kt)("em",{parentName:"p"},"both")," patterns, you can! The list of globs can be\ndefined under a ",(0,o.kt)("inlineCode",{parentName:"p"},"globs")," field, while the map of projects under a ",(0,o.kt)("inlineCode",{parentName:"p"},"sources")," field."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n globs:\n - 'apps/*'\n - 'packages/*'\n sources:\n www: 'www'\n")),(0,o.kt)("h2",{id:"codeowners"},(0,o.kt)("inlineCode",{parentName:"h2"},"codeowners"),(0,o.kt)(l.Z,{version:"1.8.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#codeowners",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures code owners (",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS"),") integration across the entire workspace."),(0,o.kt)("h3",{id:"globalpaths"},(0,o.kt)("inlineCode",{parentName:"h3"},"globalPaths")),(0,o.kt)(i.Z,{to:"/api/types/interface/CodeownersConfig#globalPaths",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"This setting defines file patterns and their owners at the workspace-level, and are applied to any\nmatching path, at any depth, within the entire workspace. This is useful for defining global or\nfallback owners when a granular ",(0,o.kt)("a",{parentName:"p",href:"./project#paths"},"project-level path")," does not match or exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-5}',title:'".moon/workspace.yml"',"{2-5}":!0},"codeowners:\n globalPaths:\n '*': ['@admins']\n 'config/': ['@infra']\n '/.github/': ['@infra']\n")),(0,o.kt)("h3",{id:"orderby"},(0,o.kt)("inlineCode",{parentName:"h3"},"orderBy")),(0,o.kt)(i.Z,{to:"/api/types/interface/CodeownersConfig#orderBy",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"The order in which code owners, grouped by project, are listed in the ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS"),' file. Accepts\n"file-source" (default) or "project-name".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"codeowners:\n orderBy: 'project-name'\n")),(0,o.kt)("h3",{id:"synconrun"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncOnRun")),(0,o.kt)(i.Z,{to:"/api/types/interface/CodeownersConfig#syncOnRun",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will automatically generate a ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file by aggregating and syncing all project\n",(0,o.kt)("a",{parentName:"p",href:"./project#owners"},(0,o.kt)("inlineCode",{parentName:"a"},"owners"))," in the workspace when a ",(0,o.kt)("a",{parentName:"p",href:"../concepts/target"},"target is run"),". The format\nand location of the ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file is based on the ",(0,o.kt)("a",{parentName:"p",href:"#provider"},(0,o.kt)("inlineCode",{parentName:"a"},"vcs.provider"))," setting. Defaults\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"codeowners:\n syncOnRun: true\n")),(0,o.kt)("h2",{id:"constraints"},(0,o.kt)("inlineCode",{parentName:"h2"},"constraints")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#constraints",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures constraints between projects that are enforced during project graph generation. This is\nalso known as project boundaries."),(0,o.kt)("h3",{id:"enforceprojecttyperelationships"},(0,o.kt)("inlineCode",{parentName:"h3"},"enforceProjectTypeRelationships")),(0,o.kt)(i.Z,{to:"/api/types/interface/ConstraintsConfig#enforceProjectTypeRelationships",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enforces allowed relationships between a project its dependencies based on the project's\n",(0,o.kt)("a",{parentName:"p",href:"./project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," setting. When a project depends on another project of an invalid type, an\nerror will be thrown when attempting to run a task. The following relationships are enforced when\nthis setting is enabled, which defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Applications can ",(0,o.kt)("em",{parentName:"li"},"only")," depend on libraries or tools."),(0,o.kt)("li",{parentName:"ul"},"Libraries can ",(0,o.kt)("em",{parentName:"li"},"only")," depend on other libraries."),(0,o.kt)("li",{parentName:"ul"},"Tools can ",(0,o.kt)("em",{parentName:"li"},"only")," depend on libraries.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"constraints:\n enforceProjectTypeRelationships: false\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Projects with an unconfigured or unknown type are ignored during enforcement.")),(0,o.kt)("h3",{id:"tagrelationships"},(0,o.kt)("inlineCode",{parentName:"h3"},"tagRelationships")),(0,o.kt)(i.Z,{to:"/api/types/interface/ConstraintsConfig#tagRelationships",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enforces allowed relationships between a project and its dependencies based on the project's\n",(0,o.kt)("a",{parentName:"p",href:"./project#tags"},(0,o.kt)("inlineCode",{parentName:"a"},"tags"))," setting. This works in a similar fashion to\n",(0,o.kt)("inlineCode",{parentName:"p"},"enforceProjectTypeRelationships"),", but gives you far more control over what these relationships look\nlike."),(0,o.kt)("p",null,"For example, let's enforce that Next.js projects using the ",(0,o.kt)("inlineCode",{parentName:"p"},"next")," tag can only depend on React\nprojects using the ",(0,o.kt)("inlineCode",{parentName:"p"},"react")," tag. If a dependency does not have one of the configured required tags,\nin this case ",(0,o.kt)("inlineCode",{parentName:"p"},"react"),", an error will occur."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2,3}',title:'".moon/workspace.yml"',"{2,3}":!0},"constraints:\n tagRelationships:\n next: ['react']\n")),(0,o.kt)("p",null,"On the project side, we would configure ",(0,o.kt)("a",{parentName:"p",href:"./project#tags"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," like so:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="app/moon.yml"',title:'"app/moon.yml"'},"tags: ['next']\ndependsOn: ['components']\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="packages/components/moon.yml"',title:'"packages/components/moon.yml"'},"tags: ['react']\n")),(0,o.kt)("h2",{id:"experiments"},(0,o.kt)("inlineCode",{parentName:"h2"},"experiments"),(0,o.kt)(l.Z,{version:"1.11.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#experiments",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enable or disable experiments that alter core functionality."),(0,o.kt)("h3",{id:"taskoutputboundaries"},(0,o.kt)("inlineCode",{parentName:"h3"},"taskOutputBoundaries")),(0,o.kt)(i.Z,{to:"/api/types/interface/ExperimentsConfig#taskOutputBoundaries",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enforces strict boundaries for task outputs and will error when multiple tasks write to the same\noutput location. This includes output globs that overlap with literal output file paths. Defaults to\n",(0,o.kt)("inlineCode",{parentName:"p"},"true"),", and will be fully enabled by default in a future release."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"experiments:\n taskOutputBoundaries: false\n")),(0,o.kt)("h2",{id:"generator"},(0,o.kt)("inlineCode",{parentName:"h2"},"generator")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#generator",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures aspects of the template generator."),(0,o.kt)("h3",{id:"templates"},(0,o.kt)("inlineCode",{parentName:"h3"},"templates")),(0,o.kt)(i.Z,{to:"/api/types/interface/GeneratorConfig#templates",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of file system paths where templates can be located, relative from the workspace root.\nDefaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"./templates"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"generator:\n templates:\n - './templates'\n - './other/templates'\n")),(0,o.kt)("h2",{id:"hasher"},(0,o.kt)("inlineCode",{parentName:"h2"},"hasher")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#hasher",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures aspects of the smart hashing layer."),(0,o.kt)("h3",{id:"batchsize"},(0,o.kt)("inlineCode",{parentName:"h3"},"batchSize")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#batchSize",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When hashing a list of files, we split the list into batches to help reduce memory footprint and\navoid overloading the configured VCS. This setting controls how many files are in each batch and\ndefaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"2500"),"."),(0,o.kt)("p",null,"If you're running into memory issues, or moon hanging during the file hashing process, lowering this\nnumber may help resolve the issue."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n batchSize: 1000\n")),(0,o.kt)("h3",{id:"ignoremissingpatterns"},(0,o.kt)("inlineCode",{parentName:"h3"},"ignoreMissingPatterns"),(0,o.kt)(l.Z,{version:"1.10.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#ignoreMissingPatterns",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When ",(0,o.kt)("a",{parentName:"p",href:"#warnonmissinginputs"},(0,o.kt)("inlineCode",{parentName:"a"},"hasher.warnOnMissingInputs"))," is enabled, moon will log a warning to the\nterminal that an input is missing. This is useful for uncovering misconfigurations, but can be quite\nnoisy when inputs are truly optional."),(0,o.kt)("p",null,"To ignore warnings for missing inputs, a list of ",(0,o.kt)("a",{parentName:"p",href:"../concepts/file-pattern#globs"},"glob patterns")," can\nbe configured to filter and ignore files. Files are matched against workspace relative paths, so\nprefixing patterns with ",(0,o.kt)("inlineCode",{parentName:"p"},"**/")," is suggested."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"hasher:\n ignoreMissingPatterns:\n - '**/.eslintrc.*'\n - '**/*.config.*'\n")),(0,o.kt)("h3",{id:"ignorepatterns"},(0,o.kt)("inlineCode",{parentName:"h3"},"ignorePatterns"),(0,o.kt)(l.Z,{version:"1.10.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#ignorePatterns",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of ",(0,o.kt)("a",{parentName:"p",href:"../concepts/file-pattern#globs"},"glob patterns")," used to filter and ignore files during the\ninputs hashing process. Files are matched against workspace relative paths, so prefixing patterns\nwith ",(0,o.kt)("inlineCode",{parentName:"p"},"**/")," is suggested."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2,3}',title:'".moon/workspace.yml"',"{2,3}":!0},"hasher:\n ignorePatterns:\n - '**/*.png'\n")),(0,o.kt)("h3",{id:"optimization"},(0,o.kt)("inlineCode",{parentName:"h3"},"optimization")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#optimization",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Determines the optimization level to utilize when hashing content before running targets."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"accuracy")," (default) - When hashing dependency versions, utilize the resolved value in the\nlockfile. This requires parsing the lockfile, which may reduce performance."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"performance")," - When hashing dependency versions, utilize the value defined in the manifest. This\nis typically a version range or requirement.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n optimization: 'performance'\n")),(0,o.kt)("h3",{id:"walkstrategy"},(0,o.kt)("inlineCode",{parentName:"h3"},"walkStrategy")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#walkStrategy",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file system walking strategy to utilize when discovering inputs to hash."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"glob")," - Walks the file system using glob patterns."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"vcs")," (default) - Calls out to the ",(0,o.kt)("a",{parentName:"li",href:"#vcs"},"VCS")," to extract files from its working tree.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n walkStrategy: 'glob'\n")),(0,o.kt)("h3",{id:"warnonmissinginputs"},(0,o.kt)("inlineCode",{parentName:"h3"},"warnOnMissingInputs")),(0,o.kt)(i.Z,{to:"/api/types/interface/HasherConfig#warnOnMissingInputs",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When enabled, will log warnings to the console when attempting to hash an input that does not exist.\nThis is useful in uncovering misconfigured tasks. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"hasher:\n warnOnMissingInputs: false\n")),(0,o.kt)("h2",{id:"notifier"},(0,o.kt)("inlineCode",{parentName:"h2"},"notifier")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#notifier",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures how moon notifies and interacts with a developer or an external system."),(0,o.kt)("h3",{id:"webhookurl"},(0,o.kt)("inlineCode",{parentName:"h3"},"webhookUrl")),(0,o.kt)(i.Z,{to:"/api/types/interface/NotifierConfig#webhookUrl",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines an HTTPS URL that all pipeline events will be posted to. View the\n",(0,o.kt)("a",{parentName:"p",href:"../guides/webhooks"},"webhooks guide for more information")," on available events."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"notifier:\n webhookUrl: 'https://api.company.com/some/endpoint'\n")),(0,o.kt)("h2",{id:"runner"},(0,o.kt)("inlineCode",{parentName:"h2"},"runner")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#runner",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures aspects of the action pipeline."),(0,o.kt)("h3",{id:"cachelifetime"},(0,o.kt)("inlineCode",{parentName:"h3"},"cacheLifetime")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#cacheLifetime",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'The maximum lifetime of cached artifacts before they\'re marked as stale and automatically removed by\nthe action pipeline. Defaults to "7 days". This field requires an integer and a timeframe unit that\ncan be ',(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/humantime/2.1.0/humantime/fn.parse_duration.html"},"parsed as a duration"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"runner:\n cacheLifetime: '24 hours'\n")),(0,o.kt)("h3",{id:"archivabletargets"},(0,o.kt)("inlineCode",{parentName:"h3"},"archivableTargets")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#archivableTargets",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines a list of ",(0,o.kt)("a",{parentName:"p",href:"../concepts/target"},"targets"),", with or without scope, that will be cached and\narchived within the runner. Tasks that produce ",(0,o.kt)("a",{parentName:"p",href:"./project#outputs"},"outputs")," are automatically\narchived, and do not need to be defined here. Defaults to an empty list."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"runner:\n archivableTargets:\n - ':test'\n - 'app:typecheck'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting primarily exists for ",(0,o.kt)("a",{parentName:"p",href:"../guides/remote-cache"},"remote caching")," as it will create and\npersist tar archives located in ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/cache/outputs"),".")),(0,o.kt)("h3",{id:"inheritcolorsforpipedtasks"},(0,o.kt)("inlineCode",{parentName:"h3"},"inheritColorsForPipedTasks")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#inheritColorsForPipedTasks",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Force colors to be inherited from the current terminal for all tasks that are ran as a child process\nand their output is piped to the action pipeline. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),".\n",(0,o.kt)("a",{parentName:"p",href:"../commands/overview#colors"},"View more about color handling in moon"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"runner:\n inheritColorsForPipedTasks: true\n")),(0,o.kt)("h3",{id:"logrunningcommand"},(0,o.kt)("inlineCode",{parentName:"h3"},"logRunningCommand")),(0,o.kt)(i.Z,{to:"/api/types/interface/RunnerConfig#logRunningCommand",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When enabled, will log the task's command, resolved arguments, and working directory when a target\nis ran. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"runner:\n logRunningCommand: true\n")),(0,o.kt)("h2",{id:"telemetry"},(0,o.kt)("inlineCode",{parentName:"h2"},"telemetry")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#telemetry",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When enabled, will check for a newer moon version and send anonymous usage data to the moonrepo\nteam. This data is used to improve the quality and reliability of the tool. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {1}',title:'".moon/workspace.yml"',"{1}":!0},"telemetry: false\n")),(0,o.kt)("h2",{id:"vcs"},(0,o.kt)("inlineCode",{parentName:"h2"},"vcs")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#vcs",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Configures the version control system to utilize within the workspace (and repository). A VCS is\nrequired for determining touched (added, modified, etc) files, calculating file hashes, computing\naffected files, and much more."),(0,o.kt)("h3",{id:"defaultbranch"},(0,o.kt)("inlineCode",{parentName:"h3"},"defaultBranch")),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#defaultBranch",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'Defines the default branch in the repository for comparing differences against. For git, this is\ntypically "master" (default) or "main".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"vcs:\n defaultBranch: 'master'\n")),(0,o.kt)("h3",{id:"hooks"},(0,o.kt)("inlineCode",{parentName:"h3"},"hooks"),(0,o.kt)(l.Z,{version:"1.9.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#hooks",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines a mapping of hooks to a list of commands to run when that event is triggered. There are no\nrestrictions to what commands can be run, but the binaries for each command must exist on each\nmachine that will be running hooks."),(0,o.kt)("p",null,"For Git, each ",(0,o.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/githooks#_hooks"},"hook name")," must be a valid kebab-cased\nname. ",(0,o.kt)("a",{parentName:"p",href:"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks"},"Learn more about Git hooks"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-5}',title:'".moon/workspace.yml"',"{2-5}":!0},"vcs:\n hooks:\n pre-commit:\n - 'moon run :lint :format --affected --status=staged'\n - 'another-command'\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If running ",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," commands directly, the ",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," binary must be installed globally!")),(0,o.kt)("h3",{id:"manager"},(0,o.kt)("inlineCode",{parentName:"h3"},"manager")),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#manager",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'Defines the VCS tool/binary that is being used for managing the repository. Accepts "git" (default).\nExpect more version control systems in the future!'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"vcs:\n manager: 'git'\n")),(0,o.kt)("h3",{id:"provider"},(0,o.kt)("inlineCode",{parentName:"h3"},"provider"),(0,o.kt)(l.Z,{version:"1.8.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#provider",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'Defines the service provider that the repository is hosted on. Accepts "github" (default), "gitlab",\n"bitbucket", or "other".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2}',title:'".moon/workspace.yml"',"{2}":!0},"vcs:\n provider: 'github'\n")),(0,o.kt)("h3",{id:"remotecandidates"},(0,o.kt)("inlineCode",{parentName:"h3"},"remoteCandidates")),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#remoteCandidates",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,'(Git only) Defines a list of remote candidates to query agaist to determine merge bases. Defaults to\n"origin" and "upstream".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"vcs:\n remoteCandidates:\n - 'origin'\n - 'upstream'\n")),(0,o.kt)("h3",{id:"synchooks"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncHooks"),(0,o.kt)(l.Z,{version:"1.9.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/VcsConfig#syncHooks",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will automatically generate ",(0,o.kt)("a",{parentName:"p",href:"#hooks"},"hook scripts")," to ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/hooks")," and sync the scripts to the\nlocal VCS checkout. The hooks format and location is based on the ",(0,o.kt)("a",{parentName:"p",href:"#manager"},(0,o.kt)("inlineCode",{parentName:"a"},"vcs.manager"))," setting.\nDefaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {4}',title:'".moon/workspace.yml"',"{4}":!0},"vcs:\n hooks:\n # ...\n syncHooks: true\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"When enabled, this will sync hooks for ",(0,o.kt)("em",{parentName:"p"},"all")," users of the repository. For personal or small\nprojects, this may be fine, but for larger projects, this may be undesirable and disruptive!")),(0,o.kt)("h2",{id:"versionconstraint"},(0,o.kt)("inlineCode",{parentName:"h2"},"versionConstraint")),(0,o.kt)(i.Z,{to:"/api/types/interface/WorkspaceConfig#versionConstraint",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines a version requirement for the currently running moon binary. This provides a mechanism for\nenforcing that the globally installed moon on every developers machine is using an applicable\nversion."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {1}',title:'".moon/workspace.yml"',"{1}":!0},"versionConstraint: '>=0.20.0'\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/18dd62e9.58ebab93.js b/assets/js/18dd62e9.58ebab93.js new file mode 100644 index 00000000000..7f0202ea370 --- /dev/null +++ b/assets/js/18dd62e9.58ebab93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26285],{33310:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/vscode","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/18dd62e9.add3c4c3.js b/assets/js/18dd62e9.add3c4c3.js deleted file mode 100644 index 9f063d73a30..00000000000 --- a/assets/js/18dd62e9.add3c4c3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6285],{33310:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/vscode","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1910946c.db06c448.js b/assets/js/1910946c.db06c448.js deleted file mode 100644 index cdcd6af099e..00000000000 --- a/assets/js/1910946c.db06c448.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4873],{87136:e=>{e.exports=JSON.parse('{"label":"deno","permalink":"/blog/tags/deno","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1910946c.ddf8eb03.js b/assets/js/1910946c.ddf8eb03.js new file mode 100644 index 00000000000..42dee907c9e --- /dev/null +++ b/assets/js/1910946c.ddf8eb03.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44873],{87136:e=>{e.exports=JSON.parse('{"label":"deno","permalink":"/blog/tags/deno","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/193b481a.0cac2cea.js b/assets/js/193b481a.0cac2cea.js new file mode 100644 index 00000000000..aad694278bf --- /dev/null +++ b/assets/js/193b481a.0cac2cea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99662],{59220:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(27378),r=a(9619);function l(e){let{className:t,status:a}=e;switch(a){case"experimental":return n.createElement(r.Z,{className:t,text:"Experimental",variant:"failure"});case"in-development":return n.createElement(r.Z,{className:t,text:"In development",variant:"success"});case"coming-soon":return n.createElement(r.Z,{className:t,text:"Coming soon",variant:"warning"});case"new":return n.createElement(r.Z,{className:t,text:"New",variant:"info"});default:return null}}},33453:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),r=a(40624),l=a(81884);function s(e){let{children:t,href:a,color:s}=e;return n.createElement(l.default,{href:a,className:(0,r.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",s??"bg-purple-600")},t)}},75969:(e,t,a)=>{a.d(t,{Z:()=>A});var n=a(27378),r=a(40624),l=a(31792),s=a(9187),i=a(30658),o=a(59220);const c={1:"from-purple-600 to-blurple-600",2:"from-pink-400 to-red-400",3:"from-teal-400 to-slate-100",4:"from-yellow-300 to-green-600"},m={1:"text-blurple-300",2:"text-pink-500",3:"text-teal-600",4:"text-green-600"};function A(e){let{header:t,description:a,features:A,reversed:d,tier:p}=e;return n.createElement("div",null,n.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},n.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},n.createElement("div",{className:(0,r.Z)("md:flex items-center justify-between",d&&"flex-row-reverse")},n.createElement("aside",{className:(0,r.Z)("md:w-1/3 mx-2 md:mx-0 p-2 sm:p-3 md:p-4 drop-shadow z-0 rounded-t-lg text-center",d?"md:rounded-tl-none md:rounded-tr-lg md:rounded-bl-none md:rounded-br-lg bg-gradient-to-bl md:pl-0 md:text-left":"md:rounded-tl-lg md:rounded-tr-none md:rounded-bl-lg md:rounded-br-none bg-gradient-to-br md:pr-0 md:text-right",c[p])},n.createElement("h2",{className:(0,r.Z)("m-0 px-1 py-0.5 inline-block text-base font-semibold uppercase tracking-wider text-white bg-black/20 rounded",d?"md:rounded-tl-none md:rounded-bl-none md:pl-4":"md:rounded-tr-none md:rounded-br-none md:pr-4")},t),n.createElement(s.Z,{className:(0,r.Z)("mt-2 text-white",d?"md:ml-4":"md:mr-4"),level:2},a)),n.createElement("section",{className:"md:w-2/3 bg-white rounded-lg p-2 md:p-3 lg:p-4 drop-shadow z-10"},n.createElement("ul",{className:"m-0 p-0 list-none grid grid-cols-1 sm:grid-cols-2 gap-2 md:gap-3 lg:gap-4"},A.map((e=>n.createElement("li",{key:e.title,className:"flex"},n.createElement("div",{className:"pt-1 w-9 shrink-0 grow-0"},n.createElement(l.Z,{icon:e.icon,className:(0,r.Z)("text-5xl justify-center flex",m[p]),style:{maxWidth:54}})),n.createElement("div",{className:"ml-1"},n.createElement(s.Z,{level:4,className:"text-gray-900"},e.title),e.status&&n.createElement("p",{className:"m-0"},n.createElement(o.Z,{status:e.status})),n.createElement(i.ZP,{className:"mt-1 mb-0",variant:"muted"},e.description)))))))))))}},81271:(e,t,a)=>{a.d(t,{Z:()=>r});var n=a(27378);function r(e){let{icon:t,text:a}=e;return n.createElement("h1",{className:"text-white flex justify-center md:justify-start items-stretch gap-3",style:{height:85}},n.createElement("div",{className:"relative"},t),n.createElement("div",{className:"relative"},a))}},45655:(e,t,a)=>{a.r(t),a.d(t,{default:()=>S});var n=a(27378),r=a(81884),l=a(21947),s=a(31792),i=a(9187),o=a(30658),c=a(59220);function m(e){let{header:t,features:a}=e;return n.createElement("div",{className:"bg-white"},n.createElement("div",{className:"relative py-4 sm:py-6 lg:py-8"},n.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},n.createElement(i.Z,{align:"center",className:"text-gray-900",level:3},t),n.createElement("dl",{className:"mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 lg:grid-cols-4 lg:gap-6"},a.map((e=>n.createElement("div",{key:e.title,className:"relative"},n.createElement("dt",null,n.createElement(s.Z,{icon:e.icon,className:"absolute h-3 w-3 text-purple-500",style:{maxWidth:16}}),n.createElement(i.Z,{className:"ml-4 text-gray-900",level:5},e.title)),n.createElement(o.ZP,{as:"dd",className:"mt-1 ml-4",variant:"muted"},e.status&&n.createElement("p",{className:"mb-1"},n.createElement(c.Z,{status:e.status})),e.description))))))))}var A,d,p,u,g,E,x,f=a(75969);function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...r}=e;return n.createElement("svg",h({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",viewBox:"0 0 82.38 81.99",role:"img","aria-labelledby":a},r),t?n.createElement("title",{id:a},t):null,A||(A=n.createElement("defs",null,n.createElement("circle",{id:"a",cx:36.65,cy:45.34,r:36.65}))),d||(d=n.createElement("clipPath",{id:"b"},n.createElement("use",{xlinkHref:"#a",overflow:"visible"}))),p||(p=n.createElement("g",{clipPath:"url(#b)"},n.createElement("defs",null,n.createElement("path",{id:"c",d:"M-5 3.69h83.3v83.3H-5z"})),n.createElement("clipPath",{id:"d"},n.createElement("use",{xlinkHref:"#c",overflow:"visible"})),n.createElement("g",{clipPath:"url(#d)"},n.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAlgCWAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAPIAAAFtAAACfn/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAK8AsQMBIgACEQEDEQH/ xADAAAEBAQADAQEAAAAAAAAAAAAAAQIEBQYHAwEBAAIDAQAAAAAAAAAAAAAAAAEFAgMEBhAAAQQC AgICAgIDAAAAAAAAABECAwQBBSAGEDASE0AUFTVwIzMRAAIBAQMFDAkEAgMAAAAAAAECAxEAIQQx QVESIhAgMEBhcYGRoTJCE7HRUmJygiNDBfCiMySSsuKTNBIAAgACBwYGAgMAAAAAAAAAAQIAERAh MUFREgMgMIGRobFhccHRIjJwUmJyQ//aAAwDAQACEQMRAAAA+gAAHV5uz6/y/DsHf8LrXW5U4zNz +X0rF6ztvnv6cr6C8939e0NQAABm+Q3P36OLpUbFIVBUFQXmcJi97yfA+0p3KHKAHX5Oo6BL5UbF QVBUFQVKAOXxGL6HvzHp6IGo8V6vwNiqLNUBBUFQW5pUFSgGvffP/TcL0IqXQeV7zobtpl0NSCpD TI0gqDSC3NKiV7Lrf1wfQx554vp+36a+aZbZqQ0yNMjTNNMjVzS3NRbmlQfQBQPM9B63yFsqTpnU grI0yNsjVyNs00zTVyNft+HZ4R7kefcP5z9S8DYOqkWU1kVkauKaZpq5G2bLVzTTNNep8v8AROKO QKk6zs2T5TPT+XvJJNjTI0zTTNNXNNXNNM2WrnnYu59X+f6UcBqAZ8H77O58nnpfM3E2GxUGrmmr mmkpbOxh+Pv3LqIDlAAAOl7pk+Z9d9c8/wB7wd7/AKzrnh3U2l/fsNbqf39P6Lmjz3ptq8GsAB// 2gAIAQIAAQUA8Mje/MWuwNrQNPrYOrwuJNczJLDJFnhXrumdFEyNvFzGuxaq5iz4YzL3QxNiZzc3 Dmzw5ikNdEufTfi+UZTb8YPTI35Rlf8A4+r/AElN3yg9MjvjGa+RM+m/L8Yxj8sdFK2RnNzsNbPL mWTxBO6J0crJG8XPa3Fq1mXPBj3MzHsMDbMLjGcZw6eJpJsGYJZpJc+f/9oACAEDAAEFAP8AAn// 2gAIAQEAAQUA5ZzjGLW91tYn7XNkk3+1kHbPYuz/ACOwGbvasIe03WZq9mozZimimZ7Njv6lPNzb XrufRBZnrP13Z8OzHIyRnoe9jG7bsMkzvZrtra176N+veh5Oc1rd1uX3n+6ldnoz6+/Bfr8ex7X7 H/ga3YS6+zDNHPF53WxxQpqufwesbL4P87+9m3sPwo5HRSUrTLdU2dr9Sguc54KL7uqW/lGdtnyy r4UUUUUUUUUX09fsfRtDtsmM3lFFFFFFFFFFFFF51ZPqtHaf7ZRRRRRRRRRRRRRRef8AI0ztP9so ooooooooooooooovH+OpncI8NvqKKKKKKKKKKKKKKKKL5qR/dbO4wZfTUUUUUUUUUUUUUUUUUXz1 2DM+2NrU/d1+VxlRRRRRRRRRRRRRRRRfPUKnxi8dlofpbNRRRRRRRRRRRRRRRfMMT5paNVlOp43+ rxsqOVxlRRRRRRRRRRRRePU9X838O26X6nqKKKKKKKKKLy1Gsl2VuCGKvFwc1r29i0Emul8L7NfQ sbCxrddBrqvJ7GPbveqS18+zVaW5s36/XVddB6dv1ijss7HQ7PW+mrTtXJNV09rSOKOGP15RL+u6 lbdZ65rsEurniHxujy3GXZioTSZr6CN+ael6vAU8UsQc/wD/2gAIAQICBj8AoyoCxieq3BfeKtNe NfePqvKK9NOAl2iemxQ4GsRJxLA3HZkKlH2bCMqCXc+e0VYZgbjGZa0N+HgaQq2sZQEW604nHcFW EwajBQ2WqcRQ2obviPXdBxah6GhP5TbnumX9lIo0/wCg3f8Ap0hPCa8t0zfqpNDaZv8AkPXdBBa5 6CgMtqmcB1vtGB3BZjICswXNlgGApmKwfsMYzIZ9x57RZjlAvMZVqQdfE7OZCVMS1F4r7RU68au8 TBqit15ziWmCxxNQibmeAuGx/9oACAEDAgY/APwJ/9oACAEBAQY/AN9U5LEeb5rjwx7Xb3e2xGHg VPecluwatiPO1Acyqo7aVtrHFS1Oh2A6gbf+qb/sb122cQxzbQVv9gbfWjSVeSqnrvHZYLMGgY5z tL1r6rCSF1kQ+JSCOzhTGn15xlVTsr8TWImkIjP202U6s/TwOvBI0baVNK8+mwjx41TkEyi75l9V hJGwdGFVYGoI4Eu7BUUVZiaADlJs0GCJSHIZRczc2gcLWM60R78Td082g282Bq0prqe8p0HflmIC gVJNwAFjBCSuFQ3DO5HiPJoHDieA0IuZTkYaDYTRXHI6HKraN8cBA2wh+swzsPB0Z+XiImSpQ3Sp mZfWM1lliYMjiqkbwsv80mzEOXO3Rapy8SOAlOy+1CTmbOvTvHCmsUH00pku7x6+JpKho6MGU8oN RaLEpcJFrTQchHQdyaetGVSE+Jtle02qcp4pNg2yofMTTQ3N1GnXuQwD7rljzIP+XFYamiy1jb5h d+6m5FGKbEVTzsxu7OKwy1pqSK1T7pB3G+BPRxb+T9reqzfAno4t/H+5vXaGQU24qHnVjeevisEV 31JEW/JtMBuQYgfacqeaQZeteKw+zFWRvlF37iNyfDgVZlJT412l7RahuI4pNjWyufLTTRb26zTq 3XZFpDiPqR6Knvj/AC4mkMY1nkIVRym60WGS8RrQnSTex6TusiD+xFtwnlzr8wtQ3EZRxI/kZhsJ swA528TdH6yb0/ksMuxIf7Cgd1j4+Y5+Xn4isK1Ea3zP7K+s5rJDCoSNBRVG9KsAysKMpvBBzGzY nDjWwUhup9onwnk0H9Hhlw+HWrG9mPdVfaay4eG/O7nK7HKTvyjqGRripFQRyg2fFfjlMkBvaAXu nw+0PRwv0l1IAaPOw2RyDSeawhw60ya7nvORnY8EZU/r4o3mVRcx99c/PlsWxEWtEPvR7SdJyjp4 Hy8LE0r5wouHOcgsJvybazZRh0Oz87Z+YddliiUJGgoqqKADhDrU1aX1yUsxknw8E1dpopkRq56r XV7LVwn5jCtoWWRV0eJWb0WqJsNIAKkpiIT0ULg9lgGKmvssrf6k2AGU3Xmg6zbZeEUpUtPEuX4n Fh5/5LBwrnpMrt1VA7bBsRjosU4p3pkVKj3Vb0k2AwPl+QCaeTq6lc/curwH/9k=",width:175,height:174,overflow:"visible",transform:"matrix(.48 0 0 .48 -5.258 3.595)"})))),u||(u=n.createElement("circle",{cx:52.4,cy:30.55,r:15.75,fill:"#5341d6"})),g||(g=n.createElement("defs",null,n.createElement("circle",{id:"e",cx:66.8,cy:15.75,r:15.75}))),E||(E=n.createElement("clipPath",{id:"f"},n.createElement("use",{xlinkHref:"#e",overflow:"visible"}))),x||(x=n.createElement("g",{clipPath:"url(#f)"},n.createElement("defs",null,n.createElement("path",{id:"g",d:"M46.05-5h41.5v41.5h-41.5z"})),n.createElement("clipPath",{id:"h"},n.createElement("use",{xlinkHref:"#g",overflow:"visible"})),n.createElement("g",{clipPath:"url(#h)"},n.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAlgCWAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAALLAAADiwAABSX/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAFoAWgMBIgACEQEDEQH/ xAC5AAEAAgMBAQAAAAAAAAAAAAACAAUDBAYBBwEAAwADAAAAAAAAAAAAAAAAAgMEAAEFEAACAgEE AgIBBQAAAAAAAAAAAQIDBBESEwUQISAiFDAxMiMVEQABAQMHCQUGBwAAAAAAAAABAgARAzAhMUFR EiIQIGFxgZHB0eEyQlIzBKGxYnKiNMITI0MURIQSAAECAQoFBAMAAAAAAAAAAAEAAhEQICExYYGR EiIyQVGh0eHwcUIjYnIT/9oADAMBAAIRAxEAAAD6BIcxaujo01buDXNNu1tVJ3nVZOSv5Id6STzS p36V5nxGqohk6MYYMjPCeuq2uY6eGKt0dvUGE+IsMhBjwHja0hFhedNzO7mrbStarmcbwosWAw14 x5MbXgsNabqt68S8pLzDyZaM5cVPLIRY0Blr8ZdnujZtZOc6SRW8dbbRkvNY+o0ao6LPfZzdXWMk V0kiy//aAAgBAgABBQArx9SNVaHRVIuxpQRRH2mJiND8Zc9fqKZFkRDX2rf1REiIc/7IS2tESJOy MI80uUr3kdw+TS3k3H//2gAIAQMAAQUAKsZMjTUiWPTJXYzr8Q0ThYRsN45HCuV2aSjcRuFachu9 5DcbFaQtI2CmbzIp5I+04yIyINs09GTwGlZDjIbdD//aAAgBAQABBQDzkdhj0OzuMht9pnEe3zou nvFrTfTfH4SlGEczPncMaGhjKrraZ9f2cMteewynZNjGMYxkJyrn1+YszHMy500DGMYxjGdRlfj5 h2k/sMYxjGMZrof6EjsnrkDGMYxjH57OL5RjGMYxj8fgM7GrfQMYxjGMZh47ycoaTWTRKi1jGMYx jOkwnTV4yceORXdTZTNjGMYzq+qlZL4W013QyOqsiWV2VtjKuvy7nidPRT+g/wBrSn+fx//aAAgB AgIGPwBRfgtrbxFbQPahZm6m9RJmPCqbl+EM93JCaDyaRjBCyaG/gXdQrDMzOX9eMarOUmmq2pUh uPhaQy8+F9kY+qpP/9oACAEDAgY/AFF5uC2NvEVsA/WhZmnM3qJImbD47vCImg2I20zqNzauygaC JaJfs3cMu5aS+9o7qkuw8rTVJ//aAAgBAQEGPwDLdffXYmrWWwJSgby3m/SnkzysL0FI/C5gI8N1 qkcjza/CWFp0VaxVmlSi5InJa5DemHuKtecFwlFChWOLflrwRwJxUrSnMMFJwIM/xHpIJWguUkvS dIYRKFpwxBp65FKHaOFOsySQS6HFwK20HfkQiwFR2zcJJ4aj+p/J22M6xIHGT/zMhVRS7cesnQfs n0jzLNTXxTDL9hpkocFzwoi98opyEGcGYhig9mlJtEifURA6JFDkg0hHXKUKmPdVYWuRA41WHVnj 1HqEuhidCDMVG06M25EDx7mfAN9PhMyuTOiJKTpDsuGGUjxKwj2sFxv1Ygt7I2V7ZA8aGT9rT3+D HyqP26c7/9k=",width:88,height:87,overflow:"visible",transform:"matrix(.48 0 0 .48 45.622 -5.045)"})))))};var b;function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...r}=e;return n.createElement("svg",v({viewBox:"0 0 174 37",xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",role:"img","aria-labelledby":a},r),t?n.createElement("title",{id:a},t):null,b||(b=n.createElement("path",{fill:"currentColor",d:"M77.543.376c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S87.633.376 77.543.376zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zm41.27-29.44c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26s-8.17-18.26-18.26-18.26zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zM39.133.376c-4.76 0-9.01 2.16-11.83 5.55-2.83-3.39-7.08-5.55-11.83-5.55-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09v-21.12a8.32 8.32 0 0 1 8.32-8.32c4.39 0 7.98 3.41 8.29 7.72-.01.2-.03.4-.03.6v21.12h7.15v-21.12c0-.2-.02-.4-.03-.6.31-4.31 3.9-7.72 8.29-7.72a8.32 8.32 0 0 1 8.32 8.32v21.12h7.09v-21.12c-.02-8.51-6.92-15.41-15.42-15.41zm118.09 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09v-21.12a8.32 8.32 0 0 1 16.64 0v21.12h7.09v-21.12c0-8.51-6.9-15.41-15.41-15.41z"})))};var R=a(50615),N=a(90728),Q=a(33453),B=a(81271),M=a(25773);const k="$ moon run :build";function I(e,t){const a=Math.ceil(e-50);return Math.floor(Math.random()*(Math.floor(t-100)-a+1))+a}function j(e){return e>1e3?e/1e3+"s":`${e}ms`}const Z=[[["theme-tokens:build",I(450,800)]],[["design-system:build",I(250,1e3)],["accessibility:build",I(350,800)],["test-utils:build",I(250,700)]],[["data-layer:build",I(500,1e3)],["server:build",I(1400,2100)]],[["client:build",I(1300,1900)]],[["web:build",I(850,2150)],["mobile:build",I(750,1550)]]];function F(e){let{type:t,time:a,message:r}=e;return n.createElement("li",{className:"list-none"},"start"===t&&n.createElement(n.Fragment,null,n.createElement("span",{className:"text-gray-900"},"\u25aa"),n.createElement("span",{className:"text-gray-800"},"\u25aa"),n.createElement("span",{className:"text-gray-700"},"\u25aa"),n.createElement("span",{className:"text-gray-600"},"\u25aa")," "),"finish"===t&&n.createElement(n.Fragment,null,n.createElement("span",{className:"text-purple-700"},"\u25aa"),n.createElement("span",{className:"text-purple-600"},"\u25aa"),n.createElement("span",{className:"text-purple-500"},"\u25aa"),n.createElement("span",{className:"text-purple-400"},"\u25aa")," "),r,a&&n.createElement("span",{className:"text-sm text-gray-700"}," (",j(a),")"))}function U(){const e=(0,n.useRef)(null),[t,a]=(0,n.useState)(0),[r,l]=(0,n.useState)(-1),[s,i]=(0,n.useState)([]),[o,c]=(0,n.useState)(0),[m,A]=(0,n.useState)(0),d=(0,n.useRef)(!1);(0,n.useEffect)((()=>(d.current=!0,()=>{d.current=!1})),[]);const p=(0,n.useCallback)(((e,t)=>{d.current&&setTimeout((()=>{d.current&&e()}),t)}),[]);return(0,n.useEffect)((()=>{t{a((e=>e+1))}),125):(c(Date.now()),l(0))}),[t]),(0,n.useEffect)((()=>{if(r<0)return;if(r>=Z.length)return A(Date.now()),void p((()=>{a(0),l(-1),i([]),c(0),A(0)}),1e4);const e=Z[r],t=Math.max(...e.map((e=>e[1])));e.forEach((e=>{let[t,a]=e;i((e=>[...e,{type:"start",message:t}])),p((()=>{i((e=>[...e,{type:"finish",message:t,time:a}]))}),a)})),p((()=>{l((e=>e+1))}),t+100)}),[r]),(0,n.useEffect)((()=>{e.current&&(e.current.scrollTop=2*e.current.scrollHeight)}),[s,m]),n.createElement("ul",{className:"flex flex-col w-full p-2 m-0 overflow-auto font-mono text-sm text-gray-200 border border-solid rounded-lg bg-slate-900 border-slate-500",style:{height:230},ref:e},n.createElement("li",{className:"list-none"},n.createElement("strong",null,k.slice(0,t))),s.map((e=>n.createElement(F,(0,M.Z)({key:e.type+e.message},e)))),m>0&&n.createElement(n.Fragment,null,n.createElement("li",{className:"pt-2 list-none"},n.createElement("strong",{className:"text-gray-600"},"Tasks"),":"," ",n.createElement("span",{className:"text-green-500"},s.length/2," completed")),n.createElement("li",{className:"list-none"},n.createElement("strong",{className:"text-gray-600"},n.createElement("span",{className:"invisible"},"T"),"Time"),": ",j(m-o))))}const{version:z}=a(97107);function G(){return n.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600 star-pattern"},n.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col md:flex-row"},n.createElement("div",{className:"text-center md:text-left md:w-6/12"},n.createElement(B.Z,{icon:n.createElement(w,{height:75,style:{marginTop:1}}),text:n.createElement(y,{height:51,style:{top:19},className:"absolute"})}),n.createElement("p",{className:"mt-1 mb-0 text-base text-white sm:text-lg sm:max-w-xl sm:mx-auto md:text-xl md:mx-0 md:pr-4"},"A task runner and monorepo management tool for the web ecosystem, written in Rust."),n.createElement("p",{className:"mt-1 text-white opacity-50 text-sm md:text-base md:pr-4"},"Supports JavaScript, TypeScript, Rust, Go, Ruby,"," ",n.createElement(N.Z,{href:"/docs#supported-languages",variant:"muted"},"and more"),"."),n.createElement("div",{className:"mt-3 flex justify-center md:justify-start"},n.createElement("div",null,n.createElement(Q.Z,{href:"/docs/install"},"Get started",n.createElement(s.Z,{icon:l.XEr,className:"ml-1 md:ml-2 inline-block",style:{maxWidth:18}}))),n.createElement("div",{className:"ml-1 sm:ml-2 lg:ml-3"},n.createElement(r.default,{href:"https://www.npmjs.com/package/@moonrepo/cli",className:"w-full flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white bg-white/5 hover:scale-110 md:text-lg group transition-transform"},n.createElement("span",{className:"opacity-50"},"v"),z)))),n.createElement("div",{className:"mt-4 md:mt-0 md:w-6/12 flex flex-col flex-grow-0"},n.createElement(U,null),n.createElement("div",{className:"mt-2 flex justify-center items-start gap-1"},n.createElement("div",null,n.createElement(o.ZP,{className:"text-white opacity-50 m-0",size:"sm"},"Backed by")),n.createElement("div",null,n.createElement(R.Z,{height:22}))))))}var C=a(64654);const H=[{title:"Smart hashing",icon:l.QGx,description:"Collects inputs from multiple sources to ensure builds are deterministic and reproducible."},{title:"Remote caching",icon:l.wEO,description:"Persists builds, hashes, and caches between teammates and CI/CD environments."},{title:"Integrated toolchain",icon:l.AlB,description:"Automatically downloads and installs explicit versions of languages and tools for consistency across the entire workspace or per project."},{title:"Multi-platform",icon:l.Ff$,description:"Runs on common development platforms: Linux, macOS, and Windows."}],P=[{title:"Project graph",icon:l.Bkj,description:"Generates a project graph for dependency and dependent relationships."},{title:"Code generation",icon:l.Krp,description:"Easily scaffold new applications, libraries, tooling, and more!"},{title:"Task inheritance",icon:l.JUO,description:"Define a task once to be inherited by all or scoped projects. Avoid defining the same task in every project."},{title:"Code ownership",icon:l.iJk,description:"Declare owners, maintainers, support channels, and more. Generate CODEOWNERS.",status:"new"}],T=[{title:"Dependency graph",icon:l.Hw7,description:"Generates a dependency graph to increase performance and reduce workloads."},{title:"Action pipeline",icon:l.ar8,description:"Executes actions in parallel and in order using a thread pool and our dependency graph."},{title:"Action distribution",icon:l.fjp,description:"Distributes actions across multiple machines to increase throughput.",status:"coming-soon"},{title:"Incremental builds",icon:l.dzC,description:"With our smart hashing, only rebuild projects that have been touched since the last build."}],D=[{title:"Flakiness detection",icon:l.I85,description:"Reduce flaky builds with automatic retries and passthrough settings."},{title:"Webhook events",icon:l.$IR,description:"Receive a webhook for every event in the pipeline. Useful for metrics gathering and insights.",status:"experimental"},{title:"Terminal notifications",icon:l.Azy,description:"Receives notifications in your chosen terminal when builds are successful... or are not.",status:"coming-soon"},{title:"Git hooks",icon:l.tx1,description:"Manage Git hooks to enforce workflows and requirements for contributors.",status:"new"}],K=[{title:"Configuration & convention",icon:l.auv,description:"Use moon the way you want, but with some guard rails."},{title:"Scalability aware",icon:l.o$R,description:"Engineered to scale and grow for codebases of any size."},{title:"Integrated packages",icon:l.m_D,description:n.createElement(n.Fragment,null,"Enhance your pipeline with our"," ",n.createElement(r.default,{href:"https://www.npmjs.com/org/moonrepo"},"@moonrepo")," npm packages."),status:"in-development"},{title:"Process inspection",icon:l.BC0,description:"Inspect and debug failing task processes.",status:"coming-soon"},{title:"Build profiles",icon:l.b2$,description:n.createElement(n.Fragment,null,"Record ",n.createElement(r.default,{href:"/docs/guides/profile"},"CPU and heap profiles")," that can be analyzed in Chrome.")},{title:"Editor extensions",icon:l.E_d,description:n.createElement(n.Fragment,null,"Utilize moon extensions in your favorite editor, like"," ",n.createElement(r.default,{href:"/docs/editors/vscode"},"Visual Studio Code"),".")}];function S(){return n.createElement(C.Z,{title:"moon - A task runner and monorepo management tool for the web ecosystem, written in Rust",description:"Reduces build times and repository maintenance costs through high-quality developer tooling."},n.createElement(G,null),n.createElement("main",null,n.createElement("div",{className:"bg-gradient-to-b from-slate-600 via-purple-600 to-white"},n.createElement(f.Z,{header:"Management",description:"Develop more, manage less",features:H,tier:1}),n.createElement(f.Z,{header:"Organization",description:"Architect a repository to scale",features:P,tier:2,reversed:!0}),n.createElement(f.Z,{header:"Orchestration",description:"Offload heavy tasks",features:T,tier:3}),n.createElement(f.Z,{header:"Notification",description:"Monitor pipeline health",features:D,tier:4,reversed:!0})),n.createElement(m,{header:"And many more features",features:K})))}},9619:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),r=a(40624),l=a(31792);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:a,text:i,variant:o}=e;return n.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",o?s[o]:"bg-gray-100 text-gray-800",t)},a&&n.createElement(l.Z,{icon:a,className:"mr-1"}),i)}},97107:e=>{e.exports=JSON.parse('{"name":"@moonrepo/cli","version":"1.15.2","description":"moon command line and core system.","keywords":["moon","repo","cli","core"],"files":["moon","postinstall.js"],"author":"Miles Johnson","license":"MIT","bin":{"moon":"moon"},"repository":{"type":"git","url":"https://github.com/moonrepo/moon","directory":"packages/cli"},"scripts":{"postinstall":"node ./postinstall.js"},"dependencies":{"detect-libc":"^2.0.2"},"optionalDependencies":{"@moonrepo/core-linux-arm64-gnu":"^1.15.2","@moonrepo/core-linux-arm64-musl":"^1.15.2","@moonrepo/core-linux-x64-gnu":"^1.15.2","@moonrepo/core-linux-x64-musl":"^1.15.2","@moonrepo/core-macos-arm64":"^1.15.2","@moonrepo/core-macos-x64":"^1.15.2","@moonrepo/core-windows-x64-msvc":"^1.15.2"}}')}}]); \ No newline at end of file diff --git a/assets/js/193b481a.4f4fa395.js b/assets/js/193b481a.4f4fa395.js deleted file mode 100644 index 86957d2a40b..00000000000 --- a/assets/js/193b481a.4f4fa395.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9662],{59220:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(27378),r=a(9619);function l(e){let{className:t,status:a}=e;switch(a){case"experimental":return n.createElement(r.Z,{className:t,text:"Experimental",variant:"failure"});case"in-development":return n.createElement(r.Z,{className:t,text:"In development",variant:"success"});case"coming-soon":return n.createElement(r.Z,{className:t,text:"Coming soon",variant:"warning"});case"new":return n.createElement(r.Z,{className:t,text:"New",variant:"info"});default:return null}}},33453:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),r=a(40624),l=a(81884);function s(e){let{children:t,href:a,color:s}=e;return n.createElement(l.default,{href:a,className:(0,r.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",s??"bg-purple-600")},t)}},75969:(e,t,a)=>{a.d(t,{Z:()=>A});var n=a(27378),r=a(40624),l=a(31792),s=a(9187),i=a(30658),o=a(59220);const c={1:"from-purple-600 to-blurple-600",2:"from-pink-400 to-red-400",3:"from-teal-400 to-slate-100",4:"from-yellow-300 to-green-600"},m={1:"text-blurple-300",2:"text-pink-500",3:"text-teal-600",4:"text-green-600"};function A(e){let{header:t,description:a,features:A,reversed:d,tier:p}=e;return n.createElement("div",null,n.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},n.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},n.createElement("div",{className:(0,r.Z)("md:flex items-center justify-between",d&&"flex-row-reverse")},n.createElement("aside",{className:(0,r.Z)("md:w-1/3 mx-2 md:mx-0 p-2 sm:p-3 md:p-4 drop-shadow z-0 rounded-t-lg text-center",d?"md:rounded-tl-none md:rounded-tr-lg md:rounded-bl-none md:rounded-br-lg bg-gradient-to-bl md:pl-0 md:text-left":"md:rounded-tl-lg md:rounded-tr-none md:rounded-bl-lg md:rounded-br-none bg-gradient-to-br md:pr-0 md:text-right",c[p])},n.createElement("h2",{className:(0,r.Z)("m-0 px-1 py-0.5 inline-block text-base font-semibold uppercase tracking-wider text-white bg-black/20 rounded",d?"md:rounded-tl-none md:rounded-bl-none md:pl-4":"md:rounded-tr-none md:rounded-br-none md:pr-4")},t),n.createElement(s.Z,{className:(0,r.Z)("mt-2 text-white",d?"md:ml-4":"md:mr-4"),level:2},a)),n.createElement("section",{className:"md:w-2/3 bg-white rounded-lg p-2 md:p-3 lg:p-4 drop-shadow z-10"},n.createElement("ul",{className:"m-0 p-0 list-none grid grid-cols-1 sm:grid-cols-2 gap-2 md:gap-3 lg:gap-4"},A.map((e=>n.createElement("li",{key:e.title,className:"flex"},n.createElement("div",{className:"pt-1 w-9 shrink-0 grow-0"},n.createElement(l.Z,{icon:e.icon,className:(0,r.Z)("text-5xl justify-center flex",m[p]),style:{maxWidth:54}})),n.createElement("div",{className:"ml-1"},n.createElement(s.Z,{level:4,className:"text-gray-900"},e.title),e.status&&n.createElement("p",{className:"m-0"},n.createElement(o.Z,{status:e.status})),n.createElement(i.ZP,{className:"mt-1 mb-0",variant:"muted"},e.description)))))))))))}},81271:(e,t,a)=>{a.d(t,{Z:()=>r});var n=a(27378);function r(e){let{icon:t,text:a}=e;return n.createElement("h1",{className:"text-white flex justify-center md:justify-start items-stretch gap-3",style:{height:85}},n.createElement("div",{className:"relative"},t),n.createElement("div",{className:"relative"},a))}},45655:(e,t,a)=>{a.r(t),a.d(t,{default:()=>S});var n=a(27378),r=a(81884),l=a(21947),s=a(31792),i=a(9187),o=a(30658),c=a(59220);function m(e){let{header:t,features:a}=e;return n.createElement("div",{className:"bg-white"},n.createElement("div",{className:"relative py-4 sm:py-6 lg:py-8"},n.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},n.createElement(i.Z,{align:"center",className:"text-gray-900",level:3},t),n.createElement("dl",{className:"mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 lg:grid-cols-4 lg:gap-6"},a.map((e=>n.createElement("div",{key:e.title,className:"relative"},n.createElement("dt",null,n.createElement(s.Z,{icon:e.icon,className:"absolute h-3 w-3 text-purple-500",style:{maxWidth:16}}),n.createElement(i.Z,{className:"ml-4 text-gray-900",level:5},e.title)),n.createElement(o.ZP,{as:"dd",className:"mt-1 ml-4",variant:"muted"},e.status&&n.createElement("p",{className:"mb-1"},n.createElement(c.Z,{status:e.status})),e.description))))))))}var A,d,p,u,g,E,x,f=a(75969);function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...r}=e;return n.createElement("svg",h({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",viewBox:"0 0 82.38 81.99",role:"img","aria-labelledby":a},r),t?n.createElement("title",{id:a},t):null,A||(A=n.createElement("defs",null,n.createElement("circle",{id:"a",cx:36.65,cy:45.34,r:36.65}))),d||(d=n.createElement("clipPath",{id:"b"},n.createElement("use",{xlinkHref:"#a",overflow:"visible"}))),p||(p=n.createElement("g",{clipPath:"url(#b)"},n.createElement("defs",null,n.createElement("path",{id:"c",d:"M-5 3.69h83.3v83.3H-5z"})),n.createElement("clipPath",{id:"d"},n.createElement("use",{xlinkHref:"#c",overflow:"visible"})),n.createElement("g",{clipPath:"url(#d)"},n.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAlgCWAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAPIAAAFtAAACfn/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAK8AsQMBIgACEQEDEQH/ xADAAAEBAQADAQEAAAAAAAAAAAAAAQIEBQYHAwEBAAIDAQAAAAAAAAAAAAAAAAEFAgMEBhAAAQQC AgICAgIDAAAAAAAAABECAwQBBSAGEDASE0AUFTVwIzMRAAIBAQMFDAkEAgMAAAAAAAECAxEAIQQx QVESIhAgMEBhcYGRoTJCE7HRUmJygiNDBfCiMySSsuKTNBIAAgACBwYGAgMAAAAAAAAAAQIAERAh MUFREgMgMIGRobFhccHRIjJwUmJyQ//aAAwDAQACEQMRAAAA+gAAHV5uz6/y/DsHf8LrXW5U4zNz +X0rF6ztvnv6cr6C8939e0NQAABm+Q3P36OLpUbFIVBUFQXmcJi97yfA+0p3KHKAHX5Oo6BL5UbF QVBUFQVKAOXxGL6HvzHp6IGo8V6vwNiqLNUBBUFQW5pUFSgGvffP/TcL0IqXQeV7zobtpl0NSCpD TI0gqDSC3NKiV7Lrf1wfQx554vp+36a+aZbZqQ0yNMjTNNMjVzS3NRbmlQfQBQPM9B63yFsqTpnU grI0yNsjVyNs00zTVyNft+HZ4R7kefcP5z9S8DYOqkWU1kVkauKaZpq5G2bLVzTTNNep8v8AROKO QKk6zs2T5TPT+XvJJNjTI0zTTNNXNNXNNM2WrnnYu59X+f6UcBqAZ8H77O58nnpfM3E2GxUGrmmr mmkpbOxh+Pv3LqIDlAAAOl7pk+Z9d9c8/wB7wd7/AKzrnh3U2l/fsNbqf39P6Lmjz3ptq8GsAB// 2gAIAQIAAQUA8Mje/MWuwNrQNPrYOrwuJNczJLDJFnhXrumdFEyNvFzGuxaq5iz4YzL3QxNiZzc3 Dmzw5ikNdEufTfi+UZTb8YPTI35Rlf8A4+r/AElN3yg9MjvjGa+RM+m/L8Yxj8sdFK2RnNzsNbPL mWTxBO6J0crJG8XPa3Fq1mXPBj3MzHsMDbMLjGcZw6eJpJsGYJZpJc+f/9oACAEDAAEFAP8AAn// 2gAIAQEAAQUA5ZzjGLW91tYn7XNkk3+1kHbPYuz/ACOwGbvasIe03WZq9mozZimimZ7Njv6lPNzb XrufRBZnrP13Z8OzHIyRnoe9jG7bsMkzvZrtra176N+veh5Oc1rd1uX3n+6ldnoz6+/Bfr8ex7X7 H/ga3YS6+zDNHPF53WxxQpqufwesbL4P87+9m3sPwo5HRSUrTLdU2dr9Sguc54KL7uqW/lGdtnyy r4UUUUUUUUUX09fsfRtDtsmM3lFFFFFFFFFFFFF51ZPqtHaf7ZRRRRRRRRRRRRRRef8AI0ztP9so ooooooooooooooovH+OpncI8NvqKKKKKKKKKKKKKKKKL5qR/dbO4wZfTUUUUUUUUUUUUUUUUUXz1 2DM+2NrU/d1+VxlRRRRRRRRRRRRRRRRfPUKnxi8dlofpbNRRRRRRRRRRRRRRRfMMT5paNVlOp43+ rxsqOVxlRRRRRRRRRRRRePU9X838O26X6nqKKKKKKKKKLy1Gsl2VuCGKvFwc1r29i0Emul8L7NfQ sbCxrddBrqvJ7GPbveqS18+zVaW5s36/XVddB6dv1ijss7HQ7PW+mrTtXJNV09rSOKOGP15RL+u6 lbdZ65rsEurniHxujy3GXZioTSZr6CN+ael6vAU8UsQc/wD/2gAIAQICBj8AoyoCxieq3BfeKtNe NfePqvKK9NOAl2iemxQ4GsRJxLA3HZkKlH2bCMqCXc+e0VYZgbjGZa0N+HgaQq2sZQEW604nHcFW EwajBQ2WqcRQ2obviPXdBxah6GhP5TbnumX9lIo0/wCg3f8Ap0hPCa8t0zfqpNDaZv8AkPXdBBa5 6CgMtqmcB1vtGB3BZjICswXNlgGApmKwfsMYzIZ9x57RZjlAvMZVqQdfE7OZCVMS1F4r7RU68au8 TBqit15ziWmCxxNQibmeAuGx/9oACAEDAgY/APwJ/9oACAEBAQY/AN9U5LEeb5rjwx7Xb3e2xGHg VPecluwatiPO1Acyqo7aVtrHFS1Oh2A6gbf+qb/sb122cQxzbQVv9gbfWjSVeSqnrvHZYLMGgY5z tL1r6rCSF1kQ+JSCOzhTGn15xlVTsr8TWImkIjP202U6s/TwOvBI0baVNK8+mwjx41TkEyi75l9V hJGwdGFVYGoI4Eu7BUUVZiaADlJs0GCJSHIZRczc2gcLWM60R78Td082g282Bq0prqe8p0HflmIC gVJNwAFjBCSuFQ3DO5HiPJoHDieA0IuZTkYaDYTRXHI6HKraN8cBA2wh+swzsPB0Z+XiImSpQ3Sp mZfWM1lliYMjiqkbwsv80mzEOXO3Rapy8SOAlOy+1CTmbOvTvHCmsUH00pku7x6+JpKho6MGU8oN RaLEpcJFrTQchHQdyaetGVSE+Jtle02qcp4pNg2yofMTTQ3N1GnXuQwD7rljzIP+XFYamiy1jb5h d+6m5FGKbEVTzsxu7OKwy1pqSK1T7pB3G+BPRxb+T9reqzfAno4t/H+5vXaGQU24qHnVjeevisEV 31JEW/JtMBuQYgfacqeaQZeteKw+zFWRvlF37iNyfDgVZlJT412l7RahuI4pNjWyufLTTRb26zTq 3XZFpDiPqR6Knvj/AC4mkMY1nkIVRym60WGS8RrQnSTex6TusiD+xFtwnlzr8wtQ3EZRxI/kZhsJ swA528TdH6yb0/ksMuxIf7Cgd1j4+Y5+Xn4isK1Ea3zP7K+s5rJDCoSNBRVG9KsAysKMpvBBzGzY nDjWwUhup9onwnk0H9Hhlw+HWrG9mPdVfaay4eG/O7nK7HKTvyjqGRripFQRyg2fFfjlMkBvaAXu nw+0PRwv0l1IAaPOw2RyDSeawhw60ya7nvORnY8EZU/r4o3mVRcx99c/PlsWxEWtEPvR7SdJyjp4 Hy8LE0r5wouHOcgsJvybazZRh0Oz87Z+YddliiUJGgoqqKADhDrU1aX1yUsxknw8E1dpopkRq56r XV7LVwn5jCtoWWRV0eJWb0WqJsNIAKkpiIT0ULg9lgGKmvssrf6k2AGU3Xmg6zbZeEUpUtPEuX4n Fh5/5LBwrnpMrt1VA7bBsRjosU4p3pkVKj3Vb0k2AwPl+QCaeTq6lc/curwH/9k=",width:175,height:174,overflow:"visible",transform:"matrix(.48 0 0 .48 -5.258 3.595)"})))),u||(u=n.createElement("circle",{cx:52.4,cy:30.55,r:15.75,fill:"#5341d6"})),g||(g=n.createElement("defs",null,n.createElement("circle",{id:"e",cx:66.8,cy:15.75,r:15.75}))),E||(E=n.createElement("clipPath",{id:"f"},n.createElement("use",{xlinkHref:"#e",overflow:"visible"}))),x||(x=n.createElement("g",{clipPath:"url(#f)"},n.createElement("defs",null,n.createElement("path",{id:"g",d:"M46.05-5h41.5v41.5h-41.5z"})),n.createElement("clipPath",{id:"h"},n.createElement("use",{xlinkHref:"#g",overflow:"visible"})),n.createElement("g",{clipPath:"url(#h)"},n.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAlgCWAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAALLAAADiwAABSX/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAFoAWgMBIgACEQEDEQH/ xAC5AAEAAgMBAQAAAAAAAAAAAAACAAUDBAYBBwEAAwADAAAAAAAAAAAAAAAAAgMEAAEFEAACAgEE AgIBBQAAAAAAAAAAAQIDBBESEwUQISAiFDAxMiMVEQABAQMHCQUGBwAAAAAAAAABAgARAzAhMUFR EiIQIGFxgZHB0eEyQlIzBKGxYnKiNMITI0MURIQSAAECAQoFBAMAAAAAAAAAAAEAAhEQICExYYGR EiIyQVGh0eHwcUIjYnIT/9oADAMBAAIRAxEAAAD6BIcxaujo01buDXNNu1tVJ3nVZOSv5Id6STzS p36V5nxGqohk6MYYMjPCeuq2uY6eGKt0dvUGE+IsMhBjwHja0hFhedNzO7mrbStarmcbwosWAw14 x5MbXgsNabqt68S8pLzDyZaM5cVPLIRY0Blr8ZdnujZtZOc6SRW8dbbRkvNY+o0ao6LPfZzdXWMk V0kiy//aAAgBAgABBQArx9SNVaHRVIuxpQRRH2mJiND8Zc9fqKZFkRDX2rf1REiIc/7IS2tESJOy MI80uUr3kdw+TS3k3H//2gAIAQMAAQUAKsZMjTUiWPTJXYzr8Q0ThYRsN45HCuV2aSjcRuFachu9 5DcbFaQtI2CmbzIp5I+04yIyINs09GTwGlZDjIbdD//aAAgBAQABBQDzkdhj0OzuMht9pnEe3zou nvFrTfTfH4SlGEczPncMaGhjKrraZ9f2cMteewynZNjGMYxkJyrn1+YszHMy500DGMYxjGdRlfj5 h2k/sMYxjGMZrof6EjsnrkDGMYxjH57OL5RjGMYxj8fgM7GrfQMYxjGMZh47ycoaTWTRKi1jGMYx jOkwnTV4yceORXdTZTNjGMYzq+qlZL4W013QyOqsiWV2VtjKuvy7nidPRT+g/wBrSn+fx//aAAgB AgIGPwBRfgtrbxFbQPahZm6m9RJmPCqbl+EM93JCaDyaRjBCyaG/gXdQrDMzOX9eMarOUmmq2pUh uPhaQy8+F9kY+qpP/9oACAEDAgY/AFF5uC2NvEVsA/WhZmnM3qJImbD47vCImg2I20zqNzauygaC JaJfs3cMu5aS+9o7qkuw8rTVJ//aAAgBAQEGPwDLdffXYmrWWwJSgby3m/SnkzysL0FI/C5gI8N1 qkcjza/CWFp0VaxVmlSi5InJa5DemHuKtecFwlFChWOLflrwRwJxUrSnMMFJwIM/xHpIJWguUkvS dIYRKFpwxBp65FKHaOFOsySQS6HFwK20HfkQiwFR2zcJJ4aj+p/J22M6xIHGT/zMhVRS7cesnQfs n0jzLNTXxTDL9hpkocFzwoi98opyEGcGYhig9mlJtEifURA6JFDkg0hHXKUKmPdVYWuRA41WHVnj 1HqEuhidCDMVG06M25EDx7mfAN9PhMyuTOiJKTpDsuGGUjxKwj2sFxv1Ygt7I2V7ZA8aGT9rT3+D HyqP26c7/9k=",width:88,height:87,overflow:"visible",transform:"matrix(.48 0 0 .48 45.622 -5.045)"})))))};var b;function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...r}=e;return n.createElement("svg",v({viewBox:"0 0 174 37",xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",role:"img","aria-labelledby":a},r),t?n.createElement("title",{id:a},t):null,b||(b=n.createElement("path",{fill:"currentColor",d:"M77.543.376c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S87.633.376 77.543.376zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zm41.27-29.44c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26s-8.17-18.26-18.26-18.26zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zM39.133.376c-4.76 0-9.01 2.16-11.83 5.55-2.83-3.39-7.08-5.55-11.83-5.55-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09v-21.12a8.32 8.32 0 0 1 8.32-8.32c4.39 0 7.98 3.41 8.29 7.72-.01.2-.03.4-.03.6v21.12h7.15v-21.12c0-.2-.02-.4-.03-.6.31-4.31 3.9-7.72 8.29-7.72a8.32 8.32 0 0 1 8.32 8.32v21.12h7.09v-21.12c-.02-8.51-6.92-15.41-15.42-15.41zm118.09 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09v-21.12a8.32 8.32 0 0 1 16.64 0v21.12h7.09v-21.12c0-8.51-6.9-15.41-15.41-15.41z"})))};var R=a(50615),N=a(90728),Q=a(33453),B=a(81271),M=a(25773);const k="$ moon run :build";function I(e,t){const a=Math.ceil(e-50);return Math.floor(Math.random()*(Math.floor(t-100)-a+1))+a}function j(e){return e>1e3?e/1e3+"s":`${e}ms`}const Z=[[["theme-tokens:build",I(450,800)]],[["design-system:build",I(250,1e3)],["accessibility:build",I(350,800)],["test-utils:build",I(250,700)]],[["data-layer:build",I(500,1e3)],["server:build",I(1400,2100)]],[["client:build",I(1300,1900)]],[["web:build",I(850,2150)],["mobile:build",I(750,1550)]]];function F(e){let{type:t,time:a,message:r}=e;return n.createElement("li",{className:"list-none"},"start"===t&&n.createElement(n.Fragment,null,n.createElement("span",{className:"text-gray-900"},"\u25aa"),n.createElement("span",{className:"text-gray-800"},"\u25aa"),n.createElement("span",{className:"text-gray-700"},"\u25aa"),n.createElement("span",{className:"text-gray-600"},"\u25aa")," "),"finish"===t&&n.createElement(n.Fragment,null,n.createElement("span",{className:"text-purple-700"},"\u25aa"),n.createElement("span",{className:"text-purple-600"},"\u25aa"),n.createElement("span",{className:"text-purple-500"},"\u25aa"),n.createElement("span",{className:"text-purple-400"},"\u25aa")," "),r,a&&n.createElement("span",{className:"text-sm text-gray-700"}," (",j(a),")"))}function U(){const e=(0,n.useRef)(null),[t,a]=(0,n.useState)(0),[r,l]=(0,n.useState)(-1),[s,i]=(0,n.useState)([]),[o,c]=(0,n.useState)(0),[m,A]=(0,n.useState)(0),d=(0,n.useRef)(!1);(0,n.useEffect)((()=>(d.current=!0,()=>{d.current=!1})),[]);const p=(0,n.useCallback)(((e,t)=>{d.current&&setTimeout((()=>{d.current&&e()}),t)}),[]);return(0,n.useEffect)((()=>{t{a((e=>e+1))}),125):(c(Date.now()),l(0))}),[t]),(0,n.useEffect)((()=>{if(r<0)return;if(r>=Z.length)return A(Date.now()),void p((()=>{a(0),l(-1),i([]),c(0),A(0)}),1e4);const e=Z[r],t=Math.max(...e.map((e=>e[1])));e.forEach((e=>{let[t,a]=e;i((e=>[...e,{type:"start",message:t}])),p((()=>{i((e=>[...e,{type:"finish",message:t,time:a}]))}),a)})),p((()=>{l((e=>e+1))}),t+100)}),[r]),(0,n.useEffect)((()=>{e.current&&(e.current.scrollTop=2*e.current.scrollHeight)}),[s,m]),n.createElement("ul",{className:"flex flex-col w-full p-2 m-0 overflow-auto font-mono text-sm text-gray-200 border border-solid rounded-lg bg-slate-900 border-slate-500",style:{height:230},ref:e},n.createElement("li",{className:"list-none"},n.createElement("strong",null,k.slice(0,t))),s.map((e=>n.createElement(F,(0,M.Z)({key:e.type+e.message},e)))),m>0&&n.createElement(n.Fragment,null,n.createElement("li",{className:"pt-2 list-none"},n.createElement("strong",{className:"text-gray-600"},"Tasks"),":"," ",n.createElement("span",{className:"text-green-500"},s.length/2," completed")),n.createElement("li",{className:"list-none"},n.createElement("strong",{className:"text-gray-600"},n.createElement("span",{className:"invisible"},"T"),"Time"),": ",j(m-o))))}const{version:z}=a(97107);function G(){return n.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600 star-pattern"},n.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col md:flex-row"},n.createElement("div",{className:"text-center md:text-left md:w-6/12"},n.createElement(B.Z,{icon:n.createElement(w,{height:75,style:{marginTop:1}}),text:n.createElement(y,{height:51,style:{top:19},className:"absolute"})}),n.createElement("p",{className:"mt-1 mb-0 text-base text-white sm:text-lg sm:max-w-xl sm:mx-auto md:text-xl md:mx-0 md:pr-4"},"A task runner and monorepo management tool for the web ecosystem, written in Rust."),n.createElement("p",{className:"mt-1 text-white opacity-50 text-sm md:text-base md:pr-4"},"Supports JavaScript, TypeScript, Rust, Go, Ruby,"," ",n.createElement(N.Z,{href:"/docs#supported-languages",variant:"muted"},"and more"),"."),n.createElement("div",{className:"mt-3 flex justify-center md:justify-start"},n.createElement("div",null,n.createElement(Q.Z,{href:"/docs/install"},"Get started",n.createElement(s.Z,{icon:l.XEr,className:"ml-1 md:ml-2 inline-block",style:{maxWidth:18}}))),n.createElement("div",{className:"ml-1 sm:ml-2 lg:ml-3"},n.createElement(r.default,{href:"https://www.npmjs.com/package/@moonrepo/cli",className:"w-full flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white bg-white/5 hover:scale-110 md:text-lg group transition-transform"},n.createElement("span",{className:"opacity-50"},"v"),z)))),n.createElement("div",{className:"mt-4 md:mt-0 md:w-6/12 flex flex-col flex-grow-0"},n.createElement(U,null),n.createElement("div",{className:"mt-2 flex justify-center items-start gap-1"},n.createElement("div",null,n.createElement(o.ZP,{className:"text-white opacity-50 m-0",size:"sm"},"Backed by")),n.createElement("div",null,n.createElement(R.Z,{height:22}))))))}var C=a(64654);const H=[{title:"Smart hashing",icon:l.QGx,description:"Collects inputs from multiple sources to ensure builds are deterministic and reproducible."},{title:"Remote caching",icon:l.wEO,description:"Persists builds, hashes, and caches between teammates and CI/CD environments."},{title:"Integrated toolchain",icon:l.AlB,description:"Automatically downloads and installs explicit versions of languages and tools for consistency across the entire workspace or per project."},{title:"Multi-platform",icon:l.Ff$,description:"Runs on common development platforms: Linux, macOS, and Windows."}],P=[{title:"Project graph",icon:l.Bkj,description:"Generates a project graph for dependency and dependent relationships."},{title:"Code generation",icon:l.Krp,description:"Easily scaffold new applications, libraries, tooling, and more!"},{title:"Task inheritance",icon:l.JUO,description:"Define a task once to be inherited by all or scoped projects. Avoid defining the same task in every project."},{title:"Code ownership",icon:l.iJk,description:"Declare owners, maintainers, support channels, and more. Generate CODEOWNERS.",status:"new"}],T=[{title:"Dependency graph",icon:l.Hw7,description:"Generates a dependency graph to increase performance and reduce workloads."},{title:"Action pipeline",icon:l.ar8,description:"Executes actions in parallel and in order using a thread pool and our dependency graph."},{title:"Action distribution",icon:l.fjp,description:"Distributes actions across multiple machines to increase throughput.",status:"coming-soon"},{title:"Incremental builds",icon:l.dzC,description:"With our smart hashing, only rebuild projects that have been touched since the last build."}],D=[{title:"Flakiness detection",icon:l.I85,description:"Reduce flaky builds with automatic retries and passthrough settings."},{title:"Webhook events",icon:l.$IR,description:"Receive a webhook for every event in the pipeline. Useful for metrics gathering and insights.",status:"experimental"},{title:"Terminal notifications",icon:l.Azy,description:"Receives notifications in your chosen terminal when builds are successful... or are not.",status:"coming-soon"},{title:"Git hooks",icon:l.tx1,description:"Manage Git hooks to enforce workflows and requirements for contributors.",status:"new"}],K=[{title:"Configuration & convention",icon:l.auv,description:"Use moon the way you want, but with some guard rails."},{title:"Scalability aware",icon:l.o$R,description:"Engineered to scale and grow for codebases of any size."},{title:"Integrated packages",icon:l.m_D,description:n.createElement(n.Fragment,null,"Enhance your pipeline with our"," ",n.createElement(r.default,{href:"https://www.npmjs.com/org/moonrepo"},"@moonrepo")," npm packages."),status:"in-development"},{title:"Process inspection",icon:l.BC0,description:"Inspect and debug failing task processes.",status:"coming-soon"},{title:"Build profiles",icon:l.b2$,description:n.createElement(n.Fragment,null,"Record ",n.createElement(r.default,{href:"/docs/guides/profile"},"CPU and heap profiles")," that can be analyzed in Chrome.")},{title:"Editor extensions",icon:l.E_d,description:n.createElement(n.Fragment,null,"Utilize moon extensions in your favorite editor, like"," ",n.createElement(r.default,{href:"/docs/editors/vscode"},"Visual Studio Code"),".")}];function S(){return n.createElement(C.Z,{title:"moon - A task runner and monorepo management tool for the web ecosystem, written in Rust",description:"Reduces build times and repository maintenance costs through high-quality developer tooling."},n.createElement(G,null),n.createElement("main",null,n.createElement("div",{className:"bg-gradient-to-b from-slate-600 via-purple-600 to-white"},n.createElement(f.Z,{header:"Management",description:"Develop more, manage less",features:H,tier:1}),n.createElement(f.Z,{header:"Organization",description:"Architect a repository to scale",features:P,tier:2,reversed:!0}),n.createElement(f.Z,{header:"Orchestration",description:"Offload heavy tasks",features:T,tier:3}),n.createElement(f.Z,{header:"Notification",description:"Monitor pipeline health",features:D,tier:4,reversed:!0})),n.createElement(m,{header:"And many more features",features:K})))}},9619:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),r=a(40624),l=a(31792);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:a,text:i,variant:o}=e;return n.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",o?s[o]:"bg-gray-100 text-gray-800",t)},a&&n.createElement(l.Z,{icon:a,className:"mr-1"}),i)}},97107:e=>{e.exports=JSON.parse('{"name":"@moonrepo/cli","version":"1.15.2","description":"moon command line and core system.","keywords":["moon","repo","cli","core"],"files":["moon","postinstall.js"],"author":"Miles Johnson","license":"MIT","bin":{"moon":"moon"},"repository":{"type":"git","url":"https://github.com/moonrepo/moon","directory":"packages/cli"},"scripts":{"postinstall":"node ./postinstall.js"},"dependencies":{"detect-libc":"^2.0.2"},"optionalDependencies":{"@moonrepo/core-linux-arm64-gnu":"^1.15.2","@moonrepo/core-linux-arm64-musl":"^1.15.2","@moonrepo/core-linux-x64-gnu":"^1.15.2","@moonrepo/core-linux-x64-musl":"^1.15.2","@moonrepo/core-macos-arm64":"^1.15.2","@moonrepo/core-macos-x64":"^1.15.2","@moonrepo/core-windows-x64-msvc":"^1.15.2"}}')}}]); \ No newline at end of file diff --git a/assets/js/1947.50774d97.js b/assets/js/1947.50774d97.js deleted file mode 100644 index db7cda9b98b..00000000000 --- a/assets/js/1947.50774d97.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1947],{21947:(c,s,z)=>{z.d(s,{$IR:()=>e,AKf:()=>f,AlB:()=>j,Azy:()=>o,BC0:()=>w,BDt:()=>E,Bkj:()=>O,CSB:()=>x,EQ8:()=>J,E_d:()=>B,Ff$:()=>n,HX7:()=>g,Hw7:()=>l,I85:()=>h,JUO:()=>t,Krp:()=>p,OxJ:()=>i,QGx:()=>H,XEC:()=>L,XEr:()=>b,ar8:()=>a,auv:()=>V,b2$:()=>C,cp3:()=>A,dzC:()=>D,eDR:()=>N,fjp:()=>y,gfM:()=>r,h94:()=>$,iJk:()=>Q,m_D:()=>m,o$R:()=>S,pmO:()=>k,tx1:()=>v,wEO:()=>d,zZQ:()=>u});var V={prefix:"fad",iconName:"sliders-up",icon:[512,512,["sliders-v"],"f3f1",["M96 0C78.3 0 64 14.3 64 32V86.7C73.8 82.4 84.6 80 96 80s22.2 2.4 32 6.7V32c0-17.7-14.3-32-32-32zM64 233.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V233.3c-9.8 4.3-20.6 6.7-32 6.7s-22.2-2.4-32-6.7zM256 0c-17.7 0-32 14.3-32 32V278.7c9.8-4.3 20.6-6.7 32-6.7s22.2 2.4 32 6.7V32c0-17.7-14.3-32-32-32zM224 425.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V425.3c-9.8 4.3-20.6 6.7-32 6.7s-22.2-2.4-32-6.7zM448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32v86.7c9.8-4.3 20.6-6.7 32-6.7s22.2 2.4 32 6.7V32zM384 265.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V265.3c-9.8 4.3-20.6 6.7-32 6.7s-22.2-2.4-32-6.7z","M96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 112A80 80 0 1 0 96 80a80 80 0 1 0 0 160zm160 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 112a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM384 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm112 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z"]]},H={prefix:"fad",iconName:"fingerprint",icon:[512,512,[],"f577",["M256 80c97.2 0 176 78.8 176 176v24.9c0 27.7-1.7 55.3-5 82.7c-1.4 11.7-11.5 20.3-23.3 20.3c-14.7 0-25.9-13.2-24.2-27.8c3-24.9 4.4-50.1 4.4-75.3V256c0-70.7-57.3-128-128-128c-11.6 0-22.8 1.5-33.4 4.4c-10.6 2.9-22.3 .4-29.4-7.9c-10.4-12.1-6.9-30.9 8.3-35.9C218.6 83 237 80 256 80zM150.7 148.7c8.2 9.6 7.5 23.8 .2 34.2C136.5 203.6 128 228.8 128 256v24.9c0 28.9-3.3 57.7-9.7 85.8C115.9 377 106.6 384 96.1 384c-15.9 0-27.3-15.6-23.9-31.1c5.2-23.6 7.8-47.7 7.8-71.9V256c0-40.6 13.7-78 36.8-107.7c8.5-11 24.8-10.2 33.9 .4zM280 256v24.9c0 65.8-12.1 131-35.7 192.4l-5.9 15.3c-4.8 12.4-18.6 18.5-31 13.8s-18.5-18.6-13.8-31l5.9-15.3C221 400.2 232 340.8 232 280.9V256c0-13.3 10.7-24 24-24s24 10.7 24 24z","M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256c0-18.1-1.9-35.8-5.5-52.9zM352 256c0-53-43-96-96-96s-96 43-96 96v24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7V256c0-28.7 23.3-52 52-52s52 23.3 52 52v24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1V256z"]]},a={prefix:"fad",iconName:"merge",icon:[512,512,[],"e526",["M243.8 252l3.2 4L154.2 372c-6.1 7.6-15.3 12-25 12H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h97.2c29.2 0 56.7-13.3 75-36l99.2-124h15.4c-29.2 0-56.7-13.3-75-36z","M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32h97.2c9.7 0 18.9 4.4 25 12l89.6 112c18.2 22.8 45.8 36 75 36H384v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c6-6 9.4-14.1 9.4-22.6s-3.4-16.6-9.4-22.6l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H318.8c-9.7 0-18.9-4.4-25-12L204.2 100c-18.2-22.8-45.8-36-75-36H32z"]]},e={prefix:"fad",iconName:"webhook",icon:[576,512,[],"e5d5",["M210.1 110C220 67 262.9 40.1 306 50.1c41.1 9.5 67.5 49.2 61.1 90.2c-2.1 13.1 6.9 25.4 20 27.4s25.4-6.9 27.4-20C424.8 82 382.6 18.5 316.8 3.3c-68.9-15.9-137.6 27-153.5 95.9c-10.7 46.3 5.2 92.6 37.7 122.7L129.7 336c17.7 .6 32.9 10.7 40.7 25.4l82.8-132.5c3.4-5.4 4.5-11.9 3-18.1s-5.3-11.6-10.7-15c-28.2-17.6-43.4-51.7-35.5-85.9zm120.3 40.5c-7.8 14.7-23.1 24.8-40.7 25.4l82.8 132.5c3.4 5.4 8.8 9.2 15 10.7s12.7 .3 18.1-3c30.9-19.3 72.1-15.5 99 11.3c31.2 31.2 31.2 81.9 0 113.1c-26.8 26.8-68.1 30.6-99 11.3c-11.2-7-26-3.6-33.1 7.6s-3.6 26 7.6 33.1c49.4 31 115.4 25 158.4-18c50-50 50-131 0-181c-37-37-91-46.6-136.8-28.9L330.4 150.5zM110.1 278.8c-5.1-12.2-19.1-18-31.4-12.9C22.1 289.4-11 351 3.3 412.8c15.9 68.9 84.6 111.8 153.5 95.9c51-11.8 87.7-52.5 97-100.7H406.4c-4.1-7.1-6.4-15.3-6.4-24s2.3-16.9 6.4-24H232c-6.4 0-12.5 2.5-17 7s-7 10.6-7 17c0 36.4-25 69.4-62 77.9c-43.1 9.9-86-16.9-95.9-60c-8.9-38.6 11.7-77.1 47.1-91.8c12.2-5.1 18-19.1 12.9-31.4z","M288 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM176 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm320 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z"]]},i={prefix:"fad",iconName:"radar",icon:[512,512,[],"e024",["M350.9 127.2l-46.1 46.1c-14.3-8.4-31-13.3-48.8-13.3c-53 0-96 43-96 96s43 96 96 96s96-43 96-96h64c0 73.5-49.6 135.5-117.2 154.2C290.8 394.7 274.7 384 256 384s-34.8 10.7-42.8 26.2c-51.7-14.3-92.8-53.9-109.4-104.6c14.4-8.3 24.1-23.8 24.1-41.7c0-19.4-11.5-36.1-28-43.7C116.2 149.1 179.9 96 256 96c35.5 0 68.3 11.6 94.9 31.2zm22.8-22.8C341.2 79 300.4 64 256 64C163.1 64 85.7 129.9 67.9 217.6C47.2 222.9 32 241.7 32 264c0 23.8 17.3 43.6 40.1 47.4c19.3 64.3 71.5 114.4 137 130.9C213.8 463.8 233 480 256 480s42.2-16.2 46.9-37.8C386.3 421.3 448 345.9 448 256h64c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0c62.1 0 118.9 22.1 163.3 58.8l-45.5 45.5z","M497 49c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-182 182c-7.7-3.3-16.1-5.1-25-5.1c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64c0-8.9-1.8-17.3-5.1-25L497 49z"]]},l={prefix:"fad",iconName:"sitemap",icon:[576,512,[],"f0e8",["M264 280v40h48V280H464c4.4 0 8 3.6 8 8v32h48V288c0-30.9-25.1-56-56-56H312V192H264v40H112c-30.9 0-56 25.1-56 56v32h48V288c0-4.4 3.6-8 8-8H264z","M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V80zM48 320h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48zm208 0h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48zm208 0h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48z"]]},M={prefix:"fad",iconName:"box-taped",icon:[448,512,["box-alt"],"f49a",["M50.7 58.5C58.9 42.3 75.5 32 93.7 32H192L160 160H0L50.7 58.5zM288 160v96c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V160H288zm0 0L256 32h98.3c18.2 0 34.8 10.3 42.9 26.5L448 160H288z","M160 160H0V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V160H288v96c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V160z"]]},m=M,o={prefix:"fad",iconName:"bell-on",icon:[640,512,[128365],"f8fa",["M320 0c-17.7 0-32 14.3-32 32V51.2C215 66 160 130.6 160 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S115.4 416 128 416H512c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C497.3 319.2 480 273.9 480 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32z","M586.7 53.5c11.9-5.9 16.7-20.3 10.7-32.2s-20.3-16.7-32.2-10.7l-64 32c-11.9 5.9-16.7 20.3-10.7 32.2s20.3 16.7 32.2 10.7l64-32zM0 200c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H24c-13.3 0-24 10.7-24 24zm512 0c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H536c-13.3 0-24 10.7-24 24zM42.5 21.3c-5.9 11.9-1.1 26.3 10.7 32.2l64 32c11.9 5.9 26.3 1.1 32.2-10.7s1.1-26.3-10.7-32.2l-64-32C62.9 4.6 48.5 9.4 42.5 21.3zm322.7 472c12-12 18.7-28.3 18.7-45.3H320 256c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z"]]},f={prefix:"fad",iconName:"notes-medical",icon:[512,512,[],"f481",["M96 96V352c0 35.3 28.7 64 64 64H357.5c17 0 33.3-6.7 45.3-18.7l58.5-58.5c12-12 18.7-28.3 18.7-45.3V96c0-35.3-28.7-64-64-64H160c-35.3 0-64 28.7-64 64zm160 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V256H208c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16h48V144z","M296 464c13.3 0 24 10.7 24 24s-10.7 24-24 24H136C60.9 512 0 451.1 0 376V152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88H296zM256 144c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48l48 0c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V256H208c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16l48 0V144z"]]},n={prefix:"fad",iconName:"microchip",icon:[512,512,[],"f2db",["M152 0c-13.3 0-24 10.7-24 24V64h48V24c0-13.3-10.7-24-24-24zm80 24V64h48V24c0-13.3-10.7-24-24-24s-24 10.7-24 24zm104 0V64h48V24c0-13.3-10.7-24-24-24s-24 10.7-24 24zM488 128H448v48h40c13.3 0 24-10.7 24-24s-10.7-24-24-24zm0 104H448v48h40c13.3 0 24-10.7 24-24s-10.7-24-24-24zm0 104H448v48h40c13.3 0 24-10.7 24-24s-10.7-24-24-24zM384 488V448H336v40c0 13.3 10.7 24 24 24s24-10.7 24-24zM280 448H232v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448zm-104 0H128v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448zM24 384H64V336H24c-13.3 0-24 10.7-24 24s10.7 24 24 24zM64 280V232H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64zM24 128c-13.3 0-24 10.7-24 24s10.7 24 24 24H64V128H24zm328 32H160V352H352V160z","M128 64c-35.3 0-64 28.7-64 64V384c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H128zm32 64H352c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32z"]]},C={prefix:"fad",iconName:"aperture",icon:[512,512,[],"e2df",["M336.4 12.9C400.2 34 453 79.5 483.5 138.4c5.2 10.1-2.5 21.6-13.8 21.6H265.2c-12.3 0-20-13.3-13.9-24l67-116c3.6-6.3 11.1-9.4 18-7.1zM0 256c0-50.9 14.9-98.3 40.5-138.2c6.1-9.5 19.9-8.6 25.6 1.2L168.2 296c6.2 10.7-1.5 24-13.9 24H20.5c-7.3 0-13.7-4.9-15.2-12.1C1.8 291.2 0 273.8 0 256zM256 512c-4 0-7.9-.1-11.9-.3c-11.3-.5-17.5-12.9-11.8-22.8L334.5 312c6.2-10.7 21.6-10.7 27.7 0l66.9 115.9c3.6 6.3 2.6 14.3-2.9 19.2C381.1 487.5 321.4 512 256 512z","M256 0c4 0 7.9 .1 11.9 .3c11.3 .5 17.4 12.9 11.8 22.8L177.5 200c-6.2 10.7-21.6 10.7-27.7 0L82.8 84.1c-3.6-6.3-2.6-14.3 2.9-19.2C130.9 24.5 190.6 0 256 0zM193.6 492c-3.6 6.3-11.1 9.4-18 7.1C111.8 478 59 432.5 28.5 373.6C23.3 363.5 31 352 42.3 352H246.8c12.3 0 20 13.3 13.9 24l-67 116zm277.9-97.8c-6.1 9.5-19.9 8.6-25.6-1.2L343.8 216c-6.2-10.7 1.5-24 13.9-24H491.5c7.3 0 13.7 4.9 15.2 12.1c3.5 16.8 5.3 34.1 5.3 51.9c0 50.9-14.9 98.3-40.5 138.2z"]]},r={prefix:"fad",iconName:"star-shooting",icon:[512,512,[127776],"e036",["M313 7c-9.4-9.4-24.6-9.4-33.9 0L231 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9zM505 199c-9.4-9.4-24.6-9.4-33.9 0l-48 48c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9zM505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L327 151c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L505 41z","M213.4 157.4c-8.8-17.9-34.3-17.9-43.1 0l-46.3 94L20.5 266.5C.9 269.3-7 293.5 7.2 307.4l74.9 73.2L64.5 483.9c-3.4 19.6 17.2 34.6 34.8 25.3l92.6-48.8 92.6 48.8c17.6 9.3 38.2-5.7 34.8-25.3L301.6 380.6l74.9-73.2c14.2-13.9 6.4-38.1-13.3-40.9L259.7 251.4l-46.3-94z"]]},v={prefix:"fad",iconName:"scroll",icon:[576,512,[128220],"f70e",["M128 96V400c0 44.2 35.8 80 80 80s80-35.8 80-80V384c0-17.7 14.3-32 32-32H480V96c0-35.3-28.7-64-64-64H64c35.3 0 64 28.7 64 64z","M128 160H32c-17.7 0-32-14.3-32-32V96C0 60.7 28.7 32 64 32s64 28.7 64 64v64zM288 400V384c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32c0 53-43 96-96 96H208c44.2 0 80-35.8 80-80z"]]},d={prefix:"fad",iconName:"cloud-arrow-up",icon:[640,512,[62338,"cloud-upload","cloud-upload-alt"],"f0ee",["M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V392c0 13.3 10.7 24 24 24s24-10.7 24-24V257.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z","M223 297c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-39-39L344 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-134.1-39 39c-9.4 9.4-24.6 9.4-33.9 0z"]]},h={prefix:"fad",iconName:"shield-halved",icon:[512,512,["shield-alt"],"f3ed",["M256 0c.2 0 .5 0 .7 0c4.6 0 9.2 1 13.4 2.9L458.4 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-8.3 4-17.4 6-26.4 6V0H256z","M256.7 0c-.2 0-.5 0-.7 0c-4.6 0-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c8.3 4 17.4 6 26.4 6V0h.7z"]]},p={prefix:"fad",iconName:"layer-group",icon:[576,512,[],"f5fd",["M324.9 279.8l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z","M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 337.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2z"]]},L={prefix:"fad",iconName:"leaf",icon:[512,512,[],"f06c",["M96.4 260.1C102.5 168.5 178.8 96 272 96l104 0c42.7 0 79.9-23.9 98.8-59.1c3.5-6.5 13.6-6.8 16.2 .1c13.5 36.5 21.1 77 21.1 119.6C512 317.1 405.1 447.3 273 448l-1 0c-81.7 0-150.4-55.7-170.2-131.2C131.7 289 171.9 272 216 272h72c13.3 0 24-10.7 24-24s-10.7-24-24-24H216c-44.2 0-85.4 13.3-119.6 36.1z","M216 272c-92.8 0-168 75.2-168 168v16c0 13.3-10.7 24-24 24s-24-10.7-24-24V440C0 320.7 96.7 224 216 224h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H216z"]]},x={prefix:"fad",iconName:"space-station-moon",icon:[512,512,[],"e033",["M512 256c0 7.8-.3 15.5-1 23.1C438.8 304.7 351.2 320 256 320s-182.8-15.3-255-40.9c-.7-7.6-1-15.3-1-23.1C0 114.6 114.6 0 256 0S512 114.6 512 256zM256 512C134.9 512 33.4 427.9 6.8 314.8C79.4 338.4 164.7 352 256 352s176.6-13.6 249.2-37.2C478.6 427.9 377.1 512 256 512zM192 240a80 80 0 1 0 0-160 80 80 0 1 0 0 160z","M224 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-112 0a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM6.8 314.8C4.1 303.2 2.1 291.3 1 279.1C73.2 304.7 160.8 320 256 320s182.8-15.3 255-40.9c-1.1 12.2-3 24.1-5.8 35.8C432.6 338.4 347.3 352 256 352s-176.6-13.6-249.2-37.2z"]]},N={prefix:"fad",iconName:"screwdriver-wrench",icon:[512,512,["tools"],"f7d9",["M168.4 247.6L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7zM429 274.5c49-23 83-72.8 83-130.5c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7H352c-8.8 0-16-7.2-16-16V102.6c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144c0 .3 0 .5 0 .8l85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z","M47 7c8.5-8.5 22-9.4 31.6-2.1l104 80c5.9 4.5 9.4 11.6 9.4 19v54.1l109 109c29-14.7 65.4-10 89.6 14.3l112 112c12.5 12.5 12.5 32.8 0 45.3l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-112-112c-24.2-24.2-29-60.6-14.3-89.6l-109-109H104c-7.5 0-14.5-3.5-19-9.4L5 78.6C-2.4 69.1-1.5 55.6 7 47L47 7z"]]},t={prefix:"fad",iconName:"grid-dividers",icon:[512,512,[],"e3ad",["M64 96c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H64zm0 288c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H64zM192 128v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H224c-17.7 0-32 14.3-32 32zm32 256c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H224zM352 128v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H384c-17.7 0-32 14.3-32 32zm32 256c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H384z","M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zm0 288c-13.3 0-24 10.7-24 24s10.7 24 24 24H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24z"]]},u={prefix:"fad",iconName:"puzzle",icon:[512,512,[],"e443",["M320 0H448c35.3 0 64 28.7 64 64V192c0 8.8-7.2 16-16 16H444c-6.6 0-12 5.4-12 12v4c0 17.7-14.3 32-32 32s-32-14.3-32-32v-4c0-6.6-5.4-12-12-12l-36 0c-8.8 0-16-7.2-16-16V160c0-8.8 7.2-16 16-16h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-8.8 0-16-7.2-16-16V16c0-8.8 7.2-16 16-16zM224 448v64H64c-35.3 0-64-28.7-64-64V288H64c8.8 0 16-7.2 16-16V256c0-17.7 14.3-32 32-32s32 14.3 32 32v16c0 8.8 7.2 16 16 16h64v64c0 8.8-7.2 16-16 16H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h16c8.8 0 16 7.2 16 16z","M0 288H64c8.8 0 16-7.2 16-16V256c0-17.7 14.3-32 32-32s32 14.3 32 32v16c0 8.8 7.2 16 16 16h64V220c0-6.6 5.4-12 12-12h4c17.7 0 32-14.3 32-32s-14.3-32-32-32h-4c-6.6 0-12-5.4-12-12V80c0-8.8-7.2-16-16-16H64C28.7 64 0 92.7 0 128V288zm224 0v64c0 8.8-7.2 16-16 16H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h16c8.8 0 16 7.2 16 16v64H384c35.3 0 64-28.7 64-64V304c0-8.8-7.2-16-16-16H384c-8.8 0-16 7.2-16 16v16c0 17.7-14.3 32-32 32s-32-14.3-32-32V304c0-8.8-7.2-16-16-16H224z"]]},b={prefix:"fad",iconName:"rocket-launch",icon:[512,512,[128640],"e027",["M118.5 288H24c-8.7 0-16.7-4.7-20.9-12.2s-4.1-16.8 .4-24.2l52.8-86.9C69.3 143.2 92.6 130 117.8 130h80.8c-28.5 45.8-60.7 114.5-80.1 158zM382 313.4v80.8c0 25.2-13.1 48.5-34.6 61.5l-86.9 52.8c-7.4 4.5-16.7 4.7-24.2 .4s-12.2-12.2-12.2-20.9l0-96.2c43.9-19.1 112.4-50.3 158-78.4zM166.5 470C132.3 504.3 66 511 28.3 511.9c-16 .4-28.6-12.2-28.2-28.2C1 446 7.7 379.7 42 345.5c34.4-34.4 90.1-34.4 124.5 0s34.4 90.1 0 124.5zm-46.7-36.4c11.4-11.4 11.4-30 0-41.4s-30-11.4-41.4 0c-10.1 10.1-13 28.5-13.7 41.3c-.5 8 5.9 14.3 13.9 13.9c12.8-.7 31.2-3.7 41.3-13.7z","M223.7 391.9c-4-56-49.1-100.6-105.3-103.8c21.4-47.9 58.4-126.6 88.8-171.5C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-44.7 30.3-123.1 66.2-171.6 87.2zM424 128a40 40 0 1 0 -80 0 40 40 0 1 0 80 0z"]]},g={prefix:"fad",iconName:"square-kanban",icon:[448,512,[],"e488",["M64 480c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64zm64-160c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V288c0 17.7 14.3 32 32 32zm160 32c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V352zm-64-96c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32z","M288 352c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V352zM96 288c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V288zm128-32c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32z"]]},w={prefix:"fad",iconName:"user-secret",icon:[448,512,[128373],"f21b",["M128 169.6V184c0 22.1 17.9 40 40 40h12.4c16.5 0 31.1-10.6 36.3-26.2c2.3-7 12.2-7 14.5 0c5.2 15.6 19.9 26.2 36.3 26.2H280c22.1 0 40-17.9 40-40V169.6c5.5-.8 10.9-1.7 16-2.6v17c0 61.9-50.1 112-112 112s-112-50.1-112-112V167c5.1 .9 10.5 1.8 16 2.6z","M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 17.8 38.6 33.3 96 41.6V184c0 22.1 17.9 40 40 40h12.4c16.5 0 31.1-10.6 36.3-26.2c2.3-7 12.2-7 14.5 0c5.2 15.6 19.9 26.2 36.3 26.2H280c22.1 0 40-17.9 40-40V169.6c57.4-8.3 96-23.8 96-41.6c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm44.1 496H417.3c17 0 30.7-13.8 30.7-30.7c0-57-29.6-107.1-74.2-135.8L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4h-59L273.7 490.5l-34-116.6 17.8-29.6c6.4-10.7-1.3-24.2-13.7-24.2H224 204.3c-12.4 0-20.1 13.6-13.7 24.2l17.8 29.6-34 116.6L104.4 224h-59C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5L74.2 345.5C29.6 374.2 0 424.3 0 481.3c0 17 13.8 30.7 30.7 30.7H179.9h88.1z"]]},k={prefix:"fad",iconName:"solar-system",icon:[512,512,[],"e02f",["M411.8 368.2C434.6 336.6 448 297.9 448 256c0-106-86-192-192-192c-29 0-56.6 6.4-81.2 18c-4-22.5-17.4-41.8-36-53.6C173.9 10.2 213.7 0 256 0C397.4 0 512 114.6 512 256c0 56.3-18.2 108.3-48.9 150.6c-4.4-22-23.8-38.6-47.1-38.6c-1.4 0-2.8 .1-4.2 .2zm-74.7 61.9c3.8 22.6 17.1 41.9 35.6 53.8c-35 18-74.7 28.1-116.8 28.1C114.6 512 0 397.4 0 256c0-56.3 18.2-108.3 48.9-150.6C53.3 127.4 72.7 144 96 144c1.4 0 2.8-.1 4.2-.2C77.4 175.4 64 214.1 64 256c0 106 86 192 192 192c29 0 56.5-6.4 81.1-17.9zM256 152c-57.4 0-104 46.6-104 104s46.6 104 104 104s104-46.6 104-104c0-17.4-4.3-33.8-11.8-48.2c1.3 .1 2.5 .2 3.8 .2c16.9 0 31.3-10.5 37.2-25.3c12 21.7 18.8 46.7 18.8 73.3c0 83.9-68.1 152-152 152s-152-68.1-152-152s68.1-152 152-152c31.3 0 60.4 9.5 84.5 25.7C324 134.6 312 149.9 312 168c0 .1 0 .2 0 .4C295.8 158 276.6 152 256 152z","M96 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM416 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM392 168a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM256 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128z"]]},S={prefix:"fad",iconName:"circle-bolt",icon:[512,512,[],"e0fe",["M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm74.1-396.4c5.8 4.7 7.6 12.9 4.2 19.6L281.9 240H352c6.8 0 12.9 4.3 15.1 10.7s.2 13.5-5.1 17.8l-160 128c-5.9 4.7-14.2 4.7-20.1-.1s-7.6-12.9-4.3-19.6L230.1 272H160c-6.8 0-12.8-4.3-15.1-10.7s-.2-13.5 5.1-17.8l160-128c5.9-4.7 14.2-4.7 20.1 .1z","M334.3 135.2c3.4-6.7 1.6-14.9-4.2-19.6s-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7h70.1L177.7 376.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7H281.9l52.4-104.8z"]]},A={prefix:"fad",iconName:"timeline",icon:[640,512,[],"e29c",["M512 176c11.4 0 22.2-2.4 32-6.7V224h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H352v54.7c-9.8-4.3-20.6-6.7-32-6.7s-22.2 2.4-32 6.7V288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96V169.3c9.8 4.3 20.6 6.7 32 6.7s22.2-2.4 32-6.7V224H480V169.3c9.8 4.3 20.6 6.7 32 6.7z","M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0 104a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM512 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0 104a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM296 416a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z"]]},B={prefix:"fad",iconName:"chart-tree-map",icon:[512,512,[],"e0ea",["M304 192c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48H304zM48 272c-26.5 0-48 21.5-48 48V432c0 26.5 21.5 48 48 48H176c26.5 0 48-21.5 48-48V320c0-26.5-21.5-48-48-48H48z","M0 80C0 53.5 21.5 32 48 32H176c26.5 0 48 21.5 48 48V192c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80zm256 0c0-26.5 21.5-48 48-48H464c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H304c-26.5 0-48-21.5-48-48V80zm48 272H464c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H304c-26.5 0-48-21.5-48-48V400c0-26.5 21.5-48 48-48z"]]},E={prefix:"fad",iconName:"bolt",icon:[448,512,[9889,"zap"],"f0e7",["M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288H175.5L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7H272.5L349.4 44.6z",""]]},j={prefix:"fad",iconName:"toolbox",icon:[512,512,[129520],"f552",["M176 88v40H128V88c0-30.9 25.1-56 56-56H328c30.9 0 56 25.1 56 56v40H336V88c0-4.4-3.6-8-8-8H184c-4.4 0-8 3.6-8 8zM0 320H128v32c0 17.7 14.3 32 32 32s32-14.3 32-32V320H320v32c0 17.7 14.3 32 32 32s32-14.3 32-32V320H512v96c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320z","M0 320V234.5c0-17 6.7-33.3 18.7-45.3l42.5-42.5c12-12 28.3-18.7 45.3-18.7h299c17 0 33.3 6.7 45.3 18.7l42.5 42.5c12 12 18.7 28.3 18.7 45.3V320H384V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v32H192V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v32H0z"]]},y={prefix:"fad",iconName:"diagram-sankey",icon:[576,512,[],"e158",["M32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32H141.9l86.7 144.5c5.8 9.6 16.2 15.5 27.4 15.5H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H274.1l-57.6-96H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z","M294.4 44.8c6-8.1 15.5-12.8 25.6-12.8H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H336L249.6 211.2c-6 8.1-15.5 12.8-25.6 12.8H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H208L294.4 44.8z"]]},O={prefix:"fad",iconName:"diagram-project",icon:[576,512,["project-diagram"],"f542",["M144 224l80.3 107c2.5-24.2 22.9-43 47.7-43L191.7 181c-2.5 24.2-22.9 43-47.7 43zm48-64H384V96H192v64z","M0 80C0 53.5 21.5 32 48 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80zM224 336c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H272c-26.5 0-48-21.5-48-48V336zM432 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H432c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48z"]]},$={prefix:"fad",iconName:"message-code",icon:[512,512,[],"e1df",["M0 64C0 28.7 28.7 0 64 0H448c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H309.3L185.6 508.8c-4.8 3.6-11.3 4.2-16.8 1.5s-8.8-8.2-8.8-14.3V416H64c-35.3 0-64-28.7-64-64V64zm217 97c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-64 64c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47zM329 127c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9l-64-64z","M217 127c9.4 9.4 9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c9.4-9.4 24.6-9.4 33.9 0zm78.1 0c9.4-9.4 24.6-9.4 33.9 0l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"]]},D={prefix:"fad",iconName:"arrow-up-right-dots",icon:[576,512,[],"e4b7",["M528 128a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM400 256a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm128 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm336-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z","M128 32c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32V160c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3L54.6 310.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 64H160c-17.7 0-32-14.3-32-32z"]]},J={prefix:"fad",iconName:"circle-plus",icon:[512,512,["plus-circle"],"f055",["M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344V280H168c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z","M232 280v64c0 13.3 10.7 24 24 24s24-10.7 24-24V280h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V168c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64z"]]},Q={prefix:"fad",iconName:"rectangle-barcode",icon:[576,512,["barcode-alt"],"f463",["M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm56 96c13.3 0 24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm56 16c0-8.8 7.2-16 16-16s16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144zm88-16c13.3 0 24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm88 24c0-13.3 10.7-24 24-24s24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152zm112-24c8.8 0 16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144c0-8.8 7.2-16 16-16z","M96 152c0-13.3 10.7-24 24-24s24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152zm80-8c0-8.8 7.2-16 16-16s16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144zm88-16c13.3 0 24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm88 24c0-13.3 10.7-24 24-24s24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152zm112-24c8.8 0 16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144c0-8.8 7.2-16 16-16z"]]}}}]); \ No newline at end of file diff --git a/assets/js/195293b6.179bd183.js b/assets/js/195293b6.179bd183.js new file mode 100644 index 00000000000..ed4e07b3925 --- /dev/null +++ b/assets/js/195293b6.179bd183.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72484],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||l;return n?a.createElement(g,o(o({ref:t},u),{},{components:n})):a.createElement(g,o({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var p=2;p{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const p="tabList_J5MA",u="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:p}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=p[n].value;a!==i&&(d(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},o,{className:(0,l.Z)("tabs__item",u,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",p)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=p(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=c({queryString:n,groupId:r}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=d??g;return u({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),f(e)}),[m,f,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function p(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},78032:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=(n(27457),n(32189));const i={title:"Astro example",sidebar_label:"Astro"},s=void 0,p={unversionedId:"guides/examples/astro",id:"guides/examples/astro",title:"Astro example",description:"In this guide, you'll learn how to integrate Astro.",source:"@site/docs/guides/examples/astro.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/astro",permalink:"/docs/guides/examples/astro",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/astro.mdx",tags:[],version:"current",frontMatter:{title:"Astro example",sidebar_label:"Astro"},sidebar:"guides",previous:{title:"Angular",permalink:"/docs/guides/examples/angular"},next:{title:"ESLint",permalink:"/docs/guides/examples/eslint"}},u={},c=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"Prettier integration",id:"prettier-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],d={toc:c};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/astro-app",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build"},"Astro"),"."),(0,r.kt)("p",null,"Begin by creating a new Astro project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npm create astro@latest\n")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Astro is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Astro tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/astro"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"# Inherit tasks from the `astro` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['astro']\n\n# Disable project references\ntoolchain:\n typescript:\n syncProjectReferences: false\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"When using a ",(0,r.kt)("a",{parentName:"p",href:"./eslint"},(0,r.kt)("inlineCode",{parentName:"a"},"lint"))," task, the\n",(0,r.kt)("a",{parentName:"p",href:"https://ota-meshi.github.io/eslint-plugin-astro/user-guide/"},(0,r.kt)("inlineCode",{parentName:"a"},"eslint-plugin-astro"))," package must be\ninstalled to lint ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," files."),(0,r.kt)(l.Z,{dev:!0,dep:"eslint-plugin-astro",package:"",mdxType:"AddDepsTabs"}),(0,r.kt)("p",null,"Once the dependency has been installed in the application's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),". We can then enable this\nconfiguration by creating an ",(0,r.kt)("inlineCode",{parentName:"p"},".eslintrc.js")," file in the project root. Be sure this file is listed in\nyour lint task's inputs!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="/.eslintrc.js"',title:'"/.eslintrc.js"'},"module.exports = {\n extends: ['plugin:astro/recommended'],\n overrides: [\n {\n files: ['*.astro'],\n parser: 'astro-eslint-parser',\n // If using TypeScript\n parserOptions: {\n parser: '@typescript-eslint/parser',\n extraFileExtensions: ['.astro'],\n project: 'tsconfig.json',\n tsconfigRootDir: __dirname,\n },\n },\n ],\n};\n")),(0,r.kt)("p",null,"And lastly, when linting through moon's command line, you'll need to include the ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," extension\nwithin the ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task. This can be done by extending the top-level task within the project (below),\nor by adding it to the top-level entirely."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n lint:\n args:\n - '--ext'\n - '.ts,.tsx,.astro'\n")),(0,r.kt)("h3",{id:"prettier-integration"},"Prettier integration"),(0,r.kt)("p",null,"When using a ",(0,r.kt)("a",{parentName:"p",href:"./prettier"},(0,r.kt)("inlineCode",{parentName:"a"},"format"))," task, the ",(0,r.kt)("inlineCode",{parentName:"p"},"prettier-plugin-astro")," package must be installed to\nformat ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," files. View the official\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build/en/editor-setup/#prettier"},"Astro docs")," for more information."),(0,r.kt)(l.Z,{dev:!0,dep:"prettier-plugin-astro",package:"",mdxType:"AddDepsTabs"}),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Since Astro utilizes custom ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," files, it requires a specialized TypeScript integration, and\nluckily Astro provides an ",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build/en/guides/typescript/"},"in-depth guide"),". With\nthat being said, we do have a few requirements and pointers!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use the official ",(0,r.kt)("a",{parentName:"li",href:"https://docs.astro.build/en/guides/typescript/#setup"},"Astro ",(0,r.kt)("inlineCode",{parentName:"a"},"tsconfig.json"))," as\na basis."),(0,r.kt)("li",{parentName:"ul"},"From our internal testing, the ",(0,r.kt)("inlineCode",{parentName:"li"},"astro check")," command (that typechecks ",(0,r.kt)("inlineCode",{parentName:"li"},".astro")," files) ",(0,r.kt)("em",{parentName:"li"},"does not\nsupport project references"),". If the ",(0,r.kt)("inlineCode",{parentName:"li"},"composite")," compiler option is enabled, the checker will fail\nto find ",(0,r.kt)("inlineCode",{parentName:"li"},".astro")," files. To work around this, we disable ",(0,r.kt)("inlineCode",{parentName:"li"},"workspace.typescript")," in our moon config\nabove."),(0,r.kt)("li",{parentName:"ul"},"Since typechecking requires 2 commands, one for ",(0,r.kt)("inlineCode",{parentName:"li"},".astro")," files, and the other for ",(0,r.kt)("inlineCode",{parentName:"li"},".ts"),", ",(0,r.kt)("inlineCode",{parentName:"li"},".tsx"),"\nfiles, we've added the ",(0,r.kt)("a",{parentName:"li",href:"./typescript"},(0,r.kt)("inlineCode",{parentName:"a"},"typecheck"))," task as a dependency for the ",(0,r.kt)("inlineCode",{parentName:"li"},"check")," task. This\nwill run both commands through a single task!")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Astro should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"astro")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Astro project, a\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build/en/reference/configuration-reference/"},(0,r.kt)("inlineCode",{parentName:"a"},"astro.config.mjs"))," is created, and\n",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure Astro for their needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="/astro.config.mjs"',title:'"/astro.config.mjs"'},"import { defineConfig } from 'astro/config';\n\n// https://astro.build/config\nexport default defineConfig({});\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/195293b6.3b6e5efa.js b/assets/js/195293b6.3b6e5efa.js deleted file mode 100644 index dd97804a7d5..00000000000 --- a/assets/js/195293b6.3b6e5efa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2484],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||l;return n?a.createElement(g,o(o({ref:t},u),{},{components:n})):a.createElement(g,o({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var p=2;p{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const p="tabList_J5MA",u="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:p}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=p[n].value;a!==i&&(d(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},o,{className:(0,l.Z)("tabs__item",u,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",p)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=p(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=c({queryString:n,groupId:r}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=d??g;return u({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),f(e)}),[m,f,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function p(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},78032:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=(n(27457),n(32189));const i={title:"Astro example",sidebar_label:"Astro"},s=void 0,p={unversionedId:"guides/examples/astro",id:"guides/examples/astro",title:"Astro example",description:"In this guide, you'll learn how to integrate Astro.",source:"@site/docs/guides/examples/astro.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/astro",permalink:"/docs/guides/examples/astro",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/astro.mdx",tags:[],version:"current",frontMatter:{title:"Astro example",sidebar_label:"Astro"},sidebar:"guides",previous:{title:"Angular",permalink:"/docs/guides/examples/angular"},next:{title:"ESLint",permalink:"/docs/guides/examples/eslint"}},u={},c=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"Prettier integration",id:"prettier-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],d={toc:c};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/astro-app",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build"},"Astro"),"."),(0,r.kt)("p",null,"Begin by creating a new Astro project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npm create astro@latest\n")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Astro is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Astro tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/astro"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"# Inherit tasks from the `astro` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['astro']\n\n# Disable project references\ntoolchain:\n typescript:\n syncProjectReferences: false\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"When using a ",(0,r.kt)("a",{parentName:"p",href:"./eslint"},(0,r.kt)("inlineCode",{parentName:"a"},"lint"))," task, the\n",(0,r.kt)("a",{parentName:"p",href:"https://ota-meshi.github.io/eslint-plugin-astro/user-guide/"},(0,r.kt)("inlineCode",{parentName:"a"},"eslint-plugin-astro"))," package must be\ninstalled to lint ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," files."),(0,r.kt)(l.Z,{dev:!0,dep:"eslint-plugin-astro",package:"",mdxType:"AddDepsTabs"}),(0,r.kt)("p",null,"Once the dependency has been installed in the application's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),". We can then enable this\nconfiguration by creating an ",(0,r.kt)("inlineCode",{parentName:"p"},".eslintrc.js")," file in the project root. Be sure this file is listed in\nyour lint task's inputs!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="/.eslintrc.js"',title:'"/.eslintrc.js"'},"module.exports = {\n extends: ['plugin:astro/recommended'],\n overrides: [\n {\n files: ['*.astro'],\n parser: 'astro-eslint-parser',\n // If using TypeScript\n parserOptions: {\n parser: '@typescript-eslint/parser',\n extraFileExtensions: ['.astro'],\n project: 'tsconfig.json',\n tsconfigRootDir: __dirname,\n },\n },\n ],\n};\n")),(0,r.kt)("p",null,"And lastly, when linting through moon's command line, you'll need to include the ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," extension\nwithin the ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task. This can be done by extending the top-level task within the project (below),\nor by adding it to the top-level entirely."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n lint:\n args:\n - '--ext'\n - '.ts,.tsx,.astro'\n")),(0,r.kt)("h3",{id:"prettier-integration"},"Prettier integration"),(0,r.kt)("p",null,"When using a ",(0,r.kt)("a",{parentName:"p",href:"./prettier"},(0,r.kt)("inlineCode",{parentName:"a"},"format"))," task, the ",(0,r.kt)("inlineCode",{parentName:"p"},"prettier-plugin-astro")," package must be installed to\nformat ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," files. View the official\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build/en/editor-setup/#prettier"},"Astro docs")," for more information."),(0,r.kt)(l.Z,{dev:!0,dep:"prettier-plugin-astro",package:"",mdxType:"AddDepsTabs"}),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Since Astro utilizes custom ",(0,r.kt)("inlineCode",{parentName:"p"},".astro")," files, it requires a specialized TypeScript integration, and\nluckily Astro provides an ",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build/en/guides/typescript/"},"in-depth guide"),". With\nthat being said, we do have a few requirements and pointers!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use the official ",(0,r.kt)("a",{parentName:"li",href:"https://docs.astro.build/en/guides/typescript/#setup"},"Astro ",(0,r.kt)("inlineCode",{parentName:"a"},"tsconfig.json"))," as\na basis."),(0,r.kt)("li",{parentName:"ul"},"From our internal testing, the ",(0,r.kt)("inlineCode",{parentName:"li"},"astro check")," command (that typechecks ",(0,r.kt)("inlineCode",{parentName:"li"},".astro")," files) ",(0,r.kt)("em",{parentName:"li"},"does not\nsupport project references"),". If the ",(0,r.kt)("inlineCode",{parentName:"li"},"composite")," compiler option is enabled, the checker will fail\nto find ",(0,r.kt)("inlineCode",{parentName:"li"},".astro")," files. To work around this, we disable ",(0,r.kt)("inlineCode",{parentName:"li"},"workspace.typescript")," in our moon config\nabove."),(0,r.kt)("li",{parentName:"ul"},"Since typechecking requires 2 commands, one for ",(0,r.kt)("inlineCode",{parentName:"li"},".astro")," files, and the other for ",(0,r.kt)("inlineCode",{parentName:"li"},".ts"),", ",(0,r.kt)("inlineCode",{parentName:"li"},".tsx"),"\nfiles, we've added the ",(0,r.kt)("a",{parentName:"li",href:"./typescript"},(0,r.kt)("inlineCode",{parentName:"a"},"typecheck"))," task as a dependency for the ",(0,r.kt)("inlineCode",{parentName:"li"},"check")," task. This\nwill run both commands through a single task!")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Astro should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"astro")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Astro project, a\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.astro.build/en/reference/configuration-reference/"},(0,r.kt)("inlineCode",{parentName:"a"},"astro.config.mjs"))," is created, and\n",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure Astro for their needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="/astro.config.mjs"',title:'"/astro.config.mjs"'},"import { defineConfig } from 'astro/config';\n\n// https://astro.build/config\nexport default defineConfig({});\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1a2b669c.414c293c.js b/assets/js/1a2b669c.414c293c.js new file mode 100644 index 00000000000..506ac53a7e8 --- /dev/null +++ b/assets/js/1a2b669c.414c293c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47999],{85824:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":22,"previousPage":"/blog/tags/proto","nextPage":"/blog/tags/proto/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1a2b669c.a2a5c543.js b/assets/js/1a2b669c.a2a5c543.js deleted file mode 100644 index a5a4349d606..00000000000 --- a/assets/js/1a2b669c.a2a5c543.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7999],{85824:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":21,"previousPage":"/blog/tags/proto","nextPage":"/blog/tags/proto/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.2712433e.js b/assets/js/1a4e3797.2712433e.js deleted file mode 100644 index 9da00bf9cbb..00000000000 --- a/assets/js/1a4e3797.2712433e.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 1a4e3797.2712433e.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7920],{42573:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(o=a.slice()).length,u=0;u0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},24501:(e,t,r)=>{"use strict";var n=r(55510),i=r(1098),a=r(27155);function s(e,t,r){return new n(e,t,r)}s.version=r(22026),s.AlgoliaSearchHelper=n,s.SearchParameters=i,s.SearchResults=a,e.exports=s},21657:(e,t,r)=>{"use strict";var n=r(42573);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(38400)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},7978:(e,t,r)=>{"use strict";var n=r(38800),i=r(56516),a=r(41262),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return a(e)?{}:e;if("string"==typeof t)return i(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=!!e[t]&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},1098:(e,t,r)=>{"use strict";var n=r(27868),i=r(38800),a=r(4501),s=r(94812),c=r(37032),u=r(56516),o=r(41262),h=r(96609),f=r(7978);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return n({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&o(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):o(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var i=c(r);if(this.isNumericRefined(e,t,i))return this;var a=n({},this.numericRefinements);return a[e]=n({},a[e]),a[e][t]?(a[e][t]=a[e][t].slice(),a[e][t].push(i)):a[e][t]=[i],this.setQueryParameters({numericRefinements:a})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){return void 0!==r?this.isNumericRefined(e,t,r)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(n,i){return i===e&&n.op===t&&l(n.val,c(r))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return o(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),n={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?n[e]=[]:n[e]=[t.slice(0,t.lastIndexOf(r))]:n[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},n,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:i({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return!!this.numericRefinements[e];var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var i,a,u=c(r),o=void 0!==(i=this.numericRefinements[e][t],a=u,s(i,(function(e){return l(e,a)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets())},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0})))},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return s(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},70916:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var s=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[s.name]&&e.hierarchicalFacetsRefinements[s.name][0]||"",h=e._getHierarchicalFacetSeparator(s),f=e._getHierarchicalRootPath(s),l=e._getHierarchicalShowParentLevel(s),m=a(e._getHierarchicalFacetSortBy(s)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,a,s){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m{"use strict";var n=r(27868),i=r(38800),a=r(80771),s=r(24105),c=r(94812),u=r(9443),o=r(36034),h=r(29038),f=h.escapeFacetValue,l=h.unescapeFacetValue,m=r(70916);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var a=t[0];this._rawResults=t;var o=this;Object.keys(a).forEach((function(e){o[e]=a[e]})),Object.keys(r||{}).forEach((function(e){o[e]=r[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var h=e.getRefinedDisjunctiveFacets(),f=d(e.facets),v=d(e.disjunctiveFacets),g=1,y=a.facets||{};Object.keys(y).forEach((function(t){var r,n,i=y[t],s=(r=e.hierarchicalFacets,n=t,c(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(s){var h=s.attributes.indexOf(t),l=u(e.hierarchicalFacets,(function(e){return e.name===s.name}));o.hierarchicalFacets[l][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var m,d=-1!==e.disjunctiveFacets.indexOf(t),g=-1!==e.facets.indexOf(t);d&&(m=v[t],o.disjunctiveFacets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.disjunctiveFacets[m],a.facets_stats,t)),g&&(m=f[t],o.facets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.facets[m],a.facets_stats,t))}})),this.hierarchicalFacets=s(this.hierarchicalFacets),h.forEach((function(r){var s=t[g],c=s&&s.facets?s.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(c).forEach((function(t){var r,f=c[t];if(h){r=u(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=u(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=n({},o.hierarchicalFacets[r][m].data,f)}else{r=v[t];var d=a.facets&&a.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:s.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],s.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),g++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);0===s.length||s[0].split(a).length<2||t.slice(g).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var c=r[t],h=u(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=u(o.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0){var m=s[0].split(a)[0];l[m]=o.hierarchicalFacets[h][f].data[m]}o.hierarchicalFacets[h][f].data=i(l,c,o.hierarchicalFacets[h][f].data)}})),g++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=f[t];o.facets[n]={name:t,data:a.facets[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=s(this.facets),this.disjunctiveFacets=s(this.disjunctiveFacets),this._state=e}function g(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return g(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function y(e,t){var r=c(e,(function(e){return e.name===t}));return r&&r.stats}function R(e,t,r,n,i){var a=c(i,(function(e){return e.name===r})),s=a&&a.data&&a.data[n]?a.data[n]:0,u=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:s,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return c(this.facets,t)||c(this.disjunctiveFacets,t)||c(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=function(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=c(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=c(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t))return c(e.hierarchicalFacets,r)}(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),u=this;if(Array.isArray(r))n=[e];else n=u._state.getHierarchicalFacetByName(r.name).attributes;return g((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(u,t);if(Boolean(r))return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,c=t.sortRemainingBy;return"hidden"===c?r:(s="alpha"===c?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(a(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=o(s.sortBy,v.DEFAULT_SORT);return a(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?y(this.facets,e):this._state.isDisjunctiveFacet(e)?y(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(R(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(R(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(R(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),s=r.split(a),u=c(n,(function(e){return e.name===t})),o=s.reduce((function(e,t){var r=e&&c(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},55510:(e,t,r)=>{"use strict";var n=r(1098),i=r(27155),a=r(21657),s=r(90584),c=r(42573),u=r(38400),o=r(41262),h=r(56516),f=r(27868),l=r(22026),m=r(29038).escapeFacetValue;function d(e,t,r){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.setClient(e);var i=r||{};i.index=t,this.state=n.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}u(d,c),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return s._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=s._getQueries(r.index,r),a=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),{content:new i(r,e.results),state:r,_originalResponse:e}}),(function(e){throw a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),t(null,new i(r,e.results),r)})).catch((function(e){a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=f({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:h(s._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var c=this.client.initIndex(n.index);if("function"!=typeof c.findAnswers)throw new Error(a);return c.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=s.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var h,f=this;return i?h=this.client.searchForFacetValues([{indexName:c.index,params:o}]):a?h=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,h=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),h.then((function(t){return f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=m(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:n.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new n(e),this},d.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=s._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=s._getQueries(n.index,n);return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),c=this._queryId++;this._currentNbQueries++;try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,c)).catch(this._dispatchAlgoliaError.bind(this,c))}catch(u){this.emit("error",{error:u})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){if(!(t0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new a(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},24105:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},38800:e=>{"use strict";e.exports=function(){var e=Array.prototype.slice.call(arguments);return e.reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},29038:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},94812:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{"use strict";var n=r(94812);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),a=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},38400:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},4501:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},27868:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},56516:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},80771:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},37032:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},90584:(e,t,r)=>{"use strict";var n=r(27868);function i(e){return Object.keys(e).sort((function(e,t){return e.localeCompare(t)})).reduce((function(t,r){return t[r]=e[r],t}),{})}var a={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:a._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:a._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(s.length>0&&s[0].split(c).length>1){var u=s[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,s){var c=a._getDisjunctiveFacetSearchParams(t,n.attribute,0===s);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[s-1];c.facetFilters=s>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(a._getHitsHierarchicalFacetsAttributes(e)),r=a._getFacetFilters(e),s=a._getNumericFilters(e),c=a._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),s.length>0&&(u.numericFilters=s),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var s=a._getFacetFilters(e,t,r),c=a._getNumericFilters(e,t),u=a._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?a._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),s.length>0&&(o.facetFilters=s),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).forEach((function(e){(i[e]||[]).forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).forEach((function(e){(a[e]||[]).forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(u=f.split(h).length-1,a=f):(u=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=o.attributes[u]}else u=a.split(h).length-1,s=o.attributes[u];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,s){var c=s.isDisjunctiveFacet(e)?s.clearRefinements(e):s,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},a._getHitsSearchParams(c),u))}};e.exports=a},96609:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},22026:e=>{"use strict";e.exports="3.11.1"},80934:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=a()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function j(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:w(s)};var m={data:c,headers:u,method:o,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",O(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,w(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function w(e){return e.map((function(e){return O(e)}))}function O(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var A=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},N=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,u=n(a,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:k}}).searchForFacetValues(s,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},k=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,I=2,q=3;function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return I>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.14.2","-").concat(e)}),u()]}),userAgent:_("4.14.2").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return A(r(r(r({},a),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:N,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:k,findAnswers:Q}})}}}}))}return V.version="4.14.2",V}()},40689:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(27378),i=r(50353);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.default)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const i=r.select(t),a=r.pluralForms.indexOf(i);return n[Math.min(a,n.length-1)]}(r,t,e)}}},11895:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>V});var n=r(27378);function i(e){var t,r,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t{let[,t]=e;return t.versions.length>1}));return n.createElement("div",{className:a("col","col--3","padding-left--none",Q)},r.map((e=>{let[i,a]=e;const s=r.length>1?`${i}: `:"";return n.createElement("select",{key:i,onChange:e=>t.setSearchVersion(i,e.target.value),defaultValue:t.searchVersions[i],className:E},a.versions.map(((e,t)=>n.createElement("option",{key:t,label:`${s}${e.label}`,value:e.name}))))})))}function q(){const{i18n:{currentLocale:e}}=(0,F.default)(),{algolia:{appId:t,apiKey:r,indexName:i}}=(0,b.L)(),s=(0,P.l)(),u=function(){const{selectMessage:e}=(0,d.c)();return t=>e(t,(0,R.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),g=function(){const e=(0,m.useAllDocsData)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[E,Q]=(0,p.K)(),q={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[V,L]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return q;case"loading":return{...e,loading:!0};case"update":return E!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),q),z=o()(t,r),B=c()(z,i,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});B.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:a}}=e;if(""===t||!Array.isArray(r))return void L({type:"reset"});const c=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>c(r[e].value)));return{title:i.pop(),url:s(t),summary:n.content?`${c(n.content.value)}...`:"",breadcrumbs:i}}));L({type:"update",value:{items:u,query:t,totalResults:i,totalPages:a,lastPage:n,hasMore:a>n+1,loading:!1}})}));const[M,J]=(0,n.useState)(null),W=(0,n.useRef)(0),U=(0,n.useRef)(h.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&W.current>r&&L({type:"advance"}),W.current=r}),{threshold:1})),$=()=>E?(0,R.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:E}):(0,R.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),Z=(0,v.zX)((function(t){void 0===t&&(t=0),B.addDisjunctiveFacetRefinement("docusaurus_tag","default"),B.addDisjunctiveFacetRefinement("language",e),Object.entries(g.searchVersions).forEach((e=>{let[t,r]=e;B.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),B.setQuery(E).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!M)return;const e=U.current;return e?(e.observe(M),()=>e.unobserve(M)):()=>!0}),[M]),(0,n.useEffect)((()=>{L({type:"reset"}),E&&(L({type:"loading"}),setTimeout((()=>{Z()}),300))}),[E,g.searchVersions,Z]),(0,n.useEffect)((()=>{V.lastPage&&0!==V.lastPage&&Z(V.lastPage)}),[Z,V.lastPage]),n.createElement(j.Z,null,n.createElement(f.Z,null,n.createElement("title",null,(0,y.p)($())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,$()),n.createElement("form",{className:"row",onSubmit:e=>e.preventDefault()},n.createElement("div",{className:a("col",T,{"col--9":g.versioningEnabled,"col--12":!g.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:_,placeholder:(0,R.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,R.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>Q(e.target.value),value:E,autoComplete:"off",autoFocus:!0})),g.versioningEnabled&&n.createElement(I,{docsSearchVersionsHelpers:g})),n.createElement("div",{className:"row"},n.createElement("div",{className:a("col","col--8",x)},!!V.totalResults&&u(V.totalResults)),n.createElement("div",{className:a("col","col--4","text--right",C)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,R.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:w},n.createElement("g",{fill:"none"},n.createElement("path",{className:O,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),V.items.length>0?n.createElement("main",null,V.items.map(((e,t)=>{let{title:r,url:i,summary:s,breadcrumbs:c}=e;return n.createElement("article",{key:t,className:A},n.createElement("h2",{className:N},n.createElement(l.default,{to:i,dangerouslySetInnerHTML:{__html:r}})),c.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:a("breadcrumbs",H)},c.map(((e,t)=>n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}}))))),s&&n.createElement("p",{className:S,dangerouslySetInnerHTML:{__html:s}}))}))):[E&&!V.loading&&n.createElement("p",{key:"no-results"},n.createElement(R.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!V.loading&&n.createElement("div",{key:"spinner",className:k})],V.hasMore&&n.createElement("div",{className:D,ref:J},n.createElement(R.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}function V(){return n.createElement(g.FG,{className:"search-page-wrapper"},n.createElement(q,null))}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.e84955d0.js b/assets/js/1a4e3797.e84955d0.js new file mode 100644 index 00000000000..23f102528d7 --- /dev/null +++ b/assets/js/1a4e3797.e84955d0.js @@ -0,0 +1,2 @@ +/*! For license information please see 1a4e3797.e84955d0.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97920],{42573:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(o=a.slice()).length,u=0;u0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},24501:(e,t,r)=>{"use strict";var n=r(55510),i=r(1098),a=r(27155);function s(e,t,r){return new n(e,t,r)}s.version=r(22026),s.AlgoliaSearchHelper=n,s.SearchParameters=i,s.SearchResults=a,e.exports=s},21657:(e,t,r)=>{"use strict";var n=r(42573);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(38400)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},7978:(e,t,r)=>{"use strict";var n=r(38800),i=r(56516),a=r(41262),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return a(e)?{}:e;if("string"==typeof t)return i(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=!!e[t]&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},1098:(e,t,r)=>{"use strict";var n=r(27868),i=r(38800),a=r(4501),s=r(94812),c=r(37032),u=r(56516),o=r(41262),h=r(96609),f=r(7978);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return n({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&o(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):o(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var i=c(r);if(this.isNumericRefined(e,t,i))return this;var a=n({},this.numericRefinements);return a[e]=n({},a[e]),a[e][t]?(a[e][t]=a[e][t].slice(),a[e][t].push(i)):a[e][t]=[i],this.setQueryParameters({numericRefinements:a})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){return void 0!==r?this.isNumericRefined(e,t,r)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(n,i){return i===e&&n.op===t&&l(n.val,c(r))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return o(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),n={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?n[e]=[]:n[e]=[t.slice(0,t.lastIndexOf(r))]:n[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},n,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:i({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return!!this.numericRefinements[e];var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var i,a,u=c(r),o=void 0!==(i=this.numericRefinements[e][t],a=u,s(i,(function(e){return l(e,a)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets())},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0})))},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return s(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},70916:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var s=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[s.name]&&e.hierarchicalFacetsRefinements[s.name][0]||"",h=e._getHierarchicalFacetSeparator(s),f=e._getHierarchicalRootPath(s),l=e._getHierarchicalShowParentLevel(s),m=a(e._getHierarchicalFacetSortBy(s)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,a,s){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m{"use strict";var n=r(27868),i=r(38800),a=r(80771),s=r(24105),c=r(94812),u=r(9443),o=r(36034),h=r(29038),f=h.escapeFacetValue,l=h.unescapeFacetValue,m=r(70916);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var a=t[0];this._rawResults=t;var o=this;Object.keys(a).forEach((function(e){o[e]=a[e]})),Object.keys(r||{}).forEach((function(e){o[e]=r[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var h=e.getRefinedDisjunctiveFacets(),f=d(e.facets),v=d(e.disjunctiveFacets),g=1,y=a.facets||{};Object.keys(y).forEach((function(t){var r,n,i=y[t],s=(r=e.hierarchicalFacets,n=t,c(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(s){var h=s.attributes.indexOf(t),l=u(e.hierarchicalFacets,(function(e){return e.name===s.name}));o.hierarchicalFacets[l][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var m,d=-1!==e.disjunctiveFacets.indexOf(t),g=-1!==e.facets.indexOf(t);d&&(m=v[t],o.disjunctiveFacets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.disjunctiveFacets[m],a.facets_stats,t)),g&&(m=f[t],o.facets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.facets[m],a.facets_stats,t))}})),this.hierarchicalFacets=s(this.hierarchicalFacets),h.forEach((function(r){var s=t[g],c=s&&s.facets?s.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(c).forEach((function(t){var r,f=c[t];if(h){r=u(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=u(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=n({},o.hierarchicalFacets[r][m].data,f)}else{r=v[t];var d=a.facets&&a.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:s.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],s.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),g++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);0===s.length||s[0].split(a).length<2||t.slice(g).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var c=r[t],h=u(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=u(o.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0){var m=s[0].split(a)[0];l[m]=o.hierarchicalFacets[h][f].data[m]}o.hierarchicalFacets[h][f].data=i(l,c,o.hierarchicalFacets[h][f].data)}})),g++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=f[t];o.facets[n]={name:t,data:a.facets[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=s(this.facets),this.disjunctiveFacets=s(this.disjunctiveFacets),this._state=e}function g(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return g(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function y(e,t){var r=c(e,(function(e){return e.name===t}));return r&&r.stats}function R(e,t,r,n,i){var a=c(i,(function(e){return e.name===r})),s=a&&a.data&&a.data[n]?a.data[n]:0,u=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:s,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return c(this.facets,t)||c(this.disjunctiveFacets,t)||c(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=function(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=c(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=c(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t))return c(e.hierarchicalFacets,r)}(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),u=this;if(Array.isArray(r))n=[e];else n=u._state.getHierarchicalFacetByName(r.name).attributes;return g((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(u,t);if(Boolean(r))return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,c=t.sortRemainingBy;return"hidden"===c?r:(s="alpha"===c?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(a(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=o(s.sortBy,v.DEFAULT_SORT);return a(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?y(this.facets,e):this._state.isDisjunctiveFacet(e)?y(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(R(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(R(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(R(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),s=r.split(a),u=c(n,(function(e){return e.name===t})),o=s.reduce((function(e,t){var r=e&&c(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},55510:(e,t,r)=>{"use strict";var n=r(1098),i=r(27155),a=r(21657),s=r(90584),c=r(42573),u=r(38400),o=r(41262),h=r(56516),f=r(27868),l=r(22026),m=r(29038).escapeFacetValue;function d(e,t,r){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.setClient(e);var i=r||{};i.index=t,this.state=n.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}u(d,c),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return s._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=s._getQueries(r.index,r),a=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),{content:new i(r,e.results),state:r,_originalResponse:e}}),(function(e){throw a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),t(null,new i(r,e.results),r)})).catch((function(e){a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=f({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:h(s._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var c=this.client.initIndex(n.index);if("function"!=typeof c.findAnswers)throw new Error(a);return c.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=s.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var h,f=this;return i?h=this.client.searchForFacetValues([{indexName:c.index,params:o}]):a?h=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,h=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),h.then((function(t){return f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=m(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:n.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new n(e),this},d.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=s._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=s._getQueries(n.index,n);return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),c=this._queryId++;this._currentNbQueries++;try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,c)).catch(this._dispatchAlgoliaError.bind(this,c))}catch(u){this.emit("error",{error:u})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){if(!(t0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new a(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},24105:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},38800:e=>{"use strict";e.exports=function(){var e=Array.prototype.slice.call(arguments);return e.reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},29038:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},94812:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{"use strict";var n=r(94812);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),a=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},38400:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},4501:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},27868:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},56516:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},80771:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},37032:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},90584:(e,t,r)=>{"use strict";var n=r(27868);function i(e){return Object.keys(e).sort((function(e,t){return e.localeCompare(t)})).reduce((function(t,r){return t[r]=e[r],t}),{})}var a={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:a._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:a._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(s.length>0&&s[0].split(c).length>1){var u=s[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,s){var c=a._getDisjunctiveFacetSearchParams(t,n.attribute,0===s);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[s-1];c.facetFilters=s>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(a._getHitsHierarchicalFacetsAttributes(e)),r=a._getFacetFilters(e),s=a._getNumericFilters(e),c=a._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),s.length>0&&(u.numericFilters=s),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var s=a._getFacetFilters(e,t,r),c=a._getNumericFilters(e,t),u=a._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?a._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),s.length>0&&(o.facetFilters=s),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).forEach((function(e){(i[e]||[]).forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).forEach((function(e){(a[e]||[]).forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(u=f.split(h).length-1,a=f):(u=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=o.attributes[u]}else u=a.split(h).length-1,s=o.attributes[u];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,s){var c=s.isDisjunctiveFacet(e)?s.clearRefinements(e):s,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},a._getHitsSearchParams(c),u))}};e.exports=a},96609:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},22026:e=>{"use strict";e.exports="3.11.1"},80934:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=a()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function j(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:w(s)};var m={data:c,headers:u,method:o,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",O(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,w(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function w(e){return e.map((function(e){return O(e)}))}function O(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var A=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},N=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,u=n(a,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:k}}).searchForFacetValues(s,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},k=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,I=2,q=3;function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return I>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.14.2","-").concat(e)}),u()]}),userAgent:_("4.14.2").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return A(r(r(r({},a),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:N,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:k,findAnswers:Q}})}}}}))}return V.version="4.14.2",V}()},40689:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(27378),i=r(50353);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.default)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const i=r.select(t),a=r.pluralForms.indexOf(i);return n[Math.min(a,n.length-1)]}(r,t,e)}}},11895:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>V});var n=r(27378);function i(e){var t,r,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t{let[,t]=e;return t.versions.length>1}));return n.createElement("div",{className:a("col","col--3","padding-left--none",Q)},r.map((e=>{let[i,a]=e;const s=r.length>1?`${i}: `:"";return n.createElement("select",{key:i,onChange:e=>t.setSearchVersion(i,e.target.value),defaultValue:t.searchVersions[i],className:E},a.versions.map(((e,t)=>n.createElement("option",{key:t,label:`${s}${e.label}`,value:e.name}))))})))}function q(){const{i18n:{currentLocale:e}}=(0,F.default)(),{algolia:{appId:t,apiKey:r,indexName:i}}=(0,b.L)(),s=(0,P.l)(),u=function(){const{selectMessage:e}=(0,d.c)();return t=>e(t,(0,R.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),g=function(){const e=(0,m.useAllDocsData)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[E,Q]=(0,p.K)(),q={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[V,L]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return q;case"loading":return{...e,loading:!0};case"update":return E!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),q),z=o()(t,r),B=c()(z,i,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});B.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:a}}=e;if(""===t||!Array.isArray(r))return void L({type:"reset"});const c=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>c(r[e].value)));return{title:i.pop(),url:s(t),summary:n.content?`${c(n.content.value)}...`:"",breadcrumbs:i}}));L({type:"update",value:{items:u,query:t,totalResults:i,totalPages:a,lastPage:n,hasMore:a>n+1,loading:!1}})}));const[M,J]=(0,n.useState)(null),W=(0,n.useRef)(0),U=(0,n.useRef)(h.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&W.current>r&&L({type:"advance"}),W.current=r}),{threshold:1})),$=()=>E?(0,R.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:E}):(0,R.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),Z=(0,v.zX)((function(t){void 0===t&&(t=0),B.addDisjunctiveFacetRefinement("docusaurus_tag","default"),B.addDisjunctiveFacetRefinement("language",e),Object.entries(g.searchVersions).forEach((e=>{let[t,r]=e;B.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),B.setQuery(E).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!M)return;const e=U.current;return e?(e.observe(M),()=>e.unobserve(M)):()=>!0}),[M]),(0,n.useEffect)((()=>{L({type:"reset"}),E&&(L({type:"loading"}),setTimeout((()=>{Z()}),300))}),[E,g.searchVersions,Z]),(0,n.useEffect)((()=>{V.lastPage&&0!==V.lastPage&&Z(V.lastPage)}),[Z,V.lastPage]),n.createElement(j.Z,null,n.createElement(f.Z,null,n.createElement("title",null,(0,y.p)($())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,$()),n.createElement("form",{className:"row",onSubmit:e=>e.preventDefault()},n.createElement("div",{className:a("col",T,{"col--9":g.versioningEnabled,"col--12":!g.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:_,placeholder:(0,R.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,R.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>Q(e.target.value),value:E,autoComplete:"off",autoFocus:!0})),g.versioningEnabled&&n.createElement(I,{docsSearchVersionsHelpers:g})),n.createElement("div",{className:"row"},n.createElement("div",{className:a("col","col--8",x)},!!V.totalResults&&u(V.totalResults)),n.createElement("div",{className:a("col","col--4","text--right",C)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,R.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:w},n.createElement("g",{fill:"none"},n.createElement("path",{className:O,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),V.items.length>0?n.createElement("main",null,V.items.map(((e,t)=>{let{title:r,url:i,summary:s,breadcrumbs:c}=e;return n.createElement("article",{key:t,className:A},n.createElement("h2",{className:N},n.createElement(l.default,{to:i,dangerouslySetInnerHTML:{__html:r}})),c.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:a("breadcrumbs",H)},c.map(((e,t)=>n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}}))))),s&&n.createElement("p",{className:S,dangerouslySetInnerHTML:{__html:s}}))}))):[E&&!V.loading&&n.createElement("p",{key:"no-results"},n.createElement(R.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!V.loading&&n.createElement("div",{key:"spinner",className:k})],V.hasMore&&n.createElement("div",{className:D,ref:J},n.createElement(R.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}function V(){return n.createElement(g.FG,{className:"search-page-wrapper"},n.createElement(q,null))}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.2712433e.js.LICENSE.txt b/assets/js/1a4e3797.e84955d0.js.LICENSE.txt similarity index 100% rename from assets/js/1a4e3797.2712433e.js.LICENSE.txt rename to assets/js/1a4e3797.e84955d0.js.LICENSE.txt diff --git a/assets/js/1aa28b52.237af543.js b/assets/js/1aa28b52.237af543.js new file mode 100644 index 00000000000..250f8dfbeb8 --- /dev/null +++ b/assets/js/1aa28b52.237af543.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98450],{35318:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>d});var o=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=o.createContext({}),s=function(e){var n=o.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=s(e.components);return o.createElement(p.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},c=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(t),d=a,g=c["".concat(p,".").concat(d)]||c[d]||m[d]||i;return t?o.createElement(g,r(r({ref:n},u),{},{components:t})):o.createElement(g,r({ref:n},u))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,r=new Array(i);r[0]=c;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,r[1]=l;for(var s=2;s{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var o=t(25773),a=(t(27378),t(35318));const i={title:"Overview"},r=void 0,l={unversionedId:"commands/overview",id:"commands/overview",title:"Overview",description:"The following options are available for all moon commands.",source:"@site/docs/commands/overview.mdx",sourceDirName:"commands",slug:"/commands/overview",permalink:"/docs/commands/overview",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/overview.mdx",tags:[],version:"current",frontMatter:{title:"Overview"},sidebar:"docs",previous:{title:"Commands",permalink:"/docs/commands"},next:{title:"action-graph",permalink:"/docs/commands/action-graph"}},p={},s=[{value:"Caching",id:"caching",level:2},{value:"Colors",id:"colors",level:2},{value:"Piped output",id:"piped-output",level:3},{value:"Concurrency",id:"concurrency",level:2},{value:"Debugging",id:"debugging",level:2},{value:"Logging",id:"logging",level:2},{value:"Outputting logs to a file",id:"outputting-logs-to-a-file",level:3}],u={toc:s};function m(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The following options are available for ",(0,a.kt)("em",{parentName:"p"},"all")," moon commands."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--cache ")," - The mode for ",(0,a.kt)("a",{parentName:"li",href:"#caching"},"cache operations"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--color")," - Force ",(0,a.kt)("a",{parentName:"li",href:"#colors"},"colored output")," for moon (not tasks)."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--concurrency"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"-c")," - Maximum number of threads to utilize."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--help")," - Display the help menu for the current command."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--log ")," - The lowest ",(0,a.kt)("a",{parentName:"li",href:"#logging"},"log level to output"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--logFile ")," - Write logs to the defined file."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--version")," - Display the version of the CLI.")),(0,a.kt)("h2",{id:"caching"},"Caching"),(0,a.kt)("p",null,"We provide a powerful ",(0,a.kt)("a",{parentName:"p",href:"../concepts/cache"},"caching layer"),", but sometimes you need to debug failing or\nbroken tasks, and this cache may get in the way. To circumvent this, we support the ",(0,a.kt)("inlineCode",{parentName:"p"},"--cache")," global\noption, or the ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_CACHE")," environment variable, both of which accept one of the following values."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"off")," - Turn off caching entirely. Every task will run fresh, including dependency installs."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"read")," - Read existing items from the cache, but do not write to them."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"read-write")," (default) - Read and write items to the cache."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"write")," - Do not read existing cache items, but write new items to the cache.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --cache off\n# Or\n$ MOON_CACHE=off moon run app:build\n")),(0,a.kt)("h2",{id:"colors"},"Colors"),(0,a.kt)("p",null,"Colored output is a complicated subject, with differing implementations and standards across tooling\nand operating systems. moon aims to normalize this as much as possible, by doing the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"By default, moon colors are inherited from your terminal settings (",(0,a.kt)("inlineCode",{parentName:"li"},"TERM")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"COLORTERM"),"\nenvironment variables)."),(0,a.kt)("li",{parentName:"ul"},"Colors can be force enabled by passing the ",(0,a.kt)("inlineCode",{parentName:"li"},"--color")," option (preferred), or ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON_COLOR")," or\n",(0,a.kt)("inlineCode",{parentName:"li"},"FORCE_COLOR")," environment variables.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon app:build --color run\n# Or\n$ MOON_COLOR=2 moon run app:build\n")),(0,a.kt)("p",null,"When forcing colors with ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_COLOR")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"FORCE_COLOR"),", you may set it to one of the following\nnumerical values for the desired level of color support. This is automatically inferred if you use\n",(0,a.kt)("inlineCode",{parentName:"p"},"--color"),"."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"0")," - No colors"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"1")," - 16 colors (standard terminal colors)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"2")," - 256 colors"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"3")," - 16 million colors (truecolor)")),(0,a.kt)("h3",{id:"piped-output"},"Piped output"),(0,a.kt)("p",null,"When tasks (child processes) are piped, colors and ANSI escape sequences are lost, since the target\nis not a TTY and we do not implement a PTY. This is a common pattern this is quite annoying.\nHowever, many tools and CLIs support a ",(0,a.kt)("inlineCode",{parentName:"p"},"--color")," option to work around this limitation and to always\nforce colors, even when not a TTY."),(0,a.kt)("p",null,"To mitigate this problem as a whole, and to avoid requiring ",(0,a.kt)("inlineCode",{parentName:"p"},"--color")," for every task, moon supports\nthe ",(0,a.kt)("a",{parentName:"p",href:"../config/workspace#inheritcolorsforpipedtasks"},(0,a.kt)("inlineCode",{parentName:"a"},"runner.inheritColorsForPipedTasks")),"\nconfiguration setting. When enabled, all piped child processes will inherit the color settings of\nthe currently running terminal."),(0,a.kt)("h2",{id:"concurrency"},"Concurrency"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"--concurrency")," option or ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_CONCURRENCY")," environment variable can be used to control the\nmaximum amount of threads to utilize in our thread pool. If not defined, defaults to the number of\noperating system cores."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --concurrency 1\n# Or\n$ MOON_CONCURRENCY=1 moon run app:build\n")),(0,a.kt)("h2",{id:"debugging"},"Debugging"),(0,a.kt)("p",null,"At minimum, most debugging can be done by passing ",(0,a.kt)("a",{parentName:"p",href:"#logging"},(0,a.kt)("inlineCode",{parentName:"a"},"--log trace"))," on the command line and\nsifting through the logs. We also provide the following environment variables to toggle output."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MOON_DEBUG_PROCESS_ENV")," - By default moon hides the environment variables (except for ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON")," or\n",(0,a.kt)("inlineCode",{parentName:"li"},"PROTO"),") passed to processes to avoid leaking sensitive information. However, knowing what\nenvironment variables are passed around is helpful in debugging. Declare this variable to reveal\nthe entire environment."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MOON_DEBUG_PROCESS_INPUT")," - By default moon truncates the stdin passed to processes to avoid\nthrashing the console with a large input string. However, knowing what input is passed around is\nhelpful in debugging. Declare this variable to reveal the entire input.")),(0,a.kt)("h2",{id:"logging"},"Logging"),(0,a.kt)("p",null,"By default, moon aims to output as little as possible, as we want to preserve the original output of\nthe command's being ran, excluding warnings and errors. This is managed through log levels, which\ncan be defined with the ",(0,a.kt)("inlineCode",{parentName:"p"},"--log")," global option, or the ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_LOG")," environment level. The following\nlevels are supported, in priority order."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"off")," - Turn off logging entirely."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"error")," - Only show error logs."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"warn")," - Only show warning logs and above."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"info")," (default) - Only show info logs and above."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"debug")," - Only show debug logs and above."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"trace")," - Show all logs, including network requests and child processes.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --log trace\n# Or\n$ MOON_LOG=trace moon run app:build\n")),(0,a.kt)("h3",{id:"outputting-logs-to-a-file"},"Outputting logs to a file"),(0,a.kt)("p",null,"moon can dump the logs from a command to a file using the ",(0,a.kt)("inlineCode",{parentName:"p"},"--logFile")," option, or the ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_LOG_FILE"),"\nenvironment variable. The dumped logs will respect the ",(0,a.kt)("inlineCode",{parentName:"p"},"--log")," option and filter the logs piped to\nthe output file."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --logFile=output.log\n# Or\n$ MOON_LOG_FILE=output.log moon run app:build\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1aa28b52.e4f71fe8.js b/assets/js/1aa28b52.e4f71fe8.js deleted file mode 100644 index 08203468fea..00000000000 --- a/assets/js/1aa28b52.e4f71fe8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8450],{35318:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>d});var o=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=o.createContext({}),s=function(e){var n=o.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=s(e.components);return o.createElement(p.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},c=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(t),d=a,g=c["".concat(p,".").concat(d)]||c[d]||m[d]||i;return t?o.createElement(g,r(r({ref:n},u),{},{components:t})):o.createElement(g,r({ref:n},u))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,r=new Array(i);r[0]=c;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,r[1]=l;for(var s=2;s{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var o=t(25773),a=(t(27378),t(35318));const i={title:"Overview"},r=void 0,l={unversionedId:"commands/overview",id:"commands/overview",title:"Overview",description:"The following options are available for all moon commands.",source:"@site/docs/commands/overview.mdx",sourceDirName:"commands",slug:"/commands/overview",permalink:"/docs/commands/overview",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/overview.mdx",tags:[],version:"current",frontMatter:{title:"Overview"},sidebar:"docs",previous:{title:"Commands",permalink:"/docs/commands"},next:{title:"action-graph",permalink:"/docs/commands/action-graph"}},p={},s=[{value:"Caching",id:"caching",level:2},{value:"Colors",id:"colors",level:2},{value:"Piped output",id:"piped-output",level:3},{value:"Concurrency",id:"concurrency",level:2},{value:"Debugging",id:"debugging",level:2},{value:"Logging",id:"logging",level:2},{value:"Outputting logs to a file",id:"outputting-logs-to-a-file",level:3}],u={toc:s};function m(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The following options are available for ",(0,a.kt)("em",{parentName:"p"},"all")," moon commands."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--cache ")," - The mode for ",(0,a.kt)("a",{parentName:"li",href:"#caching"},"cache operations"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--color")," - Force ",(0,a.kt)("a",{parentName:"li",href:"#colors"},"colored output")," for moon (not tasks)."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--concurrency"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"-c")," - Maximum number of threads to utilize."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--help")," - Display the help menu for the current command."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--log ")," - The lowest ",(0,a.kt)("a",{parentName:"li",href:"#logging"},"log level to output"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--logFile ")," - Write logs to the defined file."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--version")," - Display the version of the CLI.")),(0,a.kt)("h2",{id:"caching"},"Caching"),(0,a.kt)("p",null,"We provide a powerful ",(0,a.kt)("a",{parentName:"p",href:"../concepts/cache"},"caching layer"),", but sometimes you need to debug failing or\nbroken tasks, and this cache may get in the way. To circumvent this, we support the ",(0,a.kt)("inlineCode",{parentName:"p"},"--cache")," global\noption, or the ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_CACHE")," environment variable, both of which accept one of the following values."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"off")," - Turn off caching entirely. Every task will run fresh, including dependency installs."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"read")," - Read existing items from the cache, but do not write to them."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"read-write")," (default) - Read and write items to the cache."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"write")," - Do not read existing cache items, but write new items to the cache.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --cache off\n# Or\n$ MOON_CACHE=off moon run app:build\n")),(0,a.kt)("h2",{id:"colors"},"Colors"),(0,a.kt)("p",null,"Colored output is a complicated subject, with differing implementations and standards across tooling\nand operating systems. moon aims to normalize this as much as possible, by doing the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"By default, moon colors are inherited from your terminal settings (",(0,a.kt)("inlineCode",{parentName:"li"},"TERM")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"COLORTERM"),"\nenvironment variables)."),(0,a.kt)("li",{parentName:"ul"},"Colors can be force enabled by passing the ",(0,a.kt)("inlineCode",{parentName:"li"},"--color")," option (preferred), or ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON_COLOR")," or\n",(0,a.kt)("inlineCode",{parentName:"li"},"FORCE_COLOR")," environment variables.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon app:build --color run\n# Or\n$ MOON_COLOR=2 moon run app:build\n")),(0,a.kt)("p",null,"When forcing colors with ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_COLOR")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"FORCE_COLOR"),", you may set it to one of the following\nnumerical values for the desired level of color support. This is automatically inferred if you use\n",(0,a.kt)("inlineCode",{parentName:"p"},"--color"),"."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"0")," - No colors"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"1")," - 16 colors (standard terminal colors)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"2")," - 256 colors"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"3")," - 16 million colors (truecolor)")),(0,a.kt)("h3",{id:"piped-output"},"Piped output"),(0,a.kt)("p",null,"When tasks (child processes) are piped, colors and ANSI escape sequences are lost, since the target\nis not a TTY and we do not implement a PTY. This is a common pattern this is quite annoying.\nHowever, many tools and CLIs support a ",(0,a.kt)("inlineCode",{parentName:"p"},"--color")," option to work around this limitation and to always\nforce colors, even when not a TTY."),(0,a.kt)("p",null,"To mitigate this problem as a whole, and to avoid requiring ",(0,a.kt)("inlineCode",{parentName:"p"},"--color")," for every task, moon supports\nthe ",(0,a.kt)("a",{parentName:"p",href:"../config/workspace#inheritcolorsforpipedtasks"},(0,a.kt)("inlineCode",{parentName:"a"},"runner.inheritColorsForPipedTasks")),"\nconfiguration setting. When enabled, all piped child processes will inherit the color settings of\nthe currently running terminal."),(0,a.kt)("h2",{id:"concurrency"},"Concurrency"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"--concurrency")," option or ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_CONCURRENCY")," environment variable can be used to control the\nmaximum amount of threads to utilize in our thread pool. If not defined, defaults to the number of\noperating system cores."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --concurrency 1\n# Or\n$ MOON_CONCURRENCY=1 moon run app:build\n")),(0,a.kt)("h2",{id:"debugging"},"Debugging"),(0,a.kt)("p",null,"At minimum, most debugging can be done by passing ",(0,a.kt)("a",{parentName:"p",href:"#logging"},(0,a.kt)("inlineCode",{parentName:"a"},"--log trace"))," on the command line and\nsifting through the logs. We also provide the following environment variables to toggle output."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MOON_DEBUG_PROCESS_ENV")," - By default moon hides the environment variables (except for ",(0,a.kt)("inlineCode",{parentName:"li"},"MOON")," or\n",(0,a.kt)("inlineCode",{parentName:"li"},"PROTO"),") passed to processes to avoid leaking sensitive information. However, knowing what\nenvironment variables are passed around is helpful in debugging. Declare this variable to reveal\nthe entire environment."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MOON_DEBUG_PROCESS_INPUT")," - By default moon truncates the stdin passed to processes to avoid\nthrashing the console with a large input string. However, knowing what input is passed around is\nhelpful in debugging. Declare this variable to reveal the entire input.")),(0,a.kt)("h2",{id:"logging"},"Logging"),(0,a.kt)("p",null,"By default, moon aims to output as little as possible, as we want to preserve the original output of\nthe command's being ran, excluding warnings and errors. This is managed through log levels, which\ncan be defined with the ",(0,a.kt)("inlineCode",{parentName:"p"},"--log")," global option, or the ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_LOG")," environment level. The following\nlevels are supported, in priority order."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"off")," - Turn off logging entirely."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"error")," - Only show error logs."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"warn")," - Only show warning logs and above."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"info")," (default) - Only show info logs and above."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"debug")," - Only show debug logs and above."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"trace")," - Show all logs, including network requests and child processes.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --log trace\n# Or\n$ MOON_LOG=trace moon run app:build\n")),(0,a.kt)("h3",{id:"outputting-logs-to-a-file"},"Outputting logs to a file"),(0,a.kt)("p",null,"moon can dump the logs from a command to a file using the ",(0,a.kt)("inlineCode",{parentName:"p"},"--logFile")," option, or the ",(0,a.kt)("inlineCode",{parentName:"p"},"MOON_LOG_FILE"),"\nenvironment variable. The dumped logs will respect the ",(0,a.kt)("inlineCode",{parentName:"p"},"--log")," option and filter the logs piped to\nthe output file."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --logFile=output.log\n# Or\n$ MOON_LOG_FILE=output.log moon run app:build\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1aebc10b.d6207dc2.js b/assets/js/1aebc10b.d6207dc2.js deleted file mode 100644 index 26fdcdc3725..00000000000 --- a/assets/js/1aebc10b.d6207dc2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9959],{35318:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>g});var n=o(27378);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=p(o),g=r,d=m["".concat(s,".").concat(g)]||m[g]||c[g]||a;return o?n.createElement(d,i(i({ref:t},u),{},{components:o})):n.createElement(d,i({ref:t},u))}));function g(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=o(25773),r=(o(27378),o(35318));const a={slug:"proto-v0.4",title:"proto v0.4 - Rust support, user configs, and more",authors:["milesj"],tags:["proto","rust","config"],image:"./img/proto/v0.4.png"},i=void 0,l={permalink:"/blog/proto-v0.4",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-31_proto-v0.4.mdx",source:"@site/blog/2023-03-31_proto-v0.4.mdx",title:"proto v0.4 - Rust support, user configs, and more",description:"With this release, we've added Rust language support, user configs, and a few other improvements.",date:"2023-03-31T00:00:00.000Z",formattedDate:"March 31, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"rust",permalink:"/blog/tags/rust"},{label:"config",permalink:"/blog/tags/config"}],readingTime:1.43,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.4",title:"proto v0.4 - Rust support, user configs, and more",authors:["milesj"],tags:["proto","rust","config"],image:"./img/proto/v0.4.png"},prevItem:{title:"moon v1.1 - Task debugging and improvements",permalink:"/blog/moon-v1.1"},nextItem:{title:"moon v1.0 - Official release! Project constraints, tagging, and more!",permalink:"/blog/moon-v1.0"}},s={image:o(74896).Z,authorsImageUrls:[void 0]},p=[{value:"Rust language support",id:"rust-language-support",level:2},{value:"New user configuration",id:"new-user-configuration",level:2},{value:"New proto upgrade command",id:"new-proto-upgrade-command",level:2}],u={toc:p};function c(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've added Rust language support, user configs, and a few other improvements."),(0,r.kt)("h2",{id:"rust-language-support"},"Rust language support"),(0,r.kt)("p",null,"We're very excited to announce support for the ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/"},"Rust language")," in proto.\nThis is our first language addition since the initial release, and we're very happy with how it\nturned out."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install rust stable\n")),(0,r.kt)("p",null,"For those of you unfamiliar with Rust, Rust provides its own toolchain manager through\n",(0,r.kt)("a",{parentName:"p",href:"https://rustup.rs/"},(0,r.kt)("inlineCode",{parentName:"a"},"rustup"))," \u2014 a very powerful one at that. We don't want to reinvent the wheel\nhere, so instead of downloading and installing Rust into proto's toolchain, we chose to call\n",(0,r.kt)("inlineCode",{parentName:"p"},"rustup")," commands under the hood. Because of this, Rust support in proto requires Rust/Cargo to be\npre-installed on your system. Jump to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/tools#rust"},"docs for more information"),"."),(0,r.kt)("p",null,"All in all, the cool thing about supporting Rust in proto is that you can standardize all your tools\nin a single config for ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/use"},(0,r.kt)("inlineCode",{parentName:"a"},"proto use")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.2.0"\nrust = "1.68.0"\n')),(0,r.kt)("h2",{id:"new-user-configuration"},"New user configuration"),(0,r.kt)("p",null,"We have a long list of ideas and features that would be cool to support in proto, but not as the\ndefault functionality. Because of this, we required a way for users to opt-in to this functionality,\nand have landed on a new user configuration located at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"auto-install = true\n")),(0,r.kt)("p",null,"This new configuration only supports a single setting (for now), ",(0,r.kt)("inlineCode",{parentName:"p"},"auto-install"),", that when enabled,\nwill automatically install a missing tool for the detected version when running\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"proto run"))," (or a shim)."),(0,r.kt)("h2",{id:"new-proto-upgrade-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto upgrade")," command"),(0,r.kt)("p",null,"We now provide a ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/upgrade"},(0,r.kt)("inlineCode",{parentName:"a"},"proto upgrade"))," command for upgrading proto itself.\nThis will download the latest version and replace the binary at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/bin/proto"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto upgrade\n")))}c.isMDXComponent=!0},74896:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/v0.4-f1ea661077af65863b43b8da3d5b4172.png"}}]); \ No newline at end of file diff --git a/assets/js/1aebc10b.dd5c1c7b.js b/assets/js/1aebc10b.dd5c1c7b.js new file mode 100644 index 00000000000..1c3050c4817 --- /dev/null +++ b/assets/js/1aebc10b.dd5c1c7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69959],{35318:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>g});var n=o(27378);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=p(o),g=r,d=m["".concat(s,".").concat(g)]||m[g]||c[g]||a;return o?n.createElement(d,i(i({ref:t},u),{},{components:o})):n.createElement(d,i({ref:t},u))}));function g(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=o(25773),r=(o(27378),o(35318));const a={slug:"proto-v0.4",title:"proto v0.4 - Rust support, user configs, and more",authors:["milesj"],tags:["proto","rust","config"],image:"./img/proto/v0.4.png"},i=void 0,l={permalink:"/blog/proto-v0.4",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-31_proto-v0.4.mdx",source:"@site/blog/2023-03-31_proto-v0.4.mdx",title:"proto v0.4 - Rust support, user configs, and more",description:"With this release, we've added Rust language support, user configs, and a few other improvements.",date:"2023-03-31T00:00:00.000Z",formattedDate:"March 31, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"rust",permalink:"/blog/tags/rust"},{label:"config",permalink:"/blog/tags/config"}],readingTime:1.43,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.4",title:"proto v0.4 - Rust support, user configs, and more",authors:["milesj"],tags:["proto","rust","config"],image:"./img/proto/v0.4.png"},prevItem:{title:"moon v1.1 - Task debugging and improvements",permalink:"/blog/moon-v1.1"},nextItem:{title:"moon v1.0 - Official release! Project constraints, tagging, and more!",permalink:"/blog/moon-v1.0"}},s={image:o(74896).Z,authorsImageUrls:[void 0]},p=[{value:"Rust language support",id:"rust-language-support",level:2},{value:"New user configuration",id:"new-user-configuration",level:2},{value:"New proto upgrade command",id:"new-proto-upgrade-command",level:2}],u={toc:p};function c(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've added Rust language support, user configs, and a few other improvements."),(0,r.kt)("h2",{id:"rust-language-support"},"Rust language support"),(0,r.kt)("p",null,"We're very excited to announce support for the ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/"},"Rust language")," in proto.\nThis is our first language addition since the initial release, and we're very happy with how it\nturned out."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install rust stable\n")),(0,r.kt)("p",null,"For those of you unfamiliar with Rust, Rust provides its own toolchain manager through\n",(0,r.kt)("a",{parentName:"p",href:"https://rustup.rs/"},(0,r.kt)("inlineCode",{parentName:"a"},"rustup"))," \u2014 a very powerful one at that. We don't want to reinvent the wheel\nhere, so instead of downloading and installing Rust into proto's toolchain, we chose to call\n",(0,r.kt)("inlineCode",{parentName:"p"},"rustup")," commands under the hood. Because of this, Rust support in proto requires Rust/Cargo to be\npre-installed on your system. Jump to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/tools#rust"},"docs for more information"),"."),(0,r.kt)("p",null,"All in all, the cool thing about supporting Rust in proto is that you can standardize all your tools\nin a single config for ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/use"},(0,r.kt)("inlineCode",{parentName:"a"},"proto use")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.2.0"\nrust = "1.68.0"\n')),(0,r.kt)("h2",{id:"new-user-configuration"},"New user configuration"),(0,r.kt)("p",null,"We have a long list of ideas and features that would be cool to support in proto, but not as the\ndefault functionality. Because of this, we required a way for users to opt-in to this functionality,\nand have landed on a new user configuration located at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},"auto-install = true\n")),(0,r.kt)("p",null,"This new configuration only supports a single setting (for now), ",(0,r.kt)("inlineCode",{parentName:"p"},"auto-install"),", that when enabled,\nwill automatically install a missing tool for the detected version when running\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"proto run"))," (or a shim)."),(0,r.kt)("h2",{id:"new-proto-upgrade-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto upgrade")," command"),(0,r.kt)("p",null,"We now provide a ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/upgrade"},(0,r.kt)("inlineCode",{parentName:"a"},"proto upgrade"))," command for upgrading proto itself.\nThis will download the latest version and replace the binary at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/bin/proto"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto upgrade\n")))}c.isMDXComponent=!0},74896:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/v0.4-f1ea661077af65863b43b8da3d5b4172.png"}}]); \ No newline at end of file diff --git a/assets/js/1b469a71.28f39834.js b/assets/js/1b469a71.28f39834.js deleted file mode 100644 index e45545a15e2..00000000000 --- a/assets/js/1b469a71.28f39834.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7451],{457:e=>{e.exports=JSON.parse('[{"entryPoints":[{"index":true,"label":"Index","reflection":{"id":1,"name":"@moonrepo/report","kind":2,"kindString":"Module","flags":{},"children":[{"id":29,"name":"PreparedAction","kind":256,"kindString":"Interface","flags":{},"children":[{"id":30,"name":"comments","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":4,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":31,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"Duration"}]}},{"id":32,"name":"icon","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":6,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":33,"name":"label","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":7,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":34,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":8,"character":4}],"type":{"type":"reference","name":"ActionStatus"}},{"id":35,"name":"time","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":9,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[30,31,32,33,34,35]}],"sources":[{"fileName":"report/cjs/report.d.ts","line":3,"character":17}],"permalink":"/api/report/interface/PreparedAction","previousId":20},{"id":44,"name":"formatDuration","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/time.d.ts","line":4,"character":24}],"signatures":[{"id":45,"name":"formatDuration","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":46,"name":"duration","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"Duration"}]}}],"type":{"type":"intrinsic","name":"string"}}],"permalink":"/api/report/function/formatDuration","nextId":39},{"id":39,"name":"formatTime","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/time.d.ts","line":3,"character":24}],"signatures":[{"id":40,"name":"formatTime","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":41,"name":"mins","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":42,"name":"secs","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":43,"name":"millis","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"string"}}],"permalink":"/api/report/function/formatTime","previousId":44,"nextId":36},{"id":36,"name":"getDurationInMillis","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/time.d.ts","line":2,"character":24}],"signatures":[{"id":37,"name":"getDurationInMillis","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":38,"name":"duration","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Duration"}}],"type":{"type":"intrinsic","name":"number"}}],"permalink":"/api/report/function/getDurationInMillis","previousId":39,"nextId":4},{"id":4,"name":"getIconForStatus","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":4,"character":16,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/report/src/action.ts#L4"}],"signatures":[{"id":5,"name":"getIconForStatus","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":6,"name":"status","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ActionStatus"}}],"type":{"type":"intrinsic","name":"string"}}],"permalink":"/api/report/function/getIconForStatus","previousId":36,"nextId":7},{"id":7,"name":"hasFailed","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":27,"character":16,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/report/src/action.ts#L27"}],"signatures":[{"id":8,"name":"hasFailed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":9,"name":"status","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ActionStatus"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/hasFailed","previousId":4,"nextId":10},{"id":10,"name":"hasPassed","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":31,"character":16,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/report/src/action.ts#L31"}],"signatures":[{"id":11,"name":"hasPassed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":12,"name":"status","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ActionStatus"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/hasPassed","previousId":7,"nextId":13},{"id":13,"name":"isFlaky","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":35,"character":16,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/report/src/action.ts#L35"}],"signatures":[{"id":14,"name":"isFlaky","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":15,"name":"action","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Action"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/isFlaky","previousId":10,"nextId":16},{"id":16,"name":"isSlow","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":48,"character":16,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/report/src/action.ts#L48"}],"signatures":[{"id":17,"name":"isSlow","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":18,"name":"action","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Action"}},{"id":19,"name":"slowThreshold","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/isSlow","previousId":13,"nextId":25},{"id":25,"name":"prepareReportActions","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":11,"character":24}],"signatures":[{"id":26,"name":"prepareReportActions","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":27,"name":"report","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RunReport"}},{"id":28,"name":"slowThreshold","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"array","elementType":{"type":"reference","id":29,"name":"PreparedAction"}}}],"permalink":"/api/report/function/prepareReportActions","previousId":16,"nextId":20},{"id":20,"name":"sortReport","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":2,"character":24}],"signatures":[{"id":21,"name":"sortReport","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":22,"name":"report","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RunReport"}},{"id":23,"name":"sortBy","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":"label"},{"type":"literal","value":"time"}]}},{"id":24,"name":"sortDir","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":"asc"},{"type":"literal","value":"desc"}]}}],"type":{"type":"intrinsic","name":"void"}}],"permalink":"/api/report/function/sortReport","previousId":25,"nextId":29}],"groups":[{"title":"Functions","children":[44,39,36,4,7,10,13,16,25,20]},{"title":"Interfaces","children":[29]}],"sources":[{"fileName":"report/src/index.ts","line":1,"character":0,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/report/src/index.ts#L1"}],"permalink":"/api/report"},"urlSlug":"report"}],"packageName":"@moonrepo/report","packageVersion":"1.1.0"},{"entryPoints":[{"index":true,"label":"Index","reflection":{"id":2,"name":"@moonrepo/runtime","kind":2,"kindString":"Module","flags":{},"children":[{"id":49,"name":"RuntimeContext","kind":256,"kindString":"Interface","flags":{},"children":[{"id":50,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":6,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/context.ts#L6"}],"type":{"type":"reference","name":"Project"}},{"id":51,"name":"projectRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":7,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/context.ts#L7"}],"type":{"type":"reference","name":"Path","qualifiedName":"Path","package":"@boost/common"}},{"id":52,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":8,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/context.ts#L8"}],"type":{"type":"intrinsic","name":"string"}},{"id":53,"name":"workspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":9,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/context.ts#L9"}],"type":{"type":"reference","name":"Path","qualifiedName":"Path","package":"@boost/common"}}],"groups":[{"title":"Properties","children":[50,51,52,53]}],"sources":[{"fileName":"runtime/src/context.ts","line":5,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/context.ts#L5"}],"permalink":"/api/runtime/interface/RuntimeContext","previousId":47},{"id":47,"name":"getContext","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":12,"character":22,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/context.ts#L12"}],"signatures":[{"id":48,"name":"getContext","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","typeArguments":[{"type":"reference","id":49,"name":"RuntimeContext"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}],"permalink":"/api/runtime/function/getContext","nextId":49}],"groups":[{"title":"Functions","children":[47]},{"title":"Interfaces","children":[49]}],"sources":[{"fileName":"runtime/src/index.ts","line":1,"character":0,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/runtime/src/index.ts#L1"}],"permalink":"/api/runtime"},"urlSlug":"runtime"}],"packageName":"@moonrepo/runtime","packageVersion":"0.0.14"},{"entryPoints":[{"index":true,"label":"Index","reflection":{"id":3,"name":"@moonrepo/types","kind":2,"kindString":"Module","flags":{},"children":[{"id":180,"name":"Action","kind":256,"kindString":"Interface","flags":{},"children":[{"id":181,"name":"allowFailure","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":11,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":182,"name":"attempts","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":12,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":174,"name":"Attempt"}}]}},{"id":183,"name":"createdAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":13,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":184,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":185,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":186,"name":"finishedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":187,"name":"flaky","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":17,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":188,"name":"label","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":18,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":189,"name":"nodeIndex","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":19,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":190,"name":"startedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":191,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":21,"character":4}],"type":{"type":"reference","id":173,"name":"ActionStatus"}}],"groups":[{"title":"Properties","children":[181,182,183,184,185,186,187,188,189,190,191]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":10,"character":17}],"permalink":"/api/types/interface/Action","nextId":195},{"id":195,"name":"ActionContext","kind":256,"kindString":"Interface","flags":{},"children":[{"id":196,"name":"affectedOnly","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":28,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":197,"name":"initialTargets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":29,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":198,"name":"passthroughArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":30,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":199,"name":"primaryTargets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":31,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":200,"name":"profile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"cpu"},{"type":"literal","value":"heap"}]}},{"id":201,"name":"targetStates","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":33,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":192,"name":"TargetState"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":202,"name":"touchedFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":34,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":203,"name":"workspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":35,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[196,197,198,199,200,201,202,203]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":27,"character":17}],"permalink":"/api/types/interface/ActionContext","previousId":180,"nextId":221},{"id":221,"name":"ActionNodeInstallDeps","kind":256,"kindString":"Interface","flags":{},"children":[{"id":222,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":56,"character":4}],"type":{"type":"literal","value":"InstallDeps"}},{"id":223,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":57,"character":4}],"type":{"type":"reflection","declaration":{"id":224,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":225,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":58,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[225]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":57,"character":12}]}}}],"groups":[{"title":"Properties","children":[222,223]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":55,"character":17}],"permalink":"/api/types/interface/ActionNodeInstallDeps","previousId":195,"nextId":226},{"id":226,"name":"ActionNodeInstallProjectDeps","kind":256,"kindString":"Interface","flags":{},"children":[{"id":227,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":62,"character":4}],"type":{"type":"literal","value":"InstallProjectDeps"}},{"id":228,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":63,"character":4}],"type":{"type":"reflection","declaration":{"id":229,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":231,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":65,"character":8}],"type":{"type":"intrinsic","name":"string"}},{"id":230,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":64,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[231,230]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":63,"character":12}]}}}],"groups":[{"title":"Properties","children":[227,228]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":61,"character":17}],"permalink":"/api/types/interface/ActionNodeInstallProjectDeps","previousId":221,"nextId":232},{"id":232,"name":"ActionNodeRunTask","kind":256,"kindString":"Interface","flags":{},"children":[{"id":233,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":69,"character":4}],"type":{"type":"literal","value":"RunTask"}},{"id":234,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":70,"character":4}],"type":{"type":"reflection","declaration":{"id":235,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":236,"name":"interactive","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":71,"character":8}],"type":{"type":"intrinsic","name":"boolean"}},{"id":237,"name":"persistent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":72,"character":8}],"type":{"type":"intrinsic","name":"boolean"}},{"id":238,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":73,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}},{"id":239,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":74,"character":8}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[236,237,238,239]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":70,"character":12}]}}}],"groups":[{"title":"Properties","children":[233,234]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":68,"character":17}],"permalink":"/api/types/interface/ActionNodeRunTask","previousId":226,"nextId":240},{"id":240,"name":"ActionNodeSetupTool","kind":256,"kindString":"Interface","flags":{},"children":[{"id":241,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":78,"character":4}],"type":{"type":"literal","value":"SetupTool"}},{"id":242,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":79,"character":4}],"type":{"type":"reflection","declaration":{"id":243,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":244,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":80,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[244]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":79,"character":12}]}}}],"groups":[{"title":"Properties","children":[241,242]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":77,"character":17}],"permalink":"/api/types/interface/ActionNodeSetupTool","previousId":232,"nextId":245},{"id":245,"name":"ActionNodeSyncProject","kind":256,"kindString":"Interface","flags":{},"children":[{"id":246,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":84,"character":4}],"type":{"type":"literal","value":"SyncProject"}},{"id":247,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":85,"character":4}],"type":{"type":"reflection","declaration":{"id":248,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":250,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":87,"character":8}],"type":{"type":"intrinsic","name":"string"}},{"id":249,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":86,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[250,249]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":85,"character":12}]}}}],"groups":[{"title":"Properties","children":[246,247]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":83,"character":17}],"permalink":"/api/types/interface/ActionNodeSyncProject","previousId":240,"nextId":251},{"id":251,"name":"ActionNodeSyncWorkspace","kind":256,"kindString":"Interface","flags":{},"children":[{"id":252,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":91,"character":4}],"type":{"type":"literal","value":"SyncWorkspace"}},{"id":253,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":92,"character":4}],"type":{"type":"reflection","declaration":{"id":254,"name":"__type","kind":65536,"kindString":"Type literal","flags":{}}}}],"groups":[{"title":"Properties","children":[252,253]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":90,"character":17}],"permalink":"/api/types/interface/ActionNodeSyncWorkspace","previousId":245,"nextId":174},{"id":174,"name":"Attempt","kind":256,"kindString":"Interface","flags":{},"children":[{"id":175,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":176,"name":"finishedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":177,"name":"index","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":6,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":178,"name":"startedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":7,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":179,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":8,"character":4}],"type":{"type":"reference","id":173,"name":"ActionStatus"}}],"groups":[{"title":"Properties","children":[175,176,177,178,179]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":3,"character":17}],"permalink":"/api/types/interface/Attempt","previousId":251,"nextId":627},{"id":627,"name":"BinConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":628,"name":"bin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":86,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":629,"name":"force","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":87,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":630,"name":"local","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":88,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":631,"name":"name","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":89,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[628,629,630,631]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":85,"character":17}],"permalink":"/api/types/interface/BinConfig","previousId":174,"nextId":738},{"id":738,"name":"CodeownersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":739,"name":"globalPaths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":77,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":740,"name":"orderBy","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":78,"character":4}],"type":{"type":"reference","id":683,"name":"CodeownersOrderBy"}},{"id":741,"name":"syncOnRun","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":79,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[739,740,741]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":76,"character":17}],"permalink":"/api/types/interface/CodeownersConfig","previousId":627,"nextId":742},{"id":742,"name":"ConstraintsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":743,"name":"enforceProjectTypeRelationships","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":83,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":744,"name":"tagRelationships","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":84,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[743,744]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":81,"character":17}],"permalink":"/api/types/interface/ConstraintsConfig","previousId":738,"nextId":633},{"id":633,"name":"DenoConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#deno"}]},"children":[{"id":634,"name":"bins","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":94,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":632,"name":"BinEntry"}}},{"id":635,"name":"depsFile","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'deps.ts\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":96,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":636,"name":"lockfile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":97,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":637,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":98,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[634,635,636,637]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":93,"character":17}],"permalink":"/api/types/interface/DenoConfig","previousId":742,"nextId":363},{"id":363,"name":"DependencyConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":364,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":69,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":365,"name":"scope","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":70,"character":4}],"type":{"type":"reference","id":309,"name":"DependencyScope"}},{"id":366,"name":"source","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":71,"character":4}],"type":{"type":"reference","id":310,"name":"DependencySource"}},{"id":367,"name":"via","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":72,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[364,365,366,367]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":68,"character":17}],"permalink":"/api/types/interface/DependencyConfig","previousId":633,"nextId":56},{"id":56,"name":"Duration","kind":256,"kindString":"Interface","flags":{},"children":[{"id":58,"name":"nanos","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/common.ts","line":7,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L7"}],"type":{"type":"intrinsic","name":"number"}},{"id":57,"name":"secs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/common.ts","line":6,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L6"}],"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[58,57]}],"sources":[{"fileName":"types/src/common.ts","line":5,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L5"}],"permalink":"/api/types/interface/Duration","previousId":363,"nextId":85},{"id":85,"name":"EventActionFinished","kind":256,"kindString":"Interface","flags":{},"children":[{"id":86,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":54,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L54"}],"type":{"type":"reference","id":180,"name":"Action"}},{"id":87,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":55,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L55"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":88,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":56,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L56"}],"type":{"type":"reference","id":220,"name":"ActionNode"}}],"groups":[{"title":"Properties","children":[86,87,88]}],"sources":[{"fileName":"types/src/events.ts","line":53,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L53"}],"permalink":"/api/types/interface/EventActionFinished","previousId":56,"nextId":81},{"id":81,"name":"EventActionStarted","kind":256,"kindString":"Interface","flags":{},"children":[{"id":82,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":47,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L47"}],"type":{"type":"reference","id":180,"name":"Action"}},{"id":83,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":48,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L48"}],"type":{"type":"reference","id":220,"name":"ActionNode"}}],"groups":[{"title":"Properties","children":[82,83]}],"sources":[{"fileName":"types/src/events.ts","line":46,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L46"}],"permalink":"/api/types/interface/EventActionStarted","previousId":85,"nextId":94},{"id":94,"name":"EventDependenciesInstalled","kind":256,"kindString":"Interface","flags":{},"children":[{"id":95,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":72,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L72"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":96,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":73,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L73"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":292,"name":"Project"}]}},{"id":97,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":74,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L74"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[95,96,97]}],"sources":[{"fileName":"types/src/events.ts","line":71,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L71"}],"permalink":"/api/types/interface/EventDependenciesInstalled","previousId":81,"nextId":90},{"id":90,"name":"EventDependenciesInstalling","kind":256,"kindString":"Interface","flags":{},"children":[{"id":91,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":62,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L62"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":292,"name":"Project"}]}},{"id":92,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":63,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L63"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[91,92]}],"sources":[{"fileName":"types/src/events.ts","line":61,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L61"}],"permalink":"/api/types/interface/EventDependenciesInstalling","previousId":94,"nextId":108},{"id":108,"name":"EventPipelineAborted","kind":256,"kindString":"Interface","flags":{},"children":[{"id":109,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":98,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L98"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[109]}],"sources":[{"fileName":"types/src/events.ts","line":97,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L97"}],"permalink":"/api/types/interface/EventPipelineAborted","previousId":90,"nextId":115},{"id":115,"name":"EventPipelineFinished","kind":256,"kindString":"Interface","flags":{},"children":[{"id":116,"name":"baselineDuration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":111,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L111"}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":117,"name":"cachedCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":112,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L112"}],"type":{"type":"intrinsic","name":"number"}},{"id":118,"name":"context","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":113,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L113"}],"type":{"type":"reference","id":195,"name":"ActionContext"}},{"id":119,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":114,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L114"}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":120,"name":"estimatedSavings","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":115,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L115"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":121,"name":"failedCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":116,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L116"}],"type":{"type":"intrinsic","name":"number"}},{"id":122,"name":"passedCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":117,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L117"}],"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[116,117,118,119,120,121,122]}],"sources":[{"fileName":"types/src/events.ts","line":110,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L110"}],"permalink":"/api/types/interface/EventPipelineFinished","previousId":108,"nextId":111},{"id":111,"name":"EventPipelineStarted","kind":256,"kindString":"Interface","flags":{},"children":[{"id":112,"name":"actionsCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":104,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L104"}],"type":{"type":"intrinsic","name":"number"}},{"id":113,"name":"context","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":105,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L105"}],"type":{"type":"reference","id":195,"name":"ActionContext"}}],"groups":[{"title":"Properties","children":[112,113]}],"sources":[{"fileName":"types/src/events.ts","line":103,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L103"}],"permalink":"/api/types/interface/EventPipelineStarted","previousId":115,"nextId":103},{"id":103,"name":"EventProjectSynced","kind":256,"kindString":"Interface","flags":{},"children":[{"id":104,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":90,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L90"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":105,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":91,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L91"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":106,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":92,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L92"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[104,105,106]}],"sources":[{"fileName":"types/src/events.ts","line":89,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L89"}],"permalink":"/api/types/interface/EventProjectSynced","previousId":111,"nextId":99},{"id":99,"name":"EventProjectSyncing","kind":256,"kindString":"Interface","flags":{},"children":[{"id":100,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":83,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L83"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":101,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":84,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L84"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[100,101]}],"sources":[{"fileName":"types/src/events.ts","line":82,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L82"}],"permalink":"/api/types/interface/EventProjectSyncing","previousId":103,"nextId":137},{"id":137,"name":"EventTargetOutputArchived","kind":256,"kindString":"Interface","flags":{},"children":[{"id":138,"name":"archivePath","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":148,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L148"}],"type":{"type":"intrinsic","name":"string"}},{"id":139,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":149,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L149"}],"type":{"type":"intrinsic","name":"string"}},{"id":140,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":150,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L150"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":141,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":151,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L151"}],"type":{"type":"intrinsic","name":"string"}},{"id":142,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":152,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L152"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[138,139,140,141,142]}],"sources":[{"fileName":"types/src/events.ts","line":147,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L147"}],"permalink":"/api/types/interface/EventTargetOutputArchived","previousId":99,"nextId":131},{"id":131,"name":"EventTargetOutputArchiving","kind":256,"kindString":"Interface","flags":{},"children":[{"id":132,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":136,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L136"}],"type":{"type":"intrinsic","name":"string"}},{"id":133,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":137,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L137"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":134,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":138,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L138"}],"type":{"type":"intrinsic","name":"string"}},{"id":135,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":139,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L139"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[132,133,134,135]}],"sources":[{"fileName":"types/src/events.ts","line":135,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L135"}],"permalink":"/api/types/interface/EventTargetOutputArchiving","previousId":137,"nextId":157},{"id":157,"name":"EventTargetOutputCacheCheck","kind":256,"kindString":"Interface","flags":{},"children":[{"id":158,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":186,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L186"}],"type":{"type":"intrinsic","name":"string"}},{"id":159,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":187,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L187"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[158,159]}],"sources":[{"fileName":"types/src/events.ts","line":185,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L185"}],"permalink":"/api/types/interface/EventTargetOutputCacheCheck","previousId":131,"nextId":150},{"id":150,"name":"EventTargetOutputHydrated","kind":256,"kindString":"Interface","flags":{},"children":[{"id":151,"name":"archivePath","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":173,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L173"}],"type":{"type":"intrinsic","name":"string"}},{"id":152,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":174,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L174"}],"type":{"type":"intrinsic","name":"string"}},{"id":153,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":175,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L175"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":154,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":176,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L176"}],"type":{"type":"intrinsic","name":"string"}},{"id":155,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":177,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L177"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[151,152,153,154,155]}],"sources":[{"fileName":"types/src/events.ts","line":172,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L172"}],"permalink":"/api/types/interface/EventTargetOutputHydrated","previousId":157,"nextId":144},{"id":144,"name":"EventTargetOutputHydrating","kind":256,"kindString":"Interface","flags":{},"children":[{"id":145,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":161,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L161"}],"type":{"type":"intrinsic","name":"string"}},{"id":146,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":162,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L162"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":147,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":163,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L163"}],"type":{"type":"intrinsic","name":"string"}},{"id":148,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":164,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L164"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[145,146,147,148]}],"sources":[{"fileName":"types/src/events.ts","line":160,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L160"}],"permalink":"/api/types/interface/EventTargetOutputHydrating","previousId":150,"nextId":127},{"id":127,"name":"EventTargetRan","kind":256,"kindString":"Interface","flags":{},"children":[{"id":128,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":129,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L129"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":129,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":130,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L130"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[128,129]}],"sources":[{"fileName":"types/src/events.ts","line":128,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L128"}],"permalink":"/api/types/interface/EventTargetRan","previousId":144,"nextId":124},{"id":124,"name":"EventTargetRunning","kind":256,"kindString":"Interface","flags":{},"children":[{"id":125,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":123,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L123"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[125]}],"sources":[{"fileName":"types/src/events.ts","line":122,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L122"}],"permalink":"/api/types/interface/EventTargetRunning","previousId":127,"nextId":164},{"id":164,"name":"EventToolInstalled","kind":256,"kindString":"Interface","flags":{},"children":[{"id":165,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":202,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L202"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":166,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":203,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L203"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[165,166]}],"sources":[{"fileName":"types/src/events.ts","line":201,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L201"}],"permalink":"/api/types/interface/EventToolInstalled","previousId":124,"nextId":161},{"id":161,"name":"EventToolInstalling","kind":256,"kindString":"Interface","flags":{},"children":[{"id":162,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":196,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L196"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[162]}],"sources":[{"fileName":"types/src/events.ts","line":195,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L195"}],"permalink":"/api/types/interface/EventToolInstalling","previousId":164,"nextId":170},{"id":170,"name":"EventWorkspaceSynced","kind":256,"kindString":"Interface","flags":{},"children":[{"id":171,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":211,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L211"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[171]}],"sources":[{"fileName":"types/src/events.ts","line":210,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L210"}],"permalink":"/api/types/interface/EventWorkspaceSynced","previousId":161,"nextId":745},{"id":745,"name":"ExperimentsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":746,"name":"taskOutputBoundaries","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":88,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[746]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":86,"character":17}],"permalink":"/api/types/interface/ExperimentsConfig","previousId":170,"nextId":255},{"id":255,"name":"FileGroup","kind":256,"kindString":"Interface","flags":{},"children":[{"id":256,"name":"files","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":4,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":257,"name":"globs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":5,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":258,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":6,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[256,257,258]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":3,"character":17}],"permalink":"/api/types/interface/FileGroup","previousId":745,"nextId":747},{"id":747,"name":"GeneratorConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":748,"name":"templates","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":91,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"groups":[{"title":"Properties","children":[748]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":90,"character":17}],"permalink":"/api/types/interface/GeneratorConfig","previousId":255,"nextId":749},{"id":749,"name":"HasherConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":750,"name":"batchSize","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"2500"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":95,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":751,"name":"ignoreMissingPatterns","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":96,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":752,"name":"ignorePatterns","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":97,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":753,"name":"optimization","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":98,"character":4}],"type":{"type":"reference","id":695,"name":"HasherOptimization"}},{"id":754,"name":"walkStrategy","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":99,"character":4}],"type":{"type":"reference","id":696,"name":"HasherWalkStrategy"}},{"id":755,"name":"warnOnMissingInputs","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":101,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[750,751,752,753,754,755]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":93,"character":17}],"permalink":"/api/types/interface/HasherConfig","previousId":747,"nextId":488},{"id":488,"name":"InheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/tasks"}]},"children":[{"id":489,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/tasks.json\'"}]}]},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":86,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":490,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":87,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":491,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":88,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":492,"name":"implicitDeps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":89,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":493,"name":"implicitInputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":90,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":494,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":91,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":476,"name":"TaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[489,490,491,492,493,494]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":84,"character":17}],"permalink":"/api/types/interface/InheritedTasksConfig","previousId":749,"nextId":648},{"id":648,"name":"NodeConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#node"}]},"children":[{"id":649,"name":"addEnginesConstraint","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":116,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":650,"name":"aliasPackageNames","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":117,"character":4}],"type":{"type":"reference","id":578,"name":"NodeProjectAliasFormat"}},{"id":651,"name":"binExecArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":118,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":652,"name":"dedupeOnLockfileChange","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":120,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":653,"name":"dependencyVersionFormat","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":121,"character":4}],"type":{"type":"reference","id":579,"name":"NodeVersionFormat"}},{"id":654,"name":"inferTasksFromScripts","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":122,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":655,"name":"npm","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":123,"character":4}],"type":{"type":"reference","id":638,"name":"NpmConfig"}},{"id":656,"name":"packageManager","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":124,"character":4}],"type":{"type":"reference","id":583,"name":"NodePackageManager"}},{"id":657,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":125,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":658,"name":"pnpm","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":126,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":641,"name":"PnpmConfig"}]}},{"id":659,"name":"syncProjectWorkspaceDependencies","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":128,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":660,"name":"syncVersionManagerConfig","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":129,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":587,"name":"NodeVersionManager"}]}},{"id":661,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":130,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":662,"name":"yarn","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":131,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":644,"name":"YarnConfig"}]}}],"groups":[{"title":"Properties","children":[649,650,651,652,653,654,655,656,657,658,659,660,661,662]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":114,"character":17}],"permalink":"/api/types/interface/NodeConfig","previousId":488,"nextId":756},{"id":756,"name":"NotifierConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":757,"name":"webhookUrl","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":104,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[757]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":103,"character":17}],"permalink":"/api/types/interface/NotifierConfig","previousId":648,"nextId":638},{"id":638,"name":"NpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":639,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":101,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":640,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":102,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[639,640]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":100,"character":17}],"permalink":"/api/types/interface/NpmConfig","previousId":756,"nextId":370},{"id":370,"name":"OwnersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":371,"name":"customGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":77,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":372,"name":"defaultOwner","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":78,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":373,"name":"optional","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":79,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":374,"name":"paths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":80,"character":4}],"type":{"type":"reference","id":369,"name":"OwnersPaths"}},{"id":375,"name":"requiredApprovals","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":82,"character":4}],"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[371,372,373,374,375]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":76,"character":17}],"permalink":"/api/types/interface/OwnersConfig","previousId":638,"nextId":567},{"id":567,"name":"PartialBinConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":568,"name":"bin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":2,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":569,"name":"force","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":3,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":570,"name":"local","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":571,"name":"name","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[568,569,570,571]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":1,"character":17}],"permalink":"/api/types/interface/PartialBinConfig","previousId":370,"nextId":684},{"id":684,"name":"PartialCodeownersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":685,"name":"globalPaths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":3,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":686,"name":"orderBy","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":683,"name":"CodeownersOrderBy"}]}},{"id":687,"name":"syncOnRun","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[685,686,687]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":2,"character":17}],"permalink":"/api/types/interface/PartialCodeownersConfig","previousId":567,"nextId":688},{"id":688,"name":"PartialConstraintsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":689,"name":"enforceProjectTypeRelationships","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":690,"name":"tagRelationships","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":10,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[689,690]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":7,"character":17}],"permalink":"/api/types/interface/PartialConstraintsConfig","previousId":684,"nextId":573},{"id":573,"name":"PartialDenoConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#deno"}]},"children":[{"id":574,"name":"bins","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":10,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":572,"name":"PartialBinEntry"}}]}},{"id":575,"name":"depsFile","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'deps.ts\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":12,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":576,"name":"lockfile","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":13,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":577,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[574,575,576,577]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":9,"character":17}],"permalink":"/api/types/interface/PartialDenoConfig","previousId":688,"nextId":311},{"id":311,"name":"PartialDependencyConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":312,"name":"id","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":313,"name":"scope","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":6,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":309,"name":"DependencyScope"}]}},{"id":314,"name":"source","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":7,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":310,"name":"DependencySource"}]}},{"id":315,"name":"via","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":8,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[312,313,314,315]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":4,"character":17}],"permalink":"/api/types/interface/PartialDependencyConfig","previousId":573,"nextId":691},{"id":691,"name":"PartialExperimentsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":692,"name":"taskOutputBoundaries","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[692]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":12,"character":17}],"permalink":"/api/types/interface/PartialExperimentsConfig","previousId":311,"nextId":693},{"id":693,"name":"PartialGeneratorConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":694,"name":"templates","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}}],"groups":[{"title":"Properties","children":[694]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":16,"character":17}],"permalink":"/api/types/interface/PartialGeneratorConfig","previousId":691,"nextId":697},{"id":697,"name":"PartialHasherConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":698,"name":"batchSize","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"2500"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":699,"name":"ignoreMissingPatterns","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":700,"name":"ignorePatterns","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":25,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":701,"name":"optimization","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":26,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":695,"name":"HasherOptimization"}]}},{"id":702,"name":"walkStrategy","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":27,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":696,"name":"HasherWalkStrategy"}]}},{"id":703,"name":"warnOnMissingInputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[698,699,700,701,702,703]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":21,"character":17}],"permalink":"/api/types/interface/PartialHasherConfig","previousId":693,"nextId":450},{"id":450,"name":"PartialInheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/tasks"}]},"children":[{"id":451,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/tasks.json\'"}]}]},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":43,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":452,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":453,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":454,"name":"implicitDeps","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":455,"name":"implicitInputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":47,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":456,"name":"tasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":48,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":438,"name":"PartialTaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[451,452,453,454,455,456]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":41,"character":17}],"permalink":"/api/types/interface/PartialInheritedTasksConfig","previousId":697,"nextId":592},{"id":592,"name":"PartialNodeConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#node"}]},"children":[{"id":593,"name":"addEnginesConstraint","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":594,"name":"aliasPackageNames","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":37,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":578,"name":"NodeProjectAliasFormat"}]}},{"id":595,"name":"binExecArgs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":596,"name":"dedupeOnLockfileChange","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":40,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":597,"name":"dependencyVersionFormat","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":41,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":579,"name":"NodeVersionFormat"}]}},{"id":598,"name":"inferTasksFromScripts","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":42,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":599,"name":"npm","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":43,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":580,"name":"PartialNpmConfig"}]}},{"id":600,"name":"packageManager","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":583,"name":"NodePackageManager"}]}},{"id":601,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":602,"name":"pnpm","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":584,"name":"PartialPnpmConfig"}]}},{"id":603,"name":"syncProjectWorkspaceDependencies","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":48,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":604,"name":"syncVersionManagerConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":49,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":587,"name":"NodeVersionManager"}]}},{"id":605,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":50,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":606,"name":"yarn","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":588,"name":"PartialYarnConfig"}]}}],"groups":[{"title":"Properties","children":[593,594,595,596,597,598,599,600,601,602,603,604,605,606]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":34,"character":17}],"permalink":"/api/types/interface/PartialNodeConfig","previousId":450,"nextId":704},{"id":704,"name":"PartialNotifierConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":705,"name":"webhookUrl","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[705]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":31,"character":17}],"permalink":"/api/types/interface/PartialNotifierConfig","previousId":592,"nextId":580},{"id":580,"name":"PartialNpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":581,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":19,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":582,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[581,582]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":18,"character":17}],"permalink":"/api/types/interface/PartialNpmConfig","previousId":704,"nextId":319},{"id":319,"name":"PartialOwnersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":320,"name":"customGroups","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":321,"name":"defaultOwner","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":322,"name":"optional","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":323,"name":"paths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":318,"name":"PartialOwnersPaths"}]}},{"id":324,"name":"requiredApprovals","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":19,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}}],"groups":[{"title":"Properties","children":[320,321,322,323,324]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":13,"character":17}],"permalink":"/api/types/interface/PartialOwnersConfig","previousId":580,"nextId":584},{"id":584,"name":"PartialPnpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":585,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":586,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":25,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[585,586]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":23,"character":17}],"permalink":"/api/types/interface/PartialPnpmConfig","previousId":319,"nextId":349},{"id":349,"name":"PartialProjectConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/project"}]},"children":[{"id":350,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/project.json\'"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":54,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":351,"name":"dependsOn","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":316,"name":"PartialProjectDependsOn"}}]}},{"id":352,"name":"env","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":353,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":57,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":354,"name":"language","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":58,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":317,"name":"LanguageType"}]}},{"id":355,"name":"owners","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":59,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":319,"name":"PartialOwnersConfig"}]}},{"id":356,"name":"platform","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":60,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":436,"name":"PlatformType"}]}},{"id":357,"name":"project","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":325,"name":"PartialProjectMetadataConfig"}]}},{"id":358,"name":"tags","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":62,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":359,"name":"tasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":438,"name":"PartialTaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":360,"name":"toolchain","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":64,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":338,"name":"PartialProjectToolchainConfig"}]}},{"id":361,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":342,"name":"ProjectType"}]}},{"id":362,"name":"workspace","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":66,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":347,"name":"PartialProjectWorkspaceConfig"}]}}],"groups":[{"title":"Properties","children":[350,351,352,353,354,355,356,357,358,359,360,361,362]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":52,"character":17}],"permalink":"/api/types/interface/PartialProjectConfig","previousId":584,"nextId":325},{"id":325,"name":"PartialProjectMetadataConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":326,"name":"channel","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":22,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":327,"name":"description","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":328,"name":"maintainers","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":329,"name":"name","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":25,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":330,"name":"owner","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":26,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[326,327,328,329,330]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":21,"character":17}],"permalink":"/api/types/interface/PartialProjectMetadataConfig","previousId":349,"nextId":331},{"id":331,"name":"PartialProjectToolchainCommonToolConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":332,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[332]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":28,"character":17}],"permalink":"/api/types/interface/PartialProjectToolchainCommonToolConfig","previousId":325,"nextId":338},{"id":338,"name":"PartialProjectToolchainConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":339,"name":"node","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":331,"name":"PartialProjectToolchainCommonToolConfig"}]}},{"id":340,"name":"rust","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":39,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":331,"name":"PartialProjectToolchainCommonToolConfig"}]}},{"id":341,"name":"typescript","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":40,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":333,"name":"PartialProjectToolchainTypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[339,340,341]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":37,"character":17}],"permalink":"/api/types/interface/PartialProjectToolchainConfig","previousId":331,"nextId":333},{"id":333,"name":"PartialProjectToolchainTypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":334,"name":"disabled","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":335,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":33,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":336,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":34,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":337,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[334,335,336,337]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":31,"character":17}],"permalink":"/api/types/interface/PartialProjectToolchainTypeScriptConfig","previousId":338,"nextId":347},{"id":347,"name":"PartialProjectWorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":348,"name":"inheritedTasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":49,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":343,"name":"PartialProjectWorkspaceInheritedTasksConfig"}]}}],"groups":[{"title":"Properties","children":[348]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":48,"character":17}],"permalink":"/api/types/interface/PartialProjectWorkspaceConfig","previousId":333,"nextId":343},{"id":343,"name":"PartialProjectWorkspaceInheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":344,"name":"exclude","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":345,"name":"include","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":346,"name":"rename","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[344,345,346]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":43,"character":17}],"permalink":"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig","previousId":347,"nextId":710},{"id":710,"name":"PartialRunnerConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":711,"name":"archivableTargets","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":40,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":712,"name":"cacheLifetime","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'7 days\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":42,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":713,"name":"inheritColorsForPipedTasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":714,"name":"logRunningCommand","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[711,712,713,714]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":39,"character":17}],"permalink":"/api/types/interface/PartialRunnerConfig","previousId":343,"nextId":607},{"id":607,"name":"PartialRustConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#rust"}]},"children":[{"id":608,"name":"bins","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":572,"name":"PartialBinEntry"}}]}},{"id":609,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":610,"name":"syncToolchainConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":57,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":611,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":58,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[608,609,610,611]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":54,"character":17}],"permalink":"/api/types/interface/PartialRustConfig","previousId":710,"nextId":438},{"id":438,"name":"PartialTaskConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":439,"name":"args","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":28,"character":4}],"type":{"type":"reference","id":413,"name":"PartialTaskCommandArgs"}},{"id":440,"name":"command","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":29,"character":4}],"type":{"type":"reference","id":413,"name":"PartialTaskCommandArgs"}},{"id":441,"name":"deps","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":30,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":442,"name":"env","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":31,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":443,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":444,"name":"inputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":33,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":445,"name":"local","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":34,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":446,"name":"options","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":418,"name":"PartialTaskOptionsConfig"}]}},{"id":447,"name":"outputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":448,"name":"platform","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":37,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":436,"name":"PlatformType"}]}},{"id":449,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":437,"name":"TaskType"}]}}],"groups":[{"title":"Properties","children":[439,440,441,442,443,444,445,446,447,448,449]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":27,"character":17}],"permalink":"/api/types/interface/PartialTaskConfig","previousId":607,"nextId":418},{"id":418,"name":"PartialTaskOptionsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":419,"name":"affectedFiles","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":7,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":414,"name":"TaskOptionAffectedFiles"}]}},{"id":420,"name":"allowFailure","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":8,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":421,"name":"cache","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":422,"name":"envFile","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":10,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":415,"name":"TaskOptionEnvFile"}]}},{"id":423,"name":"interactive","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":11,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":424,"name":"mergeArgs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":12,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":425,"name":"mergeDeps","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":13,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":426,"name":"mergeEnv","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":427,"name":"mergeInputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":428,"name":"mergeOutputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":429,"name":"outputStyle","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":417,"name":"TaskOutputStyle"}]}},{"id":430,"name":"persistent","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":18,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":431,"name":"retryCount","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":19,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":432,"name":"runDepsInParallel","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":433,"name":"runFromWorkspaceRoot","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":21,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":434,"name":"runInCI","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":22,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":435,"name":"shell","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":6,"character":17}],"permalink":"/api/types/interface/PartialTaskOptionsConfig","previousId":438,"nextId":521},{"id":521,"name":"PartialTemplateConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template"}]},"children":[{"id":522,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":523,"name":"description","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":524,"name":"title","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":37,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":525,"name":"variables","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":520,"name":"PartialTemplateVariable"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[522,523,524,525]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":33,"character":17}],"permalink":"/api/types/interface/PartialTemplateConfig","previousId":418,"nextId":526},{"id":526,"name":"PartialTemplateFrontmatterConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template#frontmatter"}]},"children":[{"id":527,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template-frontmatter.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":43,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":528,"name":"force","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":529,"name":"skip","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":530,"name":"to","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[527,528,529,530]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":41,"character":17}],"permalink":"/api/types/interface/PartialTemplateFrontmatterConfig","previousId":521,"nextId":495},{"id":495,"name":"PartialTemplateVariableBoolSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":496,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":2,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":497,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":3,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":498,"name":"required","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":499,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"boolean"}]}}],"groups":[{"title":"Properties","children":[496,497,498,499]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":1,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableBoolSetting","previousId":526,"nextId":504},{"id":504,"name":"PartialTemplateVariableEnumSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":505,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":13,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":506,"name":"multiple","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":507,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":508,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"enum"}]}},{"id":509,"name":"values","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":503,"name":"PartialTemplateVariableEnumValue"}}]}}],"groups":[{"title":"Properties","children":[505,506,507,508,509]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":12,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableEnumSetting","previousId":495,"nextId":500},{"id":500,"name":"PartialTemplateVariableEnumValueConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":501,"name":"label","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":8,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":502,"name":"value","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[501,502]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":7,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableEnumValueConfig","previousId":504,"nextId":510},{"id":510,"name":"PartialTemplateVariableNumberSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":511,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":512,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":21,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":513,"name":"required","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":22,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":514,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"number"}]}}],"groups":[{"title":"Properties","children":[511,512,513,514]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":19,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableNumberSetting","previousId":500,"nextId":515},{"id":515,"name":"PartialTemplateVariableStringSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":516,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":26,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":517,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":27,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":518,"name":"required","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":28,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":519,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"string"}]}}],"groups":[{"title":"Properties","children":[516,517,518,519]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":25,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableStringSetting","previousId":510,"nextId":620},{"id":620,"name":"PartialToolchainConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain"}]},"children":[{"id":621,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/toolchain.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":78,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":622,"name":"deno","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":79,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":573,"name":"PartialDenoConfig"}]}},{"id":623,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":80,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":624,"name":"node","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":81,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":592,"name":"PartialNodeConfig"}]}},{"id":625,"name":"rust","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":82,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":607,"name":"PartialRustConfig"}]}},{"id":626,"name":"typescript","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":83,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":612,"name":"PartialTypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[621,622,623,624,625,626]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":76,"character":17}],"permalink":"/api/types/interface/PartialToolchainConfig","previousId":515,"nextId":612},{"id":612,"name":"PartialTypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#typescript"}]},"children":[{"id":613,"name":"createMissingConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":614,"name":"projectConfigFileName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":615,"name":"rootConfigFileName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":67,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":616,"name":"rootOptionsConfigFileName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.options.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":69,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":617,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":70,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":618,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":72,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":619,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":73,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[613,614,615,616,617,618,619]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":61,"character":17}],"permalink":"/api/types/interface/PartialTypeScriptConfig","previousId":620,"nextId":717},{"id":717,"name":"PartialVcsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":718,"name":"defaultBranch","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'master\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":719,"name":"hooks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":52,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":720,"name":"manager","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":53,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"git"}]}},{"id":721,"name":"provider","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":54,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":716,"name":"VcsProvider"}]}},{"id":722,"name":"remoteCandidates","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":723,"name":"syncHooks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[718,719,720,721,722,723]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":49,"character":17}],"permalink":"/api/types/interface/PartialVcsConfig","previousId":612,"nextId":724},{"id":724,"name":"PartialWorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/workspace"}]},"children":[{"id":725,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/workspace.json\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":726,"name":"codeowners","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":62,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":684,"name":"PartialCodeownersConfig"}]}},{"id":727,"name":"constraints","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":688,"name":"PartialConstraintsConfig"}]}},{"id":728,"name":"experiments","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":64,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":691,"name":"PartialExperimentsConfig"}]}},{"id":729,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":730,"name":"generator","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":66,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":693,"name":"PartialGeneratorConfig"}]}},{"id":731,"name":"hasher","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":67,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":697,"name":"PartialHasherConfig"}]}},{"id":732,"name":"notifier","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":68,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":704,"name":"PartialNotifierConfig"}]}},{"id":733,"name":"projects","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":69,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":709,"name":"PartialWorkspaceProjects"}]}},{"id":734,"name":"runner","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":70,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":710,"name":"PartialRunnerConfig"}]}},{"id":735,"name":"telemetry","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":72,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":736,"name":"vcs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":73,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":717,"name":"PartialVcsConfig"}]}},{"id":737,"name":"versionConstraint","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":74,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[725,726,727,728,729,730,731,732,733,734,735,736,737]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":59,"character":17}],"permalink":"/api/types/interface/PartialWorkspaceConfig","previousId":717,"nextId":706},{"id":706,"name":"PartialWorkspaceProjectsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":707,"name":"globs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":708,"name":"sources","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[707,708]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":34,"character":17}],"permalink":"/api/types/interface/PartialWorkspaceProjectsConfig","previousId":724,"nextId":588},{"id":588,"name":"PartialYarnConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":589,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":590,"name":"plugins","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":30,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":591,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":31,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[589,590,591]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":28,"character":17}],"permalink":"/api/types/interface/PartialYarnConfig","previousId":706,"nextId":641},{"id":641,"name":"PnpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":642,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":105,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":643,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":106,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[642,643]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":104,"character":17}],"permalink":"/api/types/interface/PnpmConfig","previousId":588,"nextId":292},{"id":292,"name":"Project","kind":256,"kindString":"Interface","flags":{},"children":[{"id":293,"name":"alias","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":294,"name":"config","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":45,"character":4}],"type":{"type":"reference","id":399,"name":"ProjectConfig"}},{"id":295,"name":"dependencies","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":46,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":363,"name":"DependencyConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":296,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":47,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":255,"name":"FileGroup"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":297,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":48,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":298,"name":"inherited","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":49,"character":4}],"type":{"type":"reflection","declaration":{"id":299,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":302,"name":"config","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":52,"character":8}],"type":{"type":"reference","id":488,"name":"InheritedTasksConfig"}},{"id":301,"name":"layers","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":51,"character":8}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":450,"name":"PartialInheritedTasksConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":300,"name":"order","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":50,"character":8}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"groups":[{"title":"Properties","children":[302,301,300]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":49,"character":15}]}}},{"id":303,"name":"language","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":54,"character":4}],"type":{"type":"reference","id":317,"name":"LanguageType"}},{"id":304,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":55,"character":4}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":305,"name":"root","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":56,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":306,"name":"source","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":57,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":307,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":58,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":275,"name":"Task"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":308,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":59,"character":4}],"type":{"type":"reference","id":342,"name":"ProjectType"}}],"groups":[{"title":"Properties","children":[293,294,295,296,297,298,303,304,305,306,307,308]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":43,"character":17}],"permalink":"/api/types/interface/Project","previousId":641,"nextId":399},{"id":399,"name":"ProjectConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/project"}]},"children":[{"id":400,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/project.json\'"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":116,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":401,"name":"dependsOn","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":117,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":368,"name":"ProjectDependsOn"}}},{"id":402,"name":"env","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":118,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":403,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":119,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":404,"name":"language","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":120,"character":4}],"type":{"type":"reference","id":317,"name":"LanguageType"}},{"id":405,"name":"owners","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":121,"character":4}],"type":{"type":"reference","id":370,"name":"OwnersConfig"}},{"id":406,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":122,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":436,"name":"PlatformType"}]}},{"id":407,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":123,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":376,"name":"ProjectMetadataConfig"}]}},{"id":408,"name":"tags","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":124,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":409,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":125,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":476,"name":"TaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":410,"name":"toolchain","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":126,"character":4}],"type":{"type":"reference","id":389,"name":"ProjectToolchainConfig"}},{"id":411,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":127,"character":4}],"type":{"type":"reference","id":342,"name":"ProjectType"}},{"id":412,"name":"workspace","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":128,"character":4}],"type":{"type":"reference","id":397,"name":"ProjectWorkspaceConfig"}}],"groups":[{"title":"Properties","children":[400,401,402,403,404,405,406,407,408,409,410,411,412]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":114,"character":17}],"permalink":"/api/types/interface/ProjectConfig","previousId":292,"nextId":376},{"id":376,"name":"ProjectMetadataConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":377,"name":"channel","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":85,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":378,"name":"description","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":86,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":379,"name":"maintainers","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":87,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":380,"name":"name","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":88,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":381,"name":"owner","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":89,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[377,378,379,380,381]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":84,"character":17}],"permalink":"/api/types/interface/ProjectMetadataConfig","previousId":399,"nextId":382},{"id":382,"name":"ProjectToolchainCommonToolConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":383,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":92,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[383]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":91,"character":17}],"permalink":"/api/types/interface/ProjectToolchainCommonToolConfig","previousId":376,"nextId":389},{"id":389,"name":"ProjectToolchainConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":390,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":101,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":382,"name":"ProjectToolchainCommonToolConfig"}]}},{"id":391,"name":"rust","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":102,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":382,"name":"ProjectToolchainCommonToolConfig"}]}},{"id":392,"name":"typescript","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":103,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":384,"name":"ProjectToolchainTypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[390,391,392]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":100,"character":17}],"permalink":"/api/types/interface/ProjectToolchainConfig","previousId":382,"nextId":384},{"id":384,"name":"ProjectToolchainTypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":385,"name":"disabled","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":95,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":386,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":96,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":387,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":97,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":388,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":98,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[385,386,387,388]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":94,"character":17}],"permalink":"/api/types/interface/ProjectToolchainTypeScriptConfig","previousId":389,"nextId":397},{"id":397,"name":"ProjectWorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":398,"name":"inheritedTasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":111,"character":4}],"type":{"type":"reference","id":393,"name":"ProjectWorkspaceInheritedTasksConfig"}}],"groups":[{"title":"Properties","children":[398]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":110,"character":17}],"permalink":"/api/types/interface/ProjectWorkspaceConfig","previousId":384,"nextId":393},{"id":393,"name":"ProjectWorkspaceInheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":394,"name":"exclude","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":106,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":395,"name":"include","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":107,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":396,"name":"rename","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":108,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[394,395,396]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":105,"character":17}],"permalink":"/api/types/interface/ProjectWorkspaceInheritedTasksConfig","previousId":397,"nextId":63},{"id":63,"name":"ProviderEnvironment","kind":256,"kindString":"Interface","flags":{},"children":[{"id":64,"name":"baseBranch","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":6,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L6"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":65,"name":"branch","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":7,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L7"}],"type":{"type":"intrinsic","name":"string"}},{"id":66,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":8,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L8"}],"type":{"type":"intrinsic","name":"string"}},{"id":67,"name":"provider","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":9,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L9"}],"type":{"type":"intrinsic","name":"string"}},{"id":68,"name":"requestId","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":10,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L10"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":69,"name":"requestUrl","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":11,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L11"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":70,"name":"revision","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":12,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L12"}],"type":{"type":"intrinsic","name":"string"}},{"id":71,"name":"url","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":13,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L13"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[64,65,66,67,68,69,70,71]}],"sources":[{"fileName":"types/src/events.ts","line":5,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L5"}],"permalink":"/api/types/interface/ProviderEnvironment","previousId":393,"nextId":204},{"id":204,"name":"RunReport","kind":256,"kindString":"Interface","flags":{},"children":[{"id":205,"name":"actions","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":38,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":180,"name":"Action"}}},{"id":208,"name":"comparisonEstimate","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":41,"character":4}],"type":{"type":"reflection","declaration":{"id":209,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":210,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":42,"character":8}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":211,"name":"gain","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":43,"character":8}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":212,"name":"loss","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":44,"character":8}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":213,"name":"percent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":45,"character":8}],"type":{"type":"intrinsic","name":"number"}},{"id":214,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":46,"character":8}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"id":215,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":216,"name":"count","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":47,"character":12}],"type":{"type":"intrinsic","name":"number"}},{"id":217,"name":"total","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":48,"character":12}],"type":{"type":"reference","id":56,"name":"Duration"}}],"groups":[{"title":"Properties","children":[216,217]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":46,"character":30}]}}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[210,211,212,213,214]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":41,"character":24}]}}},{"id":206,"name":"context","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":39,"character":4}],"type":{"type":"reference","id":195,"name":"ActionContext"}},{"id":207,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":40,"character":4}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":218,"name":"estimatedSavings","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":219,"name":"projectedDuration","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":52,"character":4}],"type":{"type":"reference","id":56,"name":"Duration"}}],"groups":[{"title":"Properties","children":[205,208,206,207,218,219]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":37,"character":17}],"permalink":"/api/types/interface/RunReport","previousId":63,"nextId":762},{"id":762,"name":"RunnerConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":763,"name":"archivableTargets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":112,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":764,"name":"cacheLifetime","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'7 days\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":114,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":765,"name":"inheritColorsForPipedTasks","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":116,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":766,"name":"logRunningCommand","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":117,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[763,764,765,766]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":111,"character":17}],"permalink":"/api/types/interface/RunnerConfig","previousId":204,"nextId":59},{"id":59,"name":"Runtime","kind":256,"kindString":"Interface","flags":{},"children":[{"id":62,"name":"overridden","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/src/common.ts","line":13,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L13"}],"type":{"type":"intrinsic","name":"boolean"}},{"id":60,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/common.ts","line":11,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L11"}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":61,"name":"requirement","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/src/common.ts","line":12,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L12"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[62,60,61]}],"sources":[{"fileName":"types/src/common.ts","line":10,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L10"}],"permalink":"/api/types/interface/Runtime","previousId":762,"nextId":663},{"id":663,"name":"RustConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#rust"}]},"children":[{"id":664,"name":"bins","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":135,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":632,"name":"BinEntry"}}},{"id":665,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":136,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":666,"name":"syncToolchainConfig","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":137,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":667,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":138,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[664,665,666,667]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":134,"character":17}],"permalink":"/api/types/interface/RustConfig","previousId":59,"nextId":192},{"id":192,"name":"TargetState","kind":256,"kindString":"Interface","flags":{},"children":[{"id":194,"name":"hash","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":25,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":193,"name":"state","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":"failed"},{"type":"literal","value":"skipped"},{"type":"literal","value":"completed"},{"type":"literal","value":"passthrough"}]}}],"groups":[{"title":"Properties","children":[194,193]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":23,"character":17}],"permalink":"/api/types/interface/TargetState","previousId":663,"nextId":275},{"id":275,"name":"Task","kind":256,"kindString":"Interface","flags":{},"children":[{"id":276,"name":"args","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":26,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":277,"name":"command","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":27,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":278,"name":"deps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":28,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":279,"name":"env","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":29,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":280,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":30,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":282,"name":"inputFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":32,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":283,"name":"inputGlobs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":33,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":284,"name":"inputVars","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":34,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":281,"name":"inputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":31,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":285,"name":"options","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":35,"character":4}],"type":{"type":"reference","id":259,"name":"TaskOptions"}},{"id":287,"name":"outputFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":37,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":288,"name":"outputGlobs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":38,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":286,"name":"outputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":36,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":289,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":39,"character":4}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":290,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":40,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":291,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":41,"character":4}],"type":{"type":"reference","id":437,"name":"TaskType"}}],"groups":[{"title":"Properties","children":[276,277,278,279,280,282,283,284,281,285,287,288,286,289,290,291]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":25,"character":17}],"permalink":"/api/types/interface/Task","previousId":192,"nextId":476},{"id":476,"name":"TaskConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":477,"name":"args","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":71,"character":4}],"type":{"type":"reference","id":457,"name":"TaskCommandArgs"}},{"id":478,"name":"command","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":72,"character":4}],"type":{"type":"reference","id":457,"name":"TaskCommandArgs"}},{"id":479,"name":"deps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":73,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":480,"name":"env","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":74,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":481,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":75,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":482,"name":"inputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":76,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":483,"name":"local","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":77,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":484,"name":"options","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":78,"character":4}],"type":{"type":"reference","id":458,"name":"TaskOptionsConfig"}},{"id":485,"name":"outputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":79,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":486,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":80,"character":4}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":487,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":81,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":437,"name":"TaskType"}]}}],"groups":[{"title":"Properties","children":[477,478,479,480,481,482,483,484,485,486,487]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":70,"character":17}],"permalink":"/api/types/interface/TaskConfig","previousId":275,"nextId":259},{"id":259,"name":"TaskOptions","kind":256,"kindString":"Interface","flags":{},"children":[{"id":260,"name":"affectedFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":"args"},{"type":"literal","value":"env"}]}},{"id":261,"name":"cache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":10,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":262,"name":"envFile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":11,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":263,"name":"mergeArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":12,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":264,"name":"mergeDeps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":13,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":265,"name":"mergeEnv","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":14,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":266,"name":"mergeInputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":15,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":267,"name":"mergeOutputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":16,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":268,"name":"outputStyle","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":417,"name":"TaskOutputStyle"}]}},{"id":269,"name":"persistent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":18,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":270,"name":"retryCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":19,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":271,"name":"runDepsInParallel","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":20,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":273,"name":"runFromWorkspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":22,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":272,"name":"runInCI","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":21,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":274,"name":"shell","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":23,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[260,261,262,263,264,265,266,267,268,269,270,271,273,272,274]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":8,"character":17}],"permalink":"/api/types/interface/TaskOptions","previousId":476,"nextId":458},{"id":458,"name":"TaskOptionsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":459,"name":"affectedFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":52,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":414,"name":"TaskOptionAffectedFiles"}]}},{"id":460,"name":"allowFailure","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":53,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":461,"name":"cache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":54,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":462,"name":"envFile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":415,"name":"TaskOptionEnvFile"}]}},{"id":463,"name":"interactive","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":464,"name":"mergeArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":57,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":465,"name":"mergeDeps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":58,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":466,"name":"mergeEnv","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":59,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":467,"name":"mergeInputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":60,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":468,"name":"mergeOutputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":469,"name":"outputStyle","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":62,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":417,"name":"TaskOutputStyle"}]}},{"id":470,"name":"persistent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":471,"name":"retryCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":64,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":472,"name":"runDepsInParallel","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":473,"name":"runFromWorkspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":66,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":474,"name":"runInCI","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":67,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":475,"name":"shell","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":68,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":51,"character":17}],"permalink":"/api/types/interface/TaskOptionsConfig","previousId":259,"nextId":557},{"id":557,"name":"TemplateConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template"}]},"children":[{"id":558,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":82,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":559,"name":"description","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":83,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":560,"name":"title","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":84,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":561,"name":"variables","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":85,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":556,"name":"TemplateVariable"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[558,559,560,561]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":80,"character":17}],"permalink":"/api/types/interface/TemplateConfig","previousId":458,"nextId":562},{"id":562,"name":"TemplateFrontmatterConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template#frontmatter"}]},"children":[{"id":563,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template-frontmatter.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":90,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":564,"name":"force","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":91,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":565,"name":"skip","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":92,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":566,"name":"to","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":93,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[563,564,565,566]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":88,"character":17}],"permalink":"/api/types/interface/TemplateFrontmatterConfig","previousId":557,"nextId":531},{"id":531,"name":"TemplateVariableBoolSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":532,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":49,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":533,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":50,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":534,"name":"required","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":535,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":52,"character":4}],"type":{"type":"literal","value":"boolean"}}],"groups":[{"title":"Properties","children":[532,533,534,535]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":48,"character":17}],"permalink":"/api/types/interface/TemplateVariableBoolSetting","previousId":562,"nextId":540},{"id":540,"name":"TemplateVariableEnumSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":541,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":60,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":542,"name":"multiple","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":543,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":62,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":544,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":63,"character":4}],"type":{"type":"literal","value":"enum"}},{"id":545,"name":"values","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":64,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":539,"name":"TemplateVariableEnumValue"}}}],"groups":[{"title":"Properties","children":[541,542,543,544,545]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":59,"character":17}],"permalink":"/api/types/interface/TemplateVariableEnumSetting","previousId":531,"nextId":536},{"id":536,"name":"TemplateVariableEnumValueConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":537,"name":"label","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":55,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":538,"name":"value","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":56,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[537,538]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":54,"character":17}],"permalink":"/api/types/interface/TemplateVariableEnumValueConfig","previousId":540,"nextId":546},{"id":546,"name":"TemplateVariableNumberSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":547,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":67,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":548,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":68,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":549,"name":"required","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":69,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":550,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":70,"character":4}],"type":{"type":"literal","value":"number"}}],"groups":[{"title":"Properties","children":[547,548,549,550]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":66,"character":17}],"permalink":"/api/types/interface/TemplateVariableNumberSetting","previousId":536,"nextId":551},{"id":551,"name":"TemplateVariableStringSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":552,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":73,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":553,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":74,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":554,"name":"required","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":75,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":555,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":76,"character":4}],"type":{"type":"literal","value":"string"}}],"groups":[{"title":"Properties","children":[552,553,554,555]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":72,"character":17}],"permalink":"/api/types/interface/TemplateVariableStringSetting","previousId":546,"nextId":676},{"id":676,"name":"ToolchainConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain"}]},"children":[{"id":677,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/toolchain.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":158,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":678,"name":"deno","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":159,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":633,"name":"DenoConfig"}]}},{"id":679,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":160,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":680,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":161,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":648,"name":"NodeConfig"}]}},{"id":681,"name":"rust","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":162,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":663,"name":"RustConfig"}]}},{"id":682,"name":"typescript","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":163,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":668,"name":"TypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[677,678,679,680,681,682]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":156,"character":17}],"permalink":"/api/types/interface/ToolchainConfig","previousId":551,"nextId":668},{"id":668,"name":"TypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#typescript"}]},"children":[{"id":669,"name":"createMissingConfig","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":143,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":670,"name":"projectConfigFileName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":145,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":671,"name":"rootConfigFileName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":147,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":672,"name":"rootOptionsConfigFileName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.options.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":149,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":673,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":150,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":674,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":152,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":675,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":153,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[669,670,671,672,673,674,675]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":141,"character":17}],"permalink":"/api/types/interface/TypeScriptConfig","previousId":676,"nextId":767},{"id":767,"name":"VcsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":768,"name":"defaultBranch","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'master\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":121,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":769,"name":"hooks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":122,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":770,"name":"manager","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":123,"character":4}],"type":{"type":"literal","value":"git"}},{"id":771,"name":"provider","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":124,"character":4}],"type":{"type":"reference","id":716,"name":"VcsProvider"}},{"id":772,"name":"remoteCandidates","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":125,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":773,"name":"syncHooks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":126,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[768,769,770,771,772,773]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":119,"character":17}],"permalink":"/api/types/interface/VcsConfig","previousId":668,"nextId":72},{"id":72,"name":"WebhookPayload","kind":256,"kindString":"Interface","flags":{},"children":[{"id":73,"name":"createdAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":17,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L17"}],"type":{"type":"intrinsic","name":"string"}},{"id":74,"name":"environment","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":18,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L18"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":63,"name":"ProviderEnvironment"}]}},{"id":75,"name":"event","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":19,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L19"}],"type":{"type":"reference","id":79,"name":"E"}},{"id":76,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":20,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L20"}],"type":{"type":"reference","id":78,"name":"T"}},{"id":77,"name":"uuid","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":21,"character":1,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L21"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[73,74,75,76,77]}],"sources":[{"fileName":"types/src/events.ts","line":16,"character":17,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L16"}],"typeParameters":[{"id":78,"name":"T","kind":131072,"kindString":"Type parameter","flags":{},"type":{"type":"reference","id":80,"name":"EventType"}},{"id":79,"name":"E","kind":131072,"kindString":"Type parameter","flags":{}}],"permalink":"/api/types/interface/WebhookPayload","previousId":767,"nextId":774},{"id":774,"name":"WorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/workspace"}]},"children":[{"id":775,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/workspace.json\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":131,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":776,"name":"codeowners","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":132,"character":4}],"type":{"type":"reference","id":738,"name":"CodeownersConfig"}},{"id":777,"name":"constraints","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":133,"character":4}],"type":{"type":"reference","id":742,"name":"ConstraintsConfig"}},{"id":778,"name":"experiments","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":134,"character":4}],"type":{"type":"reference","id":745,"name":"ExperimentsConfig"}},{"id":779,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":135,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":780,"name":"generator","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":136,"character":4}],"type":{"type":"reference","id":747,"name":"GeneratorConfig"}},{"id":781,"name":"hasher","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":137,"character":4}],"type":{"type":"reference","id":749,"name":"HasherConfig"}},{"id":782,"name":"notifier","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":138,"character":4}],"type":{"type":"reference","id":756,"name":"NotifierConfig"}},{"id":783,"name":"projects","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":139,"character":4}],"type":{"type":"reference","id":761,"name":"WorkspaceProjects"}},{"id":784,"name":"runner","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":140,"character":4}],"type":{"type":"reference","id":762,"name":"RunnerConfig"}},{"id":785,"name":"telemetry","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":142,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":786,"name":"vcs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":143,"character":4}],"type":{"type":"reference","id":767,"name":"VcsConfig"}},{"id":787,"name":"versionConstraint","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":144,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[775,776,777,778,779,780,781,782,783,784,785,786,787]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":129,"character":17}],"permalink":"/api/types/interface/WorkspaceConfig","previousId":72,"nextId":758},{"id":758,"name":"WorkspaceProjectsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":759,"name":"globs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":107,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":760,"name":"sources","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":108,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[759,760]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":106,"character":17}],"permalink":"/api/types/interface/WorkspaceProjectsConfig","previousId":774,"nextId":644},{"id":644,"name":"YarnConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":645,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":109,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":646,"name":"plugins","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":110,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":647,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":111,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[645,646,647]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":108,"character":17}],"permalink":"/api/types/interface/YarnConfig","previousId":758,"nextId":220},{"id":220,"name":"ActionNode","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":54,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":221,"name":"ActionNodeInstallDeps"},{"type":"reference","id":226,"name":"ActionNodeInstallProjectDeps"},{"type":"reference","id":232,"name":"ActionNodeRunTask"},{"type":"reference","id":240,"name":"ActionNodeSetupTool"},{"type":"reference","id":245,"name":"ActionNodeSyncProject"},{"type":"reference","id":251,"name":"ActionNodeSyncWorkspace"}]},"permalink":"/api/types#ActionNode","previousId":644,"nextId":173},{"id":173,"name":"ActionStatus","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":2,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"cached-from-remote"},{"type":"literal","value":"cached"},{"type":"literal","value":"failed-and-abort"},{"type":"literal","value":"failed"},{"type":"literal","value":"invalid"},{"type":"literal","value":"passed"},{"type":"literal","value":"running"},{"type":"literal","value":"skipped"}]},"permalink":"/api/types#ActionStatus","previousId":220,"nextId":632},{"id":632,"name":"BinEntry","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":91,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":627,"name":"BinConfig"}]},"permalink":"/api/types#BinEntry","previousId":173,"nextId":683},{"id":683,"name":"CodeownersOrderBy","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":1,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"file-source"},{"type":"literal","value":"project-name"}]},"permalink":"/api/types#CodeownersOrderBy","previousId":632,"nextId":309},{"id":309,"name":"DependencyScope","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":2,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"build"},{"type":"literal","value":"development"},{"type":"literal","value":"peer"},{"type":"literal","value":"production"},{"type":"literal","value":"root"}]},"permalink":"/api/types#DependencyScope","previousId":683,"nextId":310},{"id":310,"name":"DependencySource","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":3,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"explicit"},{"type":"literal","value":"implicit"}]},"permalink":"/api/types#DependencySource","previousId":309,"nextId":80},{"id":80,"name":"EventType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":24,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L24"}],"type":{"type":"union","types":[{"type":"literal","value":"action.finished"},{"type":"literal","value":"action.started"},{"type":"literal","value":"dependencies.installed"},{"type":"literal","value":"dependencies.installing"},{"type":"literal","value":"pipeline.aborted"},{"type":"literal","value":"pipeline.finished"},{"type":"literal","value":"pipeline.started"},{"type":"literal","value":"project.synced"},{"type":"literal","value":"project.syncing"},{"type":"literal","value":"target-output.archived"},{"type":"literal","value":"target-output.archiving"},{"type":"literal","value":"target-output.cache-check"},{"type":"literal","value":"target-output.hydrated"},{"type":"literal","value":"target-output.hydrating"},{"type":"literal","value":"target.ran"},{"type":"literal","value":"target.running"},{"type":"literal","value":"tool.installed"},{"type":"literal","value":"tool.installing"},{"type":"literal","value":"workspace.synced"},{"type":"literal","value":"workspace.syncing"}]},"permalink":"/api/types#EventType","previousId":310,"nextId":695},{"id":695,"name":"HasherOptimization","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":19,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"accuracy"},{"type":"literal","value":"performance"}]},"permalink":"/api/types#HasherOptimization","previousId":80,"nextId":696},{"id":696,"name":"HasherWalkStrategy","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":20,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"glob"},{"type":"literal","value":"vcs"}]},"permalink":"/api/types#HasherWalkStrategy","previousId":695,"nextId":317},{"id":317,"name":"LanguageType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":11,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"bash"},{"type":"literal","value":"batch"},{"type":"literal","value":"go"},{"type":"literal","value":"javascript"},{"type":"literal","value":"php"},{"type":"literal","value":"python"},{"type":"literal","value":"ruby"},{"type":"literal","value":"rust"},{"type":"literal","value":"typescript"},{"type":"literal","value":"unknown"}]},"permalink":"/api/types#LanguageType","previousId":696,"nextId":583},{"id":583,"name":"NodePackageManager","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":22,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"npm"},{"type":"literal","value":"pnpm"},{"type":"literal","value":"yarn"}]},"permalink":"/api/types#NodePackageManager","previousId":317,"nextId":578},{"id":578,"name":"NodeProjectAliasFormat","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":16,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"name-and-scope"},{"type":"literal","value":"name-only"}]},"permalink":"/api/types#NodeProjectAliasFormat","previousId":583,"nextId":579},{"id":579,"name":"NodeVersionFormat","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":17,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"file"},{"type":"literal","value":"link"},{"type":"literal","value":"star"},{"type":"literal","value":"version"},{"type":"literal","value":"version-caret"},{"type":"literal","value":"version-tilde"},{"type":"literal","value":"workspace"},{"type":"literal","value":"workspace-caret"},{"type":"literal","value":"workspace-tilde"}]},"permalink":"/api/types#NodeVersionFormat","previousId":578,"nextId":587},{"id":587,"name":"NodeVersionManager","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":27,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"nodenv"},{"type":"literal","value":"nvm"}]},"permalink":"/api/types#NodeVersionManager","previousId":579,"nextId":54},{"id":54,"name":"Nullable","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/common.ts","line":3,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/common.ts#L3"}],"typeParameters":[{"id":55,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"type":{"type":"mapped","parameter":"K","parameterType":{"type":"typeOperator","operator":"keyof","target":{"type":"reference","id":55,"name":"T"}},"templateType":{"type":"union","types":[{"type":"indexedAccess","indexType":{"type":"reference","name":"K"},"objectType":{"type":"reference","id":55,"name":"T"}},{"type":"literal","value":null}]}},"permalink":"/api/types#Nullable","previousId":587,"nextId":369},{"id":369,"name":"OwnersPaths","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":75,"character":12}],"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#OwnersPaths","previousId":54,"nextId":572},{"id":572,"name":"PartialBinEntry","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":7,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":567,"name":"PartialBinConfig"}]},"permalink":"/api/types#PartialBinEntry","previousId":369,"nextId":318},{"id":318,"name":"PartialOwnersPaths","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":12,"character":12}],"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#PartialOwnersPaths","previousId":572,"nextId":316},{"id":316,"name":"PartialProjectDependsOn","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":10,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":311,"name":"PartialDependencyConfig"}]},"permalink":"/api/types#PartialProjectDependsOn","previousId":318,"nextId":413},{"id":413,"name":"PartialTaskCommandArgs","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":1,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]},"permalink":"/api/types#PartialTaskCommandArgs","previousId":316,"nextId":520},{"id":520,"name":"PartialTemplateVariable","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":31,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":495,"name":"PartialTemplateVariableBoolSetting"},{"type":"reference","id":504,"name":"PartialTemplateVariableEnumSetting"},{"type":"reference","id":510,"name":"PartialTemplateVariableNumberSetting"},{"type":"reference","id":515,"name":"PartialTemplateVariableStringSetting"}]},"permalink":"/api/types#PartialTemplateVariable","previousId":413,"nextId":503},{"id":503,"name":"PartialTemplateVariableEnumValue","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":11,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":500,"name":"PartialTemplateVariableEnumValueConfig"}]},"permalink":"/api/types#PartialTemplateVariableEnumValue","previousId":520,"nextId":709},{"id":709,"name":"PartialWorkspaceProjects","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":38,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":706,"name":"PartialWorkspaceProjectsConfig"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#PartialWorkspaceProjects","previousId":503,"nextId":89},{"id":89,"name":"PayloadActionFinished","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":59,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L59"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"action.finished"},{"type":"reference","id":85,"name":"EventActionFinished"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadActionFinished","previousId":709,"nextId":84},{"id":84,"name":"PayloadActionStarted","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":51,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L51"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"action.started"},{"type":"reference","id":81,"name":"EventActionStarted"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadActionStarted","previousId":89,"nextId":98},{"id":98,"name":"PayloadDependenciesInstalled","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":77,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L77"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"dependencies.installed"},{"type":"reference","id":94,"name":"EventDependenciesInstalled"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadDependenciesInstalled","previousId":84,"nextId":93},{"id":93,"name":"PayloadDependenciesInstalling","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":66,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L66"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"dependencies.installing"},{"type":"reference","id":90,"name":"EventDependenciesInstalling"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadDependenciesInstalling","previousId":98,"nextId":110},{"id":110,"name":"PayloadPipelineAborted","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":101,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L101"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"pipeline.aborted"},{"type":"reference","id":108,"name":"EventPipelineAborted"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadPipelineAborted","previousId":93,"nextId":123},{"id":123,"name":"PayloadPipelineFinished","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":120,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L120"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"pipeline.finished"},{"type":"reference","id":115,"name":"EventPipelineFinished"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadPipelineFinished","previousId":110,"nextId":114},{"id":114,"name":"PayloadPipelineStarted","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":108,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L108"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"pipeline.started"},{"type":"reference","id":111,"name":"EventPipelineStarted"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadPipelineStarted","previousId":123,"nextId":107},{"id":107,"name":"PayloadProjectSynced","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":95,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L95"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"project.synced"},{"type":"reference","id":103,"name":"EventProjectSynced"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadProjectSynced","previousId":114,"nextId":102},{"id":102,"name":"PayloadProjectSyncing","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":87,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L87"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"project.syncing"},{"type":"reference","id":99,"name":"EventProjectSyncing"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadProjectSyncing","previousId":107,"nextId":143},{"id":143,"name":"PayloadTargetOutputArchived","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":155,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L155"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.archived"},{"type":"reference","id":137,"name":"EventTargetOutputArchived"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputArchived","previousId":102,"nextId":136},{"id":136,"name":"PayloadTargetOutputArchiving","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":142,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L142"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.archiving"},{"type":"reference","id":131,"name":"EventTargetOutputArchiving"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputArchiving","previousId":143,"nextId":160},{"id":160,"name":"PayloadTargetOutputCacheCheck","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":190,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L190"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.cache-check"},{"type":"reference","id":157,"name":"EventTargetOutputCacheCheck"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputCacheCheck","previousId":136,"nextId":156},{"id":156,"name":"PayloadTargetOutputHydrated","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":180,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L180"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.hydrated"},{"type":"reference","id":150,"name":"EventTargetOutputHydrated"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputHydrated","previousId":160,"nextId":149},{"id":149,"name":"PayloadTargetOutputHydrating","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":167,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L167"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.hydrating"},{"type":"reference","id":144,"name":"EventTargetOutputHydrating"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputHydrating","previousId":156,"nextId":130},{"id":130,"name":"PayloadTargetRan","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":133,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L133"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target.ran"},{"type":"reference","id":127,"name":"EventTargetRan"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetRan","previousId":149,"nextId":126},{"id":126,"name":"PayloadTargetRunning","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":126,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L126"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target.running"},{"type":"reference","id":124,"name":"EventTargetRunning"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetRunning","previousId":130,"nextId":167},{"id":167,"name":"PayloadToolInstalled","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":206,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L206"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"tool.installed"},{"type":"reference","id":164,"name":"EventToolInstalled"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadToolInstalled","previousId":126,"nextId":163},{"id":163,"name":"PayloadToolInstalling","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":199,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L199"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"tool.installing"},{"type":"reference","id":161,"name":"EventToolInstalling"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadToolInstalling","previousId":167,"nextId":172},{"id":172,"name":"PayloadWorkspaceSynced","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":214,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L214"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"workspace.synced"},{"type":"reference","id":170,"name":"EventWorkspaceSynced"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadWorkspaceSynced","previousId":163,"nextId":168},{"id":168,"name":"PayloadWorkspaceSyncing","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":208,"character":12,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L208"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"workspace.syncing"},{"type":"reflection","declaration":{"id":169,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"types/src/events.ts","line":208,"character":74,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/events.ts#L208"}]}}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadWorkspaceSyncing","previousId":172,"nextId":436},{"id":436,"name":"PlatformType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":25,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"deno"},{"type":"literal","value":"node"},{"type":"literal","value":"rust"},{"type":"literal","value":"system"},{"type":"literal","value":"unknown"}]},"permalink":"/api/types#PlatformType","previousId":168,"nextId":368},{"id":368,"name":"ProjectDependsOn","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":74,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":363,"name":"DependencyConfig"}]},"permalink":"/api/types#ProjectDependsOn","previousId":436,"nextId":342},{"id":342,"name":"ProjectType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":42,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"application"},{"type":"literal","value":"library"},{"type":"literal","value":"tool"},{"type":"literal","value":"unknown"}]},"permalink":"/api/types#ProjectType","previousId":368,"nextId":457},{"id":457,"name":"TaskCommandArgs","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":50,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]},"permalink":"/api/types#TaskCommandArgs","previousId":342,"nextId":416},{"id":416,"name":"TaskMergeStrategy","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":4,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"append"},{"type":"literal","value":"prepend"},{"type":"literal","value":"replace"}]},"permalink":"/api/types#TaskMergeStrategy","previousId":457,"nextId":414},{"id":414,"name":"TaskOptionAffectedFiles","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":2,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":"args"},{"type":"literal","value":"env"}]},"permalink":"/api/types#TaskOptionAffectedFiles","previousId":416,"nextId":415},{"id":415,"name":"TaskOptionEnvFile","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":3,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"intrinsic","name":"string"}]},"permalink":"/api/types#TaskOptionEnvFile","previousId":414,"nextId":417},{"id":417,"name":"TaskOutputStyle","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":5,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"buffer"},{"type":"literal","value":"buffer-only-failure"},{"type":"literal","value":"hash"},{"type":"literal","value":"none"},{"type":"literal","value":"stream"}]},"permalink":"/api/types#TaskOutputStyle","previousId":415,"nextId":437},{"id":437,"name":"TaskType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":26,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"build"},{"type":"literal","value":"run"},{"type":"literal","value":"test"}]},"permalink":"/api/types#TaskType","previousId":417,"nextId":556},{"id":556,"name":"TemplateVariable","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":78,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":531,"name":"TemplateVariableBoolSetting"},{"type":"reference","id":540,"name":"TemplateVariableEnumSetting"},{"type":"reference","id":546,"name":"TemplateVariableNumberSetting"},{"type":"reference","id":551,"name":"TemplateVariableStringSetting"}]},"permalink":"/api/types#TemplateVariable","previousId":437,"nextId":539},{"id":539,"name":"TemplateVariableEnumValue","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":58,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":536,"name":"TemplateVariableEnumValueConfig"}]},"permalink":"/api/types#TemplateVariableEnumValue","previousId":556,"nextId":715},{"id":715,"name":"VcsManager","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":47,"character":12}],"type":{"type":"literal","value":"git"},"permalink":"/api/types#VcsManager","previousId":539,"nextId":716},{"id":716,"name":"VcsProvider","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":48,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"bitbucket"},{"type":"literal","value":"github"},{"type":"literal","value":"gitlab"},{"type":"literal","value":"other"}]},"permalink":"/api/types#VcsProvider","previousId":715,"nextId":761},{"id":761,"name":"WorkspaceProjects","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":110,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":758,"name":"WorkspaceProjectsConfig"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#WorkspaceProjects","previousId":716}],"groups":[{"title":"Interfaces","children":[180,195,221,226,232,240,245,251,174,627,738,742,633,363,56,85,81,94,90,108,115,111,103,99,137,131,157,150,144,127,124,164,161,170,745,255,747,749,488,648,756,638,370,567,684,688,573,311,691,693,697,450,592,704,580,319,584,349,325,331,338,333,347,343,710,607,438,418,521,526,495,504,500,510,515,620,612,717,724,706,588,641,292,399,376,382,389,384,397,393,63,204,762,59,663,192,275,476,259,458,557,562,531,540,536,546,551,676,668,767,72,774,758,644]},{"title":"Type Aliases","children":[220,173,632,683,309,310,80,695,696,317,583,578,579,587,54,369,572,318,316,413,520,503,709,89,84,98,93,110,123,114,107,102,143,136,160,156,149,130,126,167,163,172,168,436,368,342,457,416,414,415,417,437,556,539,715,716,761]}],"sources":[{"fileName":"types/src/index.ts","line":1,"character":0,"url":"https://github.com/moonrepo/moon/blob/fe0c502/packages/types/src/index.ts#L1"}],"permalink":"/api/types"},"urlSlug":"types"}],"packageName":"@moonrepo/types","packageVersion":"1.7.1"}]')}}]); \ No newline at end of file diff --git a/assets/js/1b469a71.2e65174d.js b/assets/js/1b469a71.2e65174d.js new file mode 100644 index 00000000000..2d3d2be476b --- /dev/null +++ b/assets/js/1b469a71.2e65174d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87451],{457:e=>{e.exports=JSON.parse('[{"entryPoints":[{"index":true,"label":"Index","reflection":{"id":1,"name":"@moonrepo/report","kind":2,"kindString":"Module","flags":{},"children":[{"id":29,"name":"PreparedAction","kind":256,"kindString":"Interface","flags":{},"children":[{"id":30,"name":"comments","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":4,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":31,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"Duration"}]}},{"id":32,"name":"icon","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":6,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":33,"name":"label","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":7,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":34,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":8,"character":4}],"type":{"type":"reference","name":"ActionStatus"}},{"id":35,"name":"time","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":9,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[30,31,32,33,34,35]}],"sources":[{"fileName":"report/cjs/report.d.ts","line":3,"character":17}],"permalink":"/api/report/interface/PreparedAction","previousId":20},{"id":44,"name":"formatDuration","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/time.d.ts","line":4,"character":24}],"signatures":[{"id":45,"name":"formatDuration","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":46,"name":"duration","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"Duration"}]}}],"type":{"type":"intrinsic","name":"string"}}],"permalink":"/api/report/function/formatDuration","nextId":39},{"id":39,"name":"formatTime","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/time.d.ts","line":3,"character":24}],"signatures":[{"id":40,"name":"formatTime","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":41,"name":"mins","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":42,"name":"secs","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":43,"name":"millis","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"string"}}],"permalink":"/api/report/function/formatTime","previousId":44,"nextId":36},{"id":36,"name":"getDurationInMillis","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/time.d.ts","line":2,"character":24}],"signatures":[{"id":37,"name":"getDurationInMillis","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":38,"name":"duration","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Duration"}}],"type":{"type":"intrinsic","name":"number"}}],"permalink":"/api/report/function/getDurationInMillis","previousId":39,"nextId":4},{"id":4,"name":"getIconForStatus","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":4,"character":16,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/report/src/action.ts#L4"}],"signatures":[{"id":5,"name":"getIconForStatus","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":6,"name":"status","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ActionStatus"}}],"type":{"type":"intrinsic","name":"string"}}],"permalink":"/api/report/function/getIconForStatus","previousId":36,"nextId":7},{"id":7,"name":"hasFailed","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":27,"character":16,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/report/src/action.ts#L27"}],"signatures":[{"id":8,"name":"hasFailed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":9,"name":"status","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ActionStatus"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/hasFailed","previousId":4,"nextId":10},{"id":10,"name":"hasPassed","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":31,"character":16,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/report/src/action.ts#L31"}],"signatures":[{"id":11,"name":"hasPassed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":12,"name":"status","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ActionStatus"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/hasPassed","previousId":7,"nextId":13},{"id":13,"name":"isFlaky","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":35,"character":16,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/report/src/action.ts#L35"}],"signatures":[{"id":14,"name":"isFlaky","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":15,"name":"action","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Action"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/isFlaky","previousId":10,"nextId":16},{"id":16,"name":"isSlow","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/src/action.ts","line":48,"character":16,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/report/src/action.ts#L48"}],"signatures":[{"id":17,"name":"isSlow","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":18,"name":"action","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Action"}},{"id":19,"name":"slowThreshold","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"boolean"}}],"permalink":"/api/report/function/isSlow","previousId":13,"nextId":25},{"id":25,"name":"prepareReportActions","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":11,"character":24}],"signatures":[{"id":26,"name":"prepareReportActions","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":27,"name":"report","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RunReport"}},{"id":28,"name":"slowThreshold","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"array","elementType":{"type":"reference","id":29,"name":"PreparedAction"}}}],"permalink":"/api/report/function/prepareReportActions","previousId":16,"nextId":20},{"id":20,"name":"sortReport","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"report/cjs/report.d.ts","line":2,"character":24}],"signatures":[{"id":21,"name":"sortReport","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":22,"name":"report","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RunReport"}},{"id":23,"name":"sortBy","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":"label"},{"type":"literal","value":"time"}]}},{"id":24,"name":"sortDir","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":"asc"},{"type":"literal","value":"desc"}]}}],"type":{"type":"intrinsic","name":"void"}}],"permalink":"/api/report/function/sortReport","previousId":25,"nextId":29}],"groups":[{"title":"Functions","children":[44,39,36,4,7,10,13,16,25,20]},{"title":"Interfaces","children":[29]}],"sources":[{"fileName":"report/src/index.ts","line":1,"character":0,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/report/src/index.ts#L1"}],"permalink":"/api/report"},"urlSlug":"report"}],"packageName":"@moonrepo/report","packageVersion":"1.1.0"},{"entryPoints":[{"index":true,"label":"Index","reflection":{"id":2,"name":"@moonrepo/runtime","kind":2,"kindString":"Module","flags":{},"children":[{"id":49,"name":"RuntimeContext","kind":256,"kindString":"Interface","flags":{},"children":[{"id":50,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":6,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/context.ts#L6"}],"type":{"type":"reference","name":"Project"}},{"id":51,"name":"projectRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":7,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/context.ts#L7"}],"type":{"type":"reference","name":"Path","qualifiedName":"Path","package":"@boost/common"}},{"id":52,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":8,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/context.ts#L8"}],"type":{"type":"intrinsic","name":"string"}},{"id":53,"name":"workspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":9,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/context.ts#L9"}],"type":{"type":"reference","name":"Path","qualifiedName":"Path","package":"@boost/common"}}],"groups":[{"title":"Properties","children":[50,51,52,53]}],"sources":[{"fileName":"runtime/src/context.ts","line":5,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/context.ts#L5"}],"permalink":"/api/runtime/interface/RuntimeContext","previousId":47},{"id":47,"name":"getContext","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"runtime/src/context.ts","line":12,"character":22,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/context.ts#L12"}],"signatures":[{"id":48,"name":"getContext","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","typeArguments":[{"type":"reference","id":49,"name":"RuntimeContext"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}],"permalink":"/api/runtime/function/getContext","nextId":49}],"groups":[{"title":"Functions","children":[47]},{"title":"Interfaces","children":[49]}],"sources":[{"fileName":"runtime/src/index.ts","line":1,"character":0,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/runtime/src/index.ts#L1"}],"permalink":"/api/runtime"},"urlSlug":"runtime"}],"packageName":"@moonrepo/runtime","packageVersion":"0.0.14"},{"entryPoints":[{"index":true,"label":"Index","reflection":{"id":3,"name":"@moonrepo/types","kind":2,"kindString":"Module","flags":{},"children":[{"id":180,"name":"Action","kind":256,"kindString":"Interface","flags":{},"children":[{"id":181,"name":"allowFailure","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":11,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":182,"name":"attempts","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":12,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":174,"name":"Attempt"}}]}},{"id":183,"name":"createdAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":13,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":184,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":185,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":186,"name":"finishedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":187,"name":"flaky","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":17,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":188,"name":"label","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":18,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":189,"name":"nodeIndex","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":19,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":190,"name":"startedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":191,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":21,"character":4}],"type":{"type":"reference","id":173,"name":"ActionStatus"}}],"groups":[{"title":"Properties","children":[181,182,183,184,185,186,187,188,189,190,191]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":10,"character":17}],"permalink":"/api/types/interface/Action","nextId":195},{"id":195,"name":"ActionContext","kind":256,"kindString":"Interface","flags":{},"children":[{"id":196,"name":"affectedOnly","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":28,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":197,"name":"initialTargets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":29,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":198,"name":"passthroughArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":30,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":199,"name":"primaryTargets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":31,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":200,"name":"profile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"cpu"},{"type":"literal","value":"heap"}]}},{"id":201,"name":"targetStates","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":33,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":192,"name":"TargetState"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":202,"name":"touchedFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":34,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":203,"name":"workspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":35,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[196,197,198,199,200,201,202,203]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":27,"character":17}],"permalink":"/api/types/interface/ActionContext","previousId":180,"nextId":221},{"id":221,"name":"ActionNodeInstallDeps","kind":256,"kindString":"Interface","flags":{},"children":[{"id":222,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":56,"character":4}],"type":{"type":"literal","value":"InstallDeps"}},{"id":223,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":57,"character":4}],"type":{"type":"reflection","declaration":{"id":224,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":225,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":58,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[225]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":57,"character":12}]}}}],"groups":[{"title":"Properties","children":[222,223]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":55,"character":17}],"permalink":"/api/types/interface/ActionNodeInstallDeps","previousId":195,"nextId":226},{"id":226,"name":"ActionNodeInstallProjectDeps","kind":256,"kindString":"Interface","flags":{},"children":[{"id":227,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":62,"character":4}],"type":{"type":"literal","value":"InstallProjectDeps"}},{"id":228,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":63,"character":4}],"type":{"type":"reflection","declaration":{"id":229,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":231,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":65,"character":8}],"type":{"type":"intrinsic","name":"string"}},{"id":230,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":64,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[231,230]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":63,"character":12}]}}}],"groups":[{"title":"Properties","children":[227,228]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":61,"character":17}],"permalink":"/api/types/interface/ActionNodeInstallProjectDeps","previousId":221,"nextId":232},{"id":232,"name":"ActionNodeRunTask","kind":256,"kindString":"Interface","flags":{},"children":[{"id":233,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":69,"character":4}],"type":{"type":"literal","value":"RunTask"}},{"id":234,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":70,"character":4}],"type":{"type":"reflection","declaration":{"id":235,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":236,"name":"interactive","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":71,"character":8}],"type":{"type":"intrinsic","name":"boolean"}},{"id":237,"name":"persistent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":72,"character":8}],"type":{"type":"intrinsic","name":"boolean"}},{"id":238,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":73,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}},{"id":239,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":74,"character":8}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[236,237,238,239]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":70,"character":12}]}}}],"groups":[{"title":"Properties","children":[233,234]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":68,"character":17}],"permalink":"/api/types/interface/ActionNodeRunTask","previousId":226,"nextId":240},{"id":240,"name":"ActionNodeSetupTool","kind":256,"kindString":"Interface","flags":{},"children":[{"id":241,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":78,"character":4}],"type":{"type":"literal","value":"SetupTool"}},{"id":242,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":79,"character":4}],"type":{"type":"reflection","declaration":{"id":243,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":244,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":80,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[244]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":79,"character":12}]}}}],"groups":[{"title":"Properties","children":[241,242]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":77,"character":17}],"permalink":"/api/types/interface/ActionNodeSetupTool","previousId":232,"nextId":245},{"id":245,"name":"ActionNodeSyncProject","kind":256,"kindString":"Interface","flags":{},"children":[{"id":246,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":84,"character":4}],"type":{"type":"literal","value":"SyncProject"}},{"id":247,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":85,"character":4}],"type":{"type":"reflection","declaration":{"id":248,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":250,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":87,"character":8}],"type":{"type":"intrinsic","name":"string"}},{"id":249,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":86,"character":8}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[250,249]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":85,"character":12}]}}}],"groups":[{"title":"Properties","children":[246,247]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":83,"character":17}],"permalink":"/api/types/interface/ActionNodeSyncProject","previousId":240,"nextId":251},{"id":251,"name":"ActionNodeSyncWorkspace","kind":256,"kindString":"Interface","flags":{},"children":[{"id":252,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":91,"character":4}],"type":{"type":"literal","value":"SyncWorkspace"}},{"id":253,"name":"params","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":92,"character":4}],"type":{"type":"reflection","declaration":{"id":254,"name":"__type","kind":65536,"kindString":"Type literal","flags":{}}}}],"groups":[{"title":"Properties","children":[252,253]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":90,"character":17}],"permalink":"/api/types/interface/ActionNodeSyncWorkspace","previousId":245,"nextId":174},{"id":174,"name":"Attempt","kind":256,"kindString":"Interface","flags":{},"children":[{"id":175,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":176,"name":"finishedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":177,"name":"index","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":6,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":178,"name":"startedAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":7,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":179,"name":"status","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":8,"character":4}],"type":{"type":"reference","id":173,"name":"ActionStatus"}}],"groups":[{"title":"Properties","children":[175,176,177,178,179]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":3,"character":17}],"permalink":"/api/types/interface/Attempt","previousId":251,"nextId":627},{"id":627,"name":"BinConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":628,"name":"bin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":86,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":629,"name":"force","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":87,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":630,"name":"local","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":88,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":631,"name":"name","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":89,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[628,629,630,631]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":85,"character":17}],"permalink":"/api/types/interface/BinConfig","previousId":174,"nextId":738},{"id":738,"name":"CodeownersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":739,"name":"globalPaths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":77,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":740,"name":"orderBy","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":78,"character":4}],"type":{"type":"reference","id":683,"name":"CodeownersOrderBy"}},{"id":741,"name":"syncOnRun","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":79,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[739,740,741]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":76,"character":17}],"permalink":"/api/types/interface/CodeownersConfig","previousId":627,"nextId":742},{"id":742,"name":"ConstraintsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":743,"name":"enforceProjectTypeRelationships","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":83,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":744,"name":"tagRelationships","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":84,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[743,744]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":81,"character":17}],"permalink":"/api/types/interface/ConstraintsConfig","previousId":738,"nextId":633},{"id":633,"name":"DenoConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#deno"}]},"children":[{"id":634,"name":"bins","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":94,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":632,"name":"BinEntry"}}},{"id":635,"name":"depsFile","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'deps.ts\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":96,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":636,"name":"lockfile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":97,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":637,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":98,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[634,635,636,637]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":93,"character":17}],"permalink":"/api/types/interface/DenoConfig","previousId":742,"nextId":363},{"id":363,"name":"DependencyConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":364,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":69,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":365,"name":"scope","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":70,"character":4}],"type":{"type":"reference","id":309,"name":"DependencyScope"}},{"id":366,"name":"source","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":71,"character":4}],"type":{"type":"reference","id":310,"name":"DependencySource"}},{"id":367,"name":"via","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":72,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[364,365,366,367]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":68,"character":17}],"permalink":"/api/types/interface/DependencyConfig","previousId":633,"nextId":56},{"id":56,"name":"Duration","kind":256,"kindString":"Interface","flags":{},"children":[{"id":58,"name":"nanos","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/common.ts","line":7,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L7"}],"type":{"type":"intrinsic","name":"number"}},{"id":57,"name":"secs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/common.ts","line":6,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L6"}],"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[58,57]}],"sources":[{"fileName":"types/src/common.ts","line":5,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L5"}],"permalink":"/api/types/interface/Duration","previousId":363,"nextId":85},{"id":85,"name":"EventActionFinished","kind":256,"kindString":"Interface","flags":{},"children":[{"id":86,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":54,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L54"}],"type":{"type":"reference","id":180,"name":"Action"}},{"id":87,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":55,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L55"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":88,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":56,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L56"}],"type":{"type":"reference","id":220,"name":"ActionNode"}}],"groups":[{"title":"Properties","children":[86,87,88]}],"sources":[{"fileName":"types/src/events.ts","line":53,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L53"}],"permalink":"/api/types/interface/EventActionFinished","previousId":56,"nextId":81},{"id":81,"name":"EventActionStarted","kind":256,"kindString":"Interface","flags":{},"children":[{"id":82,"name":"action","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":47,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L47"}],"type":{"type":"reference","id":180,"name":"Action"}},{"id":83,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":48,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L48"}],"type":{"type":"reference","id":220,"name":"ActionNode"}}],"groups":[{"title":"Properties","children":[82,83]}],"sources":[{"fileName":"types/src/events.ts","line":46,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L46"}],"permalink":"/api/types/interface/EventActionStarted","previousId":85,"nextId":94},{"id":94,"name":"EventDependenciesInstalled","kind":256,"kindString":"Interface","flags":{},"children":[{"id":95,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":72,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L72"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":96,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":73,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L73"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":292,"name":"Project"}]}},{"id":97,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":74,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L74"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[95,96,97]}],"sources":[{"fileName":"types/src/events.ts","line":71,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L71"}],"permalink":"/api/types/interface/EventDependenciesInstalled","previousId":81,"nextId":90},{"id":90,"name":"EventDependenciesInstalling","kind":256,"kindString":"Interface","flags":{},"children":[{"id":91,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":62,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L62"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":292,"name":"Project"}]}},{"id":92,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":63,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L63"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[91,92]}],"sources":[{"fileName":"types/src/events.ts","line":61,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L61"}],"permalink":"/api/types/interface/EventDependenciesInstalling","previousId":94,"nextId":108},{"id":108,"name":"EventPipelineAborted","kind":256,"kindString":"Interface","flags":{},"children":[{"id":109,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":98,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L98"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[109]}],"sources":[{"fileName":"types/src/events.ts","line":97,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L97"}],"permalink":"/api/types/interface/EventPipelineAborted","previousId":90,"nextId":115},{"id":115,"name":"EventPipelineFinished","kind":256,"kindString":"Interface","flags":{},"children":[{"id":116,"name":"baselineDuration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":111,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L111"}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":117,"name":"cachedCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":112,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L112"}],"type":{"type":"intrinsic","name":"number"}},{"id":118,"name":"context","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":113,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L113"}],"type":{"type":"reference","id":195,"name":"ActionContext"}},{"id":119,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":114,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L114"}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":120,"name":"estimatedSavings","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":115,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L115"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":121,"name":"failedCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":116,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L116"}],"type":{"type":"intrinsic","name":"number"}},{"id":122,"name":"passedCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":117,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L117"}],"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[116,117,118,119,120,121,122]}],"sources":[{"fileName":"types/src/events.ts","line":110,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L110"}],"permalink":"/api/types/interface/EventPipelineFinished","previousId":108,"nextId":111},{"id":111,"name":"EventPipelineStarted","kind":256,"kindString":"Interface","flags":{},"children":[{"id":112,"name":"actionsCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":104,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L104"}],"type":{"type":"intrinsic","name":"number"}},{"id":113,"name":"context","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":105,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L105"}],"type":{"type":"reference","id":195,"name":"ActionContext"}}],"groups":[{"title":"Properties","children":[112,113]}],"sources":[{"fileName":"types/src/events.ts","line":103,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L103"}],"permalink":"/api/types/interface/EventPipelineStarted","previousId":115,"nextId":103},{"id":103,"name":"EventProjectSynced","kind":256,"kindString":"Interface","flags":{},"children":[{"id":104,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":90,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L90"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":105,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":91,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L91"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":106,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":92,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L92"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[104,105,106]}],"sources":[{"fileName":"types/src/events.ts","line":89,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L89"}],"permalink":"/api/types/interface/EventProjectSynced","previousId":111,"nextId":99},{"id":99,"name":"EventProjectSyncing","kind":256,"kindString":"Interface","flags":{},"children":[{"id":100,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":83,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L83"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":101,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":84,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L84"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[100,101]}],"sources":[{"fileName":"types/src/events.ts","line":82,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L82"}],"permalink":"/api/types/interface/EventProjectSyncing","previousId":103,"nextId":137},{"id":137,"name":"EventTargetOutputArchived","kind":256,"kindString":"Interface","flags":{},"children":[{"id":138,"name":"archivePath","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":148,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L148"}],"type":{"type":"intrinsic","name":"string"}},{"id":139,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":149,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L149"}],"type":{"type":"intrinsic","name":"string"}},{"id":140,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":150,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L150"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":141,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":151,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L151"}],"type":{"type":"intrinsic","name":"string"}},{"id":142,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":152,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L152"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[138,139,140,141,142]}],"sources":[{"fileName":"types/src/events.ts","line":147,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L147"}],"permalink":"/api/types/interface/EventTargetOutputArchived","previousId":99,"nextId":131},{"id":131,"name":"EventTargetOutputArchiving","kind":256,"kindString":"Interface","flags":{},"children":[{"id":132,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":136,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L136"}],"type":{"type":"intrinsic","name":"string"}},{"id":133,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":137,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L137"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":134,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":138,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L138"}],"type":{"type":"intrinsic","name":"string"}},{"id":135,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":139,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L139"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[132,133,134,135]}],"sources":[{"fileName":"types/src/events.ts","line":135,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L135"}],"permalink":"/api/types/interface/EventTargetOutputArchiving","previousId":137,"nextId":157},{"id":157,"name":"EventTargetOutputCacheCheck","kind":256,"kindString":"Interface","flags":{},"children":[{"id":158,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":186,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L186"}],"type":{"type":"intrinsic","name":"string"}},{"id":159,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":187,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L187"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[158,159]}],"sources":[{"fileName":"types/src/events.ts","line":185,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L185"}],"permalink":"/api/types/interface/EventTargetOutputCacheCheck","previousId":131,"nextId":150},{"id":150,"name":"EventTargetOutputHydrated","kind":256,"kindString":"Interface","flags":{},"children":[{"id":151,"name":"archivePath","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":173,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L173"}],"type":{"type":"intrinsic","name":"string"}},{"id":152,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":174,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L174"}],"type":{"type":"intrinsic","name":"string"}},{"id":153,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":175,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L175"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":154,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":176,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L176"}],"type":{"type":"intrinsic","name":"string"}},{"id":155,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":177,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L177"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[151,152,153,154,155]}],"sources":[{"fileName":"types/src/events.ts","line":172,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L172"}],"permalink":"/api/types/interface/EventTargetOutputHydrated","previousId":157,"nextId":144},{"id":144,"name":"EventTargetOutputHydrating","kind":256,"kindString":"Interface","flags":{},"children":[{"id":145,"name":"hash","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":161,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L161"}],"type":{"type":"intrinsic","name":"string"}},{"id":146,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":162,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L162"}],"type":{"type":"reference","id":292,"name":"Project"}},{"id":147,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":163,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L163"}],"type":{"type":"intrinsic","name":"string"}},{"id":148,"name":"task","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":164,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L164"}],"type":{"type":"reference","id":275,"name":"Task"}}],"groups":[{"title":"Properties","children":[145,146,147,148]}],"sources":[{"fileName":"types/src/events.ts","line":160,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L160"}],"permalink":"/api/types/interface/EventTargetOutputHydrating","previousId":150,"nextId":127},{"id":127,"name":"EventTargetRan","kind":256,"kindString":"Interface","flags":{},"children":[{"id":128,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":129,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L129"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":129,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":130,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L130"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[128,129]}],"sources":[{"fileName":"types/src/events.ts","line":128,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L128"}],"permalink":"/api/types/interface/EventTargetRan","previousId":144,"nextId":124},{"id":124,"name":"EventTargetRunning","kind":256,"kindString":"Interface","flags":{},"children":[{"id":125,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":123,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L123"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[125]}],"sources":[{"fileName":"types/src/events.ts","line":122,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L122"}],"permalink":"/api/types/interface/EventTargetRunning","previousId":127,"nextId":164},{"id":164,"name":"EventToolInstalled","kind":256,"kindString":"Interface","flags":{},"children":[{"id":165,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":202,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L202"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":166,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":203,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L203"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[165,166]}],"sources":[{"fileName":"types/src/events.ts","line":201,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L201"}],"permalink":"/api/types/interface/EventToolInstalled","previousId":124,"nextId":161},{"id":161,"name":"EventToolInstalling","kind":256,"kindString":"Interface","flags":{},"children":[{"id":162,"name":"runtime","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":196,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L196"}],"type":{"type":"reference","id":59,"name":"Runtime"}}],"groups":[{"title":"Properties","children":[162]}],"sources":[{"fileName":"types/src/events.ts","line":195,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L195"}],"permalink":"/api/types/interface/EventToolInstalling","previousId":164,"nextId":170},{"id":170,"name":"EventWorkspaceSynced","kind":256,"kindString":"Interface","flags":{},"children":[{"id":171,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":211,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L211"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[171]}],"sources":[{"fileName":"types/src/events.ts","line":210,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L210"}],"permalink":"/api/types/interface/EventWorkspaceSynced","previousId":161,"nextId":745},{"id":745,"name":"ExperimentsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":746,"name":"taskOutputBoundaries","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":88,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[746]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":86,"character":17}],"permalink":"/api/types/interface/ExperimentsConfig","previousId":170,"nextId":255},{"id":255,"name":"FileGroup","kind":256,"kindString":"Interface","flags":{},"children":[{"id":256,"name":"files","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":4,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":257,"name":"globs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":5,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":258,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":6,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[256,257,258]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":3,"character":17}],"permalink":"/api/types/interface/FileGroup","previousId":745,"nextId":747},{"id":747,"name":"GeneratorConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":748,"name":"templates","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":91,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"groups":[{"title":"Properties","children":[748]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":90,"character":17}],"permalink":"/api/types/interface/GeneratorConfig","previousId":255,"nextId":749},{"id":749,"name":"HasherConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":750,"name":"batchSize","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"2500"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":95,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":751,"name":"ignoreMissingPatterns","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":96,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":752,"name":"ignorePatterns","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":97,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":753,"name":"optimization","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":98,"character":4}],"type":{"type":"reference","id":695,"name":"HasherOptimization"}},{"id":754,"name":"walkStrategy","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":99,"character":4}],"type":{"type":"reference","id":696,"name":"HasherWalkStrategy"}},{"id":755,"name":"warnOnMissingInputs","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":101,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[750,751,752,753,754,755]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":93,"character":17}],"permalink":"/api/types/interface/HasherConfig","previousId":747,"nextId":488},{"id":488,"name":"InheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/tasks"}]},"children":[{"id":489,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/tasks.json\'"}]}]},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":86,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":490,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":87,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":491,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":88,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":492,"name":"implicitDeps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":89,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":493,"name":"implicitInputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":90,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":494,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":91,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":476,"name":"TaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[489,490,491,492,493,494]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":84,"character":17}],"permalink":"/api/types/interface/InheritedTasksConfig","previousId":749,"nextId":648},{"id":648,"name":"NodeConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#node"}]},"children":[{"id":649,"name":"addEnginesConstraint","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":116,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":650,"name":"aliasPackageNames","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":117,"character":4}],"type":{"type":"reference","id":578,"name":"NodeProjectAliasFormat"}},{"id":651,"name":"binExecArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":118,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":652,"name":"dedupeOnLockfileChange","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":120,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":653,"name":"dependencyVersionFormat","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":121,"character":4}],"type":{"type":"reference","id":579,"name":"NodeVersionFormat"}},{"id":654,"name":"inferTasksFromScripts","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":122,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":655,"name":"npm","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":123,"character":4}],"type":{"type":"reference","id":638,"name":"NpmConfig"}},{"id":656,"name":"packageManager","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":124,"character":4}],"type":{"type":"reference","id":583,"name":"NodePackageManager"}},{"id":657,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":125,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":658,"name":"pnpm","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":126,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":641,"name":"PnpmConfig"}]}},{"id":659,"name":"syncProjectWorkspaceDependencies","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":128,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":660,"name":"syncVersionManagerConfig","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":129,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":587,"name":"NodeVersionManager"}]}},{"id":661,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":130,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":662,"name":"yarn","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":131,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":644,"name":"YarnConfig"}]}}],"groups":[{"title":"Properties","children":[649,650,651,652,653,654,655,656,657,658,659,660,661,662]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":114,"character":17}],"permalink":"/api/types/interface/NodeConfig","previousId":488,"nextId":756},{"id":756,"name":"NotifierConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":757,"name":"webhookUrl","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":104,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[757]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":103,"character":17}],"permalink":"/api/types/interface/NotifierConfig","previousId":648,"nextId":638},{"id":638,"name":"NpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":639,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":101,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":640,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":102,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[639,640]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":100,"character":17}],"permalink":"/api/types/interface/NpmConfig","previousId":756,"nextId":370},{"id":370,"name":"OwnersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":371,"name":"customGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":77,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":372,"name":"defaultOwner","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":78,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":373,"name":"optional","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":79,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":374,"name":"paths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":80,"character":4}],"type":{"type":"reference","id":369,"name":"OwnersPaths"}},{"id":375,"name":"requiredApprovals","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":82,"character":4}],"type":{"type":"intrinsic","name":"number"}}],"groups":[{"title":"Properties","children":[371,372,373,374,375]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":76,"character":17}],"permalink":"/api/types/interface/OwnersConfig","previousId":638,"nextId":567},{"id":567,"name":"PartialBinConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":568,"name":"bin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":2,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":569,"name":"force","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":3,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":570,"name":"local","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":571,"name":"name","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[568,569,570,571]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":1,"character":17}],"permalink":"/api/types/interface/PartialBinConfig","previousId":370,"nextId":684},{"id":684,"name":"PartialCodeownersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":685,"name":"globalPaths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":3,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":686,"name":"orderBy","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":683,"name":"CodeownersOrderBy"}]}},{"id":687,"name":"syncOnRun","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[685,686,687]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":2,"character":17}],"permalink":"/api/types/interface/PartialCodeownersConfig","previousId":567,"nextId":688},{"id":688,"name":"PartialConstraintsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":689,"name":"enforceProjectTypeRelationships","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":690,"name":"tagRelationships","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":10,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[689,690]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":7,"character":17}],"permalink":"/api/types/interface/PartialConstraintsConfig","previousId":684,"nextId":573},{"id":573,"name":"PartialDenoConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#deno"}]},"children":[{"id":574,"name":"bins","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":10,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":572,"name":"PartialBinEntry"}}]}},{"id":575,"name":"depsFile","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'deps.ts\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":12,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":576,"name":"lockfile","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":13,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":577,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[574,575,576,577]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":9,"character":17}],"permalink":"/api/types/interface/PartialDenoConfig","previousId":688,"nextId":311},{"id":311,"name":"PartialDependencyConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":312,"name":"id","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":313,"name":"scope","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":6,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":309,"name":"DependencyScope"}]}},{"id":314,"name":"source","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":7,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":310,"name":"DependencySource"}]}},{"id":315,"name":"via","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":8,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[312,313,314,315]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":4,"character":17}],"permalink":"/api/types/interface/PartialDependencyConfig","previousId":573,"nextId":691},{"id":691,"name":"PartialExperimentsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":692,"name":"taskOutputBoundaries","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[692]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":12,"character":17}],"permalink":"/api/types/interface/PartialExperimentsConfig","previousId":311,"nextId":693},{"id":693,"name":"PartialGeneratorConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":694,"name":"templates","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}}],"groups":[{"title":"Properties","children":[694]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":16,"character":17}],"permalink":"/api/types/interface/PartialGeneratorConfig","previousId":691,"nextId":697},{"id":697,"name":"PartialHasherConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":698,"name":"batchSize","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"2500"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":699,"name":"ignoreMissingPatterns","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":700,"name":"ignorePatterns","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":25,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":701,"name":"optimization","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":26,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":695,"name":"HasherOptimization"}]}},{"id":702,"name":"walkStrategy","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":27,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":696,"name":"HasherWalkStrategy"}]}},{"id":703,"name":"warnOnMissingInputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[698,699,700,701,702,703]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":21,"character":17}],"permalink":"/api/types/interface/PartialHasherConfig","previousId":693,"nextId":450},{"id":450,"name":"PartialInheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/tasks"}]},"children":[{"id":451,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/tasks.json\'"}]}]},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":43,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":452,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":453,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":454,"name":"implicitDeps","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":455,"name":"implicitInputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":47,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":456,"name":"tasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":48,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":438,"name":"PartialTaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[451,452,453,454,455,456]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":41,"character":17}],"permalink":"/api/types/interface/PartialInheritedTasksConfig","previousId":697,"nextId":592},{"id":592,"name":"PartialNodeConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#node"}]},"children":[{"id":593,"name":"addEnginesConstraint","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":594,"name":"aliasPackageNames","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":37,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":578,"name":"NodeProjectAliasFormat"}]}},{"id":595,"name":"binExecArgs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":596,"name":"dedupeOnLockfileChange","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":40,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":597,"name":"dependencyVersionFormat","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":41,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":579,"name":"NodeVersionFormat"}]}},{"id":598,"name":"inferTasksFromScripts","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":42,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":599,"name":"npm","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":43,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":580,"name":"PartialNpmConfig"}]}},{"id":600,"name":"packageManager","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":583,"name":"NodePackageManager"}]}},{"id":601,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":602,"name":"pnpm","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":584,"name":"PartialPnpmConfig"}]}},{"id":603,"name":"syncProjectWorkspaceDependencies","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":48,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":604,"name":"syncVersionManagerConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":49,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":587,"name":"NodeVersionManager"}]}},{"id":605,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":50,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":606,"name":"yarn","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":588,"name":"PartialYarnConfig"}]}}],"groups":[{"title":"Properties","children":[593,594,595,596,597,598,599,600,601,602,603,604,605,606]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":34,"character":17}],"permalink":"/api/types/interface/PartialNodeConfig","previousId":450,"nextId":704},{"id":704,"name":"PartialNotifierConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":705,"name":"webhookUrl","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[705]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":31,"character":17}],"permalink":"/api/types/interface/PartialNotifierConfig","previousId":592,"nextId":580},{"id":580,"name":"PartialNpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":581,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":19,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":582,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[581,582]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":18,"character":17}],"permalink":"/api/types/interface/PartialNpmConfig","previousId":704,"nextId":319},{"id":319,"name":"PartialOwnersConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":320,"name":"customGroups","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":321,"name":"defaultOwner","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":322,"name":"optional","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":323,"name":"paths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":318,"name":"PartialOwnersPaths"}]}},{"id":324,"name":"requiredApprovals","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":19,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}}],"groups":[{"title":"Properties","children":[320,321,322,323,324]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":13,"character":17}],"permalink":"/api/types/interface/PartialOwnersConfig","previousId":580,"nextId":584},{"id":584,"name":"PartialPnpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":585,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":586,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":25,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[585,586]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":23,"character":17}],"permalink":"/api/types/interface/PartialPnpmConfig","previousId":319,"nextId":349},{"id":349,"name":"PartialProjectConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/project"}]},"children":[{"id":350,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/project.json\'"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":54,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":351,"name":"dependsOn","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":316,"name":"PartialProjectDependsOn"}}]}},{"id":352,"name":"env","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":353,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":57,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":354,"name":"language","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":58,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":317,"name":"LanguageType"}]}},{"id":355,"name":"owners","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":59,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":319,"name":"PartialOwnersConfig"}]}},{"id":356,"name":"platform","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":60,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":436,"name":"PlatformType"}]}},{"id":357,"name":"project","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":325,"name":"PartialProjectMetadataConfig"}]}},{"id":358,"name":"tags","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":62,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":359,"name":"tasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":438,"name":"PartialTaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":360,"name":"toolchain","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":64,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":338,"name":"PartialProjectToolchainConfig"}]}},{"id":361,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":342,"name":"ProjectType"}]}},{"id":362,"name":"workspace","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":66,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":347,"name":"PartialProjectWorkspaceConfig"}]}}],"groups":[{"title":"Properties","children":[350,351,352,353,354,355,356,357,358,359,360,361,362]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":52,"character":17}],"permalink":"/api/types/interface/PartialProjectConfig","previousId":584,"nextId":325},{"id":325,"name":"PartialProjectMetadataConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":326,"name":"channel","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":22,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":327,"name":"description","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":328,"name":"maintainers","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":329,"name":"name","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":25,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":330,"name":"owner","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":26,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[326,327,328,329,330]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":21,"character":17}],"permalink":"/api/types/interface/PartialProjectMetadataConfig","previousId":349,"nextId":331},{"id":331,"name":"PartialProjectToolchainCommonToolConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":332,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[332]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":28,"character":17}],"permalink":"/api/types/interface/PartialProjectToolchainCommonToolConfig","previousId":325,"nextId":338},{"id":338,"name":"PartialProjectToolchainConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":339,"name":"node","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":331,"name":"PartialProjectToolchainCommonToolConfig"}]}},{"id":340,"name":"rust","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":39,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":331,"name":"PartialProjectToolchainCommonToolConfig"}]}},{"id":341,"name":"typescript","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":40,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":333,"name":"PartialProjectToolchainTypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[339,340,341]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":37,"character":17}],"permalink":"/api/types/interface/PartialProjectToolchainConfig","previousId":331,"nextId":333},{"id":333,"name":"PartialProjectToolchainTypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":334,"name":"disabled","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":335,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":33,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":336,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":34,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":337,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[334,335,336,337]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":31,"character":17}],"permalink":"/api/types/interface/PartialProjectToolchainTypeScriptConfig","previousId":338,"nextId":347},{"id":347,"name":"PartialProjectWorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":348,"name":"inheritedTasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":49,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":343,"name":"PartialProjectWorkspaceInheritedTasksConfig"}]}}],"groups":[{"title":"Properties","children":[348]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":48,"character":17}],"permalink":"/api/types/interface/PartialProjectWorkspaceConfig","previousId":333,"nextId":343},{"id":343,"name":"PartialProjectWorkspaceInheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":344,"name":"exclude","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":345,"name":"include","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":346,"name":"rename","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[344,345,346]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":43,"character":17}],"permalink":"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig","previousId":347,"nextId":710},{"id":710,"name":"PartialRunnerConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":711,"name":"archivableTargets","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":40,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":712,"name":"cacheLifetime","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'7 days\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":42,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":713,"name":"inheritColorsForPipedTasks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":714,"name":"logRunningCommand","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[711,712,713,714]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":39,"character":17}],"permalink":"/api/types/interface/PartialRunnerConfig","previousId":343,"nextId":607},{"id":607,"name":"PartialRustConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#rust"}]},"children":[{"id":608,"name":"bins","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":572,"name":"PartialBinEntry"}}]}},{"id":609,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":610,"name":"syncToolchainConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":57,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":611,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":58,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[608,609,610,611]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":54,"character":17}],"permalink":"/api/types/interface/PartialRustConfig","previousId":710,"nextId":438},{"id":438,"name":"PartialTaskConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":439,"name":"args","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":28,"character":4}],"type":{"type":"reference","id":413,"name":"PartialTaskCommandArgs"}},{"id":440,"name":"command","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":29,"character":4}],"type":{"type":"reference","id":413,"name":"PartialTaskCommandArgs"}},{"id":441,"name":"deps","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":30,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":442,"name":"env","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":31,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":443,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":32,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":444,"name":"inputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":33,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":445,"name":"local","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":34,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":446,"name":"options","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":418,"name":"PartialTaskOptionsConfig"}]}},{"id":447,"name":"outputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":448,"name":"platform","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":37,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":436,"name":"PlatformType"}]}},{"id":449,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":437,"name":"TaskType"}]}}],"groups":[{"title":"Properties","children":[439,440,441,442,443,444,445,446,447,448,449]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":27,"character":17}],"permalink":"/api/types/interface/PartialTaskConfig","previousId":607,"nextId":418},{"id":418,"name":"PartialTaskOptionsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":419,"name":"affectedFiles","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":7,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":414,"name":"TaskOptionAffectedFiles"}]}},{"id":420,"name":"allowFailure","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":8,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":421,"name":"cache","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":422,"name":"envFile","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":10,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":415,"name":"TaskOptionEnvFile"}]}},{"id":423,"name":"interactive","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":11,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":424,"name":"mergeArgs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":12,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":425,"name":"mergeDeps","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":13,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":426,"name":"mergeEnv","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":427,"name":"mergeInputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":428,"name":"mergeOutputs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":429,"name":"outputStyle","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":417,"name":"TaskOutputStyle"}]}},{"id":430,"name":"persistent","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":18,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":431,"name":"retryCount","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":19,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":432,"name":"runDepsInParallel","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":433,"name":"runFromWorkspaceRoot","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":21,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":434,"name":"runInCI","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":22,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":435,"name":"shell","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":6,"character":17}],"permalink":"/api/types/interface/PartialTaskOptionsConfig","previousId":438,"nextId":521},{"id":521,"name":"PartialTemplateConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template"}]},"children":[{"id":522,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":523,"name":"description","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":524,"name":"title","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":37,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":525,"name":"variables","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":38,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":520,"name":"PartialTemplateVariable"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[522,523,524,525]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":33,"character":17}],"permalink":"/api/types/interface/PartialTemplateConfig","previousId":418,"nextId":526},{"id":526,"name":"PartialTemplateFrontmatterConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template#frontmatter"}]},"children":[{"id":527,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template-frontmatter.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":43,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":528,"name":"force","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":529,"name":"skip","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":45,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":530,"name":"to","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":46,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[527,528,529,530]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":41,"character":17}],"permalink":"/api/types/interface/PartialTemplateFrontmatterConfig","previousId":521,"nextId":495},{"id":495,"name":"PartialTemplateVariableBoolSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":496,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":2,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":497,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":3,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":498,"name":"required","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":4,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":499,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":5,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"boolean"}]}}],"groups":[{"title":"Properties","children":[496,497,498,499]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":1,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableBoolSetting","previousId":526,"nextId":504},{"id":504,"name":"PartialTemplateVariableEnumSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":505,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":13,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":506,"name":"multiple","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":14,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":507,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":15,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":508,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":16,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"enum"}]}},{"id":509,"name":"values","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"reference","id":503,"name":"PartialTemplateVariableEnumValue"}}]}}],"groups":[{"title":"Properties","children":[505,506,507,508,509]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":12,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableEnumSetting","previousId":495,"nextId":500},{"id":500,"name":"PartialTemplateVariableEnumValueConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":501,"name":"label","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":8,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":502,"name":"value","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[501,502]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":7,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableEnumValueConfig","previousId":504,"nextId":510},{"id":510,"name":"PartialTemplateVariableNumberSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":511,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":20,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":512,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":21,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":513,"name":"required","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":22,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":514,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":23,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"number"}]}}],"groups":[{"title":"Properties","children":[511,512,513,514]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":19,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableNumberSetting","previousId":500,"nextId":515},{"id":515,"name":"PartialTemplateVariableStringSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":516,"name":"default","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":26,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":517,"name":"prompt","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":27,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":518,"name":"required","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":28,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":519,"name":"type","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"string"}]}}],"groups":[{"title":"Properties","children":[516,517,518,519]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":25,"character":17}],"permalink":"/api/types/interface/PartialTemplateVariableStringSetting","previousId":510,"nextId":620},{"id":620,"name":"PartialToolchainConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain"}]},"children":[{"id":621,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/toolchain.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":78,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":622,"name":"deno","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":79,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":573,"name":"PartialDenoConfig"}]}},{"id":623,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":80,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":624,"name":"node","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":81,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":592,"name":"PartialNodeConfig"}]}},{"id":625,"name":"rust","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":82,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":607,"name":"PartialRustConfig"}]}},{"id":626,"name":"typescript","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":83,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":612,"name":"PartialTypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[621,622,623,624,625,626]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":76,"character":17}],"permalink":"/api/types/interface/PartialToolchainConfig","previousId":515,"nextId":612},{"id":612,"name":"PartialTypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#typescript"}]},"children":[{"id":613,"name":"createMissingConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":614,"name":"projectConfigFileName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":615,"name":"rootConfigFileName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":67,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":616,"name":"rootOptionsConfigFileName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.options.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":69,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":617,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":70,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":618,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":72,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":619,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":73,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[613,614,615,616,617,618,619]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":61,"character":17}],"permalink":"/api/types/interface/PartialTypeScriptConfig","previousId":620,"nextId":717},{"id":717,"name":"PartialVcsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":718,"name":"defaultBranch","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'master\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":719,"name":"hooks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":52,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}},{"id":720,"name":"manager","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":53,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"literal","value":"git"}]}},{"id":721,"name":"provider","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":54,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":716,"name":"VcsProvider"}]}},{"id":722,"name":"remoteCandidates","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":723,"name":"syncHooks","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[718,719,720,721,722,723]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":49,"character":17}],"permalink":"/api/types/interface/PartialVcsConfig","previousId":612,"nextId":724},{"id":724,"name":"PartialWorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/workspace"}]},"children":[{"id":725,"name":"$schema","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/workspace.json\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":726,"name":"codeowners","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":62,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":684,"name":"PartialCodeownersConfig"}]}},{"id":727,"name":"constraints","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":688,"name":"PartialConstraintsConfig"}]}},{"id":728,"name":"experiments","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":64,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":691,"name":"PartialExperimentsConfig"}]}},{"id":729,"name":"extends","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":730,"name":"generator","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":66,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":693,"name":"PartialGeneratorConfig"}]}},{"id":731,"name":"hasher","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":67,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":697,"name":"PartialHasherConfig"}]}},{"id":732,"name":"notifier","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":68,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":704,"name":"PartialNotifierConfig"}]}},{"id":733,"name":"projects","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":69,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":709,"name":"PartialWorkspaceProjects"}]}},{"id":734,"name":"runner","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":70,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":710,"name":"PartialRunnerConfig"}]}},{"id":735,"name":"telemetry","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":72,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":736,"name":"vcs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":73,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":717,"name":"PartialVcsConfig"}]}},{"id":737,"name":"versionConstraint","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":74,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[725,726,727,728,729,730,731,732,733,734,735,736,737]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":59,"character":17}],"permalink":"/api/types/interface/PartialWorkspaceConfig","previousId":717,"nextId":706},{"id":706,"name":"PartialWorkspaceProjectsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":707,"name":"globs","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":35,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":708,"name":"sources","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":36,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]}}],"groups":[{"title":"Properties","children":[707,708]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":34,"character":17}],"permalink":"/api/types/interface/PartialWorkspaceProjectsConfig","previousId":724,"nextId":588},{"id":588,"name":"PartialYarnConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":589,"name":"plugin","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":29,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":590,"name":"plugins","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":30,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":591,"name":"version","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":31,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[589,590,591]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":28,"character":17}],"permalink":"/api/types/interface/PartialYarnConfig","previousId":706,"nextId":641},{"id":641,"name":"PnpmConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":642,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":105,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":643,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":106,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[642,643]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":104,"character":17}],"permalink":"/api/types/interface/PnpmConfig","previousId":588,"nextId":292},{"id":292,"name":"Project","kind":256,"kindString":"Interface","flags":{},"children":[{"id":293,"name":"alias","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":44,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":294,"name":"config","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":45,"character":4}],"type":{"type":"reference","id":399,"name":"ProjectConfig"}},{"id":295,"name":"dependencies","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":46,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":363,"name":"DependencyConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":296,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":47,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":255,"name":"FileGroup"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":297,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":48,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":298,"name":"inherited","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":49,"character":4}],"type":{"type":"reflection","declaration":{"id":299,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":302,"name":"config","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":52,"character":8}],"type":{"type":"reference","id":488,"name":"InheritedTasksConfig"}},{"id":301,"name":"layers","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":51,"character":8}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":450,"name":"PartialInheritedTasksConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":300,"name":"order","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":50,"character":8}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}}],"groups":[{"title":"Properties","children":[302,301,300]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":49,"character":15}]}}},{"id":303,"name":"language","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":54,"character":4}],"type":{"type":"reference","id":317,"name":"LanguageType"}},{"id":304,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":55,"character":4}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":305,"name":"root","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":56,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":306,"name":"source","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":57,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":307,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":58,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":275,"name":"Task"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":308,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":59,"character":4}],"type":{"type":"reference","id":342,"name":"ProjectType"}}],"groups":[{"title":"Properties","children":[293,294,295,296,297,298,303,304,305,306,307,308]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":43,"character":17}],"permalink":"/api/types/interface/Project","previousId":641,"nextId":399},{"id":399,"name":"ProjectConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/project"}]},"children":[{"id":400,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/project.json\'"}]}]},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":116,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":401,"name":"dependsOn","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":117,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":368,"name":"ProjectDependsOn"}}},{"id":402,"name":"env","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":118,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":403,"name":"fileGroups","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":119,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":404,"name":"language","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":120,"character":4}],"type":{"type":"reference","id":317,"name":"LanguageType"}},{"id":405,"name":"owners","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":121,"character":4}],"type":{"type":"reference","id":370,"name":"OwnersConfig"}},{"id":406,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":122,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":436,"name":"PlatformType"}]}},{"id":407,"name":"project","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":123,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":376,"name":"ProjectMetadataConfig"}]}},{"id":408,"name":"tags","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":124,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":409,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":125,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":476,"name":"TaskConfig"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":410,"name":"toolchain","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":126,"character":4}],"type":{"type":"reference","id":389,"name":"ProjectToolchainConfig"}},{"id":411,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":127,"character":4}],"type":{"type":"reference","id":342,"name":"ProjectType"}},{"id":412,"name":"workspace","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":128,"character":4}],"type":{"type":"reference","id":397,"name":"ProjectWorkspaceConfig"}}],"groups":[{"title":"Properties","children":[400,401,402,403,404,405,406,407,408,409,410,411,412]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":114,"character":17}],"permalink":"/api/types/interface/ProjectConfig","previousId":292,"nextId":376},{"id":376,"name":"ProjectMetadataConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":377,"name":"channel","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":85,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":378,"name":"description","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":86,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":379,"name":"maintainers","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":87,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":380,"name":"name","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":88,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":381,"name":"owner","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":89,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[377,378,379,380,381]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":84,"character":17}],"permalink":"/api/types/interface/ProjectMetadataConfig","previousId":399,"nextId":382},{"id":382,"name":"ProjectToolchainCommonToolConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":383,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":92,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[383]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":91,"character":17}],"permalink":"/api/types/interface/ProjectToolchainCommonToolConfig","previousId":376,"nextId":389},{"id":389,"name":"ProjectToolchainConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":390,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":101,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":382,"name":"ProjectToolchainCommonToolConfig"}]}},{"id":391,"name":"rust","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":102,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":382,"name":"ProjectToolchainCommonToolConfig"}]}},{"id":392,"name":"typescript","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":103,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":384,"name":"ProjectToolchainTypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[390,391,392]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":100,"character":17}],"permalink":"/api/types/interface/ProjectToolchainConfig","previousId":382,"nextId":384},{"id":384,"name":"ProjectToolchainTypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":385,"name":"disabled","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":95,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":386,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":96,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":387,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":97,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":388,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":98,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[385,386,387,388]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":94,"character":17}],"permalink":"/api/types/interface/ProjectToolchainTypeScriptConfig","previousId":389,"nextId":397},{"id":397,"name":"ProjectWorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":398,"name":"inheritedTasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":111,"character":4}],"type":{"type":"reference","id":393,"name":"ProjectWorkspaceInheritedTasksConfig"}}],"groups":[{"title":"Properties","children":[398]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":110,"character":17}],"permalink":"/api/types/interface/ProjectWorkspaceConfig","previousId":384,"nextId":393},{"id":393,"name":"ProjectWorkspaceInheritedTasksConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":394,"name":"exclude","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":106,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":395,"name":"include","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":107,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":396,"name":"rename","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":108,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[394,395,396]}],"sources":[{"fileName":"types/cjs/project-config.d.ts","line":105,"character":17}],"permalink":"/api/types/interface/ProjectWorkspaceInheritedTasksConfig","previousId":397,"nextId":63},{"id":63,"name":"ProviderEnvironment","kind":256,"kindString":"Interface","flags":{},"children":[{"id":64,"name":"baseBranch","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":6,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L6"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":65,"name":"branch","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":7,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L7"}],"type":{"type":"intrinsic","name":"string"}},{"id":66,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":8,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L8"}],"type":{"type":"intrinsic","name":"string"}},{"id":67,"name":"provider","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":9,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L9"}],"type":{"type":"intrinsic","name":"string"}},{"id":68,"name":"requestId","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":10,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L10"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":69,"name":"requestUrl","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":11,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L11"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":70,"name":"revision","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":12,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L12"}],"type":{"type":"intrinsic","name":"string"}},{"id":71,"name":"url","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":13,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L13"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[64,65,66,67,68,69,70,71]}],"sources":[{"fileName":"types/src/events.ts","line":5,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L5"}],"permalink":"/api/types/interface/ProviderEnvironment","previousId":393,"nextId":204},{"id":204,"name":"RunReport","kind":256,"kindString":"Interface","flags":{},"children":[{"id":205,"name":"actions","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":38,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":180,"name":"Action"}}},{"id":208,"name":"comparisonEstimate","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":41,"character":4}],"type":{"type":"reflection","declaration":{"id":209,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":210,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":42,"character":8}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":211,"name":"gain","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":43,"character":8}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":212,"name":"loss","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":44,"character":8}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":213,"name":"percent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":45,"character":8}],"type":{"type":"intrinsic","name":"number"}},{"id":214,"name":"tasks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":46,"character":8}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"id":215,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":216,"name":"count","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":47,"character":12}],"type":{"type":"intrinsic","name":"number"}},{"id":217,"name":"total","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":48,"character":12}],"type":{"type":"reference","id":56,"name":"Duration"}}],"groups":[{"title":"Properties","children":[216,217]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":46,"character":30}]}}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[210,211,212,213,214]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":41,"character":24}]}}},{"id":206,"name":"context","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":39,"character":4}],"type":{"type":"reference","id":195,"name":"ActionContext"}},{"id":207,"name":"duration","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":40,"character":4}],"type":{"type":"reference","id":56,"name":"Duration"}},{"id":218,"name":"estimatedSavings","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":56,"name":"Duration"}]}},{"id":219,"name":"projectedDuration","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":52,"character":4}],"type":{"type":"reference","id":56,"name":"Duration"}}],"groups":[{"title":"Properties","children":[205,208,206,207,218,219]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":37,"character":17}],"permalink":"/api/types/interface/RunReport","previousId":63,"nextId":762},{"id":762,"name":"RunnerConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":763,"name":"archivableTargets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":112,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":764,"name":"cacheLifetime","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'7 days\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":114,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":765,"name":"inheritColorsForPipedTasks","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":116,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":766,"name":"logRunningCommand","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":117,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[763,764,765,766]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":111,"character":17}],"permalink":"/api/types/interface/RunnerConfig","previousId":204,"nextId":59},{"id":59,"name":"Runtime","kind":256,"kindString":"Interface","flags":{},"children":[{"id":62,"name":"overridden","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/src/common.ts","line":13,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L13"}],"type":{"type":"intrinsic","name":"boolean"}},{"id":60,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/common.ts","line":11,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L11"}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":61,"name":"requirement","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/src/common.ts","line":12,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L12"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[62,60,61]}],"sources":[{"fileName":"types/src/common.ts","line":10,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L10"}],"permalink":"/api/types/interface/Runtime","previousId":762,"nextId":663},{"id":663,"name":"RustConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#rust"}]},"children":[{"id":664,"name":"bins","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":135,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":632,"name":"BinEntry"}}},{"id":665,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":136,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":666,"name":"syncToolchainConfig","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":137,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":667,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":138,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[664,665,666,667]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":134,"character":17}],"permalink":"/api/types/interface/RustConfig","previousId":59,"nextId":192},{"id":192,"name":"TargetState","kind":256,"kindString":"Interface","flags":{},"children":[{"id":194,"name":"hash","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":25,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":193,"name":"state","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":24,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":"failed"},{"type":"literal","value":"skipped"},{"type":"literal","value":"completed"},{"type":"literal","value":"passthrough"}]}}],"groups":[{"title":"Properties","children":[194,193]}],"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":23,"character":17}],"permalink":"/api/types/interface/TargetState","previousId":663,"nextId":275},{"id":275,"name":"Task","kind":256,"kindString":"Interface","flags":{},"children":[{"id":276,"name":"args","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":26,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":277,"name":"command","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":27,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":278,"name":"deps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":28,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":279,"name":"env","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":29,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":280,"name":"id","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":30,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":282,"name":"inputFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":32,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":283,"name":"inputGlobs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":33,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":284,"name":"inputVars","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":34,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":281,"name":"inputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":31,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":285,"name":"options","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":35,"character":4}],"type":{"type":"reference","id":259,"name":"TaskOptions"}},{"id":287,"name":"outputFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":37,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":288,"name":"outputGlobs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":38,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":286,"name":"outputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":36,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":289,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":39,"character":4}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":290,"name":"target","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":40,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":291,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":41,"character":4}],"type":{"type":"reference","id":437,"name":"TaskType"}}],"groups":[{"title":"Properties","children":[276,277,278,279,280,282,283,284,281,285,287,288,286,289,290,291]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":25,"character":17}],"permalink":"/api/types/interface/Task","previousId":192,"nextId":476},{"id":476,"name":"TaskConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":477,"name":"args","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":71,"character":4}],"type":{"type":"reference","id":457,"name":"TaskCommandArgs"}},{"id":478,"name":"command","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":72,"character":4}],"type":{"type":"reference","id":457,"name":"TaskCommandArgs"}},{"id":479,"name":"deps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":73,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":480,"name":"env","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":74,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":481,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":75,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":482,"name":"inputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":76,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":483,"name":"local","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":77,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":484,"name":"options","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":78,"character":4}],"type":{"type":"reference","id":458,"name":"TaskOptionsConfig"}},{"id":485,"name":"outputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":79,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]}},{"id":486,"name":"platform","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":80,"character":4}],"type":{"type":"reference","id":436,"name":"PlatformType"}},{"id":487,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":81,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":437,"name":"TaskType"}]}}],"groups":[{"title":"Properties","children":[477,478,479,480,481,482,483,484,485,486,487]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":70,"character":17}],"permalink":"/api/types/interface/TaskConfig","previousId":275,"nextId":259},{"id":259,"name":"TaskOptions","kind":256,"kindString":"Interface","flags":{},"children":[{"id":260,"name":"affectedFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":9,"character":4}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":"args"},{"type":"literal","value":"env"}]}},{"id":261,"name":"cache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":10,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":262,"name":"envFile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":11,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":263,"name":"mergeArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":12,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":264,"name":"mergeDeps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":13,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":265,"name":"mergeEnv","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":14,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":266,"name":"mergeInputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":15,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":267,"name":"mergeOutputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":16,"character":4}],"type":{"type":"reference","id":416,"name":"TaskMergeStrategy"}},{"id":268,"name":"outputStyle","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":17,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":417,"name":"TaskOutputStyle"}]}},{"id":269,"name":"persistent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":18,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":270,"name":"retryCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":19,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":271,"name":"runDepsInParallel","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":20,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":273,"name":"runFromWorkspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":22,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":272,"name":"runInCI","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":21,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":274,"name":"shell","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/project.d.ts","line":23,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[260,261,262,263,264,265,266,267,268,269,270,271,273,272,274]}],"sources":[{"fileName":"types/cjs/project.d.ts","line":8,"character":17}],"permalink":"/api/types/interface/TaskOptions","previousId":476,"nextId":458},{"id":458,"name":"TaskOptionsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":459,"name":"affectedFiles","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":52,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":414,"name":"TaskOptionAffectedFiles"}]}},{"id":460,"name":"allowFailure","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":53,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":461,"name":"cache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":54,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":462,"name":"envFile","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":55,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":415,"name":"TaskOptionEnvFile"}]}},{"id":463,"name":"interactive","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":56,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":464,"name":"mergeArgs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":57,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":465,"name":"mergeDeps","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":58,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":466,"name":"mergeEnv","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":59,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":467,"name":"mergeInputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":60,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":468,"name":"mergeOutputs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":416,"name":"TaskMergeStrategy"}]}},{"id":469,"name":"outputStyle","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":62,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":417,"name":"TaskOutputStyle"}]}},{"id":470,"name":"persistent","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":63,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":471,"name":"retryCount","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":64,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"number"}]}},{"id":472,"name":"runDepsInParallel","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":65,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":473,"name":"runFromWorkspaceRoot","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":66,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":474,"name":"runInCI","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":67,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":475,"name":"shell","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":68,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}}],"groups":[{"title":"Properties","children":[459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475]}],"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":51,"character":17}],"permalink":"/api/types/interface/TaskOptionsConfig","previousId":259,"nextId":557},{"id":557,"name":"TemplateConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template"}]},"children":[{"id":558,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":82,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":559,"name":"description","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":83,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":560,"name":"title","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":84,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":561,"name":"variables","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":85,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","id":556,"name":"TemplateVariable"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[558,559,560,561]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":80,"character":17}],"permalink":"/api/types/interface/TemplateConfig","previousId":458,"nextId":562},{"id":562,"name":"TemplateFrontmatterConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/template#frontmatter"}]},"children":[{"id":563,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/template-frontmatter.json\'"}]}]},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":90,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":564,"name":"force","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":91,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":565,"name":"skip","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":92,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":566,"name":"to","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":93,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[563,564,565,566]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":88,"character":17}],"permalink":"/api/types/interface/TemplateFrontmatterConfig","previousId":557,"nextId":531},{"id":531,"name":"TemplateVariableBoolSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":532,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":49,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":533,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":50,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":534,"name":"required","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":51,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":535,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":52,"character":4}],"type":{"type":"literal","value":"boolean"}}],"groups":[{"title":"Properties","children":[532,533,534,535]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":48,"character":17}],"permalink":"/api/types/interface/TemplateVariableBoolSetting","previousId":562,"nextId":540},{"id":540,"name":"TemplateVariableEnumSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":541,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":60,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":542,"name":"multiple","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":61,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":543,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":62,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":544,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":63,"character":4}],"type":{"type":"literal","value":"enum"}},{"id":545,"name":"values","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":64,"character":4}],"type":{"type":"array","elementType":{"type":"reference","id":539,"name":"TemplateVariableEnumValue"}}}],"groups":[{"title":"Properties","children":[541,542,543,544,545]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":59,"character":17}],"permalink":"/api/types/interface/TemplateVariableEnumSetting","previousId":531,"nextId":536},{"id":536,"name":"TemplateVariableEnumValueConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":537,"name":"label","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":55,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":538,"name":"value","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":56,"character":4}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[537,538]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":54,"character":17}],"permalink":"/api/types/interface/TemplateVariableEnumValueConfig","previousId":540,"nextId":546},{"id":546,"name":"TemplateVariableNumberSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":547,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":67,"character":4}],"type":{"type":"intrinsic","name":"number"}},{"id":548,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":68,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":549,"name":"required","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":69,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":550,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":70,"character":4}],"type":{"type":"literal","value":"number"}}],"groups":[{"title":"Properties","children":[547,548,549,550]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":66,"character":17}],"permalink":"/api/types/interface/TemplateVariableNumberSetting","previousId":536,"nextId":551},{"id":551,"name":"TemplateVariableStringSetting","kind":256,"kindString":"Interface","flags":{},"children":[{"id":552,"name":"default","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":73,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":553,"name":"prompt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":74,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":554,"name":"required","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":75,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"boolean"}]}},{"id":555,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":76,"character":4}],"type":{"type":"literal","value":"string"}}],"groups":[{"title":"Properties","children":[552,553,554,555]}],"sources":[{"fileName":"types/cjs/template-config.d.ts","line":72,"character":17}],"permalink":"/api/types/interface/TemplateVariableStringSetting","previousId":546,"nextId":676},{"id":676,"name":"ToolchainConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain"}]},"children":[{"id":677,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/toolchain.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":158,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":678,"name":"deno","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":159,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":633,"name":"DenoConfig"}]}},{"id":679,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":160,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":680,"name":"node","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":161,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":648,"name":"NodeConfig"}]}},{"id":681,"name":"rust","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":162,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":663,"name":"RustConfig"}]}},{"id":682,"name":"typescript","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":163,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":668,"name":"TypeScriptConfig"}]}}],"groups":[{"title":"Properties","children":[677,678,679,680,681,682]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":156,"character":17}],"permalink":"/api/types/interface/ToolchainConfig","previousId":551,"nextId":668},{"id":668,"name":"TypeScriptConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/toolchain#typescript"}]},"children":[{"id":669,"name":"createMissingConfig","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":143,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":670,"name":"projectConfigFileName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":145,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":671,"name":"rootConfigFileName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":147,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":672,"name":"rootOptionsConfigFileName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'tsconfig.options.json\'"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":149,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":673,"name":"routeOutDirToCache","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":150,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":674,"name":"syncProjectReferences","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":152,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":675,"name":"syncProjectReferencesToPaths","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":153,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[669,670,671,672,673,674,675]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":141,"character":17}],"permalink":"/api/types/interface/TypeScriptConfig","previousId":676,"nextId":767},{"id":767,"name":"VcsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":768,"name":"defaultBranch","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'master\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":121,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":769,"name":"hooks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":122,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}},{"id":770,"name":"manager","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":123,"character":4}],"type":{"type":"literal","value":"git"}},{"id":771,"name":"provider","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":124,"character":4}],"type":{"type":"reference","id":716,"name":"VcsProvider"}},{"id":772,"name":"remoteCandidates","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":125,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":773,"name":"syncHooks","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":126,"character":4}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[768,769,770,771,772,773]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":119,"character":17}],"permalink":"/api/types/interface/VcsConfig","previousId":668,"nextId":72},{"id":72,"name":"WebhookPayload","kind":256,"kindString":"Interface","flags":{},"children":[{"id":73,"name":"createdAt","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":17,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L17"}],"type":{"type":"intrinsic","name":"string"}},{"id":74,"name":"environment","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":18,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L18"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":63,"name":"ProviderEnvironment"}]}},{"id":75,"name":"event","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":19,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L19"}],"type":{"type":"reference","id":79,"name":"E"}},{"id":76,"name":"type","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":20,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L20"}],"type":{"type":"reference","id":78,"name":"T"}},{"id":77,"name":"uuid","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/src/events.ts","line":21,"character":1,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L21"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[73,74,75,76,77]}],"sources":[{"fileName":"types/src/events.ts","line":16,"character":17,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L16"}],"typeParameters":[{"id":78,"name":"T","kind":131072,"kindString":"Type parameter","flags":{},"type":{"type":"reference","id":80,"name":"EventType"}},{"id":79,"name":"E","kind":131072,"kindString":"Type parameter","flags":{}}],"permalink":"/api/types/interface/WebhookPayload","previousId":767,"nextId":774},{"id":774,"name":"WorkspaceConfig","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Docs: https://moonrepo.dev/docs/config/workspace"}]},"children":[{"id":775,"name":"$schema","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"\'https://moonrepo.dev/schemas/workspace.json\'"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":131,"character":4}],"type":{"type":"intrinsic","name":"string"}},{"id":776,"name":"codeowners","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":132,"character":4}],"type":{"type":"reference","id":738,"name":"CodeownersConfig"}},{"id":777,"name":"constraints","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":133,"character":4}],"type":{"type":"reference","id":742,"name":"ConstraintsConfig"}},{"id":778,"name":"experiments","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":134,"character":4}],"type":{"type":"reference","id":745,"name":"ExperimentsConfig"}},{"id":779,"name":"extends","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":135,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":780,"name":"generator","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":136,"character":4}],"type":{"type":"reference","id":747,"name":"GeneratorConfig"}},{"id":781,"name":"hasher","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":137,"character":4}],"type":{"type":"reference","id":749,"name":"HasherConfig"}},{"id":782,"name":"notifier","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":138,"character":4}],"type":{"type":"reference","id":756,"name":"NotifierConfig"}},{"id":783,"name":"projects","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":139,"character":4}],"type":{"type":"reference","id":761,"name":"WorkspaceProjects"}},{"id":784,"name":"runner","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":140,"character":4}],"type":{"type":"reference","id":762,"name":"RunnerConfig"}},{"id":785,"name":"telemetry","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":142,"character":4}],"type":{"type":"intrinsic","name":"boolean"}},{"id":786,"name":"vcs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":143,"character":4}],"type":{"type":"reference","id":767,"name":"VcsConfig"}},{"id":787,"name":"versionConstraint","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":144,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[775,776,777,778,779,780,781,782,783,784,785,786,787]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":129,"character":17}],"permalink":"/api/types/interface/WorkspaceConfig","previousId":72,"nextId":758},{"id":758,"name":"WorkspaceProjectsConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":759,"name":"globs","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":107,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":760,"name":"sources","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":108,"character":4}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}}],"groups":[{"title":"Properties","children":[759,760]}],"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":106,"character":17}],"permalink":"/api/types/interface/WorkspaceProjectsConfig","previousId":774,"nextId":644},{"id":644,"name":"YarnConfig","kind":256,"kindString":"Interface","flags":{},"children":[{"id":645,"name":"plugin","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":109,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}},{"id":646,"name":"plugins","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":110,"character":4}],"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"id":647,"name":"version","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":111,"character":4}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}],"groups":[{"title":"Properties","children":[645,646,647]}],"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":108,"character":17}],"permalink":"/api/types/interface/YarnConfig","previousId":758,"nextId":220},{"id":220,"name":"ActionNode","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":54,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":221,"name":"ActionNodeInstallDeps"},{"type":"reference","id":226,"name":"ActionNodeInstallProjectDeps"},{"type":"reference","id":232,"name":"ActionNodeRunTask"},{"type":"reference","id":240,"name":"ActionNodeSetupTool"},{"type":"reference","id":245,"name":"ActionNodeSyncProject"},{"type":"reference","id":251,"name":"ActionNodeSyncWorkspace"}]},"permalink":"/api/types#ActionNode","previousId":644,"nextId":173},{"id":173,"name":"ActionStatus","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/pipeline.d.ts","line":2,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"cached-from-remote"},{"type":"literal","value":"cached"},{"type":"literal","value":"failed-and-abort"},{"type":"literal","value":"failed"},{"type":"literal","value":"invalid"},{"type":"literal","value":"passed"},{"type":"literal","value":"running"},{"type":"literal","value":"skipped"}]},"permalink":"/api/types#ActionStatus","previousId":220,"nextId":632},{"id":632,"name":"BinEntry","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":91,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":627,"name":"BinConfig"}]},"permalink":"/api/types#BinEntry","previousId":173,"nextId":683},{"id":683,"name":"CodeownersOrderBy","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":1,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"file-source"},{"type":"literal","value":"project-name"}]},"permalink":"/api/types#CodeownersOrderBy","previousId":632,"nextId":309},{"id":309,"name":"DependencyScope","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":2,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"build"},{"type":"literal","value":"development"},{"type":"literal","value":"peer"},{"type":"literal","value":"production"},{"type":"literal","value":"root"}]},"permalink":"/api/types#DependencyScope","previousId":683,"nextId":310},{"id":310,"name":"DependencySource","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":3,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"explicit"},{"type":"literal","value":"implicit"}]},"permalink":"/api/types#DependencySource","previousId":309,"nextId":80},{"id":80,"name":"EventType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":24,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L24"}],"type":{"type":"union","types":[{"type":"literal","value":"action.finished"},{"type":"literal","value":"action.started"},{"type":"literal","value":"dependencies.installed"},{"type":"literal","value":"dependencies.installing"},{"type":"literal","value":"pipeline.aborted"},{"type":"literal","value":"pipeline.finished"},{"type":"literal","value":"pipeline.started"},{"type":"literal","value":"project.synced"},{"type":"literal","value":"project.syncing"},{"type":"literal","value":"target-output.archived"},{"type":"literal","value":"target-output.archiving"},{"type":"literal","value":"target-output.cache-check"},{"type":"literal","value":"target-output.hydrated"},{"type":"literal","value":"target-output.hydrating"},{"type":"literal","value":"target.ran"},{"type":"literal","value":"target.running"},{"type":"literal","value":"tool.installed"},{"type":"literal","value":"tool.installing"},{"type":"literal","value":"workspace.synced"},{"type":"literal","value":"workspace.syncing"}]},"permalink":"/api/types#EventType","previousId":310,"nextId":695},{"id":695,"name":"HasherOptimization","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":19,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"accuracy"},{"type":"literal","value":"performance"}]},"permalink":"/api/types#HasherOptimization","previousId":80,"nextId":696},{"id":696,"name":"HasherWalkStrategy","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":20,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"glob"},{"type":"literal","value":"vcs"}]},"permalink":"/api/types#HasherWalkStrategy","previousId":695,"nextId":317},{"id":317,"name":"LanguageType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":11,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"bash"},{"type":"literal","value":"batch"},{"type":"literal","value":"go"},{"type":"literal","value":"javascript"},{"type":"literal","value":"php"},{"type":"literal","value":"python"},{"type":"literal","value":"ruby"},{"type":"literal","value":"rust"},{"type":"literal","value":"typescript"},{"type":"literal","value":"unknown"}]},"permalink":"/api/types#LanguageType","previousId":696,"nextId":583},{"id":583,"name":"NodePackageManager","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":22,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"npm"},{"type":"literal","value":"pnpm"},{"type":"literal","value":"yarn"}]},"permalink":"/api/types#NodePackageManager","previousId":317,"nextId":578},{"id":578,"name":"NodeProjectAliasFormat","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":16,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"name-and-scope"},{"type":"literal","value":"name-only"}]},"permalink":"/api/types#NodeProjectAliasFormat","previousId":583,"nextId":579},{"id":579,"name":"NodeVersionFormat","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":17,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"file"},{"type":"literal","value":"link"},{"type":"literal","value":"star"},{"type":"literal","value":"version"},{"type":"literal","value":"version-caret"},{"type":"literal","value":"version-tilde"},{"type":"literal","value":"workspace"},{"type":"literal","value":"workspace-caret"},{"type":"literal","value":"workspace-tilde"}]},"permalink":"/api/types#NodeVersionFormat","previousId":578,"nextId":587},{"id":587,"name":"NodeVersionManager","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":27,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"nodenv"},{"type":"literal","value":"nvm"}]},"permalink":"/api/types#NodeVersionManager","previousId":579,"nextId":54},{"id":54,"name":"Nullable","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/common.ts","line":3,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/common.ts#L3"}],"typeParameters":[{"id":55,"name":"T","kind":131072,"kindString":"Type parameter","flags":{}}],"type":{"type":"mapped","parameter":"K","parameterType":{"type":"typeOperator","operator":"keyof","target":{"type":"reference","id":55,"name":"T"}},"templateType":{"type":"union","types":[{"type":"indexedAccess","indexType":{"type":"reference","name":"K"},"objectType":{"type":"reference","id":55,"name":"T"}},{"type":"literal","value":null}]}},"permalink":"/api/types#Nullable","previousId":587,"nextId":369},{"id":369,"name":"OwnersPaths","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":75,"character":12}],"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#OwnersPaths","previousId":54,"nextId":572},{"id":572,"name":"PartialBinEntry","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/toolchain-config.d.ts","line":7,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":567,"name":"PartialBinConfig"}]},"permalink":"/api/types#PartialBinEntry","previousId":369,"nextId":318},{"id":318,"name":"PartialOwnersPaths","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":12,"character":12}],"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#PartialOwnersPaths","previousId":572,"nextId":316},{"id":316,"name":"PartialProjectDependsOn","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":10,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":311,"name":"PartialDependencyConfig"}]},"permalink":"/api/types#PartialProjectDependsOn","previousId":318,"nextId":413},{"id":413,"name":"PartialTaskCommandArgs","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":1,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]},"permalink":"/api/types#PartialTaskCommandArgs","previousId":316,"nextId":520},{"id":520,"name":"PartialTemplateVariable","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":31,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":495,"name":"PartialTemplateVariableBoolSetting"},{"type":"reference","id":504,"name":"PartialTemplateVariableEnumSetting"},{"type":"reference","id":510,"name":"PartialTemplateVariableNumberSetting"},{"type":"reference","id":515,"name":"PartialTemplateVariableStringSetting"}]},"permalink":"/api/types#PartialTemplateVariable","previousId":413,"nextId":503},{"id":503,"name":"PartialTemplateVariableEnumValue","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":11,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":500,"name":"PartialTemplateVariableEnumValueConfig"}]},"permalink":"/api/types#PartialTemplateVariableEnumValue","previousId":520,"nextId":709},{"id":709,"name":"PartialWorkspaceProjects","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":38,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":706,"name":"PartialWorkspaceProjectsConfig"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#PartialWorkspaceProjects","previousId":503,"nextId":89},{"id":89,"name":"PayloadActionFinished","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":59,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L59"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"action.finished"},{"type":"reference","id":85,"name":"EventActionFinished"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadActionFinished","previousId":709,"nextId":84},{"id":84,"name":"PayloadActionStarted","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":51,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L51"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"action.started"},{"type":"reference","id":81,"name":"EventActionStarted"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadActionStarted","previousId":89,"nextId":98},{"id":98,"name":"PayloadDependenciesInstalled","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":77,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L77"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"dependencies.installed"},{"type":"reference","id":94,"name":"EventDependenciesInstalled"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadDependenciesInstalled","previousId":84,"nextId":93},{"id":93,"name":"PayloadDependenciesInstalling","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":66,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L66"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"dependencies.installing"},{"type":"reference","id":90,"name":"EventDependenciesInstalling"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadDependenciesInstalling","previousId":98,"nextId":110},{"id":110,"name":"PayloadPipelineAborted","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":101,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L101"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"pipeline.aborted"},{"type":"reference","id":108,"name":"EventPipelineAborted"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadPipelineAborted","previousId":93,"nextId":123},{"id":123,"name":"PayloadPipelineFinished","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":120,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L120"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"pipeline.finished"},{"type":"reference","id":115,"name":"EventPipelineFinished"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadPipelineFinished","previousId":110,"nextId":114},{"id":114,"name":"PayloadPipelineStarted","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":108,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L108"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"pipeline.started"},{"type":"reference","id":111,"name":"EventPipelineStarted"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadPipelineStarted","previousId":123,"nextId":107},{"id":107,"name":"PayloadProjectSynced","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":95,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L95"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"project.synced"},{"type":"reference","id":103,"name":"EventProjectSynced"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadProjectSynced","previousId":114,"nextId":102},{"id":102,"name":"PayloadProjectSyncing","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":87,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L87"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"project.syncing"},{"type":"reference","id":99,"name":"EventProjectSyncing"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadProjectSyncing","previousId":107,"nextId":143},{"id":143,"name":"PayloadTargetOutputArchived","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":155,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L155"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.archived"},{"type":"reference","id":137,"name":"EventTargetOutputArchived"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputArchived","previousId":102,"nextId":136},{"id":136,"name":"PayloadTargetOutputArchiving","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":142,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L142"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.archiving"},{"type":"reference","id":131,"name":"EventTargetOutputArchiving"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputArchiving","previousId":143,"nextId":160},{"id":160,"name":"PayloadTargetOutputCacheCheck","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":190,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L190"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.cache-check"},{"type":"reference","id":157,"name":"EventTargetOutputCacheCheck"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputCacheCheck","previousId":136,"nextId":156},{"id":156,"name":"PayloadTargetOutputHydrated","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":180,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L180"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.hydrated"},{"type":"reference","id":150,"name":"EventTargetOutputHydrated"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputHydrated","previousId":160,"nextId":149},{"id":149,"name":"PayloadTargetOutputHydrating","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":167,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L167"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target-output.hydrating"},{"type":"reference","id":144,"name":"EventTargetOutputHydrating"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetOutputHydrating","previousId":156,"nextId":130},{"id":130,"name":"PayloadTargetRan","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":133,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L133"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target.ran"},{"type":"reference","id":127,"name":"EventTargetRan"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetRan","previousId":149,"nextId":126},{"id":126,"name":"PayloadTargetRunning","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":126,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L126"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"target.running"},{"type":"reference","id":124,"name":"EventTargetRunning"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadTargetRunning","previousId":130,"nextId":167},{"id":167,"name":"PayloadToolInstalled","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":206,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L206"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"tool.installed"},{"type":"reference","id":164,"name":"EventToolInstalled"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadToolInstalled","previousId":126,"nextId":163},{"id":163,"name":"PayloadToolInstalling","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":199,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L199"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"tool.installing"},{"type":"reference","id":161,"name":"EventToolInstalling"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadToolInstalling","previousId":167,"nextId":172},{"id":172,"name":"PayloadWorkspaceSynced","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":214,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L214"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"workspace.synced"},{"type":"reference","id":170,"name":"EventWorkspaceSynced"}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadWorkspaceSynced","previousId":163,"nextId":168},{"id":168,"name":"PayloadWorkspaceSyncing","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/src/events.ts","line":208,"character":12,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L208"}],"type":{"type":"reference","id":72,"typeArguments":[{"type":"literal","value":"workspace.syncing"},{"type":"reflection","declaration":{"id":169,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"types/src/events.ts","line":208,"character":74,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/events.ts#L208"}]}}],"name":"WebhookPayload"},"permalink":"/api/types#PayloadWorkspaceSyncing","previousId":172,"nextId":436},{"id":436,"name":"PlatformType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":25,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"deno"},{"type":"literal","value":"node"},{"type":"literal","value":"rust"},{"type":"literal","value":"system"},{"type":"literal","value":"unknown"}]},"permalink":"/api/types#PlatformType","previousId":168,"nextId":368},{"id":368,"name":"ProjectDependsOn","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":74,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":363,"name":"DependencyConfig"}]},"permalink":"/api/types#ProjectDependsOn","previousId":436,"nextId":342},{"id":342,"name":"ProjectType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/project-config.d.ts","line":42,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"application"},{"type":"literal","value":"library"},{"type":"literal","value":"tool"},{"type":"literal","value":"unknown"}]},"permalink":"/api/types#ProjectType","previousId":368,"nextId":457},{"id":457,"name":"TaskCommandArgs","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":50,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}}]},"permalink":"/api/types#TaskCommandArgs","previousId":342,"nextId":416},{"id":416,"name":"TaskMergeStrategy","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":4,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"append"},{"type":"literal","value":"prepend"},{"type":"literal","value":"replace"}]},"permalink":"/api/types#TaskMergeStrategy","previousId":457,"nextId":414},{"id":414,"name":"TaskOptionAffectedFiles","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":2,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":"args"},{"type":"literal","value":"env"}]},"permalink":"/api/types#TaskOptionAffectedFiles","previousId":416,"nextId":415},{"id":415,"name":"TaskOptionEnvFile","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":3,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"intrinsic","name":"string"}]},"permalink":"/api/types#TaskOptionEnvFile","previousId":414,"nextId":417},{"id":417,"name":"TaskOutputStyle","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":5,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"buffer"},{"type":"literal","value":"buffer-only-failure"},{"type":"literal","value":"hash"},{"type":"literal","value":"none"},{"type":"literal","value":"stream"}]},"permalink":"/api/types#TaskOutputStyle","previousId":415,"nextId":437},{"id":437,"name":"TaskType","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/tasks-config.d.ts","line":26,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"build"},{"type":"literal","value":"run"},{"type":"literal","value":"test"}]},"permalink":"/api/types#TaskType","previousId":417,"nextId":556},{"id":556,"name":"TemplateVariable","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":78,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":531,"name":"TemplateVariableBoolSetting"},{"type":"reference","id":540,"name":"TemplateVariableEnumSetting"},{"type":"reference","id":546,"name":"TemplateVariableNumberSetting"},{"type":"reference","id":551,"name":"TemplateVariableStringSetting"}]},"permalink":"/api/types#TemplateVariable","previousId":437,"nextId":539},{"id":539,"name":"TemplateVariableEnumValue","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/template-config.d.ts","line":58,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","id":536,"name":"TemplateVariableEnumValueConfig"}]},"permalink":"/api/types#TemplateVariableEnumValue","previousId":556,"nextId":715},{"id":715,"name":"VcsManager","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":47,"character":12}],"type":{"type":"literal","value":"git"},"permalink":"/api/types#VcsManager","previousId":539,"nextId":716},{"id":716,"name":"VcsProvider","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":48,"character":12}],"type":{"type":"union","types":[{"type":"literal","value":"bitbucket"},{"type":"literal","value":"github"},{"type":"literal","value":"gitlab"},{"type":"literal","value":"other"}]},"permalink":"/api/types#VcsProvider","previousId":715,"nextId":761},{"id":761,"name":"WorkspaceProjects","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"types/cjs/workspace-config.d.ts","line":110,"character":12}],"type":{"type":"union","types":[{"type":"reference","id":758,"name":"WorkspaceProjectsConfig"},{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","qualifiedName":"Record","package":"typescript"}]},"permalink":"/api/types#WorkspaceProjects","previousId":716}],"groups":[{"title":"Interfaces","children":[180,195,221,226,232,240,245,251,174,627,738,742,633,363,56,85,81,94,90,108,115,111,103,99,137,131,157,150,144,127,124,164,161,170,745,255,747,749,488,648,756,638,370,567,684,688,573,311,691,693,697,450,592,704,580,319,584,349,325,331,338,333,347,343,710,607,438,418,521,526,495,504,500,510,515,620,612,717,724,706,588,641,292,399,376,382,389,384,397,393,63,204,762,59,663,192,275,476,259,458,557,562,531,540,536,546,551,676,668,767,72,774,758,644]},{"title":"Type Aliases","children":[220,173,632,683,309,310,80,695,696,317,583,578,579,587,54,369,572,318,316,413,520,503,709,89,84,98,93,110,123,114,107,102,143,136,160,156,149,130,126,167,163,172,168,436,368,342,457,416,414,415,417,437,556,539,715,716,761]}],"sources":[{"fileName":"types/src/index.ts","line":1,"character":0,"url":"https://github.com/moonrepo/moon/blob/ef641b0/packages/types/src/index.ts#L1"}],"permalink":"/api/types"},"urlSlug":"types"}],"packageName":"@moonrepo/types","packageVersion":"1.7.1"}]')}}]); \ No newline at end of file diff --git a/assets/js/1be78505.077cb454.js b/assets/js/1be78505.077cb454.js deleted file mode 100644 index 7ac924bf650..00000000000 --- a/assets/js/1be78505.077cb454.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9514,3893],{72214:(e,t,n)=>{n.r(t),n.d(t,{default:()=>_e});var a=n(27378),l=n(37140),o=n(1123),r=n(75484),i=n(13149),c=n(45161),s=n(25611),d=n(52095),m=n(64654),u=n(99213),b=n(69169);const p="backToTopButton_iEvu",h="backToTopButtonShow_DO8w";function E(){const{shown:e,scrollToTop:t}=(0,b.a)({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,p,e&&h),type:"button",onClick:t})}var f=n(56903),g=n(35331),v=n(58357),k=n(20624),_=n(10898),C=n(25773);function I(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const S="collapseSidebarButton_oTwn",N="collapseSidebarButtonIcon_pMEX";function Z(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",S),onClick:t},a.createElement(I,{className:N}))}var T=n(10),w=n(83457),x=n(36666),y=n(41763),L=n(80376),A=n(8862),M=n(81884),B=n(76457);function F(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:o,level:i,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,k.L)(),f=function(e){const t=(0,B.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,c.Wl)(e):void 0),[e,t])}(t),g=(0,c._F)(t,o),v=(0,A.Mg)(h,o),{collapsed:_,setCollapsed:I}=(0,L.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:S,setExpandedItem:N}=(0,x.f)(),Z=function(e){void 0===e&&(e=!_),N(e?null:s),I(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,y.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:_,updateCollapsed:Z}),(0,a.useEffect)((()=>{b&&null!=S&&S!==s&&E&&I(!0)}),[b,S,s,I,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?Z(!1):(e.preventDefault(),Z())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!_:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(F,{categoryLabel:u,onClick:e=>{e.preventDefault(),Z()}})),a.createElement(L.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(O,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:o,level:i+1})))}var P=n(45626),D=n(6125);const R="menuExternalLink_BiEj";function W(e){let{item:t,onItemClick:n,activePath:o,level:i,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,c._F)(t,o),E=(0,P.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",b),key:u},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&R,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(D.Z,null)))}const V="menuHtmlItem_OniL";function Y(e){let{item:t,level:n,index:o}=e;const{value:i,defaultStyle:c,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),c&&[V,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:i}})}function z(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(Y,(0,C.Z)({item:t},n));default:return a.createElement(W,(0,C.Z)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(x.D,null,t.map(((e,t)=>a.createElement(z,(0,C.Z)({key:t,item:e,index:t},n)))))}const O=(0,a.memo)(j),U="menu_jmj1",G="menuWithAnnouncementBar_YufC";function K(e){let{path:t,sidebar:n,className:o}=e;const i=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,w.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",U,i&&G,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(O,{items:n,activePath:t,level:1})))}const J="sidebar_CUen",q="sidebarWithHideableNavbar_w4KB",Q="sidebarHidden_k6VE",X="sidebarLogo_CYvI";function $(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:c}}}=(0,k.L)();return a.createElement("div",{className:(0,l.Z)(J,i&&q,r&&Q)},i&&a.createElement(_.Z,{tabIndex:-1,className:X}),a.createElement(K,{path:t,sidebar:n}),c&&a.createElement(Z,{onClick:o}))}const ee=a.memo($);var te=n(63471),ne=n(85536);const ae=e=>{let{sidebar:t,path:n}=e;const o=(0,ne.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(O,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function le(e){return a.createElement(te.Zo,{component:ae,props:e})}const oe=a.memo(le);function re(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(ee,e),l&&a.createElement(oe,e))}const ie="expandButton_YOoA",ce="expandButtonIcon_GZLG";function se(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ie,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(I,{className:ce}))}const de={docSidebarContainer:"docSidebarContainer_y0RQ",docSidebarContainerHidden:"docSidebarContainerHidden_uArb",sidebarViewport:"sidebarViewport_EJ1r"};function me(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function ue(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:i}=(0,g.TH)(),[c,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{c&&s(!1),!c&&(0,f.n)()&&s(!0),o((e=>!e))}),[o,c]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,de.docSidebarContainer,n&&de.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(de.docSidebarContainer)&&n&&s(!0)}},a.createElement(me,null,a.createElement("div",{className:(0,l.Z)(de.sidebarViewport,c&&de.sidebarViewportHidden)},a.createElement(re,{sidebar:t,path:i,onCollapse:d,isHidden:c}),c&&a.createElement(se,{toggleSidebar:d}))))}const be={docMainContainer:"docMainContainer_sTIZ",docMainContainerEnhanced:"docMainContainerEnhanced_iSjt",docItemWrapperEnhanced:"docItemWrapperEnhanced_PxMR"};function pe(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(be.docMainContainer,(t||!o)&&be.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",be.docItemWrapper,t&&be.docItemWrapperEnhanced)},n))}const he="docPage_KLoz",Ee="docsWrapper_ct1J";function fe(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:Ee},a.createElement(E,null),a.createElement("div",{className:he},n&&a.createElement(ue,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(pe,{hiddenSidebarContainer:l},t)))}var ge=n(53893),ve=n(60505);function ke(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ve.Z,{version:t.version,tag:(0,i.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function _e(e){const{versionMetadata:t}=e,n=(0,c.hI)(e);if(!n)return a.createElement(ge.default,null);const{docElement:i,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ke,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(fe,null,i)))))}},53893:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(99213),o=n(1123),r=n(64654);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},36666:(e,t,n)=>{n.d(t,{D:()=>i,f:()=>c});var a=n(27378),l=n(41763);const o=Symbol("EmptyContext"),r=a.createContext(o);function i(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(r.Provider,{value:o},t)}function c(){const e=(0,a.useContext)(r);if(e===o)throw new l.i6("DocSidebarItemsExpandedStateProvider");return e}},69169:(e,t,n)=>{n.d(t,{a:()=>r});var a=n(27378),l=n(83457),o=n(24993);function r(e){let{threshold:t}=e;const[n,r]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:c,cancelScroll:s}=(0,l.Ct)();return(0,l.RF)(((e,n)=>{let{scrollY:a}=e;const l=n?.scrollY;l&&(i.current?i.current=!1:a>=l?(s(),r(!1)):a{e.location.hash&&(i.current=!0,r(!1))})),{shown:n,scrollToTop:()=>c(0)}}}}]); \ No newline at end of file diff --git a/assets/js/1be78505.bf62a83c.js b/assets/js/1be78505.bf62a83c.js new file mode 100644 index 00000000000..4ef2552508c --- /dev/null +++ b/assets/js/1be78505.bf62a83c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29514,53893],{72214:(e,t,n)=>{n.r(t),n.d(t,{default:()=>_e});var a=n(27378),l=n(37140),o=n(1123),r=n(75484),i=n(13149),c=n(45161),s=n(25611),d=n(52095),m=n(64654),u=n(99213),b=n(69169);const p="backToTopButton_iEvu",h="backToTopButtonShow_DO8w";function E(){const{shown:e,scrollToTop:t}=(0,b.a)({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,p,e&&h),type:"button",onClick:t})}var f=n(56903),g=n(35331),v=n(58357),k=n(20624),_=n(10898),C=n(25773);function I(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const S="collapseSidebarButton_oTwn",N="collapseSidebarButtonIcon_pMEX";function Z(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",S),onClick:t},a.createElement(I,{className:N}))}var T=n(10),w=n(83457),x=n(36666),y=n(41763),L=n(80376),A=n(8862),M=n(81884),B=n(76457);function F(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:o,level:i,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,k.L)(),f=function(e){const t=(0,B.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,c.Wl)(e):void 0),[e,t])}(t),g=(0,c._F)(t,o),v=(0,A.Mg)(h,o),{collapsed:_,setCollapsed:I}=(0,L.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:S,setExpandedItem:N}=(0,x.f)(),Z=function(e){void 0===e&&(e=!_),N(e?null:s),I(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,y.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:_,updateCollapsed:Z}),(0,a.useEffect)((()=>{b&&null!=S&&S!==s&&E&&I(!0)}),[b,S,s,I,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?Z(!1):(e.preventDefault(),Z())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!_:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(F,{categoryLabel:u,onClick:e=>{e.preventDefault(),Z()}})),a.createElement(L.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(O,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:o,level:i+1})))}var P=n(45626),D=n(6125);const R="menuExternalLink_BiEj";function W(e){let{item:t,onItemClick:n,activePath:o,level:i,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,c._F)(t,o),E=(0,P.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",b),key:u},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&R,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(D.Z,null)))}const V="menuHtmlItem_OniL";function Y(e){let{item:t,level:n,index:o}=e;const{value:i,defaultStyle:c,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),c&&[V,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:i}})}function z(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(Y,(0,C.Z)({item:t},n));default:return a.createElement(W,(0,C.Z)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(x.D,null,t.map(((e,t)=>a.createElement(z,(0,C.Z)({key:t,item:e,index:t},n)))))}const O=(0,a.memo)(j),U="menu_jmj1",G="menuWithAnnouncementBar_YufC";function K(e){let{path:t,sidebar:n,className:o}=e;const i=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,w.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",U,i&&G,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(O,{items:n,activePath:t,level:1})))}const J="sidebar_CUen",q="sidebarWithHideableNavbar_w4KB",Q="sidebarHidden_k6VE",X="sidebarLogo_CYvI";function $(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:c}}}=(0,k.L)();return a.createElement("div",{className:(0,l.Z)(J,i&&q,r&&Q)},i&&a.createElement(_.Z,{tabIndex:-1,className:X}),a.createElement(K,{path:t,sidebar:n}),c&&a.createElement(Z,{onClick:o}))}const ee=a.memo($);var te=n(63471),ne=n(85536);const ae=e=>{let{sidebar:t,path:n}=e;const o=(0,ne.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(O,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function le(e){return a.createElement(te.Zo,{component:ae,props:e})}const oe=a.memo(le);function re(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(ee,e),l&&a.createElement(oe,e))}const ie="expandButton_YOoA",ce="expandButtonIcon_GZLG";function se(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ie,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(I,{className:ce}))}const de={docSidebarContainer:"docSidebarContainer_y0RQ",docSidebarContainerHidden:"docSidebarContainerHidden_uArb",sidebarViewport:"sidebarViewport_EJ1r"};function me(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function ue(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:i}=(0,g.TH)(),[c,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{c&&s(!1),!c&&(0,f.n)()&&s(!0),o((e=>!e))}),[o,c]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,de.docSidebarContainer,n&&de.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(de.docSidebarContainer)&&n&&s(!0)}},a.createElement(me,null,a.createElement("div",{className:(0,l.Z)(de.sidebarViewport,c&&de.sidebarViewportHidden)},a.createElement(re,{sidebar:t,path:i,onCollapse:d,isHidden:c}),c&&a.createElement(se,{toggleSidebar:d}))))}const be={docMainContainer:"docMainContainer_sTIZ",docMainContainerEnhanced:"docMainContainerEnhanced_iSjt",docItemWrapperEnhanced:"docItemWrapperEnhanced_PxMR"};function pe(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(be.docMainContainer,(t||!o)&&be.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",be.docItemWrapper,t&&be.docItemWrapperEnhanced)},n))}const he="docPage_KLoz",Ee="docsWrapper_ct1J";function fe(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:Ee},a.createElement(E,null),a.createElement("div",{className:he},n&&a.createElement(ue,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(pe,{hiddenSidebarContainer:l},t)))}var ge=n(53893),ve=n(60505);function ke(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ve.Z,{version:t.version,tag:(0,i.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function _e(e){const{versionMetadata:t}=e,n=(0,c.hI)(e);if(!n)return a.createElement(ge.default,null);const{docElement:i,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ke,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(fe,null,i)))))}},53893:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(99213),o=n(1123),r=n(64654);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},36666:(e,t,n)=>{n.d(t,{D:()=>i,f:()=>c});var a=n(27378),l=n(41763);const o=Symbol("EmptyContext"),r=a.createContext(o);function i(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(r.Provider,{value:o},t)}function c(){const e=(0,a.useContext)(r);if(e===o)throw new l.i6("DocSidebarItemsExpandedStateProvider");return e}},69169:(e,t,n)=>{n.d(t,{a:()=>r});var a=n(27378),l=n(83457),o=n(24993);function r(e){let{threshold:t}=e;const[n,r]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:c,cancelScroll:s}=(0,l.Ct)();return(0,l.RF)(((e,n)=>{let{scrollY:a}=e;const l=n?.scrollY;l&&(i.current?i.current=!1:a>=l?(s(),r(!1)):a{e.location.hash&&(i.current=!0,r(!1))})),{shown:n,scrollToTop:()=>c(0)}}}}]); \ No newline at end of file diff --git a/assets/js/1cb65c7d.9e0668a8.js b/assets/js/1cb65c7d.9e0668a8.js deleted file mode 100644 index 07c3c19531a..00000000000 --- a/assets/js/1cb65c7d.9e0668a8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3168],{59220:(A,e,g)=>{g.d(e,{Z:()=>C});var t=g(27378),I=g(9619);function C(A){let{className:e,status:g}=A;switch(g){case"experimental":return t.createElement(I.Z,{className:e,text:"Experimental",variant:"failure"});case"in-development":return t.createElement(I.Z,{className:e,text:"In development",variant:"success"});case"coming-soon":return t.createElement(I.Z,{className:e,text:"Coming soon",variant:"warning"});case"new":return t.createElement(I.Z,{className:e,text:"New",variant:"info"});default:return null}}},33453:(A,e,g)=>{g.d(e,{Z:()=>l});var t=g(27378),I=g(40624),C=g(81884);function l(A){let{children:e,href:g,color:l}=A;return t.createElement(C.default,{href:g,className:(0,I.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",l??"bg-purple-600")},e)}},75969:(A,e,g)=>{g.d(e,{Z:()=>n});var t=g(27378),I=g(40624),C=g(31792),l=g(9187),a=g(30658),F=g(59220);const m={1:"from-purple-600 to-blurple-600",2:"from-pink-400 to-red-400",3:"from-teal-400 to-slate-100",4:"from-yellow-300 to-green-600"},d={1:"text-blurple-300",2:"text-pink-500",3:"text-teal-600",4:"text-green-600"};function n(A){let{header:e,description:g,features:n,reversed:r,tier:c}=A;return t.createElement("div",null,t.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},t.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},t.createElement("div",{className:(0,I.Z)("md:flex items-center justify-between",r&&"flex-row-reverse")},t.createElement("aside",{className:(0,I.Z)("md:w-1/3 mx-2 md:mx-0 p-2 sm:p-3 md:p-4 drop-shadow z-0 rounded-t-lg text-center",r?"md:rounded-tl-none md:rounded-tr-lg md:rounded-bl-none md:rounded-br-lg bg-gradient-to-bl md:pl-0 md:text-left":"md:rounded-tl-lg md:rounded-tr-none md:rounded-bl-lg md:rounded-br-none bg-gradient-to-br md:pr-0 md:text-right",m[c])},t.createElement("h2",{className:(0,I.Z)("m-0 px-1 py-0.5 inline-block text-base font-semibold uppercase tracking-wider text-white bg-black/20 rounded",r?"md:rounded-tl-none md:rounded-bl-none md:pl-4":"md:rounded-tr-none md:rounded-br-none md:pr-4")},e),t.createElement(l.Z,{className:(0,I.Z)("mt-2 text-white",r?"md:ml-4":"md:mr-4"),level:2},g)),t.createElement("section",{className:"md:w-2/3 bg-white rounded-lg p-2 md:p-3 lg:p-4 drop-shadow z-10"},t.createElement("ul",{className:"m-0 p-0 list-none grid grid-cols-1 sm:grid-cols-2 gap-2 md:gap-3 lg:gap-4"},n.map((A=>t.createElement("li",{key:A.title,className:"flex"},t.createElement("div",{className:"pt-1 w-9 shrink-0 grow-0"},t.createElement(C.Z,{icon:A.icon,className:(0,I.Z)("text-5xl justify-center flex",d[c]),style:{maxWidth:54}})),t.createElement("div",{className:"ml-1"},t.createElement(l.Z,{level:4,className:"text-gray-900"},A.title),A.status&&t.createElement("p",{className:"m-0"},t.createElement(F.Z,{status:A.status})),t.createElement(a.ZP,{className:"mt-1 mb-0",variant:"muted"},A.description)))))))))))}},81271:(A,e,g)=>{g.d(e,{Z:()=>I});var t=g(27378);function I(A){let{icon:e,text:g}=A;return t.createElement("h1",{className:"text-white flex justify-center md:justify-start items-stretch gap-3",style:{height:85}},t.createElement("div",{className:"relative"},e),t.createElement("div",{className:"relative"},g))}},87129:(A,e,g)=>{g.d(e,{Z:()=>a});var t=g(27378),I=g(40624),C=g(81884),l=g(30658);function a(A){let{cols:e=3}=A;return t.createElement("div",{className:(0,I.Z)("grid gap-4 px-4",6===e?"grid-cols-6":"grid-cols-3")},t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#bun"},t.createElement("img",{src:"/img/tools/bun.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#deno"},t.createElement("img",{src:"/img/tools/deno.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#go"},t.createElement("img",{src:"/img/tools/go.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#node"},t.createElement("img",{src:"/img/tools/node.svg",width:"100%",className:"inline-block"})),t.createElement(l.ZP,{className:"m-0",variant:"muted"},"+ npm, pnpm, yarn")),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#python"},t.createElement("img",{src:"/img/tools/python.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#rust"},t.createElement("img",{src:"/img/tools/rust.svg",width:"100%",className:"inline-block"}))))}},79090:(A,e,g)=>{g.r(e),g.d(e,{default:()=>G});var t,I,C,l,a=g(27378),F=g(21947),m=g(83469),d=g(75969),n=g(81884);function r(){return r=Object.assign?Object.assign.bind():function(A){for(var e=1;e{let{title:e,titleId:g,...F}=A;return a.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 82 82",role:"img","aria-labelledby":g},F),e?a.createElement("title",{id:g},e):null,a.createElement("g",{clipPath:"url(#a)"},a.createElement("mask",{id:"b",width:82,height:82,x:0,y:0,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},t||(t=a.createElement("path",{fill:"#fff",d:"m81.7 57.522-5.634-17.97a26.648 26.648 0 0 1 0-15.982l5.743-18.3c.977-3.129-1.954-6.057-5.065-5.078L58.488 5.95a26.46 26.46 0 0 1-15.943 0L24.618.302c-3.18-1-6.132 2.069-5.025 5.217l3.27 9.275a26.709 26.709 0 0 1-1.505 21.23L.48 76.051c-1.855 3.559 2.024 7.357 5.533 5.428l37.998-20.97a26.558 26.558 0 0 1 21.685-1.779l10.819 3.838c3.12 1.1 6.181-1.858 5.184-5.047Z"}))),a.createElement("g",{mask:"url(#b)"},a.createElement("mask",{id:"c",width:92,height:93,x:-5,y:-6,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},I||(I=a.createElement("path",{fill:"#fff",d:"M-4.994-5.005h91.977v91.982H-4.994V-5.005Z"}))),C||(C=a.createElement("g",{mask:"url(#c)"},a.createElement("path",{fill:"url(#d)",d:"M-5.323-5.025h92.366v92.112H-5.323z"}))))),l||(l=a.createElement("defs",null,a.createElement("clipPath",{id:"a"},a.createElement("path",{fill:"#fff",d:"M0 0h82v82H0z"})),a.createElement("pattern",{id:"d",width:1,height:1,patternContentUnits:"objectBoundingBox"},a.createElement("use",{xlinkHref:"#e",transform:"scale(.00518 .0052)"})),a.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E4XGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gSWNvbjwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozNjoyNC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjM2OjI0WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzY6MjQtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD40MDwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFDZ0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FQVk9Lc0k4N2VhZGYwWFY0RnRUSDlUZSYjeEE7SU1xdW5JTXdKRGNqczIyM1E1dSt6dEZpell6eFh4VzVtRERHY2QrYWpwLzVyV3BBWFViSjQyN3lRRU9EL3NXS2tmZWNubDdEbC9CTCYjeEE7NW9ucFNPUmIxSDgydE9qV2xoWnl6UDhBelRGWTFIM2N5Znd3WXV3cG42NUFlN2Y5VFY0SkhOQWVXUFBYbWJXdk05cmJNWWt0SDVtYSYjeEE7QkUrSGdxazE1TnlldjA1ZnJlek1HSEFaYjhYUXNKUnA2WG5Oc0hZcTdGWFlxN0ZXRytlL01ldWFMZDJiV1RJdHRLckZneWh1VHFSVSYjeEE7RTlRS0VkTTNIWm1reFpveTR2cURsNmZGR1lOODBEcC81clJVQzZsWkZUM2t0elVmOEE1SC9Fc3Z5OWhuK0NYei9INkV6MHRjaXJYLyYjeEE7QU9iT2xSb1JaV2MwOG5iMVNzYS9nWFA0WkRGMkZrSjlVZ0I1Yi9xYWZCSTVwVG8zNWdlWjlYOHlXTnFucFJXOHNvV1dCRXFER04zSiYjeEE7WnVUVkNnbllqTXZVZGxZTVdHVWpaSUhQelltTlBVTTVocmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnh2L25Kcjh3ZiYjeEE7UG5rWHl4cE9zZVZaWW9JcEwzNnZxTXNrU3pHalJsNGxvNElDdHdia2V2VGZGWG1YbEwvbk51OWpDUStiZkw2VGdDajN1bU9ZMjI3KyYjeEE7aE1XVWsvOEFHVWZMRldWNnYvem10K1hzRnB6MHJSOVR2cnNpcXd6aUcyakI4R2tFazVIMEljVmVZMzMvQURsdCtidm1IWGJHeTh1MiYjeEE7OWxwZjFpNWlodHJPT0w2dzh6U09GV09TU2F2MmlhVlJVT0t2dFRGV0UvbWxIRzJuV1RrRDFWbVlLZS9FcjhYNmhtNjdGSjQ1RHBUbiYjeEE7NkFFeVB1ZVp1bWRLQzVzNEtEcGt3WEZuQjZCK1VtbXI2dC9xTEQ0a0MyOFovd0JiNDMvVXVhSHQzTnRHSHhjUExzOUp6bTJsMkt1eCYjeEE7VjJLdXhWaVg1bXh4dG9FVE5UbXR3dkE5OTFhdWJic1lrWlQvQUZmMU9ab1FUUDRQSzNUT3BCZGpPQ2c2Wk1GeEp4WnIrVSttckxxMSYjeEE7M2ZOL3g2eEJFSCtWTVR2L0FNQ2hHYVh0ek5XT01mNXgrNXhNd3A2bm5MdERzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzViYjeEE7ZVovODVKMjloUDhBa241bkY3UUpIRERKRXg2aVpiaU14VStiMFg2Y1ZmbnZpcnNWZXZmODRyZVY0OWUvT0hUcEpoeWcwV0dYVkhVOSYjeEE7Mmg0eHhIL1l6VEkzMFlxKzlzVmVYK2V0Vy9TR3JHR00xdDdPc2FlQmY5dHZ2RlBvenArek1IaDQ3UE9YNEQwZWgwdkJqczg1TVZraiYjeEE7emFBdGs0SWQweXdGdzV3WjcrVkY4cXZmYWV4M1lMUEdQbDhML3JYTkQyNWkyalA0T3YxTU9SZWk1enppT3hWMkt1eFYyS3ZOL3dBdyYjeEE7TlcrdWFndGpFYXcyZFE1OFpUOXIvZ2VuMzUwZlpXRGdoeEhuTDdub096dEx3dzRqemw5ekRwSTgzQUxrWklJWjB5d0Z3NXdacCtWViYjeEE7OGtPcVhkazIzMXFOWFQzYUluYjduSnpUZHQ0N2hHWDgwL2YvQUdPQnFZYlc5T3ptWENkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjVYLzV6TS9NdWkyWDVmMkVnMzRYK3RGZW8vd0NXZUUvOG5HSCtwaXI1VHhWMkt2WVArY1ZQTThXaGZuRnA4VXpCSWRhZyYjeEE7bTB4M1BacGVNc1EvMlVzS0w5T0t2dDN6VHE0MDNTcEhRMHVKdjNjSGlDUnUzK3hHWmVpd2VKa0hjT2JuZG42Ynhjb0Ira2JsNVd5MSYjeEE7enFRWHI1UlRiU1BKZXE2cFNRcjlXdGovQUx1a0c1SCtTdlUvcXpFejlvNDhXMzFTZFBxOVpqeDdjNUoxTCtWZHUwWDd2VUhFdmkwWSYjeEE7S2svSU5YOGN3NDl0bTk0N2U5MUoxeEo1SWZ5NTVMOHhhUDVrdDdraU43UmVZbG1SOWlqS1JUaWFOWDZNczFmYU9ITmhNZCtKamx6eCYjeEE7bEh6ZWg1enpoT3hWMkt1eFZMdk1HcXJwbWx5M05SNnRPRUFQZDI2ZmQxekkwdUR4WmlQVHE1V2kwL2paQkhwMTl6eWFRczdNN0VzeiYjeEE7RWxtUFVrOVRuVmpaN0l3QUZCTXRKOG9hdHF0SGpUMGJZLzd2bHFBUi9ranEzNnN4OCt2eDR0anZMdURxdFhxOGVQWW01ZHlmUCtWZCYjeEE7c1lxRFVIOVduMnZUSEd2K3J5citPWUE3YmxmMDdlOTFFdGVTZVNCMGp5TDVpMHJ6RlozTVppbHQ0cFFaSjBhbEl6czlWYWpWS2tqYSYjeEE7dVg1KzA4T1hES0pzRWpsNXNaNTRTaVhwR2M0NExzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXFUZWN2TmVsK1UvSytwZVl0VCYjeEE7YmpaNmJDMHJxRFF1M1NPTmY4cVJ5RVgzT0t2elk4eitZdFQ4eWVZTlExN1ZKUFZ2OVNuZTRuYmVnTG5aVnIwVkJSVkhZQ21Lc2svTCYjeEE7bjhtZlB2NWdYQUdoV0JYVHczR2JWcm1zVnBIVHI4ZENYSS9sUU1jVmUrV2YvT0QybUN4QXZmTmN4dmlOM2h0RUVTbnc0dElXYW4rcyYjeEE7TVZZZHFIL09KUDVzK1hQTU5oZmVXcml5MWRiYTZpbXRyc1NDMmVGb25EckpMRktlaWtWcEc3bkZYMUI1bjBQWE5XMXBFalFDeWpRQyYjeEE7S1ZtQVVWM2NrZGExOXMzR2kxT0xGanMvVTc3cy9WNGNHR3lmV1R1UHVUUFJ2SjJtYWZ4a2xIMXE1Ry9xT1BoQi93QWxlbjM1amFqdCYjeEE7Q2VUWWVtTGg2cnRUSmwySHBqK09xZlpnT3RkaXJzVmRpcnNWZGlyc1ZZbDV1MGZXOVUxRzNodDR3YlJFcUpDd0NoeWZpTGQrbE8yYiYjeEE7YlFhakZpZ1NUNm5kOW1hckRoeGt5UHF0RjZONUswMng0eTNQK2wzQTNxdy9kcWZaZS8wNVZxTzBaejJqNlEwNnJ0WEprMmo2WS9heSYjeEE7TE5jNnAyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdkRQK2NwZktQNWxlY05MMEhRUEtkZ2J6VFpybDVkVVpaRSYjeEE7ajR5SUZGdjZuTmwvZGdPN2Q5d085S3FwVitWLy9PSUhsclJURHFQbldaZGQxSmFNTk9qNUxZeHQ0TlhpODlQOG9LdmlweFY5QjJ0ciYjeEE7YTJsdEhhMmtLVzl0Q29TR0NKUWlJbzJDcXFnQUFlQXhWVnhWMkt2LzJRPT08L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5kZWZhdWx0PC94bXBNTTpSZW5kaXRpb25DbGFzcz4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6YzVhYzExYmEtYzJlYi00N2Q3LWIxNDMtYTg4YTE5OWMzYmMyPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmM1YWMxMWJhLWMyZWItNDdkNy1iMTQzLWE4OGExOTljM2JjMjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDoxYzQzNTQ3OC05ZDM5LTQ3Y2QtYWIyZi1mZWM0OWRlZGFhZGU8L3N0UmVmOmluc3RhbmNlSUQ+CiAgICAgICAgICAgIDxzdFJlZjpkb2N1bWVudElEPnhtcC5kaWQ6MWM0MzU0NzgtOWQzOS00N2NkLWFiMmYtZmVjNDlkZWRhYWRlPC9zdFJlZjpkb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3N0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOnJlbmRpdGlvbkNsYXNzPmRlZmF1bHQ8L3N0UmVmOnJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8L3htcE1NOkRlcml2ZWRGcm9tPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTllNjRlZDMtYTUzNC00OTM2LThhMDUtYjE1MzZmNmM5ZTliPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIyLTAzLTI4VDExOjMyOjA0LTA0OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNi4xIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjNWFjMTFiYS1jMmViLTQ3ZDctYjE0My1hODhhMTk5YzNiYzI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjMtMDItMDhUMTI6MzY6MjQtMDU6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIElsbHVzdHJhdG9yIDI3LjIgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPGlsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPldlYjwvaWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpDcmVhdG9yU3ViVG9vbD5BZG9iZSBJbGx1c3RyYXRvcjwvaWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+CiAgICAgICAgIDxwZGY6UHJvZHVjZXI+QWRvYmUgUERGIGxpYnJhcnkgMTcuMDA8L3BkZjpQcm9kdWNlcj4KICAgICAgICAgPHBkZng6Q3JlYXRvclZlcnNpb24+MjEuMC4wPC9wZGZ4OkNyZWF0b3JWZXJzaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+/+AAEEpGSUYAAQIBAJYAlgAA/+0ALFBob3Rvc2hvcCAzLjAAOEJJTQPtAAAAAAAQAJYAAAABAAEAlgAAAAEAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/90ABAAZ/+4ADkFkb2JlAGTAAAAAAf/AABEIAMAAwQMAEQABEQECEQH/xAGiAAEBAAIBBAMAAAAAAAAAAAAKBwAJCAECAwQFBgsBAAMBAAIBBQAAAAAAAAAAAAAICQYCBwQBAwUKCxAAAQMBAwIDBQONAAAAAAAAAgABAwQFBgcREggTFAkVFiFhIkPBChcYGRojJCUmJygpKjEyMzQ1Njc4OTpBQkRFRkdISUpRUlNUVVZXWFlaYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6EQABAwECBAIHCX4HAAAAAAABAAIDEQQGBQcSIRMiCDEyQVFSYRUWIzNCcZGSoQkKFBcYGRokJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpiY2RlZmdoaWpyc3R1dnd4eXqBgoOEhYaHiImKk5SVlpeYmZqio6SlpqeoqaqxsrO0tba3uLm6wcLDxMXGx8jJytHS09TV1tfY2drh4uPk5ebn6Onq8PHy8/T19vf4+fr/2gAMAwAAARECEQA/AH8IQsQhYhCxCFiELh3outFdY2hwuxDQ2bBDbOJt5qOc7q2JOMhUFn0wmVPJeW3iBwdrMpJ2cYoBIZayYXAXABllj7vxLYnbdjRws60WpzoLqWR4FolFMt7qZQghrXcRwzueQWxNOUcpxYx+vuldWa8VpL5CWYNiIy3DVk6vIbtSNWdU0Z85oCfLEfFTEDFu35ry4h3ptW81pmc70w11Sb0FlQ1BtJJRWJZgONn2NQZ4s+k00ccbk2c7OTu70ouvdC7dzMGtwVdmxw2SyADKyGjLkIFA6WQ6eV9N1Pc40zCgoB39g7BdgwTZxZsHxMjizVoM7iNe52rcdqSSp6tKvMIoqxh7jvjFhS8Q4fYi3ou3SRHpg2RT2idXd95NVBWPJJd20mrbBmM6gXcnOnJzEzEsombFjry4vLkXxqbyYLslqmIpojmBs1MnJoJmZMwAGqo8UIaRQtaR8RhHAmCcKZ7fZ4pHndRFHaqmtijtVtdhrwKc8sOdalYi2MFPRYm3FsC+0AZkR2xYFXLdK280qiMpauqpnp7XsS0JoadzYIYYbPA3YMpjkIiXa9Goi3YtznWi6eELTYJDUiKZotEWsmjWuyo5WAuoS5zpiNNRpzAYTCOLXB8pL8Gzvhdsrhlt1WqBq1wz68l2vzaoDnthxo/dDXiCFPDVXvmw/tabME7Lv/RvY0UZFUR0uc94KeWvuwMOmSiTPJWxm0LuZgDBJmLpejUcMad2nOfDYm4SsTa7iWN2ik6Uu3JcGT1oCKCJwytKHOLm5WGwhci8FgJLYhPEN1RHK11dZNH7w058wJqK8w7Ltay7coKa1rFtKz7YsutB5KO0rLrKe0KCrjEyjKSmrKSSannAZAIXcSdmJnbf7LpG12O14PtL7Hb4pILXGaOZI1zHtNK0c1wDgaEHOBmKykkUkLzFM1zJBqwQQRu4OdfILxlwWIQsQhYhCxCF8Pbt4bAuvZlTbd5rcse7tjUQFLWWvbtpUVkWZSRgBSHJU19oTU9JAARgRO5mzMzO+/mXm4PwbhHC9rZYME2ee1W6Q0bHEx0kjiTQBrGBziakCgBzlcmtc85LAS7YDOuE+J+tHdDBhxJNRUN6LRxJtaE54ZKLDqz47Xoo5IiaOMyvHaNVZF2qqlmky5JKOrq3zBcs12cM/vu6WovY2r0NbPaLJFgqxuAIdbXmNxBzkaAxsk7XAa6SOPOQK5nZPmR4OtTxUjJG1+Rq1rwxN1rVirbZ1dFhZcS61xbPk0+GG1rwSVN8LyiIzRPS1tKG8ou9QTyQxk0sE1JaIDpmQTdwYyZi6eoZ3PsAZPe/CNswhaRQmOENs0GqOU125kzwCRkubJCTk1LaOyR5bcGxtzyOJO0zD+N4WvLEjRAY14uFVNiNidfC9FHVz6plsWrteemu0MzTNUCdNdazno7uUWZMIkLQ0sbDmDkZmEWZmLrYt7h3LDDdfBNhsk7G5IlbGHT0pk0daH5U7qioOVIa1NdWa++2GOPMxoB33eVHFuEL77h3iliJhLb9PebDe+Ft3QtmnnppynsmrIKatekIyggtezJmmsu26FnlNipqyGenMTISB2J2fO3nujdm+eDnYJvRYrPbbC5rhSRtXNyqVMcgpJE/MKPicx4IBDgQCPacxrxkuFQkg6CHRl0Wifu7aVh3np7KsLFq6cDVdt2RZhSw2fb1gHPFTwXosOkqp6iqgggqqiOmrodNmannOI89hqI4wlzj9xGT4pcJxYQwS6a0XMtjsmKSShfDMAXGzyuaGtJLWufE7JblsDxkkxOc74yeDQjUawVzxS7rx1//0H8IQsQhYhCxCFiEIrGiHxNrsYMZb/X7qqvVVHaNv1lJd9hd9IprrWTIVm3cpoAznjDJZNNEcpAwjLUHJK7MUhZa/wCLO6dnuTcbBt3oWZE8Vma6bYutEgy53E6vcxzg0GpawNZWjQmlu/gtmCMDWewsFHtjBftXuzvO9iQNgABrlFVvF8xRdHZC4kVXa65Be27VLsdeq9py8b7iuYXsOX3O5OJuIWGtcVpXAvreW6FXJspysG2K2z4awcsb6XX0kEo0loQuUQvmThIDuAvkys2T4LD11Ls3qs4st47BZLbCNVo0TXlurzscRlMOc52kHOc+c1+Lt1gsVvZkWyKOVuuymg03Y6sdqouc2GmtO8b7pDBR3+si7mKNmxA4nU1MQ3TvNI7SM8Ta97FpZbGcI4XcHc7LklN2EikcmPPX29Wom3AwyXT3cmtWCLU46y08BEAzZ9w5XCWpOfNaA0ZwG0pk4jCNxcFTkusbn2d+wGnbvDjlePgbTVU5lXU1qfgdaojHey6WIF0at88nkgo7JvHZIiMMRML1lJaVFajzSTkYizUGZmiJObOTiPRuGdRCxgWM5WBrbg22w7Aukgk1Z3S5j46AUJOi1qSA00qcnabj4ShNYJIpG7uWneCCPHvu/dX1ploXG3/at8++PrPjhfAjUU8bh5M2DwJb8qvAddPC7dWI97BTe+WtXcFrIaohubce/wBfCqiA3hnrwse6tjVUj0oywBHWS11sWvGGqi0mUjs8XDNIwGVs1i1OA9Q6v5bcl+HMIYNsMLiKhhktErRlUNWhkUZOTpmgTGtQHFhrTlHda2nPO+Ng2lXH0AG+7wuC2JmtPtETfIKuhugF18L7Km0+OKSwLNe2byalqIYoziqbdvCVdSNPGQm8U9HQ0M0embIs8RNmDupqJmLLAbmWjDZteF7Y2hImfoUGUCSC2KHIdQ5g5kssrXU1VCWnz48AWKHPJlSO2uYbwPakrgRfPEC/eIdeFqX8vlei+VoRaa0FXee3rTtyalGdweWKkK0qqo1JAWlC2lxZgMwCzNkFmZjMBXbu9dmzmyXdsNksNmNKtghjiDqVoXZDW5RznO6pzk1qTXydBihGTE1rRtAAvpJMvngvHeF4nZcwvGcF4nXML2HBdjr1XtEUXR2XquBGvCuGhsxVtHBfHDDjECitE7Oo7LvNZtLeV2zHhrLn2rUxWdeqgqY5hOAwnsSomcCIXeCcY5gySRgQ4DGnc+y37uBhS7doiEs81ke6DV1baY2l9ne0ihqJWtqARlsLmOq1zgfZlZlxlu0S/wBROXwy/9F/CELEIWIQsQhYhCIBatmVVjWpaVj1rANbZVfWWbVjGbSRtVUNRJS1DRyNkYwaWJ8j8TZWxsdqht1kittnroE0bXtqKHJe0OFRrjQ6pN7E9s0TZmaw9oI3YioXoZF5C9wjYrtyL1quBbsF2uy5Be24Lxuy5Bey4LxEuQXjvC8JL3AvFevAa9wLw5F6xr3WrwZV6pr3Wr46UL1TXvNXx0oXqmy94L4+UL1yZe4CvAkC8BMvdBXiPavC7LmF4rgvG7LkF7DgvG7LkvZI3hduReq9sii+UsKxq+8dt2Pd6yodUWpb1q2fY1mwbNtOr7Uq4aGjiyixE2mVE4tsmd9mvEwhbrPguwT4StjsmyWeF8rzsGRtL3HtTQSuJoASdUmtKDa+AX//0n8IQsQhYhCxCFiEI42j4wukw40RN6K+nhMLExGAL/2XLmk4PWWxNNHeWnOZoooSqQvJTVM7xjlKOnqYXN3cmIqg6jne5t6MWNks8jgbfgsmxyDX5MQBgIFScnQHMZU0Bex9KAUDI3AwmMJ3cijcRo9m3CduzQMg02GQWiuvIdTVUHC3Iu96ra5K6ZEVXEtXY7LkCvbc1eN2XIFey5q8RMuYK8Z7V4SZe4F4jwvXJl7gK8KRq9Y2XuheBKF6xsvdaV4ErV6psveaV8dK1esTL3QV4EjV6xMvdBXgyNXgJl7gK8N7V4SZcwV4r2rxuy5gr2HNXjdl6gr2SF25FyqvbLdgucms7MKyxM0UNy6mppzlsXDgKnEm1jF4waOe70lPHdrIczELnsXVtBI4CxSFFHI45rC5gv2pN3vF1MUlviicG27ChbYYxnNRMHGfMNdwDMlFSQ0Oc2tahrvDtjhHCdic38dqSh1JJfCr/9N/CELEIWIQsQhYhC1s60xwukvXhDYeI1n0oS2jhnbeS05M8glG6t6jpbMriCMcuqzp7egs0mFxfSoSmkZxFjYmm1FO9zcD31tF17S8tsuFrPpBSo4CLOHSMqd0h0JnFa6ZwY2hOTTs3FdhQWXDMmDJTSO1R6XYaJHVw3arC/dzkjPmpofzf0yKh9UwOQumaiq9CxdjiuQK9tzF43FcgV47mLwkK5grxnsXhIV7gK8SRi9cmXugrwZGr1jZe60rwZGr1TZe60r4+Vq9Y2XutK+PlavWNl7wK8CRq9YmXuArwZGrwEy9wFeG9q8TsvcBXivavE7LkCvYc1djsuVV7Jaux2XrVe2WrfprJTCwrEw3v9i1X05hV35t+nuzYRyvE4vd+6QSHWVlLmM5gFo2/ak0ErGWVys4XYRbbRzl1M294t96MHXMszgYcH2Yzy0rudaCA1rq5iWQxte2g1U5qSczfhMJPrIIhrhXtZ+56Fbc0ly+NX//1H8IQsQhYhCxCFiEL6lf259nYg3JvZce1mDXdey71rWBUyHAFS9MNp0U1KFbFCZAz1NBLIM0TsQEMsYkJCTM7fM3cw3artYfsd4LFXgJsdpjmaAcnK0NwcWE59K8AtdmILSQQQSD5mDrbLg23w4Qh3Nhla8Z6VySDSuwOqOrzHVHVIn1s2PXWDbFq2FacWkWjYtpV1k2hDs30mts6qlo6uLZsLvpc8JNs2bfysdYbdZ8I2KHCFlOVZZ4mSMOxY9oc09rBCciB8dpgZaIs8UjA4HYhwqDvBXxrivKqvdMa7HFcgV7To14yFcwV472LwkK5grxXsXrkK9wFeHIxeuYr3QV4UjF6xivdBXx8jF6xivdaV4ErF6piveaV8fKxesTL3QV8fIxeuQr3AV4MjF4CFe4CvEexeF2XMFeK5q8TiuYK9hzF2OK5VXsuYuscMs8scMMZzTTGEUUUQFJLLJITBHHGAM5GZk7MzMzu7uh0jY2GSQhrGipJzAAask64DXr2nNS+NDxhkGDmCWGmG2l6XV3ZutQxWyLSQyg95LSeS2b0SRSU+WEoJbx2jVFHmue2CbbRvlJ4o4zL2Ovxf7Ct6a1htdreYsxG4DKRWcEOz1EDIwagZwczdUMhaJNFmdJric27a7fFZlhl7K//9V/CELEIWIQsQhYhCxCEanRoXcortaJ/F2zrPHJBU29Z94JNssG8be27tjXqtN8jO7PltK2ZXy8Vb/4mqo4isKWjCuKXAtptO5jLO+EdYWeaWzs8cibuybjF/LJbbnWGeTWhG5naopHxt8dYFxezNou28pbAxLscFyDl7Tol4iBcwV4z414CFe4CvEkjXgMV7gK8KSNesYr3QV4Mka9UxXutK+PljXrGK95pXx8sa9UxXugr4+SNesYr3QV4EjF6xCvdBXgSMXhIV7gK8R7F4XFcwV4zmLxuK5Ar2HMXjcVyBXsujXKnQUYWFizolcM7Bnpznsaw7YG+94nF42jCyLoZtsBDVDIxEdLatrQUtCbAznkqtk47Mx6gx83vFzcVeFcIxuDbdaIOAWHV1Mlp3CJbTdUcZklFc24evzNPxuEX8A9ke7dRFBu5zb4KntSVgo9rGLEIX//1n8IQsQhYhCxCFiELEIR8NaEV1NX6Jq89PA5vLY937oWdW5wOIjUyWFS2sDRvt4Go7UifLyc7txJUp1Gqzy2fFRZJZKZE9ptL2590iV0efYHKjdm2FDr02uKWySNuTBK8DJkllc3dg8s9C0rhG8a79Dl2O6FeNwXIOXsOhXhIFzDl4r4l65AvdDl4UkS9cgXuBy8KSJesYL3WlfHyx/x/H8e09UwXvNK+Plj/j+P49p6pivdaV8fLGvWMV7zSvj5Y16pCvdBXx8ka9chXugrwZI14CFe4CvEfGvE4rmCvFdGvG4rkCvZdGvG4rlVeyY1u11klhicFBijjBW02a1dNQYeXeqCjpmIoqNoLw3pYTKMq1oJJp7KZnAghM4jYmkMG0pCdTOvY2S0YIuTA6pja+2zNq7VurDZ9fk1AFoJqC4BzSMlrjl5O8UoDo7MNXTKPoB7X+NXucSLLMrEIX//138IQsQhYhCxCFiELEIRndFBeob86IDFe8Uc2qKeS9tbZFHUMMIjPZ92I4bsWdNHpMcQvDJQ2PG4O7Z5A7Obubk71YxS4HN38W+BsGObkyCxNkcM+Z85M7wak5w+RwNMwNQ2jaAPZcTA7sF3NwdY3DJk4BmvcM+Z0tZXA1rnDnkHXV1VBQCBvGuxg5aZ0C8JRrmHLxnwrwkC9wOXhvhXrkC90OXhSRL1jBe6HLwJIl6pgvda5fHyxfx/H8e09UxXvNK+OljXqmC91pXx0sa9UxXvNK+PljXrGC91rl8fJGvWIF7oK8GSNeEhXuArxHxrwuC5hy8Z0a8bhtFyDl7Dol2OC5ZS9oxJP+gCuvT3W0KGFkcWYVTbtLbl6LQmjKdxnqLbvDalRTZQmkMYjpbKGmpyaNhAihcsmUnd5LakfheTC+OPC7n1EVnfFAwGmYRQxtdnAFQ6TLeK1IDqVoAB1phx5fhSUa5pAHagPa1K5kro5fErEIX/0H8IQsQhYhCxCFiEKEaJbE0MJsFr73sjnOG2DsuSwrs6TO1PVPeO32KzbMqaY3ICI7JKcq4xF2N4aU812fI7dh4q7qOvlfvB+BnNDrEJhLPUZTdAh08jXbSSgiBObKkbXMtti7u269V77HgogGy6Jok1RUaFFp3g9Z0EYJzZT21zI1hR7RVQD0/z4F4SjXMOXiSQLwFGvcDl4kkK9c417ocvCkhXrEC90OXgSRL1jBe6HL4+WJeqYL3WuXx8sS9UwXvNcvjZYl6hgvea5fHSxL1TBe80r46WNesYr3QV8fJGvXIF7ocvBkjXrkC9wFeG+NeJxXMFeM6NeNwXIFey6NduYvXKXAxJWehFls+bQyYHnZlGdDTDh3d+GSGSY5yO0KelanterY5DkIQtC1YpqgQysMYyMLMLCzNHrHSy0x417wNtbxJKcJzEEACjHOrG2gAzsjLWE6sltSSSSeoMMtc3CtoDzU6Kd41w7UKBci11gvjFiEL/0X8IQsQhYhCxCFiELSJo+Matj3EMMNrGnzrtYa1dTTV0kUudDal8JYo4rVkMGYcmw9kOgFibOGdqjI7iTJ+tRzuHt3Lsm9NubTCuFWNcwEZ47MCTGK9Js0xpmLNC17SncxD3FOA7ubeW3NphLCbGuYCM7LOCTH3+zSmmYtMevBWv8o0yIcu8HwLwFGvcDl4ckK9c417gcvCkhXrEG0Xuhy8GSJesYL3WuXx8kK9UwXvNcvjpYl6hgvea5fHSxL1TBe81y+NliXqGC95pXxssa9QwXvNcvjZY16xgvdBXx8kf8fx/HtPWIV7oK8GSNeAhXuArw3xrxOK5grxnRrxuC5VXsmNduYvWq4aGksazxve169CxcenkqAqK259oXkufXEB0udG9DbFRadl08kNKIanOC79sUYZJGaWQWaUnLTGIpW6kxgXbHxvYQla0tgt0cFpZrWfLibHIQXa0DNHKat0oNWCmTQdQ3rs3APhqSgo2QNeNXrxQ6vo4Haa7XZubq6CWcWIQv//SfwhCxCFiELEIUM0RWL9Jgthbb969Oia8FTCdi3Oo5AaV6u81oQyjQyFCQlHJS2VGB1lQJuAnDTlGxZ5gxdg4sblTX7vdZsD5J2zWO0W0uBpkwMIyxXVh0hIiYRUhzw6mS1xHYOLG5M9/L3WfA4ads1h0W0uGbJgYRliurDpCREwipDnhxGS1xB0amSeqnmqaqaWpqamWSeoqJ5DmnnnmN5JZppZHKSWWWQnIiJ3InfK+zVO4mxwxtiia1sTWgNaAAAAKAADMABmAGYBUr4BY4oxFE0NiaAAAKAACgAAzAAZgBmAXpFGvfDl4z4V4CjXuBy8KSFesUa90OXgyQr1jjXutcvAlhXqmC95rl8dLEvVMF7zXL42WJeoYL3muXxssS9QwXvNcvjJYl6Zgvfa5fGyxL1TBe61y+NliXqmK95pXx0ka9YxXugrwJI165CvcBXhvjXicVzBXiujXjcVzqvZMa7c1etVw0NbdNZSYilRXoxJwqrawBprcsmhvrYVJMUcbNaVizhZNuDSO+ac9VXWfaVKZx5SdoqFzFmYZHdLdTEuwJ8EYKvhBGTLZ5n2WVwqdJKDJFla4NY9kgBzDKlAJJLQOv7+2GsENvaM7XFjjtHZ212gIPa3bst3KQZdYrEIX/9N/CELEIWIQsQhaOdG/i5ucbFWW7Fl1WnXYw51VYdLpZ5YKy8MhhsR17ZHyFpVRAFGD7NslK5DspHy0AxA3L27Fzxha1sycLYUyZXVGdsIB0Bna2kyHrYAdZCohqPlwzde5bcMW1mThfCuTM6oztgodAZ2tpMp19ZADnaKcKiBd8By7yfEvAUa9wOXiPhXgIF7gcvDkhXrGC91rl4EsK9YwXutcvAliXqGC95rl8bLEvUMF77XL4yWJeoYbRe81y+MmiXpyAvfa5fFzRL0zBe80r4yWNeoYr32lfGSxr1TFe60r46WNesQr3gV8fJGvXIV7gK8J7F4XFcwV4rmLxuK5gr2HMXbmr1quGQrpoZsRCwpx4wwvsdYFBZ1BemgoLfqpjjGniuzbzlYV45Z9O3cuFPY1ozSs5ZGAwEmISFiHr3GtdgXxxd4WwC1hktUlje+FoBqZ4dxYAKZ6mVjW5tWCRQgkH4nDlg20MEz2UNrIYyWjo5umb48AErJR6S+LEIX/1H8IQsQhYhC46aKLF8sHcKLXtizakIb2W8Ww5dFsgHJBaldFK9Ra7RG0jZlh2fHLUCRgcL1Iwxm2SVsvZ2KO5QvvfGGxWppdgazjR7TqwDGwikdRTc15awgEOyC9zc7c3bWJa4PAwb8QYPtbC7AdlHARatWAY2EZMVRTPNIWxkAhwjMj252ZtAMrnKZyymUkkhFJJJITmchm7kZmZZSIiJ8ru75XdUgYGsaGMADQKADMABrhtFUHQWsaGMADAKADMABqgBsF4CBe4HL2HxLwkC9wOXiviXrkC9wOXhyRL1zBe6HLwJIl6pgvda5fHyxL1DBe81y+NliXqSAvfa5fFzRL05AXvtcvi5ol6UgL32lfFzRr05BXvtK+KmjXpmK95pXxc0a9QxXvNK+NlYvVIV7wK+PkYvXIV7oK8F7F4SZcwV4j2rxOK5gr2HNXbkXrVe0WrpkXrVemSlMaE7EiTFXQ94Y3tq6jVNr64AsC35DOnKpO3LrTzXdtCrq4qYzCnmtU7NatEHYH0qpAswWJmaRGOS6zbn4y8LYGhbk2LgJM0IAdkiK0ATMa0uALhGH6ETn0zHDKJBJXu8lg2zsN2izNFI8vKbq6ZL9MAK6ulcndwVyKXWK+DX//1X8IQsQhYhC0U6LzGPc7OKFRS2ZNn3SuNq27tgZkumU9dUtVbzu349lkbXrUU8cYOLuJ01LCWyJyy0JxK3H25t0mzWttMM4QyZpqihY3J3ChPWtrnONc4fI8aoBU9xBYutuHchk9tbTD2E8i0T1FHMbk7gwHrU1znGucSSSDVAU4pOK7iBXdrmLxuK5Ar2HRrwkC5grxnxrwkC9wOXiSRL1jBe61y8CSJeqYL3WuXx8sS9Qw2i99rl8bNEvTMF7zSvi5ol6cgL32lfFTRr0pBXkNK+JmjXpSCvfaV8TNGvSkFe+0r4qZi9QxXvtK+MlYvUNl7zSvjZWr1yZe4CvBkavATL3AV4b2rxOy5grx3NXY7LkvaLdiu3IvVcaFbnNZUYjyS0OJmEtZUZzUc1Df+wKcjp3IYqtoLAvO4iRjWaTHNDZbswCcIHKblpZm2mItqYV12stGCr5wNzyNfY5jR2rbWaDXZNSDPWpDiGtplBpyOqcY+D8l9nwm0asGNxz67TM2mz7XMNWBm3BpJV1ev//WfwhCxCFxh0WmLW5qsJ7T13VOkXpvhp12ru6WebUU2qoX17WvHkdjDXXZxFmG3AFTLDl3+u2cTNzNvhfKLgJZlYIsVJ5qjM7JO4cZ124j6VGvY1+wXd2IG4G37v7DwFsysB4OpabRUaV2SdwojrjoslKtOrjbJsFoiyKhtVUktXbkXKq4Fi7HFeoK9tzF4yFcgV47414SFe4CvFkjXrGC91pXgyxr1TBe60r46WNeqYL3mlfGzRr0pBXvtK+KmjXpSDv9eQ0r4qaNelIK99pXxE0a9GQV5DSviJ2L0ZGXkNK+ImavSNl77SviZmr1DZe81fGyhesTL3QvAkC8BMvcBXhvC8TsuYXjOC7HZcl7RC7ci9argRsFyh0GeI54Y6I7Da15KjU9lW9bMdybezjp4acrLveQWPHNWz1JxR09FZdrT0tdIeeLiNLxU2UC6kx53XbezFfhWxNblWyzwG1Q5nE6JZtxSGhoJLpIxJE0UNTJrjQjN3rsAwhgG0RAVlYzRG6utWabMBqyQC0bv2sJ7UmUvK//138IQsQhaEdFFi1udzFi2bToKnT7rXfy3auppZ51PPZtnzS6ptePNdgk192ictQBuIyamKGMuBbZKLYpLmbcu5sFktLMnC9p3HtFRnD3gZMZ140JgawipGWHuGtFVbxG3A4F9cGzWG1syMO2vhZtVRpmySAZMR140GMNjLaluiCR7dbK46rs5dwrpkXrVemSumRetVxLV2OK5Ar2nMXhIVzBXiyMXrkK9wFeFIxesYr3mlfHyxr1DFe80r42aNenIK99pXxU0a9GQV77SviZo16MgryGlfDzxr0JBXksK+GnYvQlZeQwr4W0NXoSLyGr4eYL0zXvtXxcoXrEvdC8CReAl7gXhvXidcwvHcux1yXska5dq9VwXzd2CtULy3eOwYwmtwLcskrGhkeFo5bVGvp3s6OR55IoGA6tgZ88hDI+zdmyu3gYWFjdgq0twiS3B5s8mikVqI8h2WRQE1Da6oE7AEr2LQIjZ5BNmhyHZXWNDXfEv9ROSsr/0H8IQuH+jNxglw1wyOwLFq9T3qv/AKqsSiOJx1RQWEMIjeG0onfKUUr09QFLEbZphJU6ZG7FHlbuzEXcll6r2DCNuZlYHwbkyuB1l8tdwWHYjKaZHDOCGZLgQ6hYjUbsXbL632GFsIx5eAcEZEzwdZfPXhXjOxGU0yuaatc2PIeC19DpHT8KmixCFiF6rEL0XR2XqvQiq8RMuYK8d7V4CZe4CvDkavXMV7rSvAlYvUMV7zSvjpWL05BXvNK+LmYvSkHf68hpXxM8a62dY1rW9aNJY9hWXaNtWvaErU9BZVk0VTaNo1s7s5NBR0NHFNU1MziLuwgJFkZelqt1jwdZX27CE0UFijbV8kjmsYwbFz3ENaNqSAs9hKey2GzvtdtkjhssYq573BjGjYuc4hoG1JC5jXC1nxjzfEQqrw09hYd2eWe7PeO0GrLXlDSs6I4LIsNrQePPndgIaqalkEWIs18gsfR94tSUxd4EJhwY60YTtIpuQzJjBrnBklyK0GcGNsgJIFRnLejLwY6bmYOJisDprdP0ibksGfPV8mTXNnqxrwcwrqyOSFk6y4sAYC1/4v2vWVR6WQ657p0VmQQbYbTYi1bbVrSVWSTgE93O2d/hl391dbNS5wiZBtm4EgZEK7m2h0hOfMdLFGG5tWNNn3Uus7Zj1tUr+FTB0bI8+tylxOwOlYwDNrs+7ryWjrLO6M1JKFl4uXjo64szSKmvuxZlpUkeSQHl02ip7TsqabPhYhHJUR5pOxPnMziXGy6l3hpkzXWvAtlks+erWTyMccxpRzo5AKGhNWGoqM1aj45uOm3ueDNYITHrw2RzTqtiWuAz9GnYZtWOPd/9ZkYx2CEtTcS8t1cQaYNNzKOQ5Lo27PmQyyx5lJac1ZYY6cUbR7btIc2Qxy7YzzDsq7epX3Hwi4RXhstswbKaVcKWmIZwDV0YbLmrlZoDUA7qo13zVhxsYEtdG4Qimszzr9zGDXatoD9ruXqgdfQHghiBhViRhbXtZuIVyrw3TqJDKOmltazpoaCvIAAzey7VBpLLtUIxNs4qaaURLKzuzs7Mw9274XWvdZ+Aq7Vvs1sjAq4RvBezPQaJGaSRk0zB7WkjOMxBOzsWF8GYWj0XBs8czRq8kio6ybrTe2gFOHWoC95y8TrmF47l2uuS9py7XZC4ELmfoEcGK/FjHm7dqS0VTJdLDSvs6+l5LQCMCpIayzp5Ky6tlVEkrtGR2zbdAO7nIRy00E7sOaBEPRepDX6s1zcXdqsbJGDDOFY32WBhJyi14DbRI0DPSKJ502YNkfHnq4A4++mFmYMwLJGCOAq0NMbBr6HM9w6xadXriW7EVSUpaLoBf//RfnPPDTQzVNTNFT09PFJPUVE8gRQwQxA8ks00sjjHFFFGLkRE7MLNldc445JZGxRNLpXEAACpJOYAAZyScwA1a5xRSzythha58z3BrWtBLnOJoAAM5JOYAZyVoD0RuLRYxYpW1eWlmlO7lDm2HdOKQJYs2wrPOXSqt4JRCWGW1qqSWqITFjDTmAuAGZqPYr7mC5F0YMFTNAwpJuLaCKHcV4FW1FQRG0NjBBIOSXDWs9Z8TVwRi5uNZsDWhrRhiXce1EEHceQCrMoVBETQ2IEEtOQXDWjWFLsJdrLHZeq9CFiF6gUXR0Li5dELiux2XIL23BeEmXuArxXheAmXuArwpGr1TFe60r4+Vi8MdNPVTw0tLDLUVNTLHBT08EZzTzzzG0cUMMUbFJLLLITCIizuTvkZe46WOGN0srg2JoJc4kAAAVJJOYADOScwC+JtRjhjdLK5rYmtJc4kAAAVJJOYADOScwC544LaAS/N9SoLcxRnqLgXXnAKgrGjaPY4rYJAzwB6Opp6iku4ZZzZ2rAOpidnE6Zn2bLvfvUjbv4BEmD7otbhLCzSW6Ka8ArCDQnKaQ6YbDQiGOGcS7FZL+6kFd7A2iYPuoG4Rwo0luiZ+AVpBznKBDptpoZDHDOJTr9reGWD+HWD9jvYtwLt0ljRTZpV9cRS1tsWrMwizzWla1Wc1bU5SHOGLPGCJ3doowHZMnd7L7XnvtbuA68dqfO9usMzNijGwZG0BrdgXUL3U07nHOlEvNe+8N77ZwG4ftLpnjWW5mxsGwZG2jRsCaFzt1Occ6piyizSxCFiELEIXoWpZVl23QVNlW1ZtBa9l1gNHWWbalHT19BVxiYyDHU0dXHNTzg0gCTMQuzEzPv9l5FktlrsFpZbLBLJBa4zVr43OY9ppSrXNIcDQkZiMxXuRSywSCWBzmSt1TmkgjdiM4XCvFLWfOh5xF0yssexKzDO2zmmnKuuNPHSWZUFLlcYKm7NdFW2HBRwkTkIUMVCbPkbPzGYW74ujqSmMy7FILdaI8K2ANAyLWC6QU17Z2FspcdUTK6Ua/JyiStngy/94cH6SZ4tMNKUlFXDah4o4nrIu3auda6cTdZnY33Sz6q4NpWBilZo7c0ksN07yCzaaUkslkW5XFZJQjGI5GhtOaczJxaLZM5M7dPUrLgYZpDeOK04ItR17gbRBrqASRM0Sta61A1gAqX5yBvsHYx8C2vSW5slmk2J07N7NGVXd2AbXYcULR0M+iIsyrloqjA7FaWaDMzzs+4d5bWpC0yIJR0m0LKs2soKjIEjMWlylmFlEshC7N3HZsa2LK1QC0RXgwOI3VoH2uCN2YkZ2SPa8arNVoqKEVBBOkbeLAEjA9ttstDsZWNO8EgjtYXJTCLWcuOd+7Qppr+UkOFd2H0w56615KG1bfnGGdoSgobuWfaDzxTSuxOJVklKGYOe2ezgx9V311J/F9d6zOZd17sMYWzAMjD44RUVq+d7KEDNURNkNTknJIcW5zCt/wDA1ijIsRNptOuDataN3eRTeoOwzZ6bvcGcGbkYF3Is+41xrP1PRU+SotO06hozte8VrnGAVVtWzVAAaorKjMZhFmGKCIRiiEIwEWQS/N+cP4wsPyXgvBJlTu0scbaiOGMElsUTSTktbXOc7nOJe8uc4k9OYWwtbMM2x1ttjqvOYAay1uua0a4DeSc5qSSquscvjF//0mP6OHFrYHw0G5FlVOl3ixH1TZs2lHklo7p0zR6/5izc7M166dHQCJiwywz1Di+dFsu+sQFzNvBeo4ftjK4MwXkvFRmdaHV0EbXQ6OlJBq1zY6ij0zOowXA2899Tee3srgfA2TIKjM+1OroAGx0KjpyWmrXshDhR+fTAnqVI1iF6rEIXVkLk1Y6F6OXRC4ro69QuLgvETLmF47wvCTL3AV4sjVyqwY0HmJ+LOpLYr6XYIuXLLG527b0E0doWhS7YKQ7v2G4hV1+WORnCeZ6ajNsuZMZCQLp6/WO66VzcuxWZ+2hh0A0ihILGOz0E0usszg1a3LkGbKY0EOXQOMXHxcy5BkwfZX7aN4WtNIYSCyN2egnmztZnBBYzRJRmyo2hwctseD+hywuwVh026ti6svDJE0VXe23NJtC8MwuBhLFS1OkxQ2TSzMbscVJHCMrMOm6Y4i7JvfbGhe6/kmRhefIwYDVtmiqyEZ8xc2pMjhTM6QuLc+RkgkFHL9Y1L4YwJcnDM+h4MDqts0NWQjPUFzakyOFMzpHPLc+RkgkG7rrxdcLEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiEL//T3wY9Yj1GKmKt7b2FOU1mSWjNZl3AfZDBduy5ZKWyBAGOQIyqacdUSsJELzzm7O+VUuxdXXjufc+xYGDQ21iIST7WeQB0megJyTpG1AOQ1o1yrziqubFcS4eD8ABgbbRCJLQdmtEoDpamgJDXHQ2kgHIY0EZlH1tl2GsQhYhC6shc2rHQh2qXRC4LHXqg5wrjhJoc8T8ZjGpuxY4Ud3hnKnqr121IVDYcJxuzTR08jRy1VpzxZchBTRSuBZGNwy5V1/fPGfdO4rTFhacvwnk1bZ4hlykHVEiobGDrjI5tRrOVql1TjBxv3IxctMOG7QZMLlmU2ywgPmIOslwqGxtOudI5tRrOVqltYwY0IOGOFGpLYr6XY2vnFFG525b0EMln2fU7YKQ7v2G4nSUGSSNnCaZ6msDZ5kwCRAk9v1jrvZfHLsNnfwAYCJNIoSQ97c9BNLmc/MTVrciM5spjiAUh2MbH/fS/eiYPsr9s27rnGkMBIkkbnAE82Zz8xILGaHE7NlRuLQ5cr104uiliELEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIX/1NwCrIreLEIWIQsQhdWQubVjoXo4a9UTDjCe/wBixaz2Rca71Va8sWaVbWkUdHZNmROQs8to2pVHFR0+QSzhjznmlZnaMDLZPmL0Xyu5c6x8Bt4LSyFh1hmd0kh2DI21cdgXUDW10zmjOsbfG/107hWDbQvRbI7Ox2sMzvlkOwjiaC92wLqBjagvc0Z1tGwe0DFxbnagtrEeeK/t44dIqCsnMOO5lFVBmmUWopowqbwxRys7Z1W0cEwcB0rZciUe++pBXhw5olguu04OwW6rdErW1Oac1coEthJGekdXtOsynVpGcYmpR3pvFouDbmsdgrAzspolqDbHtOauWCW2ckZ6RFz2HWZzq1zogggpYIaamhip6enijgp6eCMIoIIIgaOKGGKNhjiiijFhERZmFmyMl9kkklkdLK4ulcSSSSSSTUkk5ySc5JzkpXJZZJ5HTTOc+Z7i5znEkuJNSSTnJJzknOSvKuC4LEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIWIQsQhf/9XfloicKqvCLFS8V3dS6RYNfVTW7dGYMrwTXbtKomkoqeMiM5HlsiRjopc/NIpKdzZswwcqSYsr4Q30uhZcJ5eVhGNgitIOrE7GgOccwFJBSVtKgNeG1ymuArbifv3Z8YNxLHhjRMrCsUbYLWDrQtEbWh7jmApKKTNpUBsgaTlNcBDV2Auz1iELEIX2a6Vzr037tqG71z7CtG8NsVAFKNDZsBTHHABxxyVVTJtmCjo4jlFjmmIIgcmzibK2X4rDOHMEXesLsJYbtEVmsLTTLeaAmhIa0atziAaNaC40NAaL4fD148BXVwc7C94rVDY8GsNC+R1AXEEhrRrT3kAkMYHONDQGhWybBrQE0lLqS3sZbR1ZUhLHPFcmwqlms8RDMNorftsR06s0x3ITp6LShFxZ2qZBJwZWb86kXNNl4OuNFocRBBtUzdPnrnhi1TaZiHy5RNSNCaQCUxxkalfaJ9EwTi3h0OAtLTbZ27iZ6isEJzMpmLZJsompBhYQHHYtYdg2JdmzKaxru2TZ1h2TRhmUtnWVRwUNHA3E3Cnpo442I3bKRZM4n2bu77NLFhDCNvwra327Cc0totjzVz5HF7ju5cSd2GqGuSc4TwrhPDdtfhLDFomtWEJDV0kr3Pe7d3OJNBrhqgMwzL5ZeGvj1iELEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIWIQsQhYhC//WdFi/g7dDGm6x3bvVTlHNAR1NiW7RjG1q2DXkIi9RRSyCQnBUCDDUQHljnBmy5DGMw2Nyb74buJhcYUwO4FjgGyxOroczNlcBqiKkseNMw11bS5rt7i8xi3hxa4dGGsBPBjcA2aB9dCnj2V4Gqc2pMbxpmEmlWue12pbEDQVY2XNqJ5LGsinv5YwFI8NoXani1dpQ5rx6psGslhtIJ5Gd9sU7VQC4uznsxznLu3j4uFhyNrbdM7B1uIFWTg5FdfkzNBZQbF+hk11nV0f26WpLYs7xwtZhK0PwVhEgVjtLTkV1+TOwGMtGxkMRNdZzGkhoMA8brRqGpqfCXEOORwI2Kvulbdl0+QNm7PV2nR0lKxPxIXPOLiTOtraMY1wbLHosmGcGFtaaS0RSHesbnO7XSg167CtWNfFlY4tGmw/ggsqBpLXDK7P0bG97qbE0oNeuX+FegBvFaMkFpYtW3Fd6hbS5Cu1d2oprRtubKIkcFZa7DPZFn5hPmu8DVufkfIQ7In6UvfqSGDLMx1luZAbTaM40eYOZENgWx5pH11Yy9CpmqDnAXm/epZ4HsbH2LF/ZnWy1ZxwE2hro4Rrg5kWllkrqxl6DTNUOzgbKrjYeXLw2saOwbk3es6waARiad6OAGrLRlhBwCrta0CYq21KzNd202czNm2TOwszMq14LzYdvTbjhHD1pltNpJNMo6VgJqWxs1mNvRrABr9XnKW3ovfeW+mEnYVvNbJrXayTk5bjkRgmpbFGNJEzo1jWiucgmpP3RfBLNrEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIX/2Q==",id:"e",width:193,height:192}))))};var Q;function E(){return E=Object.assign?Object.assign.bind():function(A){for(var e=1;e{let{title:e,titleId:g,...t}=A;return a.createElement("svg",E({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",viewBox:"0 0 177 74",role:"img","aria-labelledby":g},t),e?a.createElement("title",{id:g},e):null,Q||(Q=a.createElement("path",{fill:"currentColor",d:"M87.61 16.365c-11.4 0-20.64 9.24-20.64 20.64s9.24 20.64 20.64 20.64 20.64-9.24 20.64-20.64-9.24-20.64-20.64-20.64zm0 33.27c-6.98 0-12.63-5.66-12.63-12.63 0-6.98 5.66-12.63 12.63-12.63 6.98 0 12.63 5.66 12.63 12.63 0 6.98-5.66 12.63-12.63 12.63zm68.34-33.27c-11.4 0-20.64 9.24-20.64 20.64s9.24 20.64 20.64 20.64 20.64-9.24 20.64-20.64-9.24-20.64-20.64-20.64zm0 33.27c-6.98 0-12.63-5.66-12.63-12.63 0-6.98 5.66-12.63 12.63-12.63s12.63 5.66 12.63 12.63c0 6.98-5.66 12.63-12.63 12.63zM20.66 16.365c-11.4 0-20.64 9.24-20.64 20.64v36.99h8.01v-20.69c3.49 2.71 7.87 4.34 12.63 4.34 11.4 0 20.64-9.24 20.64-20.64s-9.24-20.64-20.64-20.64zm0 33.27c-6.98 0-12.63-5.66-12.63-12.63 0-6.98 5.66-12.63 12.63-12.63 6.98 0 12.63 5.66 12.63 12.63 0 6.98-5.65 12.63-12.63 12.63zM121.62.015h-8.01v40.22c0 9.62 7.8 17.41 17.41 17.41v-8.01c-5.19 0-9.4-4.21-9.4-9.4v-19.86h9.4v-8.01h-9.4V.015zm-57.04 16.35c-9.62 0-17.41 7.8-17.41 17.41v23.87h8.01v-23.87c0-5.19 4.21-9.4 9.4-9.4v-8.01z"})))};var s=g(50615),B=g(31792),Z=g(30658),i=g(33453),V=g(81271);const o=["bun","deno","node","go","rust"];function N(){const A="undefined"!=typeof window&&window.navigator.userAgent.toLowerCase().includes("win"),e=o[function(A,e){const g=Math.ceil(A);return Math.floor(Math.random()*(Math.floor(e)-g+1))+g}(0,o.length)]||o[0];return a.createElement("ul",{className:"flex flex-col w-full p-2 m-0 overflow-auto font-mono text-sm text-gray-200 border border-solid rounded-lg bg-slate-900 border-slate-500 list-none",style:{height:230}},a.createElement("li",{className:"text-gray-800"},"# Install proto"),a.createElement("li",null,A?"irm https://moonrepo.dev/install/proto.ps1 | iex":"curl -fsSL https://moonrepo.dev/install/proto.sh | bash"),"bun"===e&&a.createElement(a.Fragment,{key:"bun"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Bun"),a.createElement("li",null,"proto install bun 0.5"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"bun run index.ts")),"deno"===e&&a.createElement(a.Fragment,{key:"deno"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Deno"),a.createElement("li",null,"proto install deno 1.31"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"deno run index.ts")),"node"===e&&a.createElement(a.Fragment,{key:"node"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Node.js"),a.createElement("li",null,"proto install node 18"),a.createElement("li",null,"proto install pnpm"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"pnpm install"),a.createElement("li",null,"pnpm run dev")),"go"===e&&a.createElement(a.Fragment,{key:"go"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Go"),a.createElement("li",null,"proto install go 1.20"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"go run .")),"rust"===e&&a.createElement(a.Fragment,{key:"rust"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Rust (requires rustup)"),a.createElement("li",null,"proto install rust 1.68"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"cargo build")))}function W(){const[A,e]=(0,a.useState)("?.?.?");return(0,a.useEffect)((()=>{fetch("https://raw.githubusercontent.com/moonrepo/proto/master/version").then((A=>A.text())).then((A=>{e(A.trim())})).catch(console.error)}),[]),a.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600 star-pattern"},a.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col md:flex-row"},a.createElement("div",{className:"text-center md:text-left md:w-6/12"},a.createElement(V.Z,{icon:a.createElement(c,{height:75,style:{marginTop:5}}),text:a.createElement(U,{height:90,className:"absolute top-0 left-0"})}),a.createElement("p",{className:"mt-1 mb-0 text-base text-white sm:text-lg sm:max-w-xl sm:mx-auto md:text-xl md:mx-0 md:w-[80%]"},"A version manager for all your favorite languages and tools. A unified toolchain."),a.createElement("p",{className:"mt-1 text-white opacity-50 text-sm md:text-base md:pr-4"},"Supports Bun, Deno, Node (npm, pnpm, yarn), Rust, Go, and more."),a.createElement("div",{className:"mt-3 flex justify-center md:justify-start"},a.createElement("div",null,a.createElement(i.Z,{href:"/docs/proto/install",color:"bg-pink-600"},"Get started",a.createElement(B.Z,{icon:F.gfM,className:"ml-1 md:ml-2 inline-block rotate-180",style:{maxWidth:18}}))),a.createElement("div",{className:"ml-1 sm:ml-2 lg:ml-3"},a.createElement(n.default,{href:"/docs/proto",className:"w-full flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white bg-white/5 hover:scale-110 md:text-lg group transition-transform"},"v",A)))),a.createElement("div",{className:"mt-4 md:mt-0 md:w-6/12 flex flex-col flex-grow-0"},a.createElement(N,null),a.createElement("div",{className:"mt-2 flex justify-center items-start gap-1"},a.createElement("div",null,a.createElement(Z.ZP,{className:"text-white opacity-50 m-0",size:"sm"},"Backed by")),a.createElement("div",null,a.createElement(s.Z,{height:22}))))))}var R=g(87129),h=g(30780),Y=g(64654),p=g(9187),b=g(90728);const x=[{title:"Lightspeed interface",icon:m.BDt,description:"Download, install, and run tools with lightspeed, thanks to our Rust based foundation."},{title:"Universal toolchain",icon:F.pmO,description:"Manage multiple languages and dependency managers through a single interface."},{title:"Version detection",icon:F.OxJ,description:"Detects a version at runtime from a language's ecosystem for maximum compatibility."},{title:"Granular configuration",icon:F.eDR,description:"Configure tools and their versions per directory, or per project."},{title:"Pluggable architecture",icon:F.zZQ,description:"Extend the toolchain with custom plugins, enabling new and non-standard tools."}];function G(){return a.createElement(Y.Z,{title:"proto - A multi-language version manager",description:"Lightspeed version manager for programming languages and their dependency managers."},a.createElement(W,null),a.createElement("main",null,a.createElement("div",{className:"bg-gradient-to-b from-slate-600 via-pink-900 to-white"},a.createElement(d.Z,{header:"Toolchain",description:"One tool to rule them all",features:x,tier:2}),a.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},a.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},a.createElement("div",{className:"bg-white rounded-lg p-6 drop-shadow"},a.createElement("div",{className:"grid grid-cols-2 gap-4 text-gray-900"},a.createElement("div",null,a.createElement(p.Z,{level:3,className:"mb-2"},"Get started"),a.createElement(Z.ZP,{className:"mb-1"},"Install proto for Linux, macOS, or WSL:"),a.createElement(h.Z,{language:"shell"},"curl -fsSL https://moonrepo.dev/install/proto.sh | bash"),a.createElement(Z.ZP,{className:"mb-1",variant:"muted"},"Or Windows (",a.createElement(b.Z,{href:"/docs/proto/install#windows"},"full instructions"),"):"),a.createElement(h.Z,{language:"shell"},"irm https://moonrepo.dev/install/proto.ps1 | iex"),a.createElement(p.Z,{level:4,className:"mt-4 mb-2"},"Install a tool"),a.createElement(h.Z,{language:"shell"},"proto install node 18"),a.createElement(p.Z,{level:4,className:"mt-4 mb-2"},"Run the tool"),a.createElement(h.Z,{language:"shell"},"node ./main.mjs\n\n# Or with proto\nproto run node -- ./main.mjs")),a.createElement("div",null,a.createElement(p.Z,{level:3,className:"mb-3"},"Supported tools"),a.createElement(R.Z,null),a.createElement(p.Z,{level:3,className:"mt-4 mb-2"},"Why another version manager?"),a.createElement(Z.ZP,{className:"mb-2"},"To start, proto powers ",a.createElement(b.Z,{href:"/moon"},"moon's")," toolchain and integrated developer environment. We believed that the toolchain would be extremely beneficial for developers as a whole, and so we extracted proto out into a standalone Rust CLI and"," ",a.createElement(b.Z,{href:"https://crates.io/users/milesj"},"Rust crates")," that moon inherits."),a.createElement(Z.ZP,{className:"mb-2"},"Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each with different workflows, CLI commands, and configuration files, is a poor developer experience."),a.createElement(Z.ZP,{className:"mb-0"},"Our goal is to unify all of these into a single performant interface. A toolchain manager is the next step in the version manager evolution.")))))))))}},9619:(A,e,g)=>{g.d(e,{Z:()=>a});var t=g(27378),I=g(40624),C=g(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function a(A){let{className:e,icon:g,text:a,variant:F}=A;return t.createElement("span",{className:(0,I.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",F?l[F]:"bg-gray-100 text-gray-800",e)},g&&t.createElement(C.Z,{icon:g,className:"mr-1"}),a)}}}]); \ No newline at end of file diff --git a/assets/js/1cb65c7d.d1b52804.js b/assets/js/1cb65c7d.d1b52804.js new file mode 100644 index 00000000000..344be1cf0af --- /dev/null +++ b/assets/js/1cb65c7d.d1b52804.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23168],{59220:(A,e,g)=>{g.d(e,{Z:()=>C});var t=g(27378),I=g(9619);function C(A){let{className:e,status:g}=A;switch(g){case"experimental":return t.createElement(I.Z,{className:e,text:"Experimental",variant:"failure"});case"in-development":return t.createElement(I.Z,{className:e,text:"In development",variant:"success"});case"coming-soon":return t.createElement(I.Z,{className:e,text:"Coming soon",variant:"warning"});case"new":return t.createElement(I.Z,{className:e,text:"New",variant:"info"});default:return null}}},33453:(A,e,g)=>{g.d(e,{Z:()=>l});var t=g(27378),I=g(40624),C=g(81884);function l(A){let{children:e,href:g,color:l}=A;return t.createElement(C.default,{href:g,className:(0,I.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",l??"bg-purple-600")},e)}},75969:(A,e,g)=>{g.d(e,{Z:()=>n});var t=g(27378),I=g(40624),C=g(31792),l=g(9187),a=g(30658),F=g(59220);const m={1:"from-purple-600 to-blurple-600",2:"from-pink-400 to-red-400",3:"from-teal-400 to-slate-100",4:"from-yellow-300 to-green-600"},d={1:"text-blurple-300",2:"text-pink-500",3:"text-teal-600",4:"text-green-600"};function n(A){let{header:e,description:g,features:n,reversed:r,tier:c}=A;return t.createElement("div",null,t.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},t.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},t.createElement("div",{className:(0,I.Z)("md:flex items-center justify-between",r&&"flex-row-reverse")},t.createElement("aside",{className:(0,I.Z)("md:w-1/3 mx-2 md:mx-0 p-2 sm:p-3 md:p-4 drop-shadow z-0 rounded-t-lg text-center",r?"md:rounded-tl-none md:rounded-tr-lg md:rounded-bl-none md:rounded-br-lg bg-gradient-to-bl md:pl-0 md:text-left":"md:rounded-tl-lg md:rounded-tr-none md:rounded-bl-lg md:rounded-br-none bg-gradient-to-br md:pr-0 md:text-right",m[c])},t.createElement("h2",{className:(0,I.Z)("m-0 px-1 py-0.5 inline-block text-base font-semibold uppercase tracking-wider text-white bg-black/20 rounded",r?"md:rounded-tl-none md:rounded-bl-none md:pl-4":"md:rounded-tr-none md:rounded-br-none md:pr-4")},e),t.createElement(l.Z,{className:(0,I.Z)("mt-2 text-white",r?"md:ml-4":"md:mr-4"),level:2},g)),t.createElement("section",{className:"md:w-2/3 bg-white rounded-lg p-2 md:p-3 lg:p-4 drop-shadow z-10"},t.createElement("ul",{className:"m-0 p-0 list-none grid grid-cols-1 sm:grid-cols-2 gap-2 md:gap-3 lg:gap-4"},n.map((A=>t.createElement("li",{key:A.title,className:"flex"},t.createElement("div",{className:"pt-1 w-9 shrink-0 grow-0"},t.createElement(C.Z,{icon:A.icon,className:(0,I.Z)("text-5xl justify-center flex",d[c]),style:{maxWidth:54}})),t.createElement("div",{className:"ml-1"},t.createElement(l.Z,{level:4,className:"text-gray-900"},A.title),A.status&&t.createElement("p",{className:"m-0"},t.createElement(F.Z,{status:A.status})),t.createElement(a.ZP,{className:"mt-1 mb-0",variant:"muted"},A.description)))))))))))}},81271:(A,e,g)=>{g.d(e,{Z:()=>I});var t=g(27378);function I(A){let{icon:e,text:g}=A;return t.createElement("h1",{className:"text-white flex justify-center md:justify-start items-stretch gap-3",style:{height:85}},t.createElement("div",{className:"relative"},e),t.createElement("div",{className:"relative"},g))}},87129:(A,e,g)=>{g.d(e,{Z:()=>a});var t=g(27378),I=g(40624),C=g(81884),l=g(30658);function a(A){let{cols:e=3}=A;return t.createElement("div",{className:(0,I.Z)("grid gap-4 px-4",6===e?"grid-cols-6":"grid-cols-3")},t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#bun"},t.createElement("img",{src:"/img/tools/bun.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#deno"},t.createElement("img",{src:"/img/tools/deno.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#go"},t.createElement("img",{src:"/img/tools/go.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#node"},t.createElement("img",{src:"/img/tools/node.svg",width:"100%",className:"inline-block"})),t.createElement(l.ZP,{className:"m-0",variant:"muted"},"+ npm, pnpm, yarn")),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#python"},t.createElement("img",{src:"/img/tools/python.svg",width:"100%",className:"inline-block"}))),t.createElement("div",{className:"text-center"},t.createElement(C.default,{href:"/docs/proto/tools#rust"},t.createElement("img",{src:"/img/tools/rust.svg",width:"100%",className:"inline-block"}))))}},79090:(A,e,g)=>{g.r(e),g.d(e,{default:()=>G});var t,I,C,l,a=g(27378),F=g(21947),m=g(83469),d=g(75969),n=g(81884);function r(){return r=Object.assign?Object.assign.bind():function(A){for(var e=1;e{let{title:e,titleId:g,...F}=A;return a.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 82 82",role:"img","aria-labelledby":g},F),e?a.createElement("title",{id:g},e):null,a.createElement("g",{clipPath:"url(#a)"},a.createElement("mask",{id:"b",width:82,height:82,x:0,y:0,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},t||(t=a.createElement("path",{fill:"#fff",d:"m81.7 57.522-5.634-17.97a26.648 26.648 0 0 1 0-15.982l5.743-18.3c.977-3.129-1.954-6.057-5.065-5.078L58.488 5.95a26.46 26.46 0 0 1-15.943 0L24.618.302c-3.18-1-6.132 2.069-5.025 5.217l3.27 9.275a26.709 26.709 0 0 1-1.505 21.23L.48 76.051c-1.855 3.559 2.024 7.357 5.533 5.428l37.998-20.97a26.558 26.558 0 0 1 21.685-1.779l10.819 3.838c3.12 1.1 6.181-1.858 5.184-5.047Z"}))),a.createElement("g",{mask:"url(#b)"},a.createElement("mask",{id:"c",width:92,height:93,x:-5,y:-6,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},I||(I=a.createElement("path",{fill:"#fff",d:"M-4.994-5.005h91.977v91.982H-4.994V-5.005Z"}))),C||(C=a.createElement("g",{mask:"url(#c)"},a.createElement("path",{fill:"url(#d)",d:"M-5.323-5.025h92.366v92.112H-5.323z"}))))),l||(l=a.createElement("defs",null,a.createElement("clipPath",{id:"a"},a.createElement("path",{fill:"#fff",d:"M0 0h82v82H0z"})),a.createElement("pattern",{id:"d",width:1,height:1,patternContentUnits:"objectBoundingBox"},a.createElement("use",{xlinkHref:"#e",transform:"scale(.00518 .0052)"})),a.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E4XGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gSWNvbjwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozNjoyNC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjM2OjI0WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzY6MjQtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD40MDwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFDZ0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FQVk9Lc0k4N2VhZGYwWFY0RnRUSDlUZSYjeEE7SU1xdW5JTXdKRGNqczIyM1E1dSt6dEZpell6eFh4VzVtRERHY2QrYWpwLzVyV3BBWFViSjQyN3lRRU9EL3NXS2tmZWNubDdEbC9CTCYjeEE7NW9ucFNPUmIxSDgydE9qV2xoWnl6UDhBelRGWTFIM2N5Znd3WXV3cG42NUFlN2Y5VFY0SkhOQWVXUFBYbWJXdk05cmJNWWt0SDVtYSYjeEE7QkUrSGdxazE1TnlldjA1ZnJlek1HSEFaYjhYUXNKUnA2WG5Oc0hZcTdGWFlxN0ZXRytlL01ldWFMZDJiV1RJdHRLckZneWh1VHFSVSYjeEE7RTlRS0VkTTNIWm1reFpveTR2cURsNmZGR1lOODBEcC81clJVQzZsWkZUM2t0elVmOEE1SC9Fc3Z5OWhuK0NYei9INkV6MHRjaXJYLyYjeEE7QU9iT2xSb1JaV2MwOG5iMVNzYS9nWFA0WkRGMkZrSjlVZ0I1Yi9xYWZCSTVwVG8zNWdlWjlYOHlXTnFucFJXOHNvV1dCRXFER04zSiYjeEE7WnVUVkNnbllqTXZVZGxZTVdHVWpaSUhQelltTlBVTTVocmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnh2L25Kcjh3ZiYjeEE7UG5rWHl4cE9zZVZaWW9JcEwzNnZxTXNrU3pHalJsNGxvNElDdHdia2V2VGZGWG1YbEwvbk51OWpDUStiZkw2VGdDajN1bU9ZMjI3KyYjeEE7aE1XVWsvOEFHVWZMRldWNnYvem10K1hzRnB6MHJSOVR2cnNpcXd6aUcyakI4R2tFazVIMEljVmVZMzMvQURsdCtidm1IWGJHeTh1MiYjeEE7OWxwZjFpNWlodHJPT0w2dzh6U09GV09TU2F2MmlhVlJVT0t2dFRGV0UvbWxIRzJuV1RrRDFWbVlLZS9FcjhYNmhtNjdGSjQ1RHBUbiYjeEE7NkFFeVB1ZVp1bWRLQzVzNEtEcGt3WEZuQjZCK1VtbXI2dC9xTEQ0a0MyOFovd0JiNDMvVXVhSHQzTnRHSHhjUExzOUp6bTJsMkt1eCYjeEE7VjJLdXhWaVg1bXh4dG9FVE5UbXR3dkE5OTFhdWJic1lrWlQvQUZmMU9ab1FUUDRQSzNUT3BCZGpPQ2c2Wk1GeEp4WnIrVSttckxxMSYjeEE7M2ZOL3g2eEJFSCtWTVR2L0FNQ2hHYVh0ek5XT01mNXgrNXhNd3A2bm5MdERzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzViYjeEE7ZVovODVKMjloUDhBa241bkY3UUpIRERKRXg2aVpiaU14VStiMFg2Y1ZmbnZpcnNWZXZmODRyZVY0OWUvT0hUcEpoeWcwV0dYVkhVOSYjeEE7Mmg0eHhIL1l6VEkzMFlxKzlzVmVYK2V0Vy9TR3JHR00xdDdPc2FlQmY5dHZ2RlBvenArek1IaDQ3UE9YNEQwZWgwdkJqczg1TVZraiYjeEE7emFBdGs0SWQweXdGdzV3WjcrVkY4cXZmYWV4M1lMUEdQbDhML3JYTkQyNWkyalA0T3YxTU9SZWk1enppT3hWMkt1eFYyS3ZOL3dBdyYjeEE7TlcrdWFndGpFYXcyZFE1OFpUOXIvZ2VuMzUwZlpXRGdoeEhuTDdub096dEx3dzRqemw5ekRwSTgzQUxrWklJWjB5d0Z3NXdacCtWViYjeEE7OGtPcVhkazIzMXFOWFQzYUluYjduSnpUZHQ0N2hHWDgwL2YvQUdPQnFZYlc5T3ptWENkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjVYLzV6TS9NdWkyWDVmMkVnMzRYK3RGZW8vd0NXZUUvOG5HSCtwaXI1VHhWMkt2WVArY1ZQTThXaGZuRnA4VXpCSWRhZyYjeEE7bTB4M1BacGVNc1EvMlVzS0w5T0t2dDN6VHE0MDNTcEhRMHVKdjNjSGlDUnUzK3hHWmVpd2VKa0hjT2JuZG42Ynhjb0Ira2JsNVd5MSYjeEE7enFRWHI1UlRiU1BKZXE2cFNRcjlXdGovQUx1a0c1SCtTdlUvcXpFejlvNDhXMzFTZFBxOVpqeDdjNUoxTCtWZHUwWDd2VUhFdmkwWSYjeEE7S2svSU5YOGN3NDl0bTk0N2U5MUoxeEo1SWZ5NTVMOHhhUDVrdDdraU43UmVZbG1SOWlqS1JUaWFOWDZNczFmYU9ITmhNZCtKamx6eCYjeEE7bEh6ZWg1enpoT3hWMkt1eFZMdk1HcXJwbWx5M05SNnRPRUFQZDI2ZmQxekkwdUR4WmlQVHE1V2kwL2paQkhwMTl6eWFRczdNN0VzeiYjeEE7RWxtUFVrOVRuVmpaN0l3QUZCTXRKOG9hdHF0SGpUMGJZLzd2bHFBUi9ranEzNnN4OCt2eDR0anZMdURxdFhxOGVQWW01ZHlmUCtWZCYjeEE7c1lxRFVIOVduMnZUSEd2K3J5citPWUE3YmxmMDdlOTFFdGVTZVNCMGp5TDVpMHJ6RlozTVppbHQ0cFFaSjBhbEl6czlWYWpWS2tqYSYjeEE7dVg1KzA4T1hES0pzRWpsNXNaNTRTaVhwR2M0NExzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXFUZWN2TmVsK1UvSytwZVl0VCYjeEE7YmpaNmJDMHJxRFF1M1NPTmY4cVJ5RVgzT0t2elk4eitZdFQ4eWVZTlExN1ZKUFZ2OVNuZTRuYmVnTG5aVnIwVkJSVkhZQ21Lc2svTCYjeEE7bjhtZlB2NWdYQUdoV0JYVHczR2JWcm1zVnBIVHI4ZENYSS9sUU1jVmUrV2YvT0QybUN4QXZmTmN4dmlOM2h0RUVTbnc0dElXYW4rcyYjeEE7TVZZZHFIL09KUDVzK1hQTU5oZmVXcml5MWRiYTZpbXRyc1NDMmVGb25EckpMRktlaWtWcEc3bkZYMUI1bjBQWE5XMXBFalFDeWpRQyYjeEE7S1ZtQVVWM2NrZGExOXMzR2kxT0xGanMvVTc3cy9WNGNHR3lmV1R1UHVUUFJ2SjJtYWZ4a2xIMXE1Ry9xT1BoQi93QWxlbjM1amFqdCYjeEE7Q2VUWWVtTGg2cnRUSmwySHBqK09xZlpnT3RkaXJzVmRpcnNWZGlyc1ZZbDV1MGZXOVUxRzNodDR3YlJFcUpDd0NoeWZpTGQrbE8yYiYjeEE7YlFhakZpZ1NUNm5kOW1hckRoeGt5UHF0RjZONUswMng0eTNQK2wzQTNxdy9kcWZaZS8wNVZxTzBaejJqNlEwNnJ0WEprMmo2WS9heSYjeEE7TE5jNnAyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdkRQK2NwZktQNWxlY05MMEhRUEtkZ2J6VFpybDVkVVpaRSYjeEE7ajR5SUZGdjZuTmwvZGdPN2Q5d085S3FwVitWLy9PSUhsclJURHFQbldaZGQxSmFNTk9qNUxZeHQ0TlhpODlQOG9LdmlweFY5QjJ0ciYjeEE7YTJsdEhhMmtLVzl0Q29TR0NKUWlJbzJDcXFnQUFlQXhWVnhWMkt2LzJRPT08L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5kZWZhdWx0PC94bXBNTTpSZW5kaXRpb25DbGFzcz4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6YzVhYzExYmEtYzJlYi00N2Q3LWIxNDMtYTg4YTE5OWMzYmMyPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmM1YWMxMWJhLWMyZWItNDdkNy1iMTQzLWE4OGExOTljM2JjMjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDoxYzQzNTQ3OC05ZDM5LTQ3Y2QtYWIyZi1mZWM0OWRlZGFhZGU8L3N0UmVmOmluc3RhbmNlSUQ+CiAgICAgICAgICAgIDxzdFJlZjpkb2N1bWVudElEPnhtcC5kaWQ6MWM0MzU0NzgtOWQzOS00N2NkLWFiMmYtZmVjNDlkZWRhYWRlPC9zdFJlZjpkb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3N0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOnJlbmRpdGlvbkNsYXNzPmRlZmF1bHQ8L3N0UmVmOnJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8L3htcE1NOkRlcml2ZWRGcm9tPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTllNjRlZDMtYTUzNC00OTM2LThhMDUtYjE1MzZmNmM5ZTliPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIyLTAzLTI4VDExOjMyOjA0LTA0OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNi4xIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjNWFjMTFiYS1jMmViLTQ3ZDctYjE0My1hODhhMTk5YzNiYzI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjMtMDItMDhUMTI6MzY6MjQtMDU6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIElsbHVzdHJhdG9yIDI3LjIgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPGlsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPldlYjwvaWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpDcmVhdG9yU3ViVG9vbD5BZG9iZSBJbGx1c3RyYXRvcjwvaWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+CiAgICAgICAgIDxwZGY6UHJvZHVjZXI+QWRvYmUgUERGIGxpYnJhcnkgMTcuMDA8L3BkZjpQcm9kdWNlcj4KICAgICAgICAgPHBkZng6Q3JlYXRvclZlcnNpb24+MjEuMC4wPC9wZGZ4OkNyZWF0b3JWZXJzaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+/+AAEEpGSUYAAQIBAJYAlgAA/+0ALFBob3Rvc2hvcCAzLjAAOEJJTQPtAAAAAAAQAJYAAAABAAEAlgAAAAEAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/90ABAAZ/+4ADkFkb2JlAGTAAAAAAf/AABEIAMAAwQMAEQABEQECEQH/xAGiAAEBAAIBBAMAAAAAAAAAAAAKBwAJCAECAwQFBgsBAAMBAAIBBQAAAAAAAAAAAAAICQYCBwQBAwUKCxAAAQMBAwIDBQONAAAAAAAAAgABAwQFBgcREggTFAkVFiFhIkPBChcYGRojJCUmJygpKjEyMzQ1Njc4OTpBQkRFRkdISUpRUlNUVVZXWFlaYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6EQABAwECBAIHCX4HAAAAAAABAAIDEQQGBQcSIRMiCDEyQVFSYRUWIzNCcZGSoQkKFBcYGRokJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpiY2RlZmdoaWpyc3R1dnd4eXqBgoOEhYaHiImKk5SVlpeYmZqio6SlpqeoqaqxsrO0tba3uLm6wcLDxMXGx8jJytHS09TV1tfY2drh4uPk5ebn6Onq8PHy8/T19vf4+fr/2gAMAwAAARECEQA/AH8IQsQhYhCxCFiELh3outFdY2hwuxDQ2bBDbOJt5qOc7q2JOMhUFn0wmVPJeW3iBwdrMpJ2cYoBIZayYXAXABllj7vxLYnbdjRws60WpzoLqWR4FolFMt7qZQghrXcRwzueQWxNOUcpxYx+vuldWa8VpL5CWYNiIy3DVk6vIbtSNWdU0Z85oCfLEfFTEDFu35ry4h3ptW81pmc70w11Sb0FlQ1BtJJRWJZgONn2NQZ4s+k00ccbk2c7OTu70ouvdC7dzMGtwVdmxw2SyADKyGjLkIFA6WQ6eV9N1Pc40zCgoB39g7BdgwTZxZsHxMjizVoM7iNe52rcdqSSp6tKvMIoqxh7jvjFhS8Q4fYi3ou3SRHpg2RT2idXd95NVBWPJJd20mrbBmM6gXcnOnJzEzEsombFjry4vLkXxqbyYLslqmIpojmBs1MnJoJmZMwAGqo8UIaRQtaR8RhHAmCcKZ7fZ4pHndRFHaqmtijtVtdhrwKc8sOdalYi2MFPRYm3FsC+0AZkR2xYFXLdK280qiMpauqpnp7XsS0JoadzYIYYbPA3YMpjkIiXa9Goi3YtznWi6eELTYJDUiKZotEWsmjWuyo5WAuoS5zpiNNRpzAYTCOLXB8pL8Gzvhdsrhlt1WqBq1wz68l2vzaoDnthxo/dDXiCFPDVXvmw/tabME7Lv/RvY0UZFUR0uc94KeWvuwMOmSiTPJWxm0LuZgDBJmLpejUcMad2nOfDYm4SsTa7iWN2ik6Uu3JcGT1oCKCJwytKHOLm5WGwhci8FgJLYhPEN1RHK11dZNH7w058wJqK8w7Ltay7coKa1rFtKz7YsutB5KO0rLrKe0KCrjEyjKSmrKSSannAZAIXcSdmJnbf7LpG12O14PtL7Hb4pILXGaOZI1zHtNK0c1wDgaEHOBmKykkUkLzFM1zJBqwQQRu4OdfILxlwWIQsQhYhCxCF8Pbt4bAuvZlTbd5rcse7tjUQFLWWvbtpUVkWZSRgBSHJU19oTU9JAARgRO5mzMzO+/mXm4PwbhHC9rZYME2ee1W6Q0bHEx0kjiTQBrGBziakCgBzlcmtc85LAS7YDOuE+J+tHdDBhxJNRUN6LRxJtaE54ZKLDqz47Xoo5IiaOMyvHaNVZF2qqlmky5JKOrq3zBcs12cM/vu6WovY2r0NbPaLJFgqxuAIdbXmNxBzkaAxsk7XAa6SOPOQK5nZPmR4OtTxUjJG1+Rq1rwxN1rVirbZ1dFhZcS61xbPk0+GG1rwSVN8LyiIzRPS1tKG8ou9QTyQxk0sE1JaIDpmQTdwYyZi6eoZ3PsAZPe/CNswhaRQmOENs0GqOU125kzwCRkubJCTk1LaOyR5bcGxtzyOJO0zD+N4WvLEjRAY14uFVNiNidfC9FHVz6plsWrteemu0MzTNUCdNdazno7uUWZMIkLQ0sbDmDkZmEWZmLrYt7h3LDDdfBNhsk7G5IlbGHT0pk0daH5U7qioOVIa1NdWa++2GOPMxoB33eVHFuEL77h3iliJhLb9PebDe+Ft3QtmnnppynsmrIKatekIyggtezJmmsu26FnlNipqyGenMTISB2J2fO3nujdm+eDnYJvRYrPbbC5rhSRtXNyqVMcgpJE/MKPicx4IBDgQCPacxrxkuFQkg6CHRl0Wifu7aVh3np7KsLFq6cDVdt2RZhSw2fb1gHPFTwXosOkqp6iqgggqqiOmrodNmannOI89hqI4wlzj9xGT4pcJxYQwS6a0XMtjsmKSShfDMAXGzyuaGtJLWufE7JblsDxkkxOc74yeDQjUawVzxS7rx1//0H8IQsQhYhCxCFiEIrGiHxNrsYMZb/X7qqvVVHaNv1lJd9hd9IprrWTIVm3cpoAznjDJZNNEcpAwjLUHJK7MUhZa/wCLO6dnuTcbBt3oWZE8Vma6bYutEgy53E6vcxzg0GpawNZWjQmlu/gtmCMDWewsFHtjBftXuzvO9iQNgABrlFVvF8xRdHZC4kVXa65Be27VLsdeq9py8b7iuYXsOX3O5OJuIWGtcVpXAvreW6FXJspysG2K2z4awcsb6XX0kEo0loQuUQvmThIDuAvkys2T4LD11Ls3qs4st47BZLbCNVo0TXlurzscRlMOc52kHOc+c1+Lt1gsVvZkWyKOVuuymg03Y6sdqouc2GmtO8b7pDBR3+si7mKNmxA4nU1MQ3TvNI7SM8Ta97FpZbGcI4XcHc7LklN2EikcmPPX29Wom3AwyXT3cmtWCLU46y08BEAzZ9w5XCWpOfNaA0ZwG0pk4jCNxcFTkusbn2d+wGnbvDjlePgbTVU5lXU1qfgdaojHey6WIF0at88nkgo7JvHZIiMMRML1lJaVFajzSTkYizUGZmiJObOTiPRuGdRCxgWM5WBrbg22w7Aukgk1Z3S5j46AUJOi1qSA00qcnabj4ShNYJIpG7uWneCCPHvu/dX1ploXG3/at8++PrPjhfAjUU8bh5M2DwJb8qvAddPC7dWI97BTe+WtXcFrIaohubce/wBfCqiA3hnrwse6tjVUj0oywBHWS11sWvGGqi0mUjs8XDNIwGVs1i1OA9Q6v5bcl+HMIYNsMLiKhhktErRlUNWhkUZOTpmgTGtQHFhrTlHda2nPO+Ng2lXH0AG+7wuC2JmtPtETfIKuhugF18L7Km0+OKSwLNe2byalqIYoziqbdvCVdSNPGQm8U9HQ0M0embIs8RNmDupqJmLLAbmWjDZteF7Y2hImfoUGUCSC2KHIdQ5g5kssrXU1VCWnz48AWKHPJlSO2uYbwPakrgRfPEC/eIdeFqX8vlei+VoRaa0FXee3rTtyalGdweWKkK0qqo1JAWlC2lxZgMwCzNkFmZjMBXbu9dmzmyXdsNksNmNKtghjiDqVoXZDW5RznO6pzk1qTXydBihGTE1rRtAAvpJMvngvHeF4nZcwvGcF4nXML2HBdjr1XtEUXR2XquBGvCuGhsxVtHBfHDDjECitE7Oo7LvNZtLeV2zHhrLn2rUxWdeqgqY5hOAwnsSomcCIXeCcY5gySRgQ4DGnc+y37uBhS7doiEs81ke6DV1baY2l9ne0ihqJWtqARlsLmOq1zgfZlZlxlu0S/wBROXwy/9F/CELEIWIQsQhYhCIBatmVVjWpaVj1rANbZVfWWbVjGbSRtVUNRJS1DRyNkYwaWJ8j8TZWxsdqht1kittnroE0bXtqKHJe0OFRrjQ6pN7E9s0TZmaw9oI3YioXoZF5C9wjYrtyL1quBbsF2uy5Be24Lxuy5Bey4LxEuQXjvC8JL3AvFevAa9wLw5F6xr3WrwZV6pr3Wr46UL1TXvNXx0oXqmy94L4+UL1yZe4CvAkC8BMvdBXiPavC7LmF4rgvG7LkF7DgvG7LkvZI3hduReq9sii+UsKxq+8dt2Pd6yodUWpb1q2fY1mwbNtOr7Uq4aGjiyixE2mVE4tsmd9mvEwhbrPguwT4StjsmyWeF8rzsGRtL3HtTQSuJoASdUmtKDa+AX//0n8IQsQhYhCxCFiEI42j4wukw40RN6K+nhMLExGAL/2XLmk4PWWxNNHeWnOZoooSqQvJTVM7xjlKOnqYXN3cmIqg6jne5t6MWNks8jgbfgsmxyDX5MQBgIFScnQHMZU0Bex9KAUDI3AwmMJ3cijcRo9m3CduzQMg02GQWiuvIdTVUHC3Iu96ra5K6ZEVXEtXY7LkCvbc1eN2XIFey5q8RMuYK8Z7V4SZe4F4jwvXJl7gK8KRq9Y2XuheBKF6xsvdaV4ErV6psveaV8dK1esTL3QV4EjV6xMvdBXgyNXgJl7gK8N7V4SZcwV4r2rxuy5gr2HNXjdl6gr2SF25FyqvbLdgucms7MKyxM0UNy6mppzlsXDgKnEm1jF4waOe70lPHdrIczELnsXVtBI4CxSFFHI45rC5gv2pN3vF1MUlviicG27ChbYYxnNRMHGfMNdwDMlFSQ0Oc2tahrvDtjhHCdic38dqSh1JJfCr/9N/CELEIWIQsQhYhC1s60xwukvXhDYeI1n0oS2jhnbeS05M8glG6t6jpbMriCMcuqzp7egs0mFxfSoSmkZxFjYmm1FO9zcD31tF17S8tsuFrPpBSo4CLOHSMqd0h0JnFa6ZwY2hOTTs3FdhQWXDMmDJTSO1R6XYaJHVw3arC/dzkjPmpofzf0yKh9UwOQumaiq9CxdjiuQK9tzF43FcgV47mLwkK5grxnsXhIV7gK8SRi9cmXugrwZGr1jZe60rwZGr1TZe60r4+Vq9Y2XutK+PlavWNl7wK8CRq9YmXuArwZGrwEy9wFeG9q8TsvcBXivavE7LkCvYc1djsuVV7Jaux2XrVe2WrfprJTCwrEw3v9i1X05hV35t+nuzYRyvE4vd+6QSHWVlLmM5gFo2/ak0ErGWVys4XYRbbRzl1M294t96MHXMszgYcH2Yzy0rudaCA1rq5iWQxte2g1U5qSczfhMJPrIIhrhXtZ+56Fbc0ly+NX//1H8IQsQhYhCxCFiEL6lf259nYg3JvZce1mDXdey71rWBUyHAFS9MNp0U1KFbFCZAz1NBLIM0TsQEMsYkJCTM7fM3cw3artYfsd4LFXgJsdpjmaAcnK0NwcWE59K8AtdmILSQQQSD5mDrbLg23w4Qh3Nhla8Z6VySDSuwOqOrzHVHVIn1s2PXWDbFq2FacWkWjYtpV1k2hDs30mts6qlo6uLZsLvpc8JNs2bfysdYbdZ8I2KHCFlOVZZ4mSMOxY9oc09rBCciB8dpgZaIs8UjA4HYhwqDvBXxrivKqvdMa7HFcgV7To14yFcwV472LwkK5grxXsXrkK9wFeHIxeuYr3QV4UjF6xivdBXx8jF6xivdaV4ErF6piveaV8fKxesTL3QV8fIxeuQr3AV4MjF4CFe4CvEexeF2XMFeK5q8TiuYK9hzF2OK5VXsuYuscMs8scMMZzTTGEUUUQFJLLJITBHHGAM5GZk7MzMzu7uh0jY2GSQhrGipJzAAask64DXr2nNS+NDxhkGDmCWGmG2l6XV3ZutQxWyLSQyg95LSeS2b0SRSU+WEoJbx2jVFHmue2CbbRvlJ4o4zL2Ovxf7Ct6a1htdreYsxG4DKRWcEOz1EDIwagZwczdUMhaJNFmdJric27a7fFZlhl7K//9V/CELEIWIQsQhYhCxCEanRoXcortaJ/F2zrPHJBU29Z94JNssG8be27tjXqtN8jO7PltK2ZXy8Vb/4mqo4isKWjCuKXAtptO5jLO+EdYWeaWzs8cibuybjF/LJbbnWGeTWhG5naopHxt8dYFxezNou28pbAxLscFyDl7Tol4iBcwV4z414CFe4CvEkjXgMV7gK8KSNesYr3QV4Mka9UxXutK+PljXrGK95pXx8sa9UxXugr4+SNesYr3QV4EjF6xCvdBXgSMXhIV7gK8R7F4XFcwV4zmLxuK5Ar2HMXjcVyBXsujXKnQUYWFizolcM7Bnpznsaw7YG+94nF42jCyLoZtsBDVDIxEdLatrQUtCbAznkqtk47Mx6gx83vFzcVeFcIxuDbdaIOAWHV1Mlp3CJbTdUcZklFc24evzNPxuEX8A9ke7dRFBu5zb4KntSVgo9rGLEIX//1n8IQsQhYhCxCFiELEIR8NaEV1NX6Jq89PA5vLY937oWdW5wOIjUyWFS2sDRvt4Go7UifLyc7txJUp1Gqzy2fFRZJZKZE9ptL2590iV0efYHKjdm2FDr02uKWySNuTBK8DJkllc3dg8s9C0rhG8a79Dl2O6FeNwXIOXsOhXhIFzDl4r4l65AvdDl4UkS9cgXuBy8KSJesYL3WlfHyx/x/H8e09UwXvNK+Plj/j+P49p6pivdaV8fLGvWMV7zSvj5Y16pCvdBXx8ka9chXugrwZI14CFe4CvEfGvE4rmCvFdGvG4rkCvZdGvG4rlVeyY1u11klhicFBijjBW02a1dNQYeXeqCjpmIoqNoLw3pYTKMq1oJJp7KZnAghM4jYmkMG0pCdTOvY2S0YIuTA6pja+2zNq7VurDZ9fk1AFoJqC4BzSMlrjl5O8UoDo7MNXTKPoB7X+NXucSLLMrEIX//138IQsQhYhCxCFiELEIRndFBeob86IDFe8Uc2qKeS9tbZFHUMMIjPZ92I4bsWdNHpMcQvDJQ2PG4O7Z5A7Obubk71YxS4HN38W+BsGObkyCxNkcM+Z85M7wak5w+RwNMwNQ2jaAPZcTA7sF3NwdY3DJk4BmvcM+Z0tZXA1rnDnkHXV1VBQCBvGuxg5aZ0C8JRrmHLxnwrwkC9wOXhvhXrkC90OXhSRL1jBe6HLwJIl6pgvda5fHyxfx/H8e09UxXvNK+OljXqmC91pXx0sa9UxXvNK+PljXrGC91rl8fJGvWIF7oK8GSNeEhXuArxHxrwuC5hy8Z0a8bhtFyDl7Dol2OC5ZS9oxJP+gCuvT3W0KGFkcWYVTbtLbl6LQmjKdxnqLbvDalRTZQmkMYjpbKGmpyaNhAihcsmUnd5LakfheTC+OPC7n1EVnfFAwGmYRQxtdnAFQ6TLeK1IDqVoAB1phx5fhSUa5pAHagPa1K5kro5fErEIX/0H8IQsQhYhCxCFiEKEaJbE0MJsFr73sjnOG2DsuSwrs6TO1PVPeO32KzbMqaY3ICI7JKcq4xF2N4aU812fI7dh4q7qOvlfvB+BnNDrEJhLPUZTdAh08jXbSSgiBObKkbXMtti7u269V77HgogGy6Jok1RUaFFp3g9Z0EYJzZT21zI1hR7RVQD0/z4F4SjXMOXiSQLwFGvcDl4kkK9c417ocvCkhXrEC90OXgSRL1jBe6HL4+WJeqYL3WuXx8sS9UwXvNcvjZYl6hgvea5fHSxL1TBe80r46WNesYr3QV8fJGvXIF7ocvBkjXrkC9wFeG+NeJxXMFeM6NeNwXIFey6NduYvXKXAxJWehFls+bQyYHnZlGdDTDh3d+GSGSY5yO0KelanterY5DkIQtC1YpqgQysMYyMLMLCzNHrHSy0x417wNtbxJKcJzEEACjHOrG2gAzsjLWE6sltSSSSeoMMtc3CtoDzU6Kd41w7UKBci11gvjFiEL/0X8IQsQhYhCxCFiELSJo+Matj3EMMNrGnzrtYa1dTTV0kUudDal8JYo4rVkMGYcmw9kOgFibOGdqjI7iTJ+tRzuHt3Lsm9NubTCuFWNcwEZ47MCTGK9Js0xpmLNC17SncxD3FOA7ubeW3NphLCbGuYCM7LOCTH3+zSmmYtMevBWv8o0yIcu8HwLwFGvcDl4ckK9c417gcvCkhXrEG0Xuhy8GSJesYL3WuXx8kK9UwXvNcvjpYl6hgvea5fHSxL1TBe81y+NliXqGC95pXxssa9QwXvNcvjZY16xgvdBXx8kf8fx/HtPWIV7oK8GSNeAhXuArw3xrxOK5grxnRrxuC5VXsmNduYvWq4aGksazxve169CxcenkqAqK259oXkufXEB0udG9DbFRadl08kNKIanOC79sUYZJGaWQWaUnLTGIpW6kxgXbHxvYQla0tgt0cFpZrWfLibHIQXa0DNHKat0oNWCmTQdQ3rs3APhqSgo2QNeNXrxQ6vo4Haa7XZubq6CWcWIQv//SfwhCxCFiELEIUM0RWL9Jgthbb969Oia8FTCdi3Oo5AaV6u81oQyjQyFCQlHJS2VGB1lQJuAnDTlGxZ5gxdg4sblTX7vdZsD5J2zWO0W0uBpkwMIyxXVh0hIiYRUhzw6mS1xHYOLG5M9/L3WfA4ads1h0W0uGbJgYRliurDpCREwipDnhxGS1xB0amSeqnmqaqaWpqamWSeoqJ5DmnnnmN5JZppZHKSWWWQnIiJ3InfK+zVO4mxwxtiia1sTWgNaAAAAKAADMABmAGYBUr4BY4oxFE0NiaAAAKAACgAAzAAZgBmAXpFGvfDl4z4V4CjXuBy8KSFesUa90OXgyQr1jjXutcvAlhXqmC95rl8dLEvVMF7zXL42WJeoYL3muXxssS9QwXvNcvjJYl6Zgvfa5fGyxL1TBe61y+NliXqmK95pXx0ka9YxXugrwJI165CvcBXhvjXicVzBXiujXjcVzqvZMa7c1etVw0NbdNZSYilRXoxJwqrawBprcsmhvrYVJMUcbNaVizhZNuDSO+ac9VXWfaVKZx5SdoqFzFmYZHdLdTEuwJ8EYKvhBGTLZ5n2WVwqdJKDJFla4NY9kgBzDKlAJJLQOv7+2GsENvaM7XFjjtHZ212gIPa3bst3KQZdYrEIX/9N/CELEIWIQsQhaOdG/i5ucbFWW7Fl1WnXYw51VYdLpZ5YKy8MhhsR17ZHyFpVRAFGD7NslK5DspHy0AxA3L27Fzxha1sycLYUyZXVGdsIB0Bna2kyHrYAdZCohqPlwzde5bcMW1mThfCuTM6oztgodAZ2tpMp19ZADnaKcKiBd8By7yfEvAUa9wOXiPhXgIF7gcvDkhXrGC91rl4EsK9YwXutcvAliXqGC95rl8bLEvUMF77XL4yWJeoYbRe81y+MmiXpyAvfa5fFzRL0zBe80r4yWNeoYr32lfGSxr1TFe60r46WNesQr3gV8fJGvXIV7gK8J7F4XFcwV4rmLxuK5gr2HMXbmr1quGQrpoZsRCwpx4wwvsdYFBZ1BemgoLfqpjjGniuzbzlYV45Z9O3cuFPY1ozSs5ZGAwEmISFiHr3GtdgXxxd4WwC1hktUlje+FoBqZ4dxYAKZ6mVjW5tWCRQgkH4nDlg20MEz2UNrIYyWjo5umb48AErJR6S+LEIX/1H8IQsQhYhC46aKLF8sHcKLXtizakIb2W8Ww5dFsgHJBaldFK9Ra7RG0jZlh2fHLUCRgcL1Iwxm2SVsvZ2KO5QvvfGGxWppdgazjR7TqwDGwikdRTc15awgEOyC9zc7c3bWJa4PAwb8QYPtbC7AdlHARatWAY2EZMVRTPNIWxkAhwjMj252ZtAMrnKZyymUkkhFJJJITmchm7kZmZZSIiJ8ru75XdUgYGsaGMADQKADMABrhtFUHQWsaGMADAKADMABqgBsF4CBe4HL2HxLwkC9wOXiviXrkC9wOXhyRL1zBe6HLwJIl6pgvda5fHyxL1DBe81y+NliXqSAvfa5fFzRL05AXvtcvi5ol6UgL32lfFzRr05BXvtK+KmjXpmK95pXxc0a9QxXvNK+NlYvVIV7wK+PkYvXIV7oK8F7F4SZcwV4j2rxOK5gr2HNXbkXrVe0WrpkXrVemSlMaE7EiTFXQ94Y3tq6jVNr64AsC35DOnKpO3LrTzXdtCrq4qYzCnmtU7NatEHYH0qpAswWJmaRGOS6zbn4y8LYGhbk2LgJM0IAdkiK0ATMa0uALhGH6ETn0zHDKJBJXu8lg2zsN2izNFI8vKbq6ZL9MAK6ulcndwVyKXWK+DX//1X8IQsQhYhC0U6LzGPc7OKFRS2ZNn3SuNq27tgZkumU9dUtVbzu349lkbXrUU8cYOLuJ01LCWyJyy0JxK3H25t0mzWttMM4QyZpqihY3J3ChPWtrnONc4fI8aoBU9xBYutuHchk9tbTD2E8i0T1FHMbk7gwHrU1znGucSSSDVAU4pOK7iBXdrmLxuK5Ar2HRrwkC5grxnxrwkC9wOXiSRL1jBe61y8CSJeqYL3WuXx8sS9Qw2i99rl8bNEvTMF7zSvi5ol6cgL32lfFTRr0pBXkNK+JmjXpSCvfaV8TNGvSkFe+0r4qZi9QxXvtK+MlYvUNl7zSvjZWr1yZe4CvBkavATL3AV4b2rxOy5grx3NXY7LkvaLdiu3IvVcaFbnNZUYjyS0OJmEtZUZzUc1Df+wKcjp3IYqtoLAvO4iRjWaTHNDZbswCcIHKblpZm2mItqYV12stGCr5wNzyNfY5jR2rbWaDXZNSDPWpDiGtplBpyOqcY+D8l9nwm0asGNxz67TM2mz7XMNWBm3BpJV1ev//WfwhCxCFxh0WmLW5qsJ7T13VOkXpvhp12ru6WebUU2qoX17WvHkdjDXXZxFmG3AFTLDl3+u2cTNzNvhfKLgJZlYIsVJ5qjM7JO4cZ124j6VGvY1+wXd2IG4G37v7DwFsysB4OpabRUaV2SdwojrjoslKtOrjbJsFoiyKhtVUktXbkXKq4Fi7HFeoK9tzF4yFcgV47414SFe4CvFkjXrGC91pXgyxr1TBe60r46WNeqYL3mlfGzRr0pBXvtK+KmjXpSDv9eQ0r4qaNelIK99pXxE0a9GQV5DSviJ2L0ZGXkNK+ImavSNl77SviZmr1DZe81fGyhesTL3QvAkC8BMvcBXhvC8TsuYXjOC7HZcl7RC7ci9argRsFyh0GeI54Y6I7Da15KjU9lW9bMdybezjp4acrLveQWPHNWz1JxR09FZdrT0tdIeeLiNLxU2UC6kx53XbezFfhWxNblWyzwG1Q5nE6JZtxSGhoJLpIxJE0UNTJrjQjN3rsAwhgG0RAVlYzRG6utWabMBqyQC0bv2sJ7UmUvK//138IQsQhaEdFFi1udzFi2bToKnT7rXfy3auppZ51PPZtnzS6ptePNdgk192ictQBuIyamKGMuBbZKLYpLmbcu5sFktLMnC9p3HtFRnD3gZMZ140JgawipGWHuGtFVbxG3A4F9cGzWG1syMO2vhZtVRpmySAZMR140GMNjLaluiCR7dbK46rs5dwrpkXrVemSumRetVxLV2OK5Ar2nMXhIVzBXiyMXrkK9wFeFIxesYr3mlfHyxr1DFe80r42aNenIK99pXxU0a9GQV77SviZo16MgryGlfDzxr0JBXksK+GnYvQlZeQwr4W0NXoSLyGr4eYL0zXvtXxcoXrEvdC8CReAl7gXhvXidcwvHcux1yXska5dq9VwXzd2CtULy3eOwYwmtwLcskrGhkeFo5bVGvp3s6OR55IoGA6tgZ88hDI+zdmyu3gYWFjdgq0twiS3B5s8mikVqI8h2WRQE1Da6oE7AEr2LQIjZ5BNmhyHZXWNDXfEv9ROSsr/0H8IQuH+jNxglw1wyOwLFq9T3qv/AKqsSiOJx1RQWEMIjeG0onfKUUr09QFLEbZphJU6ZG7FHlbuzEXcll6r2DCNuZlYHwbkyuB1l8tdwWHYjKaZHDOCGZLgQ6hYjUbsXbL632GFsIx5eAcEZEzwdZfPXhXjOxGU0yuaatc2PIeC19DpHT8KmixCFiF6rEL0XR2XqvQiq8RMuYK8d7V4CZe4CvDkavXMV7rSvAlYvUMV7zSvjpWL05BXvNK+LmYvSkHf68hpXxM8a62dY1rW9aNJY9hWXaNtWvaErU9BZVk0VTaNo1s7s5NBR0NHFNU1MziLuwgJFkZelqt1jwdZX27CE0UFijbV8kjmsYwbFz3ENaNqSAs9hKey2GzvtdtkjhssYq573BjGjYuc4hoG1JC5jXC1nxjzfEQqrw09hYd2eWe7PeO0GrLXlDSs6I4LIsNrQePPndgIaqalkEWIs18gsfR94tSUxd4EJhwY60YTtIpuQzJjBrnBklyK0GcGNsgJIFRnLejLwY6bmYOJisDprdP0ibksGfPV8mTXNnqxrwcwrqyOSFk6y4sAYC1/4v2vWVR6WQ657p0VmQQbYbTYi1bbVrSVWSTgE93O2d/hl391dbNS5wiZBtm4EgZEK7m2h0hOfMdLFGG5tWNNn3Uus7Zj1tUr+FTB0bI8+tylxOwOlYwDNrs+7ryWjrLO6M1JKFl4uXjo64szSKmvuxZlpUkeSQHl02ip7TsqabPhYhHJUR5pOxPnMziXGy6l3hpkzXWvAtlks+erWTyMccxpRzo5AKGhNWGoqM1aj45uOm3ueDNYITHrw2RzTqtiWuAz9GnYZtWOPd/9ZkYx2CEtTcS8t1cQaYNNzKOQ5Lo27PmQyyx5lJac1ZYY6cUbR7btIc2Qxy7YzzDsq7epX3Hwi4RXhstswbKaVcKWmIZwDV0YbLmrlZoDUA7qo13zVhxsYEtdG4Qimszzr9zGDXatoD9ruXqgdfQHghiBhViRhbXtZuIVyrw3TqJDKOmltazpoaCvIAAzey7VBpLLtUIxNs4qaaURLKzuzs7Mw9274XWvdZ+Aq7Vvs1sjAq4RvBezPQaJGaSRk0zB7WkjOMxBOzsWF8GYWj0XBs8czRq8kio6ybrTe2gFOHWoC95y8TrmF47l2uuS9py7XZC4ELmfoEcGK/FjHm7dqS0VTJdLDSvs6+l5LQCMCpIayzp5Ky6tlVEkrtGR2zbdAO7nIRy00E7sOaBEPRepDX6s1zcXdqsbJGDDOFY32WBhJyi14DbRI0DPSKJ502YNkfHnq4A4++mFmYMwLJGCOAq0NMbBr6HM9w6xadXriW7EVSUpaLoBf//RfnPPDTQzVNTNFT09PFJPUVE8gRQwQxA8ks00sjjHFFFGLkRE7MLNldc445JZGxRNLpXEAACpJOYAAZyScwA1a5xRSzythha58z3BrWtBLnOJoAAM5JOYAZyVoD0RuLRYxYpW1eWlmlO7lDm2HdOKQJYs2wrPOXSqt4JRCWGW1qqSWqITFjDTmAuAGZqPYr7mC5F0YMFTNAwpJuLaCKHcV4FW1FQRG0NjBBIOSXDWs9Z8TVwRi5uNZsDWhrRhiXce1EEHceQCrMoVBETQ2IEEtOQXDWjWFLsJdrLHZeq9CFiF6gUXR0Li5dELiux2XIL23BeEmXuArxXheAmXuArwpGr1TFe60r4+Vi8MdNPVTw0tLDLUVNTLHBT08EZzTzzzG0cUMMUbFJLLLITCIizuTvkZe46WOGN0srg2JoJc4kAAAVJJOYADOScwC+JtRjhjdLK5rYmtJc4kAAAVJJOYADOScwC544LaAS/N9SoLcxRnqLgXXnAKgrGjaPY4rYJAzwB6Opp6iku4ZZzZ2rAOpidnE6Zn2bLvfvUjbv4BEmD7otbhLCzSW6Ka8ArCDQnKaQ6YbDQiGOGcS7FZL+6kFd7A2iYPuoG4Rwo0luiZ+AVpBznKBDptpoZDHDOJTr9reGWD+HWD9jvYtwLt0ljRTZpV9cRS1tsWrMwizzWla1Wc1bU5SHOGLPGCJ3doowHZMnd7L7XnvtbuA68dqfO9usMzNijGwZG0BrdgXUL3U07nHOlEvNe+8N77ZwG4ftLpnjWW5mxsGwZG2jRsCaFzt1Occ6piyizSxCFiELEIXoWpZVl23QVNlW1ZtBa9l1gNHWWbalHT19BVxiYyDHU0dXHNTzg0gCTMQuzEzPv9l5FktlrsFpZbLBLJBa4zVr43OY9ppSrXNIcDQkZiMxXuRSywSCWBzmSt1TmkgjdiM4XCvFLWfOh5xF0yssexKzDO2zmmnKuuNPHSWZUFLlcYKm7NdFW2HBRwkTkIUMVCbPkbPzGYW74ujqSmMy7FILdaI8K2ANAyLWC6QU17Z2FspcdUTK6Ua/JyiStngy/94cH6SZ4tMNKUlFXDah4o4nrIu3auda6cTdZnY33Sz6q4NpWBilZo7c0ksN07yCzaaUkslkW5XFZJQjGI5GhtOaczJxaLZM5M7dPUrLgYZpDeOK04ItR17gbRBrqASRM0Sta61A1gAqX5yBvsHYx8C2vSW5slmk2J07N7NGVXd2AbXYcULR0M+iIsyrloqjA7FaWaDMzzs+4d5bWpC0yIJR0m0LKs2soKjIEjMWlylmFlEshC7N3HZsa2LK1QC0RXgwOI3VoH2uCN2YkZ2SPa8arNVoqKEVBBOkbeLAEjA9ttstDsZWNO8EgjtYXJTCLWcuOd+7Qppr+UkOFd2H0w56615KG1bfnGGdoSgobuWfaDzxTSuxOJVklKGYOe2ezgx9V311J/F9d6zOZd17sMYWzAMjD44RUVq+d7KEDNURNkNTknJIcW5zCt/wDA1ijIsRNptOuDataN3eRTeoOwzZ6bvcGcGbkYF3Is+41xrP1PRU+SotO06hozte8VrnGAVVtWzVAAaorKjMZhFmGKCIRiiEIwEWQS/N+cP4wsPyXgvBJlTu0scbaiOGMElsUTSTktbXOc7nOJe8uc4k9OYWwtbMM2x1ttjqvOYAay1uua0a4DeSc5qSSquscvjF//0mP6OHFrYHw0G5FlVOl3ixH1TZs2lHklo7p0zR6/5izc7M166dHQCJiwywz1Di+dFsu+sQFzNvBeo4ftjK4MwXkvFRmdaHV0EbXQ6OlJBq1zY6ij0zOowXA2899Tee3srgfA2TIKjM+1OroAGx0KjpyWmrXshDhR+fTAnqVI1iF6rEIXVkLk1Y6F6OXRC4ro69QuLgvETLmF47wvCTL3AV4sjVyqwY0HmJ+LOpLYr6XYIuXLLG527b0E0doWhS7YKQ7v2G4hV1+WORnCeZ6ajNsuZMZCQLp6/WO66VzcuxWZ+2hh0A0ihILGOz0E0usszg1a3LkGbKY0EOXQOMXHxcy5BkwfZX7aN4WtNIYSCyN2egnmztZnBBYzRJRmyo2hwctseD+hywuwVh026ti6svDJE0VXe23NJtC8MwuBhLFS1OkxQ2TSzMbscVJHCMrMOm6Y4i7JvfbGhe6/kmRhefIwYDVtmiqyEZ8xc2pMjhTM6QuLc+RkgkFHL9Y1L4YwJcnDM+h4MDqts0NWQjPUFzakyOFMzpHPLc+RkgkG7rrxdcLEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiEL//T3wY9Yj1GKmKt7b2FOU1mSWjNZl3AfZDBduy5ZKWyBAGOQIyqacdUSsJELzzm7O+VUuxdXXjufc+xYGDQ21iIST7WeQB0megJyTpG1AOQ1o1yrziqubFcS4eD8ABgbbRCJLQdmtEoDpamgJDXHQ2kgHIY0EZlH1tl2GsQhYhC6shc2rHQh2qXRC4LHXqg5wrjhJoc8T8ZjGpuxY4Ud3hnKnqr121IVDYcJxuzTR08jRy1VpzxZchBTRSuBZGNwy5V1/fPGfdO4rTFhacvwnk1bZ4hlykHVEiobGDrjI5tRrOVql1TjBxv3IxctMOG7QZMLlmU2ywgPmIOslwqGxtOudI5tRrOVqltYwY0IOGOFGpLYr6XY2vnFFG525b0EMln2fU7YKQ7v2G4nSUGSSNnCaZ6msDZ5kwCRAk9v1jrvZfHLsNnfwAYCJNIoSQ97c9BNLmc/MTVrciM5spjiAUh2MbH/fS/eiYPsr9s27rnGkMBIkkbnAE82Zz8xILGaHE7NlRuLQ5cr104uiliELEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIX/1NwCrIreLEIWIQsQhdWQubVjoXo4a9UTDjCe/wBixaz2Rca71Va8sWaVbWkUdHZNmROQs8to2pVHFR0+QSzhjznmlZnaMDLZPmL0Xyu5c6x8Bt4LSyFh1hmd0kh2DI21cdgXUDW10zmjOsbfG/107hWDbQvRbI7Ox2sMzvlkOwjiaC92wLqBjagvc0Z1tGwe0DFxbnagtrEeeK/t44dIqCsnMOO5lFVBmmUWopowqbwxRys7Z1W0cEwcB0rZciUe++pBXhw5olguu04OwW6rdErW1Oac1coEthJGekdXtOsynVpGcYmpR3pvFouDbmsdgrAzspolqDbHtOauWCW2ckZ6RFz2HWZzq1zogggpYIaamhip6enijgp6eCMIoIIIgaOKGGKNhjiiijFhERZmFmyMl9kkklkdLK4ulcSSSSSSTUkk5ySc5JzkpXJZZJ5HTTOc+Z7i5znEkuJNSSTnJJzknOSvKuC4LEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIWIQsQhf/9XfloicKqvCLFS8V3dS6RYNfVTW7dGYMrwTXbtKomkoqeMiM5HlsiRjopc/NIpKdzZswwcqSYsr4Q30uhZcJ5eVhGNgitIOrE7GgOccwFJBSVtKgNeG1ymuArbifv3Z8YNxLHhjRMrCsUbYLWDrQtEbWh7jmApKKTNpUBsgaTlNcBDV2Auz1iELEIX2a6Vzr037tqG71z7CtG8NsVAFKNDZsBTHHABxxyVVTJtmCjo4jlFjmmIIgcmzibK2X4rDOHMEXesLsJYbtEVmsLTTLeaAmhIa0atziAaNaC40NAaL4fD148BXVwc7C94rVDY8GsNC+R1AXEEhrRrT3kAkMYHONDQGhWybBrQE0lLqS3sZbR1ZUhLHPFcmwqlms8RDMNorftsR06s0x3ITp6LShFxZ2qZBJwZWb86kXNNl4OuNFocRBBtUzdPnrnhi1TaZiHy5RNSNCaQCUxxkalfaJ9EwTi3h0OAtLTbZ27iZ6isEJzMpmLZJsompBhYQHHYtYdg2JdmzKaxru2TZ1h2TRhmUtnWVRwUNHA3E3Cnpo442I3bKRZM4n2bu77NLFhDCNvwra327Cc0totjzVz5HF7ju5cSd2GqGuSc4TwrhPDdtfhLDFomtWEJDV0kr3Pe7d3OJNBrhqgMwzL5ZeGvj1iELEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIWIQsQhYhC//WdFi/g7dDGm6x3bvVTlHNAR1NiW7RjG1q2DXkIi9RRSyCQnBUCDDUQHljnBmy5DGMw2Nyb74buJhcYUwO4FjgGyxOroczNlcBqiKkseNMw11bS5rt7i8xi3hxa4dGGsBPBjcA2aB9dCnj2V4Gqc2pMbxpmEmlWue12pbEDQVY2XNqJ5LGsinv5YwFI8NoXani1dpQ5rx6psGslhtIJ5Gd9sU7VQC4uznsxznLu3j4uFhyNrbdM7B1uIFWTg5FdfkzNBZQbF+hk11nV0f26WpLYs7xwtZhK0PwVhEgVjtLTkV1+TOwGMtGxkMRNdZzGkhoMA8brRqGpqfCXEOORwI2Kvulbdl0+QNm7PV2nR0lKxPxIXPOLiTOtraMY1wbLHosmGcGFtaaS0RSHesbnO7XSg167CtWNfFlY4tGmw/ggsqBpLXDK7P0bG97qbE0oNeuX+FegBvFaMkFpYtW3Fd6hbS5Cu1d2oprRtubKIkcFZa7DPZFn5hPmu8DVufkfIQ7In6UvfqSGDLMx1luZAbTaM40eYOZENgWx5pH11Yy9CpmqDnAXm/epZ4HsbH2LF/ZnWy1ZxwE2hro4Rrg5kWllkrqxl6DTNUOzgbKrjYeXLw2saOwbk3es6waARiad6OAGrLRlhBwCrta0CYq21KzNd202czNm2TOwszMq14LzYdvTbjhHD1pltNpJNMo6VgJqWxs1mNvRrABr9XnKW3ovfeW+mEnYVvNbJrXayTk5bjkRgmpbFGNJEzo1jWiucgmpP3RfBLNrEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIWIQsQhYhCxCFiELEIX/2Q==",id:"e",width:193,height:192}))))};var Q;function E(){return E=Object.assign?Object.assign.bind():function(A){for(var e=1;e{let{title:e,titleId:g,...t}=A;return a.createElement("svg",E({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",viewBox:"0 0 177 74",role:"img","aria-labelledby":g},t),e?a.createElement("title",{id:g},e):null,Q||(Q=a.createElement("path",{fill:"currentColor",d:"M87.61 16.365c-11.4 0-20.64 9.24-20.64 20.64s9.24 20.64 20.64 20.64 20.64-9.24 20.64-20.64-9.24-20.64-20.64-20.64zm0 33.27c-6.98 0-12.63-5.66-12.63-12.63 0-6.98 5.66-12.63 12.63-12.63 6.98 0 12.63 5.66 12.63 12.63 0 6.98-5.66 12.63-12.63 12.63zm68.34-33.27c-11.4 0-20.64 9.24-20.64 20.64s9.24 20.64 20.64 20.64 20.64-9.24 20.64-20.64-9.24-20.64-20.64-20.64zm0 33.27c-6.98 0-12.63-5.66-12.63-12.63 0-6.98 5.66-12.63 12.63-12.63s12.63 5.66 12.63 12.63c0 6.98-5.66 12.63-12.63 12.63zM20.66 16.365c-11.4 0-20.64 9.24-20.64 20.64v36.99h8.01v-20.69c3.49 2.71 7.87 4.34 12.63 4.34 11.4 0 20.64-9.24 20.64-20.64s-9.24-20.64-20.64-20.64zm0 33.27c-6.98 0-12.63-5.66-12.63-12.63 0-6.98 5.66-12.63 12.63-12.63 6.98 0 12.63 5.66 12.63 12.63 0 6.98-5.65 12.63-12.63 12.63zM121.62.015h-8.01v40.22c0 9.62 7.8 17.41 17.41 17.41v-8.01c-5.19 0-9.4-4.21-9.4-9.4v-19.86h9.4v-8.01h-9.4V.015zm-57.04 16.35c-9.62 0-17.41 7.8-17.41 17.41v23.87h8.01v-23.87c0-5.19 4.21-9.4 9.4-9.4v-8.01z"})))};var s=g(50615),B=g(31792),Z=g(30658),i=g(33453),V=g(81271);const o=["bun","deno","node","go","rust"];function N(){const A="undefined"!=typeof window&&window.navigator.userAgent.toLowerCase().includes("win"),e=o[function(A,e){const g=Math.ceil(A);return Math.floor(Math.random()*(Math.floor(e)-g+1))+g}(0,o.length)]||o[0];return a.createElement("ul",{className:"flex flex-col w-full p-2 m-0 overflow-auto font-mono text-sm text-gray-200 border border-solid rounded-lg bg-slate-900 border-slate-500 list-none",style:{height:230}},a.createElement("li",{className:"text-gray-800"},"# Install proto"),a.createElement("li",null,A?"irm https://moonrepo.dev/install/proto.ps1 | iex":"curl -fsSL https://moonrepo.dev/install/proto.sh | bash"),"bun"===e&&a.createElement(a.Fragment,{key:"bun"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Bun"),a.createElement("li",null,"proto install bun 0.5"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"bun run index.ts")),"deno"===e&&a.createElement(a.Fragment,{key:"deno"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Deno"),a.createElement("li",null,"proto install deno 1.31"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"deno run index.ts")),"node"===e&&a.createElement(a.Fragment,{key:"node"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Node.js"),a.createElement("li",null,"proto install node 18"),a.createElement("li",null,"proto install pnpm"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"pnpm install"),a.createElement("li",null,"pnpm run dev")),"go"===e&&a.createElement(a.Fragment,{key:"go"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Go"),a.createElement("li",null,"proto install go 1.20"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"go run .")),"rust"===e&&a.createElement(a.Fragment,{key:"rust"},a.createElement("li",{className:"text-gray-800 pt-2"},"# Install Rust (requires rustup)"),a.createElement("li",null,"proto install rust 1.68"),a.createElement("li",{className:"text-gray-800 pt-2"},"# Use immediately"),a.createElement("li",null,"cargo build")))}function W(){const[A,e]=(0,a.useState)("?.?.?");return(0,a.useEffect)((()=>{fetch("https://raw.githubusercontent.com/moonrepo/proto/master/version").then((A=>A.text())).then((A=>{e(A.trim())})).catch(console.error)}),[]),a.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600 star-pattern"},a.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col md:flex-row"},a.createElement("div",{className:"text-center md:text-left md:w-6/12"},a.createElement(V.Z,{icon:a.createElement(c,{height:75,style:{marginTop:5}}),text:a.createElement(U,{height:90,className:"absolute top-0 left-0"})}),a.createElement("p",{className:"mt-1 mb-0 text-base text-white sm:text-lg sm:max-w-xl sm:mx-auto md:text-xl md:mx-0 md:w-[80%]"},"A version manager for all your favorite languages and tools. A unified toolchain."),a.createElement("p",{className:"mt-1 text-white opacity-50 text-sm md:text-base md:pr-4"},"Supports Bun, Deno, Node (npm, pnpm, yarn), Rust, Go, and more."),a.createElement("div",{className:"mt-3 flex justify-center md:justify-start"},a.createElement("div",null,a.createElement(i.Z,{href:"/docs/proto/install",color:"bg-pink-600"},"Get started",a.createElement(B.Z,{icon:F.gfM,className:"ml-1 md:ml-2 inline-block rotate-180",style:{maxWidth:18}}))),a.createElement("div",{className:"ml-1 sm:ml-2 lg:ml-3"},a.createElement(n.default,{href:"/docs/proto",className:"w-full flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white bg-white/5 hover:scale-110 md:text-lg group transition-transform"},"v",A)))),a.createElement("div",{className:"mt-4 md:mt-0 md:w-6/12 flex flex-col flex-grow-0"},a.createElement(N,null),a.createElement("div",{className:"mt-2 flex justify-center items-start gap-1"},a.createElement("div",null,a.createElement(Z.ZP,{className:"text-white opacity-50 m-0",size:"sm"},"Backed by")),a.createElement("div",null,a.createElement(s.Z,{height:22}))))))}var R=g(87129),h=g(30780),Y=g(64654),p=g(9187),b=g(90728);const x=[{title:"Lightspeed interface",icon:m.BDt,description:"Download, install, and run tools with lightspeed, thanks to our Rust based foundation."},{title:"Universal toolchain",icon:F.pmO,description:"Manage multiple languages and dependency managers through a single interface."},{title:"Version detection",icon:F.OxJ,description:"Detects a version at runtime from a language's ecosystem for maximum compatibility."},{title:"Granular configuration",icon:F.eDR,description:"Configure tools and their versions per directory, or per project."},{title:"Pluggable architecture",icon:F.zZQ,description:"Extend the toolchain with custom plugins, enabling new and non-standard tools."}];function G(){return a.createElement(Y.Z,{title:"proto - A multi-language version manager",description:"Lightspeed version manager for programming languages and their dependency managers."},a.createElement(W,null),a.createElement("main",null,a.createElement("div",{className:"bg-gradient-to-b from-slate-600 via-pink-900 to-white"},a.createElement(d.Z,{header:"Toolchain",description:"One tool to rule them all",features:x,tier:2}),a.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},a.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},a.createElement("div",{className:"bg-white rounded-lg p-6 drop-shadow"},a.createElement("div",{className:"grid grid-cols-2 gap-4 text-gray-900"},a.createElement("div",null,a.createElement(p.Z,{level:3,className:"mb-2"},"Get started"),a.createElement(Z.ZP,{className:"mb-1"},"Install proto for Linux, macOS, or WSL:"),a.createElement(h.Z,{language:"shell"},"curl -fsSL https://moonrepo.dev/install/proto.sh | bash"),a.createElement(Z.ZP,{className:"mb-1",variant:"muted"},"Or Windows (",a.createElement(b.Z,{href:"/docs/proto/install#windows"},"full instructions"),"):"),a.createElement(h.Z,{language:"shell"},"irm https://moonrepo.dev/install/proto.ps1 | iex"),a.createElement(p.Z,{level:4,className:"mt-4 mb-2"},"Install a tool"),a.createElement(h.Z,{language:"shell"},"proto install node 18"),a.createElement(p.Z,{level:4,className:"mt-4 mb-2"},"Run the tool"),a.createElement(h.Z,{language:"shell"},"node ./main.mjs\n\n# Or with proto\nproto run node -- ./main.mjs")),a.createElement("div",null,a.createElement(p.Z,{level:3,className:"mb-3"},"Supported tools"),a.createElement(R.Z,null),a.createElement(p.Z,{level:3,className:"mt-4 mb-2"},"Why another version manager?"),a.createElement(Z.ZP,{className:"mb-2"},"To start, proto powers ",a.createElement(b.Z,{href:"/moon"},"moon's")," toolchain and integrated developer environment. We believed that the toolchain would be extremely beneficial for developers as a whole, and so we extracted proto out into a standalone Rust CLI and"," ",a.createElement(b.Z,{href:"https://crates.io/users/milesj"},"Rust crates")," that moon inherits."),a.createElement(Z.ZP,{className:"mb-2"},"Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each with different workflows, CLI commands, and configuration files, is a poor developer experience."),a.createElement(Z.ZP,{className:"mb-0"},"Our goal is to unify all of these into a single performant interface. A toolchain manager is the next step in the version manager evolution.")))))))))}},9619:(A,e,g)=>{g.d(e,{Z:()=>a});var t=g(27378),I=g(40624),C=g(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function a(A){let{className:e,icon:g,text:a,variant:F}=A;return t.createElement("span",{className:(0,I.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",F?l[F]:"bg-gray-100 text-gray-800",e)},g&&t.createElement(C.Z,{icon:g,className:"mr-1"}),a)}}}]); \ No newline at end of file diff --git a/assets/js/1cbc9cf3.bdb3d1ac.js b/assets/js/1cbc9cf3.bdb3d1ac.js new file mode 100644 index 00000000000..ef5bd7941a5 --- /dev/null +++ b/assets/js/1cbc9cf3.bdb3d1ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29219],{4127:e=>{e.exports=JSON.parse('{"label":"http","permalink":"/blog/tags/http","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1cbc9cf3.f7114b88.js b/assets/js/1cbc9cf3.f7114b88.js deleted file mode 100644 index d5210976b0a..00000000000 --- a/assets/js/1cbc9cf3.f7114b88.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9219],{4127:e=>{e.exports=JSON.parse('{"label":"http","permalink":"/blog/tags/http","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1d14c2f4.03291b85.js b/assets/js/1d14c2f4.03291b85.js deleted file mode 100644 index 03f90361683..00000000000 --- a/assets/js/1d14c2f4.03291b85.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3811],{34198:e=>{e.exports=JSON.parse('{"label":"npm","permalink":"/blog/tags/npm","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1d14c2f4.28abd01f.js b/assets/js/1d14c2f4.28abd01f.js new file mode 100644 index 00000000000..96dddf46144 --- /dev/null +++ b/assets/js/1d14c2f4.28abd01f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93811],{34198:e=>{e.exports=JSON.parse('{"label":"npm","permalink":"/blog/tags/npm","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.544fda6c.js b/assets/js/1df93b7f.544fda6c.js deleted file mode 100644 index 80930c3159d..00000000000 --- a/assets/js/1df93b7f.544fda6c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3237],{33453:(e,t,a)=>{a.d(t,{Z:()=>c});var l=a(27378),r=a(40624),n=a(81884);function c(e){let{children:t,href:a,color:c}=e;return l.createElement(n.default,{href:a,className:(0,r.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",c??"bg-purple-600")},t)}},94141:(e,t,a)=>{a.d(t,{Z:()=>r});var l=a(27378);function r(){return l.createElement(l.Fragment,null,l.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1"},l.createElement("img",{src:"/img/home/org.png",alt:"moonbase - organization view",className:"block"})),l.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1 absolute bottom-0 right-0 z-10 hidden sm:block"},l.createElement("img",{src:"/img/home/repo.png",alt:"moonbase - repository view",className:"block"})))}},75278:(e,t,a)=>{a.r(t),a.d(t,{default:()=>M});var l,r,n,c=a(27378),o=a(50353),s=a(21947),i=a(40624),m=a(31792),d=a(9187),h=a(30658),p=a(33453);function u(e){let{children:t,color:a,cta:l,description:r,id:n,items:o,logo:s,reversed:u,stretched:g,suptitle:v,title:f}=e;return c.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6",id:n},c.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},c.createElement("div",{className:"bg-white rounded-lg p-6 drop-shadow"},c.createElement("div",{className:(0,i.Z)("grid grid-cols-1 md:grid-cols-2 gap-8",g?"items-stretch":"items-center")},c.createElement("div",{className:u?"order-2":"order-1"},c.createElement(d.Z,{level:5,className:a},v),c.createElement("div",{className:"flex items-center sm:items-end gap-2 mt-1"},c.createElement("div",null,s),c.createElement("div",{className:"self-center"},c.createElement(d.Z,{level:2,className:"mt-1 text-slate-900"},f))),c.createElement("p",{className:t?"my-4":"mt-3"},c.createElement(h.ZP,{as:"span",size:"lg",className:"text-slate-900"},r)),l&&c.createElement(p.Z,l)),c.createElement("aside",{className:u?"order-1":"order-2"},o&&c.createElement("ul",{className:"flex flex-col gap-4 m-0 p-0"},o.map((e=>c.createElement("li",{key:e.title,className:"relative list-none pl-5"},c.createElement(d.Z,{level:5,className:"mb-1 text-slate-900"},e.title),c.createElement("p",{className:"m-0 text-slate-900"},e.description),c.createElement("div",{className:"absolute top-1 left-0"},c.createElement(m.Z,{icon:e.icon,className:(0,i.Z)("text-2xl justify-center flex",a),style:{maxWidth:54}})))))),t)))))}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...o}=e;return c.createElement("svg",g({viewBox:"0 0 202 60",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":a},o),t?c.createElement("title",{id:a},t):null,l||(l=c.createElement("path",{d:"M72.352 48v-6.624h8.4c2.048 0 3.84-.4 5.376-1.2 1.536-.832 2.72-2.032 3.552-3.6.832-1.568 1.248-3.424 1.248-5.568 0-2.144-.432-3.984-1.296-5.52a8.635 8.635 0 0 0-3.552-3.552c-1.504-.832-3.28-1.248-5.328-1.248h-8.64v-6.576h8.736c2.56 0 4.912.416 7.056 1.248 2.176.8 4.064 1.968 5.664 3.504a15.091 15.091 0 0 1 3.744 5.376c.896 2.048 1.344 4.32 1.344 6.816 0 2.464-.448 4.736-1.344 6.816a15.383 15.383 0 0 1-3.696 5.376c-1.6 1.504-3.488 2.672-5.664 3.504-2.144.832-4.48 1.248-7.008 1.248h-8.592Zm-5.088 0V14.112H74.8V48h-7.536Zm47.035.528c-2.527 0-4.783-.512-6.767-1.536-1.952-1.056-3.488-2.512-4.608-4.368-1.12-1.856-1.68-3.952-1.68-6.288 0-2.336.544-4.416 1.632-6.24a12.062 12.062 0 0 1 4.512-4.368c1.888-1.056 4.016-1.584 6.384-1.584 2.304 0 4.336.496 6.096 1.488a10.663 10.663 0 0 1 4.128 4.128c1.024 1.76 1.535 3.776 1.535 6.048 0 .416-.031.864-.095 1.344-.032.448-.112.976-.24 1.584l-20.112.048v-5.04l16.992-.048-3.168 2.112c-.032-1.344-.24-2.448-.624-3.312-.384-.896-.96-1.568-1.728-2.016-.736-.48-1.648-.72-2.736-.72-1.152 0-2.16.272-3.024.816-.832.512-1.488 1.248-1.968 2.208-.448.96-.672 2.128-.672 3.504s.24 2.56.72 3.552a5.743 5.743 0 0 0 2.112 2.256c.928.512 2.016.768 3.264.768 1.152 0 2.192-.192 3.12-.576a7.114 7.114 0 0 0 2.448-1.824l4.032 4.032a10.885 10.885 0 0 1-4.176 3.024c-1.632.672-3.424 1.008-5.377 1.008Zm28.217-.048c-1.568 0-3.008-.304-4.32-.912-1.312-.608-2.384-1.44-3.216-2.496a7.039 7.039 0 0 1-1.44-3.696v-9.84a7.302 7.302 0 0 1 1.44-3.744c.832-1.12 1.904-2 3.216-2.64 1.312-.64 2.752-.96 4.32-.96 2.208 0 4.16.528 5.856 1.584 1.728 1.056 3.072 2.496 4.032 4.32.992 1.824 1.488 3.904 1.488 6.24 0 2.336-.496 4.416-1.488 6.24-.96 1.824-2.304 3.264-4.032 4.32-1.696 1.056-3.648 1.584-5.856 1.584Zm-1.344-6.624c1.056 0 1.968-.24 2.736-.72a5.035 5.035 0 0 0 1.872-1.968c.448-.832.672-1.776.672-2.832 0-1.088-.224-2.048-.672-2.88a4.706 4.706 0 0 0-1.872-1.92c-.768-.48-1.664-.72-2.688-.72-1.024 0-1.936.24-2.736.72-.768.448-1.376 1.088-1.824 1.92-.448.832-.672 1.792-.672 2.88 0 1.056.208 2 .624 2.832a5.035 5.035 0 0 0 1.872 1.968c.8.48 1.696.72 2.688.72ZM129.076 57.84V24.672h7.344v6l-1.2 5.664L136.324 42v15.84h-7.248Zm39.779-9.312c-2.4 0-4.576-.528-6.528-1.584-1.92-1.088-3.44-2.56-4.56-4.416-1.12-1.856-1.68-3.936-1.68-6.24 0-2.304.56-4.368 1.68-6.192 1.12-1.824 2.64-3.264 4.56-4.32 1.92-1.088 4.096-1.632 6.528-1.632 2.432 0 4.608.528 6.528 1.584a11.962 11.962 0 0 1 4.56 4.368c1.12 1.824 1.68 3.888 1.68 6.192 0 2.304-.56 4.384-1.68 6.24-1.12 1.856-2.64 3.328-4.56 4.416-1.92 1.056-4.096 1.584-6.528 1.584Zm0-6.672c1.056 0 1.984-.224 2.784-.672a4.705 4.705 0 0 0 1.824-1.968c.448-.864.672-1.84.672-2.928 0-1.088-.224-2.032-.672-2.832a4.706 4.706 0 0 0-1.872-1.92c-.768-.48-1.68-.72-2.736-.72-1.024 0-1.936.24-2.736.72a4.706 4.706 0 0 0-1.872 1.92c-.448.832-.672 1.792-.672 2.88 0 1.056.224 2.016.672 2.88a5.035 5.035 0 0 0 1.872 1.968c.8.448 1.712.672 2.736.672ZM188.123 48V15.024h7.344V48h-7.344Zm-5.28-17.088v-6.24h17.904v6.24h-17.904Z",fill:"currentColor"})),r||(r=c.createElement("path",{d:"m38.5 23.933-21-12.11M49 39.333V20.667a4.667 4.667 0 0 0-2.333-4.037L30.333 7.297a4.666 4.666 0 0 0-4.666 0L9.333 16.63A4.667 4.667 0 0 0 7 20.667v18.666a4.666 4.666 0 0 0 2.333 4.037l16.334 9.333a4.666 4.666 0 0 0 4.666 0l16.334-9.333A4.667 4.667 0 0 0 49 39.333Z",stroke:"currentColor",strokeWidth:2.333,strokeLinecap:"round",strokeLinejoin:"round"})),n||(n=c.createElement("path",{d:"M7.63 18.24 28 30.023 48.37 18.24M28 53.52V30",stroke:"currentColor",strokeWidth:2.333,strokeLinecap:"round",strokeLinejoin:"round"})))};var f;function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...l}=e;return c.createElement("svg",b({viewBox:"0 0 316 76",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":a},l),t?c.createElement("title",{id:a},t):null,f||(f=c.createElement("path",{d:"M57.999 44.656c0-4.655.707-5.855 3.457-6.067V36.05H42.23v2.53c6.703.28 9.702-.514 9.702 5.298l.021 9.26a11.921 11.921 0 0 1-1.494 3.3c-1.45 2.12-3.85 3.105-7.092 3.105-7.683 0-12.229-8.11-12.229-22.078 0-13.97 4.186-22.273 12.581-22.273 6.488 0 10.396 4.287 11.392 13.316h2.893V13.2h-2.75c-.355 1.765-.636 2.257-1.272 2.257-1.128 0-4.26-3.155-10.538-3.155-11.779 0-19.538 10.563-19.538 25.446 0 15.024 7.418 24.757 19.604 24.757h.024c7.187 0 9.479-4.798 9.969-6.324l1.725 5.69h2.75l.02-17.216ZM252.428 55.47c1.786 2.93 2.787 3.785 4.072 4.143v2.215h-7.786L234.57 37.11h-4.644v16.36c0 4.93.998 5.928 5.142 6.143v2.215h-16.002v-2.215c4.215-.143 4.928-.795 4.928-5.786V21.242c0-5.002-.713-5.646-4.928-5.786V13.24h17.22c9.143 0 14.002 4.215 14.002 11.357 0 5.932-3.429 10.218-9.501 11.79l11.641 19.082Zm-22.502-20.93h4.215c6.358 0 9.571-3.573 9.571-9.717 0-6-2.713-9.007-8.212-9.007h-5.564l-.01 18.725ZM280.457 13.249h11.657v2.215c-1.356.355-2.215 1.141-3.929 4.644l-11.288 22.43v10.717c0 5.36 1.144 6.143 5.298 6.358v2.215h-16.597v-2.215c4.143-.215 5.359-.999 5.359-6.358V42.753l-11.656-22.645c-1.786-3.503-2.573-4.29-4.001-4.644v-2.215h14.653v2.215c-3.356.283-4.504.794-4.504 2.357 0 .795.287 1.714 1.216 3.643l8.587 17.36 8.501-17.002c.856-1.714 1.142-2.859 1.142-3.789 0-1.714-.999-2.286-4.43-2.57l-.008-2.214ZM107.942 61.828v-2.215c4.215-.143 4.927-.795 4.927-5.786V21.242c0-5.002-.712-5.643-4.927-5.786V13.24h16.144v2.215c-4.644.143-5.298 1.356-5.298 6.572v31.076c0 4.715.795 6.143 5.142 6.143h5.145c5.285 0 6.716-1.928 9.36-14.43h2.914l-1.855 17.003-31.552.008ZM145.388 61.828v-2.215c4.215-.143 4.93-.795 4.93-5.786V21.242c0-5.002-.715-5.643-4.93-5.786V13.24h16.147v2.215c-4.644.143-5.298 1.356-5.298 6.572v31.076c0 4.715.795 6.143 5.145 6.143h5.142c5.298 0 6.716-1.928 9.359-14.43h2.936l-1.855 17.003-31.576.008ZM97.87 51.898 85.22 13.246H73.58v2.215c4.769 0 5.672 3.56 4.93 5.786l-10.22 30.731c-2 6.144-2.856 7.357-5.143 7.643v2.215h13.289V59.62c-4-.143-5.563-.999-5.563-3.357 0-.93.286-2.286.794-3.931l2.215-6.642h15.79l2.071 6.358c.641 1.855.927 3.214.927 4.215 0 2.358-1.57 3.214-5.298 3.357v2.215h15.853V59.62c-2.429-.294-3.354-1.65-5.357-7.723Zm-23.078-9.216 6.93-21.075 6.93 21.075h-13.86ZM213.484 47.323l-.795 14.502h-31.067V59.61c4.215-.143 4.927-.795 4.927-5.786V21.24c0-5.002-.712-5.643-4.927-5.786v-2.215h30.505l.57 12.287h-2.927c-1.002-7.929-2.43-9.717-9.217-9.717h-8.072V35.74h5.786c5.216 0 5.929-.856 6.358-7.357h2.787v17.288h-2.787c-.429-6.5-1.142-7.36-6.358-7.36h-5.786v15.504c0 4.43.927 5.428 5.213 5.428h4.573c5.714 0 7.217-2.5 8.287-11.921h2.93ZM21.609 75.074c-28.15-16.606-28.14-58.477 0-75.074l1.399 2.199A43.38 43.38 0 0 0 9.317 17.652C-.79 36.633 5.237 60.762 23.007 72.88l-1.398 2.2v-.006ZM294.391.002c28.151 16.603 28.137 58.474 0 75.071l-1.399-2.198a43.4 43.4 0 0 0 13.691-15.448c10.105-18.98 4.08-43.111-13.691-55.229l1.399-2.196Z",fill:"currentColor"})))};var E=a(90728);function w(e){e.stopPropagation(),e.preventDefault();const t=document.querySelector("#subject"),a=document.querySelector("#contact-next");t&&a&&(t.value="Affiliation",t.dispatchEvent(new Event("change",{bubbles:!0})),setTimeout((()=>{a.click()}),0))}function y(){return c.createElement("div",{className:"bg-white"},c.createElement("div",{className:"relative py-4 sm:py-6 lg:py-8"},c.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},c.createElement(d.Z,{align:"center",className:"text-gray-900",level:3},"Used by these innovative companies"),c.createElement("div",{className:"mt-4 grid grid-cols-2 gap-6 md:grid-cols-3 lg:grid-cols-6"},c.createElement("div",{className:"col-span-1 flex justify-center items-center"},c.createElement(E.Z,{to:"https://depot.dev/?ref=moonrepo",variant:"muted",title:"Depot"},c.createElement(v,{className:"w-full max-w-full"}))),c.createElement("div",{className:"col-span-1 flex justify-center items-center"},c.createElement(E.Z,{to:"https://gallery.so/?ref=moonrepo",variant:"muted",title:"(Gallery)"},c.createElement(x,{className:"w-full max-w-full"}))),c.createElement("div",{className:"col-span-1 flex justify-start items-center"},c.createElement(E.Z,{href:"#",onClick:w,variant:"muted",title:"List your company here"},c.createElement(m.Z,{icon:s.EQ8,className:"text-3xl"})))))))}var N,Z=a(94141),k=a(64654);function V(){return V=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...l}=e;return c.createElement("svg",V({viewBox:"0 0 320 51",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":a},l),t?c.createElement("title",{id:a},t):null,N||(N=c.createElement("path",{fill:"currentColor",d:"M77.67.22C67.58.22 59.41 8.4 59.41 18.48s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S87.76.22 77.67.22zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c0 6.17-5.01 11.18-11.18 11.18zM118.94.22c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S129.03.22 118.94.22zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c0 6.17-5.01 11.18-11.18 11.18zM300.59.22c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S310.67.22 300.59.22zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c-.01 6.17-5.01 11.18-11.18 11.18zM39.26.22c-4.76 0-9.01 2.16-11.83 5.55C24.6 2.38 20.35.22 15.6.22 7.09.22.19 7.12.19 15.63v21.12h7.09V15.62A8.32 8.32 0 0 1 15.6 7.3c4.39 0 7.98 3.41 8.29 7.72-.01.2-.03.4-.03.6v21.12h7.15V15.62c0-.2-.02-.4-.03-.6.31-4.31 3.9-7.72 8.29-7.72a8.32 8.32 0 0 1 8.32 8.32v21.12h7.09V15.62C54.66 7.11 47.76.22 39.26.22zm118.09 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V15.62a8.32 8.32 0 0 1 16.64 0v21.12h7.09V15.62c0-8.51-6.9-15.4-15.41-15.4zm37.61 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V15.62a8.32 8.32 0 0 1 8.32-8.32V.22zm41.27 18.26c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c5.04 0 9.61-2.04 12.91-5.35l-5.01-5.01a11.149 11.149 0 0 1-7.9 3.27c-4.94 0-9.12-3.21-10.6-7.65h28.52c.22-1.14.34-2.31.34-3.52zM217.97 7.3c4.94 0 9.12 3.21 10.6 7.65h-21.2c1.48-4.44 5.66-7.65 10.6-7.65zm59.65 11.18c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26v32.73h7.09v-18.3c3.09 2.4 6.96 3.84 11.18 3.84 10.07-.01 18.25-8.18 18.25-18.27zm-7.09 0c0 6.17-5 11.18-11.18 11.18s-11.18-5-11.18-11.18c0-6.17 5-11.18 11.18-11.18s11.18 5.01 11.18 11.18z"})))};function M(){const{siteConfig:e}=(0,o.default)();return c.createElement(k.Z,{title:e.tagline,description:"From build to deploy, moonrepo is a better way to manage codebases, save developer time, and boost your business."},c.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600"},c.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col justify-center items-center"},c.createElement("h1",{className:"text-white"},c.createElement(j,{height:65})),c.createElement("h2",{className:"mb-3 text-white font-medium text-center text-3xl sm:text-4xl md:text-5xl"},"New era of productivity tooling"),c.createElement("p",{className:"mm-0 text-white text-md text-center opacity-60 px-4 sm:text-lg md:text-xl md:max-w-3xl"},"From build to deploy, moonrepo is a better way to manage codebases, save developer time, and boost your business."))),c.createElement("main",{className:"bg-gradient-to-b from-slate-600 via-blurple-600 to-white"},c.createElement(u,{id:"moon",color:"text-blurple-400",suptitle:"A system for a solid foundation",title:"Supercharge your codebase",logo:c.createElement("img",{src:"/brand/moon/icon.svg",height:75,className:"block"}),description:c.createElement(c.Fragment,null,"For repositories with multiple projects, any number of languages, and team members constantly pushing changes,"," ",c.createElement(E.Z,{href:"/moon",size:"lg"},"moon")," ","will help simplify the experience of working in and maintaining a complex monorepo."),cta:{children:"Learn more about moon",color:"bg-blurple-400",href:"/moon"},items:[{description:"Never run the same task twice. With our smart hashing, robust caching, and efficient task execution, moon will avoid unnecessary work.",icon:s.fjp,title:"Efficient task orchestation"},{description:"Neatly organize your codebase, declare ownership information, and simplify project discovery.",icon:s.Bkj,title:"Better project organization"},{description:c.createElement(c.Fragment,null,"With our ",c.createElement(E.Z,{href:"#proto"},"integrated toolchain"),", development environments will be spun up in minutes, ensuring the exact tools and versions are used across developers and machines."),icon:s.AlB,title:"Integrated development environment"}]}),c.createElement(u,{reversed:!0,stretched:!0,id:"moonbase",color:"text-teal-700",suptitle:"A service to expand to the cloud",title:"Accelerate your pipelines",logo:c.createElement("img",{src:"/brand/moonbase/icon.svg",height:75,className:"block"}),description:c.createElement(c.Fragment,null,"With our hosted service"," ",c.createElement(E.Z,{href:"/moon",size:"lg"},"moonbase"),", easily cache build artifacts to reduce CI times, gain insight into your CI pipelines, track the health of your repositories, and overall cut costs."),cta:{children:"Learn more about moonbase",color:"bg-teal-600",href:"/moonbase"}},c.createElement("div",{className:"relative sm:pb-8 h-full"},c.createElement(Z.Z,null))),c.createElement(u,{stretched:!0,id:"proto",color:"text-pink-600",suptitle:"A toolchain for the modern era",title:"Automate your environments",logo:c.createElement("img",{src:"/brand/proto/icon.svg",height:75,className:"block"}),description:c.createElement(c.Fragment,null,"Remove the hassle of managing and enforcing specific versions of programming languages across teams or projects. With"," ",c.createElement(E.Z,{href:"/moon",size:"lg"},"proto"),", our modern version manager, this entire workflow is automated away through a single tool."),cta:{children:"Learn more about proto",color:"bg-pink-600",href:"/proto"},items:[{description:"Manage versions of multiple languages and dependency managers through a single interface. A single source of truth.",icon:s.pmO,title:"Multi-language support"},{description:"Detects and infers versions and semantics from a language's ecosystem for maximum compatibility and interoperability.",icon:s.XEC,title:"Contextual version detection"},{description:"Download, install, and run tools with lightspeed, thanks to our Rust based foundation.",icon:s.BDt,title:"Lightspeed interface"}]})),c.createElement(y,null))}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.94ddde62.js b/assets/js/1df93b7f.94ddde62.js new file mode 100644 index 00000000000..7cb86d4e40b --- /dev/null +++ b/assets/js/1df93b7f.94ddde62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53237],{33453:(e,t,a)=>{a.d(t,{Z:()=>c});var l=a(27378),r=a(40624),n=a(81884);function c(e){let{children:t,href:a,color:c}=e;return l.createElement(n.default,{href:a,className:(0,r.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",c??"bg-purple-600")},t)}},94141:(e,t,a)=>{a.d(t,{Z:()=>r});var l=a(27378);function r(){return l.createElement(l.Fragment,null,l.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1"},l.createElement("img",{src:"/img/home/org.png",alt:"moonbase - organization view",className:"block"})),l.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1 absolute bottom-0 right-0 z-10 hidden sm:block"},l.createElement("img",{src:"/img/home/repo.png",alt:"moonbase - repository view",className:"block"})))}},75278:(e,t,a)=>{a.r(t),a.d(t,{default:()=>M});var l,r,n,c=a(27378),o=a(50353),s=a(21947),i=a(40624),m=a(31792),d=a(9187),h=a(30658),p=a(33453);function u(e){let{children:t,color:a,cta:l,description:r,id:n,items:o,logo:s,reversed:u,stretched:g,suptitle:v,title:f}=e;return c.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6",id:n},c.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},c.createElement("div",{className:"bg-white rounded-lg p-6 drop-shadow"},c.createElement("div",{className:(0,i.Z)("grid grid-cols-1 md:grid-cols-2 gap-8",g?"items-stretch":"items-center")},c.createElement("div",{className:u?"order-2":"order-1"},c.createElement(d.Z,{level:5,className:a},v),c.createElement("div",{className:"flex items-center sm:items-end gap-2 mt-1"},c.createElement("div",null,s),c.createElement("div",{className:"self-center"},c.createElement(d.Z,{level:2,className:"mt-1 text-slate-900"},f))),c.createElement("p",{className:t?"my-4":"mt-3"},c.createElement(h.ZP,{as:"span",size:"lg",className:"text-slate-900"},r)),l&&c.createElement(p.Z,l)),c.createElement("aside",{className:u?"order-1":"order-2"},o&&c.createElement("ul",{className:"flex flex-col gap-4 m-0 p-0"},o.map((e=>c.createElement("li",{key:e.title,className:"relative list-none pl-5"},c.createElement(d.Z,{level:5,className:"mb-1 text-slate-900"},e.title),c.createElement("p",{className:"m-0 text-slate-900"},e.description),c.createElement("div",{className:"absolute top-1 left-0"},c.createElement(m.Z,{icon:e.icon,className:(0,i.Z)("text-2xl justify-center flex",a),style:{maxWidth:54}})))))),t)))))}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...o}=e;return c.createElement("svg",g({viewBox:"0 0 202 60",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":a},o),t?c.createElement("title",{id:a},t):null,l||(l=c.createElement("path",{d:"M72.352 48v-6.624h8.4c2.048 0 3.84-.4 5.376-1.2 1.536-.832 2.72-2.032 3.552-3.6.832-1.568 1.248-3.424 1.248-5.568 0-2.144-.432-3.984-1.296-5.52a8.635 8.635 0 0 0-3.552-3.552c-1.504-.832-3.28-1.248-5.328-1.248h-8.64v-6.576h8.736c2.56 0 4.912.416 7.056 1.248 2.176.8 4.064 1.968 5.664 3.504a15.091 15.091 0 0 1 3.744 5.376c.896 2.048 1.344 4.32 1.344 6.816 0 2.464-.448 4.736-1.344 6.816a15.383 15.383 0 0 1-3.696 5.376c-1.6 1.504-3.488 2.672-5.664 3.504-2.144.832-4.48 1.248-7.008 1.248h-8.592Zm-5.088 0V14.112H74.8V48h-7.536Zm47.035.528c-2.527 0-4.783-.512-6.767-1.536-1.952-1.056-3.488-2.512-4.608-4.368-1.12-1.856-1.68-3.952-1.68-6.288 0-2.336.544-4.416 1.632-6.24a12.062 12.062 0 0 1 4.512-4.368c1.888-1.056 4.016-1.584 6.384-1.584 2.304 0 4.336.496 6.096 1.488a10.663 10.663 0 0 1 4.128 4.128c1.024 1.76 1.535 3.776 1.535 6.048 0 .416-.031.864-.095 1.344-.032.448-.112.976-.24 1.584l-20.112.048v-5.04l16.992-.048-3.168 2.112c-.032-1.344-.24-2.448-.624-3.312-.384-.896-.96-1.568-1.728-2.016-.736-.48-1.648-.72-2.736-.72-1.152 0-2.16.272-3.024.816-.832.512-1.488 1.248-1.968 2.208-.448.96-.672 2.128-.672 3.504s.24 2.56.72 3.552a5.743 5.743 0 0 0 2.112 2.256c.928.512 2.016.768 3.264.768 1.152 0 2.192-.192 3.12-.576a7.114 7.114 0 0 0 2.448-1.824l4.032 4.032a10.885 10.885 0 0 1-4.176 3.024c-1.632.672-3.424 1.008-5.377 1.008Zm28.217-.048c-1.568 0-3.008-.304-4.32-.912-1.312-.608-2.384-1.44-3.216-2.496a7.039 7.039 0 0 1-1.44-3.696v-9.84a7.302 7.302 0 0 1 1.44-3.744c.832-1.12 1.904-2 3.216-2.64 1.312-.64 2.752-.96 4.32-.96 2.208 0 4.16.528 5.856 1.584 1.728 1.056 3.072 2.496 4.032 4.32.992 1.824 1.488 3.904 1.488 6.24 0 2.336-.496 4.416-1.488 6.24-.96 1.824-2.304 3.264-4.032 4.32-1.696 1.056-3.648 1.584-5.856 1.584Zm-1.344-6.624c1.056 0 1.968-.24 2.736-.72a5.035 5.035 0 0 0 1.872-1.968c.448-.832.672-1.776.672-2.832 0-1.088-.224-2.048-.672-2.88a4.706 4.706 0 0 0-1.872-1.92c-.768-.48-1.664-.72-2.688-.72-1.024 0-1.936.24-2.736.72-.768.448-1.376 1.088-1.824 1.92-.448.832-.672 1.792-.672 2.88 0 1.056.208 2 .624 2.832a5.035 5.035 0 0 0 1.872 1.968c.8.48 1.696.72 2.688.72ZM129.076 57.84V24.672h7.344v6l-1.2 5.664L136.324 42v15.84h-7.248Zm39.779-9.312c-2.4 0-4.576-.528-6.528-1.584-1.92-1.088-3.44-2.56-4.56-4.416-1.12-1.856-1.68-3.936-1.68-6.24 0-2.304.56-4.368 1.68-6.192 1.12-1.824 2.64-3.264 4.56-4.32 1.92-1.088 4.096-1.632 6.528-1.632 2.432 0 4.608.528 6.528 1.584a11.962 11.962 0 0 1 4.56 4.368c1.12 1.824 1.68 3.888 1.68 6.192 0 2.304-.56 4.384-1.68 6.24-1.12 1.856-2.64 3.328-4.56 4.416-1.92 1.056-4.096 1.584-6.528 1.584Zm0-6.672c1.056 0 1.984-.224 2.784-.672a4.705 4.705 0 0 0 1.824-1.968c.448-.864.672-1.84.672-2.928 0-1.088-.224-2.032-.672-2.832a4.706 4.706 0 0 0-1.872-1.92c-.768-.48-1.68-.72-2.736-.72-1.024 0-1.936.24-2.736.72a4.706 4.706 0 0 0-1.872 1.92c-.448.832-.672 1.792-.672 2.88 0 1.056.224 2.016.672 2.88a5.035 5.035 0 0 0 1.872 1.968c.8.448 1.712.672 2.736.672ZM188.123 48V15.024h7.344V48h-7.344Zm-5.28-17.088v-6.24h17.904v6.24h-17.904Z",fill:"currentColor"})),r||(r=c.createElement("path",{d:"m38.5 23.933-21-12.11M49 39.333V20.667a4.667 4.667 0 0 0-2.333-4.037L30.333 7.297a4.666 4.666 0 0 0-4.666 0L9.333 16.63A4.667 4.667 0 0 0 7 20.667v18.666a4.666 4.666 0 0 0 2.333 4.037l16.334 9.333a4.666 4.666 0 0 0 4.666 0l16.334-9.333A4.667 4.667 0 0 0 49 39.333Z",stroke:"currentColor",strokeWidth:2.333,strokeLinecap:"round",strokeLinejoin:"round"})),n||(n=c.createElement("path",{d:"M7.63 18.24 28 30.023 48.37 18.24M28 53.52V30",stroke:"currentColor",strokeWidth:2.333,strokeLinecap:"round",strokeLinejoin:"round"})))};var f;function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...l}=e;return c.createElement("svg",b({viewBox:"0 0 316 76",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":a},l),t?c.createElement("title",{id:a},t):null,f||(f=c.createElement("path",{d:"M57.999 44.656c0-4.655.707-5.855 3.457-6.067V36.05H42.23v2.53c6.703.28 9.702-.514 9.702 5.298l.021 9.26a11.921 11.921 0 0 1-1.494 3.3c-1.45 2.12-3.85 3.105-7.092 3.105-7.683 0-12.229-8.11-12.229-22.078 0-13.97 4.186-22.273 12.581-22.273 6.488 0 10.396 4.287 11.392 13.316h2.893V13.2h-2.75c-.355 1.765-.636 2.257-1.272 2.257-1.128 0-4.26-3.155-10.538-3.155-11.779 0-19.538 10.563-19.538 25.446 0 15.024 7.418 24.757 19.604 24.757h.024c7.187 0 9.479-4.798 9.969-6.324l1.725 5.69h2.75l.02-17.216ZM252.428 55.47c1.786 2.93 2.787 3.785 4.072 4.143v2.215h-7.786L234.57 37.11h-4.644v16.36c0 4.93.998 5.928 5.142 6.143v2.215h-16.002v-2.215c4.215-.143 4.928-.795 4.928-5.786V21.242c0-5.002-.713-5.646-4.928-5.786V13.24h17.22c9.143 0 14.002 4.215 14.002 11.357 0 5.932-3.429 10.218-9.501 11.79l11.641 19.082Zm-22.502-20.93h4.215c6.358 0 9.571-3.573 9.571-9.717 0-6-2.713-9.007-8.212-9.007h-5.564l-.01 18.725ZM280.457 13.249h11.657v2.215c-1.356.355-2.215 1.141-3.929 4.644l-11.288 22.43v10.717c0 5.36 1.144 6.143 5.298 6.358v2.215h-16.597v-2.215c4.143-.215 5.359-.999 5.359-6.358V42.753l-11.656-22.645c-1.786-3.503-2.573-4.29-4.001-4.644v-2.215h14.653v2.215c-3.356.283-4.504.794-4.504 2.357 0 .795.287 1.714 1.216 3.643l8.587 17.36 8.501-17.002c.856-1.714 1.142-2.859 1.142-3.789 0-1.714-.999-2.286-4.43-2.57l-.008-2.214ZM107.942 61.828v-2.215c4.215-.143 4.927-.795 4.927-5.786V21.242c0-5.002-.712-5.643-4.927-5.786V13.24h16.144v2.215c-4.644.143-5.298 1.356-5.298 6.572v31.076c0 4.715.795 6.143 5.142 6.143h5.145c5.285 0 6.716-1.928 9.36-14.43h2.914l-1.855 17.003-31.552.008ZM145.388 61.828v-2.215c4.215-.143 4.93-.795 4.93-5.786V21.242c0-5.002-.715-5.643-4.93-5.786V13.24h16.147v2.215c-4.644.143-5.298 1.356-5.298 6.572v31.076c0 4.715.795 6.143 5.145 6.143h5.142c5.298 0 6.716-1.928 9.359-14.43h2.936l-1.855 17.003-31.576.008ZM97.87 51.898 85.22 13.246H73.58v2.215c4.769 0 5.672 3.56 4.93 5.786l-10.22 30.731c-2 6.144-2.856 7.357-5.143 7.643v2.215h13.289V59.62c-4-.143-5.563-.999-5.563-3.357 0-.93.286-2.286.794-3.931l2.215-6.642h15.79l2.071 6.358c.641 1.855.927 3.214.927 4.215 0 2.358-1.57 3.214-5.298 3.357v2.215h15.853V59.62c-2.429-.294-3.354-1.65-5.357-7.723Zm-23.078-9.216 6.93-21.075 6.93 21.075h-13.86ZM213.484 47.323l-.795 14.502h-31.067V59.61c4.215-.143 4.927-.795 4.927-5.786V21.24c0-5.002-.712-5.643-4.927-5.786v-2.215h30.505l.57 12.287h-2.927c-1.002-7.929-2.43-9.717-9.217-9.717h-8.072V35.74h5.786c5.216 0 5.929-.856 6.358-7.357h2.787v17.288h-2.787c-.429-6.5-1.142-7.36-6.358-7.36h-5.786v15.504c0 4.43.927 5.428 5.213 5.428h4.573c5.714 0 7.217-2.5 8.287-11.921h2.93ZM21.609 75.074c-28.15-16.606-28.14-58.477 0-75.074l1.399 2.199A43.38 43.38 0 0 0 9.317 17.652C-.79 36.633 5.237 60.762 23.007 72.88l-1.398 2.2v-.006ZM294.391.002c28.151 16.603 28.137 58.474 0 75.071l-1.399-2.198a43.4 43.4 0 0 0 13.691-15.448c10.105-18.98 4.08-43.111-13.691-55.229l1.399-2.196Z",fill:"currentColor"})))};var E=a(90728);function w(e){e.stopPropagation(),e.preventDefault();const t=document.querySelector("#subject"),a=document.querySelector("#contact-next");t&&a&&(t.value="Affiliation",t.dispatchEvent(new Event("change",{bubbles:!0})),setTimeout((()=>{a.click()}),0))}function y(){return c.createElement("div",{className:"bg-white"},c.createElement("div",{className:"relative py-4 sm:py-6 lg:py-8"},c.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},c.createElement(d.Z,{align:"center",className:"text-gray-900",level:3},"Used by these innovative companies"),c.createElement("div",{className:"mt-4 grid grid-cols-2 gap-6 md:grid-cols-3 lg:grid-cols-6"},c.createElement("div",{className:"col-span-1 flex justify-center items-center"},c.createElement(E.Z,{to:"https://depot.dev/?ref=moonrepo",variant:"muted",title:"Depot"},c.createElement(v,{className:"w-full max-w-full"}))),c.createElement("div",{className:"col-span-1 flex justify-center items-center"},c.createElement(E.Z,{to:"https://gallery.so/?ref=moonrepo",variant:"muted",title:"(Gallery)"},c.createElement(x,{className:"w-full max-w-full"}))),c.createElement("div",{className:"col-span-1 flex justify-start items-center"},c.createElement(E.Z,{href:"#",onClick:w,variant:"muted",title:"List your company here"},c.createElement(m.Z,{icon:s.EQ8,className:"text-3xl"})))))))}var N,Z=a(94141),k=a(64654);function V(){return V=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...l}=e;return c.createElement("svg",V({viewBox:"0 0 320 51",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":a},l),t?c.createElement("title",{id:a},t):null,N||(N=c.createElement("path",{fill:"currentColor",d:"M77.67.22C67.58.22 59.41 8.4 59.41 18.48s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S87.76.22 77.67.22zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c0 6.17-5.01 11.18-11.18 11.18zM118.94.22c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S129.03.22 118.94.22zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c0 6.17-5.01 11.18-11.18 11.18zM300.59.22c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26S310.67.22 300.59.22zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c-.01 6.17-5.01 11.18-11.18 11.18zM39.26.22c-4.76 0-9.01 2.16-11.83 5.55C24.6 2.38 20.35.22 15.6.22 7.09.22.19 7.12.19 15.63v21.12h7.09V15.62A8.32 8.32 0 0 1 15.6 7.3c4.39 0 7.98 3.41 8.29 7.72-.01.2-.03.4-.03.6v21.12h7.15V15.62c0-.2-.02-.4-.03-.6.31-4.31 3.9-7.72 8.29-7.72a8.32 8.32 0 0 1 8.32 8.32v21.12h7.09V15.62C54.66 7.11 47.76.22 39.26.22zm118.09 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V15.62a8.32 8.32 0 0 1 16.64 0v21.12h7.09V15.62c0-8.51-6.9-15.4-15.41-15.4zm37.61 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V15.62a8.32 8.32 0 0 1 8.32-8.32V.22zm41.27 18.26c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c5.04 0 9.61-2.04 12.91-5.35l-5.01-5.01a11.149 11.149 0 0 1-7.9 3.27c-4.94 0-9.12-3.21-10.6-7.65h28.52c.22-1.14.34-2.31.34-3.52zM217.97 7.3c4.94 0 9.12 3.21 10.6 7.65h-21.2c1.48-4.44 5.66-7.65 10.6-7.65zm59.65 11.18c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26v32.73h7.09v-18.3c3.09 2.4 6.96 3.84 11.18 3.84 10.07-.01 18.25-8.18 18.25-18.27zm-7.09 0c0 6.17-5 11.18-11.18 11.18s-11.18-5-11.18-11.18c0-6.17 5-11.18 11.18-11.18s11.18 5.01 11.18 11.18z"})))};function M(){const{siteConfig:e}=(0,o.default)();return c.createElement(k.Z,{title:e.tagline,description:"From build to deploy, moonrepo is a better way to manage codebases, save developer time, and boost your business."},c.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600"},c.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col justify-center items-center"},c.createElement("h1",{className:"text-white"},c.createElement(j,{height:65})),c.createElement("h2",{className:"mb-3 text-white font-medium text-center text-3xl sm:text-4xl md:text-5xl"},"New era of productivity tooling"),c.createElement("p",{className:"mm-0 text-white text-md text-center opacity-60 px-4 sm:text-lg md:text-xl md:max-w-3xl"},"From build to deploy, moonrepo is a better way to manage codebases, save developer time, and boost your business."))),c.createElement("main",{className:"bg-gradient-to-b from-slate-600 via-blurple-600 to-white"},c.createElement(u,{id:"moon",color:"text-blurple-400",suptitle:"A system for a solid foundation",title:"Supercharge your codebase",logo:c.createElement("img",{src:"/brand/moon/icon.svg",height:75,className:"block"}),description:c.createElement(c.Fragment,null,"For repositories with multiple projects, any number of languages, and team members constantly pushing changes,"," ",c.createElement(E.Z,{href:"/moon",size:"lg"},"moon")," ","will help simplify the experience of working in and maintaining a complex monorepo."),cta:{children:"Learn more about moon",color:"bg-blurple-400",href:"/moon"},items:[{description:"Never run the same task twice. With our smart hashing, robust caching, and efficient task execution, moon will avoid unnecessary work.",icon:s.fjp,title:"Efficient task orchestation"},{description:"Neatly organize your codebase, declare ownership information, and simplify project discovery.",icon:s.Bkj,title:"Better project organization"},{description:c.createElement(c.Fragment,null,"With our ",c.createElement(E.Z,{href:"#proto"},"integrated toolchain"),", development environments will be spun up in minutes, ensuring the exact tools and versions are used across developers and machines."),icon:s.AlB,title:"Integrated development environment"}]}),c.createElement(u,{reversed:!0,stretched:!0,id:"moonbase",color:"text-teal-700",suptitle:"A service to expand to the cloud",title:"Accelerate your pipelines",logo:c.createElement("img",{src:"/brand/moonbase/icon.svg",height:75,className:"block"}),description:c.createElement(c.Fragment,null,"With our hosted service"," ",c.createElement(E.Z,{href:"/moon",size:"lg"},"moonbase"),", easily cache build artifacts to reduce CI times, gain insight into your CI pipelines, track the health of your repositories, and overall cut costs."),cta:{children:"Learn more about moonbase",color:"bg-teal-600",href:"/moonbase"}},c.createElement("div",{className:"relative sm:pb-8 h-full"},c.createElement(Z.Z,null))),c.createElement(u,{stretched:!0,id:"proto",color:"text-pink-600",suptitle:"A toolchain for the modern era",title:"Automate your environments",logo:c.createElement("img",{src:"/brand/proto/icon.svg",height:75,className:"block"}),description:c.createElement(c.Fragment,null,"Remove the hassle of managing and enforcing specific versions of programming languages across teams or projects. With"," ",c.createElement(E.Z,{href:"/moon",size:"lg"},"proto"),", our modern version manager, this entire workflow is automated away through a single tool."),cta:{children:"Learn more about proto",color:"bg-pink-600",href:"/proto"},items:[{description:"Manage versions of multiple languages and dependency managers through a single interface. A single source of truth.",icon:s.pmO,title:"Multi-language support"},{description:"Detects and infers versions and semantics from a language's ecosystem for maximum compatibility and interoperability.",icon:s.XEC,title:"Contextual version detection"},{description:"Download, install, and run tools with lightspeed, thanks to our Rust based foundation.",icon:s.BDt,title:"Lightspeed interface"}]})),c.createElement(y,null))}}}]); \ No newline at end of file diff --git a/assets/js/1e76467f.03d81dde.js b/assets/js/1e76467f.03d81dde.js new file mode 100644 index 00000000000..4f0996ecf8f --- /dev/null +++ b/assets/js/1e76467f.03d81dde.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76939],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,b=u["".concat(s,".").concat(d)]||u[d]||m[d]||l;return r?o.createElement(b,a(a({ref:t},p),{},{components:r})):o.createElement(b,a({ref:t},p))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,a[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var o=r(25773),n=(r(27378),r(35318));const l={title:"list-global"},a=void 0,i={unversionedId:"proto/commands/list-global",id:"proto/commands/list-global",title:"list-global",description:"The proto list-global (or proto lsg) command will list installed global dependencies (and",source:"@site/docs/proto/commands/list-global.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/list-global",permalink:"/docs/proto/commands/list-global",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/list-global.mdx",tags:[],version:"current",frontMatter:{title:"list-global"},sidebar:"proto",previous:{title:"list",permalink:"/docs/proto/commands/list"},next:{title:"list-remote",permalink:"/docs/proto/commands/list-remote"}},s={},c=[{value:"Arguments",id:"arguments",level:3}],p={toc:c};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"proto list-global ")," (or ",(0,n.kt)("inlineCode",{parentName:"p"},"proto lsg"),") command will list installed global dependencies (and\ntheir canonical file location) by scanning the file system at the tool's global bins directory."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto list-global go\ngopls - ~/go/bin/gopls\nmockery - ~/go/bin/mockery\nreflex - ~/go/bin/reflex\n")),(0,n.kt)("h3",{id:"arguments"},"Arguments"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"")," - Type of tool.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1e76467f.c9dfd363.js b/assets/js/1e76467f.c9dfd363.js deleted file mode 100644 index de0f00da1e1..00000000000 --- a/assets/js/1e76467f.c9dfd363.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6939],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,b=u["".concat(s,".").concat(d)]||u[d]||m[d]||l;return r?o.createElement(b,a(a({ref:t},p),{},{components:r})):o.createElement(b,a({ref:t},p))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,a[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var o=r(25773),n=(r(27378),r(35318));const l={title:"list-global"},a=void 0,i={unversionedId:"proto/commands/list-global",id:"proto/commands/list-global",title:"list-global",description:"The proto list-global (or proto lsg) command will list installed global dependencies (and",source:"@site/docs/proto/commands/list-global.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/list-global",permalink:"/docs/proto/commands/list-global",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/list-global.mdx",tags:[],version:"current",frontMatter:{title:"list-global"},sidebar:"proto",previous:{title:"list",permalink:"/docs/proto/commands/list"},next:{title:"list-remote",permalink:"/docs/proto/commands/list-remote"}},s={},c=[{value:"Arguments",id:"arguments",level:3}],p={toc:c};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"proto list-global ")," (or ",(0,n.kt)("inlineCode",{parentName:"p"},"proto lsg"),") command will list installed global dependencies (and\ntheir canonical file location) by scanning the file system at the tool's global bins directory."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto list-global go\ngopls - ~/go/bin/gopls\nmockery - ~/go/bin/mockery\nreflex - ~/go/bin/reflex\n")),(0,n.kt)("h3",{id:"arguments"},"Arguments"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"")," - Type of tool.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1e90ea6d.1745a80b.js b/assets/js/1e90ea6d.1745a80b.js new file mode 100644 index 00000000000..76b8d18a1b2 --- /dev/null +++ b/assets/js/1e90ea6d.1745a80b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38428],{1394:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/vcs","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1e90ea6d.d22b431f.js b/assets/js/1e90ea6d.d22b431f.js deleted file mode 100644 index a3267d79fff..00000000000 --- a/assets/js/1e90ea6d.d22b431f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8428],{1394:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/vcs","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2048b789.3cb580dd.js b/assets/js/2048b789.3cb580dd.js deleted file mode 100644 index d3dd8dcccf5..00000000000 --- a/assets/js/2048b789.3cb580dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6861],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),u=s(r),g=n,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},c),{},{components:r})):o.createElement(f,i({ref:t},c))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:n,i[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));const a={slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},i=void 0,p={permalink:"/blog/proto-v0.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx",source:"@site/blog/2023-03-15_proto-v0.3.mdx",title:"proto v0.3 - Improved npm, go, and version requirement support",description:"With this release, we're improving some workflows and version detection logic based on initial",date:"2023-03-15T00:00:00.000Z",formattedDate:"March 15, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"npm",permalink:"/blog/tags/npm"},{label:"go",permalink:"/blog/tags/go"}],readingTime:1.395,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},prevItem:{title:"moon v1.0 - Official release! Project constraints, tagging, and more!",permalink:"/blog/moon-v1.0"},nextItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"}},l={image:r(11794).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"With this release, we're improving some workflows and version detection logic based on initial\nfeedback."))}m.isMDXComponent=!0},11794:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/v0.3-327da652b09512c04488c3e94ae70c17.png"}}]); \ No newline at end of file diff --git a/assets/js/2048b789.658021f8.js b/assets/js/2048b789.658021f8.js new file mode 100644 index 00000000000..f8c1ef95171 --- /dev/null +++ b/assets/js/2048b789.658021f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36861],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),u=s(r),g=n,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},c),{},{components:r})):o.createElement(f,i({ref:t},c))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:n,i[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));const a={slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},i=void 0,p={permalink:"/blog/proto-v0.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx",source:"@site/blog/2023-03-15_proto-v0.3.mdx",title:"proto v0.3 - Improved npm, go, and version requirement support",description:"With this release, we're improving some workflows and version detection logic based on initial",date:"2023-03-15T00:00:00.000Z",formattedDate:"March 15, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"npm",permalink:"/blog/tags/npm"},{label:"go",permalink:"/blog/tags/go"}],readingTime:1.395,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},prevItem:{title:"moon v1.0 - Official release! Project constraints, tagging, and more!",permalink:"/blog/moon-v1.0"},nextItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"}},l={image:r(11794).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"With this release, we're improving some workflows and version detection logic based on initial\nfeedback."))}m.isMDXComponent=!0},11794:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/v0.3-327da652b09512c04488c3e94ae70c17.png"}}]); \ No newline at end of file diff --git a/assets/js/204dd830.4b6dbd29.js b/assets/js/204dd830.4b6dbd29.js new file mode 100644 index 00000000000..953d3275a3d --- /dev/null +++ b/assets/js/204dd830.4b6dbd29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12391],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),s=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(u.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=s(r),d=a,f=p["".concat(u,".").concat(d)]||p[d]||m[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=p;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),i=r(35595),u=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:r,selectedValue:i,selectValue:u,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,r=m.indexOf(t),n=s[r].value;n!==i&&(p(t),u(n))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=m.indexOf(e.currentTarget)+1;t=m[r]??m[0];break}case"ArrowLeft":{const r=m.indexOf(e.currentTarget)-1;t=m[r]??m[m.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>m.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),r??t)})))}function p(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(m,(0,n.Z)({},e,t)),a.createElement(p,(0,n.Z)({},e,t)))}function f(e){const t=(0,u.Z)();return a.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>p});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),i=r(71819);function u(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??u(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function p(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[p,d]=m({queryString:r,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),b=(()=>{const e=p??f;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{b&&u(b)}),[b]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:l="center",padding:i="1rem"}=e;return n.createElement("div",{style:{marginBottom:i,marginTop:i,textAlign:l}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},53293:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798),r(76911),r(88109);const o={slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},l=void 0,i={permalink:"/blog/v0.25",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx",source:"@site/blog/2023-02-27_v0.25.mdx",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",description:"With this release, we're landing Deno, our first supported language besides Node.js, and improving",date:"2023-02-27T00:00:00.000Z",formattedDate:"February 27, 2023",tags:[{label:"deno",permalink:"/blog/tags/deno"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"offline",permalink:"/blog/tags/offline"},{label:"github",permalink:"/blog/tags/github"}],readingTime:4.475,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},prevItem:{title:"Introducing proto, a next-generation toolchain manager!",permalink:"/blog/proto"},nextItem:{title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",permalink:"/blog/v0.24"}},u={image:r(44718).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're landing Deno, our first supported language besides Node.js, and improving\ninteroperability of languages as a whole."))}m.isMDXComponent=!0},44718:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.25-a7107e8421326425d72769c0742873ac.png"}}]); \ No newline at end of file diff --git a/assets/js/204dd830.b1833362.js b/assets/js/204dd830.b1833362.js deleted file mode 100644 index 2792461bdef..00000000000 --- a/assets/js/204dd830.b1833362.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2391],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),s=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(u.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=s(r),d=a,f=p["".concat(u,".").concat(d)]||p[d]||m[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=p;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),i=r(35595),u=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:r,selectedValue:i,selectValue:u,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,r=m.indexOf(t),n=s[r].value;n!==i&&(p(t),u(n))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=m.indexOf(e.currentTarget)+1;t=m[r]??m[0];break}case"ArrowLeft":{const r=m.indexOf(e.currentTarget)-1;t=m[r]??m[m.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>m.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),r??t)})))}function p(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(m,(0,n.Z)({},e,t)),a.createElement(p,(0,n.Z)({},e,t)))}function f(e){const t=(0,u.Z)();return a.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>p});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),i=r(71819);function u(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??u(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function p(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[p,d]=m({queryString:r,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),b=(()=>{const e=p??f;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{b&&u(b)}),[b]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:l="center",padding:i="1rem"}=e;return n.createElement("div",{style:{marginBottom:i,marginTop:i,textAlign:l}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},53293:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798),r(76911),r(88109);const o={slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},l=void 0,i={permalink:"/blog/v0.25",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx",source:"@site/blog/2023-02-27_v0.25.mdx",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",description:"With this release, we're landing Deno, our first supported language besides Node.js, and improving",date:"2023-02-27T00:00:00.000Z",formattedDate:"February 27, 2023",tags:[{label:"deno",permalink:"/blog/tags/deno"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"offline",permalink:"/blog/tags/offline"},{label:"github",permalink:"/blog/tags/github"}],readingTime:4.475,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},prevItem:{title:"Introducing proto, a next-generation toolchain manager!",permalink:"/blog/proto"},nextItem:{title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",permalink:"/blog/v0.24"}},u={image:r(44718).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're landing Deno, our first supported language besides Node.js, and improving\ninteroperability of languages as a whole."))}m.isMDXComponent=!0},44718:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.25-a7107e8421326425d72769c0742873ac.png"}}]); \ No newline at end of file diff --git a/assets/js/2172420b.7f574c46.js b/assets/js/2172420b.7f574c46.js deleted file mode 100644 index 40a5d52a0e6..00000000000 --- a/assets/js/2172420b.7f574c46.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2441],{16728:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/generator","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2172420b.a8634052.js b/assets/js/2172420b.a8634052.js new file mode 100644 index 00000000000..d1d13b2ab13 --- /dev/null +++ b/assets/js/2172420b.a8634052.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62441],{16728:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/generator","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/21947.d4902817.js b/assets/js/21947.d4902817.js new file mode 100644 index 00000000000..350c71ac8fe --- /dev/null +++ b/assets/js/21947.d4902817.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21947],{21947:(c,s,z)=>{z.d(s,{$IR:()=>e,AKf:()=>f,AlB:()=>j,Azy:()=>o,BC0:()=>w,BDt:()=>E,Bkj:()=>O,CSB:()=>x,EQ8:()=>J,E_d:()=>B,Ff$:()=>n,HX7:()=>g,Hw7:()=>l,I85:()=>h,JUO:()=>t,Krp:()=>p,OxJ:()=>i,QGx:()=>H,XEC:()=>L,XEr:()=>b,ar8:()=>a,auv:()=>V,b2$:()=>C,cp3:()=>A,dzC:()=>D,eDR:()=>N,fjp:()=>y,gfM:()=>r,h94:()=>$,iJk:()=>Q,m_D:()=>m,o$R:()=>S,pmO:()=>k,tx1:()=>v,wEO:()=>d,zZQ:()=>u});var V={prefix:"fad",iconName:"sliders-up",icon:[512,512,["sliders-v"],"f3f1",["M96 0C78.3 0 64 14.3 64 32V86.7C73.8 82.4 84.6 80 96 80s22.2 2.4 32 6.7V32c0-17.7-14.3-32-32-32zM64 233.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V233.3c-9.8 4.3-20.6 6.7-32 6.7s-22.2-2.4-32-6.7zM256 0c-17.7 0-32 14.3-32 32V278.7c9.8-4.3 20.6-6.7 32-6.7s22.2 2.4 32 6.7V32c0-17.7-14.3-32-32-32zM224 425.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V425.3c-9.8 4.3-20.6 6.7-32 6.7s-22.2-2.4-32-6.7zM448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32v86.7c9.8-4.3 20.6-6.7 32-6.7s22.2 2.4 32 6.7V32zM384 265.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V265.3c-9.8 4.3-20.6 6.7-32 6.7s-22.2-2.4-32-6.7z","M96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 112A80 80 0 1 0 96 80a80 80 0 1 0 0 160zm160 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 112a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM384 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm112 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z"]]},H={prefix:"fad",iconName:"fingerprint",icon:[512,512,[],"f577",["M256 80c97.2 0 176 78.8 176 176v24.9c0 27.7-1.7 55.3-5 82.7c-1.4 11.7-11.5 20.3-23.3 20.3c-14.7 0-25.9-13.2-24.2-27.8c3-24.9 4.4-50.1 4.4-75.3V256c0-70.7-57.3-128-128-128c-11.6 0-22.8 1.5-33.4 4.4c-10.6 2.9-22.3 .4-29.4-7.9c-10.4-12.1-6.9-30.9 8.3-35.9C218.6 83 237 80 256 80zM150.7 148.7c8.2 9.6 7.5 23.8 .2 34.2C136.5 203.6 128 228.8 128 256v24.9c0 28.9-3.3 57.7-9.7 85.8C115.9 377 106.6 384 96.1 384c-15.9 0-27.3-15.6-23.9-31.1c5.2-23.6 7.8-47.7 7.8-71.9V256c0-40.6 13.7-78 36.8-107.7c8.5-11 24.8-10.2 33.9 .4zM280 256v24.9c0 65.8-12.1 131-35.7 192.4l-5.9 15.3c-4.8 12.4-18.6 18.5-31 13.8s-18.5-18.6-13.8-31l5.9-15.3C221 400.2 232 340.8 232 280.9V256c0-13.3 10.7-24 24-24s24 10.7 24 24z","M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256c0-18.1-1.9-35.8-5.5-52.9zM352 256c0-53-43-96-96-96s-96 43-96 96v24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7V256c0-28.7 23.3-52 52-52s52 23.3 52 52v24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1V256z"]]},a={prefix:"fad",iconName:"merge",icon:[512,512,[],"e526",["M243.8 252l3.2 4L154.2 372c-6.1 7.6-15.3 12-25 12H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h97.2c29.2 0 56.7-13.3 75-36l99.2-124h15.4c-29.2 0-56.7-13.3-75-36z","M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32h97.2c9.7 0 18.9 4.4 25 12l89.6 112c18.2 22.8 45.8 36 75 36H384v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c6-6 9.4-14.1 9.4-22.6s-3.4-16.6-9.4-22.6l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H318.8c-9.7 0-18.9-4.4-25-12L204.2 100c-18.2-22.8-45.8-36-75-36H32z"]]},e={prefix:"fad",iconName:"webhook",icon:[576,512,[],"e5d5",["M210.1 110C220 67 262.9 40.1 306 50.1c41.1 9.5 67.5 49.2 61.1 90.2c-2.1 13.1 6.9 25.4 20 27.4s25.4-6.9 27.4-20C424.8 82 382.6 18.5 316.8 3.3c-68.9-15.9-137.6 27-153.5 95.9c-10.7 46.3 5.2 92.6 37.7 122.7L129.7 336c17.7 .6 32.9 10.7 40.7 25.4l82.8-132.5c3.4-5.4 4.5-11.9 3-18.1s-5.3-11.6-10.7-15c-28.2-17.6-43.4-51.7-35.5-85.9zm120.3 40.5c-7.8 14.7-23.1 24.8-40.7 25.4l82.8 132.5c3.4 5.4 8.8 9.2 15 10.7s12.7 .3 18.1-3c30.9-19.3 72.1-15.5 99 11.3c31.2 31.2 31.2 81.9 0 113.1c-26.8 26.8-68.1 30.6-99 11.3c-11.2-7-26-3.6-33.1 7.6s-3.6 26 7.6 33.1c49.4 31 115.4 25 158.4-18c50-50 50-131 0-181c-37-37-91-46.6-136.8-28.9L330.4 150.5zM110.1 278.8c-5.1-12.2-19.1-18-31.4-12.9C22.1 289.4-11 351 3.3 412.8c15.9 68.9 84.6 111.8 153.5 95.9c51-11.8 87.7-52.5 97-100.7H406.4c-4.1-7.1-6.4-15.3-6.4-24s2.3-16.9 6.4-24H232c-6.4 0-12.5 2.5-17 7s-7 10.6-7 17c0 36.4-25 69.4-62 77.9c-43.1 9.9-86-16.9-95.9-60c-8.9-38.6 11.7-77.1 47.1-91.8c12.2-5.1 18-19.1 12.9-31.4z","M288 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM176 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm320 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z"]]},i={prefix:"fad",iconName:"radar",icon:[512,512,[],"e024",["M350.9 127.2l-46.1 46.1c-14.3-8.4-31-13.3-48.8-13.3c-53 0-96 43-96 96s43 96 96 96s96-43 96-96h64c0 73.5-49.6 135.5-117.2 154.2C290.8 394.7 274.7 384 256 384s-34.8 10.7-42.8 26.2c-51.7-14.3-92.8-53.9-109.4-104.6c14.4-8.3 24.1-23.8 24.1-41.7c0-19.4-11.5-36.1-28-43.7C116.2 149.1 179.9 96 256 96c35.5 0 68.3 11.6 94.9 31.2zm22.8-22.8C341.2 79 300.4 64 256 64C163.1 64 85.7 129.9 67.9 217.6C47.2 222.9 32 241.7 32 264c0 23.8 17.3 43.6 40.1 47.4c19.3 64.3 71.5 114.4 137 130.9C213.8 463.8 233 480 256 480s42.2-16.2 46.9-37.8C386.3 421.3 448 345.9 448 256h64c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0c62.1 0 118.9 22.1 163.3 58.8l-45.5 45.5z","M497 49c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-182 182c-7.7-3.3-16.1-5.1-25-5.1c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64c0-8.9-1.8-17.3-5.1-25L497 49z"]]},l={prefix:"fad",iconName:"sitemap",icon:[576,512,[],"f0e8",["M264 280v40h48V280H464c4.4 0 8 3.6 8 8v32h48V288c0-30.9-25.1-56-56-56H312V192H264v40H112c-30.9 0-56 25.1-56 56v32h48V288c0-4.4 3.6-8 8-8H264z","M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V80zM48 320h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48zm208 0h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48zm208 0h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48z"]]},M={prefix:"fad",iconName:"box-taped",icon:[448,512,["box-alt"],"f49a",["M50.7 58.5C58.9 42.3 75.5 32 93.7 32H192L160 160H0L50.7 58.5zM288 160v96c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V160H288zm0 0L256 32h98.3c18.2 0 34.8 10.3 42.9 26.5L448 160H288z","M160 160H0V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V160H288v96c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V160z"]]},m=M,o={prefix:"fad",iconName:"bell-on",icon:[640,512,[128365],"f8fa",["M320 0c-17.7 0-32 14.3-32 32V51.2C215 66 160 130.6 160 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S115.4 416 128 416H512c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C497.3 319.2 480 273.9 480 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32z","M586.7 53.5c11.9-5.9 16.7-20.3 10.7-32.2s-20.3-16.7-32.2-10.7l-64 32c-11.9 5.9-16.7 20.3-10.7 32.2s20.3 16.7 32.2 10.7l64-32zM0 200c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H24c-13.3 0-24 10.7-24 24zm512 0c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H536c-13.3 0-24 10.7-24 24zM42.5 21.3c-5.9 11.9-1.1 26.3 10.7 32.2l64 32c11.9 5.9 26.3 1.1 32.2-10.7s1.1-26.3-10.7-32.2l-64-32C62.9 4.6 48.5 9.4 42.5 21.3zm322.7 472c12-12 18.7-28.3 18.7-45.3H320 256c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z"]]},f={prefix:"fad",iconName:"notes-medical",icon:[512,512,[],"f481",["M96 96V352c0 35.3 28.7 64 64 64H357.5c17 0 33.3-6.7 45.3-18.7l58.5-58.5c12-12 18.7-28.3 18.7-45.3V96c0-35.3-28.7-64-64-64H160c-35.3 0-64 28.7-64 64zm160 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V256H208c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16h48V144z","M296 464c13.3 0 24 10.7 24 24s-10.7 24-24 24H136C60.9 512 0 451.1 0 376V152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88H296zM256 144c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48l48 0c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V256H208c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16l48 0V144z"]]},n={prefix:"fad",iconName:"microchip",icon:[512,512,[],"f2db",["M152 0c-13.3 0-24 10.7-24 24V64h48V24c0-13.3-10.7-24-24-24zm80 24V64h48V24c0-13.3-10.7-24-24-24s-24 10.7-24 24zm104 0V64h48V24c0-13.3-10.7-24-24-24s-24 10.7-24 24zM488 128H448v48h40c13.3 0 24-10.7 24-24s-10.7-24-24-24zm0 104H448v48h40c13.3 0 24-10.7 24-24s-10.7-24-24-24zm0 104H448v48h40c13.3 0 24-10.7 24-24s-10.7-24-24-24zM384 488V448H336v40c0 13.3 10.7 24 24 24s24-10.7 24-24zM280 448H232v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448zm-104 0H128v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448zM24 384H64V336H24c-13.3 0-24 10.7-24 24s10.7 24 24 24zM64 280V232H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64zM24 128c-13.3 0-24 10.7-24 24s10.7 24 24 24H64V128H24zm328 32H160V352H352V160z","M128 64c-35.3 0-64 28.7-64 64V384c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H128zm32 64H352c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32z"]]},C={prefix:"fad",iconName:"aperture",icon:[512,512,[],"e2df",["M336.4 12.9C400.2 34 453 79.5 483.5 138.4c5.2 10.1-2.5 21.6-13.8 21.6H265.2c-12.3 0-20-13.3-13.9-24l67-116c3.6-6.3 11.1-9.4 18-7.1zM0 256c0-50.9 14.9-98.3 40.5-138.2c6.1-9.5 19.9-8.6 25.6 1.2L168.2 296c6.2 10.7-1.5 24-13.9 24H20.5c-7.3 0-13.7-4.9-15.2-12.1C1.8 291.2 0 273.8 0 256zM256 512c-4 0-7.9-.1-11.9-.3c-11.3-.5-17.5-12.9-11.8-22.8L334.5 312c6.2-10.7 21.6-10.7 27.7 0l66.9 115.9c3.6 6.3 2.6 14.3-2.9 19.2C381.1 487.5 321.4 512 256 512z","M256 0c4 0 7.9 .1 11.9 .3c11.3 .5 17.4 12.9 11.8 22.8L177.5 200c-6.2 10.7-21.6 10.7-27.7 0L82.8 84.1c-3.6-6.3-2.6-14.3 2.9-19.2C130.9 24.5 190.6 0 256 0zM193.6 492c-3.6 6.3-11.1 9.4-18 7.1C111.8 478 59 432.5 28.5 373.6C23.3 363.5 31 352 42.3 352H246.8c12.3 0 20 13.3 13.9 24l-67 116zm277.9-97.8c-6.1 9.5-19.9 8.6-25.6-1.2L343.8 216c-6.2-10.7 1.5-24 13.9-24H491.5c7.3 0 13.7 4.9 15.2 12.1c3.5 16.8 5.3 34.1 5.3 51.9c0 50.9-14.9 98.3-40.5 138.2z"]]},r={prefix:"fad",iconName:"star-shooting",icon:[512,512,[127776],"e036",["M313 7c-9.4-9.4-24.6-9.4-33.9 0L231 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9zM505 199c-9.4-9.4-24.6-9.4-33.9 0l-48 48c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9zM505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L327 151c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L505 41z","M213.4 157.4c-8.8-17.9-34.3-17.9-43.1 0l-46.3 94L20.5 266.5C.9 269.3-7 293.5 7.2 307.4l74.9 73.2L64.5 483.9c-3.4 19.6 17.2 34.6 34.8 25.3l92.6-48.8 92.6 48.8c17.6 9.3 38.2-5.7 34.8-25.3L301.6 380.6l74.9-73.2c14.2-13.9 6.4-38.1-13.3-40.9L259.7 251.4l-46.3-94z"]]},v={prefix:"fad",iconName:"scroll",icon:[576,512,[128220],"f70e",["M128 96V400c0 44.2 35.8 80 80 80s80-35.8 80-80V384c0-17.7 14.3-32 32-32H480V96c0-35.3-28.7-64-64-64H64c35.3 0 64 28.7 64 64z","M128 160H32c-17.7 0-32-14.3-32-32V96C0 60.7 28.7 32 64 32s64 28.7 64 64v64zM288 400V384c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32c0 53-43 96-96 96H208c44.2 0 80-35.8 80-80z"]]},d={prefix:"fad",iconName:"cloud-arrow-up",icon:[640,512,[62338,"cloud-upload","cloud-upload-alt"],"f0ee",["M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V392c0 13.3 10.7 24 24 24s24-10.7 24-24V257.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z","M223 297c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-39-39L344 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-134.1-39 39c-9.4 9.4-24.6 9.4-33.9 0z"]]},h={prefix:"fad",iconName:"shield-halved",icon:[512,512,["shield-alt"],"f3ed",["M256 0c.2 0 .5 0 .7 0c4.6 0 9.2 1 13.4 2.9L458.4 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-8.3 4-17.4 6-26.4 6V0H256z","M256.7 0c-.2 0-.5 0-.7 0c-4.6 0-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c8.3 4 17.4 6 26.4 6V0h.7z"]]},p={prefix:"fad",iconName:"layer-group",icon:[576,512,[],"f5fd",["M324.9 279.8l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z","M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 337.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2z"]]},L={prefix:"fad",iconName:"leaf",icon:[512,512,[],"f06c",["M96.4 260.1C102.5 168.5 178.8 96 272 96l104 0c42.7 0 79.9-23.9 98.8-59.1c3.5-6.5 13.6-6.8 16.2 .1c13.5 36.5 21.1 77 21.1 119.6C512 317.1 405.1 447.3 273 448l-1 0c-81.7 0-150.4-55.7-170.2-131.2C131.7 289 171.9 272 216 272h72c13.3 0 24-10.7 24-24s-10.7-24-24-24H216c-44.2 0-85.4 13.3-119.6 36.1z","M216 272c-92.8 0-168 75.2-168 168v16c0 13.3-10.7 24-24 24s-24-10.7-24-24V440C0 320.7 96.7 224 216 224h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H216z"]]},x={prefix:"fad",iconName:"space-station-moon",icon:[512,512,[],"e033",["M512 256c0 7.8-.3 15.5-1 23.1C438.8 304.7 351.2 320 256 320s-182.8-15.3-255-40.9c-.7-7.6-1-15.3-1-23.1C0 114.6 114.6 0 256 0S512 114.6 512 256zM256 512C134.9 512 33.4 427.9 6.8 314.8C79.4 338.4 164.7 352 256 352s176.6-13.6 249.2-37.2C478.6 427.9 377.1 512 256 512zM192 240a80 80 0 1 0 0-160 80 80 0 1 0 0 160z","M224 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-112 0a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM6.8 314.8C4.1 303.2 2.1 291.3 1 279.1C73.2 304.7 160.8 320 256 320s182.8-15.3 255-40.9c-1.1 12.2-3 24.1-5.8 35.8C432.6 338.4 347.3 352 256 352s-176.6-13.6-249.2-37.2z"]]},N={prefix:"fad",iconName:"screwdriver-wrench",icon:[512,512,["tools"],"f7d9",["M168.4 247.6L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7zM429 274.5c49-23 83-72.8 83-130.5c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7H352c-8.8 0-16-7.2-16-16V102.6c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144c0 .3 0 .5 0 .8l85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z","M47 7c8.5-8.5 22-9.4 31.6-2.1l104 80c5.9 4.5 9.4 11.6 9.4 19v54.1l109 109c29-14.7 65.4-10 89.6 14.3l112 112c12.5 12.5 12.5 32.8 0 45.3l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-112-112c-24.2-24.2-29-60.6-14.3-89.6l-109-109H104c-7.5 0-14.5-3.5-19-9.4L5 78.6C-2.4 69.1-1.5 55.6 7 47L47 7z"]]},t={prefix:"fad",iconName:"grid-dividers",icon:[512,512,[],"e3ad",["M64 96c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H64zm0 288c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H64zM192 128v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H224c-17.7 0-32 14.3-32 32zm32 256c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H224zM352 128v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H384c-17.7 0-32 14.3-32 32zm32 256c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H384z","M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zm0 288c-13.3 0-24 10.7-24 24s10.7 24 24 24H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24z"]]},u={prefix:"fad",iconName:"puzzle",icon:[512,512,[],"e443",["M320 0H448c35.3 0 64 28.7 64 64V192c0 8.8-7.2 16-16 16H444c-6.6 0-12 5.4-12 12v4c0 17.7-14.3 32-32 32s-32-14.3-32-32v-4c0-6.6-5.4-12-12-12l-36 0c-8.8 0-16-7.2-16-16V160c0-8.8 7.2-16 16-16h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-8.8 0-16-7.2-16-16V16c0-8.8 7.2-16 16-16zM224 448v64H64c-35.3 0-64-28.7-64-64V288H64c8.8 0 16-7.2 16-16V256c0-17.7 14.3-32 32-32s32 14.3 32 32v16c0 8.8 7.2 16 16 16h64v64c0 8.8-7.2 16-16 16H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h16c8.8 0 16 7.2 16 16z","M0 288H64c8.8 0 16-7.2 16-16V256c0-17.7 14.3-32 32-32s32 14.3 32 32v16c0 8.8 7.2 16 16 16h64V220c0-6.6 5.4-12 12-12h4c17.7 0 32-14.3 32-32s-14.3-32-32-32h-4c-6.6 0-12-5.4-12-12V80c0-8.8-7.2-16-16-16H64C28.7 64 0 92.7 0 128V288zm224 0v64c0 8.8-7.2 16-16 16H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h16c8.8 0 16 7.2 16 16v64H384c35.3 0 64-28.7 64-64V304c0-8.8-7.2-16-16-16H384c-8.8 0-16 7.2-16 16v16c0 17.7-14.3 32-32 32s-32-14.3-32-32V304c0-8.8-7.2-16-16-16H224z"]]},b={prefix:"fad",iconName:"rocket-launch",icon:[512,512,[128640],"e027",["M118.5 288H24c-8.7 0-16.7-4.7-20.9-12.2s-4.1-16.8 .4-24.2l52.8-86.9C69.3 143.2 92.6 130 117.8 130h80.8c-28.5 45.8-60.7 114.5-80.1 158zM382 313.4v80.8c0 25.2-13.1 48.5-34.6 61.5l-86.9 52.8c-7.4 4.5-16.7 4.7-24.2 .4s-12.2-12.2-12.2-20.9l0-96.2c43.9-19.1 112.4-50.3 158-78.4zM166.5 470C132.3 504.3 66 511 28.3 511.9c-16 .4-28.6-12.2-28.2-28.2C1 446 7.7 379.7 42 345.5c34.4-34.4 90.1-34.4 124.5 0s34.4 90.1 0 124.5zm-46.7-36.4c11.4-11.4 11.4-30 0-41.4s-30-11.4-41.4 0c-10.1 10.1-13 28.5-13.7 41.3c-.5 8 5.9 14.3 13.9 13.9c12.8-.7 31.2-3.7 41.3-13.7z","M223.7 391.9c-4-56-49.1-100.6-105.3-103.8c21.4-47.9 58.4-126.6 88.8-171.5C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-44.7 30.3-123.1 66.2-171.6 87.2zM424 128a40 40 0 1 0 -80 0 40 40 0 1 0 80 0z"]]},g={prefix:"fad",iconName:"square-kanban",icon:[448,512,[],"e488",["M64 480c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64zm64-160c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V288c0 17.7 14.3 32 32 32zm160 32c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V352zm-64-96c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32z","M288 352c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V352zM96 288c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V288zm128-32c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32z"]]},w={prefix:"fad",iconName:"user-secret",icon:[448,512,[128373],"f21b",["M128 169.6V184c0 22.1 17.9 40 40 40h12.4c16.5 0 31.1-10.6 36.3-26.2c2.3-7 12.2-7 14.5 0c5.2 15.6 19.9 26.2 36.3 26.2H280c22.1 0 40-17.9 40-40V169.6c5.5-.8 10.9-1.7 16-2.6v17c0 61.9-50.1 112-112 112s-112-50.1-112-112V167c5.1 .9 10.5 1.8 16 2.6z","M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 17.8 38.6 33.3 96 41.6V184c0 22.1 17.9 40 40 40h12.4c16.5 0 31.1-10.6 36.3-26.2c2.3-7 12.2-7 14.5 0c5.2 15.6 19.9 26.2 36.3 26.2H280c22.1 0 40-17.9 40-40V169.6c57.4-8.3 96-23.8 96-41.6c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm44.1 496H417.3c17 0 30.7-13.8 30.7-30.7c0-57-29.6-107.1-74.2-135.8L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4h-59L273.7 490.5l-34-116.6 17.8-29.6c6.4-10.7-1.3-24.2-13.7-24.2H224 204.3c-12.4 0-20.1 13.6-13.7 24.2l17.8 29.6-34 116.6L104.4 224h-59C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5L74.2 345.5C29.6 374.2 0 424.3 0 481.3c0 17 13.8 30.7 30.7 30.7H179.9h88.1z"]]},k={prefix:"fad",iconName:"solar-system",icon:[512,512,[],"e02f",["M411.8 368.2C434.6 336.6 448 297.9 448 256c0-106-86-192-192-192c-29 0-56.6 6.4-81.2 18c-4-22.5-17.4-41.8-36-53.6C173.9 10.2 213.7 0 256 0C397.4 0 512 114.6 512 256c0 56.3-18.2 108.3-48.9 150.6c-4.4-22-23.8-38.6-47.1-38.6c-1.4 0-2.8 .1-4.2 .2zm-74.7 61.9c3.8 22.6 17.1 41.9 35.6 53.8c-35 18-74.7 28.1-116.8 28.1C114.6 512 0 397.4 0 256c0-56.3 18.2-108.3 48.9-150.6C53.3 127.4 72.7 144 96 144c1.4 0 2.8-.1 4.2-.2C77.4 175.4 64 214.1 64 256c0 106 86 192 192 192c29 0 56.5-6.4 81.1-17.9zM256 152c-57.4 0-104 46.6-104 104s46.6 104 104 104s104-46.6 104-104c0-17.4-4.3-33.8-11.8-48.2c1.3 .1 2.5 .2 3.8 .2c16.9 0 31.3-10.5 37.2-25.3c12 21.7 18.8 46.7 18.8 73.3c0 83.9-68.1 152-152 152s-152-68.1-152-152s68.1-152 152-152c31.3 0 60.4 9.5 84.5 25.7C324 134.6 312 149.9 312 168c0 .1 0 .2 0 .4C295.8 158 276.6 152 256 152z","M96 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM416 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM392 168a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM256 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128z"]]},S={prefix:"fad",iconName:"circle-bolt",icon:[512,512,[],"e0fe",["M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm74.1-396.4c5.8 4.7 7.6 12.9 4.2 19.6L281.9 240H352c6.8 0 12.9 4.3 15.1 10.7s.2 13.5-5.1 17.8l-160 128c-5.9 4.7-14.2 4.7-20.1-.1s-7.6-12.9-4.3-19.6L230.1 272H160c-6.8 0-12.8-4.3-15.1-10.7s-.2-13.5 5.1-17.8l160-128c5.9-4.7 14.2-4.7 20.1 .1z","M334.3 135.2c3.4-6.7 1.6-14.9-4.2-19.6s-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7h70.1L177.7 376.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7H281.9l52.4-104.8z"]]},A={prefix:"fad",iconName:"timeline",icon:[640,512,[],"e29c",["M512 176c11.4 0 22.2-2.4 32-6.7V224h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H352v54.7c-9.8-4.3-20.6-6.7-32-6.7s-22.2 2.4-32 6.7V288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96V169.3c9.8 4.3 20.6 6.7 32 6.7s22.2-2.4 32-6.7V224H480V169.3c9.8 4.3 20.6 6.7 32 6.7z","M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0 104a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM512 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0 104a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM296 416a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z"]]},B={prefix:"fad",iconName:"chart-tree-map",icon:[512,512,[],"e0ea",["M304 192c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48H304zM48 272c-26.5 0-48 21.5-48 48V432c0 26.5 21.5 48 48 48H176c26.5 0 48-21.5 48-48V320c0-26.5-21.5-48-48-48H48z","M0 80C0 53.5 21.5 32 48 32H176c26.5 0 48 21.5 48 48V192c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80zm256 0c0-26.5 21.5-48 48-48H464c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H304c-26.5 0-48-21.5-48-48V80zm48 272H464c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H304c-26.5 0-48-21.5-48-48V400c0-26.5 21.5-48 48-48z"]]},E={prefix:"fad",iconName:"bolt",icon:[448,512,[9889,"zap"],"f0e7",["M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288H175.5L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7H272.5L349.4 44.6z",""]]},j={prefix:"fad",iconName:"toolbox",icon:[512,512,[129520],"f552",["M176 88v40H128V88c0-30.9 25.1-56 56-56H328c30.9 0 56 25.1 56 56v40H336V88c0-4.4-3.6-8-8-8H184c-4.4 0-8 3.6-8 8zM0 320H128v32c0 17.7 14.3 32 32 32s32-14.3 32-32V320H320v32c0 17.7 14.3 32 32 32s32-14.3 32-32V320H512v96c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320z","M0 320V234.5c0-17 6.7-33.3 18.7-45.3l42.5-42.5c12-12 28.3-18.7 45.3-18.7h299c17 0 33.3 6.7 45.3 18.7l42.5 42.5c12 12 18.7 28.3 18.7 45.3V320H384V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v32H192V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v32H0z"]]},y={prefix:"fad",iconName:"diagram-sankey",icon:[576,512,[],"e158",["M32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32H141.9l86.7 144.5c5.8 9.6 16.2 15.5 27.4 15.5H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H274.1l-57.6-96H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z","M294.4 44.8c6-8.1 15.5-12.8 25.6-12.8H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H336L249.6 211.2c-6 8.1-15.5 12.8-25.6 12.8H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H208L294.4 44.8z"]]},O={prefix:"fad",iconName:"diagram-project",icon:[576,512,["project-diagram"],"f542",["M144 224l80.3 107c2.5-24.2 22.9-43 47.7-43L191.7 181c-2.5 24.2-22.9 43-47.7 43zm48-64H384V96H192v64z","M0 80C0 53.5 21.5 32 48 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80zM224 336c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H272c-26.5 0-48-21.5-48-48V336zM432 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H432c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48z"]]},$={prefix:"fad",iconName:"message-code",icon:[512,512,[],"e1df",["M0 64C0 28.7 28.7 0 64 0H448c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H309.3L185.6 508.8c-4.8 3.6-11.3 4.2-16.8 1.5s-8.8-8.2-8.8-14.3V416H64c-35.3 0-64-28.7-64-64V64zm217 97c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-64 64c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47zM329 127c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9l-64-64z","M217 127c9.4 9.4 9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c9.4-9.4 24.6-9.4 33.9 0zm78.1 0c9.4-9.4 24.6-9.4 33.9 0l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"]]},D={prefix:"fad",iconName:"arrow-up-right-dots",icon:[576,512,[],"e4b7",["M528 128a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM400 256a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm128 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm336-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z","M128 32c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32V160c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3L54.6 310.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 64H160c-17.7 0-32-14.3-32-32z"]]},J={prefix:"fad",iconName:"circle-plus",icon:[512,512,["plus-circle"],"f055",["M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344V280H168c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z","M232 280v64c0 13.3 10.7 24 24 24s24-10.7 24-24V280h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V168c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64z"]]},Q={prefix:"fad",iconName:"rectangle-barcode",icon:[576,512,["barcode-alt"],"f463",["M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm56 96c13.3 0 24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm56 16c0-8.8 7.2-16 16-16s16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144zm88-16c13.3 0 24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm88 24c0-13.3 10.7-24 24-24s24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152zm112-24c8.8 0 16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144c0-8.8 7.2-16 16-16z","M96 152c0-13.3 10.7-24 24-24s24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152zm80-8c0-8.8 7.2-16 16-16s16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144zm88-16c13.3 0 24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm88 24c0-13.3 10.7-24 24-24s24 10.7 24 24V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V152zm112-24c8.8 0 16 7.2 16 16V368c0 8.8-7.2 16-16 16s-16-7.2-16-16V144c0-8.8 7.2-16 16-16z"]]}}}]); \ No newline at end of file diff --git a/assets/js/22e78681.9fa73b58.js b/assets/js/22e78681.9fa73b58.js new file mode 100644 index 00000000000..4082be2de4e --- /dev/null +++ b/assets/js/22e78681.9fa73b58.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74825],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),h=s(n),u=r,d=h["".concat(p,".").concat(u)]||h[u]||m[u]||o;return n?a.createElement(d,i(i({ref:t},c),{},{components:n})):a.createElement(d,i({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=h;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:o,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:r,title:o,className:"inline-block"}))}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?i[p]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},46071:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(25773),r=(n(27378),n(35318));n(9619),n(88109);const o={slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},i=void 0,l={permalink:"/blog/v0.22",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx",source:"@site/blog/2023-01-16_v0.22.mdx",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",description:"It's the first release of the year, and with this release, we're landing some quality of life",date:"2023-01-16T00:00:00.000Z",formattedDate:"January 16, 2023",tags:[{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"migrate",permalink:"/blog/tags/migrate"}],readingTime:2.805,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},prevItem:{title:"moon v0.23 - Scoped task inheritance, and project config updates",permalink:"/blog/v0.23"},nextItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"}},p={image:n(288).Z,authorsImageUrls:[void 0]},s=[{value:"New action pipeline",id:"new-action-pipeline",level:2},{value:"Expanded hashing functionality",id:"expanded-hashing-functionality",level:2},{value:"Project graph is now cached",id:"project-graph-is-now-cached",level:2},{value:"Migrate from Turborepo",id:"migrate-from-turborepo",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Renamed events",id:"renamed-events",level:3},{value:"Updated CLI options",id:"updated-cli-options",level:3},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:s};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"It's the first release of the year, and with this release, we're landing some quality of life\ninfrastructure and workflow improvements!"),(0,r.kt)("h2",{id:"new-action-pipeline"},"New action pipeline"),(0,r.kt)("p",null,'When running targets, we generate a graph of actions to execute in order within the action runner.\nAn action is one of "setup toolchain", "install dependencies", "run target", so on and so forth. Our\naction runner would then spawn threads for every action using the ',(0,r.kt)("a",{parentName:"p",href:"https://tokio.rs/"},"Tokio"),"\nruntime. While this worked great, concurrency was entirely abstracted away from us."),(0,r.kt)("p",null,"To mitigate this problem, we've implemented a new system for executing actions known as the action\npipeline (or simply pipeline), which implements a dynamically scaling thread pool on top of Tokio.\nThis provides us with more control over concurrency, starting with the new ",(0,r.kt)("inlineCode",{parentName:"p"},"--concurrency")," option,\nwhich restricts the number of threads (or CPU cores)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run :build --concurrency 2\n")),(0,r.kt)("h2",{id:"expanded-hashing-functionality"},"Expanded hashing functionality"),(0,r.kt)("p",null,"When we run targets in the pipeline, we hash a collection of inputs to calculate whether to continue\nrunning or to exit early. This functionality has been extremely beneficial for optimizing the\npipeline, and so, we've expanded the hasher for other use cases. To start, the following 2 workflows\nnow utilize the hasher:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"When determining to auto-install dependencies (",(0,r.kt)("inlineCode",{parentName:"li"},"npm install"),", etc), we now hash all production,\ndevelopment, and peer dependencies from applicable manifests (",(0,r.kt)("inlineCode",{parentName:"li"},"package.json"),"). This has resulted\nin more accurate installs, as we're no longer inadvertently installing when a non-dependency field\nis modified in a manifest. On top of this, will still take into account lockfile modified\ntimestamps."),(0,r.kt)("li",{parentName:"ul"},"When generating the project graph, we now hash all sources, aliases, and configuration files, to\ndetermine whether to load the project graph from the local cache.")),(0,r.kt)("h2",{id:"project-graph-is-now-cached"},"Project graph is now cached"),(0,r.kt)("p",null,"Because of the hashing improvements above, we're now able to cache the entirety of the project graph\ninto local cache. Depending on how many projects are in your workspace, you may see performance\nimprovements on subsequent runs as we're no longer re-building the project graph over and over\neverytime the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," binary is ran."),(0,r.kt)("h2",{id:"migrate-from-turborepo"},"Migrate from Turborepo"),(0,r.kt)("p",null,"Turborepo is a popular task runner for Node.js based monorepos, but doesn't support all the\nfunctionality that moon does. If you're looking to prototype moon, or migrate from Turborepo to moon\nholistically, we now support a new command\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/migrate/from-turborepo"},(0,r.kt)("inlineCode",{parentName:"a"},"moon migrate from-turborepo")),"."),(0,r.kt)("p",null,"This command will migrate the ",(0,r.kt)("inlineCode",{parentName:"p"},"turbo.json")," file to moon applicable configuration files!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon migrate from-turborepo\n")),(0,r.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,r.kt)("h3",{id:"renamed-events"},"Renamed events"),(0,r.kt)("p",null,"Because of the runner -> pipeline changes above, the ",(0,r.kt)("inlineCode",{parentName:"p"},"runner.*")," ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/webhooks"},"webhook"),"\nevents were renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"pipeline.*"),"."),(0,r.kt)("h3",{id:"updated-cli-options"},"Updated CLI options"),(0,r.kt)("p",null,"Renamed the ",(0,r.kt)("inlineCode",{parentName:"p"},"--upstream")," option to ",(0,r.kt)("inlineCode",{parentName:"p"},"--remote"),", to better align with Git terminology, and removed the\n",(0,r.kt)("inlineCode",{parentName:"p"},"--report")," option from ",(0,r.kt)("inlineCode",{parentName:"p"},"moon check")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run")," commands. Reports are now always created."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.22.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added Bun as a tier 1 language (doesn't do much at the moment)."),(0,r.kt)("li",{parentName:"ul"},"Added a ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/workspace#versionconstraint"},(0,r.kt)("inlineCode",{parentName:"a"},"versionConstraint")," setting")," in\n",(0,r.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml")," that enforces a requirement on the running moon binary."),(0,r.kt)("li",{parentName:"ul"},"Updated the ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/project#project"},(0,r.kt)("inlineCode",{parentName:"a"},"project")," fields")," in ",(0,r.kt)("inlineCode",{parentName:"li"},"moon.yml")," to be optional,\nexcluding ",(0,r.kt)("inlineCode",{parentName:"li"},"description"),"."),(0,r.kt)("li",{parentName:"ul"},"Internal improvements to remote caching and artifact uploading.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.23 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improved task inheritance workflow."),(0,r.kt)("li",{parentName:"ul"},"Glob support in task ",(0,r.kt)("inlineCode",{parentName:"li"},"outputs"),"."),(0,r.kt)("li",{parentName:"ul"},"Project-level environment variables.")))}m.isMDXComponent=!0},288:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.22-6d47d46b82e88207cd599d1bd3974022.png"}}]); \ No newline at end of file diff --git a/assets/js/22e78681.9fd34144.js b/assets/js/22e78681.9fd34144.js deleted file mode 100644 index 34957d4b5a2..00000000000 --- a/assets/js/22e78681.9fd34144.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4825],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),h=s(n),u=r,d=h["".concat(p,".").concat(u)]||h[u]||m[u]||o;return n?a.createElement(d,i(i({ref:t},c),{},{components:n})):a.createElement(d,i({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=h;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:o,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:r,title:o,className:"inline-block"}))}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?i[p]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},46071:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var a=n(25773),r=(n(27378),n(35318));n(9619),n(88109);const o={slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},i=void 0,l={permalink:"/blog/v0.22",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx",source:"@site/blog/2023-01-16_v0.22.mdx",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",description:"It's the first release of the year, and with this release, we're landing some quality of life",date:"2023-01-16T00:00:00.000Z",formattedDate:"January 16, 2023",tags:[{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"migrate",permalink:"/blog/tags/migrate"}],readingTime:2.805,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},prevItem:{title:"moon v0.23 - Scoped task inheritance, and project config updates",permalink:"/blog/v0.23"},nextItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"}},p={image:n(288).Z,authorsImageUrls:[void 0]},s=[{value:"New action pipeline",id:"new-action-pipeline",level:2},{value:"Expanded hashing functionality",id:"expanded-hashing-functionality",level:2},{value:"Project graph is now cached",id:"project-graph-is-now-cached",level:2},{value:"Migrate from Turborepo",id:"migrate-from-turborepo",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Renamed events",id:"renamed-events",level:3},{value:"Updated CLI options",id:"updated-cli-options",level:3},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:s};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"It's the first release of the year, and with this release, we're landing some quality of life\ninfrastructure and workflow improvements!"),(0,r.kt)("h2",{id:"new-action-pipeline"},"New action pipeline"),(0,r.kt)("p",null,'When running targets, we generate a graph of actions to execute in order within the action runner.\nAn action is one of "setup toolchain", "install dependencies", "run target", so on and so forth. Our\naction runner would then spawn threads for every action using the ',(0,r.kt)("a",{parentName:"p",href:"https://tokio.rs/"},"Tokio"),"\nruntime. While this worked great, concurrency was entirely abstracted away from us."),(0,r.kt)("p",null,"To mitigate this problem, we've implemented a new system for executing actions known as the action\npipeline (or simply pipeline), which implements a dynamically scaling thread pool on top of Tokio.\nThis provides us with more control over concurrency, starting with the new ",(0,r.kt)("inlineCode",{parentName:"p"},"--concurrency")," option,\nwhich restricts the number of threads (or CPU cores)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run :build --concurrency 2\n")),(0,r.kt)("h2",{id:"expanded-hashing-functionality"},"Expanded hashing functionality"),(0,r.kt)("p",null,"When we run targets in the pipeline, we hash a collection of inputs to calculate whether to continue\nrunning or to exit early. This functionality has been extremely beneficial for optimizing the\npipeline, and so, we've expanded the hasher for other use cases. To start, the following 2 workflows\nnow utilize the hasher:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"When determining to auto-install dependencies (",(0,r.kt)("inlineCode",{parentName:"li"},"npm install"),", etc), we now hash all production,\ndevelopment, and peer dependencies from applicable manifests (",(0,r.kt)("inlineCode",{parentName:"li"},"package.json"),"). This has resulted\nin more accurate installs, as we're no longer inadvertently installing when a non-dependency field\nis modified in a manifest. On top of this, will still take into account lockfile modified\ntimestamps."),(0,r.kt)("li",{parentName:"ul"},"When generating the project graph, we now hash all sources, aliases, and configuration files, to\ndetermine whether to load the project graph from the local cache.")),(0,r.kt)("h2",{id:"project-graph-is-now-cached"},"Project graph is now cached"),(0,r.kt)("p",null,"Because of the hashing improvements above, we're now able to cache the entirety of the project graph\ninto local cache. Depending on how many projects are in your workspace, you may see performance\nimprovements on subsequent runs as we're no longer re-building the project graph over and over\neverytime the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," binary is ran."),(0,r.kt)("h2",{id:"migrate-from-turborepo"},"Migrate from Turborepo"),(0,r.kt)("p",null,"Turborepo is a popular task runner for Node.js based monorepos, but doesn't support all the\nfunctionality that moon does. If you're looking to prototype moon, or migrate from Turborepo to moon\nholistically, we now support a new command\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/migrate/from-turborepo"},(0,r.kt)("inlineCode",{parentName:"a"},"moon migrate from-turborepo")),"."),(0,r.kt)("p",null,"This command will migrate the ",(0,r.kt)("inlineCode",{parentName:"p"},"turbo.json")," file to moon applicable configuration files!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon migrate from-turborepo\n")),(0,r.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,r.kt)("h3",{id:"renamed-events"},"Renamed events"),(0,r.kt)("p",null,"Because of the runner -> pipeline changes above, the ",(0,r.kt)("inlineCode",{parentName:"p"},"runner.*")," ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/webhooks"},"webhook"),"\nevents were renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"pipeline.*"),"."),(0,r.kt)("h3",{id:"updated-cli-options"},"Updated CLI options"),(0,r.kt)("p",null,"Renamed the ",(0,r.kt)("inlineCode",{parentName:"p"},"--upstream")," option to ",(0,r.kt)("inlineCode",{parentName:"p"},"--remote"),", to better align with Git terminology, and removed the\n",(0,r.kt)("inlineCode",{parentName:"p"},"--report")," option from ",(0,r.kt)("inlineCode",{parentName:"p"},"moon check")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run")," commands. Reports are now always created."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.22.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added Bun as a tier 1 language (doesn't do much at the moment)."),(0,r.kt)("li",{parentName:"ul"},"Added a ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/workspace#versionconstraint"},(0,r.kt)("inlineCode",{parentName:"a"},"versionConstraint")," setting")," in\n",(0,r.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml")," that enforces a requirement on the running moon binary."),(0,r.kt)("li",{parentName:"ul"},"Updated the ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/project#project"},(0,r.kt)("inlineCode",{parentName:"a"},"project")," fields")," in ",(0,r.kt)("inlineCode",{parentName:"li"},"moon.yml")," to be optional,\nexcluding ",(0,r.kt)("inlineCode",{parentName:"li"},"description"),"."),(0,r.kt)("li",{parentName:"ul"},"Internal improvements to remote caching and artifact uploading.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.23 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improved task inheritance workflow."),(0,r.kt)("li",{parentName:"ul"},"Glob support in task ",(0,r.kt)("inlineCode",{parentName:"li"},"outputs"),"."),(0,r.kt)("li",{parentName:"ul"},"Project-level environment variables.")))}m.isMDXComponent=!0},288:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.22-6d47d46b82e88207cd599d1bd3974022.png"}}]); \ No newline at end of file diff --git a/assets/js/22eddac1.3eb330b9.js b/assets/js/22eddac1.3eb330b9.js deleted file mode 100644 index 3c9fc06cd21..00000000000 --- a/assets/js/22eddac1.3eb330b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5950],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>g});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=s(n),g=a,d=c["".concat(p,".").concat(g)]||c[g]||u[g]||r;return n?o.createElement(d,l(l({ref:t},m),{},{components:n})):o.createElement(d,l({ref:t},m))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var o=n(25773),a=(n(27378),n(35318));const r={slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},l=void 0,i={permalink:"/blog/proto-v0.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx",source:"@site/blog/2023-04-21_proto-v0.7.mdx",title:"proto v0.7 - First step towards plugins",description:"With this release, we're very excited to announce our initial support for plugins in proto!",date:"2023-04-21T00:00:00.000Z",formattedDate:"April 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugins",permalink:"/blog/tags/plugins"}],readingTime:2.36,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},prevItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"},nextItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"}},p={image:n(78813).Z,authorsImageUrls:[void 0]},s=[{value:"Initial plugins architecture",id:"initial-plugins-architecture",level:2},{value:"TOML plugins",id:"toml-plugins",level:3},{value:"Cleaning improvements",id:"cleaning-improvements",level:2}],m={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're very excited to announce our initial support for plugins in proto!"),(0,a.kt)("h2",{id:"initial-plugins-architecture"},"Initial plugins architecture"),(0,a.kt)("p",null,"Last week we posted an ",(0,a.kt)("a",{parentName:"p",href:"./proto-v0.6#rfc-plugins-system"},"RFC for a new plugins architecture")," for\nproto. We believe plugins will unlock an array of capabilities for proto, will enable the community\nto add their own custom integrations, and the ability for tools to be managed within proto's\ntoolchain."),(0,a.kt)("p",null,"We were very excited for this RFC, and couldn't wait, so we spent the last week prototyping\nimplementations. We got the basics of downloading, installing, and enabling a plugin at ",(0,a.kt)("em",{parentName:"p"},"runtime"),"\nworking incredibly fast. However, implementing the entire RFC in 1 release would have taken too\nlong, and we wanted to avoid dropping such a large feature in a single release. Because of this,\nwe've only implemented ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/plugins#toml-plugin"},"TOML plugins")," in this release, and will\nimplement WASM plugins in a future release."),(0,a.kt)("h3",{id:"toml-plugins"},"TOML plugins"),(0,a.kt)("p",null,"You may be asking yourself, aren't plugins typically code? For the most part, yes, but after\nbuilding a \"version manager\" for multiple languages, we've come to the realization that many tools\ncan simply be supported through a basic configuration file."),(0,a.kt)("p",null,"At minimum, tools require the following pieces to be managed:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Where and how to download the tool"),(0,a.kt)("li",{parentName:"ul"},"How to install/unpack the tool"),(0,a.kt)("li",{parentName:"ul"},"How to resolve available versions to install"),(0,a.kt)("li",{parentName:"ul"},"How to execute the tool's binary")),(0,a.kt)("p",null,"All 4 of these pieces can be solved with a configuration file, and as such, we opted to support a\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/plugins#toml-plugin"},"TOML schema based plugin")," as an alternative to a code based\nplugin. The other benefits of a schema is that it's ",(0,a.kt)("em",{parentName:"p"},"easy to write, read, and maintain"),", doesn't\nrequire any code, and doesn't force you into a specific programming language."),(0,a.kt)("p",null,"To demonstate how this plugin works, here's an example of a ",(0,a.kt)("a",{parentName:"p",href:"/moon"},"moon")," TOML schema."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="moon-schema.toml"',title:'"moon-schema.toml"'},'name = "moon"\ntype = "cli"\n\n[platform.linux]\ndownload-file = "moon-{arch}-unknown-linux-{libc}"\n\n[platform.macos]\ndownload-file = "moon-{arch}-apple-darwin"\n\n[platform.windows]\ndownload-file = "moon-{arch}-pc-windows-msvc.exe"\n\n[install]\ndownload-url = "https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}"\n\n[resolve]\ngit-url = "https://github.com/moonrepo/moon"\n')),(0,a.kt)("p",null,"Very simple right? With this, you can now configure moon as a plugin within proto."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'moon = "1.2.0"\n\n[plugins]\nmoon = "source:./path/to/moon-schema.toml"\n')),(0,a.kt)("p",null,"And ultimately manage every version of moon through proto! Because moon is now a plugin, every\ncommand in proto that accepts a ",(0,a.kt)("inlineCode",{parentName:"p"},"")," argument, will now accept ",(0,a.kt)("inlineCode",{parentName:"p"},"moon")," as a valid tool."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install moon 1.2.0\n$ proto list-remote moon\n$ proto use\n")),(0,a.kt)("p",null,"Learn more about ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/plugins#toml-plugin"},"TOML plugins in the official docs"),"!"),(0,a.kt)("h2",{id:"cleaning-improvements"},"Cleaning improvements"),(0,a.kt)("p",null,"Last week we introduced the ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/clean"},(0,a.kt)("inlineCode",{parentName:"a"},"proto clean"))," command that will\nautomatically delete stale and unused tools from the toolchain. This week we've implemented a few\nimprovements to the cleaning process:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added a ",(0,a.kt)("inlineCode",{parentName:"li"},"--yes")," option to ",(0,a.kt)("a",{parentName:"li",href:"/docs/proto/commands/clean"},(0,a.kt)("inlineCode",{parentName:"a"},"proto clean")),", allowing prompts to be\nbypassed."),(0,a.kt)("li",{parentName:"ul"},"Added a ",(0,a.kt)("inlineCode",{parentName:"li"},"auto-clean")," setting to ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/config.toml"),", enabling automatic cleaning when\n",(0,a.kt)("a",{parentName:"li",href:"/docs/proto/commands/use"},(0,a.kt)("inlineCode",{parentName:"a"},"proto use"))," is ran.")))}u.isMDXComponent=!0},78813:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.7-a86209ab88fb0d3b882a64bedb0fe971.png"}}]); \ No newline at end of file diff --git a/assets/js/22eddac1.b08abec0.js b/assets/js/22eddac1.b08abec0.js new file mode 100644 index 00000000000..1d93b015f4a --- /dev/null +++ b/assets/js/22eddac1.b08abec0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85950],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>g});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=s(n),g=a,d=c["".concat(p,".").concat(g)]||c[g]||u[g]||r;return n?o.createElement(d,l(l({ref:t},m),{},{components:n})):o.createElement(d,l({ref:t},m))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var o=n(25773),a=(n(27378),n(35318));const r={slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},l=void 0,i={permalink:"/blog/proto-v0.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx",source:"@site/blog/2023-04-21_proto-v0.7.mdx",title:"proto v0.7 - First step towards plugins",description:"With this release, we're very excited to announce our initial support for plugins in proto!",date:"2023-04-21T00:00:00.000Z",formattedDate:"April 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugins",permalink:"/blog/tags/plugins"}],readingTime:2.36,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},prevItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"},nextItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"}},p={image:n(78813).Z,authorsImageUrls:[void 0]},s=[{value:"Initial plugins architecture",id:"initial-plugins-architecture",level:2},{value:"TOML plugins",id:"toml-plugins",level:3},{value:"Cleaning improvements",id:"cleaning-improvements",level:2}],m={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're very excited to announce our initial support for plugins in proto!"),(0,a.kt)("h2",{id:"initial-plugins-architecture"},"Initial plugins architecture"),(0,a.kt)("p",null,"Last week we posted an ",(0,a.kt)("a",{parentName:"p",href:"./proto-v0.6#rfc-plugins-system"},"RFC for a new plugins architecture")," for\nproto. We believe plugins will unlock an array of capabilities for proto, will enable the community\nto add their own custom integrations, and the ability for tools to be managed within proto's\ntoolchain."),(0,a.kt)("p",null,"We were very excited for this RFC, and couldn't wait, so we spent the last week prototyping\nimplementations. We got the basics of downloading, installing, and enabling a plugin at ",(0,a.kt)("em",{parentName:"p"},"runtime"),"\nworking incredibly fast. However, implementing the entire RFC in 1 release would have taken too\nlong, and we wanted to avoid dropping such a large feature in a single release. Because of this,\nwe've only implemented ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/plugins#toml-plugin"},"TOML plugins")," in this release, and will\nimplement WASM plugins in a future release."),(0,a.kt)("h3",{id:"toml-plugins"},"TOML plugins"),(0,a.kt)("p",null,"You may be asking yourself, aren't plugins typically code? For the most part, yes, but after\nbuilding a \"version manager\" for multiple languages, we've come to the realization that many tools\ncan simply be supported through a basic configuration file."),(0,a.kt)("p",null,"At minimum, tools require the following pieces to be managed:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Where and how to download the tool"),(0,a.kt)("li",{parentName:"ul"},"How to install/unpack the tool"),(0,a.kt)("li",{parentName:"ul"},"How to resolve available versions to install"),(0,a.kt)("li",{parentName:"ul"},"How to execute the tool's binary")),(0,a.kt)("p",null,"All 4 of these pieces can be solved with a configuration file, and as such, we opted to support a\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/plugins#toml-plugin"},"TOML schema based plugin")," as an alternative to a code based\nplugin. The other benefits of a schema is that it's ",(0,a.kt)("em",{parentName:"p"},"easy to write, read, and maintain"),", doesn't\nrequire any code, and doesn't force you into a specific programming language."),(0,a.kt)("p",null,"To demonstate how this plugin works, here's an example of a ",(0,a.kt)("a",{parentName:"p",href:"/moon"},"moon")," TOML schema."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="moon-schema.toml"',title:'"moon-schema.toml"'},'name = "moon"\ntype = "cli"\n\n[platform.linux]\ndownload-file = "moon-{arch}-unknown-linux-{libc}"\n\n[platform.macos]\ndownload-file = "moon-{arch}-apple-darwin"\n\n[platform.windows]\ndownload-file = "moon-{arch}-pc-windows-msvc.exe"\n\n[install]\ndownload-url = "https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}"\n\n[resolve]\ngit-url = "https://github.com/moonrepo/moon"\n')),(0,a.kt)("p",null,"Very simple right? With this, you can now configure moon as a plugin within proto."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'moon = "1.2.0"\n\n[plugins]\nmoon = "source:./path/to/moon-schema.toml"\n')),(0,a.kt)("p",null,"And ultimately manage every version of moon through proto! Because moon is now a plugin, every\ncommand in proto that accepts a ",(0,a.kt)("inlineCode",{parentName:"p"},"")," argument, will now accept ",(0,a.kt)("inlineCode",{parentName:"p"},"moon")," as a valid tool."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install moon 1.2.0\n$ proto list-remote moon\n$ proto use\n")),(0,a.kt)("p",null,"Learn more about ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/plugins#toml-plugin"},"TOML plugins in the official docs"),"!"),(0,a.kt)("h2",{id:"cleaning-improvements"},"Cleaning improvements"),(0,a.kt)("p",null,"Last week we introduced the ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/clean"},(0,a.kt)("inlineCode",{parentName:"a"},"proto clean"))," command that will\nautomatically delete stale and unused tools from the toolchain. This week we've implemented a few\nimprovements to the cleaning process:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added a ",(0,a.kt)("inlineCode",{parentName:"li"},"--yes")," option to ",(0,a.kt)("a",{parentName:"li",href:"/docs/proto/commands/clean"},(0,a.kt)("inlineCode",{parentName:"a"},"proto clean")),", allowing prompts to be\nbypassed."),(0,a.kt)("li",{parentName:"ul"},"Added a ",(0,a.kt)("inlineCode",{parentName:"li"},"auto-clean")," setting to ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/config.toml"),", enabling automatic cleaning when\n",(0,a.kt)("a",{parentName:"li",href:"/docs/proto/commands/use"},(0,a.kt)("inlineCode",{parentName:"a"},"proto use"))," is ran.")))}u.isMDXComponent=!0},78813:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.7-a86209ab88fb0d3b882a64bedb0fe971.png"}}]); \ No newline at end of file diff --git a/assets/js/232c92ba.2d7c051f.js b/assets/js/232c92ba.2d7c051f.js new file mode 100644 index 00000000000..01b174ce005 --- /dev/null +++ b/assets/js/232c92ba.2d7c051f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16974],{12725:e=>{e.exports=JSON.parse('{"label":"python","permalink":"/blog/tags/python","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/232c92ba.3177ef24.js b/assets/js/232c92ba.3177ef24.js deleted file mode 100644 index 88948f4ca76..00000000000 --- a/assets/js/232c92ba.3177ef24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6974],{12725:e=>{e.exports=JSON.parse('{"label":"python","permalink":"/blog/tags/python","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/2392.54ee0f8c.js b/assets/js/2392.54ee0f8c.js deleted file mode 100644 index 167e08530cd..00000000000 --- a/assets/js/2392.54ee0f8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2392],{38274:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});var l=a(25773),n=a(27378),s=a(99213),r=a(44022);function m(e){const{previous:t,next:a}=e;return n.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&n.createElement(r.Z,(0,l.Z)({},t,{subLabel:n.createElement(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&n.createElement(r.Z,(0,l.Z)({},a,{subLabel:n.createElement(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},25069:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var l=a(27378),n=a(37140),s=a(99213),r=a(75484),m=a(25611);function c(e){let{className:t}=e;const a=(0,m.E)();return a.badge?l.createElement("span",{className:(0,n.Z)(t,r.k.docs.docVersionBadge,"badge badge--secondary")},l.createElement(s.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}},40450:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var l=a(27378),n=a(35318),s=a(36256);function r(e){let{children:t}=e;return l.createElement(n.Zo,{components:s.default},t)}},17061:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var l=a(25773),n=a(27378),s=a(37140),r=a(17148);const m="tableOfContents_XG6w";function c(e){let{className:t,...a}=e;return n.createElement("div",{className:(0,s.Z)(m,"thin-scrollbar",t)},n.createElement(r.Z,(0,l.Z)({},a,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},72218:(e,t,a)=>{a.r(t),a.d(t,{default:()=>g});var l=a(27378),n=a(37140),s=a(80376),r=a(17148),m=a(25773),c=a(99213);const u="tocCollapsibleButton_iI2p",d="tocCollapsibleButtonExpanded_cHjC";function i(e){let{collapsed:t,...a}=e;return l.createElement("button",(0,m.Z)({type:"button"},a,{className:(0,n.Z)("clean-btn",u,!t&&d,a.className)}),l.createElement(c.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const o="tocCollapsible_wXna",f="tocCollapsibleContent_vea0",p="tocCollapsibleExpanded_BbRn";function g(e){let{toc:t,className:a,minHeadingLevel:m,maxHeadingLevel:c}=e;const{collapsed:u,toggleCollapsed:d}=(0,s.u)({initialState:!0});return l.createElement("div",{className:(0,n.Z)(o,!u&&p,a)},l.createElement(i,{collapsed:u,onClick:d}),l.createElement(s.z,{lazy:!0,className:f,collapsed:u},l.createElement(r.Z,{toc:t,minHeadingLevel:m,maxHeadingLevel:c})))}},17148:(e,t,a)=>{a.d(t,{Z:()=>d});var l=a(25773),n=a(27378),s=a(20624),r=a(86934),m=a(81344);function c(e){let{toc:t,className:a,linkClassName:l,isChild:s}=e;return t.length?n.createElement("ul",{className:s?void 0:a},t.map((e=>n.createElement("li",{key:e.id},n.createElement("a",{href:`#${e.id}`,className:l??void 0,dangerouslySetInnerHTML:{__html:e.value}}),n.createElement(c,{isChild:!0,toc:e.children,className:a,linkClassName:l}))))):null}const u=n.memo(c);function d(e){let{toc:t,className:a="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:d,minHeadingLevel:i,maxHeadingLevel:o,...f}=e;const p=(0,s.L)(),g=i??p.tableOfContents.minHeadingLevel,E=o??p.tableOfContents.maxHeadingLevel,y=(0,r.b)({toc:t,minHeadingLevel:g,maxHeadingLevel:E}),b=(0,n.useMemo)((()=>{if(c&&d)return{linkClassName:c,linkActiveClassName:d,minHeadingLevel:g,maxHeadingLevel:E}}),[c,d,g,E]);return(0,m.S)(b),n.createElement(u,(0,l.Z)({toc:y,className:a,linkClassName:c},f))}},21114:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.AnchorLink=function(e){let{id:t}=e;return l.default.createElement("a",{className:"tsd-anchor",href:`#${t}`},l.default.createElement("span",{className:"tsd-anchor-id",id:t}),l.default.createElement("i",{className:"codicon codicon-symbol-numeric"}))}},32392:(e,t,a)=>{const l=a(27378),n=a(95709),s=a(25734),r=a(51165),m=a(25822),c=a(95950),u=a(23802),d=a(55547),i=a(47367),o=a(19830),f=(e=>e&&e.__esModule?e:{default:e})(l);e.exports=function(e){let{readme:t,route:a}=e;const p=s.useReflection(a.id),g=r.useReflectionMap(),E=l.useMemo((()=>function(e,t){const a=[],l=new Set;return e.groups?.forEach((e=>{e.children?.forEach((e=>{const n=t[e];if(l.has(n.name))return;const s=m.getKindIconHtml(n.kind,n.name);n.permalink&&!n.permalink.includes("#")||(a.push({children:[],id:n.name,value:s?`${s} ${n.name}`:n.name,level:1}),l.add(n.name))}))})),a}(p,g)),[p,g]),y=s.useReflection(p.previousId),b=s.useReflection(p.nextId),N=l.useMemo((()=>({next:b?{permalink:b.permalink,title:b.name}:void 0,previous:y?{permalink:y.permalink,title:y.name}:void 0})),[b,y]);return f.default.createElement(c,{heading:f.default.createElement(f.default.Fragment,null,f.default.createElement("span",{className:"tsd-header-flags"},f.default.createElement(d.Flags,{flags:p.flags})),p.name," ",f.default.createElement(o.TypeParametersGeneric,{params:p.typeParameters})),pageMetadata:f.default.createElement(n.PageMetadata,{description:p.comment?.summary?u.displayPartsToMarkdown(p.comment.summary):"",title:`${p.name} | API`}),pagingMetadata:N,route:a,toc:E},t&&f.default.createElement("section",{className:"tsd-readme"},f.default.createElement(t,null)),f.default.createElement(i.Reflection,{reflection:p}))}},95950:(e,t,a)=>{const l=a(27378),n=a(95709),s=a(78372),r=a(38274),m=a(25069),c=a(1999),u=a(40450),d=a(17061),i=a(72218),o=a(17996),f=a(66498),p=a(66715),g=e=>e&&e.__esModule?e:{default:e},E=g(l),y=g(s),b=g(r),N=g(m),h=g(c),v=g(u),k=g(d),T=g(i);e.exports=function(e){let{children:t,heading:a,pageMetadata:l,pagingMetadata:s,toc:r}=e;const m=n.useWindowSize(),c=o.useBreadcrumbs(),u=r.length>0,d=u&&("desktop"===m||"ssr"===m);return E.default.createElement(E.default.Fragment,null,l,E.default.createElement("div",{className:"row"},E.default.createElement("div",{className:"col apiItemCol"},E.default.createElement(p.VersionBanner,null),E.default.createElement("div",{className:"apiItemContainer"},E.default.createElement("article",null,c&&E.default.createElement(y.default,null),E.default.createElement(N.default,null),u&&E.default.createElement(T.default,{className:`${n.ThemeClassNames.docs.docTocMobile??""} apiTocMobile`,maxHeadingLevel:6,minHeadingLevel:1,toc:r}),E.default.createElement("div",{className:`${n.ThemeClassNames.docs.docMarkdown??""} markdown`},E.default.createElement("header",null,E.default.createElement(h.default,{as:"h1"},a)),E.default.createElement(v.default,null,t)),E.default.createElement(f.Footer,null)),s&&E.default.createElement(b.default,s))),d&&E.default.createElement("div",{className:"col col--3"},E.default.createElement(k.default,{className:n.ThemeClassNames.docs.docTocDesktop,maxHeadingLevel:6,minHeadingLevel:1,toc:r}))))}},23802:(e,t,a)=>{const l=a(27378),n=a(97279),s=(e=>e&&e.__esModule?e:{default:e})(l);function r(e){return!!e&&Boolean(e.summary?.some((e=>"text"!==e.kind||""!==e.text))||e.blockTags&&e.blockTags?.length>0)}function m(e){return e.map((e=>"inline-tag"===e.kind?`{${e.tag} ${e.text}}`:e.text)).join("")}t.Comment=function(e){let{comment:t,root:a,hideTags:l=[]}=e;if(!t||!r(t))return null;const c=t.blockTags?.filter((e=>!l.includes(e.tag)&&"@default"!==e.tag))??[];return s.default.createElement("div",{className:"tsd-comment tsd-typography "+(a?"tsd-comment-root":"")},!!t.summary&&s.default.createElement("div",{className:"lead"},s.default.createElement(n.Markdown,{content:m(t.summary)})),c.length>0&&s.default.createElement("dl",{className:"tsd-comment-tags"},c.map((e=>s.default.createElement(s.default.Fragment,{key:e.tag},s.default.createElement("dt",null,s.default.createElement("strong",null,e.tag)),s.default.createElement("dd",null,s.default.createElement(n.Markdown,{content:m(e.content)})))))))},t.displayPartsToMarkdown=m,t.hasComment=r},67284:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));function n(e){switch(e){case"@beta":case"@experimental":return"warning";case"@alpha":return"danger";default:return"info"}}t.CommentBadges=function(e){let{comment:t}=e;const a=t.modifierTags;return l.default.createElement("div",{className:"badge-group"},a.map((e=>l.default.createElement("span",{key:e,className:`badge badge--${n(e)}`},e.slice(1)))))},t.isCommentWithModifiers=function(e){return!!e&&!!e.modifierTags&&e.modifierTags.length>0}},31502:(e,t,a)=>{function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,l)}return a}function n(e){for(var t=1;te&&e.__esModule?e:{default:e})(r);t.DefaultValue=function(e){let{comment:t,value:a,type:l}=e;if(!t&&!a)return null;const s=function(e){const t=e?.blockTags?.find((e=>"@default"===e.tag));return t?m.displayPartsToMarkdown(t.content):null}(t);return s||a?u.default.createElement("span",{className:"tsd-signature-symbol"}," = ",a&&u.default.createElement(u.default.Fragment,null,"string"==typeof a?a:u.default.createElement(c.Type,{type:a})),!a&&s&&u.default.createElement(c.Type,{type:n(n({type:"literal"},"intrinsic"===l?.type?{}:l),{},{value:s})})):null}},55547:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));function n(e){return e.replace(/^is([A-Z])/,((e,t)=>String(t).toLocaleLowerCase()))}t.Flags=function(e){let{flags:t}=e;return t?l.default.createElement(l.default.Fragment,null,Object.keys(t).map(n).map((e=>l.default.createElement("span",{key:e,className:`tsd-flag tsd-flag-${e}`},e)))):null}},66498:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.Footer=function(){return l.default.createElement("footer",{className:"tsd-footer"},"Powered by"," ",l.default.createElement("a",{href:"https://github.com/milesj/docusaurus-plugin-typedoc-api"},"docusaurus-plugin-typedoc-api")," ","and ",l.default.createElement("a",{href:"https://typedoc.org/"},"TypeDoc"))}},97885:(e,t,a)=>{const l=a(27378),n=a(20623),s=(e=>e&&e.__esModule?e:{default:e})(l);t.Hierarchy=function e(t){let{tree:a}=t;return s.default.createElement("ul",{className:"tsd-hierarchy"},a.types.map(((t,l)=>s.default.createElement("li",{key:t.type+String(l)},a.isTarget?s.default.createElement("em",{className:"tsd-target"},"reference"===t.type?t.name:"UNKNOWN"):s.default.createElement(n.Type,{type:t}),l===a.types.length-1&&a.next&&s.default.createElement(e,{tree:a.next})))))}},16471:(e,t,a)=>{const l=a(27378),n=a(25822),s=(e=>e&&e.__esModule?e:{default:e})(l);t.Icon=function(e){let{reflection:t}=e;const a=n.getKindIcon(t.kind,t.name);if(!a)return null;const l=n.getKindIconColor(t.kind);return s.default.createElement("i",{className:`codicon codicon-${a}`,style:{color:l}})}},75845:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(25734),r=a(21114),m=a(16471),c=e=>e&&e.__esModule?e:{default:e},u=c(l),d=c(n);function i(e){let{id:t}=e;const a=s.useReflection(t);return u.default.createElement("li",null,u.default.createElement(d.default,{className:"tsd-kind-icon",to:a.permalink??`#${a.name}`},u.default.createElement(m.Icon,{reflection:a}),a.name??u.default.createElement("em",null,a.kindString)))}t.Index=function(e){let{reflection:t}=e;return t.categories&&t.categories.length>0?u.default.createElement("section",{className:"tsd-panel-group tsd-index-group"},u.default.createElement("h2",null,"Index ",u.default.createElement(r.AnchorLink,{id:"Index"})),u.default.createElement("section",{className:"tsd-panel tsd-index-panel"},u.default.createElement("div",{className:"tsd-index-content"},t.categories.map((e=>u.default.createElement("section",{key:e.title,className:"tsd-index-section"},u.default.createElement("h3",{className:"tsd-panel-header"},"CATEGORY"===e.title?"Other":e.title),u.default.createElement("div",{className:"tsd-panel-content"},u.default.createElement("ul",{className:"tsd-index-list"},e.children?.map((e=>u.default.createElement(i,{key:e,id:e}))))))))))):t.groups&&t.groups.length>0?u.default.createElement("section",{className:"tsd-panel-group tsd-index-group"},u.default.createElement("h2",null,"Index ",u.default.createElement(r.AnchorLink,{id:"Index"})),u.default.createElement("section",{className:"tsd-panel tsd-index-panel"},u.default.createElement("div",{className:"tsd-index-content"},t.groups.map((e=>u.default.createElement("section",{key:e.title,className:"tsd-index-section"},e.categories&&e.categories.length>0?e.categories.map((t=>u.default.createElement(u.default.Fragment,{key:t.title},u.default.createElement("h3",{className:"tsd-panel-header"},"CATEGORY"===t.title?e.title:t.title),u.default.createElement("div",{className:"tsd-panel-content"},u.default.createElement("ul",{className:"tsd-index-list"},t.children?.map((e=>u.default.createElement(i,{key:e,id:e})))))))):u.default.createElement(u.default.Fragment,null,u.default.createElement("h3",{className:"tsd-panel-header"},e.title),u.default.createElement("div",{className:"tsd-panel-content"},u.default.createElement("ul",{className:"tsd-index-list"},e.children?.map((e=>u.default.createElement(i,{key:e,id:e})))))))))))):null}},53462:(e,t,a)=>{const l=a(27378),n=a(25734),s=a(51165),r=a(78460),m=a(21114),c=a(67284),u=a(55547),d=a(92897),i=a(43610),o=a(11505),f=a(46449),p=a(2386),g=(e=>e&&e.__esModule?e:{default:e})(l);t.Member=function e(t){let{id:a}=t;const l=s.useReflectionMap(),E=n.useReflection(a),y=E.comment;let b=null;return b=E.signatures?g.default.createElement(f.MemberSignatures,{inPanel:!0,sigs:E.signatures}):E.getSignature||E.setSignature?g.default.createElement(i.MemberGetterSetter,{inPanel:!0,getter:E.getSignature,setter:E.setSignature}):"target"in E&&E.target?g.default.createElement(o.MemberReference,{reflection:E}):g.default.createElement(d.MemberDeclaration,{id:a}),g.default.createElement("section",{className:"tsd-panel tsd-member"},g.default.createElement("h3",{className:"tsd-panel-header"},g.default.createElement(m.AnchorLink,{id:E.name}),g.default.createElement(p.SourceLink,{sources:E.sources}),g.default.createElement(u.Flags,{flags:E.flags}),E.name,c.isCommentWithModifiers(y)&&g.default.createElement(c.CommentBadges,{comment:y})),b,E.groups?.map((t=>g.default.createElement(g.default.Fragment,{key:t.title},t.children?.map((t=>r.hasOwnDocument(t,l)?null:g.default.createElement(e,{key:t,id:t})))))))}},92897:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(25734),r=a(23802),m=a(31502),c=a(16471),u=a(31102),d=a(95280),i=a(20623),o=a(28625),f=a(19830),p=(e=>e&&e.__esModule?e:{default:e})(l);t.MemberDeclaration=function(e){let{id:t}=e;const a=s.useReflection(t),l=n.useMinimalLayout(),g=a.typeParameters&&a.typeParameters.length>0,E=!l&&a.type?.declaration;return p.default.createElement(p.default.Fragment,null,p.default.createElement("div",{className:"tsd-panel-content"},p.default.createElement("div",{className:"tsd-signature tsd-kind-icon"},p.default.createElement(c.Icon,{reflection:a}),a.name,p.default.createElement(f.TypeParametersGeneric,{params:a.typeParameters}),p.default.createElement("span",{className:"tsd-signature-symbol"},a.flags?.isOptional&&"?",": ")," ",p.default.createElement(i.Type,{type:a.type}),p.default.createElement(m.DefaultValue,{comment:a.comment,type:a.type,value:a.defaultValue}))),p.default.createElement("div",{className:"tsd-panel-content"},p.default.createElement(u.MemberSources,{reflection:a}),p.default.createElement(r.Comment,{comment:a.comment}),r.hasComment(a.comment)&&(g||E)&&p.default.createElement("hr",{className:"tsd-divider"}),g&&p.default.createElement("div",{className:"tds-type-parameters"},p.default.createElement("h4",{className:"tsd-type-parameters-title"},"Type parameters"),p.default.createElement(o.TypeParameters,{params:a.typeParameters})),E&&p.default.createElement("div",{className:"tsd-type-declaration"},p.default.createElement("h4",null,"Type declaration"),p.default.createElement(d.Parameter,{param:a.type?.declaration}))))}},43610:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(16471),r=a(27123),m=a(97240),c=(e=>e&&e.__esModule?e:{default:e})(l);t.MemberGetterSetter=function(e){let{inPanel:t,getter:a,setter:l}=e;const u=n.useMinimalLayout();return a||l?c.default.createElement(c.default.Fragment,null,(a||l)&&c.default.createElement("div",{className:t?"tsd-panel-content":""},c.default.createElement("ul",{className:"tsd-signatures"},a&&c.default.createElement("li",{className:"tsd-signature tsd-kind-icon"},c.default.createElement(s.Icon,{reflection:a}),c.default.createElement("span",{className:"tsd-signature-symbol"},"get "),a.name,c.default.createElement(m.MemberSignatureTitle,{hideName:!0,sig:a})),l&&c.default.createElement("li",{className:"tsd-signature tsd-kind-icon"},c.default.createElement(s.Icon,{reflection:l}),c.default.createElement("span",{className:"tsd-signature-symbol"},"set "),l.name,c.default.createElement(m.MemberSignatureTitle,{hideName:!0,sig:l})))),(r.hasSigBody(a,u)||r.hasSigBody(l,u))&&c.default.createElement("div",{className:t?"tsd-panel-content":""},c.default.createElement("ul",{className:"tsd-descriptions"},a&&c.default.createElement("li",{className:"tsd-description"},c.default.createElement(r.MemberSignatureBody,{sig:a})),l&&c.default.createElement("li",{className:"tsd-description"},c.default.createElement(r.MemberSignatureBody,{sig:l}))))):null}},11505:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(25734),r=e=>e&&e.__esModule?e:{default:e},m=r(l),c=r(n);t.MemberReference=function(e){let{reflection:t}=e;const a=s.useReflection(t.target);let l=null;return l=a?t.name===a.name?m.default.createElement(m.default.Fragment,null,"Re-exports"," ",m.default.createElement(c.default,{className:"tsd-signature-type",to:a.permalink},a.name)):m.default.createElement(m.default.Fragment,null,"Renames and re-exports"," ",m.default.createElement(c.default,{className:"tsd-signature-type",to:a.permalink},a.name)):m.default.createElement(m.default.Fragment,null,"Re-exports ",m.default.createElement("span",{className:"tsd-signature-type"},t.name)),m.default.createElement("div",{className:"tsd-panel-content"},l)}},27123:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(23802),r=a(67284),m=a(31502),c=a(55547),u=a(31102),d=a(95280),i=a(20623),o=a(28625),f=(e=>e&&e.__esModule?e:{default:e})(l);function p(e){if(e?.blockTags){const t=e.blockTags.map((e=>e.tag));if(t.includes("@returns")){const a=t.indexOf("@returns");return{summary:e.blockTags[a].content}}}}const g=["@returns","@param"];t.MemberSignatureBody=function(e){let{hideSources:t,sig:a}=e;const l=n.useMinimalLayout(),E=a.typeParameter&&a.typeParameter.length>0,y=!l&&a.parameters&&a.parameters.length>0,b=!l&&a.type;return f.default.createElement(f.default.Fragment,null,!t&&f.default.createElement(u.MemberSources,{reflection:a}),r.isCommentWithModifiers(a.comment)&&f.default.createElement(r.CommentBadges,{comment:a.comment}),f.default.createElement(s.Comment,{comment:a.comment,hideTags:g}),s.hasComment(a.comment)&&(E||y||b)&&f.default.createElement("hr",{className:"tsd-divider"}),E&&f.default.createElement(f.default.Fragment,null,f.default.createElement("h4",{className:"tsd-type-parameters-title"},"Type parameters"),f.default.createElement(o.TypeParameters,{params:a.typeParameter})),y&&f.default.createElement(f.default.Fragment,null,f.default.createElement("h4",{className:"tsd-parameters-title"},"Parameters"),f.default.createElement("ul",{className:"tsd-parameters"},a.parameters?.map((e=>f.default.createElement("li",{key:e.id},f.default.createElement("h5",null,f.default.createElement(c.Flags,{flags:e.flags}),e.flags?.isRest&&f.default.createElement("span",{className:"tsd-signature-symbol"},"..."),`${e.name}: `,f.default.createElement(i.Type,{type:e.type}),f.default.createElement(m.DefaultValue,{comment:e.comment,type:e.type,value:e.defaultValue})),f.default.createElement(s.Comment,{comment:e.comment})))))),b&&f.default.createElement(f.default.Fragment,null,f.default.createElement("h4",{className:"tsd-returns-title"},"Returns ",f.default.createElement(i.Type,{type:a.type})),f.default.createElement(s.Comment,{comment:p(a.comment)}),f.default.createElement(d.Parameter,{param:a.type?.declaration})))},t.hasSigBody=function(e,t,a){return void 0===a&&(a=!1),!!e&&(!a&&u.hasSources(e)||s.hasComment(e.comment)||e.typeParameter&&e.typeParameter.length>0||!t&&e.parameters&&e.parameters.length>0||!t&&e.type)}},97240:(e,t,a)=>{const l=a(27378),n=a(20623),s=a(19830),r=(e=>e&&e.__esModule?e:{default:e})(l);t.MemberSignatureTitle=function(e){let{useArrow:t,hideName:a,sig:l}=e;return r.default.createElement(r.default.Fragment,null,a||"__type"===l.name?"Constructor signature"===l.kindString?r.default.createElement(r.default.Fragment,null,l.flags?.isAbstract&&r.default.createElement("span",{className:"tsd-signature-symbol"},"abstract "),r.default.createElement("span",{className:"tsd-signature-symbol"},"new ")):null:l.name,r.default.createElement(s.TypeParametersGeneric,{params:l.typeParameter}),r.default.createElement("span",{className:"tsd-signature-symbol"},"("),l.parameters?.map(((e,t)=>r.default.createElement(r.default.Fragment,{key:e.id},t>0&&r.default.createElement("span",{className:"tsd-signature-symbol"},", "),r.default.createElement("span",null,e.flags?.isRest&&r.default.createElement("span",{className:"tsd-signature-symbol"},"..."),e.name,r.default.createElement("span",{className:"tsd-signature-symbol"},(e.flags?.isOptional||"defaultValue"in e)&&"?",": "),r.default.createElement(n.Type,{type:e.type}))))),r.default.createElement("span",{className:"tsd-signature-symbol"},")"),l.type&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"tsd-signature-symbol"},t?" => ":": "),r.default.createElement(n.Type,{type:l.type})))}},46449:(e,t,a)=>{function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l,n,s,r,m=[],c=!0,u=!1;try{if(s=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(l=s.call(a)).done)&&(m.push(l.value),m.length!==t);c=!0);}catch(d){u=!0,n=d}finally{try{if(!c&&null!=a.return&&(r=a.return(),Object(r)!==r))return}finally{if(u)throw n}}return m}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,l=new Array(t);ae&&e.__esModule?e:{default:e})(s);t.MemberSignatures=function(e){let{inPanel:t,sigs:a}=e;const n=l(s.useState(0),2),i=n[0],o=n[1],f=r.useMinimalLayout(),p=a.length>1,g=a[i];return d.default.createElement(d.default.Fragment,null,d.default.createElement("div",{className:t?"tsd-panel-content":""},d.default.createElement("ul",{className:"tsd-signatures"},a.map(((e,t)=>d.default.createElement("li",{key:e.id,className:`tsd-signature tsd-kind-icon ${t===i?"":"tsd-signature-inactive"} ${p?"tsd-pressable":""}`,onClick:p?()=>{o(t)}:void 0},d.default.createElement(m.Icon,{reflection:e}),d.default.createElement(u.MemberSignatureTitle,{sig:e})))))),c.hasSigBody(g,f)&&d.default.createElement(d.default.Fragment,null,!t&&d.default.createElement("hr",{className:"tsd-divider"}),d.default.createElement("div",{className:t?"tsd-panel-content":""},d.default.createElement("ul",{className:"tsd-descriptions"},d.default.createElement("li",{key:g.id,className:"tsd-description"},d.default.createElement(c.MemberSignatureBody,{sig:g}))))))}},31102:(e,t,a)=>{const l=a(27378),n=a(64029),s=(e=>e&&e.__esModule?e:{default:e})(l);function r(e){return Boolean(e.implementationOf||e.inheritedFrom||e.overwrites)}t.MemberSources=function(e){let{reflection:t}=e;return r(t)?s.default.createElement("aside",{className:"tsd-sources"},t.implementationOf&&s.default.createElement("p",null,"Implementation of ",s.default.createElement(n.TypeAndParent,{type:t.implementationOf})),t.inheritedFrom&&s.default.createElement("p",null,"Inherited from ",s.default.createElement(n.TypeAndParent,{type:t.inheritedFrom})),t.overwrites&&s.default.createElement("p",null,"Overrides ",s.default.createElement(n.TypeAndParent,{type:t.overwrites}))):null},t.hasSources=r},9285:(e,t,a)=>{const l=a(27378),n=a(51165),s=a(78460),r=a(21114),m=a(53462),c=a(83148),u=(e=>e&&e.__esModule?e:{default:e})(l);t.Members=function(e){let{reflection:t}=e;const a=n.useReflectionMap();return t.categories&&t.categories.length>0?u.default.createElement(u.default.Fragment,null,t.categories.map((e=>s.allCategoryChildrenHaveOwnDocument(e,a)?null:u.default.createElement("section",{key:e.title,className:"tsd-panel-group tsd-member-group"},u.default.createElement("h2",null,"CATEGORY"===e.title?"Other":e.title," ",u.default.createElement(r.AnchorLink,{id:e.title})),e.children?.map((e=>s.hasOwnDocument(e,a)?null:u.default.createElement(m.Member,{key:e,id:e}))))))):u.default.createElement(u.default.Fragment,null,t.groups?.map((e=>s.allGroupChildrenHaveOwnDocument(e,a)?null:u.default.createElement(c.MembersGroup,{key:e.title,group:e}))))}},83148:(e,t,a)=>{const l=a(27378),n=a(51165),s=a(78460),r=a(21114),m=a(53462),c=(e=>e&&e.__esModule?e:{default:e})(l);t.MembersGroup=function(e){let{group:t}=e;const a=n.useReflectionMap();return t.categories&&t.categories.length>0?c.default.createElement(c.default.Fragment,null,t.categories.map((e=>c.default.createElement("section",{key:e.title,className:"tsd-panel-group tsd-member-group"},c.default.createElement("h2",null,"CATEGORY"===e.title?"Other":e.title," ",c.default.createElement(r.AnchorLink,{id:e.title})),e.children?.map((e=>s.hasOwnDocument(e,a)?null:c.default.createElement(m.Member,{key:e,id:e}))))))):c.default.createElement("section",{className:"tsd-panel-group tsd-member-group"},c.default.createElement("h2",null,t.title," ",c.default.createElement(r.AnchorLink,{id:t.title})),t.children?.map((e=>s.hasOwnDocument(e,a)?null:c.default.createElement(m.Member,{key:e,id:e}))))}},95280:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(23802),r=a(55547),m=a(16471),c=a(27123),u=a(46449),d=a(97240),i=a(20623),o=(e=>e&&e.__esModule?e:{default:e})(l);function f(e){let{param:t}=e;if(!t)return null;if(t.signatures&&t.signatures.length>0)return o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,t.flags?.isRest&&o.default.createElement("span",{className:"tsd-signature-symbol"},"..."),t.name,o.default.createElement("span",{className:"tsd-signature-symbol"},t.flags?.isOptional&&"?",": "),"function"),o.default.createElement(u.MemberSignatures,{sigs:t.signatures}));if(t.type)return o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,o.default.createElement(r.Flags,{flags:t.flags}),t.flags?.isRest&&o.default.createElement("span",{className:"tsd-signature-symbol"},"..."),t.name,o.default.createElement("span",{className:"tsd-signature-symbol"},t.flags?.isOptional&&"?",": "),o.default.createElement(i.Type,{type:t.type})),o.default.createElement(s.Comment,{comment:t.comment}),t.children?.map((e=>o.default.createElement(p,{key:e.id,param:e}))),o.default.createElement(p,{param:t.type.declaration}));const a=t.getSignature,l=t.setSignature;return o.default.createElement(o.default.Fragment,null,a&&o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,o.default.createElement(r.Flags,{flags:a.flags}),o.default.createElement("span",{className:"tsd-signature-symbol"},"get "),a.name,o.default.createElement("span",{className:"tsd-signature-symbol"},"(): "),o.default.createElement(i.Type,{type:a.type})),o.default.createElement(s.Comment,{comment:a.comment})),l&&o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,o.default.createElement(r.Flags,{flags:l.flags}),o.default.createElement("span",{className:"tsd-signature-symbol"},"set "),l.name,o.default.createElement("span",{className:"tsd-signature-symbol"},"("),l.parameters?.map(((e,t)=>o.default.createElement("span",{key:e.id},t>0&&", ",e.name,o.default.createElement("span",{className:"tsd-signature-symbol"},": "),e.type?o.default.createElement(i.Type,{type:e.type}):"any"))),o.default.createElement("span",{className:"tsd-signature-symbol"},"): "),o.default.createElement(i.Type,{type:l.type})),o.default.createElement(s.Comment,{comment:l.comment})))}function p(e){let{param:t}=e;const a=n.useMinimalLayout();if(!t||a)return null;const l=t.signatures?.some((e=>c.hasSigBody(e,a,!0)));return o.default.createElement("ul",{className:"tsd-parameters"},t.signatures&&t.signatures.length>0&&o.default.createElement("li",{className:"tsd-parameter-signature"},o.default.createElement("ul",{className:"tsd-signatures"},t.signatures.map((e=>o.default.createElement("li",{key:e.id,className:"tsd-signature tsd-kind-icon"},o.default.createElement(m.Icon,{reflection:e}),o.default.createElement(d.MemberSignatureTitle,{hideName:!0,sig:e}))))),l&&o.default.createElement("ul",{className:"tsd-descriptions"},t.signatures.map((e=>o.default.createElement("li",{key:e.id,className:"tsd-description"},o.default.createElement(c.MemberSignatureBody,{hideSources:!0,sig:e})))))),t.indexSignature&&o.default.createElement("li",{className:"tsd-parameter-index-signature"},o.default.createElement("h5",null,o.default.createElement("span",{className:"tsd-signature-symbol"},"["),t.indexSignature.parameters?.map((e=>o.default.createElement("span",{key:e.id},e.flags?.isRest&&o.default.createElement("span",{className:"tsd-signature-symbol"},"..."),e.name," ",o.default.createElement(i.Type,{type:e.type})))),o.default.createElement("span",{className:"tsd-signature-symbol"},"]: "),o.default.createElement(i.Type,{type:t.indexSignature.type})),o.default.createElement(s.Comment,{comment:t.indexSignature.comment}),o.default.createElement(p,{param:t.indexSignature.declaration})),t.children?.map((e=>o.default.createElement(f,{key:e.id,param:e}))))}t.Parameter=p},47367:(e,t,a)=>{const l=a(27378),n=a(12121),s=a(23802),r=a(67284),m=a(97885),c=a(16471),u=a(75845),d=a(9285),i=a(46449),o=a(95280),f=a(20623),p=a(28625),g=(e=>e&&e.__esModule?e:{default:e})(l);t.Reflection=function(e){let{reflection:t}=e;const a=l.useMemo((()=>n.createHierarchy(t)),[t]);return g.default.createElement(g.default.Fragment,null,r.isCommentWithModifiers(t.comment)&&g.default.createElement(r.CommentBadges,{comment:t.comment}),s.hasComment(t.comment)&&g.default.createElement(s.Comment,{root:!0,comment:t.comment}),"typeParameter"in t&&t.typeParameter&&t.typeParameter.length>0&&128!==t.kind&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Type parameters"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement(p.TypeParameters,{params:t.typeParameter}))),("extendedBy"in t&&t.extendedBy&&t.extendedBy.length>0||"extendedTypes"in t&&t.extendedTypes&&t.extendedTypes.length>0)&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Hierarchy"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement(m.Hierarchy,{tree:a}))),"implementedTypes"in t&&t.implementedTypes&&t.implementedTypes.length>0&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Implements"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement("ul",{className:"tsd-hierarchy"},t.implementedTypes.map(((e,t)=>g.default.createElement("li",{key:e.type+String(t)},g.default.createElement(f.Type,{type:e}))))))),"implementedBy"in t&&t.implementedBy&&t.implementedBy.length>0&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Implemented by"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement("ul",{className:"tsd-hierarchy"},t.implementedBy.map(((e,t)=>g.default.createElement("li",{key:e.name+String(t)},g.default.createElement(f.Type,{type:e}))))))),"signatures"in t&&t.signatures&&t.signatures.length>0&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header tsd-before-signature"},"Callable"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement(i.MemberSignatures,{sigs:t.signatures}))),"indexSignature"in t&&t.indexSignature&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header tsd-before-signature"},"Indexable"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement("div",{className:"tsd-signature tsd-kind-icon"},g.default.createElement(c.Icon,{reflection:t.indexSignature}),g.default.createElement("span",{className:"tsd-signature-symbol"},"["),t.indexSignature.parameters?.map((e=>g.default.createElement("span",{key:e.id},e.name,": ",g.default.createElement(f.Type,{type:e.type})))),g.default.createElement("span",{className:"tsd-signature-symbol"},"]: "),g.default.createElement(f.Type,{type:t.indexSignature.type})),g.default.createElement(s.Comment,{comment:t.indexSignature.comment}),g.default.createElement(o.Parameter,{param:t.indexSignature.type?.declaration}))),g.default.createElement(u.Index,{reflection:t}),g.default.createElement(d.Members,{reflection:t}))}},2386:(e,t,a)=>{const l=a(27378),n=a(50353),s=a(78477),r=e=>e&&e.__esModule?e:{default:e},m=r(l),c=r(n);t.SourceLink=function(e){let{sources:t=[]}=e;const a=c.default().siteConfig,l=s.useGitRefName();return 0===t.length?null:m.default.createElement(m.default.Fragment,null,t.map((e=>{return m.default.createElement("a",{key:e.fileName,className:"tsd-anchor",href:e.url||`https://${a.githubHost}${a.githubPort?`:${a.githubPort}`:""}/${a.organizationName}/${a.projectName}/blob/${l}/${t=e.fileName,t.replace(/\/(dts|dist|lib|build|es|esm|cjs|mjs)\//,"/src/")}#L${e.line}`,rel:"noreferrer",target:"_blank"},m.default.createElement("i",{className:"codicon codicon-file-code"}));var t})))}},20623:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(51165),r=a(97240),m=e=>e&&e.__esModule?e:{default:e},c=m(l),u=m(n);function d(e,t){return t?c.default.createElement(c.default.Fragment,null,t&&c.default.createElement("span",{className:"tsd-signature-symbol"},"("),e,t&&c.default.createElement("span",{className:"tsd-signature-symbol"},")")):e}t.Type=function e(t){let{needsParens:a=!1,type:l}=t;const n=s.useReflectionMap();if(!l)return null;switch(String(l.type)){case"array":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{needsParens:!0,type:t.elementType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"[]"))}case"conditional":{const t=l;return d(c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{needsParens:!0,type:t.checkType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," extends "),c.default.createElement(e,{type:t.extendsType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," ? "),c.default.createElement(e,{type:t.trueType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," : "),c.default.createElement(e,{type:t.falseType})),a)}case"indexedAccess":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{type:t.objectType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"["),c.default.createElement(e,{type:t.indexType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"]"))}case"inferred":{const e=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"infer ")," ",e.name)}case"intersection":{const t=l;return d(c.default.createElement(c.default.Fragment,null,t.types.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"}," & "),c.default.createElement(e,{needsParens:!0,type:t}))))),a)}case"intrinsic":{const e=l;return c.default.createElement("span",{className:"tsd-signature-type"},e.name)}case"literal":{const e=l;return c.default.createElement("span",{className:"tsd-signature-type"},String(e.value))}case"mapped":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"{ "),"+"===t.readonlyModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"readonly "),"-"===t.readonlyModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"-readonly "),c.default.createElement("span",{className:"tsd-signature-symbol"},"[ "),c.default.createElement("span",{className:"tsd-signature-type"},t.parameter),c.default.createElement("span",{className:"tsd-signature-symbol"}," in "),c.default.createElement(e,{type:t.parameterType}),t.nameType&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"}," as "),c.default.createElement(e,{type:t.nameType})),c.default.createElement("span",{className:"tsd-signature-symbol"}," ]"),"+"===t.optionalModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"?: "),"-"===t.optionalModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"-?: "),!t.optionalModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},": "),c.default.createElement(e,{type:t.templateType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," }"))}case"optional":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{type:t.elementType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"?"))}case"predicate":{const t=l;return c.default.createElement(c.default.Fragment,null,t.asserts&&c.default.createElement("span",{className:"tsd-signature-symbol"},"asserts "),c.default.createElement("span",{className:"tsd-signature-type"},t.name),t.targetType&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"}," is "),c.default.createElement(e,{type:t.targetType})))}case"query":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"typeof "),c.default.createElement(e,{type:t.queryType}))}case"reference":{const t=l,a=t.id?n[t.id]:null,s=a?.id&&!a.sources?"tsd-signature-type-generic":"";return c.default.createElement(c.default.Fragment,null,a?.permalink?c.default.createElement(u.default,{className:`tsd-signature-type ${s}`,"data-tsd-kind":a.kindString,to:a.permalink},t.name):c.default.createElement("span",{className:`tsd-signature-type ${s}`},t.name),t.typeArguments&&t.typeArguments.length>0&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"<"),t.typeArguments.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},", "),c.default.createElement(e,{type:t})))),c.default.createElement("span",{className:"tsd-signature-symbol"},">")))}case"reflection":{const t=l.declaration;return t?.children&&t.children.length>0?c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"{ "),t.children.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.id??a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},"; "),c.default.createElement("span",null,t.name,c.default.createElement("span",{className:"tsd-signature-symbol"},t.flags?.isOptional&&"?",": "),t.type?c.default.createElement(e,{type:t.type}):"any")))),c.default.createElement("span",{className:"tsd-signature-symbol"}," }")):t?.signatures&&1===t.signatures.length?c.default.createElement(r.MemberSignatureTitle,{hideName:!0,useArrow:!0,sig:t.signatures[0]}):t?.signatures&&t.signatures.length>0?d(c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"{ "),t.signatures.map(((e,t)=>c.default.createElement(c.default.Fragment,{key:e.id??t},t>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},"; "),c.default.createElement(r.MemberSignatureTitle,{sig:e})))),c.default.createElement("span",{className:"tsd-signature-symbol"}," }")),a):c.default.createElement(c.default.Fragment,null,"{}")}case"rest":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"..."),c.default.createElement(e,{type:t.elementType}))}case"tuple":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"["),t.elements?.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},", "),c.default.createElement(e,{type:t})))),c.default.createElement("span",{className:"tsd-signature-symbol"},"]"))}case"typeOperator":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},t.operator," "),c.default.createElement(e,{type:t.target}))}case"union":{const t=l;return d(c.default.createElement(c.default.Fragment,null,t.types.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"}," | "),c.default.createElement(e,{needsParens:!0,type:t}))))),a)}case"unknown":{const e=l;return c.default.createElement("span",{className:"tsd-signature-type"},e.name)}case"named-tuple-member":{const t=l;return c.default.createElement(c.default.Fragment,null,t.name,c.default.createElement("span",{className:"tsd-signature-symbol"},t.isOptional?"?: ":": "),c.default.createElement(e,{type:t.element}))}case"template-literal":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"`"),t.head&&c.default.createElement("span",{className:"tsd-signature-type"},t.head),t.tail.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:a},c.default.createElement("span",{className:"tsd-signature-symbol"},"${"),"string"!=typeof t[0]&&c.default.createElement(e,{type:t[0]}),c.default.createElement("span",{className:"tsd-signature-symbol"},"}"),"string"==typeof t[1]&&c.default.createElement("span",{className:"tsd-signature-type"},t[1])))),c.default.createElement("span",{className:"tsd-signature-symbol"},"`"))}default:return c.default.createElement("span",{className:"tsd-signature-type"},"void")}}},64029:(e,t,a)=>{const l=a(27378),n=a(20623),s=(e=>e&&e.__esModule?e:{default:e})(l);t.TypeAndParent=function e(t){let{type:a}=t;return a?"elementType"in a&&a.elementType?s.default.createElement(s.default.Fragment,null,s.default.createElement(e,{type:a.elementType}),"[]"):s.default.createElement(n.Type,{type:a}):s.default.createElement(s.default.Fragment,null,"void")}},28625:(e,t,a)=>{const l=a(27378),n=a(23802),s=a(31502),r=a(20623),m=(e=>e&&e.__esModule?e:{default:e})(l);t.TypeParameters=function(e){let{params:t}=e;return t&&0!==t.length?m.default.createElement("ul",{className:"tsd-type-parameters"},t.map((e=>m.default.createElement("li",{key:e.id},m.default.createElement("strong",null,e.name),e.type&&m.default.createElement(m.default.Fragment,null,m.default.createElement("span",{className:"tsd-signature-symbol"},":")," ",m.default.createElement(r.Type,{type:e.type})),m.default.createElement(s.DefaultValue,{comment:e.comment,type:e.type,value:e.default}),m.default.createElement(n.Comment,{comment:e.comment}))))):null}},19830:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.TypeParametersGeneric=function(e){let{params:t}=e;return t&&0!==t.length?l.default.createElement("span",{className:"tsd-generics"},l.default.createElement("span",{className:"tsd-signature-symbol"},"<"),t.map(((e,t)=>l.default.createElement(l.default.Fragment,{key:e.id},t>0&&l.default.createElement("span",{className:"tsd-signature-symbol"},", "),e.name))),l.default.createElement("span",{className:"tsd-signature-symbol"},">")):null}},66715:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(62935),r=a(95709),m=a(12700),c=e=>e&&e.__esModule?e:{default:e},u=c(l),d=c(n);t.VersionBanner=function(){const e=m.useDocsVersion(),t=e.banner,a=e.docs,n=e.pluginId,c=e.version,i=s.useDocVersionSuggestions(n).latestVersionSuggestion,o=r.useDocsPreferredVersion(n).savePreferredVersionName,f=l.useCallback((()=>{o(i.name)}),[i.name,o]);if(!t||!i)return null;const p=a[i.label];return u.default.createElement("div",{className:`${r.ThemeClassNames.docs.docVersionBanner} alert alert--warning margin-bottom--md`,role:"alert"},u.default.createElement("div",null,"unreleased"===t&&u.default.createElement(u.default.Fragment,null,"This is documentation for an unreleased version."),"unmaintained"===t&&u.default.createElement(u.default.Fragment,null,"This is documentation for version ",u.default.createElement("b",null,c),".")," ","For the latest API, see version"," ",u.default.createElement("b",null,u.default.createElement(d.default,{to:p.id,onClick:f},p.title)),"."))}},17996:(e,t,a)=>{const l=a(27378),n=a(99746);t.useBreadcrumbs=function(){return l.useContext(n.ApiDataContext).options.breadcrumbs}},78477:(e,t,a)=>{const l=a(27378),n=a(99746);t.useGitRefName=function(){return l.useContext(n.ApiDataContext).options.gitRefName}},16605:(e,t,a)=>{const l=a(27378),n=a(99746);t.useMinimalLayout=function(){return l.useContext(n.ApiDataContext).options.minimal}},25734:(e,t,a)=>{const l=a(27378),n=a(99746);t.useReflection=function(e){const t=l.useContext(n.ApiDataContext).reflections;if(void 0===e)return null;if(t[e])return t[e];throw new Error(`Unable to find declaration with ID ${e}`)}},12121:(e,t)=>{t.createHierarchy=function(e){let t,a;function l(e){const l={types:e};a?(a.next=l,a=l):(t=l,a=l)}return e.extendedTypes&&l(e.extendedTypes),l([{id:e.id,name:e.name,type:"reference"}]),a.isTarget=!0,e.extendedBy&&l(e.extendedBy),t}},25822:(e,t)=>{const a={1:"project",2:"package",4:"symbol-namespace",8:"symbol-enum",16:"symbol-enum-member",32:"symbol-variable",64:"symbol-function",128:"symbol-class",256:"symbol-interface",512:"symbol-constructor",1024:"symbol-property",2048:"symbol-method",4096:"symbol-method",8192:"bracket-dot",16384:"symbol-method",32768:"symbol-property",65536:"symbol-key",131072:"symbol-type-parameter",262144:"symbol-field",524288:"symbol-field",1048576:"symbol-field",2097152:"bracket",4194304:"symbol-parameter",8388608:"references"};function l(e,t){let l=a[e];return 1024===e&&t.match(/^on[A-Z]/)&&(l="symbol-event"),l}function n(e){switch(e){case 64:case 512:case 2048:case 4096:case 16384:case 262144:return"var(--ifm-color-info)";case 16:case 32:case 1024:case 524288:case 1048576:return"var(--ifm-color-success)";case 4:case 128:return"var(--ifm-color-warning)";case 8:case 256:case 4194304:return"var(--ifm-color-danger)";default:return"inherit"}}t.getKindIcon=l,t.getKindIconColor=n,t.getKindIconHtml=function(e,t){const a=l(e,t);return a?``:""}},78460:(e,t)=>{function a(e,t){const a=t[e];return Boolean(a?.permalink&&!a.permalink.includes("#"))}t.allCategoryChildrenHaveOwnDocument=function(e,t){let l=!0;return e.children?.forEach((e=>{l&&=a(e,t)})),l},t.allGroupChildrenHaveOwnDocument=function(e,t){return Boolean(e.children?.every((e=>a(e,t))))},t.hasOwnDocument=a}}]); \ No newline at end of file diff --git a/assets/js/23ef67df.1dbd2e57.js b/assets/js/23ef67df.1dbd2e57.js deleted file mode 100644 index 914ccdb0d2b..00000000000 --- a/assets/js/23ef67df.1dbd2e57.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4247],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},l=void 0,i={permalink:"/blog/proto-v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx",source:"@site/blog/2023-09-18_proto-v0.18.mdx",title:"proto v0.18 - List installed tools and configure HTTP client",description:"Today we've got a small release that includes some helpful features.",date:"2023-09-18T00:00:00.000Z",formattedDate:"September 18, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"http",permalink:"/blog/tags/http"},{label:"registry",permalink:"/blog/tags/registry"},{label:"index",permalink:"/blog/tags/index"}],readingTime:1.83,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},prevItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"},nextItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"}},s={image:r(10576).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Today we've got a small release that includes some helpful features."))}m.isMDXComponent=!0},10576:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.18-5b6a0663f8077d6443d06ab243e966f6.png"}}]); \ No newline at end of file diff --git a/assets/js/23ef67df.c4765957.js b/assets/js/23ef67df.c4765957.js new file mode 100644 index 00000000000..5b34775a819 --- /dev/null +++ b/assets/js/23ef67df.c4765957.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84247],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},l=void 0,i={permalink:"/blog/proto-v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx",source:"@site/blog/2023-09-18_proto-v0.18.mdx",title:"proto v0.18 - List installed tools and configure HTTP client",description:"Today we've got a small release that includes some helpful features.",date:"2023-09-18T00:00:00.000Z",formattedDate:"September 18, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"http",permalink:"/blog/tags/http"},{label:"registry",permalink:"/blog/tags/registry"},{label:"index",permalink:"/blog/tags/index"}],readingTime:1.83,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},prevItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"},nextItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"}},s={image:r(10576).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Today we've got a small release that includes some helpful features."))}m.isMDXComponent=!0},10576:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.18-5b6a0663f8077d6443d06ab243e966f6.png"}}]); \ No newline at end of file diff --git a/assets/js/24556f49.6dcc7c6c.js b/assets/js/24556f49.6dcc7c6c.js new file mode 100644 index 00000000000..0853c90d532 --- /dev/null +++ b/assets/js/24556f49.6dcc7c6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10744],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=r,k=m["".concat(p,".").concat(d)]||m[d]||u[d]||i;return n?a.createElement(k,o(o({ref:t},c),{},{components:n})):a.createElement(k,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=n(25773),r=(n(27378),n(35318));const i={title:"File patterns"},o=void 0,l={unversionedId:"concepts/file-pattern",id:"concepts/file-pattern",title:"File patterns",description:"Globs",source:"@site/docs/concepts/file-pattern.mdx",sourceDirName:"concepts",slug:"/concepts/file-pattern",permalink:"/docs/concepts/file-pattern",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/file-pattern.mdx",tags:[],version:"current",frontMatter:{title:"File patterns"},sidebar:"docs",previous:{title:"File groups",permalink:"/docs/concepts/file-group"},next:{title:"Query language",permalink:"/docs/concepts/query-lang"}},p={},s=[{value:"Globs",id:"globs",level:2},{value:"Supported syntax",id:"supported-syntax",level:3},{value:"Examples",id:"examples",level:3},{value:"Project relative",id:"project-relative",level:2},{value:"Workspace relative",id:"workspace-relative",level:2}],c={toc:s};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"globs"},"Globs"),(0,r.kt)("p",null,"Globs in moon are ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/olson-sean-k/wax"},"Rust-based globs"),", ",(0,r.kt)("em",{parentName:"p"},"not")," JavaScript-based.\nThis may result in different or unexpected results. The following guidelines must be met when using\nglobs:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Must use forward slashes (",(0,r.kt)("inlineCode",{parentName:"li"},"/"),") for path separators, even on Windows."),(0,r.kt)("li",{parentName:"ul"},"Must ",(0,r.kt)("em",{parentName:"li"},"not")," start with or use any relative path parts, ",(0,r.kt)("inlineCode",{parentName:"li"},".")," or ",(0,r.kt)("inlineCode",{parentName:"li"},".."),".")),(0,r.kt)("h3",{id:"supported-syntax"},"Supported syntax"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"*")," - Matches zero or more characters, but does not match the ",(0,r.kt)("inlineCode",{parentName:"li"},"/")," character. Will attempt to match\nthe longest possible text (eager)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"$")," - Like ",(0,r.kt)("inlineCode",{parentName:"li"},"*"),", but will attempt to match the shortest possible text (lazy)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"**")," - Matches zero or more directories."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"?")," - Matches exactly one character, but not ",(0,r.kt)("inlineCode",{parentName:"li"},"/"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[abc]")," - Matches one case-sensitive character listed in the brackets."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[!xyz]")," - Like the above, but will match any character ",(0,r.kt)("em",{parentName:"li"},"not")," listed."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[a-z]")," - Matches one case-sensitive character in range in the brackets."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[!x-z]")," - Like the above, but will match any character ",(0,r.kt)("em",{parentName:"li"},"not")," in range."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"{glob,glob}")," - Matches one or more comma separated list of sub-glob patterns."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"")," - Matches a sub-glob within a defined bounds (represented by ",(0,r.kt)("inlineCode",{parentName:"li"},"#"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"!")," - At the start of a pattern, will negate previous positive patterns.")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The biggest difference between JavaScript and Rust globs is ",(0,r.kt)("inlineCode",{parentName:"p"},"?"),". In JavaScript, this marks the\npreceding character as optional, while in Rust it matches exactly 1 character.")),(0,r.kt)("h3",{id:"examples"},"Examples"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"README.{md,mdx,txt}\nsrc/**/*\ntests/**/*.?js\n!**/__tests__/**/*\nlogs/<[0-9]:4>-<[0-9]:2>-<[0-9]:2>.log\n")),(0,r.kt)("h2",{id:"project-relative"},"Project relative"),(0,r.kt)("p",null,"When configuring ",(0,r.kt)("a",{parentName:"p",href:"../config/project#filegroups"},(0,r.kt)("inlineCode",{parentName:"a"},"fileGroups")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs")),",\nand ",(0,r.kt)("a",{parentName:"p",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs")),", all listed file paths and globs are relative from the\nproject root they will be ran in. They ",(0,r.kt)("em",{parentName:"p"},"must not")," start with ",(0,r.kt)("inlineCode",{parentName:"p"},"./"),", or traverse upwards with ",(0,r.kt)("inlineCode",{parentName:"p"},".."),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Valid\nsrc/**/*\npackage.json\n\n# Invalid\n./src/**/*\n../utils\n")),(0,r.kt)("h2",{id:"workspace-relative"},"Workspace relative"),(0,r.kt)("p",null,"When configuring ",(0,r.kt)("a",{parentName:"p",href:"../config/project#filegroups"},(0,r.kt)("inlineCode",{parentName:"a"},"fileGroups")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs")),",\nand ",(0,r.kt)("a",{parentName:"p",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs")),", a listed file path or glob can be prefixed with ",(0,r.kt)("inlineCode",{parentName:"p"},"/")," to\nresolve relative from the workspace root, and ",(0,r.kt)("em",{parentName:"p"},"not")," the project root."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# In project\npackage.json\n\n# In workspace\n/package.json\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/24556f49.8a8d4bec.js b/assets/js/24556f49.8a8d4bec.js deleted file mode 100644 index ee1707891fe..00000000000 --- a/assets/js/24556f49.8a8d4bec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[744],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=r,k=m["".concat(p,".").concat(d)]||m[d]||u[d]||i;return n?a.createElement(k,o(o({ref:t},c),{},{components:n})):a.createElement(k,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=n(25773),r=(n(27378),n(35318));const i={title:"File patterns"},o=void 0,l={unversionedId:"concepts/file-pattern",id:"concepts/file-pattern",title:"File patterns",description:"Globs",source:"@site/docs/concepts/file-pattern.mdx",sourceDirName:"concepts",slug:"/concepts/file-pattern",permalink:"/docs/concepts/file-pattern",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/file-pattern.mdx",tags:[],version:"current",frontMatter:{title:"File patterns"},sidebar:"docs",previous:{title:"File groups",permalink:"/docs/concepts/file-group"},next:{title:"Query language",permalink:"/docs/concepts/query-lang"}},p={},s=[{value:"Globs",id:"globs",level:2},{value:"Supported syntax",id:"supported-syntax",level:3},{value:"Examples",id:"examples",level:3},{value:"Project relative",id:"project-relative",level:2},{value:"Workspace relative",id:"workspace-relative",level:2}],c={toc:s};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"globs"},"Globs"),(0,r.kt)("p",null,"Globs in moon are ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/olson-sean-k/wax"},"Rust-based globs"),", ",(0,r.kt)("em",{parentName:"p"},"not")," JavaScript-based.\nThis may result in different or unexpected results. The following guidelines must be met when using\nglobs:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Must use forward slashes (",(0,r.kt)("inlineCode",{parentName:"li"},"/"),") for path separators, even on Windows."),(0,r.kt)("li",{parentName:"ul"},"Must ",(0,r.kt)("em",{parentName:"li"},"not")," start with or use any relative path parts, ",(0,r.kt)("inlineCode",{parentName:"li"},".")," or ",(0,r.kt)("inlineCode",{parentName:"li"},".."),".")),(0,r.kt)("h3",{id:"supported-syntax"},"Supported syntax"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"*")," - Matches zero or more characters, but does not match the ",(0,r.kt)("inlineCode",{parentName:"li"},"/")," character. Will attempt to match\nthe longest possible text (eager)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"$")," - Like ",(0,r.kt)("inlineCode",{parentName:"li"},"*"),", but will attempt to match the shortest possible text (lazy)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"**")," - Matches zero or more directories."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"?")," - Matches exactly one character, but not ",(0,r.kt)("inlineCode",{parentName:"li"},"/"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[abc]")," - Matches one case-sensitive character listed in the brackets."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[!xyz]")," - Like the above, but will match any character ",(0,r.kt)("em",{parentName:"li"},"not")," listed."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[a-z]")," - Matches one case-sensitive character in range in the brackets."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[!x-z]")," - Like the above, but will match any character ",(0,r.kt)("em",{parentName:"li"},"not")," in range."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"{glob,glob}")," - Matches one or more comma separated list of sub-glob patterns."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"")," - Matches a sub-glob within a defined bounds (represented by ",(0,r.kt)("inlineCode",{parentName:"li"},"#"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"!")," - At the start of a pattern, will negate previous positive patterns.")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The biggest difference between JavaScript and Rust globs is ",(0,r.kt)("inlineCode",{parentName:"p"},"?"),". In JavaScript, this marks the\npreceding character as optional, while in Rust it matches exactly 1 character.")),(0,r.kt)("h3",{id:"examples"},"Examples"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"README.{md,mdx,txt}\nsrc/**/*\ntests/**/*.?js\n!**/__tests__/**/*\nlogs/<[0-9]:4>-<[0-9]:2>-<[0-9]:2>.log\n")),(0,r.kt)("h2",{id:"project-relative"},"Project relative"),(0,r.kt)("p",null,"When configuring ",(0,r.kt)("a",{parentName:"p",href:"../config/project#filegroups"},(0,r.kt)("inlineCode",{parentName:"a"},"fileGroups")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs")),",\nand ",(0,r.kt)("a",{parentName:"p",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs")),", all listed file paths and globs are relative from the\nproject root they will be ran in. They ",(0,r.kt)("em",{parentName:"p"},"must not")," start with ",(0,r.kt)("inlineCode",{parentName:"p"},"./"),", or traverse upwards with ",(0,r.kt)("inlineCode",{parentName:"p"},".."),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Valid\nsrc/**/*\npackage.json\n\n# Invalid\n./src/**/*\n../utils\n")),(0,r.kt)("h2",{id:"workspace-relative"},"Workspace relative"),(0,r.kt)("p",null,"When configuring ",(0,r.kt)("a",{parentName:"p",href:"../config/project#filegroups"},(0,r.kt)("inlineCode",{parentName:"a"},"fileGroups")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs")),",\nand ",(0,r.kt)("a",{parentName:"p",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs")),", a listed file path or glob can be prefixed with ",(0,r.kt)("inlineCode",{parentName:"p"},"/")," to\nresolve relative from the workspace root, and ",(0,r.kt)("em",{parentName:"p"},"not")," the project root."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# In project\npackage.json\n\n# In workspace\n/package.json\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/245d4974.b247685f.js b/assets/js/245d4974.b247685f.js new file mode 100644 index 00000000000..d7e321cc0e2 --- /dev/null +++ b/assets/js/245d4974.b247685f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53733],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,g=d["".concat(l,".").concat(u)]||d[u]||m[u]||r;return n?a.createElement(g,i(i({ref:t},c),{},{components:n})):a.createElement(g,i({ref:t},c))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},i=void 0,s={permalink:"/blog/moon-v1.0",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx",source:"@site/blog/2023-03-27_moon-v1.0.mdx",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",description:"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've",date:"2023-03-27T00:00:00.000Z",formattedDate:"March 27, 2023",tags:[{label:"projects",permalink:"/blog/tags/projects"},{label:"constraints",permalink:"/blog/tags/constraints"},{label:"tags",permalink:"/blog/tags/tags"},{label:"env-vars",permalink:"/blog/tags/env-vars"},{label:"tokens",permalink:"/blog/tags/tokens"}],readingTime:4.745,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},prevItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"},nextItem:{title:"proto v0.3 - Improved npm, go, and version requirement support",permalink:"/blog/proto-v0.3"}},l={image:n(37990).Z,authorsImageUrls:[void 0]},p=[{value:"The road to v1",id:"the-road-to-v1",level:2},{value:"Project boundaries with constraints",id:"project-boundaries-with-constraints",level:2},{value:"Project tagging",id:"project-tagging",level:2},{value:"Querying projects by tag",id:"querying-projects-by-tag",level:3},{value:"Enforce relationships with tags",id:"enforce-relationships-with-tags",level:3},{value:"Shells for system tasks",id:"shells-for-system-tasks",level:2},{value:"Environment variable substitution",id:"environment-variable-substitution",level:2},{value:"Date/time token variables",id:"datetime-token-variables",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\nimprovements."),(0,o.kt)("h2",{id:"the-road-to-v1"},"The road to v1"),(0,o.kt)("p",null,"It's been 10 months since moon launched publicly, and since that time we have landed 501 pull\nrequests, fixed 100's of bugs, made 16 breaking changes, released 26 versions, and have been used by\ncompanies like Ikea, SumUp, Depot, and Gallery. It's been a wild ride, and we're excited to finally\nreach a stable v1 release."),(0,o.kt)("h2",{id:"project-boundaries-with-constraints"},"Project boundaries with constraints"),(0,o.kt)("p",null,"One feature that moon has not supported, but is critical for large monorepos, is project boundaries.\nA project boundary is a concept that enforces a strict relationship between projects, and is a\ncommon pattern in monorepos. For example, a project may only be allowed to depend on projects with a\n",(0,o.kt)("a",{parentName:"p",href:"#enforce-relationships-with-tags"},"specific tag"),", or a project of a specific type."),(0,o.kt)("p",null,"moon now supports this functionality through the new\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/workspace#constraints"},(0,o.kt)("inlineCode",{parentName:"a"},"constraints"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". The primary constraint we're introducing is\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/workspace#enforceprojecttyperelationships"},(0,o.kt)("inlineCode",{parentName:"a"},"enforceProjectTypeRelationships")),", which\nenforces relationships between projects based on their ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," field."),(0,o.kt)("p",null,"For example, an application can only depend on library or tool based projects, but ",(0,o.kt)("em",{parentName:"p"},"not")," other\napplications (this is a code smell). This setting is enabled by default!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"constraints:\n enforceProjectTypeRelationships: true\n")),(0,o.kt)("p",null,"And that's not all, continue reading for more information on tag based constraints!"),(0,o.kt)("h2",{id:"project-tagging"},"Project tagging"),(0,o.kt)("p",null,"Everyone is familiar with the concept of tagging, and moon's implementation is no different. Tags\nare a simple mechanism for categorizing projects, and can be defined through the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#tags"},(0,o.kt)("inlineCode",{parentName:"a"},"tags"))," setting in ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tags:\n - 'react'\n - 'prisma'\n")),(0,o.kt)("p",null,"Tags can be used to group projects together for easier querying, enforcing of project boundaries,\napplying constraints, and more in the future. Tags will become a staple for maintaining repositories\nat scale. Continue reading for more information!"),(0,o.kt)("h3",{id:"querying-projects-by-tag"},"Querying projects by tag"),(0,o.kt)("p",null,"The first integration with tags is project querying. You can now query for projects by tag using the\nnew ",(0,o.kt)("inlineCode",{parentName:"p"},"--tags")," option in the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/query/projects"},(0,o.kt)("inlineCode",{parentName:"a"},"moon query projects"))," command. For\nexample, say you want to find all projects that are tagged with ",(0,o.kt)("inlineCode",{parentName:"p"},"vue")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"trpc"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon query projects --tags 'vue|trpc'\n")),(0,o.kt)("h3",{id:"enforce-relationships-with-tags"},"Enforce relationships with tags"),(0,o.kt)("p",null,"Another feature of tags is enforcing relationships between projects using our new\n",(0,o.kt)("a",{parentName:"p",href:"#project-constraints"},(0,o.kt)("inlineCode",{parentName:"a"},"constraints"))," setting. When a tagged constraint is defined, it requires all\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/project#dependencies"},"dependencies")," of a tagged project to require 1 of the\nconfigured tags, otherwise an error is thrown during project graph creation."),(0,o.kt)("p",null,"To demonstrate this, take the following configuration:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2,3}',title:'".moon/workspace.yml"',"{2,3}":!0},"constraints:\n tagRelationships:\n next: ['react', 'trpc']\n")),(0,o.kt)("p",null,"This dictates that all dependencies of a project with the ",(0,o.kt)("inlineCode",{parentName:"p"},"next")," tag, must declare either ",(0,o.kt)("inlineCode",{parentName:"p"},"react"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"trpc"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"next")," in their own tags. This is great for crafting a monorepo with strict project\nboundaries!"),(0,o.kt)("h2",{id:"shells-for-system-tasks"},"Shells for system tasks"),(0,o.kt)("p",null,"Up until now, all executed tasks would not be wrapped in a shell for 1 reason, to ensure tasks are\ndeterministic. A major goal for moon is that tasks are deterministic and easily reproducible across\nall machines. Shells break this guarantee, as they can introduce subtle bugs that are difficult to\ndiagnose, and may differ wildly between developers and machines."),(0,o.kt)("p",null,"However in practice, not supporting shells has been a major pain point for many users, and for the\nmost part, most system tasks typically run common commands or execute pre-defined scripts. The\nchance of a non-deterministic build is very small. As such, we've decided to make a compromise, and\nallow shells for ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#platform-1"},"system tasks"),", but not for language based tasks."),(0,o.kt)("p",null,"For example, the following tasks:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'echo $PWD'\n platform: 'system'\n global:\n command: 'bin-on-path'\n platform: 'system'\n")),(0,o.kt)("p",null,"Would now be executed as ",(0,o.kt)("inlineCode",{parentName:"p"},"/bin/sh -c 'echo $PWD'")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"/bin/sh -c 'bin-on-path'")," on Unix platforms\nrespectively. On Windows, we execute tasks with ",(0,o.kt)("inlineCode",{parentName:"p"},"pwsh.exe -c")," and pass arguments via stdin."),(0,o.kt)("p",null,"We're also taking this a step further, by introducing a new task option called\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#shell"},(0,o.kt)("inlineCode",{parentName:"a"},"shell")),", that can be used to toggle the shell wrapping on or off. When\nturned off, this allows you to customize and execute the shell as you please."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'bash -c \"echo $PWD\"'\n platform: 'system'\n options:\n shell: false\n")),(0,o.kt)("h2",{id:"environment-variable-substitution"},"Environment variable substitution"),(0,o.kt)("p",null,"moon supports granular environment variables through the project-level\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting, task-level ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env-1"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting,\nand the task ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#envfile"},(0,o.kt)("inlineCode",{parentName:"a"},"envFile"))," option. We're expanding their functionality\nwith variable substitution, allowing the value of another environment variable to be interpolated\nusing the syntax ",(0,o.kt)("inlineCode",{parentName:"p"},"${VAR_NAME}"),". This is especially useful for composing complex environment\nvariables."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'app start'\n env:\n APP_TARGET: '${REGION}-${ENVIRONMENT}'\n")),(0,o.kt)("p",null,"The same substitution syntax can also be used within ",(0,o.kt)("inlineCode",{parentName:"p"},".env")," files."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".env"',title:'".env"'},'APP_TARGET="${REGION}-${ENVIRONMENT}"\n')),(0,o.kt)("h2",{id:"datetime-token-variables"},"Date/time token variables"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/token"},"Tokens")," are a mechanism used in task configuration for dynamically injecting\nvalues from the current project or task, especially when task inheritance is involved. Tokens have\nexisted since moon's inception, without much change... until now."),(0,o.kt)("p",null,"We're excited to introduce a new set of tokens for referencing the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/token#datetime"},"current date or time"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"$date"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"$time"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"$datetime"),", and\n",(0,o.kt)("inlineCode",{parentName:"p"},"$timestamp"),". With these new tokens, you're now able to implement clever or unusual solutions, like\ngrouping builds or deploys based on the current timestamp."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n deploy:\n command: 'app deploy --output ./build/$timestamp'\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.0.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"hasher.warnOnMissingInputs")," setting to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),"."),(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"$projectAlias")," task token."),(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"telemetry")," setting to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),"."),(0,o.kt)("li",{parentName:"ul"},"Updated the new version check to only run on the ",(0,o.kt)("inlineCode",{parentName:"li"},"check"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"ci"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"run"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"sync")," commands.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v1.1 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Polish and stability initiatives."),(0,o.kt)("li",{parentName:"ul"},"Task inheritance based on tags."),(0,o.kt)("li",{parentName:"ul"},"Deno tier 3 support.")))}m.isMDXComponent=!0},37990:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.0-92cfbbbcd27cb6dd1411dbd29b0f1985.png"}}]); \ No newline at end of file diff --git a/assets/js/245d4974.b7e3ec45.js b/assets/js/245d4974.b7e3ec45.js deleted file mode 100644 index 5e1acb6ae93..00000000000 --- a/assets/js/245d4974.b7e3ec45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3733],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,g=d["".concat(l,".").concat(u)]||d[u]||m[u]||r;return n?a.createElement(g,i(i({ref:t},c),{},{components:n})):a.createElement(g,i({ref:t},c))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},i=void 0,s={permalink:"/blog/moon-v1.0",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx",source:"@site/blog/2023-03-27_moon-v1.0.mdx",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",description:"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've",date:"2023-03-27T00:00:00.000Z",formattedDate:"March 27, 2023",tags:[{label:"projects",permalink:"/blog/tags/projects"},{label:"constraints",permalink:"/blog/tags/constraints"},{label:"tags",permalink:"/blog/tags/tags"},{label:"env-vars",permalink:"/blog/tags/env-vars"},{label:"tokens",permalink:"/blog/tags/tokens"}],readingTime:4.745,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},prevItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"},nextItem:{title:"proto v0.3 - Improved npm, go, and version requirement support",permalink:"/blog/proto-v0.3"}},l={image:n(37990).Z,authorsImageUrls:[void 0]},p=[{value:"The road to v1",id:"the-road-to-v1",level:2},{value:"Project boundaries with constraints",id:"project-boundaries-with-constraints",level:2},{value:"Project tagging",id:"project-tagging",level:2},{value:"Querying projects by tag",id:"querying-projects-by-tag",level:3},{value:"Enforce relationships with tags",id:"enforce-relationships-with-tags",level:3},{value:"Shells for system tasks",id:"shells-for-system-tasks",level:2},{value:"Environment variable substitution",id:"environment-variable-substitution",level:2},{value:"Date/time token variables",id:"datetime-token-variables",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\nimprovements."),(0,o.kt)("h2",{id:"the-road-to-v1"},"The road to v1"),(0,o.kt)("p",null,"It's been 10 months since moon launched publicly, and since that time we have landed 501 pull\nrequests, fixed 100's of bugs, made 16 breaking changes, released 26 versions, and have been used by\ncompanies like Ikea, SumUp, Depot, and Gallery. It's been a wild ride, and we're excited to finally\nreach a stable v1 release."),(0,o.kt)("h2",{id:"project-boundaries-with-constraints"},"Project boundaries with constraints"),(0,o.kt)("p",null,"One feature that moon has not supported, but is critical for large monorepos, is project boundaries.\nA project boundary is a concept that enforces a strict relationship between projects, and is a\ncommon pattern in monorepos. For example, a project may only be allowed to depend on projects with a\n",(0,o.kt)("a",{parentName:"p",href:"#enforce-relationships-with-tags"},"specific tag"),", or a project of a specific type."),(0,o.kt)("p",null,"moon now supports this functionality through the new\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/workspace#constraints"},(0,o.kt)("inlineCode",{parentName:"a"},"constraints"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". The primary constraint we're introducing is\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/workspace#enforceprojecttyperelationships"},(0,o.kt)("inlineCode",{parentName:"a"},"enforceProjectTypeRelationships")),", which\nenforces relationships between projects based on their ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," field."),(0,o.kt)("p",null,"For example, an application can only depend on library or tool based projects, but ",(0,o.kt)("em",{parentName:"p"},"not")," other\napplications (this is a code smell). This setting is enabled by default!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"constraints:\n enforceProjectTypeRelationships: true\n")),(0,o.kt)("p",null,"And that's not all, continue reading for more information on tag based constraints!"),(0,o.kt)("h2",{id:"project-tagging"},"Project tagging"),(0,o.kt)("p",null,"Everyone is familiar with the concept of tagging, and moon's implementation is no different. Tags\nare a simple mechanism for categorizing projects, and can be defined through the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#tags"},(0,o.kt)("inlineCode",{parentName:"a"},"tags"))," setting in ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tags:\n - 'react'\n - 'prisma'\n")),(0,o.kt)("p",null,"Tags can be used to group projects together for easier querying, enforcing of project boundaries,\napplying constraints, and more in the future. Tags will become a staple for maintaining repositories\nat scale. Continue reading for more information!"),(0,o.kt)("h3",{id:"querying-projects-by-tag"},"Querying projects by tag"),(0,o.kt)("p",null,"The first integration with tags is project querying. You can now query for projects by tag using the\nnew ",(0,o.kt)("inlineCode",{parentName:"p"},"--tags")," option in the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/query/projects"},(0,o.kt)("inlineCode",{parentName:"a"},"moon query projects"))," command. For\nexample, say you want to find all projects that are tagged with ",(0,o.kt)("inlineCode",{parentName:"p"},"vue")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"trpc"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon query projects --tags 'vue|trpc'\n")),(0,o.kt)("h3",{id:"enforce-relationships-with-tags"},"Enforce relationships with tags"),(0,o.kt)("p",null,"Another feature of tags is enforcing relationships between projects using our new\n",(0,o.kt)("a",{parentName:"p",href:"#project-constraints"},(0,o.kt)("inlineCode",{parentName:"a"},"constraints"))," setting. When a tagged constraint is defined, it requires all\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/project#dependencies"},"dependencies")," of a tagged project to require 1 of the\nconfigured tags, otherwise an error is thrown during project graph creation."),(0,o.kt)("p",null,"To demonstrate this, take the following configuration:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2,3}',title:'".moon/workspace.yml"',"{2,3}":!0},"constraints:\n tagRelationships:\n next: ['react', 'trpc']\n")),(0,o.kt)("p",null,"This dictates that all dependencies of a project with the ",(0,o.kt)("inlineCode",{parentName:"p"},"next")," tag, must declare either ",(0,o.kt)("inlineCode",{parentName:"p"},"react"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"trpc"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"next")," in their own tags. This is great for crafting a monorepo with strict project\nboundaries!"),(0,o.kt)("h2",{id:"shells-for-system-tasks"},"Shells for system tasks"),(0,o.kt)("p",null,"Up until now, all executed tasks would not be wrapped in a shell for 1 reason, to ensure tasks are\ndeterministic. A major goal for moon is that tasks are deterministic and easily reproducible across\nall machines. Shells break this guarantee, as they can introduce subtle bugs that are difficult to\ndiagnose, and may differ wildly between developers and machines."),(0,o.kt)("p",null,"However in practice, not supporting shells has been a major pain point for many users, and for the\nmost part, most system tasks typically run common commands or execute pre-defined scripts. The\nchance of a non-deterministic build is very small. As such, we've decided to make a compromise, and\nallow shells for ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#platform-1"},"system tasks"),", but not for language based tasks."),(0,o.kt)("p",null,"For example, the following tasks:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'echo $PWD'\n platform: 'system'\n global:\n command: 'bin-on-path'\n platform: 'system'\n")),(0,o.kt)("p",null,"Would now be executed as ",(0,o.kt)("inlineCode",{parentName:"p"},"/bin/sh -c 'echo $PWD'")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"/bin/sh -c 'bin-on-path'")," on Unix platforms\nrespectively. On Windows, we execute tasks with ",(0,o.kt)("inlineCode",{parentName:"p"},"pwsh.exe -c")," and pass arguments via stdin."),(0,o.kt)("p",null,"We're also taking this a step further, by introducing a new task option called\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#shell"},(0,o.kt)("inlineCode",{parentName:"a"},"shell")),", that can be used to toggle the shell wrapping on or off. When\nturned off, this allows you to customize and execute the shell as you please."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'bash -c \"echo $PWD\"'\n platform: 'system'\n options:\n shell: false\n")),(0,o.kt)("h2",{id:"environment-variable-substitution"},"Environment variable substitution"),(0,o.kt)("p",null,"moon supports granular environment variables through the project-level\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting, task-level ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env-1"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting,\nand the task ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#envfile"},(0,o.kt)("inlineCode",{parentName:"a"},"envFile"))," option. We're expanding their functionality\nwith variable substitution, allowing the value of another environment variable to be interpolated\nusing the syntax ",(0,o.kt)("inlineCode",{parentName:"p"},"${VAR_NAME}"),". This is especially useful for composing complex environment\nvariables."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'app start'\n env:\n APP_TARGET: '${REGION}-${ENVIRONMENT}'\n")),(0,o.kt)("p",null,"The same substitution syntax can also be used within ",(0,o.kt)("inlineCode",{parentName:"p"},".env")," files."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".env"',title:'".env"'},'APP_TARGET="${REGION}-${ENVIRONMENT}"\n')),(0,o.kt)("h2",{id:"datetime-token-variables"},"Date/time token variables"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/token"},"Tokens")," are a mechanism used in task configuration for dynamically injecting\nvalues from the current project or task, especially when task inheritance is involved. Tokens have\nexisted since moon's inception, without much change... until now."),(0,o.kt)("p",null,"We're excited to introduce a new set of tokens for referencing the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/token#datetime"},"current date or time"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"$date"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"$time"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"$datetime"),", and\n",(0,o.kt)("inlineCode",{parentName:"p"},"$timestamp"),". With these new tokens, you're now able to implement clever or unusual solutions, like\ngrouping builds or deploys based on the current timestamp."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n deploy:\n command: 'app deploy --output ./build/$timestamp'\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.0.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"hasher.warnOnMissingInputs")," setting to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),"."),(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"$projectAlias")," task token."),(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"telemetry")," setting to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),"."),(0,o.kt)("li",{parentName:"ul"},"Updated the new version check to only run on the ",(0,o.kt)("inlineCode",{parentName:"li"},"check"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"ci"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"run"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"sync")," commands.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v1.1 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Polish and stability initiatives."),(0,o.kt)("li",{parentName:"ul"},"Task inheritance based on tags."),(0,o.kt)("li",{parentName:"ul"},"Deno tier 3 support.")))}m.isMDXComponent=!0},37990:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.0-92cfbbbcd27cb6dd1411dbd29b0f1985.png"}}]); \ No newline at end of file diff --git a/assets/js/2497986c.449f18fa.js b/assets/js/2497986c.449f18fa.js new file mode 100644 index 00000000000..c6a6e18f78e --- /dev/null +++ b/assets/js/2497986c.449f18fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48114],{80674:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/plugin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":6,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2497986c.b9358fd5.js b/assets/js/2497986c.b9358fd5.js deleted file mode 100644 index bcfbba011f8..00000000000 --- a/assets/js/2497986c.b9358fd5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8114],{80674:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/plugin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":6,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/24a07a83.7798beba.js b/assets/js/24a07a83.7798beba.js deleted file mode 100644 index 216f9a378d0..00000000000 --- a/assets/js/24a07a83.7798beba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4871],{7222:e=>{e.exports=JSON.parse('{"label":"generator","permalink":"/docs/tags/generator","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/24a07a83.dc6fa7da.js b/assets/js/24a07a83.dc6fa7da.js new file mode 100644 index 00000000000..b763dbd3f31 --- /dev/null +++ b/assets/js/24a07a83.dc6fa7da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24871],{7222:e=>{e.exports=JSON.parse('{"label":"generator","permalink":"/docs/tags/generator","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/24adbf31.8324a4e1.js b/assets/js/24adbf31.8324a4e1.js new file mode 100644 index 00000000000..268ba6b01ba --- /dev/null +++ b/assets/js/24adbf31.8324a4e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93160],{57059:e=>{e.exports=JSON.parse('{"banner":"","breadcrumbs":true,"gitRefName":"master","minimal":true,"pluginId":"default","scopes":[]}')}}]); \ No newline at end of file diff --git a/assets/js/24adbf31.f7bd552f.js b/assets/js/24adbf31.f7bd552f.js deleted file mode 100644 index efbf5493960..00000000000 --- a/assets/js/24adbf31.f7bd552f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3160],{57059:e=>{e.exports=JSON.parse('{"banner":"","breadcrumbs":true,"gitRefName":"master","minimal":true,"pluginId":"default","scopes":[]}')}}]); \ No newline at end of file diff --git a/assets/js/250d5d50.21e85a9f.js b/assets/js/250d5d50.21e85a9f.js deleted file mode 100644 index 2d1b995df47..00000000000 --- a/assets/js/250d5d50.21e85a9f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8007],{69537:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tier","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/250d5d50.9e37bb40.js b/assets/js/250d5d50.9e37bb40.js new file mode 100644 index 00000000000..99abbade2c8 --- /dev/null +++ b/assets/js/250d5d50.9e37bb40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68007],{69537:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tier","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2573a9a7.849d5634.js b/assets/js/2573a9a7.849d5634.js new file mode 100644 index 00000000000..e3ea5240995 --- /dev/null +++ b/assets/js/2573a9a7.849d5634.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78195],{78526:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/registry","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2573a9a7.eae4e3af.js b/assets/js/2573a9a7.eae4e3af.js deleted file mode 100644 index 0d28697e15d..00000000000 --- a/assets/js/2573a9a7.eae4e3af.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8195],{78526:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/registry","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/26419218.0a760924.js b/assets/js/26419218.0a760924.js deleted file mode 100644 index 2e996a13fff..00000000000 --- a/assets/js/26419218.0a760924.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2865],{52770:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/platform","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/26419218.64dd0a0c.js b/assets/js/26419218.64dd0a0c.js new file mode 100644 index 00000000000..2c83d823af9 --- /dev/null +++ b/assets/js/26419218.64dd0a0c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62865],{52770:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/platform","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/271a7b09.8059694d.js b/assets/js/271a7b09.8059694d.js new file mode 100644 index 00000000000..7d6c0bcd155 --- /dev/null +++ b/assets/js/271a7b09.8059694d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30808],{91428:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/wasm","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/271a7b09.c59c003f.js b/assets/js/271a7b09.c59c003f.js deleted file mode 100644 index daed304b604..00000000000 --- a/assets/js/271a7b09.c59c003f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[808],{91428:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/wasm","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2804bc6d.83e73047.js b/assets/js/2804bc6d.83e73047.js deleted file mode 100644 index 3513177b8c1..00000000000 --- a/assets/js/2804bc6d.83e73047.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8670],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=m(n),g=o,f=u["".concat(p,".").concat(g)]||u[g]||c[g]||a;return n?r.createElement(f,l(l({ref:t},s),{},{components:n})):r.createElement(f,l({ref:t},s))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var m=2;m{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var r=n(25773),o=(n(27378),n(35318));const a={slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},l=void 0,i={permalink:"/blog/moon-v1.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx",source:"@site/blog/2023-04-24_moon-v1.3.mdx",title:"moon v1.3 - Advanced run targeting and an official proto plugin",description:"After many months of design and development, we're finally introducing MQL, our own unique query",date:"2023-04-24T00:00:00.000Z",formattedDate:"April 24, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"proto",permalink:"/blog/tags/proto"},{label:"schema",permalink:"/blog/tags/schema"},{label:"toml",permalink:"/blog/tags/toml"},{label:"target",permalink:"/blog/tags/target"}],readingTime:2.35,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},prevItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"},nextItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"}},p={image:n(21774).Z,authorsImageUrls:[void 0]},m=[],s={toc:m};function c(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"After many months of design and development, we're finally introducing MQL, our own unique query\nlanguage!"))}c.isMDXComponent=!0},21774:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.3-042bd7752666b4bbaf030b6572d4052e.png"}}]); \ No newline at end of file diff --git a/assets/js/2804bc6d.95a87ba0.js b/assets/js/2804bc6d.95a87ba0.js new file mode 100644 index 00000000000..7931bd48212 --- /dev/null +++ b/assets/js/2804bc6d.95a87ba0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38670],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=m(n),g=o,f=u["".concat(p,".").concat(g)]||u[g]||c[g]||a;return n?r.createElement(f,l(l({ref:t},s),{},{components:n})):r.createElement(f,l({ref:t},s))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var m=2;m{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var r=n(25773),o=(n(27378),n(35318));const a={slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},l=void 0,i={permalink:"/blog/moon-v1.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx",source:"@site/blog/2023-04-24_moon-v1.3.mdx",title:"moon v1.3 - Advanced run targeting and an official proto plugin",description:"After many months of design and development, we're finally introducing MQL, our own unique query",date:"2023-04-24T00:00:00.000Z",formattedDate:"April 24, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"proto",permalink:"/blog/tags/proto"},{label:"schema",permalink:"/blog/tags/schema"},{label:"toml",permalink:"/blog/tags/toml"},{label:"target",permalink:"/blog/tags/target"}],readingTime:2.35,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},prevItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"},nextItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"}},p={image:n(21774).Z,authorsImageUrls:[void 0]},m=[],s={toc:m};function c(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"After many months of design and development, we're finally introducing MQL, our own unique query\nlanguage!"))}c.isMDXComponent=!0},21774:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.3-042bd7752666b4bbaf030b6572d4052e.png"}}]); \ No newline at end of file diff --git a/assets/js/28508d4c.214abf2b.js b/assets/js/28508d4c.214abf2b.js deleted file mode 100644 index 3994b7f7251..00000000000 --- a/assets/js/28508d4c.214abf2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1816],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(l,".").concat(g)]||m[g]||u[g]||i;return r?n.createElement(f,a(a({ref:t},c),{},{components:r})):n.createElement(f,a({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:o,a[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const i={slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},a=void 0,p={permalink:"/blog/proto-v0.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx",source:"@site/blog/2023-04-21_proto-v0.7.mdx",title:"proto v0.7 - First step towards plugins",description:"With this release, we're very excited to announce our initial support for plugins in proto!",date:"2023-04-21T00:00:00.000Z",formattedDate:"April 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugins",permalink:"/blog/tags/plugins"}],readingTime:2.36,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},prevItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"},nextItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"}},l={image:r(78813).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're very excited to announce our initial support for plugins in proto!"))}u.isMDXComponent=!0},78813:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.7-a86209ab88fb0d3b882a64bedb0fe971.png"}}]); \ No newline at end of file diff --git a/assets/js/28508d4c.21ce6b9a.js b/assets/js/28508d4c.21ce6b9a.js new file mode 100644 index 00000000000..efeb439a33d --- /dev/null +++ b/assets/js/28508d4c.21ce6b9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91816],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(l,".").concat(g)]||m[g]||u[g]||i;return r?n.createElement(f,a(a({ref:t},c),{},{components:r})):n.createElement(f,a({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:o,a[1]=p;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const i={slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},a=void 0,p={permalink:"/blog/proto-v0.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx",source:"@site/blog/2023-04-21_proto-v0.7.mdx",title:"proto v0.7 - First step towards plugins",description:"With this release, we're very excited to announce our initial support for plugins in proto!",date:"2023-04-21T00:00:00.000Z",formattedDate:"April 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugins",permalink:"/blog/tags/plugins"}],readingTime:2.36,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.7",title:"proto v0.7 - First step towards plugins",authors:["milesj"],tags:["proto","plugins"],image:"./img/proto/v0.7.png"},prevItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"},nextItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"}},l={image:r(78813).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're very excited to announce our initial support for plugins in proto!"))}u.isMDXComponent=!0},78813:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.7-a86209ab88fb0d3b882a64bedb0fe971.png"}}]); \ No newline at end of file diff --git a/assets/js/2994c7d6.143c362e.js b/assets/js/2994c7d6.143c362e.js new file mode 100644 index 00000000000..0292bcdb3f9 --- /dev/null +++ b/assets/js/2994c7d6.143c362e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83088],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),m=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=m(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=m(n),d=o,k=c["".concat(s,".").concat(d)]||c[d]||u[d]||r;return n?a.createElement(k,l(l({ref:t},p),{},{components:n})):a.createElement(k,l({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var m=2;m{n.d(t,{Z:()=>l});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(25773),o=n(27378),r=n(37140),l=n(83457),i=n(35595),s=n(76457);const m="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:m}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=m[n].value;a!==i&&(c(t),s(a))},k=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},m.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:k,onClick:d},l,{className:(0,r.Z)("tabs__item",p,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function c(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",m)},o.createElement(u,(0,a.Z)({},e,t)),o.createElement(c,(0,a.Z)({},e,t)))}function k(e){const t=(0,s.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>c});var a=n(27378),o=n(35331),r=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function m(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:n}=e;const l=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function c(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=m(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=u({queryString:n,groupId:o}),[k,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,i.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),g=(()=>{const e=c??k;return p({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,r]),tabValues:r}}},72183:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>m,default:()=>k,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var a=n(25773),o=(n(27378),n(35318)),r=n(33337),l=n(39798),i=n(76911);const s={slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},m=void 0,p={permalink:"/blog/v0.23",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx",source:"@site/blog/2023-01-30_v0.23.mdx",title:"moon v0.23 - Scoped task inheritance, and project config updates",description:"With this release, we're launching the next iteration of our task inheritance model, as well as",date:"2023-01-30T00:00:00.000Z",formattedDate:"January 30, 2023",tags:[{label:"survey",permalink:"/blog/tags/survey"},{label:"tasks",permalink:"/blog/tags/tasks"},{label:"projects",permalink:"/blog/tags/projects"}],readingTime:5.74,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},prevItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"},nextItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"}},u={image:n(57936).Z,authorsImageUrls:[void 0]},c=[{value:"Developer survey",id:"developer-survey",level:2},{value:"Improved task inheritance model",id:"improved-task-inheritance-model",level:2},{value:"New .moon/tasks.yml (breaking)",id:"new-moontasksyml-breaking",level:3},{value:"New scoped tasks with .moon/tasks/*.yml",id:"new-scoped-tasks-with-moontasksyml",level:3},{value:"Moved implicitDeps and implicitInputs (breaking)",id:"moved-implicitdeps-and-implicitinputs-breaking",level:3},{value:"Project-level environment variables",id:"project-level-environment-variables",level:2},{value:"Globs in task outputs",id:"globs-in-task-outputs",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],d={toc:c};function k(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're launching the next iteration of our task inheritance model, as well as\nquality of life improvements for project configuration."),(0,o.kt)("h2",{id:"developer-survey"},"Developer survey"),(0,o.kt)("p",null,"Before we dive into this new release, we have a quick survey for everyone. We know how everyone\nfeels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice\nquestions."),(0,o.kt)("p",null,"We're looking for feedback on moon itself, what features you're looking for, what you currently do\nnot like, how you're currently using monorepos, your development workflows, so on and so forth. We'd\nvery much appreciate it if you could engage with this survey!"),(0,o.kt)("div",{class:"flex justify-center"},(0,o.kt)(i.Z,{label:"Take survey!",href:"https://a.sprig.com/UE1SOG1zV3o5SzdRfnNpZDpmOTQ5MjU1Yy1jYTZlLTRmYjQtOTRjZi0wMzZlZjExN2JjZDg=",size:"lg",mdxType:"Button"})),(0,o.kt)("h2",{id:"improved-task-inheritance-model"},"Improved task inheritance model"),(0,o.kt)("p",null,'One of the guiding principles behind moon is to simplify repository maintenance, with task\nmanagement being top of list. We weren\'t happy with the current state of things, as every build\nsystem and task runner that exists always opted for per-project task management, which is a massive\namount of overhead and tech debt in the long run. To combat this, moon was designed from the\nground-up using a task inheritance model, where "global" tasks were defined in\n',(0,o.kt)("a",{parentName:"p",href:"/docs/config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/project.yml")),", with per-project tasks still being an option with\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("p",null,"While inheritance worked great, it did have some shortcomings, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"With the addition of ",(0,o.kt)("a",{parentName:"li",href:"/blog/v0.21"},"new programming languages"),", there's no way to easily define\ntasks for specific languages, that should only be inherited by specific projects."),(0,o.kt)("li",{parentName:"ul"},"There's no way to differentiate tasks between applications or libraries, as they typically have\ndifferent build/compilation systems."),(0,o.kt)("li",{parentName:"ul"},'All of the problems above can be "solved" with\n',(0,o.kt)("a",{parentName:"li",href:"/docs/config/project#inheritedtasks"},(0,o.kt)("inlineCode",{parentName:"a"},"workspace.inheritedTasks"))," in all projects, but it's a\nmaintenance headache.")),(0,o.kt)("p",null,"We've been documenting a solution to these problems for many months now, and we're very excited to\nfinally release our new and improved task inheritance model that solves all of the problems above,\nand opens the doors for future enhancements! Keep reading for more information."),(0,o.kt)("h3",{id:"new-moontasksyml-breaking"},"New ",(0,o.kt)("inlineCode",{parentName:"h3"},".moon/tasks.yml")," (breaking)"),(0,o.kt)("p",null,"To start, we renamed ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/project.yml")," to ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks.yml")," as we want to emphasize that this\nconfiguration file is for task inheritance functionality only. However, the semantics of this file\nhas ",(0,o.kt)("em",{parentName:"p"},"not"),' changed, and is still "tasks to be inherited by ',(0,o.kt)("em",{parentName:"p"},"all"),' projects".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"$schema: 'https://moonrepo.dev/schemas/tasks.json'\n\ntasks:\n # ...\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"We'll automatically rename this file for you when running a ",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," command!")),(0,o.kt)("h3",{id:"new-scoped-tasks-with-moontasksyml"},"New scoped tasks with ",(0,o.kt)("inlineCode",{parentName:"h3"},".moon/tasks/*.yml")),(0,o.kt)("p",null,"The biggest change to task inheritance is that tasks can now be scoped by a project's\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language"))," or ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," using the new\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/.yml")," or ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/-.yml")," configuration files! Jump to the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/task-inheritance"},"official documentation on task inheritance")," for more information\non how scoping works, the lookup order of files, and much more."),(0,o.kt)("p",null,"As a demonstration, you can scope tasks to Node.js projects with ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/node.yml"),", Rust\napplications with ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/rust-application.yml"),", Go libraries with\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/go-library.yml"),", Ruby scripts with ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/ruby-tool.yml"),", so on and so forth!"),(0,o.kt)("p",null,"We're very excited for this feature, as it's something we personally needed, and we're sure you all\ndo as well. It also future proofs moon for new programming languages, additional implicit scenarios\nto handle, and yet to be discovered functionality."),(0,o.kt)(r.Z,{groupId:"scoped-task",defaultValue:"node",values:[{label:"Node",value:"node"},{label:"Go",value:"go"},{label:"PHP",value:"php"},{label:"Python",value:"python"},{label:"Ruby",value:"ruby"},{label:"Rust",value:"rust"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"node",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n format:\n command: 'prettier --write .'\n"))),(0,o.kt)(l.Z,{value:"go",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/go.yml"',title:'".moon/tasks/go.yml"'},"tasks:\n format:\n command: 'go fmt'\n"))),(0,o.kt)(l.Z,{value:"php",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/php.yml"',title:'".moon/tasks/php.yml"'},"tasks:\n format:\n command: 'phpcbf .'\n"))),(0,o.kt)(l.Z,{value:"python",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/python.yml"',title:'".moon/tasks/python.yml"'},"tasks:\n format:\n command: 'pylint .'\n"))),(0,o.kt)(l.Z,{value:"ruby",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/ruby.yml"',title:'".moon/tasks/ruby.yml"'},"tasks:\n format:\n command: 'rubocop -l'\n"))),(0,o.kt)(l.Z,{value:"rust",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/rust.yml"',title:'".moon/tasks/rust.yml"'},"tasks:\n format:\n command: 'cargo fmt --all --check'\n")))),(0,o.kt)("h3",{id:"moved-implicitdeps-and-implicitinputs-breaking"},"Moved ",(0,o.kt)("inlineCode",{parentName:"h3"},"implicitDeps")," and ",(0,o.kt)("inlineCode",{parentName:"h3"},"implicitInputs")," (breaking)"),(0,o.kt)("p",null,"To standardize inheritance and expansion related functionality, we've moved the\n",(0,o.kt)("inlineCode",{parentName:"p"},"runner.implicitDeps")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"runner.implicitInputs")," settings from ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," to\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/tasks#implicitdeps"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/tasks#implicitinputs"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks/*.yml"))," and removed the ",(0,o.kt)("inlineCode",{parentName:"p"},"runner")," prefix."),(0,o.kt)("p",null,"This allows for implicits to also be scoped accordingly and granularly. For example, projects can\nnow inherit dependency manager related files as implicit inputs on a per-language basis:"),(0,o.kt)(r.Z,{groupId:"scoped-task",defaultValue:"node",values:[{label:"Node",value:"node"},{label:"Go",value:"go"},{label:"PHP",value:"php"},{label:"Python",value:"python"},{label:"Ruby",value:"ruby"},{label:"Rust",value:"rust"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"node",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"implicitInputs:\n - 'package.json'\n"))),(0,o.kt)(l.Z,{value:"go",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/go.yml"',title:'".moon/tasks/go.yml"'},"implicitInputs:\n - 'go.mod'\n"))),(0,o.kt)(l.Z,{value:"php",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/php.yml"',title:'".moon/tasks/php.yml"'},"implicitInputs:\n - 'composer.json'\n"))),(0,o.kt)(l.Z,{value:"python",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/python.yml"',title:'".moon/tasks/python.yml"'},"implicitInputs:\n - 'pyproject.toml'\n"))),(0,o.kt)(l.Z,{value:"ruby",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/ruby.yml"',title:'".moon/tasks/ruby.yml"'},"implicitInputs:\n - 'Gemfile'\n"))),(0,o.kt)(l.Z,{value:"rust",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/rust.yml"',title:'".moon/tasks/rust.yml"'},"implicitInputs:\n - 'Cargo.toml'\n")))),(0,o.kt)("h2",{id:"project-level-environment-variables"},"Project-level environment variables"),(0,o.kt)("p",null,"Since moon's inception, tasks can be configured with pre-defined environment variables using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env-1"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting. These variables would then be passed to the command\nduring execution. This works perfectly for encapsulation, but becomes tedious when the same\nvariables are repeated for multiple tasks."),(0,o.kt)("p",null,"To remedy this, environment variables can now be defined at the top of\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," using the top-level ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting.\nVariables defined at the top-level will be inherited by all tasks in the current project, but will\nnot override task-level variables of the same name."),(0,o.kt)("p",null,"To demonstrate this, the following config:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n dev:\n # ...\n env:\n TARGET_ENV: 'development'\n\n build:\n # ...\n env:\n TARGET_ENV: 'development'\n\n serve:\n # ...\n env:\n TARGET_ENV: 'development'\n")),(0,o.kt)("p",null,"Can be rewritten as:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"env:\n TARGET_ENV: 'development'\n\ntasks:\n dev:\n # ...\n\n build:\n # ...\n\n serve:\n # ...\n")),(0,o.kt)("h2",{id:"globs-in-task-outputs"},"Globs in task outputs"),(0,o.kt)("p",null,"Another feature that's been around since moon's inception is task\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#outputs"},(0,o.kt)("inlineCode",{parentName:"a"},"outputs")),", which only supported relative files and folders. For\nhistorical reasons, it was the easiest solution at the time, but in practice, supporting more\ngranular control is better."),(0,o.kt)("p",null,"As such, task ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs")," now support glob patterns as well! This is perfect for restricting and\nfiltering down which files are cached in the artifact. However, be aware that during hydration (a\ncache hit), all files ",(0,o.kt)("em",{parentName:"p"},"not matching the glob")," will be deleted, so ensure that critical files ",(0,o.kt)("em",{parentName:"p"},"do"),"\nmatch."),(0,o.kt)("p",null,"To demonstrate this, if building a JavaScript project, you may want to include ",(0,o.kt)("inlineCode",{parentName:"p"},".js")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".css"),"\nfiles, but exclude everything else (",(0,o.kt)("inlineCode",{parentName:"p"},".map"),", etc)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n outputs:\n - 'build/**/*.{js,css}'\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.23.0"},"official release")," for a\nfull list of changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Updated ",(0,o.kt)("inlineCode",{parentName:"li"},"moon migrate from-turborepo")," to preserve globs in outputs."),(0,o.kt)("li",{parentName:"ul"},"Updated project graph to no longer cache when there's no VCS root."),(0,o.kt)("li",{parentName:"ul"},"Updated pnpm to use the new ",(0,o.kt)("inlineCode",{parentName:"li"},"pnpm dedupe")," command when the version is >= 7.26.0.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v0.24 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"New ",(0,o.kt)("inlineCode",{parentName:"li"},"moon query tasks")," command."),(0,o.kt)("li",{parentName:"ul"},"New per-project ",(0,o.kt)("inlineCode",{parentName:"li"},"platform")," setting."),(0,o.kt)("li",{parentName:"ul"},"Token support in task ",(0,o.kt)("inlineCode",{parentName:"li"},"outputs"),"."),(0,o.kt)("li",{parentName:"ul"},"TypeScript v5 support.")))}k.isMDXComponent=!0},57936:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.23-7f465b99a3ddadd6415b79205a586713.png"}}]); \ No newline at end of file diff --git a/assets/js/2994c7d6.94a4e91f.js b/assets/js/2994c7d6.94a4e91f.js deleted file mode 100644 index 86f91195551..00000000000 --- a/assets/js/2994c7d6.94a4e91f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3088],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),m=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=m(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=m(n),d=o,k=c["".concat(s,".").concat(d)]||c[d]||u[d]||r;return n?a.createElement(k,l(l({ref:t},p),{},{components:n})):a.createElement(k,l({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var m=2;m{n.d(t,{Z:()=>l});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(25773),o=n(27378),r=n(37140),l=n(83457),i=n(35595),s=n(76457);const m="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:m}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=m[n].value;a!==i&&(c(t),s(a))},k=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},m.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:k,onClick:d},l,{className:(0,r.Z)("tabs__item",p,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function c(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",m)},o.createElement(u,(0,a.Z)({},e,t)),o.createElement(c,(0,a.Z)({},e,t)))}function k(e){const t=(0,s.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>c});var a=n(27378),o=n(35331),r=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function m(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:n}=e;const l=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function c(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=m(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=u({queryString:n,groupId:o}),[k,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,i.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),g=(()=>{const e=c??k;return p({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,r]),tabValues:r}}},72183:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>m,default:()=>k,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var a=n(25773),o=(n(27378),n(35318)),r=n(33337),l=n(39798),i=n(76911);const s={slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},m=void 0,p={permalink:"/blog/v0.23",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx",source:"@site/blog/2023-01-30_v0.23.mdx",title:"moon v0.23 - Scoped task inheritance, and project config updates",description:"With this release, we're launching the next iteration of our task inheritance model, as well as",date:"2023-01-30T00:00:00.000Z",formattedDate:"January 30, 2023",tags:[{label:"survey",permalink:"/blog/tags/survey"},{label:"tasks",permalink:"/blog/tags/tasks"},{label:"projects",permalink:"/blog/tags/projects"}],readingTime:5.74,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.23",title:"moon v0.23 - Scoped task inheritance, and project config updates",authors:["milesj"],tags:["survey","tasks","projects"],image:"./img/v0.23.png"},prevItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"},nextItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"}},u={image:n(57936).Z,authorsImageUrls:[void 0]},c=[{value:"Developer survey",id:"developer-survey",level:2},{value:"Improved task inheritance model",id:"improved-task-inheritance-model",level:2},{value:"New .moon/tasks.yml (breaking)",id:"new-moontasksyml-breaking",level:3},{value:"New scoped tasks with .moon/tasks/*.yml",id:"new-scoped-tasks-with-moontasksyml",level:3},{value:"Moved implicitDeps and implicitInputs (breaking)",id:"moved-implicitdeps-and-implicitinputs-breaking",level:3},{value:"Project-level environment variables",id:"project-level-environment-variables",level:2},{value:"Globs in task outputs",id:"globs-in-task-outputs",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],d={toc:c};function k(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're launching the next iteration of our task inheritance model, as well as\nquality of life improvements for project configuration."),(0,o.kt)("h2",{id:"developer-survey"},"Developer survey"),(0,o.kt)("p",null,"Before we dive into this new release, we have a quick survey for everyone. We know how everyone\nfeels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice\nquestions."),(0,o.kt)("p",null,"We're looking for feedback on moon itself, what features you're looking for, what you currently do\nnot like, how you're currently using monorepos, your development workflows, so on and so forth. We'd\nvery much appreciate it if you could engage with this survey!"),(0,o.kt)("div",{class:"flex justify-center"},(0,o.kt)(i.Z,{label:"Take survey!",href:"https://a.sprig.com/UE1SOG1zV3o5SzdRfnNpZDpmOTQ5MjU1Yy1jYTZlLTRmYjQtOTRjZi0wMzZlZjExN2JjZDg=",size:"lg",mdxType:"Button"})),(0,o.kt)("h2",{id:"improved-task-inheritance-model"},"Improved task inheritance model"),(0,o.kt)("p",null,'One of the guiding principles behind moon is to simplify repository maintenance, with task\nmanagement being top of list. We weren\'t happy with the current state of things, as every build\nsystem and task runner that exists always opted for per-project task management, which is a massive\namount of overhead and tech debt in the long run. To combat this, moon was designed from the\nground-up using a task inheritance model, where "global" tasks were defined in\n',(0,o.kt)("a",{parentName:"p",href:"/docs/config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/project.yml")),", with per-project tasks still being an option with\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("p",null,"While inheritance worked great, it did have some shortcomings, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"With the addition of ",(0,o.kt)("a",{parentName:"li",href:"/blog/v0.21"},"new programming languages"),", there's no way to easily define\ntasks for specific languages, that should only be inherited by specific projects."),(0,o.kt)("li",{parentName:"ul"},"There's no way to differentiate tasks between applications or libraries, as they typically have\ndifferent build/compilation systems."),(0,o.kt)("li",{parentName:"ul"},'All of the problems above can be "solved" with\n',(0,o.kt)("a",{parentName:"li",href:"/docs/config/project#inheritedtasks"},(0,o.kt)("inlineCode",{parentName:"a"},"workspace.inheritedTasks"))," in all projects, but it's a\nmaintenance headache.")),(0,o.kt)("p",null,"We've been documenting a solution to these problems for many months now, and we're very excited to\nfinally release our new and improved task inheritance model that solves all of the problems above,\nand opens the doors for future enhancements! Keep reading for more information."),(0,o.kt)("h3",{id:"new-moontasksyml-breaking"},"New ",(0,o.kt)("inlineCode",{parentName:"h3"},".moon/tasks.yml")," (breaking)"),(0,o.kt)("p",null,"To start, we renamed ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/project.yml")," to ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks.yml")," as we want to emphasize that this\nconfiguration file is for task inheritance functionality only. However, the semantics of this file\nhas ",(0,o.kt)("em",{parentName:"p"},"not"),' changed, and is still "tasks to be inherited by ',(0,o.kt)("em",{parentName:"p"},"all"),' projects".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"$schema: 'https://moonrepo.dev/schemas/tasks.json'\n\ntasks:\n # ...\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"We'll automatically rename this file for you when running a ",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," command!")),(0,o.kt)("h3",{id:"new-scoped-tasks-with-moontasksyml"},"New scoped tasks with ",(0,o.kt)("inlineCode",{parentName:"h3"},".moon/tasks/*.yml")),(0,o.kt)("p",null,"The biggest change to task inheritance is that tasks can now be scoped by a project's\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language"))," or ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," using the new\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/.yml")," or ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/-.yml")," configuration files! Jump to the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/task-inheritance"},"official documentation on task inheritance")," for more information\non how scoping works, the lookup order of files, and much more."),(0,o.kt)("p",null,"As a demonstration, you can scope tasks to Node.js projects with ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/node.yml"),", Rust\napplications with ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/rust-application.yml"),", Go libraries with\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/go-library.yml"),", Ruby scripts with ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/ruby-tool.yml"),", so on and so forth!"),(0,o.kt)("p",null,"We're very excited for this feature, as it's something we personally needed, and we're sure you all\ndo as well. It also future proofs moon for new programming languages, additional implicit scenarios\nto handle, and yet to be discovered functionality."),(0,o.kt)(r.Z,{groupId:"scoped-task",defaultValue:"node",values:[{label:"Node",value:"node"},{label:"Go",value:"go"},{label:"PHP",value:"php"},{label:"Python",value:"python"},{label:"Ruby",value:"ruby"},{label:"Rust",value:"rust"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"node",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n format:\n command: 'prettier --write .'\n"))),(0,o.kt)(l.Z,{value:"go",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/go.yml"',title:'".moon/tasks/go.yml"'},"tasks:\n format:\n command: 'go fmt'\n"))),(0,o.kt)(l.Z,{value:"php",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/php.yml"',title:'".moon/tasks/php.yml"'},"tasks:\n format:\n command: 'phpcbf .'\n"))),(0,o.kt)(l.Z,{value:"python",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/python.yml"',title:'".moon/tasks/python.yml"'},"tasks:\n format:\n command: 'pylint .'\n"))),(0,o.kt)(l.Z,{value:"ruby",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/ruby.yml"',title:'".moon/tasks/ruby.yml"'},"tasks:\n format:\n command: 'rubocop -l'\n"))),(0,o.kt)(l.Z,{value:"rust",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/rust.yml"',title:'".moon/tasks/rust.yml"'},"tasks:\n format:\n command: 'cargo fmt --all --check'\n")))),(0,o.kt)("h3",{id:"moved-implicitdeps-and-implicitinputs-breaking"},"Moved ",(0,o.kt)("inlineCode",{parentName:"h3"},"implicitDeps")," and ",(0,o.kt)("inlineCode",{parentName:"h3"},"implicitInputs")," (breaking)"),(0,o.kt)("p",null,"To standardize inheritance and expansion related functionality, we've moved the\n",(0,o.kt)("inlineCode",{parentName:"p"},"runner.implicitDeps")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"runner.implicitInputs")," settings from ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," to\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/tasks#implicitdeps"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/tasks#implicitinputs"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks/*.yml"))," and removed the ",(0,o.kt)("inlineCode",{parentName:"p"},"runner")," prefix."),(0,o.kt)("p",null,"This allows for implicits to also be scoped accordingly and granularly. For example, projects can\nnow inherit dependency manager related files as implicit inputs on a per-language basis:"),(0,o.kt)(r.Z,{groupId:"scoped-task",defaultValue:"node",values:[{label:"Node",value:"node"},{label:"Go",value:"go"},{label:"PHP",value:"php"},{label:"Python",value:"python"},{label:"Ruby",value:"ruby"},{label:"Rust",value:"rust"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"node",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"implicitInputs:\n - 'package.json'\n"))),(0,o.kt)(l.Z,{value:"go",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/go.yml"',title:'".moon/tasks/go.yml"'},"implicitInputs:\n - 'go.mod'\n"))),(0,o.kt)(l.Z,{value:"php",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/php.yml"',title:'".moon/tasks/php.yml"'},"implicitInputs:\n - 'composer.json'\n"))),(0,o.kt)(l.Z,{value:"python",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/python.yml"',title:'".moon/tasks/python.yml"'},"implicitInputs:\n - 'pyproject.toml'\n"))),(0,o.kt)(l.Z,{value:"ruby",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/ruby.yml"',title:'".moon/tasks/ruby.yml"'},"implicitInputs:\n - 'Gemfile'\n"))),(0,o.kt)(l.Z,{value:"rust",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/rust.yml"',title:'".moon/tasks/rust.yml"'},"implicitInputs:\n - 'Cargo.toml'\n")))),(0,o.kt)("h2",{id:"project-level-environment-variables"},"Project-level environment variables"),(0,o.kt)("p",null,"Since moon's inception, tasks can be configured with pre-defined environment variables using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env-1"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting. These variables would then be passed to the command\nduring execution. This works perfectly for encapsulation, but becomes tedious when the same\nvariables are repeated for multiple tasks."),(0,o.kt)("p",null,"To remedy this, environment variables can now be defined at the top of\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," using the top-level ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#env"},(0,o.kt)("inlineCode",{parentName:"a"},"env"))," setting.\nVariables defined at the top-level will be inherited by all tasks in the current project, but will\nnot override task-level variables of the same name."),(0,o.kt)("p",null,"To demonstrate this, the following config:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"tasks:\n dev:\n # ...\n env:\n TARGET_ENV: 'development'\n\n build:\n # ...\n env:\n TARGET_ENV: 'development'\n\n serve:\n # ...\n env:\n TARGET_ENV: 'development'\n")),(0,o.kt)("p",null,"Can be rewritten as:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"env:\n TARGET_ENV: 'development'\n\ntasks:\n dev:\n # ...\n\n build:\n # ...\n\n serve:\n # ...\n")),(0,o.kt)("h2",{id:"globs-in-task-outputs"},"Globs in task outputs"),(0,o.kt)("p",null,"Another feature that's been around since moon's inception is task\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#outputs"},(0,o.kt)("inlineCode",{parentName:"a"},"outputs")),", which only supported relative files and folders. For\nhistorical reasons, it was the easiest solution at the time, but in practice, supporting more\ngranular control is better."),(0,o.kt)("p",null,"As such, task ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs")," now support glob patterns as well! This is perfect for restricting and\nfiltering down which files are cached in the artifact. However, be aware that during hydration (a\ncache hit), all files ",(0,o.kt)("em",{parentName:"p"},"not matching the glob")," will be deleted, so ensure that critical files ",(0,o.kt)("em",{parentName:"p"},"do"),"\nmatch."),(0,o.kt)("p",null,"To demonstrate this, if building a JavaScript project, you may want to include ",(0,o.kt)("inlineCode",{parentName:"p"},".js")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".css"),"\nfiles, but exclude everything else (",(0,o.kt)("inlineCode",{parentName:"p"},".map"),", etc)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n outputs:\n - 'build/**/*.{js,css}'\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.23.0"},"official release")," for a\nfull list of changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Updated ",(0,o.kt)("inlineCode",{parentName:"li"},"moon migrate from-turborepo")," to preserve globs in outputs."),(0,o.kt)("li",{parentName:"ul"},"Updated project graph to no longer cache when there's no VCS root."),(0,o.kt)("li",{parentName:"ul"},"Updated pnpm to use the new ",(0,o.kt)("inlineCode",{parentName:"li"},"pnpm dedupe")," command when the version is >= 7.26.0.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v0.24 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"New ",(0,o.kt)("inlineCode",{parentName:"li"},"moon query tasks")," command."),(0,o.kt)("li",{parentName:"ul"},"New per-project ",(0,o.kt)("inlineCode",{parentName:"li"},"platform")," setting."),(0,o.kt)("li",{parentName:"ul"},"Token support in task ",(0,o.kt)("inlineCode",{parentName:"li"},"outputs"),"."),(0,o.kt)("li",{parentName:"ul"},"TypeScript v5 support.")))}k.isMDXComponent=!0},57936:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.23-7f465b99a3ddadd6415b79205a586713.png"}}]); \ No newline at end of file diff --git a/assets/js/2adc0ba4.183514f3.js b/assets/js/2adc0ba4.183514f3.js new file mode 100644 index 00000000000..b7a6dce689d --- /dev/null +++ b/assets/js/2adc0ba4.183514f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70731],{71365:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rust","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2adc0ba4.d0591a26.js b/assets/js/2adc0ba4.d0591a26.js deleted file mode 100644 index aa04b04cff4..00000000000 --- a/assets/js/2adc0ba4.d0591a26.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[731],{71365:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rust","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2b3490d9.5c6f7c82.js b/assets/js/2b3490d9.5c6f7c82.js new file mode 100644 index 00000000000..ce0851755dd --- /dev/null +++ b/assets/js/2b3490d9.5c6f7c82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39200],{16019:e=>{e.exports=JSON.parse('{"label":"query","permalink":"/docs/tags/query","allTagsPath":"/docs/tags","count":1,"items":[{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","permalink":"/docs/concepts/query-lang"}]}')}}]); \ No newline at end of file diff --git a/assets/js/2b3490d9.7cc523de.js b/assets/js/2b3490d9.7cc523de.js deleted file mode 100644 index 3c32f20eb36..00000000000 --- a/assets/js/2b3490d9.7cc523de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9200],{16019:e=>{e.exports=JSON.parse('{"label":"query","permalink":"/docs/tags/query","allTagsPath":"/docs/tags","count":1,"items":[{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","permalink":"/docs/concepts/query-lang"}]}')}}]); \ No newline at end of file diff --git a/assets/js/2bd8a6cf.a7381ec8.js b/assets/js/2bd8a6cf.a7381ec8.js deleted file mode 100644 index 9bcd8a9a766..00000000000 --- a/assets/js/2bd8a6cf.a7381ec8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7143],{57514:s=>{s.exports=JSON.parse('{"label":"vcs","permalink":"/blog/tags/vcs","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/2bd8a6cf.f68e470d.js b/assets/js/2bd8a6cf.f68e470d.js new file mode 100644 index 00000000000..d4c1c37a66d --- /dev/null +++ b/assets/js/2bd8a6cf.f68e470d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67143],{57514:s=>{s.exports=JSON.parse('{"label":"vcs","permalink":"/blog/tags/vcs","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/2c114e85.4238c3fa.js b/assets/js/2c114e85.4238c3fa.js deleted file mode 100644 index 1a62da881ac..00000000000 --- a/assets/js/2c114e85.4238c3fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8663],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,i[1]=p;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>l});var r=n(25773),o=(n(27378),n(35318));const a={title:"project"},i=void 0,p={unversionedId:"commands/project",id:"commands/project",title:"project",description:"The moon project (or moon p) command will display all available information about a",source:"@site/docs/commands/project.mdx",sourceDirName:"commands",slug:"/commands/project",permalink:"/docs/commands/project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/project.mdx",tags:[],version:"current",frontMatter:{title:"project"},sidebar:"docs",previous:{title:"from-turborepo",permalink:"/docs/commands/migrate/from-turborepo"},next:{title:"project-graph",permalink:"/docs/commands/project-graph"}},c={},l=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],s={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project ")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon p"),") command will display all available information about a\nproject that has been configured and exists within the graph. If a project does not exist, the\nprogram will return with a 1 exit code."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon project web\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"")," - Name or alias of a project, as defined in ",(0,o.kt)("a",{parentName:"li",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--json")," - Print the project and its configuration as JSON.")),(0,o.kt)("h2",{id:"example-output"},"Example output"),(0,o.kt)("p",null,"The following output is an example of what this command prints, using our very own\n",(0,o.kt)("inlineCode",{parentName:"p"},"@moonrepo/runtime")," package."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RUNTIME\n\nID: runtime\nAlias: @moonrepo/runtime\nSource: packages/runtime\nRoot: /Projects/moon/packages/runtime\n\nTASKS\n\nbuild: packemon build --addEngines --addExports\nformat: prettier --check .\nlint: eslint --no-error-on-unmatched-pattern .\ntest: jest --passWithNoTests .\ntypecheck: tsc --build\n\nFILE GROUPS\n\nconfigs:\n - *.{js,json}\nsources:\n - src/**/*\n - types/**/*\ntests:\n - tests/**/*.test.*\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2c114e85.e293577a.js b/assets/js/2c114e85.e293577a.js new file mode 100644 index 00000000000..1630eae14d4 --- /dev/null +++ b/assets/js/2c114e85.e293577a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88663],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=l(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,i[1]=p;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>l});var r=n(25773),o=(n(27378),n(35318));const a={title:"project"},i=void 0,p={unversionedId:"commands/project",id:"commands/project",title:"project",description:"The moon project (or moon p) command will display all available information about a",source:"@site/docs/commands/project.mdx",sourceDirName:"commands",slug:"/commands/project",permalink:"/docs/commands/project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/project.mdx",tags:[],version:"current",frontMatter:{title:"project"},sidebar:"docs",previous:{title:"from-turborepo",permalink:"/docs/commands/migrate/from-turborepo"},next:{title:"project-graph",permalink:"/docs/commands/project-graph"}},c={},l=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],s={toc:l};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project ")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon p"),") command will display all available information about a\nproject that has been configured and exists within the graph. If a project does not exist, the\nprogram will return with a 1 exit code."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon project web\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"")," - Name or alias of a project, as defined in ",(0,o.kt)("a",{parentName:"li",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--json")," - Print the project and its configuration as JSON.")),(0,o.kt)("h2",{id:"example-output"},"Example output"),(0,o.kt)("p",null,"The following output is an example of what this command prints, using our very own\n",(0,o.kt)("inlineCode",{parentName:"p"},"@moonrepo/runtime")," package."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RUNTIME\n\nID: runtime\nAlias: @moonrepo/runtime\nSource: packages/runtime\nRoot: /Projects/moon/packages/runtime\n\nTASKS\n\nbuild: packemon build --addEngines --addExports\nformat: prettier --check .\nlint: eslint --no-error-on-unmatched-pattern .\ntest: jest --passWithNoTests .\ntypecheck: tsc --build\n\nFILE GROUPS\n\nconfigs:\n - *.{js,json}\nsources:\n - src/**/*\n - types/**/*\ntests:\n - tests/**/*.test.*\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2d15743f.74150ef1.js b/assets/js/2d15743f.74150ef1.js deleted file mode 100644 index e140bd87490..00000000000 --- a/assets/js/2d15743f.74150ef1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7941],{35318:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>f});var o=t(27378);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=o.createContext({}),c=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},d=function(e){var n=c(e.components);return o.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,i=e.mdxType,l=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),u=c(t),f=i,m=u["".concat(s,".").concat(f)]||u[f]||p[f]||l;return t?o.createElement(m,a(a({ref:n},d),{},{components:t})):o.createElement(m,a({ref:n},d))}));function f(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var l=t.length,a=new Array(l);a[0]=u;var r={};for(var s in n)hasOwnProperty.call(n,s)&&(r[s]=n[s]);r.originalType=e,r.mdxType="string"==typeof e?e:i,a[1]=r;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var o=t(25773),i=(t(27378),t(35318));const l={title:"Offline mode"},a=void 0,r={unversionedId:"guides/offline-mode",id:"guides/offline-mode",title:"Offline mode",description:"moon assumes that an internet connection is always available, as we download and install tools into",source:"@site/docs/guides/offline-mode.mdx",sourceDirName:"guides",slug:"/guides/offline-mode",permalink:"/docs/guides/offline-mode",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/offline-mode.mdx",tags:[],version:"current",frontMatter:{title:"Offline mode"},sidebar:"guides",previous:{title:"Docker usage",permalink:"/docs/guides/docker"},next:{title:"Open source usage",permalink:"/docs/guides/open-source"}},s={},c=[{value:"What's disabled when offline",id:"whats-disabled-when-offline",level:2},{value:"Toggling modes",id:"toggling-modes",level:2}],d={toc:c};function p(e){let{components:n,...t}=e;return(0,i.kt)("wrapper",(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"moon assumes that an internet connection is always available, as we download and install tools into\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\nWhile this is useful, having a constant internet connection isn't always viable."),(0,i.kt)("p",null,"To support workflows where internet isn't available or is spotty, moon will automatically check for\nan active internet connection, and drop into offline mode if necessary."),(0,i.kt)("h2",{id:"whats-disabled-when-offline"},"What's disabled when offline"),(0,i.kt)("p",null,"When offline, moon will skip or disable the following:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Automatic dependency installation will be skipped."),(0,i.kt)("li",{parentName:"ul"},"Toolchain will skip resolving, downloading, and installing tools, and instead use the local cache.",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"If no local cache available, will fallback to binaries found on ",(0,i.kt)("inlineCode",{parentName:"li"},"PATH"),"."),(0,i.kt)("li",{parentName:"ul"},"If not available on ",(0,i.kt)("inlineCode",{parentName:"li"},"PATH"),", will fail to run."))),(0,i.kt)("li",{parentName:"ul"},"Upgrade and version checks will be skipped.")),(0,i.kt)("h2",{id:"toggling-modes"},"Toggling modes"),(0,i.kt)("p",null,"While we automatically check for an internet connection, both online and offline modes can be forced\nwith the ",(0,i.kt)("inlineCode",{parentName:"p"},"PROTO_OFFLINE")," environment variable. Setting the variable to ",(0,i.kt)("inlineCode",{parentName:"p"},"1")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," will force\noffline mode, while ",(0,i.kt)("inlineCode",{parentName:"p"},"0")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"false")," will force online mode."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2d15743f.d7dd6924.js b/assets/js/2d15743f.d7dd6924.js new file mode 100644 index 00000000000..2cfe6e6962f --- /dev/null +++ b/assets/js/2d15743f.d7dd6924.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37941],{35318:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>f});var o=t(27378);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=o.createContext({}),c=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},d=function(e){var n=c(e.components);return o.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,i=e.mdxType,l=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),u=c(t),f=i,m=u["".concat(s,".").concat(f)]||u[f]||p[f]||l;return t?o.createElement(m,a(a({ref:n},d),{},{components:t})):o.createElement(m,a({ref:n},d))}));function f(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var l=t.length,a=new Array(l);a[0]=u;var r={};for(var s in n)hasOwnProperty.call(n,s)&&(r[s]=n[s]);r.originalType=e,r.mdxType="string"==typeof e?e:i,a[1]=r;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var o=t(25773),i=(t(27378),t(35318));const l={title:"Offline mode"},a=void 0,r={unversionedId:"guides/offline-mode",id:"guides/offline-mode",title:"Offline mode",description:"moon assumes that an internet connection is always available, as we download and install tools into",source:"@site/docs/guides/offline-mode.mdx",sourceDirName:"guides",slug:"/guides/offline-mode",permalink:"/docs/guides/offline-mode",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/offline-mode.mdx",tags:[],version:"current",frontMatter:{title:"Offline mode"},sidebar:"guides",previous:{title:"Docker usage",permalink:"/docs/guides/docker"},next:{title:"Open source usage",permalink:"/docs/guides/open-source"}},s={},c=[{value:"What's disabled when offline",id:"whats-disabled-when-offline",level:2},{value:"Toggling modes",id:"toggling-modes",level:2}],d={toc:c};function p(e){let{components:n,...t}=e;return(0,i.kt)("wrapper",(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"moon assumes that an internet connection is always available, as we download and install tools into\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\nWhile this is useful, having a constant internet connection isn't always viable."),(0,i.kt)("p",null,"To support workflows where internet isn't available or is spotty, moon will automatically check for\nan active internet connection, and drop into offline mode if necessary."),(0,i.kt)("h2",{id:"whats-disabled-when-offline"},"What's disabled when offline"),(0,i.kt)("p",null,"When offline, moon will skip or disable the following:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Automatic dependency installation will be skipped."),(0,i.kt)("li",{parentName:"ul"},"Toolchain will skip resolving, downloading, and installing tools, and instead use the local cache.",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"If no local cache available, will fallback to binaries found on ",(0,i.kt)("inlineCode",{parentName:"li"},"PATH"),"."),(0,i.kt)("li",{parentName:"ul"},"If not available on ",(0,i.kt)("inlineCode",{parentName:"li"},"PATH"),", will fail to run."))),(0,i.kt)("li",{parentName:"ul"},"Upgrade and version checks will be skipped.")),(0,i.kt)("h2",{id:"toggling-modes"},"Toggling modes"),(0,i.kt)("p",null,"While we automatically check for an internet connection, both online and offline modes can be forced\nwith the ",(0,i.kt)("inlineCode",{parentName:"p"},"PROTO_OFFLINE")," environment variable. Setting the variable to ",(0,i.kt)("inlineCode",{parentName:"p"},"1")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," will force\noffline mode, while ",(0,i.kt)("inlineCode",{parentName:"p"},"0")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"false")," will force online mode."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2d92dfb9.5748e210.js b/assets/js/2d92dfb9.5748e210.js deleted file mode 100644 index 002832e071c..00000000000 --- a/assets/js/2d92dfb9.5748e210.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7690],{99010:s=>{s.exports=JSON.parse('{"label":"rust","permalink":"/blog/tags/rust","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/2d92dfb9.9d4f11fd.js b/assets/js/2d92dfb9.9d4f11fd.js new file mode 100644 index 00000000000..5e4c40ecd11 --- /dev/null +++ b/assets/js/2d92dfb9.9d4f11fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[57690],{99010:s=>{s.exports=JSON.parse('{"label":"rust","permalink":"/blog/tags/rust","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/2df21221.26680769.js b/assets/js/2df21221.26680769.js deleted file mode 100644 index c79bb7fd730..00000000000 --- a/assets/js/2df21221.26680769.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1909],{43765:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/runner","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2df21221.39d56dfd.js b/assets/js/2df21221.39d56dfd.js new file mode 100644 index 00000000000..b7378426d18 --- /dev/null +++ b/assets/js/2df21221.39d56dfd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51909],{43765:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/runner","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2dffafe2.5722a260.js b/assets/js/2dffafe2.5722a260.js deleted file mode 100644 index e97f69bc98a..00000000000 --- a/assets/js/2dffafe2.5722a260.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9631],{35318:(e,n,a)=>{a.d(n,{Zo:()=>c,kt:()=>m});var t=a(27378);function o(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function l(e){for(var n=1;n=0||(o[a]=e[a]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var p=t.createContext({}),s=function(e){var n=t.useContext(p),a=n;return e&&(a="function"==typeof e?e(n):l(l({},n),e)),a},c=function(e){var n=s(e.components);return t.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=s(a),m=o,k=d["".concat(p,".").concat(m)]||d[m]||u[m]||r;return a?t.createElement(k,l(l({ref:n},c),{},{components:a})):t.createElement(k,l({ref:n},c))}));function m(e,n){var a=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=a.length,l=new Array(r);l[0]=d;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{a.d(n,{Z:()=>l});var t=a(27378),o=a(37140);const r="tabItem_wHwb";function l(e){let{children:n,hidden:a,className:l}=e;return t.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:a},n)}},33337:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(25773),o=a(27378),r=a(37140),l=a(83457),i=a(35595),p=a(76457);const s="tabList_J5MA",c="tabItem_l0OV";function u(e){let{className:n,block:a,selectedValue:i,selectValue:p,tabValues:s}=e;const u=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const n=e.currentTarget,a=u.indexOf(n),t=s[a].value;t!==i&&(d(n),p(t))},k=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;n=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;n=u[a]??u[u.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},n)},s.map((e=>{let{value:n,label:a,attributes:l}=e;return o.createElement("li",(0,t.Z)({role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,key:n,ref:e=>u.push(e),onKeyDown:k,onClick:m},l,{className:(0,r.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===n})}),a??n)})))}function d(e){let{lazy:n,children:a,selectedValue:t}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t}))))}function m(e){const n=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",s)},o.createElement(u,(0,t.Z)({},e,n)),o.createElement(d,(0,t.Z)({},e,n)))}function k(e){const n=(0,p.Z)();return o.createElement(m,(0,t.Z)({key:String(n)},e))}},35595:(e,n,a)=>{a.d(n,{Y:()=>d});var t=a(27378),o=a(35331),r=a(30654),l=a(70784),i=a(71819);function p(e){return function(e){return t.Children.map(e,(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:o}}=e;return{value:n,label:a,attributes:t,default:o}}))}function s(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??p(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function c(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function u(e){let{queryString:n=!1,groupId:a}=e;const l=(0,o.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,r._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(l.location.search);n.set(i,e),l.replace({...l.location,search:n.toString()})}),[i,l])]}function d(e){const{defaultValue:n,queryString:a=!1,groupId:o}=e,r=s(e),[l,p]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!c({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[d,m]=u({queryString:a,groupId:o}),[k,h]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,r]=(0,i.Nk)(a);return[o,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:o}),g=(()=>{const e=d??k;return c({value:e,tabValues:r})?e:null})();(0,t.useLayoutEffect)((()=>{g&&p(g)}),[g]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);p(e),m(e),h(e)}),[m,h,r]),tabValues:r}}},9757:(e,n,a)=>{a.d(n,{ZP:()=>p});var t=a(25773),o=(a(27378),a(35318)),r=a(33337),l=a(39798);const i={toc:[]};function p(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},i,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(r.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"yarn",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".yarnrc.yml"',title:'".yarnrc.yml"'},"# ...\nnodeLinker: 'node-modules'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://yarnpkg.com/features/workspaces"},"Documentation")))),(0,o.kt)(l.Z,{value:"yarn1",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://classic.yarnpkg.com/en/docs/workspaces"},"Documentation")))),(0,o.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.npmjs.com/cli/v8/using-npm/workspaces"},"Documentation")))),(0,o.kt)(l.Z,{value:"pnpm",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="pnpm-workspace.yaml"',title:'"pnpm-workspace.yaml"'},"packages:\n - 'apps/*'\n - 'packages/*'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://pnpm.io/workspaces"},"Documentation"))))))}p.isMDXComponent=!0},47295:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>m,contentTitle:()=>u,default:()=>g,frontMatter:()=>c,metadata:()=>d,toc:()=>k});var t=a(25773),o=(a(27378),a(35318)),r=a(33337),l=a(39798),i=a(9757);const p={toc:[]};function s(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},p,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(r.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"npm install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nnpm install \n\n# In a project\nnpm install --workspace \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nnpm install \n\n# In a project\nnpm install --workspace \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"npx npm-check-updates --interactive\n"))),(0,o.kt)(l.Z,{value:"pnpm",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"pnpm install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\npnpm add \n\n# In a project\npnpm add --filter \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\npnpm remove \n\n# In a project\npnpm remove --filter \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"pnpm update -i -r --latest\n"))),(0,o.kt)(l.Z,{value:"yarn",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn add \n\n# In a project\nyarn workspace add \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn remove \n\n# In a project\nyarn workspace remove \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn upgrade-interactive\n"))),(0,o.kt)(l.Z,{value:"yarn1",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn add -w\n\n# In a project\nyarn workspace add \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn remove -w\n\n# In a project\nyarn workspace remove \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn upgrade-interactive --latest\n")))))}s.isMDXComponent=!0;const c={title:"Node.js handbook",toc_max_heading_level:6},u=void 0,d={unversionedId:"guides/javascript/node-handbook",id:"guides/javascript/node-handbook",title:"Node.js handbook",description:"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using",source:"@site/docs/guides/javascript/node-handbook.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/node-handbook",permalink:"/docs/guides/javascript/node-handbook",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/node-handbook.mdx",tags:[],version:"current",frontMatter:{title:"Node.js handbook",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Deno handbook",permalink:"/docs/guides/javascript/deno-handbook"},next:{title:"Task profiling",permalink:"/docs/guides/profile"}},m={},k=[{value:"moon setup",id:"moon-setup",level:2},{value:"Enabling the language",id:"enabling-the-language",level:3},{value:"Utilizing the toolchain",id:"utilizing-the-toolchain",level:3},{value:"Using package.json scripts",id:"using-packagejson-scripts",level:3},{value:"Repository structure",id:"repository-structure",level:2},{value:"Applications",id:"applications",level:3},{value:"Packages",id:"packages",level:3},{value:"Configuration",id:"configuration",level:3},{value:"Dependency management",id:"dependency-management",level:2},{value:"Workspace commands",id:"workspace-commands",level:3},{value:"Developer tools at the root",id:"developer-tools-at-the-root",level:3},{value:"Product libraries in a project",id:"product-libraries-in-a-project",level:3},{value:"Code sharing",id:"code-sharing",level:2},{value:"Depending on packages",id:"depending-on-packages",level:3},{value:"Types of packages",id:"types-of-packages",level:3},{value:"Local only",id:"local-only",level:4},{value:"Internally published",id:"internally-published",level:4},{value:"Externally published",id:"externally-published",level:4},{value:"Bundler integration",id:"bundler-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3}],h={toc:k};function g(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},h,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using\nNode.js, as there are many ways to structure your code and to configure your tools. With this\nhandbook, we'll help guide you through this process."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This guide is a living document and will continue to be updated over time!")),(0,o.kt)("h2",{id:"moon-setup"},"moon setup"),(0,o.kt)("p",null,"For this part of the handbook, we'll be focusing on ",(0,o.kt)("a",{parentName:"p",href:"/moon"},"moon"),", our task runner. To start,\nlanguages in moon act like plugins, where their functionality and support ",(0,o.kt)("em",{parentName:"p"},"is not")," enabled unless\nexplicitly configured. We follow this approach to avoid unnecessary overhead."),(0,o.kt)("h3",{id:"enabling-the-language"},"Enabling the language"),(0,o.kt)("p",null,"To enable JavaScript support via Node.js, define the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#node"},(0,o.kt)("inlineCode",{parentName:"a"},"node"))," setting\nin ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", even if an empty object."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Node.js\nnode: {}\n\n# Enable Node.js and override default settings\nnode:\n packageManager: 'pnpm'\n")),(0,o.kt)("p",null,"Or by pinning a ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," version in ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," in the workspace root."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.0.0"\npnpm = "7.29.0"\n')),(0,o.kt)("p",null,"This will enable the Node.js platform and provide the following automations around its ecosystem:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Node modules will automatically be installed if dependencies in ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," have changed, or\nthe lockfile has changed, since the last time a task has ran.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"We'll also take ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," workspaces into account and install modules in the correct\nlocation; either the workspace root, in a project, or both."))),(0,o.kt)("li",{parentName:"ul"},"Relationships between projects will automatically be discovered based on ",(0,o.kt)("inlineCode",{parentName:"li"},"dependencies"),",\n",(0,o.kt)("inlineCode",{parentName:"li"},"devDependencies"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"peerDependencies")," in ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),".",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"The versions of these packages will also be automatically synced when changed."))),(0,o.kt)("li",{parentName:"ul"},"Tasks can be ",(0,o.kt)("a",{parentName:"li",href:"../../config/toolchain#infertasksfromscripts"},"automatically inferred")," from\n",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," scripts."),(0,o.kt)("li",{parentName:"ul"},"And much more!")),(0,o.kt)("h3",{id:"utilizing-the-toolchain"},"Utilizing the toolchain"),(0,o.kt)("p",null,"When a language is enabled, moon by default will assume that the language's binary is available\nwithin the current environment (typically on ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),"). This has the downside of requiring all\ndevelopers and machines to manually install the correct version of the language, ",(0,o.kt)("em",{parentName:"p"},"and to stay in\nsync"),"."),(0,o.kt)("p",null,"Instead, you can utilize ",(0,o.kt)("a",{parentName:"p",href:"../../concepts/toolchain"},"moon's toolchain"),", which will download and\ninstall the language in the background, and ensure every task is executed using the exact version\nacross all machines."),(0,o.kt)("p",null,"Enabling the toolchain is as simple as defining the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#version"},(0,o.kt)("inlineCode",{parentName:"a"},"node.version")),"\nsetting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Node.js toolchain with an explicit version\nnode:\n version: '18.0.0'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Versions can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),".")),(0,o.kt)("h3",{id:"using-packagejson-scripts"},"Using ",(0,o.kt)("inlineCode",{parentName:"h3"},"package.json")," scripts"),(0,o.kt)("p",null,"If you're looking to prototype moon, or reduce the migration effort to moon tasks, you can configure\nmoon to inherit ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, and internally convert them to moon tasks. This can be\nachieved with the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#infertasksfromscripts"},(0,o.kt)("inlineCode",{parentName:"a"},"node.inferTasksFromScripts")),"\nsetting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n inferTasksFromScripts: true\n")),(0,o.kt)("h2",{id:"repository-structure"},"Repository structure"),(0,o.kt)("p",null,"JavaScript monorepo's work best when projects are split into applications and packages, with each\nproject containing its own ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," and dependencies. A root ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," must also exist\nthat pieces all projects together through workspaces."),(0,o.kt)("p",null,"For small repositories, the following structure typically works well:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 apps/\n\u2502 \u251c\u2500\u2500 client/\n| | \u251c\u2500\u2500 ...\n\u2502 | \u2514\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 server/\n| \u251c\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 package.json\n\u2514\u2500\u2500 packages/\n \u251c\u2500\u2500 components/\n | \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 package.json\n \u251c\u2500\u2500 theme/\n | \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 package.json\n \u2514\u2500\u2500 utils/\n \u251c\u2500\u2500 ...\n \u2514\u2500\u2500 package.json\n")),(0,o.kt)("p",null,"For large repositories, grouping projects by team or department helps with ownership and\norganization. With this structure, applications and libraries can be nested at any depth."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 infra/\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 internal/\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 payments/\n\u2502 \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 shared/\n \u2514\u2500\u2500 ...\n")),(0,o.kt)("h3",{id:"applications"},"Applications"),(0,o.kt)("p",null,"Applications are runnable or executable, like an HTTP server, and are pieced together with packages\nand its own encapsulated code. They represent the whole, while packages are the pieces. Applications\ncan import and depend on packages, but they ",(0,o.kt)("em",{parentName:"p"},"must not")," import and depend on other applications."),(0,o.kt)("p",null,"In moon, you can denote a project as an application using the ",(0,o.kt)("a",{parentName:"p",href:"../../config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type")),"\nsetting in ",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"type: 'application'\n")),(0,o.kt)("h3",{id:"packages"},"Packages"),(0,o.kt)("p",null,"Packages (also known as a libraries) are self-contained reusable pieces of code, and are the\nsuggested pattern for ",(0,o.kt)("a",{parentName:"p",href:"#code-sharing"},"code sharing"),". Packages can import and depend on other\npackages, but they ",(0,o.kt)("em",{parentName:"p"},"must not")," import and depend on applications!"),(0,o.kt)("p",null,"In moon, you can denote a project as a library using the ",(0,o.kt)("a",{parentName:"p",href:"../../config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," setting\nin ",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"type: 'library'\n")),(0,o.kt)("h3",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"Every tool that you'll utilize in a repository will have its own configuration file. This will be a\nlot of config files, but regardless of what tool it is, where the config file should go will fall\ninto 1 of these categories:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Settings are inherited by all projects.")," These are known as universal tools, and enforce code\nconsistency and quality across the entire repository. Their config file must exist in the\nrepository root, but may support overrides in each project.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Examples: Babel, ",(0,o.kt)("a",{parentName:"li",href:"../examples/eslint"},"ESLint"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/prettier"},"Prettier"),",\n",(0,o.kt)("a",{parentName:"li",href:"../examples/typescript"},"TypeScript")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Settings are unique per project.")," These are developers tools that must be configured separately\nfor each project, as they'll have different concerns. Their config file must exist in each\nproject, but a shared configuration may exist as a base (for example, Jest presets).",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Examples: ",(0,o.kt)("a",{parentName:"li",href:"../examples/jest"},"Jest"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/typescript"},"TypeScript")," (with project\nreferences)"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Settings are one-offs.")," These are typically for applications or tools that require their own\nconfig, but aren't prevalent throughout the entire repository.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Examples: ",(0,o.kt)("a",{parentName:"li",href:"../examples/astro"},"Astro"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/next"},"Next"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/nuxt"},"Nuxt"),",\n",(0,o.kt)("a",{parentName:"li",href:"../examples/remix"},"Remix"),", Tailwind")))),(0,o.kt)("h2",{id:"dependency-management"},"Dependency management"),(0,o.kt)("p",null,"Dependencies, also known as node modules, are required by all projects, and are installed through a\npackage manager like npm, pnpm, or yarn. It doesn't matter which package manager you choose, but we\nhighly suggest choosing one that has proper workspaces support. If you're unfamiliar with\nworkspaces, they will:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Resolve all ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),"'s in a repository using glob patterns."),(0,o.kt)("li",{parentName:"ul"},"Install dependencies from all ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),"'s at once, in the required locations."),(0,o.kt)("li",{parentName:"ul"},"Create symlinks of local packages in ",(0,o.kt)("inlineCode",{parentName:"li"},"node_modules")," (to emulate an installed package)."),(0,o.kt)("li",{parentName:"ul"},"Deduplicate and hoist ",(0,o.kt)("inlineCode",{parentName:"li"},"node_modules")," when applicable.")),(0,o.kt)("p",null,"All of this functionality enables robust monorepo support, and can be enabled with the following:"),(0,o.kt)(i.ZP,{mdxType:"PackageWorkspaces"}),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Package workspaces are not a requirement for monorepos, but they do solve an array of problems\naround module resolution, avoiding duplicate packages in bundles, and general interoperability.\nProceed with caution for non-workspaces setups!")),(0,o.kt)("h3",{id:"workspace-commands"},"Workspace commands"),(0,o.kt)("p",null,"The following common commands can be used for adding, removing, or managing dependencies in a\nworkspace. View the package manager's official documentation for a thorough list of commands."),(0,o.kt)(s,{mdxType:"WsCommands"}),(0,o.kt)("h3",{id:"developer-tools-at-the-root"},"Developer tools at the root"),(0,o.kt)("p",null,"While not a strict guideline to follow, we've found that installing universal developer tool related\ndependencies (Babel, ESLint, Jest, TypeScript, etc) in the root ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," as ",(0,o.kt)("inlineCode",{parentName:"p"},"devDependencies"),"\nto be a good pattern for consistency, quality, and the health of the repository. It provides the\nfollowing benefits:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"It ensures all projects are utilizing the same version (and sometimes configuration) of a tool."),(0,o.kt)("li",{parentName:"ul"},"It allows the tool to easily be upgraded. Upgrade once, applied everywhere."),(0,o.kt)("li",{parentName:"ul"},"It avoids conflicting or outdated versions of the same package.")),(0,o.kt)("p",null,"With that being said, this ",(0,o.kt)("em",{parentName:"p"},"does not")," include development dependencies that are unique to a project!"),(0,o.kt)("h3",{id:"product-libraries-in-a-project"},"Product libraries in a project"),(0,o.kt)("p",null,"Product, application, and or framework specific packages should be installed as production\n",(0,o.kt)("inlineCode",{parentName:"p"},"dependencies")," in a project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". We've found this pattern to work well for the\nfollowing reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Application dependencies are pinned per project, avoiding accidental regressions."),(0,o.kt)("li",{parentName:"ul"},"Applications can upgrade their dependencies and avoid breaking neighbor applications.")),(0,o.kt)("h2",{id:"code-sharing"},"Code sharing"),(0,o.kt)("p",null,'One of the primary reasons to use a monorepo is to easily share code between projects. When code is\nco-located within the same repository, it avoids the overhead of the "build -> version -> publish to\nregistry -> upgrade in consumer" workflow (when the code is located in an external repository).'),(0,o.kt)("p",null,"Co-locating code also provides the benefit of fast iteration, fast adoption, and easier migration\n(when making breaking changes for example)."),(0,o.kt)("p",null,"With ",(0,o.kt)("a",{parentName:"p",href:"#dependency-management"},"package workspaces"),", code sharing is a breeze. As mentioned above,\nevery project that contains a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," that is part of the workspace, will be symlinked into\n",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),". Because of this, these packages can easily be imported using their ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"\nname."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"// Imports from /packages/utils/package.json\nimport utils from '@company/utils';\n")),(0,o.kt)("h3",{id:"depending-on-packages"},"Depending on packages"),(0,o.kt)("p",null,"Because packages are symlinked into ",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),", we can depend on them as if they were normal npm\npackages, but with 1 key difference. Since these packages aren't published, they do not have a\nversion to reference, and instead, we can use the special ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:^")," version (yarn and pnpm only,\nuse ",(0,o.kt)("inlineCode",{parentName:"p"},"*")," for npm)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "name": "@company/consumer",\n "dependencies": {\n "@company/provider": "workspace:^"\n }\n}\n')),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:"),' version basically means "use the package found in the current workspace". The ',(0,o.kt)("inlineCode",{parentName:"p"},":^"),"\ndetermines the version range to ",(0,o.kt)("em",{parentName:"p"},"substitute with when publishing"),". For example, the ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:^"),"\nabove would be replaced with version of ",(0,o.kt)("inlineCode",{parentName:"p"},"@company/provider")," as ",(0,o.kt)("inlineCode",{parentName:"p"},"^")," when the\n",(0,o.kt)("inlineCode",{parentName:"p"},"@company/consumer")," package is published."),(0,o.kt)("p",null,"There's also ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:~")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:*")," which substitutes to ",(0,o.kt)("inlineCode",{parentName:"p"},"~")," and ",(0,o.kt)("inlineCode",{parentName:"p"},""),"\nrespectively. We suggest using ",(0,o.kt)("inlineCode",{parentName:"p"},":^")," so that version ranges can be deduped."),(0,o.kt)("h3",{id:"types-of-packages"},"Types of packages"),(0,o.kt)("p",null,"When sharing packages in a monorepo, there's typically 3 different kinds of packages:"),(0,o.kt)("h4",{id:"local-only"},"Local only"),(0,o.kt)("p",null,"A local only package is just that, it's only available locally to the repository and ",(0,o.kt)("em",{parentName:"p"},"is not"),"\npublished to a registry, and ",(0,o.kt)("em",{parentName:"p"},"is not")," available to external repositories. For teams and companies\nthat utilize a single repository, this will be the most common type of package."),(0,o.kt)("p",null,"A benefit of local packages is that they do not require a build step, as source files can be\nimported directly (",(0,o.kt)("a",{parentName:"p",href:"#bundler-integration"},"when configured correctly"),"). This avoids a lot of\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," overhead, especially in regards to ",(0,o.kt)("inlineCode",{parentName:"p"},"exports"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"imports"),", and other import patterns."),(0,o.kt)("h4",{id:"internally-published"},"Internally published"),(0,o.kt)("p",null,"An internal package is published to a private registry, and ",(0,o.kt)("em",{parentName:"p"},"is not")," available to the public.\nPublished packages are far more strict than local packages, as the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," structure plays a\nmuch larger role for downstream consumers, as it dictates how files are imported, where they can be\nfound, what type of formats are supported (CJS, ESM), so on and so forth."),(0,o.kt)("p",null,"Published packages require a build step, for both source code and TypeScript types (when\napplicable). We suggest using ",(0,o.kt)("a",{parentName:"p",href:"https://esbuild.github.io/"},"esbuild")," or\n",(0,o.kt)("a",{parentName:"p",href:"../examples/packemon"},"Packemon")," to handle this entire flow. With that being said, local projects\ncan still ",(0,o.kt)("a",{parentName:"p",href:"#bundler-integration"},"import their source files"),"."),(0,o.kt)("h4",{id:"externally-published"},"Externally published"),(0,o.kt)("p",null,"An external package is structured similarly to an internal package, but instead of publishing to a\nprivate registry, it's published to the npm public registry."),(0,o.kt)("p",null,"External packages are primarily for open source projects, and require the repository to also be\npublic."),(0,o.kt)("h3",{id:"bundler-integration"},"Bundler integration"),(0,o.kt)("p",null,"Co-locating packages is great, but how do you import and use them effectively? The easiest solution\nis to configure resolver aliases within your bundler (Webpack, Vite, etc). By doing so, you enable\nthe following functionality:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Avoids having to build (and rebuild) the package everytime its code changes."),(0,o.kt)("li",{parentName:"ul"},"Enables file system watching of the package, not just the application."),(0,o.kt)("li",{parentName:"ul"},"Allows for hot module reloading (HMR) to work."),(0,o.kt)("li",{parentName:"ul"},"Package code is transpiled and bundled alongside application code.")),(0,o.kt)(r.Z,{groupId:"bundler",defaultValue:"vite",values:[{label:"Vite",value:"vite"},{label:"Webpack",value:"webpack"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"vite",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="vite.config.ts"',title:'"vite.config.ts"'},"import path from 'path';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n // ...\n resolve: {\n alias: {\n '@company/utils': path.join(__dirname, '../packages/utils/src'),\n },\n },\n});\n"))),(0,o.kt)(l.Z,{value:"webpack",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="webpack.config.js"',title:'"webpack.config.js"'},"const path = require('path');\n\nmodule.exports = {\n // ...\n resolve: {\n alias: {\n '@company/utils': path.join(__dirname, '../packages/utils/src'),\n },\n },\n};\n")))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"When configuring aliases, we suggest using the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name as the alias! This ensures that\non the consuming side, you're using the package as if it's a normal node module, and avoids\ndeviating from the ecosystem.")),(0,o.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,o.kt)("p",null,"We suggest using TypeScript project references. Luckily, we have an\n",(0,o.kt)("a",{parentName:"p",href:"./typescript-project-refs"},"in-depth guide on how to properly and efficiently integrate them"),"!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2dffafe2.982d7e46.js b/assets/js/2dffafe2.982d7e46.js new file mode 100644 index 00000000000..48a176128bc --- /dev/null +++ b/assets/js/2dffafe2.982d7e46.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29631],{35318:(e,n,a)=>{a.d(n,{Zo:()=>c,kt:()=>m});var t=a(27378);function o(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function l(e){for(var n=1;n=0||(o[a]=e[a]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var p=t.createContext({}),s=function(e){var n=t.useContext(p),a=n;return e&&(a="function"==typeof e?e(n):l(l({},n),e)),a},c=function(e){var n=s(e.components);return t.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=s(a),m=o,k=d["".concat(p,".").concat(m)]||d[m]||u[m]||r;return a?t.createElement(k,l(l({ref:n},c),{},{components:a})):t.createElement(k,l({ref:n},c))}));function m(e,n){var a=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=a.length,l=new Array(r);l[0]=d;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{a.d(n,{Z:()=>l});var t=a(27378),o=a(37140);const r="tabItem_wHwb";function l(e){let{children:n,hidden:a,className:l}=e;return t.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:a},n)}},33337:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(25773),o=a(27378),r=a(37140),l=a(83457),i=a(35595),p=a(76457);const s="tabList_J5MA",c="tabItem_l0OV";function u(e){let{className:n,block:a,selectedValue:i,selectValue:p,tabValues:s}=e;const u=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const n=e.currentTarget,a=u.indexOf(n),t=s[a].value;t!==i&&(d(n),p(t))},k=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;n=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;n=u[a]??u[u.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},n)},s.map((e=>{let{value:n,label:a,attributes:l}=e;return o.createElement("li",(0,t.Z)({role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,key:n,ref:e=>u.push(e),onKeyDown:k,onClick:m},l,{className:(0,r.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===n})}),a??n)})))}function d(e){let{lazy:n,children:a,selectedValue:t}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t}))))}function m(e){const n=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",s)},o.createElement(u,(0,t.Z)({},e,n)),o.createElement(d,(0,t.Z)({},e,n)))}function k(e){const n=(0,p.Z)();return o.createElement(m,(0,t.Z)({key:String(n)},e))}},35595:(e,n,a)=>{a.d(n,{Y:()=>d});var t=a(27378),o=a(35331),r=a(30654),l=a(70784),i=a(71819);function p(e){return function(e){return t.Children.map(e,(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:o}}=e;return{value:n,label:a,attributes:t,default:o}}))}function s(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??p(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function c(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function u(e){let{queryString:n=!1,groupId:a}=e;const l=(0,o.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,r._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(l.location.search);n.set(i,e),l.replace({...l.location,search:n.toString()})}),[i,l])]}function d(e){const{defaultValue:n,queryString:a=!1,groupId:o}=e,r=s(e),[l,p]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!c({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[d,m]=u({queryString:a,groupId:o}),[k,h]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,r]=(0,i.Nk)(a);return[o,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:o}),g=(()=>{const e=d??k;return c({value:e,tabValues:r})?e:null})();(0,t.useLayoutEffect)((()=>{g&&p(g)}),[g]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);p(e),m(e),h(e)}),[m,h,r]),tabValues:r}}},9757:(e,n,a)=>{a.d(n,{ZP:()=>p});var t=a(25773),o=(a(27378),a(35318)),r=a(33337),l=a(39798);const i={toc:[]};function p(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},i,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(r.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"yarn",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".yarnrc.yml"',title:'".yarnrc.yml"'},"# ...\nnodeLinker: 'node-modules'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://yarnpkg.com/features/workspaces"},"Documentation")))),(0,o.kt)(l.Z,{value:"yarn1",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://classic.yarnpkg.com/en/docs/workspaces"},"Documentation")))),(0,o.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.npmjs.com/cli/v8/using-npm/workspaces"},"Documentation")))),(0,o.kt)(l.Z,{value:"pnpm",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="pnpm-workspace.yaml"',title:'"pnpm-workspace.yaml"'},"packages:\n - 'apps/*'\n - 'packages/*'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://pnpm.io/workspaces"},"Documentation"))))))}p.isMDXComponent=!0},47295:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>m,contentTitle:()=>u,default:()=>g,frontMatter:()=>c,metadata:()=>d,toc:()=>k});var t=a(25773),o=(a(27378),a(35318)),r=a(33337),l=a(39798),i=a(9757);const p={toc:[]};function s(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},p,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(r.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"npm install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nnpm install \n\n# In a project\nnpm install --workspace \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nnpm install \n\n# In a project\nnpm install --workspace \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"npx npm-check-updates --interactive\n"))),(0,o.kt)(l.Z,{value:"pnpm",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"pnpm install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\npnpm add \n\n# In a project\npnpm add --filter \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\npnpm remove \n\n# In a project\npnpm remove --filter \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"pnpm update -i -r --latest\n"))),(0,o.kt)(l.Z,{value:"yarn",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn add \n\n# In a project\nyarn workspace add \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn remove \n\n# In a project\nyarn workspace remove \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn upgrade-interactive\n"))),(0,o.kt)(l.Z,{value:"yarn1",mdxType:"TabItem"},(0,o.kt)("p",null,"Install dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn install\n")),(0,o.kt)("p",null,"Add a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn add -w\n\n# In a project\nyarn workspace add \n")),(0,o.kt)("p",null,"Remove a package:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# At the root\nyarn remove -w\n\n# In a project\nyarn workspace remove \n")),(0,o.kt)("p",null,"Update packages:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"yarn upgrade-interactive --latest\n")))))}s.isMDXComponent=!0;const c={title:"Node.js handbook",toc_max_heading_level:6},u=void 0,d={unversionedId:"guides/javascript/node-handbook",id:"guides/javascript/node-handbook",title:"Node.js handbook",description:"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using",source:"@site/docs/guides/javascript/node-handbook.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/node-handbook",permalink:"/docs/guides/javascript/node-handbook",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/node-handbook.mdx",tags:[],version:"current",frontMatter:{title:"Node.js handbook",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Deno handbook",permalink:"/docs/guides/javascript/deno-handbook"},next:{title:"Task profiling",permalink:"/docs/guides/profile"}},m={},k=[{value:"moon setup",id:"moon-setup",level:2},{value:"Enabling the language",id:"enabling-the-language",level:3},{value:"Utilizing the toolchain",id:"utilizing-the-toolchain",level:3},{value:"Using package.json scripts",id:"using-packagejson-scripts",level:3},{value:"Repository structure",id:"repository-structure",level:2},{value:"Applications",id:"applications",level:3},{value:"Packages",id:"packages",level:3},{value:"Configuration",id:"configuration",level:3},{value:"Dependency management",id:"dependency-management",level:2},{value:"Workspace commands",id:"workspace-commands",level:3},{value:"Developer tools at the root",id:"developer-tools-at-the-root",level:3},{value:"Product libraries in a project",id:"product-libraries-in-a-project",level:3},{value:"Code sharing",id:"code-sharing",level:2},{value:"Depending on packages",id:"depending-on-packages",level:3},{value:"Types of packages",id:"types-of-packages",level:3},{value:"Local only",id:"local-only",level:4},{value:"Internally published",id:"internally-published",level:4},{value:"Externally published",id:"externally-published",level:4},{value:"Bundler integration",id:"bundler-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3}],h={toc:k};function g(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},h,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using\nNode.js, as there are many ways to structure your code and to configure your tools. With this\nhandbook, we'll help guide you through this process."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This guide is a living document and will continue to be updated over time!")),(0,o.kt)("h2",{id:"moon-setup"},"moon setup"),(0,o.kt)("p",null,"For this part of the handbook, we'll be focusing on ",(0,o.kt)("a",{parentName:"p",href:"/moon"},"moon"),", our task runner. To start,\nlanguages in moon act like plugins, where their functionality and support ",(0,o.kt)("em",{parentName:"p"},"is not")," enabled unless\nexplicitly configured. We follow this approach to avoid unnecessary overhead."),(0,o.kt)("h3",{id:"enabling-the-language"},"Enabling the language"),(0,o.kt)("p",null,"To enable JavaScript support via Node.js, define the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#node"},(0,o.kt)("inlineCode",{parentName:"a"},"node"))," setting\nin ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", even if an empty object."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Node.js\nnode: {}\n\n# Enable Node.js and override default settings\nnode:\n packageManager: 'pnpm'\n")),(0,o.kt)("p",null,"Or by pinning a ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," version in ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," in the workspace root."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.0.0"\npnpm = "7.29.0"\n')),(0,o.kt)("p",null,"This will enable the Node.js platform and provide the following automations around its ecosystem:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Node modules will automatically be installed if dependencies in ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," have changed, or\nthe lockfile has changed, since the last time a task has ran.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"We'll also take ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," workspaces into account and install modules in the correct\nlocation; either the workspace root, in a project, or both."))),(0,o.kt)("li",{parentName:"ul"},"Relationships between projects will automatically be discovered based on ",(0,o.kt)("inlineCode",{parentName:"li"},"dependencies"),",\n",(0,o.kt)("inlineCode",{parentName:"li"},"devDependencies"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"peerDependencies")," in ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),".",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"The versions of these packages will also be automatically synced when changed."))),(0,o.kt)("li",{parentName:"ul"},"Tasks can be ",(0,o.kt)("a",{parentName:"li",href:"../../config/toolchain#infertasksfromscripts"},"automatically inferred")," from\n",(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," scripts."),(0,o.kt)("li",{parentName:"ul"},"And much more!")),(0,o.kt)("h3",{id:"utilizing-the-toolchain"},"Utilizing the toolchain"),(0,o.kt)("p",null,"When a language is enabled, moon by default will assume that the language's binary is available\nwithin the current environment (typically on ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),"). This has the downside of requiring all\ndevelopers and machines to manually install the correct version of the language, ",(0,o.kt)("em",{parentName:"p"},"and to stay in\nsync"),"."),(0,o.kt)("p",null,"Instead, you can utilize ",(0,o.kt)("a",{parentName:"p",href:"../../concepts/toolchain"},"moon's toolchain"),", which will download and\ninstall the language in the background, and ensure every task is executed using the exact version\nacross all machines."),(0,o.kt)("p",null,"Enabling the toolchain is as simple as defining the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#version"},(0,o.kt)("inlineCode",{parentName:"a"},"node.version")),"\nsetting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Node.js toolchain with an explicit version\nnode:\n version: '18.0.0'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Versions can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),".")),(0,o.kt)("h3",{id:"using-packagejson-scripts"},"Using ",(0,o.kt)("inlineCode",{parentName:"h3"},"package.json")," scripts"),(0,o.kt)("p",null,"If you're looking to prototype moon, or reduce the migration effort to moon tasks, you can configure\nmoon to inherit ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, and internally convert them to moon tasks. This can be\nachieved with the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#infertasksfromscripts"},(0,o.kt)("inlineCode",{parentName:"a"},"node.inferTasksFromScripts")),"\nsetting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n inferTasksFromScripts: true\n")),(0,o.kt)("h2",{id:"repository-structure"},"Repository structure"),(0,o.kt)("p",null,"JavaScript monorepo's work best when projects are split into applications and packages, with each\nproject containing its own ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," and dependencies. A root ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," must also exist\nthat pieces all projects together through workspaces."),(0,o.kt)("p",null,"For small repositories, the following structure typically works well:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 apps/\n\u2502 \u251c\u2500\u2500 client/\n| | \u251c\u2500\u2500 ...\n\u2502 | \u2514\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 server/\n| \u251c\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 package.json\n\u2514\u2500\u2500 packages/\n \u251c\u2500\u2500 components/\n | \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 package.json\n \u251c\u2500\u2500 theme/\n | \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 package.json\n \u2514\u2500\u2500 utils/\n \u251c\u2500\u2500 ...\n \u2514\u2500\u2500 package.json\n")),(0,o.kt)("p",null,"For large repositories, grouping projects by team or department helps with ownership and\norganization. With this structure, applications and libraries can be nested at any depth."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 infra/\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 internal/\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 payments/\n\u2502 \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 shared/\n \u2514\u2500\u2500 ...\n")),(0,o.kt)("h3",{id:"applications"},"Applications"),(0,o.kt)("p",null,"Applications are runnable or executable, like an HTTP server, and are pieced together with packages\nand its own encapsulated code. They represent the whole, while packages are the pieces. Applications\ncan import and depend on packages, but they ",(0,o.kt)("em",{parentName:"p"},"must not")," import and depend on other applications."),(0,o.kt)("p",null,"In moon, you can denote a project as an application using the ",(0,o.kt)("a",{parentName:"p",href:"../../config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type")),"\nsetting in ",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"type: 'application'\n")),(0,o.kt)("h3",{id:"packages"},"Packages"),(0,o.kt)("p",null,"Packages (also known as a libraries) are self-contained reusable pieces of code, and are the\nsuggested pattern for ",(0,o.kt)("a",{parentName:"p",href:"#code-sharing"},"code sharing"),". Packages can import and depend on other\npackages, but they ",(0,o.kt)("em",{parentName:"p"},"must not")," import and depend on applications!"),(0,o.kt)("p",null,"In moon, you can denote a project as a library using the ",(0,o.kt)("a",{parentName:"p",href:"../../config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," setting\nin ",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"type: 'library'\n")),(0,o.kt)("h3",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"Every tool that you'll utilize in a repository will have its own configuration file. This will be a\nlot of config files, but regardless of what tool it is, where the config file should go will fall\ninto 1 of these categories:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Settings are inherited by all projects.")," These are known as universal tools, and enforce code\nconsistency and quality across the entire repository. Their config file must exist in the\nrepository root, but may support overrides in each project.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Examples: Babel, ",(0,o.kt)("a",{parentName:"li",href:"../examples/eslint"},"ESLint"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/prettier"},"Prettier"),",\n",(0,o.kt)("a",{parentName:"li",href:"../examples/typescript"},"TypeScript")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Settings are unique per project.")," These are developers tools that must be configured separately\nfor each project, as they'll have different concerns. Their config file must exist in each\nproject, but a shared configuration may exist as a base (for example, Jest presets).",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Examples: ",(0,o.kt)("a",{parentName:"li",href:"../examples/jest"},"Jest"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/typescript"},"TypeScript")," (with project\nreferences)"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Settings are one-offs.")," These are typically for applications or tools that require their own\nconfig, but aren't prevalent throughout the entire repository.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Examples: ",(0,o.kt)("a",{parentName:"li",href:"../examples/astro"},"Astro"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/next"},"Next"),", ",(0,o.kt)("a",{parentName:"li",href:"../examples/nuxt"},"Nuxt"),",\n",(0,o.kt)("a",{parentName:"li",href:"../examples/remix"},"Remix"),", Tailwind")))),(0,o.kt)("h2",{id:"dependency-management"},"Dependency management"),(0,o.kt)("p",null,"Dependencies, also known as node modules, are required by all projects, and are installed through a\npackage manager like npm, pnpm, or yarn. It doesn't matter which package manager you choose, but we\nhighly suggest choosing one that has proper workspaces support. If you're unfamiliar with\nworkspaces, they will:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Resolve all ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),"'s in a repository using glob patterns."),(0,o.kt)("li",{parentName:"ul"},"Install dependencies from all ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),"'s at once, in the required locations."),(0,o.kt)("li",{parentName:"ul"},"Create symlinks of local packages in ",(0,o.kt)("inlineCode",{parentName:"li"},"node_modules")," (to emulate an installed package)."),(0,o.kt)("li",{parentName:"ul"},"Deduplicate and hoist ",(0,o.kt)("inlineCode",{parentName:"li"},"node_modules")," when applicable.")),(0,o.kt)("p",null,"All of this functionality enables robust monorepo support, and can be enabled with the following:"),(0,o.kt)(i.ZP,{mdxType:"PackageWorkspaces"}),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Package workspaces are not a requirement for monorepos, but they do solve an array of problems\naround module resolution, avoiding duplicate packages in bundles, and general interoperability.\nProceed with caution for non-workspaces setups!")),(0,o.kt)("h3",{id:"workspace-commands"},"Workspace commands"),(0,o.kt)("p",null,"The following common commands can be used for adding, removing, or managing dependencies in a\nworkspace. View the package manager's official documentation for a thorough list of commands."),(0,o.kt)(s,{mdxType:"WsCommands"}),(0,o.kt)("h3",{id:"developer-tools-at-the-root"},"Developer tools at the root"),(0,o.kt)("p",null,"While not a strict guideline to follow, we've found that installing universal developer tool related\ndependencies (Babel, ESLint, Jest, TypeScript, etc) in the root ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," as ",(0,o.kt)("inlineCode",{parentName:"p"},"devDependencies"),"\nto be a good pattern for consistency, quality, and the health of the repository. It provides the\nfollowing benefits:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"It ensures all projects are utilizing the same version (and sometimes configuration) of a tool."),(0,o.kt)("li",{parentName:"ul"},"It allows the tool to easily be upgraded. Upgrade once, applied everywhere."),(0,o.kt)("li",{parentName:"ul"},"It avoids conflicting or outdated versions of the same package.")),(0,o.kt)("p",null,"With that being said, this ",(0,o.kt)("em",{parentName:"p"},"does not")," include development dependencies that are unique to a project!"),(0,o.kt)("h3",{id:"product-libraries-in-a-project"},"Product libraries in a project"),(0,o.kt)("p",null,"Product, application, and or framework specific packages should be installed as production\n",(0,o.kt)("inlineCode",{parentName:"p"},"dependencies")," in a project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". We've found this pattern to work well for the\nfollowing reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Application dependencies are pinned per project, avoiding accidental regressions."),(0,o.kt)("li",{parentName:"ul"},"Applications can upgrade their dependencies and avoid breaking neighbor applications.")),(0,o.kt)("h2",{id:"code-sharing"},"Code sharing"),(0,o.kt)("p",null,'One of the primary reasons to use a monorepo is to easily share code between projects. When code is\nco-located within the same repository, it avoids the overhead of the "build -> version -> publish to\nregistry -> upgrade in consumer" workflow (when the code is located in an external repository).'),(0,o.kt)("p",null,"Co-locating code also provides the benefit of fast iteration, fast adoption, and easier migration\n(when making breaking changes for example)."),(0,o.kt)("p",null,"With ",(0,o.kt)("a",{parentName:"p",href:"#dependency-management"},"package workspaces"),", code sharing is a breeze. As mentioned above,\nevery project that contains a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," that is part of the workspace, will be symlinked into\n",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),". Because of this, these packages can easily be imported using their ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"\nname."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"// Imports from /packages/utils/package.json\nimport utils from '@company/utils';\n")),(0,o.kt)("h3",{id:"depending-on-packages"},"Depending on packages"),(0,o.kt)("p",null,"Because packages are symlinked into ",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),", we can depend on them as if they were normal npm\npackages, but with 1 key difference. Since these packages aren't published, they do not have a\nversion to reference, and instead, we can use the special ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:^")," version (yarn and pnpm only,\nuse ",(0,o.kt)("inlineCode",{parentName:"p"},"*")," for npm)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "name": "@company/consumer",\n "dependencies": {\n "@company/provider": "workspace:^"\n }\n}\n')),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:"),' version basically means "use the package found in the current workspace". The ',(0,o.kt)("inlineCode",{parentName:"p"},":^"),"\ndetermines the version range to ",(0,o.kt)("em",{parentName:"p"},"substitute with when publishing"),". For example, the ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:^"),"\nabove would be replaced with version of ",(0,o.kt)("inlineCode",{parentName:"p"},"@company/provider")," as ",(0,o.kt)("inlineCode",{parentName:"p"},"^")," when the\n",(0,o.kt)("inlineCode",{parentName:"p"},"@company/consumer")," package is published."),(0,o.kt)("p",null,"There's also ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:~")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace:*")," which substitutes to ",(0,o.kt)("inlineCode",{parentName:"p"},"~")," and ",(0,o.kt)("inlineCode",{parentName:"p"},""),"\nrespectively. We suggest using ",(0,o.kt)("inlineCode",{parentName:"p"},":^")," so that version ranges can be deduped."),(0,o.kt)("h3",{id:"types-of-packages"},"Types of packages"),(0,o.kt)("p",null,"When sharing packages in a monorepo, there's typically 3 different kinds of packages:"),(0,o.kt)("h4",{id:"local-only"},"Local only"),(0,o.kt)("p",null,"A local only package is just that, it's only available locally to the repository and ",(0,o.kt)("em",{parentName:"p"},"is not"),"\npublished to a registry, and ",(0,o.kt)("em",{parentName:"p"},"is not")," available to external repositories. For teams and companies\nthat utilize a single repository, this will be the most common type of package."),(0,o.kt)("p",null,"A benefit of local packages is that they do not require a build step, as source files can be\nimported directly (",(0,o.kt)("a",{parentName:"p",href:"#bundler-integration"},"when configured correctly"),"). This avoids a lot of\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," overhead, especially in regards to ",(0,o.kt)("inlineCode",{parentName:"p"},"exports"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"imports"),", and other import patterns."),(0,o.kt)("h4",{id:"internally-published"},"Internally published"),(0,o.kt)("p",null,"An internal package is published to a private registry, and ",(0,o.kt)("em",{parentName:"p"},"is not")," available to the public.\nPublished packages are far more strict than local packages, as the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," structure plays a\nmuch larger role for downstream consumers, as it dictates how files are imported, where they can be\nfound, what type of formats are supported (CJS, ESM), so on and so forth."),(0,o.kt)("p",null,"Published packages require a build step, for both source code and TypeScript types (when\napplicable). We suggest using ",(0,o.kt)("a",{parentName:"p",href:"https://esbuild.github.io/"},"esbuild")," or\n",(0,o.kt)("a",{parentName:"p",href:"../examples/packemon"},"Packemon")," to handle this entire flow. With that being said, local projects\ncan still ",(0,o.kt)("a",{parentName:"p",href:"#bundler-integration"},"import their source files"),"."),(0,o.kt)("h4",{id:"externally-published"},"Externally published"),(0,o.kt)("p",null,"An external package is structured similarly to an internal package, but instead of publishing to a\nprivate registry, it's published to the npm public registry."),(0,o.kt)("p",null,"External packages are primarily for open source projects, and require the repository to also be\npublic."),(0,o.kt)("h3",{id:"bundler-integration"},"Bundler integration"),(0,o.kt)("p",null,"Co-locating packages is great, but how do you import and use them effectively? The easiest solution\nis to configure resolver aliases within your bundler (Webpack, Vite, etc). By doing so, you enable\nthe following functionality:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Avoids having to build (and rebuild) the package everytime its code changes."),(0,o.kt)("li",{parentName:"ul"},"Enables file system watching of the package, not just the application."),(0,o.kt)("li",{parentName:"ul"},"Allows for hot module reloading (HMR) to work."),(0,o.kt)("li",{parentName:"ul"},"Package code is transpiled and bundled alongside application code.")),(0,o.kt)(r.Z,{groupId:"bundler",defaultValue:"vite",values:[{label:"Vite",value:"vite"},{label:"Webpack",value:"webpack"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"vite",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="vite.config.ts"',title:'"vite.config.ts"'},"import path from 'path';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n // ...\n resolve: {\n alias: {\n '@company/utils': path.join(__dirname, '../packages/utils/src'),\n },\n },\n});\n"))),(0,o.kt)(l.Z,{value:"webpack",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="webpack.config.js"',title:'"webpack.config.js"'},"const path = require('path');\n\nmodule.exports = {\n // ...\n resolve: {\n alias: {\n '@company/utils': path.join(__dirname, '../packages/utils/src'),\n },\n },\n};\n")))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"When configuring aliases, we suggest using the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name as the alias! This ensures that\non the consuming side, you're using the package as if it's a normal node module, and avoids\ndeviating from the ecosystem.")),(0,o.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,o.kt)("p",null,"We suggest using TypeScript project references. Luckily, we have an\n",(0,o.kt)("a",{parentName:"p",href:"./typescript-project-refs"},"in-depth guide on how to properly and efficiently integrate them"),"!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e1ef406.31ebba6c.js b/assets/js/2e1ef406.31ebba6c.js new file mode 100644 index 00000000000..a05edc31147 --- /dev/null +++ b/assets/js/2e1ef406.31ebba6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11665],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},m=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=c(n),d=o,g=s["".concat(p,".").concat(d)]||s[d]||u[d]||i;return n?r.createElement(g,a(a({ref:t},m),{},{components:n})):r.createElement(g,a({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=s;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c{n.d(t,{Z:()=>i});var r=n(27378),o=n(9619);function i(e){let{header:t,inline:n,updated:i,version:a}=e;return r.createElement(o.Z,{text:`v${a}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),i=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?a[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(i.Z,{icon:n,className:"mr-1"}),l)}},65614:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>s,frontMatter:()=>a,metadata:()=>p,toc:()=>m});var r=n(25773),o=(n(27378),n(35318)),i=n(79022);const a={title:"remove-plugin"},l=void 0,p={unversionedId:"proto/commands/remove-plugin",id:"proto/commands/remove-plugin",title:"remove-plugin",description:"The proto remove-plugin (or proto rp) command will remove the provided plugin ID from to",source:"@site/docs/proto/commands/remove-plugin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/remove-plugin",permalink:"/docs/proto/commands/remove-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/remove-plugin.mdx",tags:[],version:"current",frontMatter:{title:"remove-plugin"},sidebar:"proto",previous:{title:"plugins",permalink:"/docs/proto/commands/plugins"},next:{title:"run",permalink:"/docs/proto/commands/run"}},c={},m=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],u={toc:m};function s(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(i.Z,{version:"0.16.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto remove-plugin ")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto rp"),") command will remove the provided plugin ID from to\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"[plugins]")," section of the local (",(0,o.kt)("inlineCode",{parentName:"p"},".prototools"),") or global (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),") config file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto remove-plugin node\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Built-in plugins ",(0,o.kt)("em",{parentName:"p"},"cannot")," be removed!")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"")," - ID of the plugin.")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--global")," - Remove from the global config instead of local.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e1ef406.5e9b6d58.js b/assets/js/2e1ef406.5e9b6d58.js deleted file mode 100644 index cd023766d14..00000000000 --- a/assets/js/2e1ef406.5e9b6d58.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1665],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},m=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=c(n),d=o,g=s["".concat(p,".").concat(d)]||s[d]||u[d]||i;return n?r.createElement(g,a(a({ref:t},m),{},{components:n})):r.createElement(g,a({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=s;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c{n.d(t,{Z:()=>i});var r=n(27378),o=n(9619);function i(e){let{header:t,inline:n,updated:i,version:a}=e;return r.createElement(o.Z,{text:`v${a}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),i=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?a[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(i.Z,{icon:n,className:"mr-1"}),l)}},65614:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>s,frontMatter:()=>a,metadata:()=>p,toc:()=>m});var r=n(25773),o=(n(27378),n(35318)),i=n(79022);const a={title:"remove-plugin"},l=void 0,p={unversionedId:"proto/commands/remove-plugin",id:"proto/commands/remove-plugin",title:"remove-plugin",description:"The proto remove-plugin (or proto rp) command will remove the provided plugin ID from to",source:"@site/docs/proto/commands/remove-plugin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/remove-plugin",permalink:"/docs/proto/commands/remove-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/remove-plugin.mdx",tags:[],version:"current",frontMatter:{title:"remove-plugin"},sidebar:"proto",previous:{title:"plugins",permalink:"/docs/proto/commands/plugins"},next:{title:"run",permalink:"/docs/proto/commands/run"}},c={},m=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],u={toc:m};function s(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(i.Z,{version:"0.16.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto remove-plugin ")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto rp"),") command will remove the provided plugin ID from to\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"[plugins]")," section of the local (",(0,o.kt)("inlineCode",{parentName:"p"},".prototools"),") or global (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),") config file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto remove-plugin node\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Built-in plugins ",(0,o.kt)("em",{parentName:"p"},"cannot")," be removed!")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"")," - ID of the plugin.")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--global")," - Remove from the global config instead of local.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e4722bd.44935555.js b/assets/js/2e4722bd.44935555.js new file mode 100644 index 00000000000..d6249a93e23 --- /dev/null +++ b/assets/js/2e4722bd.44935555.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75847],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),g=r,d=u["".concat(l,".").concat(g)]||u[g]||m[g]||o;return n?a.createElement(d,i(i({ref:t},c),{},{components:n})):a.createElement(d,i({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(25773),r=(n(27378),n(35318));const o={slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},i=void 0,s={permalink:"/blog/moon-v1.2",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx",source:"@site/blog/2023-04-17_moon-v1.2.mdx",title:"moon v1.2 - Tag based task inheritance",description:"In this small release, we're improving our task inheritance and performance.",date:"2023-04-17T00:00:00.000Z",formattedDate:"April 17, 2023",tags:[{label:"tags",permalink:"/blog/tags/tags"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},prevItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"},nextItem:{title:"proto v0.6 - Unused cleaning and improved global binaries",permalink:"/blog/proto-v0.6"}},l={image:n(9557).Z,authorsImageUrls:[void 0]},p=[{value:"Task inheritance based on project tags",id:"task-inheritance-based-on-project-tags",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this small release, we're improving our task inheritance and performance."),(0,r.kt)("h2",{id:"task-inheritance-based-on-project-tags"},"Task inheritance based on project tags"),(0,r.kt)("p",null,"In v0.23 we introduced ",(0,r.kt)("a",{parentName:"p",href:"/blog/v0.23#improved-task-inheritance-model"},"scoped task inheritance")," by\nproject type/language, and in v1.0 we introduced ",(0,r.kt)("a",{parentName:"p",href:"/blog/moon-v1.0#project-tagging"},"project tagging"),",\nbut what if we combined both of these features? In this release, you can now define workspace-level\ntasks ",(0,r.kt)("em",{parentName:"p"},"by tag")," that'll be inherited by all projects with that tag."),(0,r.kt)("p",null,"To demonstrate this, say you have a monorepo composed of multiple ",(0,r.kt)("a",{parentName:"p",href:"https://astro.build"},"Astro"),"\napplications, each duplicating the same Astro tasks. Instead of duplicating, define an ",(0,r.kt)("inlineCode",{parentName:"p"},"astro")," tag\nin each project's ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#tags"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"language: 'typescript'\ntype: 'application'\ntags: ['astro']\n")),(0,r.kt)("p",null,"And then create a new tasks configuration at ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks/tag-astro.yml")," with the following\ncontents:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/tag-astro.yml"',title:'".moon/tasks/tag-astro.yml"'},"fileGroups:\n astro:\n - 'public/**/*'\n - 'src/**/*'\n - 'astro.config.*'\n - 'tsconfig.json'\n\ntasks:\n astro:\n command: 'astro'\n local: true\n\n # Development server\n dev:\n command: 'astro dev'\n local: true\n\n # Production build\n build:\n command: 'astro build'\n inputs: ['@group(astro)']\n outputs: ['dist']\n\n # Check .astro files\n check:\n command: 'astro check'\n inputs: ['@group(astro)']\n deps: ['typecheck']\n\n # Preview production build locally\n preview:\n command: 'astro preview'\n deps: ['build']\n local: true\n")),(0,r.kt)("p",null,"Each of these Astro applications will now inherit all 5 tasks and the file group automatically! This\nhelps to greatly reduce maintenance overhead and help enforce consistency across projects. Jump to\nthe official ",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/task-inheritance"},"task inheritance docs")," for more information on tag\nbased inheritance."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.2.0"},"official release")," for a full list of\nchanges."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Upgraded to proto v0.6."),(0,r.kt)("li",{parentName:"ul"},"Improvements to file system operations."),(0,r.kt)("li",{parentName:"ul"},"Minor improvements to performance.")))}m.isMDXComponent=!0},9557:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.2-bfa019f686325c7aa62d923dce3d92d3.png"}}]); \ No newline at end of file diff --git a/assets/js/2e4722bd.97b5f0a4.js b/assets/js/2e4722bd.97b5f0a4.js deleted file mode 100644 index d6f57780333..00000000000 --- a/assets/js/2e4722bd.97b5f0a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5847],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),g=r,d=u["".concat(l,".").concat(g)]||u[g]||m[g]||o;return n?a.createElement(d,i(i({ref:t},c),{},{components:n})):a.createElement(d,i({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(25773),r=(n(27378),n(35318));const o={slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},i=void 0,s={permalink:"/blog/moon-v1.2",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx",source:"@site/blog/2023-04-17_moon-v1.2.mdx",title:"moon v1.2 - Tag based task inheritance",description:"In this small release, we're improving our task inheritance and performance.",date:"2023-04-17T00:00:00.000Z",formattedDate:"April 17, 2023",tags:[{label:"tags",permalink:"/blog/tags/tags"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},prevItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"},nextItem:{title:"proto v0.6 - Unused cleaning and improved global binaries",permalink:"/blog/proto-v0.6"}},l={image:n(9557).Z,authorsImageUrls:[void 0]},p=[{value:"Task inheritance based on project tags",id:"task-inheritance-based-on-project-tags",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this small release, we're improving our task inheritance and performance."),(0,r.kt)("h2",{id:"task-inheritance-based-on-project-tags"},"Task inheritance based on project tags"),(0,r.kt)("p",null,"In v0.23 we introduced ",(0,r.kt)("a",{parentName:"p",href:"/blog/v0.23#improved-task-inheritance-model"},"scoped task inheritance")," by\nproject type/language, and in v1.0 we introduced ",(0,r.kt)("a",{parentName:"p",href:"/blog/moon-v1.0#project-tagging"},"project tagging"),",\nbut what if we combined both of these features? In this release, you can now define workspace-level\ntasks ",(0,r.kt)("em",{parentName:"p"},"by tag")," that'll be inherited by all projects with that tag."),(0,r.kt)("p",null,"To demonstrate this, say you have a monorepo composed of multiple ",(0,r.kt)("a",{parentName:"p",href:"https://astro.build"},"Astro"),"\napplications, each duplicating the same Astro tasks. Instead of duplicating, define an ",(0,r.kt)("inlineCode",{parentName:"p"},"astro")," tag\nin each project's ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#tags"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"language: 'typescript'\ntype: 'application'\ntags: ['astro']\n")),(0,r.kt)("p",null,"And then create a new tasks configuration at ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks/tag-astro.yml")," with the following\ncontents:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/tag-astro.yml"',title:'".moon/tasks/tag-astro.yml"'},"fileGroups:\n astro:\n - 'public/**/*'\n - 'src/**/*'\n - 'astro.config.*'\n - 'tsconfig.json'\n\ntasks:\n astro:\n command: 'astro'\n local: true\n\n # Development server\n dev:\n command: 'astro dev'\n local: true\n\n # Production build\n build:\n command: 'astro build'\n inputs: ['@group(astro)']\n outputs: ['dist']\n\n # Check .astro files\n check:\n command: 'astro check'\n inputs: ['@group(astro)']\n deps: ['typecheck']\n\n # Preview production build locally\n preview:\n command: 'astro preview'\n deps: ['build']\n local: true\n")),(0,r.kt)("p",null,"Each of these Astro applications will now inherit all 5 tasks and the file group automatically! This\nhelps to greatly reduce maintenance overhead and help enforce consistency across projects. Jump to\nthe official ",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/task-inheritance"},"task inheritance docs")," for more information on tag\nbased inheritance."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.2.0"},"official release")," for a full list of\nchanges."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Upgraded to proto v0.6."),(0,r.kt)("li",{parentName:"ul"},"Improvements to file system operations."),(0,r.kt)("li",{parentName:"ul"},"Minor improvements to performance.")))}m.isMDXComponent=!0},9557:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.2-bfa019f686325c7aa62d923dce3d92d3.png"}}]); \ No newline at end of file diff --git a/assets/js/2e94733f.ba6d40e4.js b/assets/js/2e94733f.ba6d40e4.js new file mode 100644 index 00000000000..f2c20bbd9ab --- /dev/null +++ b/assets/js/2e94733f.ba6d40e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50167],{73955:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/bin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2ed8359a.2e63bbb4.js b/assets/js/2ed8359a.2e63bbb4.js deleted file mode 100644 index 54aedd29fbb..00000000000 --- a/assets/js/2ed8359a.2e63bbb4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2121],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>u});var a=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(t),u=o,h=m["".concat(s,".").concat(u)]||m[u]||d[u]||i;return t?a.createElement(h,r(r({ref:n},c),{},{components:t})):a.createElement(h,r({ref:n},c))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(25773),o=(t(27378),t(35318));const i={title:"Toolchain"},r=void 0,l={unversionedId:"concepts/toolchain",id:"concepts/toolchain",title:"Toolchain",description:"The toolchain is an internal layer for downloading, installing, and managing tools (languages,",source:"@site/docs/concepts/toolchain.mdx",sourceDirName:"concepts",slug:"/concepts/toolchain",permalink:"/docs/concepts/toolchain",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/toolchain.mdx",tags:[],version:"current",frontMatter:{title:"Toolchain"},sidebar:"docs",previous:{title:"Tokens",permalink:"/docs/concepts/token"},next:{title:"Workspace",permalink:"/docs/concepts/workspace"}},s={},p=[{value:"How it works",id:"how-it-works",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Version specification",id:"version-specification",level:3},{value:"Supported tools",id:"supported-tools",level:2},{value:"Deno",id:"deno",level:3},{value:"Node.js",id:"nodejs",level:3}],c={toc:p};function d(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,'The toolchain is an internal layer for downloading, installing, and managing tools (languages,\ndependency managers, libraries, and binaries) that are required at runtime. We embrace this approach\nover relying on these tools "existing" in the current environment, as it ensures the following\nacross any environment or machine:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The version and enabled features of a tool are identical."),(0,o.kt)("li",{parentName:"ul"},"Tools are isolated and unaffected by external sources."),(0,o.kt)("li",{parentName:"ul"},"Builds are consistent, reproducible, and ",(0,o.kt)("em",{parentName:"li"},"hopefully")," deterministic.")),(0,o.kt)("p",null,"Furthermore, this avoids a developer, pipeline, machine, etc, having to pre-install all the\nnecessary tools, ",(0,o.kt)("em",{parentName:"p"},"and")," to keep them in sync as time passes."),(0,o.kt)("h2",{id:"how-it-works"},"How it works"),(0,o.kt)("p",null,"The toolchain is built around ",(0,o.kt)("a",{parentName:"p",href:"/proto"},"proto"),", our stand-alone multi-language version manager. moon\nwill piggyback of proto's toolchain found at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto")," and reuse any tools available, or download\nand install them if they're missing."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"The tools that are managed by the toolchain are configured through the\n",(0,o.kt)("a",{parentName:"p",href:"../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml"))," file, but can be overridden in each project with\n",(0,o.kt)("a",{parentName:"p",href:"../config/project#toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("h3",{id:"version-specification"},"Version specification"),(0,o.kt)("p",null,"As mentioned above, tools within the toolchain are managed ",(0,o.kt)("em",{parentName:"p"},"by version")," for consistency across\nmachines. These versions are configured on a per-tool basis in\n",(0,o.kt)("a",{parentName:"p",href:"../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". So what kinds of versions are allowed?"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Full versions")," - A full version is a semantic version that is fully specified, such as ",(0,o.kt)("inlineCode",{parentName:"li"},"1.2.3"),"\nor ",(0,o.kt)("inlineCode",{parentName:"li"},"2.0.0-rc.1"),". This is the most common way to specify a version, and is preferred to avoid\nsubtle deviations."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Partial versions")," - A partial version is a version that is either missing a patch number, minor\nnumber, or both, such as ",(0,o.kt)("inlineCode",{parentName:"li"},"1.2")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"1"),". These can also be represented with requirement syntax, such\nas ",(0,o.kt)("inlineCode",{parentName:"li"},"^1.2")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"~1"),". If using partials, we suggest having a major and minor number to reduce the\ndeviation of versions across machines."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Aliases")," - An alias is a human-readable word that maps to a specific version. For example,\n",(0,o.kt)("inlineCode",{parentName:"li"},"latest")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"stable")," maps to the latest version of a tool, or ",(0,o.kt)("inlineCode",{parentName:"li"},"canary")," which maps to applicable\ncanary release, or even a completely custom alias like ",(0,o.kt)("inlineCode",{parentName:"li"},"berry"),". Aliases are language specific, are\nnot managed by moon, and are not suggested for use since they can change at any time (or even\ndaily!).")),(0,o.kt)("p",null,"This sounds great, but how exactly does this work? For full versions and aliases, it's straight\nforward, as the resolved version is used as-is (assuming it's a legitimate version), and can be\nfound at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools//"),"."),(0,o.kt)("p",null,"For partial versions, we first check locally installed versions for a match, by scanning\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/"),". For example, if the requested version is ",(0,o.kt)("inlineCode",{parentName:"p"},"1.2")," and we have ",(0,o.kt)("inlineCode",{parentName:"p"},"1.2.10"),"\ninstalled locally, we'll use that version instead of downloading the latest ",(0,o.kt)("inlineCode",{parentName:"p"},"1.2.*")," version.\nOtherwise, we'll download the latest version that matches the partial version, and install it\nlocally."),(0,o.kt)("h2",{id:"supported-tools"},"Supported tools"),(0,o.kt)("p",null,"The following tools are currently managed by the toolchain."),(0,o.kt)("h3",{id:"deno"},"Deno"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Configured with: ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#deno"},(0,o.kt)("inlineCode",{parentName:"a"},"deno"))),(0,o.kt)("li",{parentName:"ul"},"Installed to: ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/deno/x.x.x"))),(0,o.kt)("h3",{id:"nodejs"},"Node.js"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Configured with: ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#node"},(0,o.kt)("inlineCode",{parentName:"a"},"node"))),(0,o.kt)("li",{parentName:"ul"},"Installed to: ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/node/x.x.x")),(0,o.kt)("li",{parentName:"ul"},"Dependency managers: ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"a"},"npm")),",\n",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"a"},"pnpm")),", ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"a"},"yarn")))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2ed8359a.718ecb40.js b/assets/js/2ed8359a.718ecb40.js new file mode 100644 index 00000000000..4cf0b5ffc44 --- /dev/null +++ b/assets/js/2ed8359a.718ecb40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42121],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>u});var a=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(t),u=o,h=m["".concat(s,".").concat(u)]||m[u]||d[u]||i;return t?a.createElement(h,r(r({ref:n},c),{},{components:t})):a.createElement(h,r({ref:n},c))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(25773),o=(t(27378),t(35318));const i={title:"Toolchain"},r=void 0,l={unversionedId:"concepts/toolchain",id:"concepts/toolchain",title:"Toolchain",description:"The toolchain is an internal layer for downloading, installing, and managing tools (languages,",source:"@site/docs/concepts/toolchain.mdx",sourceDirName:"concepts",slug:"/concepts/toolchain",permalink:"/docs/concepts/toolchain",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/toolchain.mdx",tags:[],version:"current",frontMatter:{title:"Toolchain"},sidebar:"docs",previous:{title:"Tokens",permalink:"/docs/concepts/token"},next:{title:"Workspace",permalink:"/docs/concepts/workspace"}},s={},p=[{value:"How it works",id:"how-it-works",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Version specification",id:"version-specification",level:3},{value:"Supported tools",id:"supported-tools",level:2},{value:"Deno",id:"deno",level:3},{value:"Node.js",id:"nodejs",level:3}],c={toc:p};function d(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,'The toolchain is an internal layer for downloading, installing, and managing tools (languages,\ndependency managers, libraries, and binaries) that are required at runtime. We embrace this approach\nover relying on these tools "existing" in the current environment, as it ensures the following\nacross any environment or machine:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The version and enabled features of a tool are identical."),(0,o.kt)("li",{parentName:"ul"},"Tools are isolated and unaffected by external sources."),(0,o.kt)("li",{parentName:"ul"},"Builds are consistent, reproducible, and ",(0,o.kt)("em",{parentName:"li"},"hopefully")," deterministic.")),(0,o.kt)("p",null,"Furthermore, this avoids a developer, pipeline, machine, etc, having to pre-install all the\nnecessary tools, ",(0,o.kt)("em",{parentName:"p"},"and")," to keep them in sync as time passes."),(0,o.kt)("h2",{id:"how-it-works"},"How it works"),(0,o.kt)("p",null,"The toolchain is built around ",(0,o.kt)("a",{parentName:"p",href:"/proto"},"proto"),", our stand-alone multi-language version manager. moon\nwill piggyback of proto's toolchain found at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto")," and reuse any tools available, or download\nand install them if they're missing."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"The tools that are managed by the toolchain are configured through the\n",(0,o.kt)("a",{parentName:"p",href:"../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml"))," file, but can be overridden in each project with\n",(0,o.kt)("a",{parentName:"p",href:"../config/project#toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("h3",{id:"version-specification"},"Version specification"),(0,o.kt)("p",null,"As mentioned above, tools within the toolchain are managed ",(0,o.kt)("em",{parentName:"p"},"by version")," for consistency across\nmachines. These versions are configured on a per-tool basis in\n",(0,o.kt)("a",{parentName:"p",href:"../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". So what kinds of versions are allowed?"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Full versions")," - A full version is a semantic version that is fully specified, such as ",(0,o.kt)("inlineCode",{parentName:"li"},"1.2.3"),"\nor ",(0,o.kt)("inlineCode",{parentName:"li"},"2.0.0-rc.1"),". This is the most common way to specify a version, and is preferred to avoid\nsubtle deviations."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Partial versions")," - A partial version is a version that is either missing a patch number, minor\nnumber, or both, such as ",(0,o.kt)("inlineCode",{parentName:"li"},"1.2")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"1"),". These can also be represented with requirement syntax, such\nas ",(0,o.kt)("inlineCode",{parentName:"li"},"^1.2")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"~1"),". If using partials, we suggest having a major and minor number to reduce the\ndeviation of versions across machines."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Aliases")," - An alias is a human-readable word that maps to a specific version. For example,\n",(0,o.kt)("inlineCode",{parentName:"li"},"latest")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"stable")," maps to the latest version of a tool, or ",(0,o.kt)("inlineCode",{parentName:"li"},"canary")," which maps to applicable\ncanary release, or even a completely custom alias like ",(0,o.kt)("inlineCode",{parentName:"li"},"berry"),". Aliases are language specific, are\nnot managed by moon, and are not suggested for use since they can change at any time (or even\ndaily!).")),(0,o.kt)("p",null,"This sounds great, but how exactly does this work? For full versions and aliases, it's straight\nforward, as the resolved version is used as-is (assuming it's a legitimate version), and can be\nfound at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools//"),"."),(0,o.kt)("p",null,"For partial versions, we first check locally installed versions for a match, by scanning\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/"),". For example, if the requested version is ",(0,o.kt)("inlineCode",{parentName:"p"},"1.2")," and we have ",(0,o.kt)("inlineCode",{parentName:"p"},"1.2.10"),"\ninstalled locally, we'll use that version instead of downloading the latest ",(0,o.kt)("inlineCode",{parentName:"p"},"1.2.*")," version.\nOtherwise, we'll download the latest version that matches the partial version, and install it\nlocally."),(0,o.kt)("h2",{id:"supported-tools"},"Supported tools"),(0,o.kt)("p",null,"The following tools are currently managed by the toolchain."),(0,o.kt)("h3",{id:"deno"},"Deno"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Configured with: ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#deno"},(0,o.kt)("inlineCode",{parentName:"a"},"deno"))),(0,o.kt)("li",{parentName:"ul"},"Installed to: ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/deno/x.x.x"))),(0,o.kt)("h3",{id:"nodejs"},"Node.js"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Configured with: ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#node"},(0,o.kt)("inlineCode",{parentName:"a"},"node"))),(0,o.kt)("li",{parentName:"ul"},"Installed to: ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/node/x.x.x")),(0,o.kt)("li",{parentName:"ul"},"Dependency managers: ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"a"},"npm")),",\n",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"a"},"pnpm")),", ",(0,o.kt)("a",{parentName:"li",href:"../config/toolchain#npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"a"},"yarn")))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2fafdb99.4ebc0bc6.js b/assets/js/2fafdb99.4ebc0bc6.js deleted file mode 100644 index 16e55889340..00000000000 --- a/assets/js/2fafdb99.4ebc0bc6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[464],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),g=s(n),c=r,d=g["".concat(p,".").concat(c)]||g[c]||m[c]||a;return n?o.createElement(d,l(l({ref:t},u),{},{components:n})):o.createElement(d,l({ref:t},u))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=g;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const a={slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx",source:"@site/blog/2023-07-21_proto-v0.13.mdx",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",description:"With this release, we're embracing WASM even further.",date:"2023-07-21T00:00:00.000Z",formattedDate:"July 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2.195,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"},nextItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"}},p={authorsImageUrls:[void 0]},s=[{value:"Core migration to WASM",id:"core-migration-to-wasm",level:2},{value:"New github: plugin configuration",id:"new-github-plugin-configuration",level:2},{value:"New proto plugins commands",id:"new-proto-plugins-commands",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're embracing WASM even further."),(0,r.kt)("h2",{id:"core-migration-to-wasm"},"Core migration to WASM"),(0,r.kt)("p",null,'Now that WASM plugin support is up and running, we\'ve hit a non-ideal situation where we have\nmultiple competing implementations for "tools" in proto. We currently have 3 different approaches:'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Tools implemented in Rust and built into proto's core."),(0,r.kt)("li",{parentName:"ul"},"TOML based plugins, with a simple Rust based wrapper."),(0,r.kt)("li",{parentName:"ul"},"WASM based plugins.")),(0,r.kt)("p",null,"This is far too many implementations to support, and makes it extremely difficult to add new\nfeatures for tools, as it affects all 3. To remedy this situation, we've decided to migrate all core\ntools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will\nstill be Rust, but will be slowly migrated into a truly pluggable architecture."),(0,r.kt)("p",null,"To test drive and experiment with this solution, we've migrated\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/bun-plugin"},"Bun"),", ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/deno-plugin"},"Deno"),", and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/go-plugin"},"Go")," into WASM plugins, and starting with this release, they\nare purely powered by WASM and have been removed entirely from the Rust implementation."),(0,r.kt)("p",null,"In the next release, we hope to migrate Node.js and Rust as well. And in a future release, the TOML\nplugins will be compiled into\n",(0,r.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format"},(0,r.kt)("inlineCode",{parentName:"a"},".wat")," files"),"\nand loaded as WASM plugins. From here, we will have a single tool implementation, and can implement\nsome really exciting features!"),(0,r.kt)("h2",{id:"new-github-plugin-configuration"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"github:")," plugin configuration"),(0,r.kt)("p",null,"Alongside the ",(0,r.kt)("inlineCode",{parentName:"p"},"source:")," configuration strategy, plugins can now be configured with the ",(0,r.kt)("inlineCode",{parentName:"p"},"github:"),"\nstrategy to locate WASM files from GitHub releases. For example, the ",(0,r.kt)("inlineCode",{parentName:"p"},"bun_plugin.wasm")," file will be\ndownloaded from our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/bun-plugin/releases"},(0,r.kt)("inlineCode",{parentName:"a"},"bun-plugin"),"'s latest release"),"."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/proto/plugins#github"},"Learn more about this new locator scope!")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nbun = "github:moonrepo/bun-plugin"\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Bun support is built into proto, there is merely an example!")),(0,r.kt)("h2",{id:"new-proto-plugins-commands"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto plugins")," commands"),(0,r.kt)("p",null,"With the advent of plugins, we thought it would be nice to know which plugins are actually\nconfigured and in use, without having to manually search config files across the file system, and as\nsuch, have added a new ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/plugins"},(0,r.kt)("inlineCode",{parentName:"a"},"proto plugins"))," command."),(0,r.kt)("p",null,"This command is simple. It will list all plugins that are currently configured for the current\nproject, by loading all ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools")," files up the tree, and loading the user\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto plugins\nbun - Bun\n GitHub: moonrepo/bun-plugin\n Tag: latest\n\ndeno - Deno\n GitHub: moonrepo/deno-plugin\n Tag: latest\n\ngo - Go\n GitHub: moonrepo/go-plugin\n Tag: latest\n")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/plugins"},"Learn more about this new command!")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.13.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added documentation for writing ",(0,r.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#unit-tests"},"unit tests for WASM plugins"),"."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"proto clean")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"proto use")," to load and merge all ",(0,r.kt)("inlineCode",{parentName:"li"},".prototools")," from the current\ndirectory and upwards."),(0,r.kt)("li",{parentName:"ul"},"Many WASM API improvements.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2fafdb99.b50e26b8.js b/assets/js/2fafdb99.b50e26b8.js new file mode 100644 index 00000000000..5c301edb8b1 --- /dev/null +++ b/assets/js/2fafdb99.b50e26b8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30464],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),g=s(n),c=r,d=g["".concat(p,".").concat(c)]||g[c]||m[c]||a;return n?o.createElement(d,l(l({ref:t},u),{},{components:n})):o.createElement(d,l({ref:t},u))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=g;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const a={slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx",source:"@site/blog/2023-07-21_proto-v0.13.mdx",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",description:"With this release, we're embracing WASM even further.",date:"2023-07-21T00:00:00.000Z",formattedDate:"July 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2.195,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"},nextItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"}},p={authorsImageUrls:[void 0]},s=[{value:"Core migration to WASM",id:"core-migration-to-wasm",level:2},{value:"New github: plugin configuration",id:"new-github-plugin-configuration",level:2},{value:"New proto plugins commands",id:"new-proto-plugins-commands",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're embracing WASM even further."),(0,r.kt)("h2",{id:"core-migration-to-wasm"},"Core migration to WASM"),(0,r.kt)("p",null,'Now that WASM plugin support is up and running, we\'ve hit a non-ideal situation where we have\nmultiple competing implementations for "tools" in proto. We currently have 3 different approaches:'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Tools implemented in Rust and built into proto's core."),(0,r.kt)("li",{parentName:"ul"},"TOML based plugins, with a simple Rust based wrapper."),(0,r.kt)("li",{parentName:"ul"},"WASM based plugins.")),(0,r.kt)("p",null,"This is far too many implementations to support, and makes it extremely difficult to add new\nfeatures for tools, as it affects all 3. To remedy this situation, we've decided to migrate all core\ntools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will\nstill be Rust, but will be slowly migrated into a truly pluggable architecture."),(0,r.kt)("p",null,"To test drive and experiment with this solution, we've migrated\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/bun-plugin"},"Bun"),", ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/deno-plugin"},"Deno"),", and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/go-plugin"},"Go")," into WASM plugins, and starting with this release, they\nare purely powered by WASM and have been removed entirely from the Rust implementation."),(0,r.kt)("p",null,"In the next release, we hope to migrate Node.js and Rust as well. And in a future release, the TOML\nplugins will be compiled into\n",(0,r.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format"},(0,r.kt)("inlineCode",{parentName:"a"},".wat")," files"),"\nand loaded as WASM plugins. From here, we will have a single tool implementation, and can implement\nsome really exciting features!"),(0,r.kt)("h2",{id:"new-github-plugin-configuration"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"github:")," plugin configuration"),(0,r.kt)("p",null,"Alongside the ",(0,r.kt)("inlineCode",{parentName:"p"},"source:")," configuration strategy, plugins can now be configured with the ",(0,r.kt)("inlineCode",{parentName:"p"},"github:"),"\nstrategy to locate WASM files from GitHub releases. For example, the ",(0,r.kt)("inlineCode",{parentName:"p"},"bun_plugin.wasm")," file will be\ndownloaded from our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/bun-plugin/releases"},(0,r.kt)("inlineCode",{parentName:"a"},"bun-plugin"),"'s latest release"),"."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/proto/plugins#github"},"Learn more about this new locator scope!")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nbun = "github:moonrepo/bun-plugin"\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Bun support is built into proto, there is merely an example!")),(0,r.kt)("h2",{id:"new-proto-plugins-commands"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto plugins")," commands"),(0,r.kt)("p",null,"With the advent of plugins, we thought it would be nice to know which plugins are actually\nconfigured and in use, without having to manually search config files across the file system, and as\nsuch, have added a new ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/plugins"},(0,r.kt)("inlineCode",{parentName:"a"},"proto plugins"))," command."),(0,r.kt)("p",null,"This command is simple. It will list all plugins that are currently configured for the current\nproject, by loading all ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools")," files up the tree, and loading the user\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto plugins\nbun - Bun\n GitHub: moonrepo/bun-plugin\n Tag: latest\n\ndeno - Deno\n GitHub: moonrepo/deno-plugin\n Tag: latest\n\ngo - Go\n GitHub: moonrepo/go-plugin\n Tag: latest\n")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/plugins"},"Learn more about this new command!")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.13.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added documentation for writing ",(0,r.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#unit-tests"},"unit tests for WASM plugins"),"."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"proto clean")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"proto use")," to load and merge all ",(0,r.kt)("inlineCode",{parentName:"li"},".prototools")," from the current\ndirectory and upwards."),(0,r.kt)("li",{parentName:"ul"},"Many WASM API improvements.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/303db6c1.2ceb0e42.js b/assets/js/303db6c1.2ceb0e42.js deleted file mode 100644 index c06f1942221..00000000000 --- a/assets/js/303db6c1.2ceb0e42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6065],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(f,l(l({ref:t},c),{},{components:n})):a.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(m(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),k=(()=>{const e=m??f;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),o=n(39798),l=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(o.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(o.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(o.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(o.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(83469),o=n(31792);function l(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:r.dT$}))}},75453:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=(n(33337),n(39798),n(36642)),l=n(32189);const i={title:"Packemon example",sidebar_label:"Packemon"},s=void 0,u={unversionedId:"guides/examples/packemon",id:"guides/examples/packemon",title:"Packemon example",description:"In this guide, you'll learn how to integrate Packemon into moon. Packemon",source:"@site/docs/guides/examples/packemon.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/packemon",permalink:"/docs/guides/examples/packemon",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/packemon.mdx",tags:[],version:"current",frontMatter:{title:"Packemon example",sidebar_label:"Packemon"},sidebar:"guides",previous:{title:"Nuxt",permalink:"/docs/guides/examples/nuxt"},next:{title:"Prettier",permalink:"/docs/guides/examples/prettier"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Build targets",id:"build-targets",level:3}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L22",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://packemon.dev/"},"Packemon")," into moon. Packemon\nis a tool for properly building npm packages for distribution, it does this by providing the\nfollowing functionality:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Compiles source code to popular formats: CJS, MJS, ESM, UMD, etc."),(0,r.kt)("li",{parentName:"ul"},"Validates the ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," for incorrect fields or values."),(0,r.kt)("li",{parentName:"ul"},"Generates ",(0,r.kt)("inlineCode",{parentName:"li"},"exports")," mappings for ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," based on the define configuration."),(0,r.kt)("li",{parentName:"ul"},"And many more ",(0,r.kt)("a",{parentName:"li",href:"https://packemon.dev/docs/features"},"optimizations and features"),"!")),(0,r.kt)("p",null,"Begin by installing ",(0,r.kt)("inlineCode",{parentName:"p"},"packemon")," in your root. We suggest using the same version across the entire\nrepository."),(0,r.kt)(o.Z,{dep:"packemon",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Packemon is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Packemon tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/packemon"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"# Inherit tasks from the `packemon` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['packemon']\n\n# Set the output formats\ntasks:\n build:\n outputs:\n - 'cjs'\n")),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Packemon has built-in support for TypeScript, but to ",(0,r.kt)("em",{parentName:"p"},"not")," conflict with a\n",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"typecheck task"),", a separate ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," file is required, which is named\n",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig..json"),"."),(0,r.kt)("p",null,"This config is necessary to ",(0,r.kt)("em",{parentName:"p"},"only")," compile source files, and to not include unwanted files in the\ndeclaration output directory."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.esm.json"',title:'"tsconfig.esm.json"'},'{\n "extends": "../../tsconfig.options.json",\n "compilerOptions": {\n "outDir": "esm",\n "rootDir": "src"\n },\n "include": ["src/**/*"],\n "references": []\n}\n')),(0,r.kt)("h3",{id:"build-targets"},"Build targets"),(0,r.kt)("p",null,"To configure the target platform(s) and format(s), you must define a\n",(0,r.kt)("a",{parentName:"p",href:"https://packemon.dev/docs/config"},(0,r.kt)("inlineCode",{parentName:"a"},"packemon")," block")," in the project's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),". The chosen\nformats must also be listed as ",(0,r.kt)("inlineCode",{parentName:"p"},"outputs")," in the task."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n "name": "package",\n // ...\n "packemon": {\n "format": "esm",\n "platform": "browser"\n }\n}\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/303db6c1.8f89b640.js b/assets/js/303db6c1.8f89b640.js new file mode 100644 index 00000000000..b348123d815 --- /dev/null +++ b/assets/js/303db6c1.8f89b640.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66065],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(f,l(l({ref:t},c),{},{components:n})):a.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(m(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),k=(()=>{const e=m??f;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),o=n(39798),l=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(o.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(o.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(o.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(o.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(83469),o=n(31792);function l(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:r.dT$}))}},75453:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=(n(33337),n(39798),n(36642)),l=n(32189);const i={title:"Packemon example",sidebar_label:"Packemon"},s=void 0,u={unversionedId:"guides/examples/packemon",id:"guides/examples/packemon",title:"Packemon example",description:"In this guide, you'll learn how to integrate Packemon into moon. Packemon",source:"@site/docs/guides/examples/packemon.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/packemon",permalink:"/docs/guides/examples/packemon",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/packemon.mdx",tags:[],version:"current",frontMatter:{title:"Packemon example",sidebar_label:"Packemon"},sidebar:"guides",previous:{title:"Nuxt",permalink:"/docs/guides/examples/nuxt"},next:{title:"Prettier",permalink:"/docs/guides/examples/prettier"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Build targets",id:"build-targets",level:3}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L22",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://packemon.dev/"},"Packemon")," into moon. Packemon\nis a tool for properly building npm packages for distribution, it does this by providing the\nfollowing functionality:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Compiles source code to popular formats: CJS, MJS, ESM, UMD, etc."),(0,r.kt)("li",{parentName:"ul"},"Validates the ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," for incorrect fields or values."),(0,r.kt)("li",{parentName:"ul"},"Generates ",(0,r.kt)("inlineCode",{parentName:"li"},"exports")," mappings for ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," based on the define configuration."),(0,r.kt)("li",{parentName:"ul"},"And many more ",(0,r.kt)("a",{parentName:"li",href:"https://packemon.dev/docs/features"},"optimizations and features"),"!")),(0,r.kt)("p",null,"Begin by installing ",(0,r.kt)("inlineCode",{parentName:"p"},"packemon")," in your root. We suggest using the same version across the entire\nrepository."),(0,r.kt)(o.Z,{dep:"packemon",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Packemon is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Packemon tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/packemon"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="/moon.yml"',title:'"/moon.yml"'},"# Inherit tasks from the `packemon` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['packemon']\n\n# Set the output formats\ntasks:\n build:\n outputs:\n - 'cjs'\n")),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Packemon has built-in support for TypeScript, but to ",(0,r.kt)("em",{parentName:"p"},"not")," conflict with a\n",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"typecheck task"),", a separate ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," file is required, which is named\n",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig..json"),"."),(0,r.kt)("p",null,"This config is necessary to ",(0,r.kt)("em",{parentName:"p"},"only")," compile source files, and to not include unwanted files in the\ndeclaration output directory."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.esm.json"',title:'"tsconfig.esm.json"'},'{\n "extends": "../../tsconfig.options.json",\n "compilerOptions": {\n "outDir": "esm",\n "rootDir": "src"\n },\n "include": ["src/**/*"],\n "references": []\n}\n')),(0,r.kt)("h3",{id:"build-targets"},"Build targets"),(0,r.kt)("p",null,"To configure the target platform(s) and format(s), you must define a\n",(0,r.kt)("a",{parentName:"p",href:"https://packemon.dev/docs/config"},(0,r.kt)("inlineCode",{parentName:"a"},"packemon")," block")," in the project's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),". The chosen\nformats must also be listed as ",(0,r.kt)("inlineCode",{parentName:"p"},"outputs")," in the task."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n "name": "package",\n // ...\n "packemon": {\n "format": "esm",\n "platform": "browser"\n }\n}\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/30780.40ec253d.js b/assets/js/30780.40ec253d.js new file mode 100644 index 00000000000..19c07cf988f --- /dev/null +++ b/assets/js/30780.40ec253d.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30780],{30780:(e,t,n)=>{"use strict";n.d(t,{Z:()=>H});var o=n(25773),r=n(27378),s=n(76457),c=n(37140),a=n(6499),l=n(75484),i=n(90433);const u="codeBlockContainer_mQmQ";function p(e){let{as:t,...n}=e;const s=(0,a.p)(),p=(0,i.QC)(s);return r.createElement(t,(0,o.Z)({},n,{style:p,className:(0,c.Z)(n.className,u,l.k.common.codeBlock)}))}const d={codeBlockContent:"codeBlockContent_D5yF",codeBlockTitle:"codeBlockTitle_x_ju",codeBlock:"codeBlock_RMoD",codeBlockStandalone:"codeBlockStandalone_wQog",codeBlockLines:"codeBlockLines_AclH",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_O625",buttonGroup:"buttonGroup_aaMX"};function m(e){let{children:t,className:n}=e;return r.createElement(p,{as:"pre",tabIndex:0,className:(0,c.Z)(d.codeBlockStandalone,"thin-scrollbar",n)},r.createElement("code",{className:d.codeBlockLines},t))}var g=n(20624),f=n(96177);const y={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var h={Prism:n(52349).Z,theme:y};function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(){return k=Object.assign||function(e){for(var t=1;t0&&e[n-1]===t?e:e.concat(t)},N=function(e,t){var n=e.plain,o=Object.create(null),r=e.styles.reduce((function(e,n){var o=n.languages,r=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=k({},e[t],r);e[t]=n})),e}),o);return r.root=n,r.plain=k({},n,{backgroundColor:null}),r};function C(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}const w=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),b(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?N(e.theme,e.language):void 0;return t.themeDict=n})),b(this,"getLineProps",(function(e){var n=e.key,o=e.className,r=e.style,s=k({},C(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(s.style=c.plain),void 0!==r&&(s.style=void 0!==s.style?k({},s.style,r):r),void 0!==n&&(s.key=n),o&&(s.className+=" "+o),s})),b(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,r=n.length,s=t.getThemeDict(t.props);if(void 0!==s){if(1===r&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===r&&!o)return s[n[0]];var c=o?{display:"inline-block"}:{},a=n.map((function(e){return s[e]}));return Object.assign.apply(Object,[c].concat(a))}})),b(this,"getTokenProps",(function(e){var n=e.key,o=e.className,r=e.style,s=e.token,c=k({},C(e,["key","className","style","token"]),{className:"token "+s.types.join(" "),children:s.content,style:t.getStyleForToken(s),key:void 0});return void 0!==r&&(c.style=void 0!==c.style?k({},c.style,r):r),void 0!==n&&(c.key=n),o&&(c.className+=" "+o),c})),b(this,"tokenize",(function(e,t,n,o){var r={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",r);var s=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),s}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,r=e.children,s=this.getThemeDict(this.props),c=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],o=[0],r=[e.length],s=0,c=0,a=[],l=[a];c>-1;){for(;(s=o[c]++)0?u:["plain"],i=p):(u=B(u,p.type),p.alias&&(u=B(u,p.alias)),i=p.content),"string"==typeof i){var d=i.split(v),m=d.length;a.push({types:u,content:d[0]});for(var g=1;gr.createElement("span",(0,o.Z)({key:t},l({token:e,key:t})))));return r.createElement("span",i,s?r.createElement(r.Fragment,null,r.createElement("span",{className:j}),r.createElement("span",{className:T},u)):u,r.createElement("br",null))}var Z=n(99213);function O(e){return r.createElement("svg",(0,o.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function S(e){return r.createElement("svg",(0,o.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const _={copyButtonCopied:"copyButtonCopied_TYdd",copyButtonIcons:"copyButtonIcons_z5j7",copyButtonIcon:"copyButtonIcon_FoOz",copyButtonSuccessIcon:"copyButtonSuccessIcon_L0B6"};function I(e){let{code:t,className:n}=e;const[o,s]=(0,r.useState)(!1),a=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;const o=document.createElement("textarea"),r=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const s=document.getSelection();let c=!1;s.rangeCount>0&&(c=s.getRangeAt(0)),n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let a=!1;try{a=document.execCommand("copy")}catch{}o.remove(),c&&(s.removeAllRanges(),s.addRange(c)),r&&r.focus()}(t),s(!0),a.current=window.setTimeout((()=>{s(!1)}),1e3)}),[t]);return(0,r.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),r.createElement("button",{type:"button","aria-label":o?(0,Z.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,Z.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,Z.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",n,_.copyButton,o&&_.copyButtonCopied),onClick:l},r.createElement("span",{className:_.copyButtonIcons,"aria-hidden":"true"},r.createElement(O,{className:_.copyButtonIcon}),r.createElement(S,{className:_.copyButtonSuccessIcon})))}function A(e){return r.createElement("svg",(0,o.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const P="wordWrapButtonIcon_HV9T",z="wordWrapButtonEnabled_XzR1";function D(e){let{className:t,onClick:n,isEnabled:o}=e;const s=(0,Z.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return r.createElement("button",{type:"button",onClick:n,className:(0,c.Z)("clean-btn",t,o&&z),"aria-label":s,title:s},r.createElement(A,{className:P,"aria-hidden":"true"}))}function $(e){let{children:t,className:n="",metastring:s,title:l,showLineNumbers:u,language:m}=e;const{prism:{defaultLanguage:y,magicComments:b}}=(0,g.L)(),k=m??(0,i.Vo)(n)??y,v=(0,a.p)(),E=(0,f.F)(),B=(0,i.bc)(s)||l,{lineClassNames:N,code:C}=(0,i.nZ)(t,{metastring:s,language:k,magicComments:b}),L=u??(0,i.nt)(s);return r.createElement(p,{as:"div",className:(0,c.Z)(n,k&&!n.includes(`language-${k}`)&&`language-${k}`)},B&&r.createElement("div",{className:d.codeBlockTitle},B),r.createElement("div",{className:d.codeBlockContent},r.createElement(w,(0,o.Z)({},h,{theme:v,code:C,language:k??"text"}),(e=>{let{className:t,tokens:n,getLineProps:o,getTokenProps:s}=e;return r.createElement("pre",{tabIndex:0,ref:E.codeBlockRef,className:(0,c.Z)(t,d.codeBlock,"thin-scrollbar")},r.createElement("code",{className:(0,c.Z)(d.codeBlockLines,L&&d.codeBlockLinesWithNumbering)},n.map(((e,t)=>r.createElement(x,{key:t,line:e,getLineProps:o,getTokenProps:s,classNames:N[t],showLineNumbers:L})))))})),r.createElement("div",{className:d.buttonGroup},(E.isEnabled||E.isCodeScrollable)&&r.createElement(D,{className:d.codeButton,onClick:()=>E.toggle(),isEnabled:E.isEnabled}),r.createElement(I,{className:d.codeButton,code:C}))))}function H(e){let{children:t,...n}=e;const c=(0,s.Z)(),a=function(e){return r.Children.toArray(e).some((e=>(0,r.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof a?$:m;return r.createElement(l,(0,o.Z)({key:String(c)},n),a)}},96177:(e,t,n)=>{"use strict";n.d(t,{F:()=>a});var o=n(27378),r=n(41763);const s={attributes:!0,characterData:!0,childList:!0,subtree:!0};function c(e,t){const[n,c]=(0,o.useState)(),a=(0,o.useCallback)((()=>{c(e.current?.closest("[role=tabpanel][hidden]"))}),[e,c]);(0,o.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=s);const c=(0,r.zX)(t),a=(0,r.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(c);return e&&t.observe(e,a),()=>t.disconnect()}),[e,c,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function a(){const[e,t]=(0,o.useState)(!1),[n,r]=(0,o.useState)(!1),s=(0,o.useRef)(null),a=(0,o.useCallback)((()=>{const n=s.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[s,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=s.current,n=e>t||s.current.querySelector("code").hasAttribute("style");r(n)}),[s]);return c(s,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:n,toggle:a}}},6499:(e,t,n)=>{"use strict";n.d(t,{p:()=>s});var o=n(55421),r=n(20624);function s(){const{prism:e}=(0,r.L)(),{colorMode:t}=(0,o.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}},90433:(e,t,n)=>{"use strict";n.d(t,{QC:()=>m,Vo:()=>p,bc:()=>i,nZ:()=>d,nt:()=>u});var o=n(6324),r=n.n(o);const s=/title=(?["'])(?.*?)\1/,c=/\{(?<range>[\d,-]+)\}/,a={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function l(e,t){const n=e.map((e=>{const{start:n,end:o}=a[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function i(e){return e?.match(s)?.groups.title??""}function u(e){return Boolean(e?.includes("showLineNumbers"))}function p(e){return e.split(" ").find((e=>e.startsWith("language-")))?.replace(/language-/,"")}function d(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:s,metastring:i}=t;if(i&&c.test(i)){const e=i.match(c).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=s[0].className,o=r()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const u=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return l(["js","jsBlock"],t);case"jsx":case"tsx":return l(["js","jsBlock","jsx"],t);case"html":return l(["js","jsBlock","html"],t);case"python":case"py":case"bash":return l(["bash"],t);case"markdown":case"md":return l(["html","jsx","bash"],t);default:return l(Object.keys(a),t)}}(o,s),p=n.split("\n"),d=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),m=Object.fromEntries(s.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),g=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),f=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let r=0;r<p.length;){const e=p[r].match(u);if(!e){r+=1;continue}const t=e.slice(1).find((e=>void 0!==e));m[t]?d[m[t]].range+=`${r},`:g[t]?d[g[t]].start=r:f[t]&&(d[f[t]].range+=`${d[f[t]].start}-${r-1},`),p.splice(r,1)}n=p.join("\n");const y={};return Object.entries(d).forEach((e=>{let[t,{range:n}]=e;r()(n).forEach((e=>{y[e]??=[],y[e].push(t)}))})),{lineClassNames:y,code:n}}function m(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,r]=e;const s=t[o];s&&"string"==typeof r&&(n[s]=r)})),n}},6324:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,r,s]=t;if(o&&s){o=parseInt(o),s=parseInt(s);const e=o<s?1:-1;"-"!==r&&".."!==r&&"\u2025"!==r||(s+=e);for(let t=o;t!==s;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/318f6953.0efba10b.js b/assets/js/318f6953.0efba10b.js new file mode 100644 index 00000000000..6d1dbe5f13b --- /dev/null +++ b/assets/js/318f6953.0efba10b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13774],{35318:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},l=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,i(i({ref:t},l),{},{components:n})):r.createElement(f,i({ref:t},l))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p<a;p++)i[p]=n[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},57645:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var r=n(25773),o=(n(27378),n(35318));const a={title:"setup"},i=void 0,c={unversionedId:"commands/setup",id:"commands/setup",title:"setup",description:"The moon setup command can be used to setup the developer and pipeline environments. It achieves",source:"@site/docs/commands/setup.mdx",sourceDirName:"commands",slug:"/commands/setup",permalink:"/docs/commands/setup",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/setup.mdx",tags:[],version:"current",frontMatter:{title:"setup"},sidebar:"docs",previous:{title:"run",permalink:"/docs/commands/run"},next:{title:"sync",permalink:"/docs/commands/sync"}},s={},p=[],l={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon setup")," command can be used to setup the developer and pipeline environments. It achieves\nthis by downloading and installing all configured tools into the toolchain."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon setup\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This command should rarely be used, as the environment is automatically setup when running other\ncommands, like detecting affected projects, running a task, or generating a build artifact.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/318f6953.8ec50218.js b/assets/js/318f6953.8ec50218.js deleted file mode 100644 index d17ea947c00..00000000000 --- a/assets/js/318f6953.8ec50218.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3774],{35318:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},l=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,i(i({ref:t},l),{},{components:n})):r.createElement(f,i({ref:t},l))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p<a;p++)i[p]=n[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},57645:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var r=n(25773),o=(n(27378),n(35318));const a={title:"setup"},i=void 0,c={unversionedId:"commands/setup",id:"commands/setup",title:"setup",description:"The moon setup command can be used to setup the developer and pipeline environments. It achieves",source:"@site/docs/commands/setup.mdx",sourceDirName:"commands",slug:"/commands/setup",permalink:"/docs/commands/setup",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/setup.mdx",tags:[],version:"current",frontMatter:{title:"setup"},sidebar:"docs",previous:{title:"run",permalink:"/docs/commands/run"},next:{title:"sync",permalink:"/docs/commands/sync"}},s={},p=[],l={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon setup")," command can be used to setup the developer and pipeline environments. It achieves\nthis by downloading and installing all configured tools into the toolchain."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon setup\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This command should rarely be used, as the environment is automatically setup when running other\ncommands, like detecting affected projects, running a task, or generating a build artifact.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/31fff4a5.0d43e3cd.js b/assets/js/31fff4a5.0d43e3cd.js new file mode 100644 index 00000000000..90ab88f6f49 --- /dev/null +++ b/assets/js/31fff4a5.0d43e3cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44817],{92052:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/action","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/31fff4a5.b2a5106c.js b/assets/js/31fff4a5.b2a5106c.js deleted file mode 100644 index db8c44fa894..00000000000 --- a/assets/js/31fff4a5.b2a5106c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4817],{92052:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/action","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/32392.be4ae757.js b/assets/js/32392.be4ae757.js new file mode 100644 index 00000000000..ed17992408d --- /dev/null +++ b/assets/js/32392.be4ae757.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32392],{38274:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});var l=a(25773),n=a(27378),s=a(99213),r=a(44022);function m(e){const{previous:t,next:a}=e;return n.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&n.createElement(r.Z,(0,l.Z)({},t,{subLabel:n.createElement(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&n.createElement(r.Z,(0,l.Z)({},a,{subLabel:n.createElement(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},25069:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var l=a(27378),n=a(37140),s=a(99213),r=a(75484),m=a(25611);function c(e){let{className:t}=e;const a=(0,m.E)();return a.badge?l.createElement("span",{className:(0,n.Z)(t,r.k.docs.docVersionBadge,"badge badge--secondary")},l.createElement(s.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}},40450:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var l=a(27378),n=a(35318),s=a(36256);function r(e){let{children:t}=e;return l.createElement(n.Zo,{components:s.default},t)}},17061:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var l=a(25773),n=a(27378),s=a(37140),r=a(17148);const m="tableOfContents_XG6w";function c(e){let{className:t,...a}=e;return n.createElement("div",{className:(0,s.Z)(m,"thin-scrollbar",t)},n.createElement(r.Z,(0,l.Z)({},a,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},72218:(e,t,a)=>{a.r(t),a.d(t,{default:()=>g});var l=a(27378),n=a(37140),s=a(80376),r=a(17148),m=a(25773),c=a(99213);const u="tocCollapsibleButton_iI2p",d="tocCollapsibleButtonExpanded_cHjC";function i(e){let{collapsed:t,...a}=e;return l.createElement("button",(0,m.Z)({type:"button"},a,{className:(0,n.Z)("clean-btn",u,!t&&d,a.className)}),l.createElement(c.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const o="tocCollapsible_wXna",f="tocCollapsibleContent_vea0",p="tocCollapsibleExpanded_BbRn";function g(e){let{toc:t,className:a,minHeadingLevel:m,maxHeadingLevel:c}=e;const{collapsed:u,toggleCollapsed:d}=(0,s.u)({initialState:!0});return l.createElement("div",{className:(0,n.Z)(o,!u&&p,a)},l.createElement(i,{collapsed:u,onClick:d}),l.createElement(s.z,{lazy:!0,className:f,collapsed:u},l.createElement(r.Z,{toc:t,minHeadingLevel:m,maxHeadingLevel:c})))}},17148:(e,t,a)=>{a.d(t,{Z:()=>d});var l=a(25773),n=a(27378),s=a(20624),r=a(86934),m=a(81344);function c(e){let{toc:t,className:a,linkClassName:l,isChild:s}=e;return t.length?n.createElement("ul",{className:s?void 0:a},t.map((e=>n.createElement("li",{key:e.id},n.createElement("a",{href:`#${e.id}`,className:l??void 0,dangerouslySetInnerHTML:{__html:e.value}}),n.createElement(c,{isChild:!0,toc:e.children,className:a,linkClassName:l}))))):null}const u=n.memo(c);function d(e){let{toc:t,className:a="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:d,minHeadingLevel:i,maxHeadingLevel:o,...f}=e;const p=(0,s.L)(),g=i??p.tableOfContents.minHeadingLevel,E=o??p.tableOfContents.maxHeadingLevel,y=(0,r.b)({toc:t,minHeadingLevel:g,maxHeadingLevel:E}),b=(0,n.useMemo)((()=>{if(c&&d)return{linkClassName:c,linkActiveClassName:d,minHeadingLevel:g,maxHeadingLevel:E}}),[c,d,g,E]);return(0,m.S)(b),n.createElement(u,(0,l.Z)({toc:y,className:a,linkClassName:c},f))}},21114:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.AnchorLink=function(e){let{id:t}=e;return l.default.createElement("a",{className:"tsd-anchor",href:`#${t}`},l.default.createElement("span",{className:"tsd-anchor-id",id:t}),l.default.createElement("i",{className:"codicon codicon-symbol-numeric"}))}},32392:(e,t,a)=>{const l=a(27378),n=a(95709),s=a(25734),r=a(51165),m=a(25822),c=a(95950),u=a(23802),d=a(55547),i=a(47367),o=a(19830),f=(e=>e&&e.__esModule?e:{default:e})(l);e.exports=function(e){let{readme:t,route:a}=e;const p=s.useReflection(a.id),g=r.useReflectionMap(),E=l.useMemo((()=>function(e,t){const a=[],l=new Set;return e.groups?.forEach((e=>{e.children?.forEach((e=>{const n=t[e];if(l.has(n.name))return;const s=m.getKindIconHtml(n.kind,n.name);n.permalink&&!n.permalink.includes("#")||(a.push({children:[],id:n.name,value:s?`${s} ${n.name}`:n.name,level:1}),l.add(n.name))}))})),a}(p,g)),[p,g]),y=s.useReflection(p.previousId),b=s.useReflection(p.nextId),N=l.useMemo((()=>({next:b?{permalink:b.permalink,title:b.name}:void 0,previous:y?{permalink:y.permalink,title:y.name}:void 0})),[b,y]);return f.default.createElement(c,{heading:f.default.createElement(f.default.Fragment,null,f.default.createElement("span",{className:"tsd-header-flags"},f.default.createElement(d.Flags,{flags:p.flags})),p.name," ",f.default.createElement(o.TypeParametersGeneric,{params:p.typeParameters})),pageMetadata:f.default.createElement(n.PageMetadata,{description:p.comment?.summary?u.displayPartsToMarkdown(p.comment.summary):"",title:`${p.name} | API`}),pagingMetadata:N,route:a,toc:E},t&&f.default.createElement("section",{className:"tsd-readme"},f.default.createElement(t,null)),f.default.createElement(i.Reflection,{reflection:p}))}},95950:(e,t,a)=>{const l=a(27378),n=a(95709),s=a(78372),r=a(38274),m=a(25069),c=a(1999),u=a(40450),d=a(17061),i=a(72218),o=a(17996),f=a(66498),p=a(66715),g=e=>e&&e.__esModule?e:{default:e},E=g(l),y=g(s),b=g(r),N=g(m),h=g(c),v=g(u),k=g(d),T=g(i);e.exports=function(e){let{children:t,heading:a,pageMetadata:l,pagingMetadata:s,toc:r}=e;const m=n.useWindowSize(),c=o.useBreadcrumbs(),u=r.length>0,d=u&&("desktop"===m||"ssr"===m);return E.default.createElement(E.default.Fragment,null,l,E.default.createElement("div",{className:"row"},E.default.createElement("div",{className:"col apiItemCol"},E.default.createElement(p.VersionBanner,null),E.default.createElement("div",{className:"apiItemContainer"},E.default.createElement("article",null,c&&E.default.createElement(y.default,null),E.default.createElement(N.default,null),u&&E.default.createElement(T.default,{className:`${n.ThemeClassNames.docs.docTocMobile??""} apiTocMobile`,maxHeadingLevel:6,minHeadingLevel:1,toc:r}),E.default.createElement("div",{className:`${n.ThemeClassNames.docs.docMarkdown??""} markdown`},E.default.createElement("header",null,E.default.createElement(h.default,{as:"h1"},a)),E.default.createElement(v.default,null,t)),E.default.createElement(f.Footer,null)),s&&E.default.createElement(b.default,s))),d&&E.default.createElement("div",{className:"col col--3"},E.default.createElement(k.default,{className:n.ThemeClassNames.docs.docTocDesktop,maxHeadingLevel:6,minHeadingLevel:1,toc:r}))))}},23802:(e,t,a)=>{const l=a(27378),n=a(97279),s=(e=>e&&e.__esModule?e:{default:e})(l);function r(e){return!!e&&Boolean(e.summary?.some((e=>"text"!==e.kind||""!==e.text))||e.blockTags&&e.blockTags?.length>0)}function m(e){return e.map((e=>"inline-tag"===e.kind?`{${e.tag} ${e.text}}`:e.text)).join("")}t.Comment=function(e){let{comment:t,root:a,hideTags:l=[]}=e;if(!t||!r(t))return null;const c=t.blockTags?.filter((e=>!l.includes(e.tag)&&"@default"!==e.tag))??[];return s.default.createElement("div",{className:"tsd-comment tsd-typography "+(a?"tsd-comment-root":"")},!!t.summary&&s.default.createElement("div",{className:"lead"},s.default.createElement(n.Markdown,{content:m(t.summary)})),c.length>0&&s.default.createElement("dl",{className:"tsd-comment-tags"},c.map((e=>s.default.createElement(s.default.Fragment,{key:e.tag},s.default.createElement("dt",null,s.default.createElement("strong",null,e.tag)),s.default.createElement("dd",null,s.default.createElement(n.Markdown,{content:m(e.content)})))))))},t.displayPartsToMarkdown=m,t.hasComment=r},67284:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));function n(e){switch(e){case"@beta":case"@experimental":return"warning";case"@alpha":return"danger";default:return"info"}}t.CommentBadges=function(e){let{comment:t}=e;const a=t.modifierTags;return l.default.createElement("div",{className:"badge-group"},a.map((e=>l.default.createElement("span",{key:e,className:`badge badge--${n(e)}`},e.slice(1)))))},t.isCommentWithModifiers=function(e){return!!e&&!!e.modifierTags&&e.modifierTags.length>0}},31502:(e,t,a)=>{function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,l)}return a}function n(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var l=a.call(e,t||"default");if("object"!=typeof l)return l;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const r=a(27378),m=a(23802),c=a(20623),u=(e=>e&&e.__esModule?e:{default:e})(r);t.DefaultValue=function(e){let{comment:t,value:a,type:l}=e;if(!t&&!a)return null;const s=function(e){const t=e?.blockTags?.find((e=>"@default"===e.tag));return t?m.displayPartsToMarkdown(t.content):null}(t);return s||a?u.default.createElement("span",{className:"tsd-signature-symbol"}," = ",a&&u.default.createElement(u.default.Fragment,null,"string"==typeof a?a:u.default.createElement(c.Type,{type:a})),!a&&s&&u.default.createElement(c.Type,{type:n(n({type:"literal"},"intrinsic"===l?.type?{}:l),{},{value:s})})):null}},55547:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));function n(e){return e.replace(/^is([A-Z])/,((e,t)=>String(t).toLocaleLowerCase()))}t.Flags=function(e){let{flags:t}=e;return t?l.default.createElement(l.default.Fragment,null,Object.keys(t).map(n).map((e=>l.default.createElement("span",{key:e,className:`tsd-flag tsd-flag-${e}`},e)))):null}},66498:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.Footer=function(){return l.default.createElement("footer",{className:"tsd-footer"},"Powered by"," ",l.default.createElement("a",{href:"https://github.com/milesj/docusaurus-plugin-typedoc-api"},"docusaurus-plugin-typedoc-api")," ","and ",l.default.createElement("a",{href:"https://typedoc.org/"},"TypeDoc"))}},97885:(e,t,a)=>{const l=a(27378),n=a(20623),s=(e=>e&&e.__esModule?e:{default:e})(l);t.Hierarchy=function e(t){let{tree:a}=t;return s.default.createElement("ul",{className:"tsd-hierarchy"},a.types.map(((t,l)=>s.default.createElement("li",{key:t.type+String(l)},a.isTarget?s.default.createElement("em",{className:"tsd-target"},"reference"===t.type?t.name:"UNKNOWN"):s.default.createElement(n.Type,{type:t}),l===a.types.length-1&&a.next&&s.default.createElement(e,{tree:a.next})))))}},16471:(e,t,a)=>{const l=a(27378),n=a(25822),s=(e=>e&&e.__esModule?e:{default:e})(l);t.Icon=function(e){let{reflection:t}=e;const a=n.getKindIcon(t.kind,t.name);if(!a)return null;const l=n.getKindIconColor(t.kind);return s.default.createElement("i",{className:`codicon codicon-${a}`,style:{color:l}})}},75845:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(25734),r=a(21114),m=a(16471),c=e=>e&&e.__esModule?e:{default:e},u=c(l),d=c(n);function i(e){let{id:t}=e;const a=s.useReflection(t);return u.default.createElement("li",null,u.default.createElement(d.default,{className:"tsd-kind-icon",to:a.permalink??`#${a.name}`},u.default.createElement(m.Icon,{reflection:a}),a.name??u.default.createElement("em",null,a.kindString)))}t.Index=function(e){let{reflection:t}=e;return t.categories&&t.categories.length>0?u.default.createElement("section",{className:"tsd-panel-group tsd-index-group"},u.default.createElement("h2",null,"Index ",u.default.createElement(r.AnchorLink,{id:"Index"})),u.default.createElement("section",{className:"tsd-panel tsd-index-panel"},u.default.createElement("div",{className:"tsd-index-content"},t.categories.map((e=>u.default.createElement("section",{key:e.title,className:"tsd-index-section"},u.default.createElement("h3",{className:"tsd-panel-header"},"CATEGORY"===e.title?"Other":e.title),u.default.createElement("div",{className:"tsd-panel-content"},u.default.createElement("ul",{className:"tsd-index-list"},e.children?.map((e=>u.default.createElement(i,{key:e,id:e}))))))))))):t.groups&&t.groups.length>0?u.default.createElement("section",{className:"tsd-panel-group tsd-index-group"},u.default.createElement("h2",null,"Index ",u.default.createElement(r.AnchorLink,{id:"Index"})),u.default.createElement("section",{className:"tsd-panel tsd-index-panel"},u.default.createElement("div",{className:"tsd-index-content"},t.groups.map((e=>u.default.createElement("section",{key:e.title,className:"tsd-index-section"},e.categories&&e.categories.length>0?e.categories.map((t=>u.default.createElement(u.default.Fragment,{key:t.title},u.default.createElement("h3",{className:"tsd-panel-header"},"CATEGORY"===t.title?e.title:t.title),u.default.createElement("div",{className:"tsd-panel-content"},u.default.createElement("ul",{className:"tsd-index-list"},t.children?.map((e=>u.default.createElement(i,{key:e,id:e})))))))):u.default.createElement(u.default.Fragment,null,u.default.createElement("h3",{className:"tsd-panel-header"},e.title),u.default.createElement("div",{className:"tsd-panel-content"},u.default.createElement("ul",{className:"tsd-index-list"},e.children?.map((e=>u.default.createElement(i,{key:e,id:e})))))))))))):null}},53462:(e,t,a)=>{const l=a(27378),n=a(25734),s=a(51165),r=a(78460),m=a(21114),c=a(67284),u=a(55547),d=a(92897),i=a(43610),o=a(11505),f=a(46449),p=a(2386),g=(e=>e&&e.__esModule?e:{default:e})(l);t.Member=function e(t){let{id:a}=t;const l=s.useReflectionMap(),E=n.useReflection(a),y=E.comment;let b=null;return b=E.signatures?g.default.createElement(f.MemberSignatures,{inPanel:!0,sigs:E.signatures}):E.getSignature||E.setSignature?g.default.createElement(i.MemberGetterSetter,{inPanel:!0,getter:E.getSignature,setter:E.setSignature}):"target"in E&&E.target?g.default.createElement(o.MemberReference,{reflection:E}):g.default.createElement(d.MemberDeclaration,{id:a}),g.default.createElement("section",{className:"tsd-panel tsd-member"},g.default.createElement("h3",{className:"tsd-panel-header"},g.default.createElement(m.AnchorLink,{id:E.name}),g.default.createElement(p.SourceLink,{sources:E.sources}),g.default.createElement(u.Flags,{flags:E.flags}),E.name,c.isCommentWithModifiers(y)&&g.default.createElement(c.CommentBadges,{comment:y})),b,E.groups?.map((t=>g.default.createElement(g.default.Fragment,{key:t.title},t.children?.map((t=>r.hasOwnDocument(t,l)?null:g.default.createElement(e,{key:t,id:t})))))))}},92897:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(25734),r=a(23802),m=a(31502),c=a(16471),u=a(31102),d=a(95280),i=a(20623),o=a(28625),f=a(19830),p=(e=>e&&e.__esModule?e:{default:e})(l);t.MemberDeclaration=function(e){let{id:t}=e;const a=s.useReflection(t),l=n.useMinimalLayout(),g=a.typeParameters&&a.typeParameters.length>0,E=!l&&a.type?.declaration;return p.default.createElement(p.default.Fragment,null,p.default.createElement("div",{className:"tsd-panel-content"},p.default.createElement("div",{className:"tsd-signature tsd-kind-icon"},p.default.createElement(c.Icon,{reflection:a}),a.name,p.default.createElement(f.TypeParametersGeneric,{params:a.typeParameters}),p.default.createElement("span",{className:"tsd-signature-symbol"},a.flags?.isOptional&&"?",": ")," ",p.default.createElement(i.Type,{type:a.type}),p.default.createElement(m.DefaultValue,{comment:a.comment,type:a.type,value:a.defaultValue}))),p.default.createElement("div",{className:"tsd-panel-content"},p.default.createElement(u.MemberSources,{reflection:a}),p.default.createElement(r.Comment,{comment:a.comment}),r.hasComment(a.comment)&&(g||E)&&p.default.createElement("hr",{className:"tsd-divider"}),g&&p.default.createElement("div",{className:"tds-type-parameters"},p.default.createElement("h4",{className:"tsd-type-parameters-title"},"Type parameters"),p.default.createElement(o.TypeParameters,{params:a.typeParameters})),E&&p.default.createElement("div",{className:"tsd-type-declaration"},p.default.createElement("h4",null,"Type declaration"),p.default.createElement(d.Parameter,{param:a.type?.declaration}))))}},43610:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(16471),r=a(27123),m=a(97240),c=(e=>e&&e.__esModule?e:{default:e})(l);t.MemberGetterSetter=function(e){let{inPanel:t,getter:a,setter:l}=e;const u=n.useMinimalLayout();return a||l?c.default.createElement(c.default.Fragment,null,(a||l)&&c.default.createElement("div",{className:t?"tsd-panel-content":""},c.default.createElement("ul",{className:"tsd-signatures"},a&&c.default.createElement("li",{className:"tsd-signature tsd-kind-icon"},c.default.createElement(s.Icon,{reflection:a}),c.default.createElement("span",{className:"tsd-signature-symbol"},"get "),a.name,c.default.createElement(m.MemberSignatureTitle,{hideName:!0,sig:a})),l&&c.default.createElement("li",{className:"tsd-signature tsd-kind-icon"},c.default.createElement(s.Icon,{reflection:l}),c.default.createElement("span",{className:"tsd-signature-symbol"},"set "),l.name,c.default.createElement(m.MemberSignatureTitle,{hideName:!0,sig:l})))),(r.hasSigBody(a,u)||r.hasSigBody(l,u))&&c.default.createElement("div",{className:t?"tsd-panel-content":""},c.default.createElement("ul",{className:"tsd-descriptions"},a&&c.default.createElement("li",{className:"tsd-description"},c.default.createElement(r.MemberSignatureBody,{sig:a})),l&&c.default.createElement("li",{className:"tsd-description"},c.default.createElement(r.MemberSignatureBody,{sig:l}))))):null}},11505:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(25734),r=e=>e&&e.__esModule?e:{default:e},m=r(l),c=r(n);t.MemberReference=function(e){let{reflection:t}=e;const a=s.useReflection(t.target);let l=null;return l=a?t.name===a.name?m.default.createElement(m.default.Fragment,null,"Re-exports"," ",m.default.createElement(c.default,{className:"tsd-signature-type",to:a.permalink},a.name)):m.default.createElement(m.default.Fragment,null,"Renames and re-exports"," ",m.default.createElement(c.default,{className:"tsd-signature-type",to:a.permalink},a.name)):m.default.createElement(m.default.Fragment,null,"Re-exports ",m.default.createElement("span",{className:"tsd-signature-type"},t.name)),m.default.createElement("div",{className:"tsd-panel-content"},l)}},27123:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(23802),r=a(67284),m=a(31502),c=a(55547),u=a(31102),d=a(95280),i=a(20623),o=a(28625),f=(e=>e&&e.__esModule?e:{default:e})(l);function p(e){if(e?.blockTags){const t=e.blockTags.map((e=>e.tag));if(t.includes("@returns")){const a=t.indexOf("@returns");return{summary:e.blockTags[a].content}}}}const g=["@returns","@param"];t.MemberSignatureBody=function(e){let{hideSources:t,sig:a}=e;const l=n.useMinimalLayout(),E=a.typeParameter&&a.typeParameter.length>0,y=!l&&a.parameters&&a.parameters.length>0,b=!l&&a.type;return f.default.createElement(f.default.Fragment,null,!t&&f.default.createElement(u.MemberSources,{reflection:a}),r.isCommentWithModifiers(a.comment)&&f.default.createElement(r.CommentBadges,{comment:a.comment}),f.default.createElement(s.Comment,{comment:a.comment,hideTags:g}),s.hasComment(a.comment)&&(E||y||b)&&f.default.createElement("hr",{className:"tsd-divider"}),E&&f.default.createElement(f.default.Fragment,null,f.default.createElement("h4",{className:"tsd-type-parameters-title"},"Type parameters"),f.default.createElement(o.TypeParameters,{params:a.typeParameter})),y&&f.default.createElement(f.default.Fragment,null,f.default.createElement("h4",{className:"tsd-parameters-title"},"Parameters"),f.default.createElement("ul",{className:"tsd-parameters"},a.parameters?.map((e=>f.default.createElement("li",{key:e.id},f.default.createElement("h5",null,f.default.createElement(c.Flags,{flags:e.flags}),e.flags?.isRest&&f.default.createElement("span",{className:"tsd-signature-symbol"},"..."),`${e.name}: `,f.default.createElement(i.Type,{type:e.type}),f.default.createElement(m.DefaultValue,{comment:e.comment,type:e.type,value:e.defaultValue})),f.default.createElement(s.Comment,{comment:e.comment})))))),b&&f.default.createElement(f.default.Fragment,null,f.default.createElement("h4",{className:"tsd-returns-title"},"Returns ",f.default.createElement(i.Type,{type:a.type})),f.default.createElement(s.Comment,{comment:p(a.comment)}),f.default.createElement(d.Parameter,{param:a.type?.declaration})))},t.hasSigBody=function(e,t,a){return void 0===a&&(a=!1),!!e&&(!a&&u.hasSources(e)||s.hasComment(e.comment)||e.typeParameter&&e.typeParameter.length>0||!t&&e.parameters&&e.parameters.length>0||!t&&e.type)}},97240:(e,t,a)=>{const l=a(27378),n=a(20623),s=a(19830),r=(e=>e&&e.__esModule?e:{default:e})(l);t.MemberSignatureTitle=function(e){let{useArrow:t,hideName:a,sig:l}=e;return r.default.createElement(r.default.Fragment,null,a||"__type"===l.name?"Constructor signature"===l.kindString?r.default.createElement(r.default.Fragment,null,l.flags?.isAbstract&&r.default.createElement("span",{className:"tsd-signature-symbol"},"abstract "),r.default.createElement("span",{className:"tsd-signature-symbol"},"new ")):null:l.name,r.default.createElement(s.TypeParametersGeneric,{params:l.typeParameter}),r.default.createElement("span",{className:"tsd-signature-symbol"},"("),l.parameters?.map(((e,t)=>r.default.createElement(r.default.Fragment,{key:e.id},t>0&&r.default.createElement("span",{className:"tsd-signature-symbol"},", "),r.default.createElement("span",null,e.flags?.isRest&&r.default.createElement("span",{className:"tsd-signature-symbol"},"..."),e.name,r.default.createElement("span",{className:"tsd-signature-symbol"},(e.flags?.isOptional||"defaultValue"in e)&&"?",": "),r.default.createElement(n.Type,{type:e.type}))))),r.default.createElement("span",{className:"tsd-signature-symbol"},")"),l.type&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"tsd-signature-symbol"},t?" => ":": "),r.default.createElement(n.Type,{type:l.type})))}},46449:(e,t,a)=>{function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l,n,s,r,m=[],c=!0,u=!1;try{if(s=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(l=s.call(a)).done)&&(m.push(l.value),m.length!==t);c=!0);}catch(d){u=!0,n=d}finally{try{if(!c&&null!=a.return&&(r=a.return(),Object(r)!==r))return}finally{if(u)throw n}}return m}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,l=new Array(t);a<t;a++)l[a]=e[a];return l}const s=a(27378),r=a(16605),m=a(16471),c=a(27123),u=a(97240),d=(e=>e&&e.__esModule?e:{default:e})(s);t.MemberSignatures=function(e){let{inPanel:t,sigs:a}=e;const n=l(s.useState(0),2),i=n[0],o=n[1],f=r.useMinimalLayout(),p=a.length>1,g=a[i];return d.default.createElement(d.default.Fragment,null,d.default.createElement("div",{className:t?"tsd-panel-content":""},d.default.createElement("ul",{className:"tsd-signatures"},a.map(((e,t)=>d.default.createElement("li",{key:e.id,className:`tsd-signature tsd-kind-icon ${t===i?"":"tsd-signature-inactive"} ${p?"tsd-pressable":""}`,onClick:p?()=>{o(t)}:void 0},d.default.createElement(m.Icon,{reflection:e}),d.default.createElement(u.MemberSignatureTitle,{sig:e})))))),c.hasSigBody(g,f)&&d.default.createElement(d.default.Fragment,null,!t&&d.default.createElement("hr",{className:"tsd-divider"}),d.default.createElement("div",{className:t?"tsd-panel-content":""},d.default.createElement("ul",{className:"tsd-descriptions"},d.default.createElement("li",{key:g.id,className:"tsd-description"},d.default.createElement(c.MemberSignatureBody,{sig:g}))))))}},31102:(e,t,a)=>{const l=a(27378),n=a(64029),s=(e=>e&&e.__esModule?e:{default:e})(l);function r(e){return Boolean(e.implementationOf||e.inheritedFrom||e.overwrites)}t.MemberSources=function(e){let{reflection:t}=e;return r(t)?s.default.createElement("aside",{className:"tsd-sources"},t.implementationOf&&s.default.createElement("p",null,"Implementation of ",s.default.createElement(n.TypeAndParent,{type:t.implementationOf})),t.inheritedFrom&&s.default.createElement("p",null,"Inherited from ",s.default.createElement(n.TypeAndParent,{type:t.inheritedFrom})),t.overwrites&&s.default.createElement("p",null,"Overrides ",s.default.createElement(n.TypeAndParent,{type:t.overwrites}))):null},t.hasSources=r},9285:(e,t,a)=>{const l=a(27378),n=a(51165),s=a(78460),r=a(21114),m=a(53462),c=a(83148),u=(e=>e&&e.__esModule?e:{default:e})(l);t.Members=function(e){let{reflection:t}=e;const a=n.useReflectionMap();return t.categories&&t.categories.length>0?u.default.createElement(u.default.Fragment,null,t.categories.map((e=>s.allCategoryChildrenHaveOwnDocument(e,a)?null:u.default.createElement("section",{key:e.title,className:"tsd-panel-group tsd-member-group"},u.default.createElement("h2",null,"CATEGORY"===e.title?"Other":e.title," ",u.default.createElement(r.AnchorLink,{id:e.title})),e.children?.map((e=>s.hasOwnDocument(e,a)?null:u.default.createElement(m.Member,{key:e,id:e}))))))):u.default.createElement(u.default.Fragment,null,t.groups?.map((e=>s.allGroupChildrenHaveOwnDocument(e,a)?null:u.default.createElement(c.MembersGroup,{key:e.title,group:e}))))}},83148:(e,t,a)=>{const l=a(27378),n=a(51165),s=a(78460),r=a(21114),m=a(53462),c=(e=>e&&e.__esModule?e:{default:e})(l);t.MembersGroup=function(e){let{group:t}=e;const a=n.useReflectionMap();return t.categories&&t.categories.length>0?c.default.createElement(c.default.Fragment,null,t.categories.map((e=>c.default.createElement("section",{key:e.title,className:"tsd-panel-group tsd-member-group"},c.default.createElement("h2",null,"CATEGORY"===e.title?"Other":e.title," ",c.default.createElement(r.AnchorLink,{id:e.title})),e.children?.map((e=>s.hasOwnDocument(e,a)?null:c.default.createElement(m.Member,{key:e,id:e}))))))):c.default.createElement("section",{className:"tsd-panel-group tsd-member-group"},c.default.createElement("h2",null,t.title," ",c.default.createElement(r.AnchorLink,{id:t.title})),t.children?.map((e=>s.hasOwnDocument(e,a)?null:c.default.createElement(m.Member,{key:e,id:e}))))}},95280:(e,t,a)=>{const l=a(27378),n=a(16605),s=a(23802),r=a(55547),m=a(16471),c=a(27123),u=a(46449),d=a(97240),i=a(20623),o=(e=>e&&e.__esModule?e:{default:e})(l);function f(e){let{param:t}=e;if(!t)return null;if(t.signatures&&t.signatures.length>0)return o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,t.flags?.isRest&&o.default.createElement("span",{className:"tsd-signature-symbol"},"..."),t.name,o.default.createElement("span",{className:"tsd-signature-symbol"},t.flags?.isOptional&&"?",": "),"function"),o.default.createElement(u.MemberSignatures,{sigs:t.signatures}));if(t.type)return o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,o.default.createElement(r.Flags,{flags:t.flags}),t.flags?.isRest&&o.default.createElement("span",{className:"tsd-signature-symbol"},"..."),t.name,o.default.createElement("span",{className:"tsd-signature-symbol"},t.flags?.isOptional&&"?",": "),o.default.createElement(i.Type,{type:t.type})),o.default.createElement(s.Comment,{comment:t.comment}),t.children?.map((e=>o.default.createElement(p,{key:e.id,param:e}))),o.default.createElement(p,{param:t.type.declaration}));const a=t.getSignature,l=t.setSignature;return o.default.createElement(o.default.Fragment,null,a&&o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,o.default.createElement(r.Flags,{flags:a.flags}),o.default.createElement("span",{className:"tsd-signature-symbol"},"get "),a.name,o.default.createElement("span",{className:"tsd-signature-symbol"},"(): "),o.default.createElement(i.Type,{type:a.type})),o.default.createElement(s.Comment,{comment:a.comment})),l&&o.default.createElement("li",{className:"tsd-parameter"},o.default.createElement("h5",null,o.default.createElement(r.Flags,{flags:l.flags}),o.default.createElement("span",{className:"tsd-signature-symbol"},"set "),l.name,o.default.createElement("span",{className:"tsd-signature-symbol"},"("),l.parameters?.map(((e,t)=>o.default.createElement("span",{key:e.id},t>0&&", ",e.name,o.default.createElement("span",{className:"tsd-signature-symbol"},": "),e.type?o.default.createElement(i.Type,{type:e.type}):"any"))),o.default.createElement("span",{className:"tsd-signature-symbol"},"): "),o.default.createElement(i.Type,{type:l.type})),o.default.createElement(s.Comment,{comment:l.comment})))}function p(e){let{param:t}=e;const a=n.useMinimalLayout();if(!t||a)return null;const l=t.signatures?.some((e=>c.hasSigBody(e,a,!0)));return o.default.createElement("ul",{className:"tsd-parameters"},t.signatures&&t.signatures.length>0&&o.default.createElement("li",{className:"tsd-parameter-signature"},o.default.createElement("ul",{className:"tsd-signatures"},t.signatures.map((e=>o.default.createElement("li",{key:e.id,className:"tsd-signature tsd-kind-icon"},o.default.createElement(m.Icon,{reflection:e}),o.default.createElement(d.MemberSignatureTitle,{hideName:!0,sig:e}))))),l&&o.default.createElement("ul",{className:"tsd-descriptions"},t.signatures.map((e=>o.default.createElement("li",{key:e.id,className:"tsd-description"},o.default.createElement(c.MemberSignatureBody,{hideSources:!0,sig:e})))))),t.indexSignature&&o.default.createElement("li",{className:"tsd-parameter-index-signature"},o.default.createElement("h5",null,o.default.createElement("span",{className:"tsd-signature-symbol"},"["),t.indexSignature.parameters?.map((e=>o.default.createElement("span",{key:e.id},e.flags?.isRest&&o.default.createElement("span",{className:"tsd-signature-symbol"},"..."),e.name," ",o.default.createElement(i.Type,{type:e.type})))),o.default.createElement("span",{className:"tsd-signature-symbol"},"]: "),o.default.createElement(i.Type,{type:t.indexSignature.type})),o.default.createElement(s.Comment,{comment:t.indexSignature.comment}),o.default.createElement(p,{param:t.indexSignature.declaration})),t.children?.map((e=>o.default.createElement(f,{key:e.id,param:e}))))}t.Parameter=p},47367:(e,t,a)=>{const l=a(27378),n=a(12121),s=a(23802),r=a(67284),m=a(97885),c=a(16471),u=a(75845),d=a(9285),i=a(46449),o=a(95280),f=a(20623),p=a(28625),g=(e=>e&&e.__esModule?e:{default:e})(l);t.Reflection=function(e){let{reflection:t}=e;const a=l.useMemo((()=>n.createHierarchy(t)),[t]);return g.default.createElement(g.default.Fragment,null,r.isCommentWithModifiers(t.comment)&&g.default.createElement(r.CommentBadges,{comment:t.comment}),s.hasComment(t.comment)&&g.default.createElement(s.Comment,{root:!0,comment:t.comment}),"typeParameter"in t&&t.typeParameter&&t.typeParameter.length>0&&128!==t.kind&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Type parameters"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement(p.TypeParameters,{params:t.typeParameter}))),("extendedBy"in t&&t.extendedBy&&t.extendedBy.length>0||"extendedTypes"in t&&t.extendedTypes&&t.extendedTypes.length>0)&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Hierarchy"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement(m.Hierarchy,{tree:a}))),"implementedTypes"in t&&t.implementedTypes&&t.implementedTypes.length>0&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Implements"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement("ul",{className:"tsd-hierarchy"},t.implementedTypes.map(((e,t)=>g.default.createElement("li",{key:e.type+String(t)},g.default.createElement(f.Type,{type:e}))))))),"implementedBy"in t&&t.implementedBy&&t.implementedBy.length>0&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header"},"Implemented by"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement("ul",{className:"tsd-hierarchy"},t.implementedBy.map(((e,t)=>g.default.createElement("li",{key:e.name+String(t)},g.default.createElement(f.Type,{type:e}))))))),"signatures"in t&&t.signatures&&t.signatures.length>0&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header tsd-before-signature"},"Callable"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement(i.MemberSignatures,{sigs:t.signatures}))),"indexSignature"in t&&t.indexSignature&&g.default.createElement("section",{className:"tsd-panel"},g.default.createElement("h3",{className:"tsd-panel-header tsd-before-signature"},"Indexable"),g.default.createElement("div",{className:"tsd-panel-content"},g.default.createElement("div",{className:"tsd-signature tsd-kind-icon"},g.default.createElement(c.Icon,{reflection:t.indexSignature}),g.default.createElement("span",{className:"tsd-signature-symbol"},"["),t.indexSignature.parameters?.map((e=>g.default.createElement("span",{key:e.id},e.name,": ",g.default.createElement(f.Type,{type:e.type})))),g.default.createElement("span",{className:"tsd-signature-symbol"},"]: "),g.default.createElement(f.Type,{type:t.indexSignature.type})),g.default.createElement(s.Comment,{comment:t.indexSignature.comment}),g.default.createElement(o.Parameter,{param:t.indexSignature.type?.declaration}))),g.default.createElement(u.Index,{reflection:t}),g.default.createElement(d.Members,{reflection:t}))}},2386:(e,t,a)=>{const l=a(27378),n=a(50353),s=a(78477),r=e=>e&&e.__esModule?e:{default:e},m=r(l),c=r(n);t.SourceLink=function(e){let{sources:t=[]}=e;const a=c.default().siteConfig,l=s.useGitRefName();return 0===t.length?null:m.default.createElement(m.default.Fragment,null,t.map((e=>{return m.default.createElement("a",{key:e.fileName,className:"tsd-anchor",href:e.url||`https://${a.githubHost}${a.githubPort?`:${a.githubPort}`:""}/${a.organizationName}/${a.projectName}/blob/${l}/${t=e.fileName,t.replace(/\/(dts|dist|lib|build|es|esm|cjs|mjs)\//,"/src/")}#L${e.line}`,rel:"noreferrer",target:"_blank"},m.default.createElement("i",{className:"codicon codicon-file-code"}));var t})))}},20623:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(51165),r=a(97240),m=e=>e&&e.__esModule?e:{default:e},c=m(l),u=m(n);function d(e,t){return t?c.default.createElement(c.default.Fragment,null,t&&c.default.createElement("span",{className:"tsd-signature-symbol"},"("),e,t&&c.default.createElement("span",{className:"tsd-signature-symbol"},")")):e}t.Type=function e(t){let{needsParens:a=!1,type:l}=t;const n=s.useReflectionMap();if(!l)return null;switch(String(l.type)){case"array":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{needsParens:!0,type:t.elementType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"[]"))}case"conditional":{const t=l;return d(c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{needsParens:!0,type:t.checkType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," extends "),c.default.createElement(e,{type:t.extendsType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," ? "),c.default.createElement(e,{type:t.trueType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," : "),c.default.createElement(e,{type:t.falseType})),a)}case"indexedAccess":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{type:t.objectType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"["),c.default.createElement(e,{type:t.indexType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"]"))}case"inferred":{const e=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"infer ")," ",e.name)}case"intersection":{const t=l;return d(c.default.createElement(c.default.Fragment,null,t.types.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"}," & "),c.default.createElement(e,{needsParens:!0,type:t}))))),a)}case"intrinsic":{const e=l;return c.default.createElement("span",{className:"tsd-signature-type"},e.name)}case"literal":{const e=l;return c.default.createElement("span",{className:"tsd-signature-type"},String(e.value))}case"mapped":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"{ "),"+"===t.readonlyModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"readonly "),"-"===t.readonlyModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"-readonly "),c.default.createElement("span",{className:"tsd-signature-symbol"},"[ "),c.default.createElement("span",{className:"tsd-signature-type"},t.parameter),c.default.createElement("span",{className:"tsd-signature-symbol"}," in "),c.default.createElement(e,{type:t.parameterType}),t.nameType&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"}," as "),c.default.createElement(e,{type:t.nameType})),c.default.createElement("span",{className:"tsd-signature-symbol"}," ]"),"+"===t.optionalModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"?: "),"-"===t.optionalModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},"-?: "),!t.optionalModifier&&c.default.createElement("span",{className:"tsd-signature-symbol"},": "),c.default.createElement(e,{type:t.templateType}),c.default.createElement("span",{className:"tsd-signature-symbol"}," }"))}case"optional":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement(e,{type:t.elementType}),c.default.createElement("span",{className:"tsd-signature-symbol"},"?"))}case"predicate":{const t=l;return c.default.createElement(c.default.Fragment,null,t.asserts&&c.default.createElement("span",{className:"tsd-signature-symbol"},"asserts "),c.default.createElement("span",{className:"tsd-signature-type"},t.name),t.targetType&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"}," is "),c.default.createElement(e,{type:t.targetType})))}case"query":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"typeof "),c.default.createElement(e,{type:t.queryType}))}case"reference":{const t=l,a=t.id?n[t.id]:null,s=a?.id&&!a.sources?"tsd-signature-type-generic":"";return c.default.createElement(c.default.Fragment,null,a?.permalink?c.default.createElement(u.default,{className:`tsd-signature-type ${s}`,"data-tsd-kind":a.kindString,to:a.permalink},t.name):c.default.createElement("span",{className:`tsd-signature-type ${s}`},t.name),t.typeArguments&&t.typeArguments.length>0&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"<"),t.typeArguments.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},", "),c.default.createElement(e,{type:t})))),c.default.createElement("span",{className:"tsd-signature-symbol"},">")))}case"reflection":{const t=l.declaration;return t?.children&&t.children.length>0?c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"{ "),t.children.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.id??a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},"; "),c.default.createElement("span",null,t.name,c.default.createElement("span",{className:"tsd-signature-symbol"},t.flags?.isOptional&&"?",": "),t.type?c.default.createElement(e,{type:t.type}):"any")))),c.default.createElement("span",{className:"tsd-signature-symbol"}," }")):t?.signatures&&1===t.signatures.length?c.default.createElement(r.MemberSignatureTitle,{hideName:!0,useArrow:!0,sig:t.signatures[0]}):t?.signatures&&t.signatures.length>0?d(c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"{ "),t.signatures.map(((e,t)=>c.default.createElement(c.default.Fragment,{key:e.id??t},t>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},"; "),c.default.createElement(r.MemberSignatureTitle,{sig:e})))),c.default.createElement("span",{className:"tsd-signature-symbol"}," }")),a):c.default.createElement(c.default.Fragment,null,"{}")}case"rest":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"..."),c.default.createElement(e,{type:t.elementType}))}case"tuple":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"["),t.elements?.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"},", "),c.default.createElement(e,{type:t})))),c.default.createElement("span",{className:"tsd-signature-symbol"},"]"))}case"typeOperator":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},t.operator," "),c.default.createElement(e,{type:t.target}))}case"union":{const t=l;return d(c.default.createElement(c.default.Fragment,null,t.types.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:t.type+a},a>0&&c.default.createElement("span",{className:"tsd-signature-symbol"}," | "),c.default.createElement(e,{needsParens:!0,type:t}))))),a)}case"unknown":{const e=l;return c.default.createElement("span",{className:"tsd-signature-type"},e.name)}case"named-tuple-member":{const t=l;return c.default.createElement(c.default.Fragment,null,t.name,c.default.createElement("span",{className:"tsd-signature-symbol"},t.isOptional?"?: ":": "),c.default.createElement(e,{type:t.element}))}case"template-literal":{const t=l;return c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"tsd-signature-symbol"},"`"),t.head&&c.default.createElement("span",{className:"tsd-signature-type"},t.head),t.tail.map(((t,a)=>c.default.createElement(c.default.Fragment,{key:a},c.default.createElement("span",{className:"tsd-signature-symbol"},"${"),"string"!=typeof t[0]&&c.default.createElement(e,{type:t[0]}),c.default.createElement("span",{className:"tsd-signature-symbol"},"}"),"string"==typeof t[1]&&c.default.createElement("span",{className:"tsd-signature-type"},t[1])))),c.default.createElement("span",{className:"tsd-signature-symbol"},"`"))}default:return c.default.createElement("span",{className:"tsd-signature-type"},"void")}}},64029:(e,t,a)=>{const l=a(27378),n=a(20623),s=(e=>e&&e.__esModule?e:{default:e})(l);t.TypeAndParent=function e(t){let{type:a}=t;return a?"elementType"in a&&a.elementType?s.default.createElement(s.default.Fragment,null,s.default.createElement(e,{type:a.elementType}),"[]"):s.default.createElement(n.Type,{type:a}):s.default.createElement(s.default.Fragment,null,"void")}},28625:(e,t,a)=>{const l=a(27378),n=a(23802),s=a(31502),r=a(20623),m=(e=>e&&e.__esModule?e:{default:e})(l);t.TypeParameters=function(e){let{params:t}=e;return t&&0!==t.length?m.default.createElement("ul",{className:"tsd-type-parameters"},t.map((e=>m.default.createElement("li",{key:e.id},m.default.createElement("strong",null,e.name),e.type&&m.default.createElement(m.default.Fragment,null,m.default.createElement("span",{className:"tsd-signature-symbol"},":")," ",m.default.createElement(r.Type,{type:e.type})),m.default.createElement(s.DefaultValue,{comment:e.comment,type:e.type,value:e.default}),m.default.createElement(n.Comment,{comment:e.comment}))))):null}},19830:(e,t,a)=>{const l=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.TypeParametersGeneric=function(e){let{params:t}=e;return t&&0!==t.length?l.default.createElement("span",{className:"tsd-generics"},l.default.createElement("span",{className:"tsd-signature-symbol"},"<"),t.map(((e,t)=>l.default.createElement(l.default.Fragment,{key:e.id},t>0&&l.default.createElement("span",{className:"tsd-signature-symbol"},", "),e.name))),l.default.createElement("span",{className:"tsd-signature-symbol"},">")):null}},66715:(e,t,a)=>{const l=a(27378),n=a(81884),s=a(62935),r=a(95709),m=a(12700),c=e=>e&&e.__esModule?e:{default:e},u=c(l),d=c(n);t.VersionBanner=function(){const e=m.useDocsVersion(),t=e.banner,a=e.docs,n=e.pluginId,c=e.version,i=s.useDocVersionSuggestions(n).latestVersionSuggestion,o=r.useDocsPreferredVersion(n).savePreferredVersionName,f=l.useCallback((()=>{o(i.name)}),[i.name,o]);if(!t||!i)return null;const p=a[i.label];return u.default.createElement("div",{className:`${r.ThemeClassNames.docs.docVersionBanner} alert alert--warning margin-bottom--md`,role:"alert"},u.default.createElement("div",null,"unreleased"===t&&u.default.createElement(u.default.Fragment,null,"This is documentation for an unreleased version."),"unmaintained"===t&&u.default.createElement(u.default.Fragment,null,"This is documentation for version ",u.default.createElement("b",null,c),".")," ","For the latest API, see version"," ",u.default.createElement("b",null,u.default.createElement(d.default,{to:p.id,onClick:f},p.title)),"."))}},17996:(e,t,a)=>{const l=a(27378),n=a(99746);t.useBreadcrumbs=function(){return l.useContext(n.ApiDataContext).options.breadcrumbs}},78477:(e,t,a)=>{const l=a(27378),n=a(99746);t.useGitRefName=function(){return l.useContext(n.ApiDataContext).options.gitRefName}},16605:(e,t,a)=>{const l=a(27378),n=a(99746);t.useMinimalLayout=function(){return l.useContext(n.ApiDataContext).options.minimal}},25734:(e,t,a)=>{const l=a(27378),n=a(99746);t.useReflection=function(e){const t=l.useContext(n.ApiDataContext).reflections;if(void 0===e)return null;if(t[e])return t[e];throw new Error(`Unable to find declaration with ID ${e}`)}},12121:(e,t)=>{t.createHierarchy=function(e){let t,a;function l(e){const l={types:e};a?(a.next=l,a=l):(t=l,a=l)}return e.extendedTypes&&l(e.extendedTypes),l([{id:e.id,name:e.name,type:"reference"}]),a.isTarget=!0,e.extendedBy&&l(e.extendedBy),t}},25822:(e,t)=>{const a={1:"project",2:"package",4:"symbol-namespace",8:"symbol-enum",16:"symbol-enum-member",32:"symbol-variable",64:"symbol-function",128:"symbol-class",256:"symbol-interface",512:"symbol-constructor",1024:"symbol-property",2048:"symbol-method",4096:"symbol-method",8192:"bracket-dot",16384:"symbol-method",32768:"symbol-property",65536:"symbol-key",131072:"symbol-type-parameter",262144:"symbol-field",524288:"symbol-field",1048576:"symbol-field",2097152:"bracket",4194304:"symbol-parameter",8388608:"references"};function l(e,t){let l=a[e];return 1024===e&&t.match(/^on[A-Z]/)&&(l="symbol-event"),l}function n(e){switch(e){case 64:case 512:case 2048:case 4096:case 16384:case 262144:return"var(--ifm-color-info)";case 16:case 32:case 1024:case 524288:case 1048576:return"var(--ifm-color-success)";case 4:case 128:return"var(--ifm-color-warning)";case 8:case 256:case 4194304:return"var(--ifm-color-danger)";default:return"inherit"}}t.getKindIcon=l,t.getKindIconColor=n,t.getKindIconHtml=function(e,t){const a=l(e,t);return a?`<i class="codicon codicon-${a}" style="color:${n(e)};"></i>`:""}},78460:(e,t)=>{function a(e,t){const a=t[e];return Boolean(a?.permalink&&!a.permalink.includes("#"))}t.allCategoryChildrenHaveOwnDocument=function(e,t){let l=!0;return e.children?.forEach((e=>{l&&=a(e,t)})),l},t.allGroupChildrenHaveOwnDocument=function(e,t){return Boolean(e.children?.every((e=>a(e,t))))},t.hasOwnDocument=a}}]); \ No newline at end of file diff --git a/assets/js/32632728.96529d1f.js b/assets/js/32632728.96529d1f.js deleted file mode 100644 index e925fa9b4f2..00000000000 --- a/assets/js/32632728.96529d1f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4672],{18507:s=>{s.exports=JSON.parse('{"label":"globals","permalink":"/blog/tags/globals","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/32632728.c5f1b52c.js b/assets/js/32632728.c5f1b52c.js new file mode 100644 index 00000000000..949b0425709 --- /dev/null +++ b/assets/js/32632728.c5f1b52c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94672],{18507:s=>{s.exports=JSON.parse('{"label":"globals","permalink":"/blog/tags/globals","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/3353503a.015e96f4.js b/assets/js/3353503a.015e96f4.js new file mode 100644 index 00000000000..ecb56e44b40 --- /dev/null +++ b/assets/js/3353503a.015e96f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30027],{63572:s=>{s.exports=JSON.parse('{"label":"wasm","permalink":"/blog/tags/wasm","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file diff --git a/assets/js/3353503a.e0e8667e.js b/assets/js/3353503a.e0e8667e.js deleted file mode 100644 index 37780c2db80..00000000000 --- a/assets/js/3353503a.e0e8667e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27],{63572:s=>{s.exports=JSON.parse('{"label":"wasm","permalink":"/blog/tags/wasm","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file diff --git a/assets/js/33d935e4.b7a2aef6.js b/assets/js/33d935e4.b7a2aef6.js new file mode 100644 index 00000000000..3ab6602e2cc --- /dev/null +++ b/assets/js/33d935e4.b7a2aef6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23523],{81471:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/roadmap","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/33d935e4.f3891fb3.js b/assets/js/33d935e4.f3891fb3.js deleted file mode 100644 index 737f783b735..00000000000 --- a/assets/js/33d935e4.f3891fb3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3523],{81471:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/roadmap","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/34670.931c0ca5.js b/assets/js/34670.931c0ca5.js new file mode 100644 index 00000000000..6f9c771c6a6 --- /dev/null +++ b/assets/js/34670.931c0ca5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34670],{34670:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/350ea002.3c193ffd.js b/assets/js/350ea002.3c193ffd.js new file mode 100644 index 00000000000..4ef3b77e311 --- /dev/null +++ b/assets/js/350ea002.3c193ffd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77889],{40387:e=>{e.exports=JSON.parse('{"label":"codeowners","permalink":"/docs/tags/codeowners","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","permalink":"/docs/guides/codeowners"}]}')}}]); \ No newline at end of file diff --git a/assets/js/350ea002.40642b20.js b/assets/js/350ea002.40642b20.js deleted file mode 100644 index 16170ea44e5..00000000000 --- a/assets/js/350ea002.40642b20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7889],{40387:e=>{e.exports=JSON.parse('{"label":"codeowners","permalink":"/docs/tags/codeowners","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","permalink":"/docs/guides/codeowners"}]}')}}]); \ No newline at end of file diff --git a/assets/js/351d319b.03a4a3ab.js b/assets/js/351d319b.03a4a3ab.js deleted file mode 100644 index 168d9f0c8e4..00000000000 --- a/assets/js/351d319b.03a4a3ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5084],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(n),d=a,g=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(g,l(l({ref:t},s),{},{components:n})):r.createElement(g,l({ref:t},s))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:l}=e;return r.createElement(a.Z,{text:`v${l}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:c}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?l[c]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},36522:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>s});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const l={title:"action-graph"},i=void 0,c={unversionedId:"commands/action-graph",id:"commands/action-graph",title:"action-graph",description:"The moon action-graph [target] (or moon ag) command will generate and serve a visual graph of",source:"@site/docs/commands/action-graph.mdx",sourceDirName:"commands",slug:"/commands/action-graph",permalink:"/docs/commands/action-graph",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/action-graph.mdx",tags:[],version:"current",frontMatter:{title:"action-graph"},sidebar:"docs",previous:{title:"Overview",permalink:"/docs/commands/overview"},next:{title:"bin",permalink:"/docs/commands/bin"}},p={},s=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],m={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{version:"1.15.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon action-graph [target]")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"moon ag"),") command will generate and serve a visual graph of\nall actions and tasks within the workspace, known as the\n",(0,a.kt)("a",{parentName:"p",href:"../how-it-works/action-graph"},"action graph"),". In other tools, this is sometimes referred to as a\ndependency graph or task graph."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# Run the visualizer locally\n$ moon action-graph\n\n# Export to DOT format\n$ moon action-graph --dot > graph.dot\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"A target can be passed to focus the graph, including dependencies ",(0,a.kt)("em",{parentName:"p"},"and")," dependents. For example,\n",(0,a.kt)("inlineCode",{parentName:"p"},"moon action-graph app:build"),".")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[target]")," - Optional target to focus.")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--dot")," - Output the graph in DOT format.")),(0,a.kt)("h2",{id:"example-output"},"Example output"),(0,a.kt)("p",null,"The following output is an example of the graph in DOT format."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-dot"},'digraph {\n 0 [ label="SetupNodeTool" style=filled, shape=oval, fillcolor=black, fontcolor=white]\n 1 [ label="InstallNodeDeps" style=filled, shape=oval, fillcolor=gray, fontcolor=black]\n 2 [ label="SyncNodeProject(node)" style=filled, shape=oval, fillcolor=gray, fontcolor=black]\n 3 [ label="RunTask(node:standard)" style=filled, shape=oval, fillcolor=gray, fontcolor=black]\n 1 -> 0 [ arrowhead=box, arrowtail=box]\n 2 -> 0 [ arrowhead=box, arrowtail=box]\n 3 -> 1 [ arrowhead=box, arrowtail=box]\n 3 -> 2 [ arrowhead=box, arrowtail=box]\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/351d319b.62bae418.js b/assets/js/351d319b.62bae418.js new file mode 100644 index 00000000000..3baccf379ed --- /dev/null +++ b/assets/js/351d319b.62bae418.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95084],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(n),d=a,g=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(g,l(l({ref:t},s),{},{components:n})):r.createElement(g,l({ref:t},s))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:l}=e;return r.createElement(a.Z,{text:`v${l}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:c}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?l[c]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},36522:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>s});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const l={title:"action-graph"},i=void 0,c={unversionedId:"commands/action-graph",id:"commands/action-graph",title:"action-graph",description:"The moon action-graph [target] (or moon ag) command will generate and serve a visual graph of",source:"@site/docs/commands/action-graph.mdx",sourceDirName:"commands",slug:"/commands/action-graph",permalink:"/docs/commands/action-graph",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/action-graph.mdx",tags:[],version:"current",frontMatter:{title:"action-graph"},sidebar:"docs",previous:{title:"Overview",permalink:"/docs/commands/overview"},next:{title:"bin",permalink:"/docs/commands/bin"}},p={},s=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],m={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{version:"1.15.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon action-graph [target]")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"moon ag"),") command will generate and serve a visual graph of\nall actions and tasks within the workspace, known as the\n",(0,a.kt)("a",{parentName:"p",href:"../how-it-works/action-graph"},"action graph"),". In other tools, this is sometimes referred to as a\ndependency graph or task graph."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# Run the visualizer locally\n$ moon action-graph\n\n# Export to DOT format\n$ moon action-graph --dot > graph.dot\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"A target can be passed to focus the graph, including dependencies ",(0,a.kt)("em",{parentName:"p"},"and")," dependents. For example,\n",(0,a.kt)("inlineCode",{parentName:"p"},"moon action-graph app:build"),".")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[target]")," - Optional target to focus.")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--dot")," - Output the graph in DOT format.")),(0,a.kt)("h2",{id:"example-output"},"Example output"),(0,a.kt)("p",null,"The following output is an example of the graph in DOT format."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-dot"},'digraph {\n 0 [ label="SetupNodeTool" style=filled, shape=oval, fillcolor=black, fontcolor=white]\n 1 [ label="InstallNodeDeps" style=filled, shape=oval, fillcolor=gray, fontcolor=black]\n 2 [ label="SyncNodeProject(node)" style=filled, shape=oval, fillcolor=gray, fontcolor=black]\n 3 [ label="RunTask(node:standard)" style=filled, shape=oval, fillcolor=gray, fontcolor=black]\n 1 -> 0 [ arrowhead=box, arrowtail=box]\n 2 -> 0 [ arrowhead=box, arrowtail=box]\n 3 -> 1 [ arrowhead=box, arrowtail=box]\n 3 -> 2 [ arrowhead=box, arrowtail=box]\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/357f2143.7fcbc4a1.js b/assets/js/357f2143.7fcbc4a1.js new file mode 100644 index 00000000000..b2835700fbf --- /dev/null +++ b/assets/js/357f2143.7fcbc4a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95129],{35318:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>d});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function c(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=r.createContext({}),l=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=l(e.components);return r.createElement(i.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(t),d=o,f=u["".concat(i,".").concat(d)]||u[d]||m[d]||a;return t?r.createElement(f,s(s({ref:n},p),{},{components:t})):r.createElement(f,s({ref:n},p))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,s=new Array(a);s[0]=u;var c={};for(var i in n)hasOwnProperty.call(n,i)&&(c[i]=n[i]);c.originalType=e,c.mdxType="string"==typeof e?e:o,s[1]=c;for(var l=2;l<a;l++)s[l]=t[l];return r.createElement.apply(null,s)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},79022:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(27378),o=t(9619);function a(e){let{header:n,inline:t,updated:a,version:s}=e;return r.createElement(o.Z,{text:`v${s}`,variant:a?"success":"info",className:n?"absolute right-0 top-1.5":t?"inline-block":"ml-2"})}},9619:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(27378),o=t(40624),a=t(31792);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function c(e){let{className:n,icon:t,text:c,variant:i}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?s[i]:"bg-gray-100 text-gray-800",n)},t&&r.createElement(a.Z,{icon:t,className:"mr-1"}),c)}},50271:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var r=t(25773),o=(t(27378),t(35318)),a=t(79022);const s={title:"sync hooks",sidebar_label:"hooks"},c=void 0,i={unversionedId:"commands/sync/hooks",id:"commands/sync/hooks",title:"sync hooks",description:"The moon sync hooks command will manually sync hooks for the configured",source:"@site/docs/commands/sync/hooks.mdx",sourceDirName:"commands/sync",slug:"/commands/sync/hooks",permalink:"/docs/commands/sync/hooks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/sync/hooks.mdx",tags:[],version:"current",frontMatter:{title:"sync hooks",sidebar_label:"hooks"},sidebar:"docs",previous:{title:"codeowners",permalink:"/docs/commands/sync/codeowners"},next:{title:"projects",permalink:"/docs/commands/sync/projects"}},l={},p=[{value:"Options",id:"options",level:3}],m={toc:p};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"1.9.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon sync hooks")," command will manually sync hooks for the configured\n",(0,o.kt)("a",{parentName:"p",href:"../../config/workspace#vcs"},"VCS"),", by generating and referencing hook scripts from the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/workspace#hooks"},(0,o.kt)("inlineCode",{parentName:"a"},"vcs.hooks"))," setting. Refer to the official\n",(0,o.kt)("a",{parentName:"p",href:"../../guides/vcs-hooks"},"VCS hooks")," guide for more information."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--clean")," - Clean and remove previously generated hooks."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--force")," - Bypass cache and force create hooks.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/357f2143.f8c6b502.js b/assets/js/357f2143.f8c6b502.js deleted file mode 100644 index 431cf2aa949..00000000000 --- a/assets/js/357f2143.f8c6b502.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5129],{35318:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>d});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function c(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=r.createContext({}),l=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=l(e.components);return r.createElement(i.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(t),d=o,f=u["".concat(i,".").concat(d)]||u[d]||m[d]||a;return t?r.createElement(f,s(s({ref:n},p),{},{components:t})):r.createElement(f,s({ref:n},p))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,s=new Array(a);s[0]=u;var c={};for(var i in n)hasOwnProperty.call(n,i)&&(c[i]=n[i]);c.originalType=e,c.mdxType="string"==typeof e?e:o,s[1]=c;for(var l=2;l<a;l++)s[l]=t[l];return r.createElement.apply(null,s)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},79022:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(27378),o=t(9619);function a(e){let{header:n,inline:t,updated:a,version:s}=e;return r.createElement(o.Z,{text:`v${s}`,variant:a?"success":"info",className:n?"absolute right-0 top-1.5":t?"inline-block":"ml-2"})}},9619:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(27378),o=t(40624),a=t(31792);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function c(e){let{className:n,icon:t,text:c,variant:i}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?s[i]:"bg-gray-100 text-gray-800",n)},t&&r.createElement(a.Z,{icon:t,className:"mr-1"}),c)}},50271:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var r=t(25773),o=(t(27378),t(35318)),a=t(79022);const s={title:"sync hooks",sidebar_label:"hooks"},c=void 0,i={unversionedId:"commands/sync/hooks",id:"commands/sync/hooks",title:"sync hooks",description:"The moon sync hooks command will manually sync hooks for the configured",source:"@site/docs/commands/sync/hooks.mdx",sourceDirName:"commands/sync",slug:"/commands/sync/hooks",permalink:"/docs/commands/sync/hooks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/sync/hooks.mdx",tags:[],version:"current",frontMatter:{title:"sync hooks",sidebar_label:"hooks"},sidebar:"docs",previous:{title:"codeowners",permalink:"/docs/commands/sync/codeowners"},next:{title:"projects",permalink:"/docs/commands/sync/projects"}},l={},p=[{value:"Options",id:"options",level:3}],m={toc:p};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"1.9.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon sync hooks")," command will manually sync hooks for the configured\n",(0,o.kt)("a",{parentName:"p",href:"../../config/workspace#vcs"},"VCS"),", by generating and referencing hook scripts from the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/workspace#hooks"},(0,o.kt)("inlineCode",{parentName:"a"},"vcs.hooks"))," setting. Refer to the official\n",(0,o.kt)("a",{parentName:"p",href:"../../guides/vcs-hooks"},"VCS hooks")," guide for more information."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--clean")," - Clean and remove previously generated hooks."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--force")," - Bypass cache and force create hooks.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/36027025.0a759b6a.js b/assets/js/36027025.0a759b6a.js deleted file mode 100644 index b5b26ae1d57..00000000000 --- a/assets/js/36027025.0a759b6a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8129],{35318:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},h=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=i,u=m["".concat(s,".").concat(d)]||m[d]||c[d]||o;return n?a.createElement(u,r(r({ref:t},h),{},{components:n})):a.createElement(u,r({ref:t},h))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},98049:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={title:"Debugging a task"},r=void 0,l={unversionedId:"guides/debug-task",id:"guides/debug-task",title:"Debugging a task",description:"Running tasks is the most common way to interact with moon, so what do you do",source:"@site/docs/guides/debug-task.mdx",sourceDirName:"guides",slug:"/guides/debug-task",permalink:"/docs/guides/debug-task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/debug-task.mdx",tags:[],version:"current",frontMatter:{title:"Debugging a task"},sidebar:"guides",previous:{title:"Code owners",permalink:"/docs/guides/codeowners"},next:{title:"Docker usage",permalink:"/docs/guides/docker"}},s={},p=[{value:"Verify configuration",id:"verify-configuration",level:2},{value:"Verify inherited configuration",id:"verify-inherited-configuration",level:3},{value:"Inspect trace logs",id:"inspect-trace-logs",level:2},{value:"Inspect the hash manifest",id:"inspect-the-hash-manifest",level:2},{value:"Diffing a previous hash",id:"diffing-a-previous-hash",level:3},{value:"Ask for help",id:"ask-for-help",level:2}],h={toc:p};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},h,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Running ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task"},"tasks")," is the most common way to interact with moon, so what do you do\nwhen your task isn't working as expected? Diagnose it of course! Diagnosing the root cause of a\nbroken task can be quite daunting, but do not fret, as the following steps will help guide you in\nthis endeavor."),(0,i.kt)("h2",{id:"verify-configuration"},"Verify configuration"),(0,i.kt)("p",null,"Before we dive into the internals of moon, we should first verify that the task is actually\nconfigured correctly. Our configuration layer is very strict, but it can't catch everything, so jump\nto the ",(0,i.kt)("a",{parentName:"p",href:"../config/project#tasks"},(0,i.kt)("inlineCode",{parentName:"a"},"moon.yml"))," documentation for more information."),(0,i.kt)("p",null,"To start, moon will create a snapshot of the project and its tasks, with all ",(0,i.kt)("a",{parentName:"p",href:"../concepts/token"},"tokens"),"\nresolved, and paths expanded. This snapshot is located at\n",(0,i.kt)("inlineCode",{parentName:"p"},".moon/cache/states/<project>/snapshot.json"),". With the snapshot open, inspect the root ",(0,i.kt)("inlineCode",{parentName:"p"},"tasks"),"\nobject for any inconsistencies or inaccuracies."),(0,i.kt)("p",null,"Some issues to look out for:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("inlineCode",{parentName:"li"},"command")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"args")," been parsed correctly?"),(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("a",{parentName:"li",href:"../concepts/token"},"tokens")," resolved correctly? If not, verify syntax or try another token type."),(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("inlineCode",{parentName:"li"},"inputFiles"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"inputGlobs"),", and ",(0,i.kt)("inlineCode",{parentName:"li"},"inputVars")," expanded correctly from ",(0,i.kt)("a",{parentName:"li",href:"../config/project#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs")),"?"),(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("inlineCode",{parentName:"li"},"outputFiles")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"outputGlobs")," expanded correctly from ",(0,i.kt)("a",{parentName:"li",href:"../config/project#outputs"},(0,i.kt)("inlineCode",{parentName:"a"},"outputs")),"?"),(0,i.kt)("li",{parentName:"ul"},"Is the ",(0,i.kt)("inlineCode",{parentName:"li"},"platform")," correct for the command? If incorrect, explicitly set the\n",(0,i.kt)("a",{parentName:"li",href:"../config/project#platform-1"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),"."),(0,i.kt)("li",{parentName:"ul"},"Are ",(0,i.kt)("inlineCode",{parentName:"li"},"options")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"flags")," correct?")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Resolved information can also be inspected with the ",(0,i.kt)("a",{parentName:"p",href:"../commands/task"},(0,i.kt)("inlineCode",{parentName:"a"},"moon task <target> --json")),"\ncommand.")),(0,i.kt)("h3",{id:"verify-inherited-configuration"},"Verify inherited configuration"),(0,i.kt)("p",null,"If the configuration from the previous step looks correct, you can skip this step, otherwise let's\nverify that the inherited configuration is also correct. In the ",(0,i.kt)("inlineCode",{parentName:"p"},"snapshot.json")," file, inspect the\nroot ",(0,i.kt)("inlineCode",{parentName:"p"},"inherited")," object, which is structured as follows:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"order")," - The order in which configuration files from ",(0,i.kt)("inlineCode",{parentName:"li"},".moon")," are loaded, from lowest to highest\npriority, and the order files are merged. The ",(0,i.kt)("inlineCode",{parentName:"li"},"*")," entry is ",(0,i.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml"),", while other entries\nmap to ",(0,i.kt)("inlineCode",{parentName:"li"},".moon/tasks/**/*.yml"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"layers")," - A mapping of configuration files that were loaded, derived from the ",(0,i.kt)("inlineCode",{parentName:"li"},"order"),". Each layer\nrepresents a partial object (not expanded or resolved). Only files that exist will be mapped here."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"config")," - A partial configuration object representing the state of all merged layers. This is\nwhat is merged with the project's ",(0,i.kt)("inlineCode",{parentName:"li"},"moon.yml")," file.")),(0,i.kt)("p",null,"Some issues to look out for:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Is the order correct? If not, verify the project's ",(0,i.kt)("a",{parentName:"li",href:"../config/project#language"},(0,i.kt)("inlineCode",{parentName:"a"},"language"))," and\nthe task's ",(0,i.kt)("a",{parentName:"li",href:"../config/project#platform-1"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),"."),(0,i.kt)("li",{parentName:"ul"},"Does ",(0,i.kt)("inlineCode",{parentName:"li"},"config")," correctly represent the merged state of all ",(0,i.kt)("inlineCode",{parentName:"li"},"layers"),"? Do note that tasks are shallow\nmerged (by name), ",(0,i.kt)("em",{parentName:"li"},"not")," deep merged."),(0,i.kt)("li",{parentName:"ul"},"Have the root ",(0,i.kt)("inlineCode",{parentName:"li"},"tasks")," properly inherited ",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitdeps"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitDeps")),",\n",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitinputs"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitInputs")),", and ",(0,i.kt)("inlineCode",{parentName:"li"},"fileGroups"),"?")),(0,i.kt)("h2",{id:"inspect-trace-logs"},"Inspect trace logs"),(0,i.kt)("p",null,"If configuration looks good, let's move on to inspecting the trace logs, which can be a non-trivial\namount of effort. Run the task to generate the logs, bypass the cache, and include debug\ninformation:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"MOON_DEBUG_PROCESS_ENV=true MOON_DEBUG_PROCESS_INPUT=true moon run <target> --log trace --updateCache\n")),(0,i.kt)("p",null,'Once ran, a large amount of information will be logged to the terminal. However, most of it can be\nignored, as we\'re only interested in the "is this task affected by changes" logs. This breaks down\nas follows:'),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"First, we gather touched files from the local checkout, which is typically\n",(0,i.kt)("inlineCode",{parentName:"li"},"git status --porcelain --untracked-files")," (from the ",(0,i.kt)("inlineCode",{parentName:"li"},"moon_process::command_inspector")," module).\nThe logs do not output the list of files that are touched, but you can run this command locally\nto verify the output."),(0,i.kt)("li",{parentName:"ol"},"Secondly, we gather all files from the project directory, using the\n",(0,i.kt)("inlineCode",{parentName:"li"},"git ls-files --full-name --cached --modified --others --exclude-standard <path> --deduplicate"),"\ncommand (also from the ",(0,i.kt)("inlineCode",{parentName:"li"},"moon_process::command_inspector")," module). This command can also be ran\nlocally to verify the output."),(0,i.kt)("li",{parentName:"ol"},"Lastly, all files from the previous 2 commands will be hashed using the ",(0,i.kt)("inlineCode",{parentName:"li"},"git hash-object"),"\ncommand. If you passed the ",(0,i.kt)("inlineCode",{parentName:"li"},"MOON_DEBUG_PROCESS_INPUT")," environment variable, you'll see a massive\nlog entry of all files being hashed. This is what we use to generate moon's specific hash.")),(0,i.kt)("p",null,"If all went well, you should see a log entry that looks like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Generated hash <hash> for target <target>\n")),(0,i.kt)("p",null,"The important piece is the hash, which is a 64-character SHA256 hash, and represents the unique hash\nof this task/target. This is what moon uses to determine a cache hit/miss, and whether or not to\nskip re-running a task."),(0,i.kt)("p",null,"Let's copy the hash and move on to the next step."),(0,i.kt)("h2",{id:"inspect-the-hash-manifest"},"Inspect the hash manifest"),(0,i.kt)("p",null,"With the hash in hand, let's dig deeper into moon's internals, by inspecting the hash manifest at\n",(0,i.kt)("inlineCode",{parentName:"p"},".moon/cache/hashes/<hash>.json"),", or running the ",(0,i.kt)("a",{parentName:"p",href:"../commands/query/hash"},(0,i.kt)("inlineCode",{parentName:"a"},"moon query hash")),"\ncommand:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"moon query hash <hash>\n")),(0,i.kt)("p",null,"The manifest is JSON and its contents are all the information used to generate its unique hash. This\ninformation is an array, and breaks down as follows:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The first item in the array is the task itself. The important fields to diagnose here are ",(0,i.kt)("inlineCode",{parentName:"li"},"deps"),"\nand ",(0,i.kt)("inlineCode",{parentName:"li"},"inputs"),".",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Dependencies are other tasks (and their hash) that this task depends on."),(0,i.kt)("li",{parentName:"ul"},"Inputs are all the files (and their hash from ",(0,i.kt)("inlineCode",{parentName:"li"},"git hash-object"),") this task requires to run."))),(0,i.kt)("li",{parentName:"ul"},"The remaining items are platform/language specific, some examples are:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Node.js")," - The current Node.js version and the resolved versions/hashes of all ",(0,i.kt)("inlineCode",{parentName:"li"},"package.json"),"\ndependencies."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Rust")," - The current Rust version and the resolved versions/hashes of all ",(0,i.kt)("inlineCode",{parentName:"li"},"Cargo.toml"),"\ndependencies."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"TypeScript")," - Compiler options for changing compilation output.")))),(0,i.kt)("p",null,"Some issues to look out for:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Do the dependencies match the task's configured ",(0,i.kt)("a",{parentName:"li",href:"../config/project#deps"},(0,i.kt)("inlineCode",{parentName:"a"},"deps"))," and ",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitdeps"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitDeps")),"?"),(0,i.kt)("li",{parentName:"ul"},"Do the inputs match the task's configured ",(0,i.kt)("a",{parentName:"li",href:"../config/project#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs"))," and\n",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitinputs"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitInputs")),"? If not, try tweaking the config."),(0,i.kt)("li",{parentName:"ul"},"Are the platform/language specific items correct?"),(0,i.kt)("li",{parentName:"ul"},"Are dependency versions/hashes correctly parsed from the appropriate lockfile?")),(0,i.kt)("h3",{id:"diffing-a-previous-hash"},"Diffing a previous hash"),(0,i.kt)("p",null,"Another avenue for diagnosing a task is to diff the hash against a hash from a previous run. Since\nwe require multiple hashes, we'll need to run the task multiple times,\n",(0,i.kt)("a",{parentName:"p",href:"#inspect-trace-logs"},"inspect the logs"),", and extract the hash for each. If you receive the same hash\nfor each run, you'll need to tweak configuration or change files to produce a different hash."),(0,i.kt)("p",null,"Once you have 2 unique hashes, we can pass them to the\n",(0,i.kt)("a",{parentName:"p",href:"../commands/query/hash-diff"},(0,i.kt)("inlineCode",{parentName:"a"},"moon query hash-diff"))," command. This will produce a ",(0,i.kt)("inlineCode",{parentName:"p"},"git diff")," styled\noutput, allowing for simple line-by-line comparison debugging."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"moon query hash-diff <hash-left> <hash-right>\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},'Left: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\nRight: 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171\n\n[\n {\n "command": "build",\n "args": [\n+ "./dist"\n- "./build"\n ],\n ...\n }\n]\n')),(0,i.kt)("p",null,"This is extremely useful in diagnoising why a task is running differently than before, and is much\neasier than inspecting the hash manifest files manually!"),(0,i.kt)("h2",{id:"ask-for-help"},"Ask for help"),(0,i.kt)("p",null,"If you've made it this far, and still can't figure out why a task is not working correctly, please\nask for help!"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://discord.gg/qCh9MEynv2"},"Join the Discord community")," (if lost)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon/issues/new/choose"},"Report an issue")," (if an actual bug)")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/36027025.1ffbe4b3.js b/assets/js/36027025.1ffbe4b3.js new file mode 100644 index 00000000000..5bfae8ce2cc --- /dev/null +++ b/assets/js/36027025.1ffbe4b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28129],{35318:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},h=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=i,u=m["".concat(s,".").concat(d)]||m[d]||c[d]||o;return n?a.createElement(u,r(r({ref:t},h),{},{components:n})):a.createElement(u,r({ref:t},h))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},98049:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={title:"Debugging a task"},r=void 0,l={unversionedId:"guides/debug-task",id:"guides/debug-task",title:"Debugging a task",description:"Running tasks is the most common way to interact with moon, so what do you do",source:"@site/docs/guides/debug-task.mdx",sourceDirName:"guides",slug:"/guides/debug-task",permalink:"/docs/guides/debug-task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/debug-task.mdx",tags:[],version:"current",frontMatter:{title:"Debugging a task"},sidebar:"guides",previous:{title:"Code owners",permalink:"/docs/guides/codeowners"},next:{title:"Docker usage",permalink:"/docs/guides/docker"}},s={},p=[{value:"Verify configuration",id:"verify-configuration",level:2},{value:"Verify inherited configuration",id:"verify-inherited-configuration",level:3},{value:"Inspect trace logs",id:"inspect-trace-logs",level:2},{value:"Inspect the hash manifest",id:"inspect-the-hash-manifest",level:2},{value:"Diffing a previous hash",id:"diffing-a-previous-hash",level:3},{value:"Ask for help",id:"ask-for-help",level:2}],h={toc:p};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},h,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Running ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task"},"tasks")," is the most common way to interact with moon, so what do you do\nwhen your task isn't working as expected? Diagnose it of course! Diagnosing the root cause of a\nbroken task can be quite daunting, but do not fret, as the following steps will help guide you in\nthis endeavor."),(0,i.kt)("h2",{id:"verify-configuration"},"Verify configuration"),(0,i.kt)("p",null,"Before we dive into the internals of moon, we should first verify that the task is actually\nconfigured correctly. Our configuration layer is very strict, but it can't catch everything, so jump\nto the ",(0,i.kt)("a",{parentName:"p",href:"../config/project#tasks"},(0,i.kt)("inlineCode",{parentName:"a"},"moon.yml"))," documentation for more information."),(0,i.kt)("p",null,"To start, moon will create a snapshot of the project and its tasks, with all ",(0,i.kt)("a",{parentName:"p",href:"../concepts/token"},"tokens"),"\nresolved, and paths expanded. This snapshot is located at\n",(0,i.kt)("inlineCode",{parentName:"p"},".moon/cache/states/<project>/snapshot.json"),". With the snapshot open, inspect the root ",(0,i.kt)("inlineCode",{parentName:"p"},"tasks"),"\nobject for any inconsistencies or inaccuracies."),(0,i.kt)("p",null,"Some issues to look out for:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("inlineCode",{parentName:"li"},"command")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"args")," been parsed correctly?"),(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("a",{parentName:"li",href:"../concepts/token"},"tokens")," resolved correctly? If not, verify syntax or try another token type."),(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("inlineCode",{parentName:"li"},"inputFiles"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"inputGlobs"),", and ",(0,i.kt)("inlineCode",{parentName:"li"},"inputVars")," expanded correctly from ",(0,i.kt)("a",{parentName:"li",href:"../config/project#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs")),"?"),(0,i.kt)("li",{parentName:"ul"},"Have ",(0,i.kt)("inlineCode",{parentName:"li"},"outputFiles")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"outputGlobs")," expanded correctly from ",(0,i.kt)("a",{parentName:"li",href:"../config/project#outputs"},(0,i.kt)("inlineCode",{parentName:"a"},"outputs")),"?"),(0,i.kt)("li",{parentName:"ul"},"Is the ",(0,i.kt)("inlineCode",{parentName:"li"},"platform")," correct for the command? If incorrect, explicitly set the\n",(0,i.kt)("a",{parentName:"li",href:"../config/project#platform-1"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),"."),(0,i.kt)("li",{parentName:"ul"},"Are ",(0,i.kt)("inlineCode",{parentName:"li"},"options")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"flags")," correct?")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Resolved information can also be inspected with the ",(0,i.kt)("a",{parentName:"p",href:"../commands/task"},(0,i.kt)("inlineCode",{parentName:"a"},"moon task <target> --json")),"\ncommand.")),(0,i.kt)("h3",{id:"verify-inherited-configuration"},"Verify inherited configuration"),(0,i.kt)("p",null,"If the configuration from the previous step looks correct, you can skip this step, otherwise let's\nverify that the inherited configuration is also correct. In the ",(0,i.kt)("inlineCode",{parentName:"p"},"snapshot.json")," file, inspect the\nroot ",(0,i.kt)("inlineCode",{parentName:"p"},"inherited")," object, which is structured as follows:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"order")," - The order in which configuration files from ",(0,i.kt)("inlineCode",{parentName:"li"},".moon")," are loaded, from lowest to highest\npriority, and the order files are merged. The ",(0,i.kt)("inlineCode",{parentName:"li"},"*")," entry is ",(0,i.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml"),", while other entries\nmap to ",(0,i.kt)("inlineCode",{parentName:"li"},".moon/tasks/**/*.yml"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"layers")," - A mapping of configuration files that were loaded, derived from the ",(0,i.kt)("inlineCode",{parentName:"li"},"order"),". Each layer\nrepresents a partial object (not expanded or resolved). Only files that exist will be mapped here."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"config")," - A partial configuration object representing the state of all merged layers. This is\nwhat is merged with the project's ",(0,i.kt)("inlineCode",{parentName:"li"},"moon.yml")," file.")),(0,i.kt)("p",null,"Some issues to look out for:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Is the order correct? If not, verify the project's ",(0,i.kt)("a",{parentName:"li",href:"../config/project#language"},(0,i.kt)("inlineCode",{parentName:"a"},"language"))," and\nthe task's ",(0,i.kt)("a",{parentName:"li",href:"../config/project#platform-1"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),"."),(0,i.kt)("li",{parentName:"ul"},"Does ",(0,i.kt)("inlineCode",{parentName:"li"},"config")," correctly represent the merged state of all ",(0,i.kt)("inlineCode",{parentName:"li"},"layers"),"? Do note that tasks are shallow\nmerged (by name), ",(0,i.kt)("em",{parentName:"li"},"not")," deep merged."),(0,i.kt)("li",{parentName:"ul"},"Have the root ",(0,i.kt)("inlineCode",{parentName:"li"},"tasks")," properly inherited ",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitdeps"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitDeps")),",\n",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitinputs"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitInputs")),", and ",(0,i.kt)("inlineCode",{parentName:"li"},"fileGroups"),"?")),(0,i.kt)("h2",{id:"inspect-trace-logs"},"Inspect trace logs"),(0,i.kt)("p",null,"If configuration looks good, let's move on to inspecting the trace logs, which can be a non-trivial\namount of effort. Run the task to generate the logs, bypass the cache, and include debug\ninformation:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"MOON_DEBUG_PROCESS_ENV=true MOON_DEBUG_PROCESS_INPUT=true moon run <target> --log trace --updateCache\n")),(0,i.kt)("p",null,'Once ran, a large amount of information will be logged to the terminal. However, most of it can be\nignored, as we\'re only interested in the "is this task affected by changes" logs. This breaks down\nas follows:'),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"First, we gather touched files from the local checkout, which is typically\n",(0,i.kt)("inlineCode",{parentName:"li"},"git status --porcelain --untracked-files")," (from the ",(0,i.kt)("inlineCode",{parentName:"li"},"moon_process::command_inspector")," module).\nThe logs do not output the list of files that are touched, but you can run this command locally\nto verify the output."),(0,i.kt)("li",{parentName:"ol"},"Secondly, we gather all files from the project directory, using the\n",(0,i.kt)("inlineCode",{parentName:"li"},"git ls-files --full-name --cached --modified --others --exclude-standard <path> --deduplicate"),"\ncommand (also from the ",(0,i.kt)("inlineCode",{parentName:"li"},"moon_process::command_inspector")," module). This command can also be ran\nlocally to verify the output."),(0,i.kt)("li",{parentName:"ol"},"Lastly, all files from the previous 2 commands will be hashed using the ",(0,i.kt)("inlineCode",{parentName:"li"},"git hash-object"),"\ncommand. If you passed the ",(0,i.kt)("inlineCode",{parentName:"li"},"MOON_DEBUG_PROCESS_INPUT")," environment variable, you'll see a massive\nlog entry of all files being hashed. This is what we use to generate moon's specific hash.")),(0,i.kt)("p",null,"If all went well, you should see a log entry that looks like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Generated hash <hash> for target <target>\n")),(0,i.kt)("p",null,"The important piece is the hash, which is a 64-character SHA256 hash, and represents the unique hash\nof this task/target. This is what moon uses to determine a cache hit/miss, and whether or not to\nskip re-running a task."),(0,i.kt)("p",null,"Let's copy the hash and move on to the next step."),(0,i.kt)("h2",{id:"inspect-the-hash-manifest"},"Inspect the hash manifest"),(0,i.kt)("p",null,"With the hash in hand, let's dig deeper into moon's internals, by inspecting the hash manifest at\n",(0,i.kt)("inlineCode",{parentName:"p"},".moon/cache/hashes/<hash>.json"),", or running the ",(0,i.kt)("a",{parentName:"p",href:"../commands/query/hash"},(0,i.kt)("inlineCode",{parentName:"a"},"moon query hash")),"\ncommand:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"moon query hash <hash>\n")),(0,i.kt)("p",null,"The manifest is JSON and its contents are all the information used to generate its unique hash. This\ninformation is an array, and breaks down as follows:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The first item in the array is the task itself. The important fields to diagnose here are ",(0,i.kt)("inlineCode",{parentName:"li"},"deps"),"\nand ",(0,i.kt)("inlineCode",{parentName:"li"},"inputs"),".",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Dependencies are other tasks (and their hash) that this task depends on."),(0,i.kt)("li",{parentName:"ul"},"Inputs are all the files (and their hash from ",(0,i.kt)("inlineCode",{parentName:"li"},"git hash-object"),") this task requires to run."))),(0,i.kt)("li",{parentName:"ul"},"The remaining items are platform/language specific, some examples are:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Node.js")," - The current Node.js version and the resolved versions/hashes of all ",(0,i.kt)("inlineCode",{parentName:"li"},"package.json"),"\ndependencies."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Rust")," - The current Rust version and the resolved versions/hashes of all ",(0,i.kt)("inlineCode",{parentName:"li"},"Cargo.toml"),"\ndependencies."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"TypeScript")," - Compiler options for changing compilation output.")))),(0,i.kt)("p",null,"Some issues to look out for:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Do the dependencies match the task's configured ",(0,i.kt)("a",{parentName:"li",href:"../config/project#deps"},(0,i.kt)("inlineCode",{parentName:"a"},"deps"))," and ",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitdeps"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitDeps")),"?"),(0,i.kt)("li",{parentName:"ul"},"Do the inputs match the task's configured ",(0,i.kt)("a",{parentName:"li",href:"../config/project#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs"))," and\n",(0,i.kt)("a",{parentName:"li",href:"../config/tasks#implicitinputs"},(0,i.kt)("inlineCode",{parentName:"a"},"implicitInputs")),"? If not, try tweaking the config."),(0,i.kt)("li",{parentName:"ul"},"Are the platform/language specific items correct?"),(0,i.kt)("li",{parentName:"ul"},"Are dependency versions/hashes correctly parsed from the appropriate lockfile?")),(0,i.kt)("h3",{id:"diffing-a-previous-hash"},"Diffing a previous hash"),(0,i.kt)("p",null,"Another avenue for diagnosing a task is to diff the hash against a hash from a previous run. Since\nwe require multiple hashes, we'll need to run the task multiple times,\n",(0,i.kt)("a",{parentName:"p",href:"#inspect-trace-logs"},"inspect the logs"),", and extract the hash for each. If you receive the same hash\nfor each run, you'll need to tweak configuration or change files to produce a different hash."),(0,i.kt)("p",null,"Once you have 2 unique hashes, we can pass them to the\n",(0,i.kt)("a",{parentName:"p",href:"../commands/query/hash-diff"},(0,i.kt)("inlineCode",{parentName:"a"},"moon query hash-diff"))," command. This will produce a ",(0,i.kt)("inlineCode",{parentName:"p"},"git diff")," styled\noutput, allowing for simple line-by-line comparison debugging."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"moon query hash-diff <hash-left> <hash-right>\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-diff"},'Left: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\nRight: 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171\n\n[\n {\n "command": "build",\n "args": [\n+ "./dist"\n- "./build"\n ],\n ...\n }\n]\n')),(0,i.kt)("p",null,"This is extremely useful in diagnoising why a task is running differently than before, and is much\neasier than inspecting the hash manifest files manually!"),(0,i.kt)("h2",{id:"ask-for-help"},"Ask for help"),(0,i.kt)("p",null,"If you've made it this far, and still can't figure out why a task is not working correctly, please\nask for help!"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://discord.gg/qCh9MEynv2"},"Join the Discord community")," (if lost)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon/issues/new/choose"},"Report an issue")," (if an actual bug)")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/365a10b6.2df24fa3.js b/assets/js/365a10b6.2df24fa3.js deleted file mode 100644 index 62ce7e50a3b..00000000000 --- a/assets/js/365a10b6.2df24fa3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4067],{18476:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cache","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/365a10b6.510bc3c5.js b/assets/js/365a10b6.510bc3c5.js new file mode 100644 index 00000000000..7280bf3cc09 --- /dev/null +++ b/assets/js/365a10b6.510bc3c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64067],{18476:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cache","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3691c6ec.1b37f16f.js b/assets/js/3691c6ec.1b37f16f.js deleted file mode 100644 index 12c41679fb6..00000000000 --- a/assets/js/3691c6ec.1b37f16f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[846],{42461:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/config","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3691c6ec.a12f97f8.js b/assets/js/3691c6ec.a12f97f8.js new file mode 100644 index 00000000000..4ae608a768e --- /dev/null +++ b/assets/js/3691c6ec.a12f97f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60846],{42461:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/config","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3720c009.73933c11.js b/assets/js/3720c009.73933c11.js new file mode 100644 index 00000000000..ae5a48ebfe4 --- /dev/null +++ b/assets/js/3720c009.73933c11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13751],{84889:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var l=a(27378),n=a(37140),r=a(75846),c=a(1123),s=a(75484),m=a(64654),o=a(34672),i=a(60505);function u(e){let{tags:t}=e;const a=(0,r.M)();return l.createElement(c.FG,{className:(0,n.Z)(s.k.wrapper.docsPages,s.k.page.docsTagsListPage)},l.createElement(c.d,{title:a}),l.createElement(i.Z,{tag:"doc_tags_list"}),l.createElement(m.Z,null,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement("main",{className:"col col--8 col--offset-2"},l.createElement("h1",null,a),l.createElement(o.Z,{tags:t}))))))}},51478:(e,t,a)=>{a.d(t,{Z:()=>o});var l=a(27378),n=a(37140),r=a(81884);const c="tag_otG2",s="tagRegular_s0E1",m="tagWithCount_PGyn";function o(e){let{permalink:t,label:a,count:o}=e;return l.createElement(r.default,{href:t,className:(0,n.Z)(c,o?m:s)},a,o&&l.createElement("span",null,o))}},34672:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(27378),n=a(75846),r=a(51478);const c="tag_FHL6";function s(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:c},l.createElement(r.Z,e))))),l.createElement("hr",null))}function m(e){let{tags:t}=e;const a=(0,n.P)(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(s,{key:e.letter,letterEntry:e}))))}},75846:(e,t,a)=>{a.d(t,{M:()=>n,P:()=>r});var l=a(99213);const n=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.f7275849.js b/assets/js/3720c009.f7275849.js deleted file mode 100644 index f923797f376..00000000000 --- a/assets/js/3720c009.f7275849.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3751],{84889:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var l=a(27378),n=a(37140),r=a(75846),c=a(1123),s=a(75484),m=a(64654),o=a(34672),i=a(60505);function u(e){let{tags:t}=e;const a=(0,r.M)();return l.createElement(c.FG,{className:(0,n.Z)(s.k.wrapper.docsPages,s.k.page.docsTagsListPage)},l.createElement(c.d,{title:a}),l.createElement(i.Z,{tag:"doc_tags_list"}),l.createElement(m.Z,null,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement("main",{className:"col col--8 col--offset-2"},l.createElement("h1",null,a),l.createElement(o.Z,{tags:t}))))))}},51478:(e,t,a)=>{a.d(t,{Z:()=>o});var l=a(27378),n=a(37140),r=a(81884);const c="tag_otG2",s="tagRegular_s0E1",m="tagWithCount_PGyn";function o(e){let{permalink:t,label:a,count:o}=e;return l.createElement(r.default,{href:t,className:(0,n.Z)(c,o?m:s)},a,o&&l.createElement("span",null,o))}},34672:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(27378),n=a(75846),r=a(51478);const c="tag_FHL6";function s(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:c},l.createElement(r.Z,e))))),l.createElement("hr",null))}function m(e){let{tags:t}=e;const a=(0,n.P)(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(s,{key:e.letter,letterEntry:e}))))}},75846:(e,t,a)=>{a.d(t,{M:()=>n,P:()=>r});var l=a(99213);const n=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/376f2f8c.4b2f0f67.js b/assets/js/376f2f8c.4b2f0f67.js deleted file mode 100644 index 754798424cb..00000000000 --- a/assets/js/376f2f8c.4b2f0f67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8444],{81327:e=>{e.exports=JSON.parse('{"label":"remote-cache","permalink":"/blog/tags/remote-cache","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/376f2f8c.d5c1df98.js b/assets/js/376f2f8c.d5c1df98.js new file mode 100644 index 00000000000..c21dcb15858 --- /dev/null +++ b/assets/js/376f2f8c.d5c1df98.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28444],{81327:e=>{e.exports=JSON.parse('{"label":"remote-cache","permalink":"/blog/tags/remote-cache","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/37e4cb73.7ebdd47f.js b/assets/js/37e4cb73.7ebdd47f.js deleted file mode 100644 index b9e210488a8..00000000000 --- a/assets/js/37e4cb73.7ebdd47f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4488],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(n),g=o,d=u["".concat(p,".").concat(g)]||u[g]||m[g]||a;return n?r.createElement(d,i(i({ref:t},s),{},{components:n})):r.createElement(d,i({ref:t},s))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},96154:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},i=void 0,l={permalink:"/blog/proto-v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx",source:"@site/blog/2023-09-29_proto-v0.19.mdx",title:"proto v0.19 - Version pinning and outdated checks",description:"In this release, we're improving version pinning and introducing a new command to check for outdated",date:"2023-09-29T00:00:00.000Z",formattedDate:"September 29, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"pin",permalink:"/blog/tags/pin"},{label:"global",permalink:"/blog/tags/global"},{label:"local",permalink:"/blog/tags/local"},{label:"outdated",permalink:"/blog/tags/outdated"}],readingTime:1.92,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},prevItem:{title:"moon v1.15 - Next-generation action graph",permalink:"/blog/moon-v1.15"},nextItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"}},p={image:n(36691).Z,authorsImageUrls:[void 0]},c=[],s={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're improving version pinning and introducing a new command to check for outdated\nversions."))}m.isMDXComponent=!0},36691:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v0.19-8de1899b49d54ec36a7294e44f3880ca.png"}}]); \ No newline at end of file diff --git a/assets/js/37e4cb73.9b37e3fa.js b/assets/js/37e4cb73.9b37e3fa.js new file mode 100644 index 00000000000..7c57fc9ae75 --- /dev/null +++ b/assets/js/37e4cb73.9b37e3fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94488],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(n),g=o,d=u["".concat(p,".").concat(g)]||u[g]||m[g]||a;return n?r.createElement(d,i(i({ref:t},s),{},{components:n})):r.createElement(d,i({ref:t},s))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},96154:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},i=void 0,l={permalink:"/blog/proto-v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx",source:"@site/blog/2023-09-29_proto-v0.19.mdx",title:"proto v0.19 - Version pinning and outdated checks",description:"In this release, we're improving version pinning and introducing a new command to check for outdated",date:"2023-09-29T00:00:00.000Z",formattedDate:"September 29, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"pin",permalink:"/blog/tags/pin"},{label:"global",permalink:"/blog/tags/global"},{label:"local",permalink:"/blog/tags/local"},{label:"outdated",permalink:"/blog/tags/outdated"}],readingTime:1.92,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},prevItem:{title:"moon v1.15 - Next-generation action graph",permalink:"/blog/moon-v1.15"},nextItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"}},p={image:n(36691).Z,authorsImageUrls:[void 0]},c=[],s={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're improving version pinning and introducing a new command to check for outdated\nversions."))}m.isMDXComponent=!0},36691:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v0.19-8de1899b49d54ec36a7294e44f3880ca.png"}}]); \ No newline at end of file diff --git a/assets/js/3893.72192441.js b/assets/js/3893.72192441.js deleted file mode 100644 index ddbbc3587c2..00000000000 --- a/assets/js/3893.72192441.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3893],{53893:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(99213),o=n(1123),r=n(64654);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/39a2c297.0ed03b8d.js b/assets/js/39a2c297.0ed03b8d.js new file mode 100644 index 00000000000..8e72b3a3fca --- /dev/null +++ b/assets/js/39a2c297.0ed03b8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27756],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),g=r,f=c["".concat(s,".").concat(g)]||c[g]||m[g]||i;return n?o.createElement(f,a(a({ref:t},u),{},{components:n})):o.createElement(f,a({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p<i;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},53257:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var o=n(25773),r=(n(27378),n(35318)),i=n(76911);const a={slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,s={permalink:"/blog/proto-v0.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx",source:"@site/blog/2023-07-07_proto-v0.12.mdx",title:"proto v0.12 - Experimental WASM plugins",description:"After months of hard work, we're excited to release our first iteration of WASM plugins for proto.",date:"2023-07-07T00:00:00.000Z",formattedDate:"July 7, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.885,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"},nextItem:{title:"moon v1.9 - VCS hooks management and improved task inheritance",permalink:"/blog/moon-v1.9"}},p={authorsImageUrls:[void 0]},u=[{value:"WASM plugins",id:"wasm-plugins",level:2},{value:"Using WASM plugins",id:"using-wasm-plugins",level:3},{value:"Example implementation",id:"example-implementation",level:3},{value:"Other changes",id:"other-changes",level:2}],m={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"After months of hard work, we're excited to release our first iteration of WASM plugins for proto."),(0,r.kt)("h2",{id:"wasm-plugins"},"WASM plugins"),(0,r.kt)("p",null,"Three months ago, we ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/issues/73"},"published an RFC")," for supporting\nplugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional\ntools, instead of them being built into proto core (which is very time consuming)."),(0,r.kt)("p",null,"Two months ago, we released support for ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/toml-plugin"},"TOML plugins"),". These are very\nsimple plugins powered by static configuration files. They're great for simple tools like CLIs and\npre-built languages, as everything is powered by static HTTP URLs and file names. However, sometimes\nyou need dynamic control..."),(0,r.kt)("p",null,"And after 2 months of development, and help from the ",(0,r.kt)("a",{parentName:"p",href:"https://extism.org/"},"Extism team"),", we're\nexcited to announce initial support for WASM plugins. WASM is a portable binary format, with\nsandboxed access to the file system (via WASI), and the ability to execute processes and fetch URLs.\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\nTypeScript, and more. This removes the requirement of writing Rust and contributing to proto\ndirectly!"),(0,r.kt)("div",{class:"flex justify-center"},(0,r.kt)(i.Z,{label:"View WASM plugin guide",href:"/docs/proto/wasm-plugin",size:"lg",mdxType:"Button"})),(0,r.kt)("h3",{id:"using-wasm-plugins"},"Using WASM plugins"),(0,r.kt)("p",null,"Once the ",(0,r.kt)("inlineCode",{parentName:"p"},".wasm")," file is publicly available for download, we can configure it as a plugin in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,r.kt)("inlineCode",{parentName:"a"},".prototools")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[plugins]\nmy-plugin = "source:https://domain.com/path/to/wasm/plugin.wasm"\n')),(0,r.kt)("p",null,"And execute all ",(0,r.kt)("inlineCode",{parentName:"p"},"proto")," commands using the configured plugin identifier."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"proto install my-plugin\n")),(0,r.kt)("h3",{id:"example-implementation"},"Example implementation"),(0,r.kt)("p",null,"The official guide above walks you through creating a plugin, but to demonstrate the power of WASM\nplugins, here's an example function that defines parameters for downloading and installing Node.js.\nThis is written in Rust and using Extism's official PDK."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn download_prebuilt(\n Json(input): Json<DownloadPrebuiltInput>,\n) -> FnResult<Json<DownloadPrebuiltOutput>> {\n let version = input.env.version;\n let arch = input.env.arch;\n\n let prefix = match input.env.os {\n HostOS::Linux => format!("node-v{version}-linux-{arch}"),\n HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),\n HostOS::Windows => format!("node-v{version}-win-{arch}"),\n other => {\n return Err(PluginError::UnsupportedPlatform {\n tool: NAME.into(),\n platform: format!("{:?}", other),\n })?;\n }\n };\n\n let filename = if input.env.os == HostOS::Windows {\n format!("{prefix}.zip")\n } else {\n format!("{prefix}.tar.xz")\n };\n\n Ok(Json(DownloadPrebuiltOutput {\n archive_prefix: Some(prefix),\n download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),\n download_name: Some(filename),\n checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),\n ..DownloadPrebuiltOutput::default()\n }))\n}\n')),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.12.0"},"official release")," for a full list\nof changes."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/39a2c297.1289a44f.js b/assets/js/39a2c297.1289a44f.js deleted file mode 100644 index f44a3d72cf7..00000000000 --- a/assets/js/39a2c297.1289a44f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7756],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),g=r,f=c["".concat(s,".").concat(g)]||c[g]||m[g]||i;return n?o.createElement(f,a(a({ref:t},u),{},{components:n})):o.createElement(f,a({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p<i;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},53257:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var o=n(25773),r=(n(27378),n(35318)),i=n(76911);const a={slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,s={permalink:"/blog/proto-v0.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx",source:"@site/blog/2023-07-07_proto-v0.12.mdx",title:"proto v0.12 - Experimental WASM plugins",description:"After months of hard work, we're excited to release our first iteration of WASM plugins for proto.",date:"2023-07-07T00:00:00.000Z",formattedDate:"July 7, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.885,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"},nextItem:{title:"moon v1.9 - VCS hooks management and improved task inheritance",permalink:"/blog/moon-v1.9"}},p={authorsImageUrls:[void 0]},u=[{value:"WASM plugins",id:"wasm-plugins",level:2},{value:"Using WASM plugins",id:"using-wasm-plugins",level:3},{value:"Example implementation",id:"example-implementation",level:3},{value:"Other changes",id:"other-changes",level:2}],m={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"After months of hard work, we're excited to release our first iteration of WASM plugins for proto."),(0,r.kt)("h2",{id:"wasm-plugins"},"WASM plugins"),(0,r.kt)("p",null,"Three months ago, we ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/issues/73"},"published an RFC")," for supporting\nplugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional\ntools, instead of them being built into proto core (which is very time consuming)."),(0,r.kt)("p",null,"Two months ago, we released support for ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/toml-plugin"},"TOML plugins"),". These are very\nsimple plugins powered by static configuration files. They're great for simple tools like CLIs and\npre-built languages, as everything is powered by static HTTP URLs and file names. However, sometimes\nyou need dynamic control..."),(0,r.kt)("p",null,"And after 2 months of development, and help from the ",(0,r.kt)("a",{parentName:"p",href:"https://extism.org/"},"Extism team"),", we're\nexcited to announce initial support for WASM plugins. WASM is a portable binary format, with\nsandboxed access to the file system (via WASI), and the ability to execute processes and fetch URLs.\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\nTypeScript, and more. This removes the requirement of writing Rust and contributing to proto\ndirectly!"),(0,r.kt)("div",{class:"flex justify-center"},(0,r.kt)(i.Z,{label:"View WASM plugin guide",href:"/docs/proto/wasm-plugin",size:"lg",mdxType:"Button"})),(0,r.kt)("h3",{id:"using-wasm-plugins"},"Using WASM plugins"),(0,r.kt)("p",null,"Once the ",(0,r.kt)("inlineCode",{parentName:"p"},".wasm")," file is publicly available for download, we can configure it as a plugin in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,r.kt)("inlineCode",{parentName:"a"},".prototools")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[plugins]\nmy-plugin = "source:https://domain.com/path/to/wasm/plugin.wasm"\n')),(0,r.kt)("p",null,"And execute all ",(0,r.kt)("inlineCode",{parentName:"p"},"proto")," commands using the configured plugin identifier."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"proto install my-plugin\n")),(0,r.kt)("h3",{id:"example-implementation"},"Example implementation"),(0,r.kt)("p",null,"The official guide above walks you through creating a plugin, but to demonstrate the power of WASM\nplugins, here's an example function that defines parameters for downloading and installing Node.js.\nThis is written in Rust and using Extism's official PDK."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn download_prebuilt(\n Json(input): Json<DownloadPrebuiltInput>,\n) -> FnResult<Json<DownloadPrebuiltOutput>> {\n let version = input.env.version;\n let arch = input.env.arch;\n\n let prefix = match input.env.os {\n HostOS::Linux => format!("node-v{version}-linux-{arch}"),\n HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),\n HostOS::Windows => format!("node-v{version}-win-{arch}"),\n other => {\n return Err(PluginError::UnsupportedPlatform {\n tool: NAME.into(),\n platform: format!("{:?}", other),\n })?;\n }\n };\n\n let filename = if input.env.os == HostOS::Windows {\n format!("{prefix}.zip")\n } else {\n format!("{prefix}.tar.xz")\n };\n\n Ok(Json(DownloadPrebuiltOutput {\n archive_prefix: Some(prefix),\n download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),\n download_name: Some(filename),\n checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),\n ..DownloadPrebuiltOutput::default()\n }))\n}\n')),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.12.0"},"official release")," for a full list\nof changes."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/39b245d7.47f350ff.js b/assets/js/39b245d7.47f350ff.js new file mode 100644 index 00000000000..003543c68cc --- /dev/null +++ b/assets/js/39b245d7.47f350ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21042],{35318:(e,t,o)=>{o.d(t,{Zo:()=>m,kt:()=>k});var n=o(27378);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):r(r({},t),e)),o},m=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),h=p(o),k=a,d=h["".concat(l,".").concat(k)]||h[k]||c[k]||i;return o?n.createElement(d,r(r({ref:t},m),{},{components:o})):n.createElement(d,r({ref:t},m))}));function k(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,r[1]=s;for(var p=2;p<i;p++)r[p]=o[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,o)}h.displayName="MDXCreateElement"},79022:(e,t,o)=>{o.d(t,{Z:()=>i});var n=o(27378),a=o(9619);function i(e){let{header:t,inline:o,updated:i,version:r}=e;return n.createElement(a.Z,{text:`v${r}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":o?"inline-block":"ml-2"})}},9619:(e,t,o)=>{o.d(t,{Z:()=>s});var n=o(27378),a=o(40624),i=o(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:o,text:s,variant:l}=e;return n.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?r[l]:"bg-gray-100 text-gray-800",t)},o&&n.createElement(i.Z,{icon:o,className:"mr-1"}),s)}},7196:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>m});var n=o(25773),a=(o(27378),o(35318)),i=o(79022);const r={title:"VCS hooks",tags:["vcs","hooks","git","git-hooks"]},s=void 0,l={unversionedId:"guides/vcs-hooks",id:"guides/vcs-hooks",title:"VCS hooks",description:"VCS hooks (most popular with Git) are a",source:"@site/docs/guides/vcs-hooks.mdx",sourceDirName:"guides",slug:"/guides/vcs-hooks",permalink:"/docs/guides/vcs-hooks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/vcs-hooks.mdx",tags:[{label:"vcs",permalink:"/docs/tags/vcs"},{label:"hooks",permalink:"/docs/tags/hooks"},{label:"git",permalink:"/docs/tags/git"},{label:"git-hooks",permalink:"/docs/tags/git-hooks"}],version:"current",frontMatter:{title:"VCS hooks",tags:["vcs","hooks","git","git-hooks"]},sidebar:"guides",previous:{title:"Webhooks (experimental)",permalink:"/docs/guides/webhooks"},next:{title:"Deno handbook",permalink:"/docs/guides/javascript/deno-handbook"}},p={},m=[{value:"Defining hooks",id:"defining-hooks",level:2},{value:"Enabling hooks",id:"enabling-hooks",level:2},{value:"Automatically for everyone",id:"automatically-for-everyone",level:3},{value:"Manually by each developer",id:"manually-by-each-developer",level:3},{value:"Disabling hooks",id:"disabling-hooks",level:2},{value:"How it works",id:"how-it-works",level:2},{value:"Git",id:"git",level:3},{value:"Examples",id:"examples",level:2},{value:"Pre-commit",id:"pre-commit",level:3}],c={toc:m};function h(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(i.Z,{version:"1.9.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"VCS hooks (most popular with ",(0,a.kt)("a",{parentName:"p",href:"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks"},"Git"),") are a\nmechanism for running scripts at pre-defined phases in the VCS's lifecycle, most commonly\npre-commit, pre-push, or pre-merge. With moon, we provide a built-in solution for managing hooks,\nand syncing them across developers and machines."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://git-scm.com/docs/githooks"},"Learn more about Git hooks"))),(0,a.kt)("h2",{id:"defining-hooks"},"Defining hooks"),(0,a.kt)("p",null,"Hooks can be configured with the ",(0,a.kt)("a",{parentName:"p",href:"../config/workspace#hooks"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs.hooks"))," setting in\n",(0,a.kt)("a",{parentName:"p",href:"../config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". This setting requires a map of hook names (in the\nformat required by your VCS), to a list of arbitrary commands to run within the hook script.\nCommands are used as-is and are not formatted or interpolated in any way."),(0,a.kt)("p",null,"To demonstrate this, let's configure a ",(0,a.kt)("inlineCode",{parentName:"p"},"pre-commit")," hook that runs a moon ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task for affected\nprojects, and also verifies that the commit message abides by a specified format (using\n",(0,a.kt)("a",{parentName:"p",href:"https://pre-commit.com/"},"pre-commit"),")."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks:\n pre-commit:\n - 'pre-commit run'\n - 'moon run :lint --affected'\n")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"All commands are executed from the repository root (not moon's workspace root) and must exist on\n",(0,a.kt)("inlineCode",{parentName:"p"},"PATH"),". If ",(0,a.kt)("inlineCode",{parentName:"p"},"moon")," is installed locally, you can execute it using a repository relative path, like\n",(0,a.kt)("inlineCode",{parentName:"p"},"./node_modules/@moonrepo/cli/moon"),".")),(0,a.kt)("h2",{id:"enabling-hooks"},"Enabling hooks"),(0,a.kt)("p",null,"Hooks are a divisive subject, as some developers love them, and others hate them. Finding a viable\nsolution for everyone can be difficult, so with moon, we opted to support 2 distinct options, but\nonly 1 can be used at a time. Choose the option that works best for your project, team, or company!"),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"If you have existing VCS hooks, back them up as moon's implementation will overwrite them! To\nmigrate your existing hooks, ",(0,a.kt)("a",{parentName:"p",href:"#defining-hooks"},"configure them as commands to run"),".")),(0,a.kt)("h3",{id:"automatically-for-everyone"},"Automatically for everyone"),(0,a.kt)("p",null,"If you'd like hooks to be enforced for every contributor of the repository, then simply enable the\n",(0,a.kt)("a",{parentName:"p",href:"../config/workspace#synchooks"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs.syncHooks"))," setting in\n",(0,a.kt)("a",{parentName:"p",href:"../config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". This will automatically generate hook scripts and link\nthem with the local VCS checkout, everytime a ",(0,a.kt)("a",{parentName:"p",href:"../concepts/target"},"target")," is ran."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks: [...]\n syncHooks: true\n")),(0,a.kt)("h3",{id:"manually-by-each-developer"},"Manually by each developer"),(0,a.kt)("p",null,"If you'd prefer contributors to have a choice in whether or not they want to use hooks, then simply\ndo nothing, and guide them to run the ",(0,a.kt)("a",{parentName:"p",href:"../commands/sync/hooks"},(0,a.kt)("inlineCode",{parentName:"a"},"moon sync hooks"))," command. This\ncommand will generate hook scripts and link them with the local VCS checkout."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks\n")),(0,a.kt)("h2",{id:"disabling-hooks"},"Disabling hooks"),(0,a.kt)("p",null,"If you choose to stop using hooks, you'll need to cleanup the previously generated hook scripts, and\nreset the VCS checkout. To start, disable the ",(0,a.kt)("inlineCode",{parentName:"p"},"vcs.syncHooks")," setting."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n syncHooks: false\n")),(0,a.kt)("p",null,"And then run the following command, which will delete files from your local filesystem. Every\ndeveloper that is using hooks will need to run this command."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks --clean\n")),(0,a.kt)("h2",{id:"how-it-works"},"How it works"),(0,a.kt)("p",null,"When hooks are ",(0,a.kt)("a",{parentName:"p",href:"#enabling-hooks"},"enabled"),", the following processes will take place."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"The configured ",(0,a.kt)("a",{parentName:"p",href:"#defining-hooks"},"hooks")," will be generated as individual script files in the\n",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," directory. Whether or not you commit or ignore these script files is your choice.\nThey are written to the ",(0,a.kt)("inlineCode",{parentName:"p"},".moon")," directory so that they can be reviewed, audited, and easily\ntested, but ",(0,a.kt)("em",{parentName:"p"},"are required"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"We then sync these generated hook scripts with the current VCS. For Git, we create ",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks"),"\nfiles that execute our generated scripts, using repository relative commands. Any existing VCS\nhooks ",(0,a.kt)("em",{parentName:"p"},"will be overwritten"),"."))),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," scripts are generated as Bash scripts (use a ",(0,a.kt)("inlineCode",{parentName:"p"},".sh")," file extension) on Unix, and\nPowerShell scripts (use a ",(0,a.kt)("inlineCode",{parentName:"p"},".ps1")," file extension) on Windows.")),(0,a.kt)("h3",{id:"git"},"Git"),(0,a.kt)("p",null,"On Unix based operating systems (Linux, macOS, etc), the ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," scripts are executed from\n",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks")," Bash files. Because of this, ",(0,a.kt)("inlineCode",{parentName:"p"},"bash")," should be available on the system (which is\ntypically the case)."),(0,a.kt)("p",null,"On Windows, things get tricky. Since Git has a requirement that ",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks")," files ",(0,a.kt)("em",{parentName:"p"},"must be"),"\nextensionless, and older versions of PowerShell require an extension, we have to use a workaround.\nTo handle this, the ",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks")," files are Bash-like scripts (that should work on most machines)\nthat execute ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," using the ",(0,a.kt)("inlineCode",{parentName:"p"},"powershell.exe")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"pwsh.exe"),") executables. Because of this,\nPowerShell must be available on the system."),(0,a.kt)("h2",{id:"examples"},"Examples"),(0,a.kt)("h3",{id:"pre-commit"},"Pre-commit"),(0,a.kt)("p",null,"A perfect use case for the ",(0,a.kt)("inlineCode",{parentName:"p"},"pre-commit")," hook is to check linting and formatting of the files being\ncommitted. If either of these tasks fail, the commit will abort until they are fixed. Be sure to use\nthe ",(0,a.kt)("a",{parentName:"p",href:"../run-task#running-based-on-affected-files-only"},(0,a.kt)("inlineCode",{parentName:"a"},"--affected"))," option so that we ",(0,a.kt)("em",{parentName:"p"},"only run")," on\nchanged projects!"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks:\n pre-commit:\n - 'moon run :lint :format --affected --status=staged'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"By default this will run on the ",(0,a.kt)("em",{parentName:"p"},"entire")," project (all files). If you want to filter it to only the\nchanged files, enable the ",(0,a.kt)("a",{parentName:"p",href:"../config/project#affectedfiles"},(0,a.kt)("inlineCode",{parentName:"a"},"affectedFiles"))," task option.")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/39b245d7.86f6a98f.js b/assets/js/39b245d7.86f6a98f.js deleted file mode 100644 index f3b8721cf94..00000000000 --- a/assets/js/39b245d7.86f6a98f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1042],{35318:(e,t,o)=>{o.d(t,{Zo:()=>m,kt:()=>k});var n=o(27378);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):r(r({},t),e)),o},m=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),h=p(o),k=a,d=h["".concat(l,".").concat(k)]||h[k]||c[k]||i;return o?n.createElement(d,r(r({ref:t},m),{},{components:o})):n.createElement(d,r({ref:t},m))}));function k(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,r[1]=s;for(var p=2;p<i;p++)r[p]=o[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,o)}h.displayName="MDXCreateElement"},79022:(e,t,o)=>{o.d(t,{Z:()=>i});var n=o(27378),a=o(9619);function i(e){let{header:t,inline:o,updated:i,version:r}=e;return n.createElement(a.Z,{text:`v${r}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":o?"inline-block":"ml-2"})}},9619:(e,t,o)=>{o.d(t,{Z:()=>s});var n=o(27378),a=o(40624),i=o(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:o,text:s,variant:l}=e;return n.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?r[l]:"bg-gray-100 text-gray-800",t)},o&&n.createElement(i.Z,{icon:o,className:"mr-1"}),s)}},7196:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>m});var n=o(25773),a=(o(27378),o(35318)),i=o(79022);const r={title:"VCS hooks",tags:["vcs","hooks","git","git-hooks"]},s=void 0,l={unversionedId:"guides/vcs-hooks",id:"guides/vcs-hooks",title:"VCS hooks",description:"VCS hooks (most popular with Git) are a",source:"@site/docs/guides/vcs-hooks.mdx",sourceDirName:"guides",slug:"/guides/vcs-hooks",permalink:"/docs/guides/vcs-hooks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/vcs-hooks.mdx",tags:[{label:"vcs",permalink:"/docs/tags/vcs"},{label:"hooks",permalink:"/docs/tags/hooks"},{label:"git",permalink:"/docs/tags/git"},{label:"git-hooks",permalink:"/docs/tags/git-hooks"}],version:"current",frontMatter:{title:"VCS hooks",tags:["vcs","hooks","git","git-hooks"]},sidebar:"guides",previous:{title:"Webhooks (experimental)",permalink:"/docs/guides/webhooks"},next:{title:"Deno handbook",permalink:"/docs/guides/javascript/deno-handbook"}},p={},m=[{value:"Defining hooks",id:"defining-hooks",level:2},{value:"Enabling hooks",id:"enabling-hooks",level:2},{value:"Automatically for everyone",id:"automatically-for-everyone",level:3},{value:"Manually by each developer",id:"manually-by-each-developer",level:3},{value:"Disabling hooks",id:"disabling-hooks",level:2},{value:"How it works",id:"how-it-works",level:2},{value:"Git",id:"git",level:3},{value:"Examples",id:"examples",level:2},{value:"Pre-commit",id:"pre-commit",level:3}],c={toc:m};function h(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(i.Z,{version:"1.9.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"VCS hooks (most popular with ",(0,a.kt)("a",{parentName:"p",href:"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks"},"Git"),") are a\nmechanism for running scripts at pre-defined phases in the VCS's lifecycle, most commonly\npre-commit, pre-push, or pre-merge. With moon, we provide a built-in solution for managing hooks,\nand syncing them across developers and machines."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://git-scm.com/docs/githooks"},"Learn more about Git hooks"))),(0,a.kt)("h2",{id:"defining-hooks"},"Defining hooks"),(0,a.kt)("p",null,"Hooks can be configured with the ",(0,a.kt)("a",{parentName:"p",href:"../config/workspace#hooks"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs.hooks"))," setting in\n",(0,a.kt)("a",{parentName:"p",href:"../config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". This setting requires a map of hook names (in the\nformat required by your VCS), to a list of arbitrary commands to run within the hook script.\nCommands are used as-is and are not formatted or interpolated in any way."),(0,a.kt)("p",null,"To demonstrate this, let's configure a ",(0,a.kt)("inlineCode",{parentName:"p"},"pre-commit")," hook that runs a moon ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task for affected\nprojects, and also verifies that the commit message abides by a specified format (using\n",(0,a.kt)("a",{parentName:"p",href:"https://pre-commit.com/"},"pre-commit"),")."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks:\n pre-commit:\n - 'pre-commit run'\n - 'moon run :lint --affected'\n")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"All commands are executed from the repository root (not moon's workspace root) and must exist on\n",(0,a.kt)("inlineCode",{parentName:"p"},"PATH"),". If ",(0,a.kt)("inlineCode",{parentName:"p"},"moon")," is installed locally, you can execute it using a repository relative path, like\n",(0,a.kt)("inlineCode",{parentName:"p"},"./node_modules/@moonrepo/cli/moon"),".")),(0,a.kt)("h2",{id:"enabling-hooks"},"Enabling hooks"),(0,a.kt)("p",null,"Hooks are a divisive subject, as some developers love them, and others hate them. Finding a viable\nsolution for everyone can be difficult, so with moon, we opted to support 2 distinct options, but\nonly 1 can be used at a time. Choose the option that works best for your project, team, or company!"),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"If you have existing VCS hooks, back them up as moon's implementation will overwrite them! To\nmigrate your existing hooks, ",(0,a.kt)("a",{parentName:"p",href:"#defining-hooks"},"configure them as commands to run"),".")),(0,a.kt)("h3",{id:"automatically-for-everyone"},"Automatically for everyone"),(0,a.kt)("p",null,"If you'd like hooks to be enforced for every contributor of the repository, then simply enable the\n",(0,a.kt)("a",{parentName:"p",href:"../config/workspace#synchooks"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs.syncHooks"))," setting in\n",(0,a.kt)("a",{parentName:"p",href:"../config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". This will automatically generate hook scripts and link\nthem with the local VCS checkout, everytime a ",(0,a.kt)("a",{parentName:"p",href:"../concepts/target"},"target")," is ran."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks: [...]\n syncHooks: true\n")),(0,a.kt)("h3",{id:"manually-by-each-developer"},"Manually by each developer"),(0,a.kt)("p",null,"If you'd prefer contributors to have a choice in whether or not they want to use hooks, then simply\ndo nothing, and guide them to run the ",(0,a.kt)("a",{parentName:"p",href:"../commands/sync/hooks"},(0,a.kt)("inlineCode",{parentName:"a"},"moon sync hooks"))," command. This\ncommand will generate hook scripts and link them with the local VCS checkout."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks\n")),(0,a.kt)("h2",{id:"disabling-hooks"},"Disabling hooks"),(0,a.kt)("p",null,"If you choose to stop using hooks, you'll need to cleanup the previously generated hook scripts, and\nreset the VCS checkout. To start, disable the ",(0,a.kt)("inlineCode",{parentName:"p"},"vcs.syncHooks")," setting."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n syncHooks: false\n")),(0,a.kt)("p",null,"And then run the following command, which will delete files from your local filesystem. Every\ndeveloper that is using hooks will need to run this command."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks --clean\n")),(0,a.kt)("h2",{id:"how-it-works"},"How it works"),(0,a.kt)("p",null,"When hooks are ",(0,a.kt)("a",{parentName:"p",href:"#enabling-hooks"},"enabled"),", the following processes will take place."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"The configured ",(0,a.kt)("a",{parentName:"p",href:"#defining-hooks"},"hooks")," will be generated as individual script files in the\n",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," directory. Whether or not you commit or ignore these script files is your choice.\nThey are written to the ",(0,a.kt)("inlineCode",{parentName:"p"},".moon")," directory so that they can be reviewed, audited, and easily\ntested, but ",(0,a.kt)("em",{parentName:"p"},"are required"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"We then sync these generated hook scripts with the current VCS. For Git, we create ",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks"),"\nfiles that execute our generated scripts, using repository relative commands. Any existing VCS\nhooks ",(0,a.kt)("em",{parentName:"p"},"will be overwritten"),"."))),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," scripts are generated as Bash scripts (use a ",(0,a.kt)("inlineCode",{parentName:"p"},".sh")," file extension) on Unix, and\nPowerShell scripts (use a ",(0,a.kt)("inlineCode",{parentName:"p"},".ps1")," file extension) on Windows.")),(0,a.kt)("h3",{id:"git"},"Git"),(0,a.kt)("p",null,"On Unix based operating systems (Linux, macOS, etc), the ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," scripts are executed from\n",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks")," Bash files. Because of this, ",(0,a.kt)("inlineCode",{parentName:"p"},"bash")," should be available on the system (which is\ntypically the case)."),(0,a.kt)("p",null,"On Windows, things get tricky. Since Git has a requirement that ",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks")," files ",(0,a.kt)("em",{parentName:"p"},"must be"),"\nextensionless, and older versions of PowerShell require an extension, we have to use a workaround.\nTo handle this, the ",(0,a.kt)("inlineCode",{parentName:"p"},".git/hooks")," files are Bash-like scripts (that should work on most machines)\nthat execute ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/hooks")," using the ",(0,a.kt)("inlineCode",{parentName:"p"},"powershell.exe")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"pwsh.exe"),") executables. Because of this,\nPowerShell must be available on the system."),(0,a.kt)("h2",{id:"examples"},"Examples"),(0,a.kt)("h3",{id:"pre-commit"},"Pre-commit"),(0,a.kt)("p",null,"A perfect use case for the ",(0,a.kt)("inlineCode",{parentName:"p"},"pre-commit")," hook is to check linting and formatting of the files being\ncommitted. If either of these tasks fail, the commit will abort until they are fixed. Be sure to use\nthe ",(0,a.kt)("a",{parentName:"p",href:"../run-task#running-based-on-affected-files-only"},(0,a.kt)("inlineCode",{parentName:"a"},"--affected"))," option so that we ",(0,a.kt)("em",{parentName:"p"},"only run")," on\nchanged projects!"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks:\n pre-commit:\n - 'moon run :lint :format --affected --status=staged'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"By default this will run on the ",(0,a.kt)("em",{parentName:"p"},"entire")," project (all files). If you want to filter it to only the\nchanged files, enable the ",(0,a.kt)("a",{parentName:"p",href:"../config/project#affectedfiles"},(0,a.kt)("inlineCode",{parentName:"a"},"affectedFiles"))," task option.")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3b568f5a.6f387076.js b/assets/js/3b568f5a.6f387076.js deleted file mode 100644 index eaaa7f1ea4d..00000000000 --- a/assets/js/3b568f5a.6f387076.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1756],{33759:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/pin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3b568f5a.7f727c83.js b/assets/js/3b568f5a.7f727c83.js new file mode 100644 index 00000000000..4e46f862867 --- /dev/null +++ b/assets/js/3b568f5a.7f727c83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21756],{33759:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/pin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3c3b6fb9.7595d26c.js b/assets/js/3c3b6fb9.7595d26c.js new file mode 100644 index 00000000000..ea82c0c283d --- /dev/null +++ b/assets/js/3c3b6fb9.7595d26c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86795],{20104:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/survey","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3c3b6fb9.8bda14ce.js b/assets/js/3c3b6fb9.8bda14ce.js deleted file mode 100644 index 51e2bb4ca0c..00000000000 --- a/assets/js/3c3b6fb9.8bda14ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6795],{20104:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/survey","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3d0b0327.38ef35fc.js b/assets/js/3d0b0327.38ef35fc.js deleted file mode 100644 index 79d4a847cda..00000000000 --- a/assets/js/3d0b0327.38ef35fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4969],{89035:e=>{e.exports=JSON.parse('{"label":"hasher","permalink":"/blog/tags/hasher","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/3d0b0327.a029e844.js b/assets/js/3d0b0327.a029e844.js new file mode 100644 index 00000000000..1601773732a --- /dev/null +++ b/assets/js/3d0b0327.a029e844.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44969],{89035:e=>{e.exports=JSON.parse('{"label":"hasher","permalink":"/blog/tags/hasher","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/3d4b58f3.940b9b31.js b/assets/js/3d4b58f3.940b9b31.js deleted file mode 100644 index 014f097ca37..00000000000 --- a/assets/js/3d4b58f3.940b9b31.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9094],{7579:e=>{e.exports=JSON.parse('{"label":"template","permalink":"/docs/tags/template","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/3d4b58f3.d9f38c1e.js b/assets/js/3d4b58f3.d9f38c1e.js new file mode 100644 index 00000000000..6cd6de90685 --- /dev/null +++ b/assets/js/3d4b58f3.d9f38c1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89094],{7579:e=>{e.exports=JSON.parse('{"label":"template","permalink":"/docs/tags/template","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/3db5b877.5bf08b8b.js b/assets/js/3db5b877.5bf08b8b.js deleted file mode 100644 index d28261bfc98..00000000000 --- a/assets/js/3db5b877.5bf08b8b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[252],{19354:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":21}')}}]); \ No newline at end of file diff --git a/assets/js/3db5b877.b0f4ddb0.js b/assets/js/3db5b877.b0f4ddb0.js new file mode 100644 index 00000000000..5dca4e20412 --- /dev/null +++ b/assets/js/3db5b877.b0f4ddb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10252],{19354:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":22}')}}]); \ No newline at end of file diff --git a/assets/js/3db947d3.089dad04.js b/assets/js/3db947d3.089dad04.js new file mode 100644 index 00000000000..debb34deed6 --- /dev/null +++ b/assets/js/3db947d3.089dad04.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47265],{2993:e=>{e.exports=JSON.parse('{"label":"project-graph","permalink":"/blog/tags/project-graph","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/3db947d3.882207b0.js b/assets/js/3db947d3.882207b0.js deleted file mode 100644 index 4c0c207d1e5..00000000000 --- a/assets/js/3db947d3.882207b0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7265],{2993:e=>{e.exports=JSON.parse('{"label":"project-graph","permalink":"/blog/tags/project-graph","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/3df11149.2b89504a.js b/assets/js/3df11149.2b89504a.js new file mode 100644 index 00000000000..d629dbbd6c0 --- /dev/null +++ b/assets/js/3df11149.2b89504a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69015],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function m(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),l=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=l(e.components);return o.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,s=m(e,["components","mdxType","originalType","parentName"]),u=l(r),d=n,f=u["".concat(p,".").concat(d)]||u[d]||c[d]||a;return r?o.createElement(f,i(i({ref:t},s),{},{components:r})):o.createElement(f,i({ref:t},s))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var m={};for(var p in t)hasOwnProperty.call(t,p)&&(m[p]=t[p]);m.originalType=e,m.mdxType="string"==typeof e?e:n,i[1]=m;for(var l=2;l<a;l++)i[l]=r[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},35645:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>m,toc:()=>l});var o=r(25773),n=(r(27378),r(35318));const a={title:"migrate from-turborepo",sidebar_label:"from-turborepo"},i=void 0,m={unversionedId:"commands/migrate/from-turborepo",id:"commands/migrate/from-turborepo",title:"migrate from-turborepo",description:"Use the moon migrate from-turborepo command to migrate a Turborepo powered repository to moon.",source:"@site/docs/commands/migrate/from-turborepo.mdx",sourceDirName:"commands/migrate",slug:"/commands/migrate/from-turborepo",permalink:"/docs/commands/migrate/from-turborepo",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/migrate/from-turborepo.mdx",tags:[],version:"current",frontMatter:{title:"migrate from-turborepo",sidebar_label:"from-turborepo"},sidebar:"docs",previous:{title:"from-package-json",permalink:"/docs/commands/migrate/from-package-json"},next:{title:"project",permalink:"/docs/commands/project"}},p={},l=[{value:"Caveats",id:"caveats",level:2}],s={toc:l};function c(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Use the ",(0,n.kt)("inlineCode",{parentName:"p"},"moon migrate from-turborepo")," command to migrate a Turborepo powered repository to moon.\nThis process will convert the root ",(0,n.kt)("inlineCode",{parentName:"p"},"turbo.json")," file to moon applicable configuration files:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Migrates ",(0,n.kt)("inlineCode",{parentName:"li"},"pipeline")," global tasks to ",(0,n.kt)("a",{parentName:"li",href:"../../config/tasks#tasks"},(0,n.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," and project\nscoped tasks to ",(0,n.kt)("a",{parentName:"li",href:"../../config/project#tasks"},(0,n.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,n.kt)("li",{parentName:"ul"},"Migrates ",(0,n.kt)("inlineCode",{parentName:"li"},"globalDependencies")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"globalEnv")," to\n",(0,n.kt)("a",{parentName:"li",href:"../../config/tasks#implicitinputs"},(0,n.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," (via ",(0,n.kt)("inlineCode",{parentName:"li"},"implicitInputs"),").")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon migrate from-turborepo\n")),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"moon must be ",(0,n.kt)("a",{parentName:"p",href:"../init"},"initialized")," and ",(0,n.kt)("a",{parentName:"p",href:"../../config/toolchain#node"},(0,n.kt)("inlineCode",{parentName:"a"},"node"))," must be configured in\nthe toolchain before this command is ran!"),(0,n.kt)("p",{parentName:"admonition"},"Furthermore, this process does not change existing ",(0,n.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, so if you're looking to\nmigrate them as well, use the ",(0,n.kt)("a",{parentName:"p",href:"./from-package-json"},(0,n.kt)("inlineCode",{parentName:"a"},"moon migrate from-package-json"))," command.")),(0,n.kt)("h2",{id:"caveats"},"Caveats"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"This process ",(0,n.kt)("em",{parentName:"li"},"will not")," migrate root-level Turborepo tasks (those starting with ",(0,n.kt)("inlineCode",{parentName:"li"},"//#"),"). You'll\nneed to manually create a moon ",(0,n.kt)("a",{parentName:"li",href:"../../guides/root-project"},"root-level project")," and migrate tasks.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3df11149.5fbcbd5c.js b/assets/js/3df11149.5fbcbd5c.js deleted file mode 100644 index 529e853804a..00000000000 --- a/assets/js/3df11149.5fbcbd5c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9015],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function m(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),l=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=l(e.components);return o.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,s=m(e,["components","mdxType","originalType","parentName"]),u=l(r),d=n,f=u["".concat(p,".").concat(d)]||u[d]||c[d]||a;return r?o.createElement(f,i(i({ref:t},s),{},{components:r})):o.createElement(f,i({ref:t},s))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var m={};for(var p in t)hasOwnProperty.call(t,p)&&(m[p]=t[p]);m.originalType=e,m.mdxType="string"==typeof e?e:n,i[1]=m;for(var l=2;l<a;l++)i[l]=r[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},35645:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>m,toc:()=>l});var o=r(25773),n=(r(27378),r(35318));const a={title:"migrate from-turborepo",sidebar_label:"from-turborepo"},i=void 0,m={unversionedId:"commands/migrate/from-turborepo",id:"commands/migrate/from-turborepo",title:"migrate from-turborepo",description:"Use the moon migrate from-turborepo command to migrate a Turborepo powered repository to moon.",source:"@site/docs/commands/migrate/from-turborepo.mdx",sourceDirName:"commands/migrate",slug:"/commands/migrate/from-turborepo",permalink:"/docs/commands/migrate/from-turborepo",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/migrate/from-turborepo.mdx",tags:[],version:"current",frontMatter:{title:"migrate from-turborepo",sidebar_label:"from-turborepo"},sidebar:"docs",previous:{title:"from-package-json",permalink:"/docs/commands/migrate/from-package-json"},next:{title:"project",permalink:"/docs/commands/project"}},p={},l=[{value:"Caveats",id:"caveats",level:2}],s={toc:l};function c(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Use the ",(0,n.kt)("inlineCode",{parentName:"p"},"moon migrate from-turborepo")," command to migrate a Turborepo powered repository to moon.\nThis process will convert the root ",(0,n.kt)("inlineCode",{parentName:"p"},"turbo.json")," file to moon applicable configuration files:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Migrates ",(0,n.kt)("inlineCode",{parentName:"li"},"pipeline")," global tasks to ",(0,n.kt)("a",{parentName:"li",href:"../../config/tasks#tasks"},(0,n.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," and project\nscoped tasks to ",(0,n.kt)("a",{parentName:"li",href:"../../config/project#tasks"},(0,n.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,n.kt)("li",{parentName:"ul"},"Migrates ",(0,n.kt)("inlineCode",{parentName:"li"},"globalDependencies")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"globalEnv")," to\n",(0,n.kt)("a",{parentName:"li",href:"../../config/tasks#implicitinputs"},(0,n.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," (via ",(0,n.kt)("inlineCode",{parentName:"li"},"implicitInputs"),").")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon migrate from-turborepo\n")),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"moon must be ",(0,n.kt)("a",{parentName:"p",href:"../init"},"initialized")," and ",(0,n.kt)("a",{parentName:"p",href:"../../config/toolchain#node"},(0,n.kt)("inlineCode",{parentName:"a"},"node"))," must be configured in\nthe toolchain before this command is ran!"),(0,n.kt)("p",{parentName:"admonition"},"Furthermore, this process does not change existing ",(0,n.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, so if you're looking to\nmigrate them as well, use the ",(0,n.kt)("a",{parentName:"p",href:"./from-package-json"},(0,n.kt)("inlineCode",{parentName:"a"},"moon migrate from-package-json"))," command.")),(0,n.kt)("h2",{id:"caveats"},"Caveats"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"This process ",(0,n.kt)("em",{parentName:"li"},"will not")," migrate root-level Turborepo tasks (those starting with ",(0,n.kt)("inlineCode",{parentName:"li"},"//#"),"). You'll\nneed to manually create a moon ",(0,n.kt)("a",{parentName:"li",href:"../../guides/root-project"},"root-level project")," and migrate tasks.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3e1aa1b6.3d556467.js b/assets/js/3e1aa1b6.3d556467.js new file mode 100644 index 00000000000..567a4d68bbf --- /dev/null +++ b/assets/js/3e1aa1b6.3d556467.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26051],{46540:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/init","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3e1aa1b6.93dbce9d.js b/assets/js/3e1aa1b6.93dbce9d.js deleted file mode 100644 index d6e134ede8e..00000000000 --- a/assets/js/3e1aa1b6.93dbce9d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6051],{46540:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/init","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3e7d7789.3cf07ea7.js b/assets/js/3e7d7789.3cf07ea7.js deleted file mode 100644 index eda152dcecc..00000000000 --- a/assets/js/3e7d7789.3cf07ea7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2108],{83828:(e,t,n)=>{n.d(t,{ZP:()=>s,gE:()=>i});var a=n(27378),r=n(35331);const o=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function l(){return"undefined"!=typeof window&&"localStorage"in window}function c(){return(l()?localStorage.getItem("moonrepo.language"):null)??"node"}function i(){const[e,t]=(0,a.useState)(c());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function s(){const[e,t]=(0,a.useState)(c()),n=(0,r.TH)(),i=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),l())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return o.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:i,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},78372:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(27378),r=n(45161),o=n(8862),l=n(98948),c=n(83469),i=n(83828),s=n(31792),m=n(90728),u=n(30658);function d(e){let{active:t,children:n,href:r}=e;return r?a.createElement(m.Z,{"aria-current":t?"page":void 0,href:r,itemProp:"item",size:"sm",variant:"muted",weight:"medium"},a.createElement("span",{itemProp:"name"},n)):a.createElement(u.ZP,{"aria-current":t?"page":void 0,as:"span",itemProp:"item name",size:"sm",variant:"muted",weight:"medium",className:"m-0"},n)}function p(e){let{children:t,index:n}=e;return a.createElement("li",{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},a.createElement("div",{className:"flex items-center"},a.createElement(s.Z,{icon:c.yOZ,className:"flex-shrink-0 text-gray-600 mr-2","aria-hidden":"true"}),t,a.createElement("meta",{itemProp:"position",content:String(n+1)})))}function g(){const e=(0,l.Z)("/");return a.createElement("li",null,a.createElement(m.Z,{href:e,variant:"muted"},a.createElement(s.Z,{icon:c.yGT,className:"flex-shrink-0","aria-hidden":"true"}),a.createElement("span",{className:"sr-only"},"Home")))}function h(){const e=(0,r.s1)(),t=(0,o.Ns)();return e?a.createElement(a.Fragment,null,a.createElement("span",{className:"float-right ml-2"},a.createElement(i.ZP,null)),a.createElement("nav",{className:"flex pl-1 mb-2","aria-label":"Breadcrumb"},a.createElement("ol",{role:"list",className:"list-none p-0 m-0 flex items-center space-x-2",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(g,null),e.map(((t,n)=>a.createElement(p,{key:n,index:n},a.createElement(d,{href:n<e.length?t.href:void 0,active:n===e.length-1},t.label))))))):null}},44022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),o=n(83469),l=n(31792),c=n(90728);function i(e){let{permalink:t,title:n,isNext:i}=e;return a.createElement("div",{className:(0,r.Z)("flex-1",i?"text-right":"text-left")},a.createElement(c.Z,{weight:"bold",to:t},!i&&a.createElement(l.Z,{className:"mr-1 icon-previous",icon:o.A35}),n,i&&a.createElement(l.Z,{className:"ml-1 icon-next",icon:o._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/3e7d7789.d2dca79d.js b/assets/js/3e7d7789.d2dca79d.js new file mode 100644 index 00000000000..a4f40271e66 --- /dev/null +++ b/assets/js/3e7d7789.d2dca79d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22108],{83828:(e,t,n)=>{n.d(t,{ZP:()=>s,gE:()=>i});var a=n(27378),r=n(35331);const o=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function l(){return"undefined"!=typeof window&&"localStorage"in window}function c(){return(l()?localStorage.getItem("moonrepo.language"):null)??"node"}function i(){const[e,t]=(0,a.useState)(c());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function s(){const[e,t]=(0,a.useState)(c()),n=(0,r.TH)(),i=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),l())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return o.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:i,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},78372:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(27378),r=n(45161),o=n(8862),l=n(98948),c=n(83469),i=n(83828),s=n(31792),m=n(90728),u=n(30658);function d(e){let{active:t,children:n,href:r}=e;return r?a.createElement(m.Z,{"aria-current":t?"page":void 0,href:r,itemProp:"item",size:"sm",variant:"muted",weight:"medium"},a.createElement("span",{itemProp:"name"},n)):a.createElement(u.ZP,{"aria-current":t?"page":void 0,as:"span",itemProp:"item name",size:"sm",variant:"muted",weight:"medium",className:"m-0"},n)}function p(e){let{children:t,index:n}=e;return a.createElement("li",{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},a.createElement("div",{className:"flex items-center"},a.createElement(s.Z,{icon:c.yOZ,className:"flex-shrink-0 text-gray-600 mr-2","aria-hidden":"true"}),t,a.createElement("meta",{itemProp:"position",content:String(n+1)})))}function g(){const e=(0,l.Z)("/");return a.createElement("li",null,a.createElement(m.Z,{href:e,variant:"muted"},a.createElement(s.Z,{icon:c.yGT,className:"flex-shrink-0","aria-hidden":"true"}),a.createElement("span",{className:"sr-only"},"Home")))}function h(){const e=(0,r.s1)(),t=(0,o.Ns)();return e?a.createElement(a.Fragment,null,a.createElement("span",{className:"float-right ml-2"},a.createElement(i.ZP,null)),a.createElement("nav",{className:"flex pl-1 mb-2","aria-label":"Breadcrumb"},a.createElement("ol",{role:"list",className:"list-none p-0 m-0 flex items-center space-x-2",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(g,null),e.map(((t,n)=>a.createElement(p,{key:n,index:n},a.createElement(d,{href:n<e.length?t.href:void 0,active:n===e.length-1},t.label))))))):null}},44022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),o=n(83469),l=n(31792),c=n(90728);function i(e){let{permalink:t,title:n,isNext:i}=e;return a.createElement("div",{className:(0,r.Z)("flex-1",i?"text-right":"text-left")},a.createElement(c.Z,{weight:"bold",to:t},!i&&a.createElement(l.Z,{className:"mr-1 icon-previous",icon:o.A35}),n,i&&a.createElement(l.Z,{className:"ml-1 icon-next",icon:o._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/3f2d0a0e.8cc7f732.js b/assets/js/3f2d0a0e.8cc7f732.js deleted file mode 100644 index 268dc0a6415..00000000000 --- a/assets/js/3f2d0a0e.8cc7f732.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6336],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=o,g=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(g,i(i({ref:t},p),{},{components:r})):n.createElement(g,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:a,align:i="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:o,title:a,className:"inline-block"}))}},41510:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));r(88109);const a={slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},i=void 0,l={permalink:"/blog/v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-13_v0.14.mdx",source:"@site/blog/2022-09-13_v0.14.mdx",title:"moon v0.14 - Code generation and implicit dependencies",description:"With this release, we've landed some new features that have been requested multiple times since",date:"2022-09-13T00:00:00.000Z",formattedDate:"September 13, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"ci",permalink:"/blog/tags/ci"}],readingTime:1.715,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},prevItem:{title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",permalink:"/blog/v0.15"},nextItem:{title:"moon v0.13 - Hashing and toolchain improvements",permalink:"/blog/v0.13"}},c={authorsImageUrls:[void 0]},s=[],p={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've landed some new features that have been requested multiple times since\nlaunch. A code generation and template scaffolding layer, as well as implicit dependency scanning\nfor the project graph!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3f2d0a0e.eabd15a7.js b/assets/js/3f2d0a0e.eabd15a7.js new file mode 100644 index 00000000000..aaf4237ea3f --- /dev/null +++ b/assets/js/3f2d0a0e.eabd15a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56336],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=o,g=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(g,i(i({ref:t},p),{},{components:r})):n.createElement(g,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:a,align:i="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:o,title:a,className:"inline-block"}))}},41510:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));r(88109);const a={slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},i=void 0,l={permalink:"/blog/v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-13_v0.14.mdx",source:"@site/blog/2022-09-13_v0.14.mdx",title:"moon v0.14 - Code generation and implicit dependencies",description:"With this release, we've landed some new features that have been requested multiple times since",date:"2022-09-13T00:00:00.000Z",formattedDate:"September 13, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"ci",permalink:"/blog/tags/ci"}],readingTime:1.715,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},prevItem:{title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",permalink:"/blog/v0.15"},nextItem:{title:"moon v0.13 - Hashing and toolchain improvements",permalink:"/blog/v0.13"}},c={authorsImageUrls:[void 0]},s=[],p={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've landed some new features that have been requested multiple times since\nlaunch. A code generation and template scaffolding layer, as well as implicit dependency scanning\nfor the project graph!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3f5148d4.94136e5c.js b/assets/js/3f5148d4.94136e5c.js new file mode 100644 index 00000000000..f5ab71d85f3 --- /dev/null +++ b/assets/js/3f5148d4.94136e5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29754],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,k=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return n?a.createElement(k,s(s({ref:t},c),{},{components:n})):a.createElement(k,s({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=u;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,s[1]=o;for(var p=2;p<i;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{header:t,inline:n,updated:i,version:s}=e;return a.createElement(r.Z,{text:`v${s}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:l}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?s[l]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},82718:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),i=n(79022);const s={title:"Tasks"},o=void 0,l={unversionedId:"concepts/task",id:"concepts/task",title:"Tasks",description:"Tasks are commands that are ran in the context of a project. Underneath the hood, a",source:"@site/docs/concepts/task.mdx",sourceDirName:"concepts",slug:"/concepts/task",permalink:"/docs/concepts/task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/task.mdx",tags:[],version:"current",frontMatter:{title:"Tasks"},sidebar:"docs",previous:{title:"Targets",permalink:"/docs/concepts/target"},next:{title:"Task inheritance",permalink:"/docs/concepts/task-inheritance"}},p={},c=[{value:"Names",id:"names",level:2},{value:"Types",id:"types",level:2},{value:"Modes",id:"modes",level:2},{value:"Local only",id:"local-only",level:3},{value:'Interactive<VersionLabel version="1.12.0" />',id:"interactive",level:3},{value:'Persistent<VersionLabel version="1.6.0" />',id:"persistent",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Inheritance",id:"inheritance",level:3}],m={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Tasks are commands that are ran in the context of a ",(0,r.kt)("a",{parentName:"p",href:"./project"},"project"),". Underneath the hood, a\ntask is simply a binary or system command that is ran as a child process."),(0,r.kt)("h2",{id:"names"},"Names"),(0,r.kt)("p",null,"A task name (or identifier) is a unique resource for locating a task ",(0,r.kt)("em",{parentName:"p"},"within")," a project. The name is\nexplicitly configured as a key within the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#tasks"},(0,r.kt)("inlineCode",{parentName:"a"},"tasks"))," setting, and can be\nwritten in camel/kebab/snake case. Names support ",(0,r.kt)("inlineCode",{parentName:"p"},"a-z"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"A-Z"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"0-9"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"_"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"-"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"/"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"."),", and must\nstart with a character."),(0,r.kt)("p",null,"A task name can be paired with a scope to create a ",(0,r.kt)("a",{parentName:"p",href:"./target"},"target"),"."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"Tasks are grouped into 1 of the following types based on their configured parameters."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Build")," - Task generates one or many artifacts, and is derived from the\n",(0,r.kt)("a",{parentName:"li",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs"))," setting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Run")," - Task runs a one-off, long-running, or never-ending process, and is derived from the\n",(0,r.kt)("a",{parentName:"li",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," setting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Test")," - Task asserts code is correct and behaves as expected. This includes linting,\ntypechecking, unit tests, and any other form of testing. Is the default.")),(0,r.kt)("h2",{id:"modes"},"Modes"),(0,r.kt)("p",null,"Alongside types, tasks can also grouped into a special mode that provides unique handling within the\naction graph and pipelines."),(0,r.kt)("h3",{id:"local-only"},"Local only"),(0,r.kt)("p",null,"Tasks either run locally, in CI (continuous integration pipelines), or both. For tasks that should\n",(0,r.kt)("em",{parentName:"p"},"only")," be ran locally, for example, development servers and watchers, we provide a mechanism for\nmarking a task as local only. When enabled, caching is turned off, the task will not run in CI,\nterminal output is not captured, and the task is marked as ",(0,r.kt)("a",{parentName:"p",href:"#persistent"},"persistent"),"."),(0,r.kt)("p",null,"To mark a task as local only, enable the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," setting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'start-dev-server'\n local: true\n")),(0,r.kt)("h3",{id:"interactive"},"Interactive",(0,r.kt)(i.Z,{version:"1.12.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Tasks that need to interact with the user via terminal prompts are known as interactive tasks.\nBecause interactive tasks require stdin, and it's not possible to have multiple parallel running\ntasks interact with stdin, we isolate interactive tasks from other tasks in the action graph. This\nensures that only 1 interactive task is ran at a time."),(0,r.kt)("p",null,"To mark a task as interactive, enable the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#interactive"},(0,r.kt)("inlineCode",{parentName:"a"},"options.interactive")),"\nsetting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n init:\n command: 'init-app'\n options:\n interactive: true\n")),(0,r.kt)("h3",{id:"persistent"},"Persistent",(0,r.kt)(i.Z,{version:"1.6.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Tasks that never complete, like servers and watchers, are known as persistent tasks. Persistent\ntasks are typically problematic when it comes to dependency graphs, because if they run in the\nmiddle of the graph, subsequent tasks will never run because the persistent task never completes!"),(0,r.kt)("p",null,"However in moon, this is a non-issue, as we collect all persistent tasks within the action graph and\nrun them ",(0,r.kt)("em",{parentName:"p"},"last as a batch"),". This is perfect for a few reasons:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All persistent tasks are ran in parallel, so they don't block each other."),(0,r.kt)("li",{parentName:"ul"},"Running both the backend API and frontend webapp in parallel is a breeze."),(0,r.kt)("li",{parentName:"ul"},"Dependencies of persistent tasks are guaranteed to have ran and completed.")),(0,r.kt)("p",null,"To mark a task as persistent, enable the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," or\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#persistent"},(0,r.kt)("inlineCode",{parentName:"a"},"options.persistent"))," settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'start-dev-server'\n local: true\n # OR\n options:\n persistent: true\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"Tasks can be configured per project through ",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),", or for many projects\nthrough ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),"."),(0,r.kt)("h3",{id:"inheritance"},"Inheritance"),(0,r.kt)("p",null,"View the official documentation on ",(0,r.kt)("a",{parentName:"p",href:"./task-inheritance"},"task inheritance"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3f5148d4.a6030c79.js b/assets/js/3f5148d4.a6030c79.js deleted file mode 100644 index f3bf5feee52..00000000000 --- a/assets/js/3f5148d4.a6030c79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9754],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,k=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return n?a.createElement(k,s(s({ref:t},c),{},{components:n})):a.createElement(k,s({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=u;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,s[1]=o;for(var p=2;p<i;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{header:t,inline:n,updated:i,version:s}=e;return a.createElement(r.Z,{text:`v${s}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:l}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?s[l]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},82718:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),i=n(79022);const s={title:"Tasks"},o=void 0,l={unversionedId:"concepts/task",id:"concepts/task",title:"Tasks",description:"Tasks are commands that are ran in the context of a project. Underneath the hood, a",source:"@site/docs/concepts/task.mdx",sourceDirName:"concepts",slug:"/concepts/task",permalink:"/docs/concepts/task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/task.mdx",tags:[],version:"current",frontMatter:{title:"Tasks"},sidebar:"docs",previous:{title:"Targets",permalink:"/docs/concepts/target"},next:{title:"Task inheritance",permalink:"/docs/concepts/task-inheritance"}},p={},c=[{value:"Names",id:"names",level:2},{value:"Types",id:"types",level:2},{value:"Modes",id:"modes",level:2},{value:"Local only",id:"local-only",level:3},{value:'Interactive<VersionLabel version="1.12.0" />',id:"interactive",level:3},{value:'Persistent<VersionLabel version="1.6.0" />',id:"persistent",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Inheritance",id:"inheritance",level:3}],m={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Tasks are commands that are ran in the context of a ",(0,r.kt)("a",{parentName:"p",href:"./project"},"project"),". Underneath the hood, a\ntask is simply a binary or system command that is ran as a child process."),(0,r.kt)("h2",{id:"names"},"Names"),(0,r.kt)("p",null,"A task name (or identifier) is a unique resource for locating a task ",(0,r.kt)("em",{parentName:"p"},"within")," a project. The name is\nexplicitly configured as a key within the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#tasks"},(0,r.kt)("inlineCode",{parentName:"a"},"tasks"))," setting, and can be\nwritten in camel/kebab/snake case. Names support ",(0,r.kt)("inlineCode",{parentName:"p"},"a-z"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"A-Z"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"0-9"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"_"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"-"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"/"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"."),", and must\nstart with a character."),(0,r.kt)("p",null,"A task name can be paired with a scope to create a ",(0,r.kt)("a",{parentName:"p",href:"./target"},"target"),"."),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"Tasks are grouped into 1 of the following types based on their configured parameters."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Build")," - Task generates one or many artifacts, and is derived from the\n",(0,r.kt)("a",{parentName:"li",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs"))," setting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Run")," - Task runs a one-off, long-running, or never-ending process, and is derived from the\n",(0,r.kt)("a",{parentName:"li",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," setting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Test")," - Task asserts code is correct and behaves as expected. This includes linting,\ntypechecking, unit tests, and any other form of testing. Is the default.")),(0,r.kt)("h2",{id:"modes"},"Modes"),(0,r.kt)("p",null,"Alongside types, tasks can also grouped into a special mode that provides unique handling within the\naction graph and pipelines."),(0,r.kt)("h3",{id:"local-only"},"Local only"),(0,r.kt)("p",null,"Tasks either run locally, in CI (continuous integration pipelines), or both. For tasks that should\n",(0,r.kt)("em",{parentName:"p"},"only")," be ran locally, for example, development servers and watchers, we provide a mechanism for\nmarking a task as local only. When enabled, caching is turned off, the task will not run in CI,\nterminal output is not captured, and the task is marked as ",(0,r.kt)("a",{parentName:"p",href:"#persistent"},"persistent"),"."),(0,r.kt)("p",null,"To mark a task as local only, enable the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," setting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'start-dev-server'\n local: true\n")),(0,r.kt)("h3",{id:"interactive"},"Interactive",(0,r.kt)(i.Z,{version:"1.12.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Tasks that need to interact with the user via terminal prompts are known as interactive tasks.\nBecause interactive tasks require stdin, and it's not possible to have multiple parallel running\ntasks interact with stdin, we isolate interactive tasks from other tasks in the action graph. This\nensures that only 1 interactive task is ran at a time."),(0,r.kt)("p",null,"To mark a task as interactive, enable the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#interactive"},(0,r.kt)("inlineCode",{parentName:"a"},"options.interactive")),"\nsetting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n init:\n command: 'init-app'\n options:\n interactive: true\n")),(0,r.kt)("h3",{id:"persistent"},"Persistent",(0,r.kt)(i.Z,{version:"1.6.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Tasks that never complete, like servers and watchers, are known as persistent tasks. Persistent\ntasks are typically problematic when it comes to dependency graphs, because if they run in the\nmiddle of the graph, subsequent tasks will never run because the persistent task never completes!"),(0,r.kt)("p",null,"However in moon, this is a non-issue, as we collect all persistent tasks within the action graph and\nrun them ",(0,r.kt)("em",{parentName:"p"},"last as a batch"),". This is perfect for a few reasons:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All persistent tasks are ran in parallel, so they don't block each other."),(0,r.kt)("li",{parentName:"ul"},"Running both the backend API and frontend webapp in parallel is a breeze."),(0,r.kt)("li",{parentName:"ul"},"Dependencies of persistent tasks are guaranteed to have ran and completed.")),(0,r.kt)("p",null,"To mark a task as persistent, enable the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," or\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#persistent"},(0,r.kt)("inlineCode",{parentName:"a"},"options.persistent"))," settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'start-dev-server'\n local: true\n # OR\n options:\n persistent: true\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"Tasks can be configured per project through ",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),", or for many projects\nthrough ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),"."),(0,r.kt)("h3",{id:"inheritance"},"Inheritance"),(0,r.kt)("p",null,"View the official documentation on ",(0,r.kt)("a",{parentName:"p",href:"./task-inheritance"},"task inheritance"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3f885d22.a2376509.js b/assets/js/3f885d22.a2376509.js new file mode 100644 index 00000000000..3b7dda9030b --- /dev/null +++ b/assets/js/3f885d22.a2376509.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51684],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=p(n),c=r,g=m["".concat(s,".").concat(c)]||m[c]||d[c]||i;return n?o.createElement(g,a(a({ref:t},u),{},{components:n})):o.createElement(g,a({ref:t},u))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p<i;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},24053:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const i={slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},a=void 0,l={permalink:"/blog/proto-v0.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx",source:"@site/blog/2023-03-15_proto-v0.3.mdx",title:"proto v0.3 - Improved npm, go, and version requirement support",description:"With this release, we're improving some workflows and version detection logic based on initial",date:"2023-03-15T00:00:00.000Z",formattedDate:"March 15, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"npm",permalink:"/blog/tags/npm"},{label:"go",permalink:"/blog/tags/go"}],readingTime:1.395,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},prevItem:{title:"moon v1.0 - Official release! Project constraints, tagging, and more!",permalink:"/blog/moon-v1.0"},nextItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"}},s={image:n(11794).Z,authorsImageUrls:[void 0]},p=[{value:"Bundled npm support",id:"bundled-npm-support",level:2},{value:"Automatic <code>GOBIN</code> setup",id:"automatic-gobin-setup",level:2},{value:"Better version requirement detection",id:"better-version-requirement-detection",level:2}],u={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're improving some workflows and version detection logic based on initial\nfeedback."),(0,r.kt)("h2",{id:"bundled-npm-support"},"Bundled npm support"),(0,r.kt)("p",null,"After Node.js is installed, the version of npm that came bundled with that Node.js version will also\nbe installed into proto. This functionality can be skipped by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--no-bundled-npm")," during\ninstallation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install node -- --no-bundled-npm\n")),(0,r.kt)("p",null,"To further expand upon this, ",(0,r.kt)("inlineCode",{parentName:"p"},"bundled")," is now considered a built-in alias, and will be used during\nversion detection. When encountered, we'll first detect the version of Node.js running, and infer\nthe npm version from there."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto global npm bundled\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Only supported by proto, not moon.")),(0,r.kt)("h2",{id:"automatic-gobin-setup"},"Automatic ",(0,r.kt)("inlineCode",{parentName:"h2"},"GOBIN")," setup"),(0,r.kt)("p",null,"After Go is installed, we'll now inject a ",(0,r.kt)("inlineCode",{parentName:"p"},"GOBIN")," environment variable into your shell, pointing to\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/go/bin"),", if it doesn't already exist. This variable will be used to locate Go binaries across all\ninstalled versions, and help to avoid binary not found errors."),(0,r.kt)("p",null,"This functionality can be skipped by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--no-gobin")," during installation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install go -- --no-gobin\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Only supported by proto, not moon.")),(0,r.kt)("h2",{id:"better-version-requirement-detection"},"Better version requirement detection"),(0,r.kt)("p",null,"Previously when proto encounted a version requirement (",(0,r.kt)("inlineCode",{parentName:"p"},"^"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"~"),", ",(0,r.kt)("inlineCode",{parentName:"p"},">="),", etc) during version\ndetection, we would attempt to resolve a version that satisfied the requirement based on versions\navailable in the remote manifest (what's been officially released). While this worked, it would\nresult in far too many local installs as that satisfied version constantly changed."),(0,r.kt)("p",null,"Instead, we now satisfy the version requirement based on versions that have been installed locally\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools"),". If no version matches, detection will simply move on to the next case, and\neventually fallback to the global default version."))}d.isMDXComponent=!0},11794:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.3-327da652b09512c04488c3e94ae70c17.png"}}]); \ No newline at end of file diff --git a/assets/js/3f885d22.e3954697.js b/assets/js/3f885d22.e3954697.js deleted file mode 100644 index 3c46669fa80..00000000000 --- a/assets/js/3f885d22.e3954697.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1684],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=p(n),c=r,g=m["".concat(s,".").concat(c)]||m[c]||d[c]||i;return n?o.createElement(g,a(a({ref:t},u),{},{components:n})):o.createElement(g,a({ref:t},u))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p<i;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},24053:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const i={slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},a=void 0,l={permalink:"/blog/proto-v0.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx",source:"@site/blog/2023-03-15_proto-v0.3.mdx",title:"proto v0.3 - Improved npm, go, and version requirement support",description:"With this release, we're improving some workflows and version detection logic based on initial",date:"2023-03-15T00:00:00.000Z",formattedDate:"March 15, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"npm",permalink:"/blog/tags/npm"},{label:"go",permalink:"/blog/tags/go"}],readingTime:1.395,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.3",title:"proto v0.3 - Improved npm, go, and version requirement support",authors:["milesj"],tags:["proto","npm","go"],image:"./img/proto/v0.3.png"},prevItem:{title:"moon v1.0 - Official release! Project constraints, tagging, and more!",permalink:"/blog/moon-v1.0"},nextItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"}},s={image:n(11794).Z,authorsImageUrls:[void 0]},p=[{value:"Bundled npm support",id:"bundled-npm-support",level:2},{value:"Automatic <code>GOBIN</code> setup",id:"automatic-gobin-setup",level:2},{value:"Better version requirement detection",id:"better-version-requirement-detection",level:2}],u={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're improving some workflows and version detection logic based on initial\nfeedback."),(0,r.kt)("h2",{id:"bundled-npm-support"},"Bundled npm support"),(0,r.kt)("p",null,"After Node.js is installed, the version of npm that came bundled with that Node.js version will also\nbe installed into proto. This functionality can be skipped by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--no-bundled-npm")," during\ninstallation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install node -- --no-bundled-npm\n")),(0,r.kt)("p",null,"To further expand upon this, ",(0,r.kt)("inlineCode",{parentName:"p"},"bundled")," is now considered a built-in alias, and will be used during\nversion detection. When encountered, we'll first detect the version of Node.js running, and infer\nthe npm version from there."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto global npm bundled\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Only supported by proto, not moon.")),(0,r.kt)("h2",{id:"automatic-gobin-setup"},"Automatic ",(0,r.kt)("inlineCode",{parentName:"h2"},"GOBIN")," setup"),(0,r.kt)("p",null,"After Go is installed, we'll now inject a ",(0,r.kt)("inlineCode",{parentName:"p"},"GOBIN")," environment variable into your shell, pointing to\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/go/bin"),", if it doesn't already exist. This variable will be used to locate Go binaries across all\ninstalled versions, and help to avoid binary not found errors."),(0,r.kt)("p",null,"This functionality can be skipped by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--no-gobin")," during installation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install go -- --no-gobin\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Only supported by proto, not moon.")),(0,r.kt)("h2",{id:"better-version-requirement-detection"},"Better version requirement detection"),(0,r.kt)("p",null,"Previously when proto encounted a version requirement (",(0,r.kt)("inlineCode",{parentName:"p"},"^"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"~"),", ",(0,r.kt)("inlineCode",{parentName:"p"},">="),", etc) during version\ndetection, we would attempt to resolve a version that satisfied the requirement based on versions\navailable in the remote manifest (what's been officially released). While this worked, it would\nresult in far too many local installs as that satisfied version constantly changed."),(0,r.kt)("p",null,"Instead, we now satisfy the version requirement based on versions that have been installed locally\nto ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools"),". If no version matches, detection will simply move on to the next case, and\neventually fallback to the global default version."))}d.isMDXComponent=!0},11794:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.3-327da652b09512c04488c3e94ae70c17.png"}}]); \ No newline at end of file diff --git a/assets/js/3fc19409.59395fb8.js b/assets/js/3fc19409.59395fb8.js deleted file mode 100644 index 16b6ab5735a..00000000000 --- a/assets/js/3fc19409.59395fb8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[735],{54867:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/schema","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3fc19409.a8d36788.js b/assets/js/3fc19409.a8d36788.js new file mode 100644 index 00000000000..8ef20dbfbdf --- /dev/null +++ b/assets/js/3fc19409.a8d36788.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20735],{54867:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/schema","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/405d593f.3e4dacad.js b/assets/js/405d593f.3e4dacad.js deleted file mode 100644 index bbcccd39b1d..00000000000 --- a/assets/js/405d593f.3e4dacad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1812],{35318:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>d});var n=a(27378);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,l=function(e,t){if(null==e)return{};var a,n,l={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(a),d=l,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||r;return a?n.createElement(k,s(s({ref:t},c),{},{components:a})):n.createElement(k,s({ref:t},c))}));function d(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,s=new Array(r);s[0]=m;var o={};for(var i in t)hasOwnProperty.call(t,i)&&(o[i]=t[i]);o.originalType=e,o.mdxType="string"==typeof e?e:l,s[1]=o;for(var p=2;p<r;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},77565:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>i,metadata:()=>c,toc:()=>m});var n=a(25773),l=a(27378),r=a(35318),s=a(40624);function o(e){let{children:t,count:a}=e;return l.createElement("section",{className:(0,s.Z)("sm:grid gap-3",2===a&&"grid-cols-2",3===a&&"grid-cols-3")},t)}const i={title:"Cheat sheet",toc_max_heading_level:4},p=void 0,c={unversionedId:"cheat-sheet",id:"cheat-sheet",title:"Cheat sheet",description:"Don't have time to read the docs? Here's a quick cheat sheet to get you started.",source:"@site/docs/cheat-sheet.mdx",sourceDirName:".",slug:"/cheat-sheet",permalink:"/docs/cheat-sheet",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/cheat-sheet.mdx",tags:[],version:"current",frontMatter:{title:"Cheat sheet",toc_max_heading_level:4},sidebar:"docs",previous:{title:"upgrade",permalink:"/docs/commands/upgrade"},next:{title:"Feature comparison",permalink:"/docs/comparison"}},u={},m=[{value:"Tasks",id:"tasks",level:2},{value:"Run all build and test tasks for all projects",id:"run-all-build-and-test-tasks-for-all-projects",level:4},{value:"Run all build and test tasks in a project",id:"run-all-build-and-test-tasks-in-a-project",level:4},{value:"Run all build and test tasks for closest project based on working directory",id:"run-all-build-and-test-tasks-for-closest-project-based-on-working-directory",level:4},{value:"Run a task in all projects",id:"run-a-task-in-all-projects",level:4},{value:"Run a task in all projects with a tag",id:"run-a-task-in-all-projects-with-a-tag",level:4},{value:"Run a task in a project",id:"run-a-task-in-a-project",level:4},{value:"Run multiple tasks in all projects",id:"run-multiple-tasks-in-all-projects",level:4},{value:"Run multiple tasks in any project",id:"run-multiple-tasks-in-any-project",level:4},{value:"Run a task in applications, libraries, or tools",id:"run-a-task-in-applications-libraries-or-tools",level:4},{value:"Run a task in projects of a specific language",id:"run-a-task-in-projects-of-a-specific-language",level:4},{value:"Run a task in projects matching a keyword",id:"run-a-task-in-projects-matching-a-keyword",level:4},{value:"Run a task in projects based on file path",id:"run-a-task-in-projects-based-on-file-path",level:4},{value:"Task configuration",id:"task-configuration",level:2},{value:"Disable caching",id:"disable-caching",level:4},{value:"Re-run flaky tasks",id:"re-run-flaky-tasks",level:4},{value:"Depend on tasks from parent project's dependencies",id:"depend-on-tasks-from-parent-projects-dependencies",level:4},{value:"Depend on tasks from arbitrary projects",id:"depend-on-tasks-from-arbitrary-projects",level:4},{value:"Run dependencies serially",id:"run-dependencies-serially",level:4},{value:"Run multiple watchers/servers in parallel",id:"run-multiple-watchersservers-in-parallel",level:4},{value:"Languages",id:"languages",level:2},{value:"Run system binaries available on <code>PATH</code>",id:"run-system-binaries-available-on-path",level:4},{value:"Run language binaries not supported in moon's toolchain",id:"run-language-binaries-not-supported-in-moons-toolchain",level:4},{value:"Run npm binaries (Node.js)",id:"run-npm-binaries-nodejs",level:4}],d={toc:m};function k(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Don't have time to read the docs? Here's a quick cheat sheet to get you started."),(0,r.kt)("h2",{id:"tasks"},"Tasks"),(0,r.kt)("p",null,"Learn more about ",(0,r.kt)("a",{parentName:"p",href:"./concepts/task"},"tasks")," and ",(0,r.kt)("a",{parentName:"p",href:"./concepts/target"},"targets"),"."),(0,r.kt)("h4",{id:"run-all-build-and-test-tasks-for-all-projects"},"Run all build and test tasks for all projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon check --all\n")),(0,r.kt)("h4",{id:"run-all-build-and-test-tasks-in-a-project"},"Run all build and test tasks in a project"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon check project\n")),(0,r.kt)("h4",{id:"run-all-build-and-test-tasks-for-closest-project-based-on-working-directory"},"Run all build and test tasks for closest project based on working directory"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon check\n")),(0,r.kt)("h4",{id:"run-a-task-in-all-projects"},"Run a task in all projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run :task\n")),(0,r.kt)("h4",{id:"run-a-task-in-all-projects-with-a-tag"},"Run a task in all projects with a tag"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run '#tag:task'\n# OR\nmoon run \\#tag:task\n# OR\nmoon run :task --query \"tag=tag\"\n")),(0,r.kt)("h4",{id:"run-a-task-in-a-project"},"Run a task in a project"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run project:task\n")),(0,r.kt)("h4",{id:"run-multiple-tasks-in-all-projects"},"Run multiple tasks in all projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run :task1 :task2\n")),(0,r.kt)("h4",{id:"run-multiple-tasks-in-any-project"},"Run multiple tasks in any project"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run projecta:task1 projectb:task2\n")),(0,r.kt)("h4",{id:"run-a-task-in-applications-libraries-or-tools"},"Run a task in applications, libraries, or tools"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "projectType=application"\n')),(0,r.kt)("h4",{id:"run-a-task-in-projects-of-a-specific-language"},"Run a task in projects of a specific language"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "language=typescript"\n')),(0,r.kt)("h4",{id:"run-a-task-in-projects-matching-a-keyword"},"Run a task in projects matching a keyword"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "project~react-*"\n')),(0,r.kt)("h4",{id:"run-a-task-in-projects-based-on-file-path"},"Run a task in projects based on file path"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "projectSource~packages/*"\n')),(0,r.kt)("h2",{id:"task-configuration"},"Task configuration"),(0,r.kt)("p",null,"Learn more about ",(0,r.kt)("a",{parentName:"p",href:"./config/project#tasks"},"available options"),"."),(0,r.kt)("h4",{id:"disable-caching"},"Disable caching"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n options:\n cache: false\n")),(0,r.kt)("h4",{id:"re-run-flaky-tasks"},"Re-run flaky tasks"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n options:\n retryCount: 3\n")),(0,r.kt)("h4",{id:"depend-on-tasks-from-parent-projects-dependencies"},"Depend on tasks from parent project's dependencies"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"# Also inferred from the language's platform\ndependsOn:\n - 'project-a'\n - 'project-b'\n\ntasks:\n example:\n # ...\n deps:\n - '^:build'\n")),(0,r.kt)("h4",{id:"depend-on-tasks-from-arbitrary-projects"},"Depend on tasks from arbitrary projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n deps:\n - 'other-project:task'\n")),(0,r.kt)("h4",{id:"run-dependencies-serially"},"Run dependencies serially"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n deps:\n - 'first'\n - 'second'\n - 'third'\n options:\n runDepsInParallel: false\n")),(0,r.kt)("h4",{id:"run-multiple-watchersservers-in-parallel"},"Run multiple watchers/servers in parallel"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'noop'\n deps:\n - 'app:watch'\n - 'backend:start'\n - 'tailwind:watch'\n local: true\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"local")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"persistent")," settings are required for this to work.")),(0,r.kt)("h2",{id:"languages"},"Languages"),(0,r.kt)("h4",{id:"run-system-binaries-available-on-path"},"Run system binaries available on ",(0,r.kt)("inlineCode",{parentName:"h4"},"PATH")),(0,r.kt)(o,{count:2,mdxType:"Columns"},(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'bash' # batch, etc\n\ntasks:\n example:\n command: 'printenv'\n"))),(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'printenv'\n platform: 'system'\n")))),(0,r.kt)("h4",{id:"run-language-binaries-not-supported-in-moons-toolchain"},"Run language binaries not supported in moon's toolchain"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'ruby'\n\ntasks:\n example:\n command: 'rubocop'\n platform: 'system'\n")),(0,r.kt)("h4",{id:"run-npm-binaries-nodejs"},"Run npm binaries (Node.js)"),(0,r.kt)(o,{count:2,mdxType:"Columns"},(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'javascript' # typescript\n\ntasks:\n example:\n command: 'eslint'\n"))),(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'eslint'\n platform: 'node'\n")))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/405d593f.3ef619b4.js b/assets/js/405d593f.3ef619b4.js new file mode 100644 index 00000000000..48270e31ef8 --- /dev/null +++ b/assets/js/405d593f.3ef619b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81812],{35318:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>d});var n=a(27378);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,l=function(e,t){if(null==e)return{};var a,n,l={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(a),d=l,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||r;return a?n.createElement(k,s(s({ref:t},c),{},{components:a})):n.createElement(k,s({ref:t},c))}));function d(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,s=new Array(r);s[0]=m;var o={};for(var i in t)hasOwnProperty.call(t,i)&&(o[i]=t[i]);o.originalType=e,o.mdxType="string"==typeof e?e:l,s[1]=o;for(var p=2;p<r;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},77565:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>i,metadata:()=>c,toc:()=>m});var n=a(25773),l=a(27378),r=a(35318),s=a(40624);function o(e){let{children:t,count:a}=e;return l.createElement("section",{className:(0,s.Z)("sm:grid gap-3",2===a&&"grid-cols-2",3===a&&"grid-cols-3")},t)}const i={title:"Cheat sheet",toc_max_heading_level:4},p=void 0,c={unversionedId:"cheat-sheet",id:"cheat-sheet",title:"Cheat sheet",description:"Don't have time to read the docs? Here's a quick cheat sheet to get you started.",source:"@site/docs/cheat-sheet.mdx",sourceDirName:".",slug:"/cheat-sheet",permalink:"/docs/cheat-sheet",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/cheat-sheet.mdx",tags:[],version:"current",frontMatter:{title:"Cheat sheet",toc_max_heading_level:4},sidebar:"docs",previous:{title:"upgrade",permalink:"/docs/commands/upgrade"},next:{title:"Feature comparison",permalink:"/docs/comparison"}},u={},m=[{value:"Tasks",id:"tasks",level:2},{value:"Run all build and test tasks for all projects",id:"run-all-build-and-test-tasks-for-all-projects",level:4},{value:"Run all build and test tasks in a project",id:"run-all-build-and-test-tasks-in-a-project",level:4},{value:"Run all build and test tasks for closest project based on working directory",id:"run-all-build-and-test-tasks-for-closest-project-based-on-working-directory",level:4},{value:"Run a task in all projects",id:"run-a-task-in-all-projects",level:4},{value:"Run a task in all projects with a tag",id:"run-a-task-in-all-projects-with-a-tag",level:4},{value:"Run a task in a project",id:"run-a-task-in-a-project",level:4},{value:"Run multiple tasks in all projects",id:"run-multiple-tasks-in-all-projects",level:4},{value:"Run multiple tasks in any project",id:"run-multiple-tasks-in-any-project",level:4},{value:"Run a task in applications, libraries, or tools",id:"run-a-task-in-applications-libraries-or-tools",level:4},{value:"Run a task in projects of a specific language",id:"run-a-task-in-projects-of-a-specific-language",level:4},{value:"Run a task in projects matching a keyword",id:"run-a-task-in-projects-matching-a-keyword",level:4},{value:"Run a task in projects based on file path",id:"run-a-task-in-projects-based-on-file-path",level:4},{value:"Task configuration",id:"task-configuration",level:2},{value:"Disable caching",id:"disable-caching",level:4},{value:"Re-run flaky tasks",id:"re-run-flaky-tasks",level:4},{value:"Depend on tasks from parent project's dependencies",id:"depend-on-tasks-from-parent-projects-dependencies",level:4},{value:"Depend on tasks from arbitrary projects",id:"depend-on-tasks-from-arbitrary-projects",level:4},{value:"Run dependencies serially",id:"run-dependencies-serially",level:4},{value:"Run multiple watchers/servers in parallel",id:"run-multiple-watchersservers-in-parallel",level:4},{value:"Languages",id:"languages",level:2},{value:"Run system binaries available on <code>PATH</code>",id:"run-system-binaries-available-on-path",level:4},{value:"Run language binaries not supported in moon's toolchain",id:"run-language-binaries-not-supported-in-moons-toolchain",level:4},{value:"Run npm binaries (Node.js)",id:"run-npm-binaries-nodejs",level:4}],d={toc:m};function k(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Don't have time to read the docs? Here's a quick cheat sheet to get you started."),(0,r.kt)("h2",{id:"tasks"},"Tasks"),(0,r.kt)("p",null,"Learn more about ",(0,r.kt)("a",{parentName:"p",href:"./concepts/task"},"tasks")," and ",(0,r.kt)("a",{parentName:"p",href:"./concepts/target"},"targets"),"."),(0,r.kt)("h4",{id:"run-all-build-and-test-tasks-for-all-projects"},"Run all build and test tasks for all projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon check --all\n")),(0,r.kt)("h4",{id:"run-all-build-and-test-tasks-in-a-project"},"Run all build and test tasks in a project"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon check project\n")),(0,r.kt)("h4",{id:"run-all-build-and-test-tasks-for-closest-project-based-on-working-directory"},"Run all build and test tasks for closest project based on working directory"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon check\n")),(0,r.kt)("h4",{id:"run-a-task-in-all-projects"},"Run a task in all projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run :task\n")),(0,r.kt)("h4",{id:"run-a-task-in-all-projects-with-a-tag"},"Run a task in all projects with a tag"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run '#tag:task'\n# OR\nmoon run \\#tag:task\n# OR\nmoon run :task --query \"tag=tag\"\n")),(0,r.kt)("h4",{id:"run-a-task-in-a-project"},"Run a task in a project"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run project:task\n")),(0,r.kt)("h4",{id:"run-multiple-tasks-in-all-projects"},"Run multiple tasks in all projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run :task1 :task2\n")),(0,r.kt)("h4",{id:"run-multiple-tasks-in-any-project"},"Run multiple tasks in any project"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"moon run projecta:task1 projectb:task2\n")),(0,r.kt)("h4",{id:"run-a-task-in-applications-libraries-or-tools"},"Run a task in applications, libraries, or tools"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "projectType=application"\n')),(0,r.kt)("h4",{id:"run-a-task-in-projects-of-a-specific-language"},"Run a task in projects of a specific language"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "language=typescript"\n')),(0,r.kt)("h4",{id:"run-a-task-in-projects-matching-a-keyword"},"Run a task in projects matching a keyword"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "project~react-*"\n')),(0,r.kt)("h4",{id:"run-a-task-in-projects-based-on-file-path"},"Run a task in projects based on file path"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'moon run :task --query "projectSource~packages/*"\n')),(0,r.kt)("h2",{id:"task-configuration"},"Task configuration"),(0,r.kt)("p",null,"Learn more about ",(0,r.kt)("a",{parentName:"p",href:"./config/project#tasks"},"available options"),"."),(0,r.kt)("h4",{id:"disable-caching"},"Disable caching"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n options:\n cache: false\n")),(0,r.kt)("h4",{id:"re-run-flaky-tasks"},"Re-run flaky tasks"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n options:\n retryCount: 3\n")),(0,r.kt)("h4",{id:"depend-on-tasks-from-parent-projects-dependencies"},"Depend on tasks from parent project's dependencies"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"# Also inferred from the language's platform\ndependsOn:\n - 'project-a'\n - 'project-b'\n\ntasks:\n example:\n # ...\n deps:\n - '^:build'\n")),(0,r.kt)("h4",{id:"depend-on-tasks-from-arbitrary-projects"},"Depend on tasks from arbitrary projects"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n deps:\n - 'other-project:task'\n")),(0,r.kt)("h4",{id:"run-dependencies-serially"},"Run dependencies serially"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n # ...\n deps:\n - 'first'\n - 'second'\n - 'third'\n options:\n runDepsInParallel: false\n")),(0,r.kt)("h4",{id:"run-multiple-watchersservers-in-parallel"},"Run multiple watchers/servers in parallel"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'noop'\n deps:\n - 'app:watch'\n - 'backend:start'\n - 'tailwind:watch'\n local: true\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"local")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"persistent")," settings are required for this to work.")),(0,r.kt)("h2",{id:"languages"},"Languages"),(0,r.kt)("h4",{id:"run-system-binaries-available-on-path"},"Run system binaries available on ",(0,r.kt)("inlineCode",{parentName:"h4"},"PATH")),(0,r.kt)(o,{count:2,mdxType:"Columns"},(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'bash' # batch, etc\n\ntasks:\n example:\n command: 'printenv'\n"))),(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'printenv'\n platform: 'system'\n")))),(0,r.kt)("h4",{id:"run-language-binaries-not-supported-in-moons-toolchain"},"Run language binaries not supported in moon's toolchain"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'ruby'\n\ntasks:\n example:\n command: 'rubocop'\n platform: 'system'\n")),(0,r.kt)("h4",{id:"run-npm-binaries-nodejs"},"Run npm binaries (Node.js)"),(0,r.kt)(o,{count:2,mdxType:"Columns"},(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'javascript' # typescript\n\ntasks:\n example:\n command: 'eslint'\n"))),(0,r.kt)("div",null,(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'eslint'\n platform: 'node'\n")))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/40c69ef1.6c086c0a.js b/assets/js/40c69ef1.6c086c0a.js deleted file mode 100644 index 650b8b3677f..00000000000 --- a/assets/js/40c69ef1.6c086c0a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3869],{97754:e=>{e.exports=JSON.parse('{"label":"moonbase","permalink":"/blog/tags/moonbase","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/40c69ef1.d025f7a2.js b/assets/js/40c69ef1.d025f7a2.js new file mode 100644 index 00000000000..23d13b79650 --- /dev/null +++ b/assets/js/40c69ef1.d025f7a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43869],{97754:e=>{e.exports=JSON.parse('{"label":"moonbase","permalink":"/blog/tags/moonbase","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/413318e8.06d02761.js b/assets/js/413318e8.06d02761.js deleted file mode 100644 index f4310e83922..00000000000 --- a/assets/js/413318e8.06d02761.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3508],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,l(l({ref:t},s),{},{components:n})):r.createElement(f,l({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=n[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},14821:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"clean"},l=void 0,i={unversionedId:"proto/commands/clean",id:"proto/commands/clean",title:"clean",description:"The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it",source:"@site/docs/proto/commands/clean.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/clean",permalink:"/docs/proto/commands/clean",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/clean.mdx",tags:[],version:"current",frontMatter:{title:"clean"},sidebar:"proto",previous:{title:"bin",permalink:"/docs/proto/commands/bin"},next:{title:"completions",permalink:"/docs/proto/commands/completions"}},p={},c=[{value:"Options",id:"options",level:3}],s={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto clean")," command can be used to uninstall stale and unused tools or plugins. By default, it\nwill remove items that haven't been used in the last 30 days."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto clean\n")),(0,o.kt)("p",null,"Furthermore, the command can be used to purge a tool, which will remove it entirely from proto, or\npurge all downloaded plugins."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Delete node from proto\n$ proto clean --purge node\n\n# Delete all plugins\n$ proto clean --purge-plugins\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--days")," - Number of days before a tool is considered stale."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--purge")," - Purge and delete the installed tool by ID (",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/<id>"),")."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--purge-plugins")," - Purge and delete all downloaded plugins (",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/plugins"),")."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--yes")," - Avoid and confirm all prompts.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/413318e8.8556c3f8.js b/assets/js/413318e8.8556c3f8.js new file mode 100644 index 00000000000..8283d5627a1 --- /dev/null +++ b/assets/js/413318e8.8556c3f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83508],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,l(l({ref:t},s),{},{components:n})):r.createElement(f,l({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=n[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},14821:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"clean"},l=void 0,i={unversionedId:"proto/commands/clean",id:"proto/commands/clean",title:"clean",description:"The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it",source:"@site/docs/proto/commands/clean.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/clean",permalink:"/docs/proto/commands/clean",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/clean.mdx",tags:[],version:"current",frontMatter:{title:"clean"},sidebar:"proto",previous:{title:"bin",permalink:"/docs/proto/commands/bin"},next:{title:"completions",permalink:"/docs/proto/commands/completions"}},p={},c=[{value:"Options",id:"options",level:3}],s={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto clean")," command can be used to uninstall stale and unused tools or plugins. By default, it\nwill remove items that haven't been used in the last 30 days."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto clean\n")),(0,o.kt)("p",null,"Furthermore, the command can be used to purge a tool, which will remove it entirely from proto, or\npurge all downloaded plugins."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Delete node from proto\n$ proto clean --purge node\n\n# Delete all plugins\n$ proto clean --purge-plugins\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--days")," - Number of days before a tool is considered stale."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--purge")," - Purge and delete the installed tool by ID (",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/<id>"),")."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--purge-plugins")," - Purge and delete all downloaded plugins (",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/plugins"),")."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--yes")," - Avoid and confirm all prompts.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4178efb8.03054977.js b/assets/js/4178efb8.03054977.js new file mode 100644 index 00000000000..303e1687ec3 --- /dev/null +++ b/assets/js/4178efb8.03054977.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10537],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),g=r,d=u["".concat(s,".").concat(g)]||u[g]||m[g]||l;return n?o.createElement(d,a(a({ref:t},c),{},{components:n})):o.createElement(d,a({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,a=new Array(l);a[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,a[1]=i;for(var p=2;p<l;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},40527:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(27378),r=n(30780);function l(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,o.isValidElement)(e)&&t.includes(e.props?.mdxType)))?o.createElement("code",e):o.createElement(r.Z,e)}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var o=n(27378),r=n(40624),l=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return o.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?a[s]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},11690:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>k,contentTitle:()=>w,default:()=>j,frontMatter:()=>E,metadata:()=>O,toc:()=>T});var o=n(25773),r=n(27378),l=n(35318),a=n(76911),i=n(81884),s=n(9187),p=n(30658),c=n(30780),m=n(40527),u=n(83469),g=n(9619);function d(e){let{to:t,noMargin:n}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right block",style:{marginTop:n?0:"-3.75em"}},r.createElement(g.Z,{text:"TOML",icon:u.zZQ,variant:"info"}))}function b(e){let{to:t,noMargin:n}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right block",style:{marginTop:n?0:"-3.75em"}},r.createElement(g.Z,{text:"WASM",icon:u.zZQ,variant:"success"}))}function h(e){let{id:t,tool:n}=e;const o=n.bins??[],l=n.globalsDirs??[],a=n.detectionSources??[],u=n.usageId??t;let g=`proto install ${u}`;return n.pluginLocator&&(g=`proto add-plugin ${u} "${n.pluginLocator}"\n${g}`),r.createElement("div",{className:"relative rounded-lg px-2 py-2 text-black border-solid border border-t-0 border-b-2 bg-gray-50 border-gray-200/75 dark:bg-slate-700 dark:border-slate-900/75"},"toml"===n.pluginType&&r.createElement(d,{to:n.repoUrl,noMargin:!0}),"wasm"===n.pluginType&&r.createElement(b,{to:n.repoUrl,noMargin:!0}),r.createElement(s.Z,{level:5,className:"mb-1"},r.createElement(i.default,{href:n.homepageUrl??n.repoUrl},n.name)),r.createElement(p.ZP,null,n.description),r.createElement(c.Z,{language:"shell"},g),o.length>0&&r.createElement(p.ZP,{size:"sm",variant:"muted",className:"m-0 mt-1"},"Available bins:"," ",o.map(((e,t)=>r.createElement(r.Fragment,null,r.createElement(m.Z,null,e),t===o.length-1?"":", ")))),l.length>0&&r.createElement(p.ZP,{size:"sm",variant:"muted",className:"m-0 mt-1"},"Globals directory:"," ",l.map(((e,t)=>r.createElement(r.Fragment,null,r.createElement(m.Z,null,e),t===l.length-1?"":", ")))),a.length>0&&r.createElement(p.ZP,{size:"sm",variant:"muted",className:"m-0 mt-1"},"Detection sources:"," ",a.map(((e,t)=>{let n=r.createElement(r.Fragment,null,r.createElement(m.Z,null,e.file),e.label?" ":"",e.label);return n=e.url?r.createElement(i.default,{href:e.url},n):r.createElement("span",null,n),r.createElement(r.Fragment,null,n,t===a.length-1?"":", ")}))))}function f(e){return r.createElement("div",{className:"grid grid-cols-2 gap-2"},Object.entries(e.tools).map((e=>{let[t,n]=e;return r.createElement("div",{key:t,id:t},r.createElement(h,{id:t,tool:n}))})))}const y={bun:{bins:["bun","bunx"],description:"Bun is an all-in-one runtime and toolset for JavaScript and TypeScript, powered by Zig and Webkit.",globalsDirs:["~/.bun/bin"],homepageUrl:"https://bun.sh",name:"Bun",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/bun-plugin"},deno:{bins:["deno"],description:"Deno is a secure runtime for JavaScript and TypeScript, powered by Rust and Chrome's V8 engine.",detectionSources:[{file:".dvmrc",url:"https://github.com/justjavac/dvm"}],globalsDirs:["$DENO_INSTALL_ROOT/bin","$DENO_HOME/bin","~/.deno/bin"],homepageUrl:"https://deno.land",name:"Deno",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/deno-plugin"},go:{bins:["go"],description:"Go is a simple, secure, and fast systems language.",detectionSources:[{file:"go.work",url:"https://go.dev/doc/tutorial/workspaces"},{file:"go.mod",url:"https://go.dev/doc/modules/gomod-ref"}],globalsDirs:["$GOBIN","$GOROOT/bin","$GOPATH/bin","~/go/bin"],homepageUrl:"https://go.dev",name:"Go",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/go-plugin"},node:{bins:["node","npx"],description:"Node.js is a JavaScript runtime built on Chrome's V8 engine.",detectionSources:[{file:".nvmrc",url:"https://github.com/nvm-sh/nvm"},{file:".node-version",url:"https://github.com/nodenv/nodenv"},{file:"package.json",label:"engines"}],globalsDirs:["~/.proto/tools/node/globals/bin"],homepageUrl:"https://nodejs.org",name:"Node.js",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/node-plugin"},node_depman:{bins:["npm","pnpm","yarn","node-gyp"],description:"proto supports all popular Node.js package managers.",detectionSources:[{file:"package.json",label:"engines / package manager"}],globalsDirs:["~/.proto/tools/node/globals/bin"],name:"npm, pnpm, yarn",noIcon:!0,pluginType:"wasm",repoUrl:"https://github.com/moonrepo/node-plugin",usageId:"<manager>"},python:{bins:["python","pip"],description:"Python is a high-level, general-purpose programming language.",detectionSources:[{file:".python-version",url:"https://github.com/pyenv/pyenv"}],globalsDirs:["~/.local/bin"],homepageUrl:"https://www.python.org/",name:"Python (experimental)",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/python-plugin"},rust:{description:"Rust is a blazingly fast and memory-efficient systems language.",detectionSources:[{file:"rust-toolchain.toml"},{file:"rust-toolchain"}],globalsDirs:["~/.cargo/bin"],homepageUrl:"https://www.rust-lang.org/",name:"Rust",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/rust-plugin"}},v={moon:{bins:["moon"],description:"moon is a multi-language build system and codebase management tool.",homepageUrl:"https://moonrepo.dev/moon",name:"moon",pluginLocator:"source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml",pluginType:"toml",repoUrl:"https://github.com/moonrepo/moon/blob/master/proto-plugin.toml"}},E={title:"Supported tools"},w=void 0,O={unversionedId:"proto/tools",id:"proto/tools",title:"Supported tools",description:"Built-in",source:"@site/docs/proto/tools.mdx",sourceDirName:"proto",slug:"/proto/tools",permalink:"/docs/proto/tools",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/tools.mdx",tags:[],version:"current",frontMatter:{title:"Supported tools"},sidebar:"proto",previous:{title:"Configuration",permalink:"/docs/proto/config"},next:{title:"Plugins",permalink:"/docs/proto/plugins"}},k={},T=[{value:"Built-in",id:"built-in",level:2},{value:"Third-party",id:"third-party",level:2}],x={toc:T};function j(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,o.Z)({},x,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"built-in"},"Built-in"),(0,l.kt)("p",null,"The following tools are supported natively in proto's toolchain."),(0,l.kt)(f,{tools:y,mdxType:"ToolCards"}),(0,l.kt)("h2",{id:"third-party"},"Third-party"),(0,l.kt)(a.Z,{className:"float-right -mt-8",href:"https://github.com/moonrepo/moon/edit/master/website/src/data/proto-tools.tsx",label:"Add tool",mdxType:"Button"}),(0,l.kt)("p",null,"Additional tools can be supported through ",(0,l.kt)("a",{parentName:"p",href:"./plugins"},"plugins"),"."),(0,l.kt)(f,{tools:v,mdxType:"ToolCards"}))}j.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4178efb8.88393d86.js b/assets/js/4178efb8.88393d86.js deleted file mode 100644 index 811882e5c36..00000000000 --- a/assets/js/4178efb8.88393d86.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[537],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),g=r,d=u["".concat(s,".").concat(g)]||u[g]||m[g]||l;return n?o.createElement(d,a(a({ref:t},c),{},{components:n})):o.createElement(d,a({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,a=new Array(l);a[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,a[1]=i;for(var p=2;p<l;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},40527:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(27378),r=n(30780);function l(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,o.isValidElement)(e)&&t.includes(e.props?.mdxType)))?o.createElement("code",e):o.createElement(r.Z,e)}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var o=n(27378),r=n(40624),l=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return o.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?a[s]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},11690:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>k,contentTitle:()=>w,default:()=>j,frontMatter:()=>E,metadata:()=>O,toc:()=>T});var o=n(25773),r=n(27378),l=n(35318),a=n(76911),i=n(81884),s=n(9187),p=n(30658),c=n(30780),m=n(40527),u=n(83469),g=n(9619);function d(e){let{to:t,noMargin:n}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right block",style:{marginTop:n?0:"-3.75em"}},r.createElement(g.Z,{text:"TOML",icon:u.zZQ,variant:"info"}))}function b(e){let{to:t,noMargin:n}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right block",style:{marginTop:n?0:"-3.75em"}},r.createElement(g.Z,{text:"WASM",icon:u.zZQ,variant:"success"}))}function h(e){let{id:t,tool:n}=e;const o=n.bins??[],l=n.globalsDirs??[],a=n.detectionSources??[],u=n.usageId??t;let g=`proto install ${u}`;return n.pluginLocator&&(g=`proto add-plugin ${u} "${n.pluginLocator}"\n${g}`),r.createElement("div",{className:"relative rounded-lg px-2 py-2 text-black border-solid border border-t-0 border-b-2 bg-gray-50 border-gray-200/75 dark:bg-slate-700 dark:border-slate-900/75"},"toml"===n.pluginType&&r.createElement(d,{to:n.repoUrl,noMargin:!0}),"wasm"===n.pluginType&&r.createElement(b,{to:n.repoUrl,noMargin:!0}),r.createElement(s.Z,{level:5,className:"mb-1"},r.createElement(i.default,{href:n.homepageUrl??n.repoUrl},n.name)),r.createElement(p.ZP,null,n.description),r.createElement(c.Z,{language:"shell"},g),o.length>0&&r.createElement(p.ZP,{size:"sm",variant:"muted",className:"m-0 mt-1"},"Available bins:"," ",o.map(((e,t)=>r.createElement(r.Fragment,null,r.createElement(m.Z,null,e),t===o.length-1?"":", ")))),l.length>0&&r.createElement(p.ZP,{size:"sm",variant:"muted",className:"m-0 mt-1"},"Globals directory:"," ",l.map(((e,t)=>r.createElement(r.Fragment,null,r.createElement(m.Z,null,e),t===l.length-1?"":", ")))),a.length>0&&r.createElement(p.ZP,{size:"sm",variant:"muted",className:"m-0 mt-1"},"Detection sources:"," ",a.map(((e,t)=>{let n=r.createElement(r.Fragment,null,r.createElement(m.Z,null,e.file),e.label?" ":"",e.label);return n=e.url?r.createElement(i.default,{href:e.url},n):r.createElement("span",null,n),r.createElement(r.Fragment,null,n,t===a.length-1?"":", ")}))))}function f(e){return r.createElement("div",{className:"grid grid-cols-2 gap-2"},Object.entries(e.tools).map((e=>{let[t,n]=e;return r.createElement("div",{key:t,id:t},r.createElement(h,{id:t,tool:n}))})))}const y={bun:{bins:["bun","bunx"],description:"Bun is an all-in-one runtime and toolset for JavaScript and TypeScript, powered by Zig and Webkit.",globalsDirs:["~/.bun/bin"],homepageUrl:"https://bun.sh",name:"Bun",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/bun-plugin"},deno:{bins:["deno"],description:"Deno is a secure runtime for JavaScript and TypeScript, powered by Rust and Chrome's V8 engine.",detectionSources:[{file:".dvmrc",url:"https://github.com/justjavac/dvm"}],globalsDirs:["$DENO_INSTALL_ROOT/bin","$DENO_HOME/bin","~/.deno/bin"],homepageUrl:"https://deno.land",name:"Deno",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/deno-plugin"},go:{bins:["go"],description:"Go is a simple, secure, and fast systems language.",detectionSources:[{file:"go.work",url:"https://go.dev/doc/tutorial/workspaces"},{file:"go.mod",url:"https://go.dev/doc/modules/gomod-ref"}],globalsDirs:["$GOBIN","$GOROOT/bin","$GOPATH/bin","~/go/bin"],homepageUrl:"https://go.dev",name:"Go",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/go-plugin"},node:{bins:["node","npx"],description:"Node.js is a JavaScript runtime built on Chrome's V8 engine.",detectionSources:[{file:".nvmrc",url:"https://github.com/nvm-sh/nvm"},{file:".node-version",url:"https://github.com/nodenv/nodenv"},{file:"package.json",label:"engines"}],globalsDirs:["~/.proto/tools/node/globals/bin"],homepageUrl:"https://nodejs.org",name:"Node.js",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/node-plugin"},node_depman:{bins:["npm","pnpm","yarn","node-gyp"],description:"proto supports all popular Node.js package managers.",detectionSources:[{file:"package.json",label:"engines / package manager"}],globalsDirs:["~/.proto/tools/node/globals/bin"],name:"npm, pnpm, yarn",noIcon:!0,pluginType:"wasm",repoUrl:"https://github.com/moonrepo/node-plugin",usageId:"<manager>"},python:{bins:["python","pip"],description:"Python is a high-level, general-purpose programming language.",detectionSources:[{file:".python-version",url:"https://github.com/pyenv/pyenv"}],globalsDirs:["~/.local/bin"],homepageUrl:"https://www.python.org/",name:"Python (experimental)",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/python-plugin"},rust:{description:"Rust is a blazingly fast and memory-efficient systems language.",detectionSources:[{file:"rust-toolchain.toml"},{file:"rust-toolchain"}],globalsDirs:["~/.cargo/bin"],homepageUrl:"https://www.rust-lang.org/",name:"Rust",pluginType:"wasm",repoUrl:"https://github.com/moonrepo/rust-plugin"}},v={moon:{bins:["moon"],description:"moon is a multi-language build system and codebase management tool.",homepageUrl:"https://moonrepo.dev/moon",name:"moon",pluginLocator:"source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml",pluginType:"toml",repoUrl:"https://github.com/moonrepo/moon/blob/master/proto-plugin.toml"}},E={title:"Supported tools"},w=void 0,O={unversionedId:"proto/tools",id:"proto/tools",title:"Supported tools",description:"Built-in",source:"@site/docs/proto/tools.mdx",sourceDirName:"proto",slug:"/proto/tools",permalink:"/docs/proto/tools",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/tools.mdx",tags:[],version:"current",frontMatter:{title:"Supported tools"},sidebar:"proto",previous:{title:"Configuration",permalink:"/docs/proto/config"},next:{title:"Plugins",permalink:"/docs/proto/plugins"}},k={},T=[{value:"Built-in",id:"built-in",level:2},{value:"Third-party",id:"third-party",level:2}],x={toc:T};function j(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,o.Z)({},x,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"built-in"},"Built-in"),(0,l.kt)("p",null,"The following tools are supported natively in proto's toolchain."),(0,l.kt)(f,{tools:y,mdxType:"ToolCards"}),(0,l.kt)("h2",{id:"third-party"},"Third-party"),(0,l.kt)(a.Z,{className:"float-right -mt-8",href:"https://github.com/moonrepo/moon/edit/master/website/src/data/proto-tools.tsx",label:"Add tool",mdxType:"Button"}),(0,l.kt)("p",null,"Additional tools can be supported through ",(0,l.kt)("a",{parentName:"p",href:"./plugins"},"plugins"),"."),(0,l.kt)(f,{tools:v,mdxType:"ToolCards"}))}j.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/423a0e62.709e892d.js b/assets/js/423a0e62.709e892d.js new file mode 100644 index 00000000000..bed1142c71d --- /dev/null +++ b/assets/js/423a0e62.709e892d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36167],{94213:e=>{e.exports=JSON.parse('{"label":"tokens","permalink":"/blog/tags/tokens","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/423a0e62.92d1e223.js b/assets/js/423a0e62.92d1e223.js deleted file mode 100644 index b1ea6442ae9..00000000000 --- a/assets/js/423a0e62.92d1e223.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6167],{94213:e=>{e.exports=JSON.parse('{"label":"tokens","permalink":"/blog/tags/tokens","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/42611ca7.090ea3dd.js b/assets/js/42611ca7.090ea3dd.js new file mode 100644 index 00000000000..852593eceeb --- /dev/null +++ b/assets/js/42611ca7.090ea3dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16144],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),g=o,d=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(d,i(i({ref:t},p),{},{components:r})):n.createElement(d,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},45964:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},i=void 0,s={permalink:"/blog/moon-v1.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx",source:"@site/blog/2023-06-12_moon-v1.8.mdx",title:"moon v1.8 - Code owners and shared configuration",description:"With this release, we've focused on a critical facet of managing a large codebase, source code",date:"2023-06-12T00:00:00.000Z",formattedDate:"June 12, 2023",tags:[{label:"source",permalink:"/blog/tags/source"},{label:"code",permalink:"/blog/tags/code"},{label:"owners",permalink:"/blog/tags/owners"},{label:"ownership",permalink:"/blog/tags/ownership"}],readingTime:3.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},prevItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"},nextItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"}},l={image:r(18429).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've focused on a critical facet of managing a large codebase, source code\nownership, and sharing task configuration."))}m.isMDXComponent=!0},18429:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.8-39d52ddb273bfa80248ada1b595a488e.png"}}]); \ No newline at end of file diff --git a/assets/js/42611ca7.fe0313a7.js b/assets/js/42611ca7.fe0313a7.js deleted file mode 100644 index 7b86ad0dcc6..00000000000 --- a/assets/js/42611ca7.fe0313a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6144],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),g=o,d=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(d,i(i({ref:t},p),{},{components:r})):n.createElement(d,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},45964:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},i=void 0,s={permalink:"/blog/moon-v1.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx",source:"@site/blog/2023-06-12_moon-v1.8.mdx",title:"moon v1.8 - Code owners and shared configuration",description:"With this release, we've focused on a critical facet of managing a large codebase, source code",date:"2023-06-12T00:00:00.000Z",formattedDate:"June 12, 2023",tags:[{label:"source",permalink:"/blog/tags/source"},{label:"code",permalink:"/blog/tags/code"},{label:"owners",permalink:"/blog/tags/owners"},{label:"ownership",permalink:"/blog/tags/ownership"}],readingTime:3.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},prevItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"},nextItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"}},l={image:r(18429).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've focused on a critical facet of managing a large codebase, source code\nownership, and sharing task configuration."))}m.isMDXComponent=!0},18429:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.8-39d52ddb273bfa80248ada1b595a488e.png"}}]); \ No newline at end of file diff --git a/assets/js/427e2c3d.1606f310.js b/assets/js/427e2c3d.1606f310.js new file mode 100644 index 00000000000..9db8cf81343 --- /dev/null +++ b/assets/js/427e2c3d.1606f310.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16836],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>g});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=c(r),g=n,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},s),{},{components:r})):o.createElement(f,i({ref:t},s))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:n,i[1]=p;for(var c=2;c<a;c++)i[c]=r[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},13105:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=r(25773),n=(r(27378),r(35318));const a={slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},i=void 0,p={permalink:"/blog/moon-v1.11",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx",source:"@site/blog/2023-07-31_moon-v1.11.mdx",title:"moon v1.11 - Next-generation project graph",description:"With this release, we've focused heavily on rewriting our project graph for the next-generation of",date:"2023-07-31T00:00:00.000Z",formattedDate:"July 31, 2023",tags:[{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"project",permalink:"/blog/tags/project"}],readingTime:4.095,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},prevItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"},nextItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"}},l={image:r(21984).Z,authorsImageUrls:[void 0]},c=[],s={toc:c};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"With this release, we've focused heavily on rewriting our project graph for the next-generation of\nmoon."))}m.isMDXComponent=!0},21984:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/v1.11-8730d5c4531586c014cef4253f41baa2.png"}}]); \ No newline at end of file diff --git a/assets/js/427e2c3d.8f996118.js b/assets/js/427e2c3d.8f996118.js deleted file mode 100644 index 9f78a407834..00000000000 --- a/assets/js/427e2c3d.8f996118.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6836],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>g});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=c(r),g=n,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},s),{},{components:r})):o.createElement(f,i({ref:t},s))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:n,i[1]=p;for(var c=2;c<a;c++)i[c]=r[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},13105:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=r(25773),n=(r(27378),r(35318));const a={slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},i=void 0,p={permalink:"/blog/moon-v1.11",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx",source:"@site/blog/2023-07-31_moon-v1.11.mdx",title:"moon v1.11 - Next-generation project graph",description:"With this release, we've focused heavily on rewriting our project graph for the next-generation of",date:"2023-07-31T00:00:00.000Z",formattedDate:"July 31, 2023",tags:[{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"project",permalink:"/blog/tags/project"}],readingTime:4.095,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},prevItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"},nextItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"}},l={image:r(21984).Z,authorsImageUrls:[void 0]},c=[],s={toc:c};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"With this release, we've focused heavily on rewriting our project graph for the next-generation of\nmoon."))}m.isMDXComponent=!0},21984:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/v1.11-8730d5c4531586c014cef4253f41baa2.png"}}]); \ No newline at end of file diff --git a/assets/js/43bdf210.6de01a83.js b/assets/js/43bdf210.6de01a83.js new file mode 100644 index 00000000000..02db2d125a7 --- /dev/null +++ b/assets/js/43bdf210.6de01a83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65379],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),g=o,b=u["".concat(p,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},85310:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},i=void 0,l={permalink:"/blog/2023-roadmap",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx",source:"@site/blog/2023-01-04_2023-roadmap.mdx",title:"What's in store for 2023",description:"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long",date:"2023-01-04T00:00:00.000Z",formattedDate:"January 4, 2023",tags:[{label:"roadmap",permalink:"/blog/tags/roadmap"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:5.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},prevItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"},nextItem:{title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",permalink:"/blog/v0.21"}},p={authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long\nroadmap."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/43bdf210.e9d7159f.js b/assets/js/43bdf210.e9d7159f.js deleted file mode 100644 index 7b218953a63..00000000000 --- a/assets/js/43bdf210.e9d7159f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5379],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),g=o,b=u["".concat(p,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},85310:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},i=void 0,l={permalink:"/blog/2023-roadmap",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx",source:"@site/blog/2023-01-04_2023-roadmap.mdx",title:"What's in store for 2023",description:"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long",date:"2023-01-04T00:00:00.000Z",formattedDate:"January 4, 2023",tags:[{label:"roadmap",permalink:"/blog/tags/roadmap"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:5.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},prevItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"},nextItem:{title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",permalink:"/blog/v0.21"}},p={authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long\nroadmap."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/43dc46d9.1eac9964.js b/assets/js/43dc46d9.1eac9964.js deleted file mode 100644 index 853e8b18c41..00000000000 --- a/assets/js/43dc46d9.1eac9964.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6370],{4799:e=>{e.exports=JSON.parse('{"label":"qol","permalink":"/blog/tags/qol","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/43dc46d9.5d4ff218.js b/assets/js/43dc46d9.5d4ff218.js new file mode 100644 index 00000000000..59dd0a26914 --- /dev/null +++ b/assets/js/43dc46d9.5d4ff218.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96370],{4799:e=>{e.exports=JSON.parse('{"label":"qol","permalink":"/blog/tags/qol","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/44183a86.4509236d.js b/assets/js/44183a86.4509236d.js new file mode 100644 index 00000000000..f7ff8baf195 --- /dev/null +++ b/assets/js/44183a86.4509236d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28149],{69862:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ci","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/44183a86.572d8202.js b/assets/js/44183a86.572d8202.js deleted file mode 100644 index aa898fc0cf3..00000000000 --- a/assets/js/44183a86.572d8202.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8149],{69862:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ci","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/44ac4dbb.1fc0f8ee.js b/assets/js/44ac4dbb.1fc0f8ee.js new file mode 100644 index 00000000000..4d3e16b1620 --- /dev/null +++ b/assets/js/44ac4dbb.1fc0f8ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77142],{90399:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/6","page":6,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/44ac4dbb.80de6629.js b/assets/js/44ac4dbb.80de6629.js deleted file mode 100644 index b726e262b3e..00000000000 --- a/assets/js/44ac4dbb.80de6629.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7142],{90399:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/6","page":6,"postsPerPage":10,"totalPages":6,"totalCount":51,"previousPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/450b14c3.e4df2314.js b/assets/js/450b14c3.e4df2314.js deleted file mode 100644 index 7b9f6eff39c..00000000000 --- a/assets/js/450b14c3.e4df2314.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4979],{22109:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/local","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/450b14c3.f1410100.js b/assets/js/450b14c3.f1410100.js new file mode 100644 index 00000000000..2b5ffe26afc --- /dev/null +++ b/assets/js/450b14c3.f1410100.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94979],{22109:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/local","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/459b1c5c.70643eb5.js b/assets/js/459b1c5c.70643eb5.js deleted file mode 100644 index 4a31d3e1a80..00000000000 --- a/assets/js/459b1c5c.70643eb5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1396],{55145:e=>{e.exports=JSON.parse('{"label":"global","permalink":"/blog/tags/global","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/459b1c5c.79672344.js b/assets/js/459b1c5c.79672344.js new file mode 100644 index 00000000000..1eca0b45d7d --- /dev/null +++ b/assets/js/459b1c5c.79672344.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21396],{55145:e=>{e.exports=JSON.parse('{"label":"global","permalink":"/blog/tags/global","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/46561613.4b94259b.js b/assets/js/46561613.4b94259b.js new file mode 100644 index 00000000000..59157c27f2c --- /dev/null +++ b/assets/js/46561613.4b94259b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22636],{64689:e=>{e.exports=JSON.parse('{"label":"runner","permalink":"/blog/tags/runner","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/46561613.6e89569d.js b/assets/js/46561613.6e89569d.js deleted file mode 100644 index e684be1c936..00000000000 --- a/assets/js/46561613.6e89569d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2636],{64689:e=>{e.exports=JSON.parse('{"label":"runner","permalink":"/blog/tags/runner","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/4665933c.7e55d8ce.js b/assets/js/4665933c.7e55d8ce.js new file mode 100644 index 00000000000..4689dc047d7 --- /dev/null +++ b/assets/js/4665933c.7e55d8ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95924],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=i,u=m["".concat(s,".").concat(d)]||m[d]||h[d]||o;return n?a.createElement(u,r(r({ref:t},p),{},{components:n})):a.createElement(u,r({ref:t},p))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var c=2;c<o;c++)r[c]=n[c];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378);function i(e){let{src:t,width:n="90%",alt:i="",title:o,align:r="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:r}},a.createElement("img",{src:t.default,width:n,alt:i,title:o,className:"inline-block"}))}},61664:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=n(25773),i=(n(27378),n(35318));n(88109);const o={slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},r=void 0,l={permalink:"/blog/v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-14_v0.19.mdx",source:"@site/blog/2022-11-14_v0.19.mdx",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",description:"With this release, we've focused heavily on our remote caching architecture. Since this is a massive",date:"2022-11-14T00:00:00.000Z",formattedDate:"November 14, 2022",tags:[{label:"affected",permalink:"/blog/tags/affected"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"},{label:"dep-graph",permalink:"/blog/tags/dep-graph"}],readingTime:2.895,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},prevItem:{title:"Integrating TypeScript in a monorepo",permalink:"/blog/typescript-monorepo"},nextItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"}},s={image:n(66620).Z,authorsImageUrls:[void 0]},c=[{value:"Remote caching beta",id:"remote-caching-beta",level:2},{value:"Affected files filtering",id:"affected-files-filtering",level:2},{value:"Dependency graph optimizations",id:"dependency-graph-optimizations",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function h(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"With this release, we've focused heavily on our remote caching architecture. Since this is a massive\ntask that requires much work behind the scenes, this overall release is rather light."),(0,i.kt)("h2",{id:"remote-caching-beta"},"Remote caching beta"),(0,i.kt)("p",null,"A major request for moon is to support remote caching. This is a critical feature that allows\nartifacts to be shared across machines and environments, by storing them in a cloud storage\nprovider, like AWS S3."),(0,i.kt)("p",null,"We've been working on this feature for months, primarily behind the scenes building the necessary\nservices and tools, and we've finally reached a point where we could integrate it with moon\ndirectly! However, since this feature is very complex, it's not yet available to the public, but\nwhile you wait, you can sign up for beta access! Jump over to the\n",(0,i.kt)("a",{parentName:"p",href:"../docs/guides/remote-cache"},"official remote caching documentation for more information"),"!"),(0,i.kt)("p",null,"We'll be working on remote caching through every release, continually polishing the implementation,\nsupporting new features, enabling new regions, calculating pricing, so on and so forth. So stay\ntuned!"),(0,i.kt)("h2",{id:"affected-files-filtering"},"Affected files filtering"),(0,i.kt)("p",null,"We've spent a good portion of this release working on affected detection for projects and tasks,\nprimarily through ",(0,i.kt)("inlineCode",{parentName:"p"},"--affected"),', and have uncovered and fixed a handful of edge cases. With that\nbeing said, we asked ourselves, "How could we improve the developer experience even more"? What\nabout passing the affected files list to the running task?'),(0,i.kt)("p",null,"And that's exactly what we've done through the new task option\n",(0,i.kt)("a",{parentName:"p",href:"../docs/config/project#affectedfiles"},(0,i.kt)("inlineCode",{parentName:"a"},"affectedFiles")),"! This option works in unison with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"--affected")," option, enabling some awesome functionality. Given the following config:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n lint:\n command: 'eslint'\n options:\n affectedFiles: true\n")),(0,i.kt)("p",null,"When we run this task ",(0,i.kt)("em",{parentName:"p"},"without")," ",(0,i.kt)("inlineCode",{parentName:"p"},"--affected"),", it will append an argument for the current directory\n(",(0,i.kt)("inlineCode",{parentName:"p"},"."),"). This will lint the entire project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"# moon run project:lint\neslint .\n")),(0,i.kt)("p",null,"However, when we run this task ",(0,i.kt)("em",{parentName:"p"},"with")," ",(0,i.kt)("inlineCode",{parentName:"p"},"--affected"),", and have have touched files in the working tree,\nit will now append an argument for each file that matches the task's ",(0,i.kt)("inlineCode",{parentName:"p"},"inputs"),". This will now only\nlint the provided files, ",(0,i.kt)("em",{parentName:"p"},"instead")," of the entire project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"# moon run project:lint --affected\neslint ./file.ts ./another/file.ts\n")),(0,i.kt)("p",null,"This functionality is ",(0,i.kt)("em",{parentName:"p"},"perfect")," pre-commit hooks, and as such, we've added a\n",(0,i.kt)("a",{parentName:"p",href:"../docs/guides/vcs-hooks"},"guide for utilizing this pattern with Git hooks"),"!"),(0,i.kt)("h2",{id:"dependency-graph-optimizations"},"Dependency graph optimizations"),(0,i.kt)("p",null,"Our dependency graph determines which targets to run, what tools to install, projects to sync, and\nin which order. It's a very complex directed acyclic graph, and has only gotten more complicated\nover the year, especially with the introduction of project-level tool overrides."),(0,i.kt)("p",null,"We decided to rewrite the dependency graph from the ground up to mitigate many of these issues,\noptimize nodes and edges, reduce the number of data cloning, and to increase the overall\nperformance. Everything will still work exactly the same (all of our existing tests passed with no\nissue)!"),(0,i.kt)("p",null,"On top of this, we've also migrated the internals of moon to a new hashing algorithm that should see\na 5-10% increase in performance!"),(0,i.kt)("h2",{id:"other-changes"},"Other changes"),(0,i.kt)("p",null,"View the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.19.0"},"official release")," for a\nfull list of changes."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Package managers in the toolchain are now installed in isolation, instead of through Node.js."),(0,i.kt)("li",{parentName:"ul"},"JSON files will now respect the closest ",(0,i.kt)("inlineCode",{parentName:"li"},".editorconfig")," file."),(0,i.kt)("li",{parentName:"ul"},"Webhook payloads now include information about the running CI/CD environment."),(0,i.kt)("li",{parentName:"ul"},"Generator can now merge JSON/YAML template files.")),(0,i.kt)("h2",{id:"whats-next"},"What's next?"),(0,i.kt)("p",null,"Expect the following in the v0.20 release!"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Continuation of remote caching work!"),(0,i.kt)("li",{parentName:"ul"},"Performance improvements for output hydration."),(0,i.kt)("li",{parentName:"ul"},"Toolchain improvements.")))}h.isMDXComponent=!0},66620:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.19-78b0dde00a078efefe909e6acefe73a7.png"}}]); \ No newline at end of file diff --git a/assets/js/4665933c.9a995aa2.js b/assets/js/4665933c.9a995aa2.js deleted file mode 100644 index bbb858f0742..00000000000 --- a/assets/js/4665933c.9a995aa2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5924],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=i,u=m["".concat(s,".").concat(d)]||m[d]||h[d]||o;return n?a.createElement(u,r(r({ref:t},p),{},{components:n})):a.createElement(u,r({ref:t},p))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var c=2;c<o;c++)r[c]=n[c];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378);function i(e){let{src:t,width:n="90%",alt:i="",title:o,align:r="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:r}},a.createElement("img",{src:t.default,width:n,alt:i,title:o,className:"inline-block"}))}},61664:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=n(25773),i=(n(27378),n(35318));n(88109);const o={slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},r=void 0,l={permalink:"/blog/v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-14_v0.19.mdx",source:"@site/blog/2022-11-14_v0.19.mdx",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",description:"With this release, we've focused heavily on our remote caching architecture. Since this is a massive",date:"2022-11-14T00:00:00.000Z",formattedDate:"November 14, 2022",tags:[{label:"affected",permalink:"/blog/tags/affected"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"},{label:"dep-graph",permalink:"/blog/tags/dep-graph"}],readingTime:2.895,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},prevItem:{title:"Integrating TypeScript in a monorepo",permalink:"/blog/typescript-monorepo"},nextItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"}},s={image:n(66620).Z,authorsImageUrls:[void 0]},c=[{value:"Remote caching beta",id:"remote-caching-beta",level:2},{value:"Affected files filtering",id:"affected-files-filtering",level:2},{value:"Dependency graph optimizations",id:"dependency-graph-optimizations",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function h(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"With this release, we've focused heavily on our remote caching architecture. Since this is a massive\ntask that requires much work behind the scenes, this overall release is rather light."),(0,i.kt)("h2",{id:"remote-caching-beta"},"Remote caching beta"),(0,i.kt)("p",null,"A major request for moon is to support remote caching. This is a critical feature that allows\nartifacts to be shared across machines and environments, by storing them in a cloud storage\nprovider, like AWS S3."),(0,i.kt)("p",null,"We've been working on this feature for months, primarily behind the scenes building the necessary\nservices and tools, and we've finally reached a point where we could integrate it with moon\ndirectly! However, since this feature is very complex, it's not yet available to the public, but\nwhile you wait, you can sign up for beta access! Jump over to the\n",(0,i.kt)("a",{parentName:"p",href:"../docs/guides/remote-cache"},"official remote caching documentation for more information"),"!"),(0,i.kt)("p",null,"We'll be working on remote caching through every release, continually polishing the implementation,\nsupporting new features, enabling new regions, calculating pricing, so on and so forth. So stay\ntuned!"),(0,i.kt)("h2",{id:"affected-files-filtering"},"Affected files filtering"),(0,i.kt)("p",null,"We've spent a good portion of this release working on affected detection for projects and tasks,\nprimarily through ",(0,i.kt)("inlineCode",{parentName:"p"},"--affected"),', and have uncovered and fixed a handful of edge cases. With that\nbeing said, we asked ourselves, "How could we improve the developer experience even more"? What\nabout passing the affected files list to the running task?'),(0,i.kt)("p",null,"And that's exactly what we've done through the new task option\n",(0,i.kt)("a",{parentName:"p",href:"../docs/config/project#affectedfiles"},(0,i.kt)("inlineCode",{parentName:"a"},"affectedFiles")),"! This option works in unison with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"--affected")," option, enabling some awesome functionality. Given the following config:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n lint:\n command: 'eslint'\n options:\n affectedFiles: true\n")),(0,i.kt)("p",null,"When we run this task ",(0,i.kt)("em",{parentName:"p"},"without")," ",(0,i.kt)("inlineCode",{parentName:"p"},"--affected"),", it will append an argument for the current directory\n(",(0,i.kt)("inlineCode",{parentName:"p"},"."),"). This will lint the entire project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"# moon run project:lint\neslint .\n")),(0,i.kt)("p",null,"However, when we run this task ",(0,i.kt)("em",{parentName:"p"},"with")," ",(0,i.kt)("inlineCode",{parentName:"p"},"--affected"),", and have have touched files in the working tree,\nit will now append an argument for each file that matches the task's ",(0,i.kt)("inlineCode",{parentName:"p"},"inputs"),". This will now only\nlint the provided files, ",(0,i.kt)("em",{parentName:"p"},"instead")," of the entire project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"# moon run project:lint --affected\neslint ./file.ts ./another/file.ts\n")),(0,i.kt)("p",null,"This functionality is ",(0,i.kt)("em",{parentName:"p"},"perfect")," pre-commit hooks, and as such, we've added a\n",(0,i.kt)("a",{parentName:"p",href:"../docs/guides/vcs-hooks"},"guide for utilizing this pattern with Git hooks"),"!"),(0,i.kt)("h2",{id:"dependency-graph-optimizations"},"Dependency graph optimizations"),(0,i.kt)("p",null,"Our dependency graph determines which targets to run, what tools to install, projects to sync, and\nin which order. It's a very complex directed acyclic graph, and has only gotten more complicated\nover the year, especially with the introduction of project-level tool overrides."),(0,i.kt)("p",null,"We decided to rewrite the dependency graph from the ground up to mitigate many of these issues,\noptimize nodes and edges, reduce the number of data cloning, and to increase the overall\nperformance. Everything will still work exactly the same (all of our existing tests passed with no\nissue)!"),(0,i.kt)("p",null,"On top of this, we've also migrated the internals of moon to a new hashing algorithm that should see\na 5-10% increase in performance!"),(0,i.kt)("h2",{id:"other-changes"},"Other changes"),(0,i.kt)("p",null,"View the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.19.0"},"official release")," for a\nfull list of changes."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Package managers in the toolchain are now installed in isolation, instead of through Node.js."),(0,i.kt)("li",{parentName:"ul"},"JSON files will now respect the closest ",(0,i.kt)("inlineCode",{parentName:"li"},".editorconfig")," file."),(0,i.kt)("li",{parentName:"ul"},"Webhook payloads now include information about the running CI/CD environment."),(0,i.kt)("li",{parentName:"ul"},"Generator can now merge JSON/YAML template files.")),(0,i.kt)("h2",{id:"whats-next"},"What's next?"),(0,i.kt)("p",null,"Expect the following in the v0.20 release!"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Continuation of remote caching work!"),(0,i.kt)("li",{parentName:"ul"},"Performance improvements for output hydration."),(0,i.kt)("li",{parentName:"ul"},"Toolchain improvements.")))}h.isMDXComponent=!0},66620:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.19-78b0dde00a078efefe909e6acefe73a7.png"}}]); \ No newline at end of file diff --git a/assets/js/4670.275fd1d9.js b/assets/js/4670.275fd1d9.js deleted file mode 100644 index 153779e9b83..00000000000 --- a/assets/js/4670.275fd1d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4670],{34670:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/479321cf.633bb3dd.js b/assets/js/479321cf.633bb3dd.js deleted file mode 100644 index fb1263cc255..00000000000 --- a/assets/js/479321cf.633bb3dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2454],{9807:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/git","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/479321cf.84f9bccd.js b/assets/js/479321cf.84f9bccd.js new file mode 100644 index 00000000000..765276bb05c --- /dev/null +++ b/assets/js/479321cf.84f9bccd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12454],{9807:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/git","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/47b3b041.1275dfd3.js b/assets/js/47b3b041.1275dfd3.js new file mode 100644 index 00000000000..fe0c12b33c7 --- /dev/null +++ b/assets/js/47b3b041.1275dfd3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40824],{55691:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/shim","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/47b3b041.e14c0ade.js b/assets/js/47b3b041.e14c0ade.js deleted file mode 100644 index 4ae4db9b853..00000000000 --- a/assets/js/47b3b041.e14c0ade.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[824],{55691:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/shim","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/488a99ce.1e8725bc.js b/assets/js/488a99ce.1e8725bc.js new file mode 100644 index 00000000000..636ba77e2dd --- /dev/null +++ b/assets/js/488a99ce.1e8725bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82258],{35318:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>u});var n=a(27378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),c=p(a),u=r,g=c["".concat(s,".").concat(u)]||c[u]||d[u]||i;return a?n.createElement(g,l(l({ref:t},m),{},{components:a})):n.createElement(g,l({ref:t},m))}));function u(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=c;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;p<i;p++)l[p]=a[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},79022:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),r=a(9619);function i(e){let{header:t,inline:a,updated:i,version:l}=e;return n.createElement(r.Z,{text:`v${l}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":a?"inline-block":"ml-2"})}},9619:(e,t,a)=>{a.d(t,{Z:()=>o});var n=a(27378),r=a(40624),i=a(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:a,text:o,variant:s}=e;return n.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},a&&n.createElement(i.Z,{icon:a,className:"mr-1"}),o)}},74889:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>s,toc:()=>m});var n=a(25773),r=(a(27378),a(35318)),i=a(79022);const l={title:"Code generation",toc_max_heading_level:6,tags:["codegen","generator","scaffold","template"]},o=void 0,s={unversionedId:"guides/codegen",id:"guides/codegen",title:"Code generation",description:"Code generation provides an easy mechanism for automating common development workflows and file",source:"@site/docs/guides/codegen.mdx",sourceDirName:"guides",slug:"/guides/codegen",permalink:"/docs/guides/codegen",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/codegen.mdx",tags:[{label:"codegen",permalink:"/docs/tags/codegen"},{label:"generator",permalink:"/docs/tags/generator"},{label:"scaffold",permalink:"/docs/tags/scaffold"},{label:"template",permalink:"/docs/tags/template"}],version:"current",frontMatter:{title:"Code generation",toc_max_heading_level:6,tags:["codegen","generator","scaffold","template"]},sidebar:"guides",previous:{title:"Continuous integration (CI)",permalink:"/docs/guides/ci"},next:{title:"Code owners",permalink:"/docs/guides/codeowners"}},p={},m=[{value:"Creating a new template",id:"creating-a-new-template",level:2},{value:"Configuring <code>template.yml</code>",id:"configuring-templateyml",level:3},{value:"Managing files",id:"managing-files",level:3},{value:"File extensions",id:"file-extensions",level:4},{value:"Partials",id:"partials",level:4},{value:'Raws<VersionLabel version="1.11.0" />',id:"raws",level:4},{value:"Frontmatter",id:"frontmatter",level:4},{value:"Assets",id:"assets",level:4},{value:"Template engine & syntax",id:"template-engine--syntax",level:3},{value:"Filters",id:"filters",level:4},{value:"Variables",id:"variables",level:4},{value:"Generating code from a template",id:"generating-code-from-a-template",level:2},{value:"Configuring template locations",id:"configuring-template-locations",level:3},{value:"Declaring variables with CLI arguments",id:"declaring-variables-with-cli-arguments",level:3},{value:"Sharing templates",id:"sharing-templates",level:2}],d={toc:m};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Code generation provides an easy mechanism for automating common development workflows and file\nstructures. Whether it's scaffolding a new library or application, updating configuration, or\nstandardizing patterns."),(0,r.kt)("p",null,"To accomplish this, we provide a generator, which is divided into two parts. The first being the\ntemplates and their files to be scaffolded. The second is our rendering engine that writes template\nfiles to a destination."),(0,r.kt)("h2",{id:"creating-a-new-template"},"Creating a new template"),(0,r.kt)("p",null,"To create a new template, run ",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate"))," while passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--template")," option. This\nwill create a template directory and ",(0,r.kt)("a",{parentName:"p",href:"../config/template"},(0,r.kt)("inlineCode",{parentName:"a"},"template.yml"))," file in the 1st configured template\nlocation defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#templates"},(0,r.kt)("inlineCode",{parentName:"a"},"generator.templates")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate <name> --template\n")),(0,r.kt)("h3",{id:"configuring-templateyml"},"Configuring ",(0,r.kt)("inlineCode",{parentName:"h3"},"template.yml")),(0,r.kt)("p",null,"Every template requires a ",(0,r.kt)("a",{parentName:"p",href:"../config/template"},(0,r.kt)("inlineCode",{parentName:"a"},"template.yml"))," file in the template's directory root. This file\nacts as a schema and declares metadata and variables required by the generator."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"title: 'npm package'\ndescription: |\n Scaffolds the initial structure for an npm package,\n including source and test folders, a package.json, and more.\nvariables:\n name:\n type: 'string'\n default: ''\n required: true\n prompt: 'Package name?'\n")),(0,r.kt)("h3",{id:"managing-files"},"Managing files"),(0,r.kt)("p",null,"Feel free to add any files and folders to the template that you'd like to be generated by consumers!\nThese files will then be scaffolded 1:1 in structure at the target destination."),(0,r.kt)("p",null,"An example of the templates folder structure may look something like the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"templates/\n\u251c\u2500\u2500 npm-package/\n\u2502 \u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 tests/\n\u2502 \u251c\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 template.yml\n\u2514\u2500\u2500 react-app/\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Variables can be interpolated into file paths using the form ",(0,r.kt)("inlineCode",{parentName:"p"},"[varName]"),". For example, if you had\na template file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/[type].ts"),", and a variable ",(0,r.kt)("inlineCode",{parentName:"p"},"type"),' with a value of "bin", then the destination\nfile path would be ',(0,r.kt)("inlineCode",{parentName:"p"},"src/bin.ts"),".")),(0,r.kt)("h4",{id:"file-extensions"},"File extensions"),(0,r.kt)("p",null,"To enable syntax highlighting for template engine syntax, you may use the ",(0,r.kt)("inlineCode",{parentName:"p"},".tera")," (preferred) or\n",(0,r.kt)("inlineCode",{parentName:"p"},".twig")," file extensions. These extensions are optional, but will be removed when the files are\ngenerated."),(0,r.kt)("p",null,"Depending on your preferred editor, these extensions may be supported through a plugin, or can be\nconfigured based on file type."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"VS Code"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=karunamurti.tera"},"Tera extension")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=mblode.twig-language-2"},"Twig extension")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Atom"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://atom.io/packages/atom-twig"},"Twig package")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Webstorm"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://plugins.jetbrains.com/plugin/7303-twig"},"Twig plugin"))))),(0,r.kt)("h4",{id:"partials"},"Partials"),(0,r.kt)("p",null,"Partials are special template files that are used for\n",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/docs/#include"},"composition")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/docs/#inheritance"},"inheritance"),". Because of this, these files ",(0,r.kt)("em",{parentName:"p"},"should\nnot")," be generated into the target destination, and ",(0,r.kt)("em",{parentName:"p"},"do not")," support frontmatter."),(0,r.kt)("p",null,'To ensure they are not generated, include the word "partial" anywhere in the file path. For example,\n',(0,r.kt)("inlineCode",{parentName:"p"},"partials/header.tpl")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"header.partial.tpl"),"."),(0,r.kt)("h4",{id:"raws"},"Raws",(0,r.kt)(i.Z,{version:"1.11.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Raw template files are another special type of file that bypass all Tera rendering, and are used\nas-is instead. This is useful for files that contain syntax that conflicts with Tera."),(0,r.kt)("p",null,"To mark a file as raw, add a ",(0,r.kt)("inlineCode",{parentName:"p"},".raw")," extension, for example: ",(0,r.kt)("inlineCode",{parentName:"p"},"file.raw.js")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"file.js.raw"),". When the\nfile is generated, the ",(0,r.kt)("inlineCode",{parentName:"p"},".raw")," extension will be removed."),(0,r.kt)("h4",{id:"frontmatter"},"Frontmatter"),(0,r.kt)("p",null,'Frontmatter is a well-known concept for "per file configuration", and is achieved by inserting YAML\nat the top of the file, delimited by wrapping ',(0,r.kt)("inlineCode",{parentName:"p"},"---"),". This is a very powerful feature that provides\nmore control than the alternatives, and allows for some very cool integrations."),(0,r.kt)("p",null,"moon's frontmatter supports functionality like file skipping, force overwriting, and destination\npath rewriting.\n",(0,r.kt)("a",{parentName:"p",href:"../config/template#frontmatter"},"View the configuration docs for a full list of supported fields"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig",metastring:'title="package.json"',title:'"package.json"'},'---\nforce: true\n---\n\n{\n "name": "{{ name | kebab_case }}",\n "version": "0.0.1"\n}\n')),(0,r.kt)("p",null,"Since frontmatter exists in the file itself, you can take advantage of the rendering engine to\npopulate the field values dynamically. For example, if you're scaffolding a React component, you can\nconvert the component name and file name to PascalCase."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% set component_name = name | pascal_case %}\n\n---\nto: components/{{ component_name }}.tsx\n---\n\nexport function {{ component_name }}() {\n return <div />;\n}\n")),(0,r.kt)("h4",{id:"assets"},"Assets"),(0,r.kt)("p",null,"Assets are binary files that are copied as-is to the destination, without any rendering, and no\nsupport for frontmatter. This applies to all non-text based files, like images, audio, video, etc."),(0,r.kt)("h3",{id:"template-engine--syntax"},"Template engine & syntax"),(0,r.kt)("p",null,"Rendering templates is powered by ",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/"},"Tera"),", a Rust based template\nengine with syntax similar to Twig, Liquid, Django, and more. We highly encourage everyone to read\nTera's documentation for an in-depth understanding, but as a quick reference, Tera supports the\nfollowing:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#variables"},"Variable interpolation")," (defined with the\n",(0,r.kt)("a",{parentName:"li",href:"../config/template#variables"},(0,r.kt)("inlineCode",{parentName:"a"},"variables"))," setting), with\n",(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#built-in-filters"},"built-in filters"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{{ varName }} -> foo\n{{ varName | upper }} -> FOO\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#if"},"Conditional blocks")," and\n",(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#for"},"loops"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% if price < 10 or always_show %}\n Price is {{ price }}.\n{% elif price > 1000 and not rich %}\n That's expensive!\n{% else %}\n N/A\n{% endif %}\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% for item in items %}\n {{ loop.index }} - {{ item.name }}\n{% endfor %}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"And many more features, like auto-escaping, white space control, and math operators!")),(0,r.kt)("h4",{id:"filters"},"Filters"),(0,r.kt)("p",null,"Filters are a mechanism for transforming values during interpolation and are written using pipes\n(",(0,r.kt)("inlineCode",{parentName:"p"},"|"),"). Tera provides many ",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/docs/#built-in-filters"},"built-in filters"),",\nbut we also provide the following custom filters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Strings - ",(0,r.kt)("inlineCode",{parentName:"li"},"camel_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pascal_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"snake_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"upper_snake_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"kebab_case"),",\n",(0,r.kt)("inlineCode",{parentName:"li"},"upper_kebab_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"lower_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"upper_case"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{{ some_value | upper_case }}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Paths - ",(0,r.kt)("inlineCode",{parentName:"li"},"path_join"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"path_relative"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},'{{ some_path | path_join(part = "another/folder") }}\n{{ some_path | path_relative(from = other_path) }}\n{{ some_path | path_relative(to = other_path) }}\n')),(0,r.kt)("h4",{id:"variables"},"Variables"),(0,r.kt)("p",null,"The following variables are always available within a template:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dest_dir")," - Absolute path to the destination folder."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dest_rel_dir")," - Relative path to the destination folder from the working directory."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"working_dir")," - Current working directory."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"workspace_root")," - The moon workspace root.")),(0,r.kt)("h2",{id:"generating-code-from-a-template"},"Generating code from a template"),(0,r.kt)("p",null,"Once a template has been created and configured, you can generate files based on it using the\n",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate"))," command! This is also know as scaffolding or code generation."),(0,r.kt)("p",null,"This command requires the name of a template as the 1st argument. The template name is the folder\nname on the file system that houses all the template files."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate npm-package\n")),(0,r.kt)("p",null,"An optional destination path, relative from the current working directory, can be provided as the\n2nd argument. If not provided, you'll be prompted during generation to provide one."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate npm-package ./packages/example\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This command is extremely interactive, as we'll prompt you for the destination path, variable\nvalues, whether to overwrite files, and more. If you'd prefer to avoid interactions, pass\n",(0,r.kt)("inlineCode",{parentName:"p"},"--defaults"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"--force"),", or both.")),(0,r.kt)("h3",{id:"configuring-template-locations"},"Configuring template locations"),(0,r.kt)("p",null,"Templates can be located anywhere, especially when ",(0,r.kt)("a",{parentName:"p",href:"#sharing-templates"},"being shared"),". Because of\nthis, our generator will loop through all template paths configured in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#templates"},(0,r.kt)("inlineCode",{parentName:"a"},"generator.templates")),", in order, until a match is found (template name matches the\nfolder name)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"generator:\n templates:\n - './templates'\n - './other/templates'\n")),(0,r.kt)("h3",{id:"declaring-variables-with-cli-arguments"},"Declaring variables with CLI arguments"),(0,r.kt)("p",null,"During generation, you'll be prompted in the terminal to provide a value for any configured\nvariables. However, you can pre-fill these variable values by passing arbitrary command line\narguments after ",(0,r.kt)("inlineCode",{parentName:"p"},"--")," to ",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate")),". Argument names must exactly match the variable\nnames."),(0,r.kt)("p",null,"Using the package template example above, we could pre-fill the ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," variable like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate npm-package ./packages/example -- --name '@company/example' --private\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Boolean variables can be negated by prefixing the argument with ",(0,r.kt)("inlineCode",{parentName:"p"},"--no-<arg>"),".")),(0,r.kt)("h2",{id:"sharing-templates"},"Sharing templates"),(0,r.kt)("p",null,"Although moon is designed for a monorepo, you may be using multiple repositories and would like to\nuse the same templates across all of them."),(0,r.kt)("p",null,"This is technically possible, but with 1 caveat, and that is that moon's generator requires\ntemplates to exist within the current repository, relative from the workspace root. So how can we\nshare templates across repositories? Why not try..."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Git submodules"),(0,r.kt)("li",{parentName:"ul"},"npm packages"),(0,r.kt)("li",{parentName:"ul"},"Another packaging system")),(0,r.kt)("p",null,"Regardless of the choice, simply configure ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#templates"},(0,r.kt)("inlineCode",{parentName:"a"},"generator.templates"))," to point to these\nlocations:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"generator:\n templates:\n - './templates'\n - './node_modules/@company/shared-templates'\n - './path/to/submodules'\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/488a99ce.d4313d13.js b/assets/js/488a99ce.d4313d13.js deleted file mode 100644 index 1d94b5ba4a1..00000000000 --- a/assets/js/488a99ce.d4313d13.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2258],{35318:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>u});var n=a(27378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),c=p(a),u=r,g=c["".concat(s,".").concat(u)]||c[u]||d[u]||i;return a?n.createElement(g,l(l({ref:t},m),{},{components:a})):n.createElement(g,l({ref:t},m))}));function u(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=c;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;p<i;p++)l[p]=a[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},79022:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),r=a(9619);function i(e){let{header:t,inline:a,updated:i,version:l}=e;return n.createElement(r.Z,{text:`v${l}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":a?"inline-block":"ml-2"})}},9619:(e,t,a)=>{a.d(t,{Z:()=>o});var n=a(27378),r=a(40624),i=a(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:a,text:o,variant:s}=e;return n.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},a&&n.createElement(i.Z,{icon:a,className:"mr-1"}),o)}},74889:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>s,toc:()=>m});var n=a(25773),r=(a(27378),a(35318)),i=a(79022);const l={title:"Code generation",toc_max_heading_level:6,tags:["codegen","generator","scaffold","template"]},o=void 0,s={unversionedId:"guides/codegen",id:"guides/codegen",title:"Code generation",description:"Code generation provides an easy mechanism for automating common development workflows and file",source:"@site/docs/guides/codegen.mdx",sourceDirName:"guides",slug:"/guides/codegen",permalink:"/docs/guides/codegen",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/codegen.mdx",tags:[{label:"codegen",permalink:"/docs/tags/codegen"},{label:"generator",permalink:"/docs/tags/generator"},{label:"scaffold",permalink:"/docs/tags/scaffold"},{label:"template",permalink:"/docs/tags/template"}],version:"current",frontMatter:{title:"Code generation",toc_max_heading_level:6,tags:["codegen","generator","scaffold","template"]},sidebar:"guides",previous:{title:"Continuous integration (CI)",permalink:"/docs/guides/ci"},next:{title:"Code owners",permalink:"/docs/guides/codeowners"}},p={},m=[{value:"Creating a new template",id:"creating-a-new-template",level:2},{value:"Configuring <code>template.yml</code>",id:"configuring-templateyml",level:3},{value:"Managing files",id:"managing-files",level:3},{value:"File extensions",id:"file-extensions",level:4},{value:"Partials",id:"partials",level:4},{value:'Raws<VersionLabel version="1.11.0" />',id:"raws",level:4},{value:"Frontmatter",id:"frontmatter",level:4},{value:"Assets",id:"assets",level:4},{value:"Template engine & syntax",id:"template-engine--syntax",level:3},{value:"Filters",id:"filters",level:4},{value:"Variables",id:"variables",level:4},{value:"Generating code from a template",id:"generating-code-from-a-template",level:2},{value:"Configuring template locations",id:"configuring-template-locations",level:3},{value:"Declaring variables with CLI arguments",id:"declaring-variables-with-cli-arguments",level:3},{value:"Sharing templates",id:"sharing-templates",level:2}],d={toc:m};function c(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Code generation provides an easy mechanism for automating common development workflows and file\nstructures. Whether it's scaffolding a new library or application, updating configuration, or\nstandardizing patterns."),(0,r.kt)("p",null,"To accomplish this, we provide a generator, which is divided into two parts. The first being the\ntemplates and their files to be scaffolded. The second is our rendering engine that writes template\nfiles to a destination."),(0,r.kt)("h2",{id:"creating-a-new-template"},"Creating a new template"),(0,r.kt)("p",null,"To create a new template, run ",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate"))," while passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--template")," option. This\nwill create a template directory and ",(0,r.kt)("a",{parentName:"p",href:"../config/template"},(0,r.kt)("inlineCode",{parentName:"a"},"template.yml"))," file in the 1st configured template\nlocation defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#templates"},(0,r.kt)("inlineCode",{parentName:"a"},"generator.templates")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate <name> --template\n")),(0,r.kt)("h3",{id:"configuring-templateyml"},"Configuring ",(0,r.kt)("inlineCode",{parentName:"h3"},"template.yml")),(0,r.kt)("p",null,"Every template requires a ",(0,r.kt)("a",{parentName:"p",href:"../config/template"},(0,r.kt)("inlineCode",{parentName:"a"},"template.yml"))," file in the template's directory root. This file\nacts as a schema and declares metadata and variables required by the generator."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"title: 'npm package'\ndescription: |\n Scaffolds the initial structure for an npm package,\n including source and test folders, a package.json, and more.\nvariables:\n name:\n type: 'string'\n default: ''\n required: true\n prompt: 'Package name?'\n")),(0,r.kt)("h3",{id:"managing-files"},"Managing files"),(0,r.kt)("p",null,"Feel free to add any files and folders to the template that you'd like to be generated by consumers!\nThese files will then be scaffolded 1:1 in structure at the target destination."),(0,r.kt)("p",null,"An example of the templates folder structure may look something like the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"templates/\n\u251c\u2500\u2500 npm-package/\n\u2502 \u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 tests/\n\u2502 \u251c\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 template.yml\n\u2514\u2500\u2500 react-app/\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Variables can be interpolated into file paths using the form ",(0,r.kt)("inlineCode",{parentName:"p"},"[varName]"),". For example, if you had\na template file ",(0,r.kt)("inlineCode",{parentName:"p"},"src/[type].ts"),", and a variable ",(0,r.kt)("inlineCode",{parentName:"p"},"type"),' with a value of "bin", then the destination\nfile path would be ',(0,r.kt)("inlineCode",{parentName:"p"},"src/bin.ts"),".")),(0,r.kt)("h4",{id:"file-extensions"},"File extensions"),(0,r.kt)("p",null,"To enable syntax highlighting for template engine syntax, you may use the ",(0,r.kt)("inlineCode",{parentName:"p"},".tera")," (preferred) or\n",(0,r.kt)("inlineCode",{parentName:"p"},".twig")," file extensions. These extensions are optional, but will be removed when the files are\ngenerated."),(0,r.kt)("p",null,"Depending on your preferred editor, these extensions may be supported through a plugin, or can be\nconfigured based on file type."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"VS Code"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=karunamurti.tera"},"Tera extension")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=mblode.twig-language-2"},"Twig extension")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Atom"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://atom.io/packages/atom-twig"},"Twig package")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Webstorm"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://plugins.jetbrains.com/plugin/7303-twig"},"Twig plugin"))))),(0,r.kt)("h4",{id:"partials"},"Partials"),(0,r.kt)("p",null,"Partials are special template files that are used for\n",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/docs/#include"},"composition")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/docs/#inheritance"},"inheritance"),". Because of this, these files ",(0,r.kt)("em",{parentName:"p"},"should\nnot")," be generated into the target destination, and ",(0,r.kt)("em",{parentName:"p"},"do not")," support frontmatter."),(0,r.kt)("p",null,'To ensure they are not generated, include the word "partial" anywhere in the file path. For example,\n',(0,r.kt)("inlineCode",{parentName:"p"},"partials/header.tpl")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"header.partial.tpl"),"."),(0,r.kt)("h4",{id:"raws"},"Raws",(0,r.kt)(i.Z,{version:"1.11.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Raw template files are another special type of file that bypass all Tera rendering, and are used\nas-is instead. This is useful for files that contain syntax that conflicts with Tera."),(0,r.kt)("p",null,"To mark a file as raw, add a ",(0,r.kt)("inlineCode",{parentName:"p"},".raw")," extension, for example: ",(0,r.kt)("inlineCode",{parentName:"p"},"file.raw.js")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"file.js.raw"),". When the\nfile is generated, the ",(0,r.kt)("inlineCode",{parentName:"p"},".raw")," extension will be removed."),(0,r.kt)("h4",{id:"frontmatter"},"Frontmatter"),(0,r.kt)("p",null,'Frontmatter is a well-known concept for "per file configuration", and is achieved by inserting YAML\nat the top of the file, delimited by wrapping ',(0,r.kt)("inlineCode",{parentName:"p"},"---"),". This is a very powerful feature that provides\nmore control than the alternatives, and allows for some very cool integrations."),(0,r.kt)("p",null,"moon's frontmatter supports functionality like file skipping, force overwriting, and destination\npath rewriting.\n",(0,r.kt)("a",{parentName:"p",href:"../config/template#frontmatter"},"View the configuration docs for a full list of supported fields"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig",metastring:'title="package.json"',title:'"package.json"'},'---\nforce: true\n---\n\n{\n "name": "{{ name | kebab_case }}",\n "version": "0.0.1"\n}\n')),(0,r.kt)("p",null,"Since frontmatter exists in the file itself, you can take advantage of the rendering engine to\npopulate the field values dynamically. For example, if you're scaffolding a React component, you can\nconvert the component name and file name to PascalCase."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% set component_name = name | pascal_case %}\n\n---\nto: components/{{ component_name }}.tsx\n---\n\nexport function {{ component_name }}() {\n return <div />;\n}\n")),(0,r.kt)("h4",{id:"assets"},"Assets"),(0,r.kt)("p",null,"Assets are binary files that are copied as-is to the destination, without any rendering, and no\nsupport for frontmatter. This applies to all non-text based files, like images, audio, video, etc."),(0,r.kt)("h3",{id:"template-engine--syntax"},"Template engine & syntax"),(0,r.kt)("p",null,"Rendering templates is powered by ",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/"},"Tera"),", a Rust based template\nengine with syntax similar to Twig, Liquid, Django, and more. We highly encourage everyone to read\nTera's documentation for an in-depth understanding, but as a quick reference, Tera supports the\nfollowing:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#variables"},"Variable interpolation")," (defined with the\n",(0,r.kt)("a",{parentName:"li",href:"../config/template#variables"},(0,r.kt)("inlineCode",{parentName:"a"},"variables"))," setting), with\n",(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#built-in-filters"},"built-in filters"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{{ varName }} -> foo\n{{ varName | upper }} -> FOO\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#if"},"Conditional blocks")," and\n",(0,r.kt)("a",{parentName:"li",href:"https://keats.github.io/tera/docs/#for"},"loops"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% if price < 10 or always_show %}\n Price is {{ price }}.\n{% elif price > 1000 and not rich %}\n That's expensive!\n{% else %}\n N/A\n{% endif %}\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% for item in items %}\n {{ loop.index }} - {{ item.name }}\n{% endfor %}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"And many more features, like auto-escaping, white space control, and math operators!")),(0,r.kt)("h4",{id:"filters"},"Filters"),(0,r.kt)("p",null,"Filters are a mechanism for transforming values during interpolation and are written using pipes\n(",(0,r.kt)("inlineCode",{parentName:"p"},"|"),"). Tera provides many ",(0,r.kt)("a",{parentName:"p",href:"https://keats.github.io/tera/docs/#built-in-filters"},"built-in filters"),",\nbut we also provide the following custom filters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Strings - ",(0,r.kt)("inlineCode",{parentName:"li"},"camel_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pascal_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"snake_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"upper_snake_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"kebab_case"),",\n",(0,r.kt)("inlineCode",{parentName:"li"},"upper_kebab_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"lower_case"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"upper_case"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{{ some_value | upper_case }}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Paths - ",(0,r.kt)("inlineCode",{parentName:"li"},"path_join"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"path_relative"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},'{{ some_path | path_join(part = "another/folder") }}\n{{ some_path | path_relative(from = other_path) }}\n{{ some_path | path_relative(to = other_path) }}\n')),(0,r.kt)("h4",{id:"variables"},"Variables"),(0,r.kt)("p",null,"The following variables are always available within a template:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dest_dir")," - Absolute path to the destination folder."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"dest_rel_dir")," - Relative path to the destination folder from the working directory."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"working_dir")," - Current working directory."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"workspace_root")," - The moon workspace root.")),(0,r.kt)("h2",{id:"generating-code-from-a-template"},"Generating code from a template"),(0,r.kt)("p",null,"Once a template has been created and configured, you can generate files based on it using the\n",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate"))," command! This is also know as scaffolding or code generation."),(0,r.kt)("p",null,"This command requires the name of a template as the 1st argument. The template name is the folder\nname on the file system that houses all the template files."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate npm-package\n")),(0,r.kt)("p",null,"An optional destination path, relative from the current working directory, can be provided as the\n2nd argument. If not provided, you'll be prompted during generation to provide one."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate npm-package ./packages/example\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This command is extremely interactive, as we'll prompt you for the destination path, variable\nvalues, whether to overwrite files, and more. If you'd prefer to avoid interactions, pass\n",(0,r.kt)("inlineCode",{parentName:"p"},"--defaults"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"--force"),", or both.")),(0,r.kt)("h3",{id:"configuring-template-locations"},"Configuring template locations"),(0,r.kt)("p",null,"Templates can be located anywhere, especially when ",(0,r.kt)("a",{parentName:"p",href:"#sharing-templates"},"being shared"),". Because of\nthis, our generator will loop through all template paths configured in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#templates"},(0,r.kt)("inlineCode",{parentName:"a"},"generator.templates")),", in order, until a match is found (template name matches the\nfolder name)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"generator:\n templates:\n - './templates'\n - './other/templates'\n")),(0,r.kt)("h3",{id:"declaring-variables-with-cli-arguments"},"Declaring variables with CLI arguments"),(0,r.kt)("p",null,"During generation, you'll be prompted in the terminal to provide a value for any configured\nvariables. However, you can pre-fill these variable values by passing arbitrary command line\narguments after ",(0,r.kt)("inlineCode",{parentName:"p"},"--")," to ",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate")),". Argument names must exactly match the variable\nnames."),(0,r.kt)("p",null,"Using the package template example above, we could pre-fill the ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," variable like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon generate npm-package ./packages/example -- --name '@company/example' --private\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Boolean variables can be negated by prefixing the argument with ",(0,r.kt)("inlineCode",{parentName:"p"},"--no-<arg>"),".")),(0,r.kt)("h2",{id:"sharing-templates"},"Sharing templates"),(0,r.kt)("p",null,"Although moon is designed for a monorepo, you may be using multiple repositories and would like to\nuse the same templates across all of them."),(0,r.kt)("p",null,"This is technically possible, but with 1 caveat, and that is that moon's generator requires\ntemplates to exist within the current repository, relative from the workspace root. So how can we\nshare templates across repositories? Why not try..."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Git submodules"),(0,r.kt)("li",{parentName:"ul"},"npm packages"),(0,r.kt)("li",{parentName:"ul"},"Another packaging system")),(0,r.kt)("p",null,"Regardless of the choice, simply configure ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#templates"},(0,r.kt)("inlineCode",{parentName:"a"},"generator.templates"))," to point to these\nlocations:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"generator:\n templates:\n - './templates'\n - './node_modules/@company/shared-templates'\n - './path/to/submodules'\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/48b0f434.3c0ff780.js b/assets/js/48b0f434.3c0ff780.js new file mode 100644 index 00000000000..11ec762cc29 --- /dev/null +++ b/assets/js/48b0f434.3c0ff780.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15867],{81755:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/github","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/48b0f434.7a398d57.js b/assets/js/48b0f434.7a398d57.js deleted file mode 100644 index 7d5a0d94b9e..00000000000 --- a/assets/js/48b0f434.7a398d57.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5867],{81755:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/github","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4931a616.ae3384f8.js b/assets/js/4931a616.ae3384f8.js deleted file mode 100644 index ec3de9945a0..00000000000 --- a/assets/js/4931a616.ae3384f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8529],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u<o;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:r}),[h,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),b=(()=>{const e=m??h;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{b&&s(b)}),[b]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),f(e)}),[d,f,o]),tabValues:o}}},88497:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),o=(n(33337),n(39798),n(76911));const l={slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},i=void 0,s={permalink:"/blog/v0.24",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx",source:"@site/blog/2023-02-13_v0.24.mdx",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",description:"With this release, we've polished our CLI experience and improved task interoperability.",date:"2023-02-13T00:00:00.000Z",formattedDate:"February 13, 2023",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"platform",permalink:"/blog/tags/platform"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"}],readingTime:4.28,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"},{name:"James Pozdena",title:"Founder, developer",url:"https://github.com/jpoz",imageURL:"/img/authors/james.jpg",key:"jpoz"}],frontMatter:{slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},prevItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"},nextItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"}},u={image:n(8304).Z,authorsImageUrls:[void 0,void 0]},c=[{value:"Remote caching now available",id:"remote-caching-now-available",level:2},{value:"Project-level task platform",id:"project-level-task-platform",level:2},{value:"Interactive tasks",id:"interactive-tasks",level:2},{value:"Improved <code>moon query</code> commands (breaking)",id:"improved-moon-query-commands-breaking",level:2},{value:"New <code>moon query tasks</code> command",id:"new-moon-query-tasks-command",level:2},{value:"Shell completions",id:"shell-completions",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've polished our CLI experience and improved task interoperability."),(0,r.kt)("h2",{id:"remote-caching-now-available"},"Remote caching now available"),(0,r.kt)("p",null,"If you missed our announcement earlier this week,\n",(0,r.kt)("a",{parentName:"p",href:"/blog/moonbase"},"remote caching is now publicly available through our new service moonbase"),"! If\nyou're looking to speed up your CI pipelines and share build artifacts between runs, moonbase can\nhelp."),(0,r.kt)("div",{class:"flex justify-center"},(0,r.kt)(o.Z,{label:"Try moonbase for free!",href:"https://moonrepo.app",size:"lg",mdxType:"Button"})),(0,r.kt)("h2",{id:"project-level-task-platform"},"Project-level task platform"),(0,r.kt)("p",null,"In our previous release, ",(0,r.kt)("a",{parentName:"p",href:"./v0.23#project-level-environment-variables"},"v0.23"),", we added support for\nproject-level environment variables. This is great as it helps to reduce duplication for projects\nwith many tasks. On that note, we wondered which configuration field we could apply similar\ntreatment, and as such, we've added a project-level ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#platform"},(0,r.kt)("inlineCode",{parentName:"a"},"platform")),"\nsetting."),(0,r.kt)("p",null,"When this setting is defined, all task's within the current project that have ",(0,r.kt)("em",{parentName:"p"},"not explicitly"),"\nconfigured their ",(0,r.kt)("inlineCode",{parentName:"p"},"platform"),", will inherit the project-level platform. If neither settings are\ndefined, we'll attempt to detect the correct platform based on the state of the project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"# Will set non-explicit task's platform to node\nplatform: 'node'\n\ntasks:\n # Will be node\n dev: # ...\n\n # Will be node\n build: # ...\n\n # Will be system\n serve:\n # ...\n platform: 'system'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This setting is ",(0,r.kt)("em",{parentName:"p"},"extremely useful")," for projects that contain multiple languages. Even more so once\nwe land Bun and Deno support, as we'll need a way to differentiate JavaScript/TypeScript projects!")),(0,r.kt)("h2",{id:"interactive-tasks"},"Interactive tasks"),(0,r.kt)("p",null,"When moon executes a task, it streams both stdout and stderr to the terminal ",(0,r.kt)("em",{parentName:"p"},"and")," captures the\noutput for later use. We do this for 2 reasons:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"We store stdout.log and stderr.log files in a tarball archive."),(0,r.kt)("li",{parentName:"ul"},"We replay this captured output when executing a task that has been cached.")),(0,r.kt)("p",null,"While this works, our approach is non-standard. Streams are either piped or inherited, not both!\nBecause of our custom abstraction around streams and output capturing, it disrupts stdin, breaking\nall interactive commands. If you tried to run a task that prompted you with a question and were\nunable to answer it, this is why!"),(0,r.kt)("p",null,"To remedy this shortcoming, we're approaching this from 2 angles. The first is that all tasks marked\nas ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," (or have caching disabled) will no longer capture streamed\noutput, and will instead stream natively, allowing interactivity out of the box, but only when\nthey're the only task being ran. This will cover the majority of use cases."),(0,r.kt)("p",null,"For the remaining use cases, we're introducing a new ",(0,r.kt)("inlineCode",{parentName:"p"},"--interactive")," flag for\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run")),". When this flag is provided, it will force the target into an\ninteractive mode."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:new --interactive\n")),(0,r.kt)("h2",{id:"improved-moon-query-commands-breaking"},"Improved ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon query")," commands (breaking)"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/query/projects"},(0,r.kt)("inlineCode",{parentName:"a"},"moon query projects"))," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/query/touched-files"},(0,r.kt)("inlineCode",{parentName:"a"},"moon query touched-files"))," commands are useful for building\ncustom solutions and integrations on top of moon, but they weren't developer friendly as they output\nlarge JSON blobs. To remedy this, we've updated both commands to output a simple human readable\nformat by default, and moved the JSON output behind a ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," flag."),(0,r.kt)("p",null,"For example, ",(0,r.kt)("inlineCode",{parentName:"p"},"moon query touched-files")," now outputs a list of absolute file paths separated by new\nlines."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ moon query touched-files\n/moon/website/docs/commands/query/projects.mdx\n/moon/crates/cli/tests/query_test.rs\n/moon/crates/cli/src/commands/query.rs\n/moon/website/blog/2023-02-13_v0.24.mdx\n")),(0,r.kt)("p",null,"While ",(0,r.kt)("inlineCode",{parentName:"p"},"moon query projects")," now outputs a list of project separated by new lines, where each line\ncontains the project name, source, type, and language."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ moon query projects\nreport | packages/report | library | typescript\nruntime | packages/runtime | library | typescript\ntypes | packages/types | library | typescript\nvisualizer | packages/visualizer | library | typescript\nwebsite | website | application | typescript\n")),(0,r.kt)("p",null,"We had 2 goals in mind for this change, the first was to make it easily readable, and the second was\nfor the default output to be easily parseable. We believe we've accomplished these goals!"),(0,r.kt)("h2",{id:"new-moon-query-tasks-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon query tasks")," command"),(0,r.kt)("p",null,'To expand on the query improvements above, we wanted to provide a way to also query for tasks,\nanswering the question of "What tasks exists and for what projects?". And with this, we\'re\nintroducing a new ',(0,r.kt)("a",{parentName:"p",href:"/docs/commands/query/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},"moon query tasks"))," command!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ moon query tasks\ntypes\n :build | packemon\n :format | prettier\n :lint | eslint\n :test | jest\n :typecheck | tsc\nreport\n :build | packemon\n :format | prettier\n :lint | eslint\n :test | jest\n :typecheck | tsc\n...\n")),(0,r.kt)("h2",{id:"shell-completions"},"Shell completions"),(0,r.kt)("p",null,"Auto-completion in your terminal increases productivity, which we're a massive fan of. To help\nsupport this, we're introducing the ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/completions"},(0,r.kt)("inlineCode",{parentName:"a"},"moon completions"))," command, which\ngenerates the appropriate command completions for your current shell."),(0,r.kt)("p",null,"This command writes to stdout, which can then be redirected to a file of your choice. Be sure to\nconfigure your shell profile to load the completions!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon completions > ~/.bash_completion.d/moon.sh\n")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("a",{parentName:"li",href:"https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/"},"TypeScript v5"),"\nsupport."),(0,r.kt)("li",{parentName:"ul"},"Added a ",(0,r.kt)("inlineCode",{parentName:"li"},"hasher.walkStrategy")," setting to ",(0,r.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),"."),(0,r.kt)("li",{parentName:"ul"},"Updated task ",(0,r.kt)("inlineCode",{parentName:"li"},"outputs")," to support token functions (",(0,r.kt)("inlineCode",{parentName:"li"},"@group"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"@globs"),", etc)."),(0,r.kt)("li",{parentName:"ul"},"Reworked our comparison/baseline estimations calcuations.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.25 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Deno tier 2 support."),(0,r.kt)("li",{parentName:"ul"},"CI insights and metrics within moonbase."),(0,r.kt)("li",{parentName:"ul"},"Project-level TypeScript settings.")))}m.isMDXComponent=!0},8304:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.24-0e225eaeb8b3c60cc26907770c589000.png"}}]); \ No newline at end of file diff --git a/assets/js/4931a616.fcb42eab.js b/assets/js/4931a616.fcb42eab.js new file mode 100644 index 00000000000..2225a5688b1 --- /dev/null +++ b/assets/js/4931a616.fcb42eab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48529],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var u=2;u<o;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:r}),[h,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),b=(()=>{const e=m??h;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{b&&s(b)}),[b]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),f(e)}),[d,f,o]),tabValues:o}}},88497:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),o=(n(33337),n(39798),n(76911));const l={slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},i=void 0,s={permalink:"/blog/v0.24",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx",source:"@site/blog/2023-02-13_v0.24.mdx",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",description:"With this release, we've polished our CLI experience and improved task interoperability.",date:"2023-02-13T00:00:00.000Z",formattedDate:"February 13, 2023",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"platform",permalink:"/blog/tags/platform"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"}],readingTime:4.28,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"},{name:"James Pozdena",title:"Founder, developer",url:"https://github.com/jpoz",imageURL:"/img/authors/james.jpg",key:"jpoz"}],frontMatter:{slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},prevItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"},nextItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"}},u={image:n(8304).Z,authorsImageUrls:[void 0,void 0]},c=[{value:"Remote caching now available",id:"remote-caching-now-available",level:2},{value:"Project-level task platform",id:"project-level-task-platform",level:2},{value:"Interactive tasks",id:"interactive-tasks",level:2},{value:"Improved <code>moon query</code> commands (breaking)",id:"improved-moon-query-commands-breaking",level:2},{value:"New <code>moon query tasks</code> command",id:"new-moon-query-tasks-command",level:2},{value:"Shell completions",id:"shell-completions",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've polished our CLI experience and improved task interoperability."),(0,r.kt)("h2",{id:"remote-caching-now-available"},"Remote caching now available"),(0,r.kt)("p",null,"If you missed our announcement earlier this week,\n",(0,r.kt)("a",{parentName:"p",href:"/blog/moonbase"},"remote caching is now publicly available through our new service moonbase"),"! If\nyou're looking to speed up your CI pipelines and share build artifacts between runs, moonbase can\nhelp."),(0,r.kt)("div",{class:"flex justify-center"},(0,r.kt)(o.Z,{label:"Try moonbase for free!",href:"https://moonrepo.app",size:"lg",mdxType:"Button"})),(0,r.kt)("h2",{id:"project-level-task-platform"},"Project-level task platform"),(0,r.kt)("p",null,"In our previous release, ",(0,r.kt)("a",{parentName:"p",href:"./v0.23#project-level-environment-variables"},"v0.23"),", we added support for\nproject-level environment variables. This is great as it helps to reduce duplication for projects\nwith many tasks. On that note, we wondered which configuration field we could apply similar\ntreatment, and as such, we've added a project-level ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#platform"},(0,r.kt)("inlineCode",{parentName:"a"},"platform")),"\nsetting."),(0,r.kt)("p",null,"When this setting is defined, all task's within the current project that have ",(0,r.kt)("em",{parentName:"p"},"not explicitly"),"\nconfigured their ",(0,r.kt)("inlineCode",{parentName:"p"},"platform"),", will inherit the project-level platform. If neither settings are\ndefined, we'll attempt to detect the correct platform based on the state of the project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"# Will set non-explicit task's platform to node\nplatform: 'node'\n\ntasks:\n # Will be node\n dev: # ...\n\n # Will be node\n build: # ...\n\n # Will be system\n serve:\n # ...\n platform: 'system'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This setting is ",(0,r.kt)("em",{parentName:"p"},"extremely useful")," for projects that contain multiple languages. Even more so once\nwe land Bun and Deno support, as we'll need a way to differentiate JavaScript/TypeScript projects!")),(0,r.kt)("h2",{id:"interactive-tasks"},"Interactive tasks"),(0,r.kt)("p",null,"When moon executes a task, it streams both stdout and stderr to the terminal ",(0,r.kt)("em",{parentName:"p"},"and")," captures the\noutput for later use. We do this for 2 reasons:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"We store stdout.log and stderr.log files in a tarball archive."),(0,r.kt)("li",{parentName:"ul"},"We replay this captured output when executing a task that has been cached.")),(0,r.kt)("p",null,"While this works, our approach is non-standard. Streams are either piped or inherited, not both!\nBecause of our custom abstraction around streams and output capturing, it disrupts stdin, breaking\nall interactive commands. If you tried to run a task that prompted you with a question and were\nunable to answer it, this is why!"),(0,r.kt)("p",null,"To remedy this shortcoming, we're approaching this from 2 angles. The first is that all tasks marked\nas ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," (or have caching disabled) will no longer capture streamed\noutput, and will instead stream natively, allowing interactivity out of the box, but only when\nthey're the only task being ran. This will cover the majority of use cases."),(0,r.kt)("p",null,"For the remaining use cases, we're introducing a new ",(0,r.kt)("inlineCode",{parentName:"p"},"--interactive")," flag for\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run")),". When this flag is provided, it will force the target into an\ninteractive mode."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:new --interactive\n")),(0,r.kt)("h2",{id:"improved-moon-query-commands-breaking"},"Improved ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon query")," commands (breaking)"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/query/projects"},(0,r.kt)("inlineCode",{parentName:"a"},"moon query projects"))," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/query/touched-files"},(0,r.kt)("inlineCode",{parentName:"a"},"moon query touched-files"))," commands are useful for building\ncustom solutions and integrations on top of moon, but they weren't developer friendly as they output\nlarge JSON blobs. To remedy this, we've updated both commands to output a simple human readable\nformat by default, and moved the JSON output behind a ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," flag."),(0,r.kt)("p",null,"For example, ",(0,r.kt)("inlineCode",{parentName:"p"},"moon query touched-files")," now outputs a list of absolute file paths separated by new\nlines."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ moon query touched-files\n/moon/website/docs/commands/query/projects.mdx\n/moon/crates/cli/tests/query_test.rs\n/moon/crates/cli/src/commands/query.rs\n/moon/website/blog/2023-02-13_v0.24.mdx\n")),(0,r.kt)("p",null,"While ",(0,r.kt)("inlineCode",{parentName:"p"},"moon query projects")," now outputs a list of project separated by new lines, where each line\ncontains the project name, source, type, and language."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ moon query projects\nreport | packages/report | library | typescript\nruntime | packages/runtime | library | typescript\ntypes | packages/types | library | typescript\nvisualizer | packages/visualizer | library | typescript\nwebsite | website | application | typescript\n")),(0,r.kt)("p",null,"We had 2 goals in mind for this change, the first was to make it easily readable, and the second was\nfor the default output to be easily parseable. We believe we've accomplished these goals!"),(0,r.kt)("h2",{id:"new-moon-query-tasks-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon query tasks")," command"),(0,r.kt)("p",null,'To expand on the query improvements above, we wanted to provide a way to also query for tasks,\nanswering the question of "What tasks exists and for what projects?". And with this, we\'re\nintroducing a new ',(0,r.kt)("a",{parentName:"p",href:"/docs/commands/query/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},"moon query tasks"))," command!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ moon query tasks\ntypes\n :build | packemon\n :format | prettier\n :lint | eslint\n :test | jest\n :typecheck | tsc\nreport\n :build | packemon\n :format | prettier\n :lint | eslint\n :test | jest\n :typecheck | tsc\n...\n")),(0,r.kt)("h2",{id:"shell-completions"},"Shell completions"),(0,r.kt)("p",null,"Auto-completion in your terminal increases productivity, which we're a massive fan of. To help\nsupport this, we're introducing the ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/completions"},(0,r.kt)("inlineCode",{parentName:"a"},"moon completions"))," command, which\ngenerates the appropriate command completions for your current shell."),(0,r.kt)("p",null,"This command writes to stdout, which can then be redirected to a file of your choice. Be sure to\nconfigure your shell profile to load the completions!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon completions > ~/.bash_completion.d/moon.sh\n")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("a",{parentName:"li",href:"https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/"},"TypeScript v5"),"\nsupport."),(0,r.kt)("li",{parentName:"ul"},"Added a ",(0,r.kt)("inlineCode",{parentName:"li"},"hasher.walkStrategy")," setting to ",(0,r.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),"."),(0,r.kt)("li",{parentName:"ul"},"Updated task ",(0,r.kt)("inlineCode",{parentName:"li"},"outputs")," to support token functions (",(0,r.kt)("inlineCode",{parentName:"li"},"@group"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"@globs"),", etc)."),(0,r.kt)("li",{parentName:"ul"},"Reworked our comparison/baseline estimations calcuations.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.25 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Deno tier 2 support."),(0,r.kt)("li",{parentName:"ul"},"CI insights and metrics within moonbase."),(0,r.kt)("li",{parentName:"ul"},"Project-level TypeScript settings.")))}m.isMDXComponent=!0},8304:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.24-0e225eaeb8b3c60cc26907770c589000.png"}}]); \ No newline at end of file diff --git a/assets/js/49af4b98.5b8b614b.js b/assets/js/49af4b98.5b8b614b.js new file mode 100644 index 00000000000..00485b4baec --- /dev/null +++ b/assets/js/49af4b98.5b8b614b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67217],{44468:e=>{e.exports=JSON.parse('{"label":"language","permalink":"/blog/tags/language","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/49af4b98.9d8402ea.js b/assets/js/49af4b98.9d8402ea.js deleted file mode 100644 index 08c721be443..00000000000 --- a/assets/js/49af4b98.9d8402ea.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7217],{44468:e=>{e.exports=JSON.parse('{"label":"language","permalink":"/blog/tags/language","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/49b772d3.5c877858.js b/assets/js/49b772d3.5c877858.js deleted file mode 100644 index 7492f6946df..00000000000 --- a/assets/js/49b772d3.5c877858.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6458],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||r;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<r;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),o=n(27378),r=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},l,{className:(0,r.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",u)},o.createElement(p,(0,a.Z)({},e,t)),o.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),o=n(35331),r=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[m,d]=p({queryString:n,groupId:o}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,i.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),k=(()=>{const e=m??h;return c({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,r]),tabValues:r}}},55835:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var a=n(25773),o=(n(27378),n(35318)),r=n(33337),l=n(39798);const i={title:"Rust handbook",sidebar_label:"Handbook",toc_max_heading_level:6},s=void 0,u={unversionedId:"guides/rust/handbook",id:"guides/rust/handbook",title:"Rust handbook",description:"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,",source:"@site/docs/guides/rust/handbook.mdx",sourceDirName:"guides/rust",slug:"/guides/rust/handbook",permalink:"/docs/guides/rust/handbook",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/rust/handbook.mdx",tags:[],version:"current",frontMatter:{title:"Rust handbook",sidebar_label:"Handbook",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Vue",permalink:"/docs/guides/examples/vue"}},c={},p=[{value:"moon setup",id:"moon-setup",level:2},{value:"Enabling the language",id:"enabling-the-language",level:3},{value:"Utilizing the toolchain",id:"utilizing-the-toolchain",level:3},{value:"Repository structure",id:"repository-structure",level:2},{value:"Example <code>moon.yml</code>",id:"example-moonyml",level:3},{value:"Cargo integration",id:"cargo-integration",level:2},{value:"Global binaries",id:"global-binaries",level:3},{value:"Lockfile handling",id:"lockfile-handling",level:3},{value:"FAQ",id:"faq",level:2},{value:"Should we cache the <code>target</code> directory as an output?",id:"should-we-cache-the-target-directory-as-an-output",level:3},{value:"How can we improve CI times?",id:"how-can-we-improve-ci-times",level:3}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,\nwe'll help guide you through this process."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"moon is not a build system and does ",(0,o.kt)("em",{parentName:"p"},"not")," replace Cargo. Instead, moon runs ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo")," commands, and\nefficiently orchestrates those tasks within the workspace.")),(0,o.kt)("h2",{id:"moon-setup"},"moon setup"),(0,o.kt)("p",null,"For this part of the handbook, we'll be focusing on ",(0,o.kt)("a",{parentName:"p",href:"/moon"},"moon"),", our task runner. To start,\nlanguages in moon act like plugins, where their functionality and support ",(0,o.kt)("em",{parentName:"p"},"is not")," enabled unless\nexplicitly configured. We follow this approach to avoid unnecessary overhead."),(0,o.kt)("h3",{id:"enabling-the-language"},"Enabling the language"),(0,o.kt)("p",null,"To enable Rust, define the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#rust"},(0,o.kt)("inlineCode",{parentName:"a"},"rust"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", even if an empty object."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Rust\nrust: {}\n\n# Enable Rust and override default settings\nrust:\n syncToolchainConfig: true\n")),(0,o.kt)("p",null,"Or by pinning a ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," version in ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," in the workspace root."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'rust = "1.69.0"\n')),(0,o.kt)("p",null,"This will enable the Rust platform and provide the following automations around its ecosystem:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Manifests and lockfiles are parsed for accurate dependency versions for hashing purposes."),(0,o.kt)("li",{parentName:"ul"},"Cargo binaries (in ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.cargo/bin"),") are properly located and executed."),(0,o.kt)("li",{parentName:"ul"},"Automatically sync ",(0,o.kt)("inlineCode",{parentName:"li"},"rust-toolchain.toml")," configuration files."),(0,o.kt)("li",{parentName:"ul"},"For non-workspaces, will inherit ",(0,o.kt)("inlineCode",{parentName:"li"},"package.name")," from ",(0,o.kt)("inlineCode",{parentName:"li"},"Cargo.toml")," as a project alias."),(0,o.kt)("li",{parentName:"ul"},"And more to come!")),(0,o.kt)("h3",{id:"utilizing-the-toolchain"},"Utilizing the toolchain"),(0,o.kt)("p",null,"When a language is enabled, moon by default will assume that the language's binary is available\nwithin the current environment (typically on ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),"). This has the downside of requiring all\ndevelopers and machines to manually install the correct version of the language, ",(0,o.kt)("em",{parentName:"p"},"and to stay in\nsync"),"."),(0,o.kt)("p",null,"Instead, you can utilize ",(0,o.kt)("a",{parentName:"p",href:"../../concepts/toolchain"},"moon's toolchain"),", which will download and\ninstall the language in the background, and ensure every task is executed using the exact version\nacross all machines."),(0,o.kt)("p",null,"Enabling the toolchain is as simple as defining the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#version-2"},(0,o.kt)("inlineCode",{parentName:"a"},"rust.version"))," setting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Rust toolchain with an explicit version\nrust:\n version: '1.69.0'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Versions can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),".")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"moon requires ",(0,o.kt)("inlineCode",{parentName:"p"},"rustup")," to exist in the environment, and will use this to install the necessary Rust\ntoolchains. This requires Rust to be manually installed on the machine, as moon does not\nauto-install the language, just the toolchains.")),(0,o.kt)("h2",{id:"repository-structure"},"Repository structure"),(0,o.kt)("p",null,"Rust/Cargo repositories come in two flavors: a single crate with one ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),", or multiple\ncrates with many ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),"s using\n",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html"},"Cargo workspaces"),". The latter is\nhighly preferred as it enables Cargo incremental caching."),(0,o.kt)("p",null,"Regardless of which flavor your repository uses, in moon, both flavors are a single\n",(0,o.kt)("a",{parentName:"p",href:"../../concepts/project"},"moon project"),". This means that all Rust crates are grouped together into a\nsingle moon project, and the ",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file is located at the root relative\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock")," and the ",(0,o.kt)("inlineCode",{parentName:"p"},"target")," folder."),(0,o.kt)("p",null,"An example of this layout is demonstrated below:"),(0,o.kt)(r.Z,{groupId:"repo-layout",defaultValue:"workspaces",values:[{label:"Workspaces",value:"workspaces"},{label:"Non-workspaces",value:"project"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"workspaces",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 crates/\n\u2502 \u251c\u2500\u2500 client/\n| \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2514\u2500\u2500 Cargo.toml\n\u2502 \u251c\u2500\u2500 server/\n| \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2514\u2500\u2500 Cargo.toml\n\u2502 \u2514\u2500\u2500 utils/\n| \u251c\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 target/\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 moon.yml\n"))),(0,o.kt)(l.Z,{value:"project",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 target/\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 moon.yml\n")))),(0,o.kt)("h3",{id:"example-moonyml"},"Example ",(0,o.kt)("inlineCode",{parentName:"h3"},"moon.yml")),(0,o.kt)("p",null,"The following configuration represents a base that covers most Rust projects."),(0,o.kt)(r.Z,{groupId:"repo-layout",defaultValue:"workspaces",values:[{label:"Workspaces",value:"workspaces"},{label:"Non-workspaces",value:"project"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"workspaces",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\ntype: 'application'\n\nenv:\n CARGO_TERM_COLOR: 'always'\n\nfileGroups:\n sources:\n - 'crates/*/src/**/*'\n - 'crates/*/Cargo.toml'\n - 'Cargo.toml'\n tests:\n - 'crates/*/benches/**/*'\n - 'crates/*/tests/**/*'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - '@globs(sources)'\n check:\n command: 'cargo check --workspace'\n inputs:\n - '@globs(sources)'\n format:\n command: 'cargo fmt --all --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n lint:\n command: 'cargo clippy --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n test:\n command: 'cargo test --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n"))),(0,o.kt)(l.Z,{value:"project",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\ntype: 'application'\n\nenv:\n CARGO_TERM_COLOR: 'always'\n\nfileGroups:\n sources:\n - 'src/**/*'\n - 'Cargo.toml'\n tests:\n - 'benches/**/*'\n - 'tests/**/*'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - '@globs(sources)'\n check:\n command: 'cargo check'\n inputs:\n - '@globs(sources)'\n format:\n command: 'cargo fmt --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n lint:\n command: 'cargo clippy'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n test:\n command: 'cargo test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n")))),(0,o.kt)("h2",{id:"cargo-integration"},"Cargo integration"),(0,o.kt)("p",null,"You can't use Rust without Cargo -- well you could but why would you do that? With moon, we're doing\nour best to integrate with Cargo as much as possible. Here's a few of the benefits we currently\nprovide."),(0,o.kt)("h3",{id:"global-binaries"},"Global binaries"),(0,o.kt)("p",null,"Cargo supports global binaries through the\n",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/cargo/commands/cargo-install.html"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo install"))," command, which\ninstalls a crate to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),", or makes it available through the ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo <crate>")," command. These\nare extremely beneficial for development, but they do require every developer to manually install\nthe crate (and appropriate version) to their machine."),(0,o.kt)("p",null,"With moon, this is no longer an issue with the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#bins"},(0,o.kt)("inlineCode",{parentName:"a"},"rust.bins"))," setting.\nThis setting requires a list of crates (with optional versions) to install, and moon will install\nthem as part of the task runner ",(0,o.kt)("inlineCode",{parentName:"p"},"InstallRustDeps")," action. Furthermore, binaries will be installed\nwith ",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/cargo-binstall"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo-binstall"))," in an effort to reduce build and\ncompilation times."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-4}',title:'".moon/toolchain.yml"',"{2-4}":!0},"rust:\n bins:\n - 'cargo-make@0.35.0'\n - 'cargo-nextest'\n")),(0,o.kt)("p",null,"At this point, tasks can be configured to run this binary as a command. The ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo")," prefix is\noptional, as we'll inject it when necessary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n test:\n command: 'nextest run --workspace'\n platform: 'rust'\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo-binstall")," crate may require a ",(0,o.kt)("inlineCode",{parentName:"p"},"GITHUB_TOKEN")," environment variable to make GitHub Releases\nAPI requests, especially in CI. If you're being rate limited, or fail to find a download, try\ncreating a token with necessary permissions.")),(0,o.kt)("h3",{id:"lockfile-handling"},"Lockfile handling"),(0,o.kt)("p",null,"To expand our integration even further, we also take ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock")," into account, and apply the\nfollowing automations when a target is being ran:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"If the lockfile does not exist, we generate one with\n",(0,o.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/cargo/commands/cargo-generate-lockfile.html"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo generate-lockfile")),"."),(0,o.kt)("li",{parentName:"ul"},"We parse and extract the resolved checksums and versions for more accurate hashing.")),(0,o.kt)("h2",{id:"faq"},"FAQ"),(0,o.kt)("h3",{id:"should-we-cache-the-target-directory-as-an-output"},"Should we cache the ",(0,o.kt)("inlineCode",{parentName:"h3"},"target")," directory as an output?"),(0,o.kt)("p",null,"No, we don't believe so. Both moon and Cargo support incremental caching, but they're not entirely\ncompatible, and will most likely cause problems when used together."),(0,o.kt)("p",null,"The biggest factor is that moon's caching and hydration uses a tarball strategy, where each task\nwould unpack a tarball on cache hit, and archive a tarball on cache miss. The Cargo target directory\nis extremely large (moon's is around 50gb), and coupling this with our tarball strategy is not\nviable. This would cause massive performance degradation."),(0,o.kt)("p",null,"However, at maximum, you ",(0,o.kt)("em",{parentName:"p"},"could")," cache the compiled binary itself as an output, instead of the\nentire target directory. Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n command: 'cargo build --release'\n outputs: ['target/release/moon']\n")),(0,o.kt)("h3",{id:"how-can-we-improve-ci-times"},"How can we improve CI times?"),(0,o.kt)("p",null,"Rust is known for slow build times and CI is no exception. With that being said, there are a few\npatterns to help alleviate this, both on the moon side and outside of it."),(0,o.kt)("p",null,"To start, you can cache Rust builds in CI. This is a non-moon solution to the ",(0,o.kt)("inlineCode",{parentName:"p"},"target")," directory\nproblem above."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If you use GitHub Actions, feel free to use our\n",(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/setup-rust"},"moonrepo/setup-rust")," action, which has built-in caching."),(0,o.kt)("li",{parentName:"ol"},"A more integrated solution is ",(0,o.kt)("a",{parentName:"li",href:"https://crates.io/crates/sccache"},"sccache"),", which stores build\nartifacts in a cloud storage provider.")),(0,o.kt)("p",null,"For moon, if you're looking to persist task results across CI runs, you can utilize the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/workspace#archivabletargets"},(0,o.kt)("inlineCode",{parentName:"a"},"runner.archivableTargets"))," setting. This is useful for\ncaching ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo check"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo clippy"),", and other Cargo tasks that ",(0,o.kt)("em",{parentName:"p"},"do not")," produce direct outputs."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"runner:\n archivableTargets:\n - 'rust:check'\n - 'rust:lint'\n - 'rust:test'\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/49b772d3.e3ebaf0c.js b/assets/js/49b772d3.e3ebaf0c.js new file mode 100644 index 00000000000..8ae8439062d --- /dev/null +++ b/assets/js/49b772d3.e3ebaf0c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66458],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||r;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u<r;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),o=n(27378),r=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},l,{className:(0,r.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",u)},o.createElement(p,(0,a.Z)({},e,t)),o.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),o=n(35331),r=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[m,d]=p({queryString:n,groupId:o}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,i.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),k=(()=>{const e=m??h;return c({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,r]),tabValues:r}}},55835:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var a=n(25773),o=(n(27378),n(35318)),r=n(33337),l=n(39798);const i={title:"Rust handbook",sidebar_label:"Handbook",toc_max_heading_level:6},s=void 0,u={unversionedId:"guides/rust/handbook",id:"guides/rust/handbook",title:"Rust handbook",description:"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,",source:"@site/docs/guides/rust/handbook.mdx",sourceDirName:"guides/rust",slug:"/guides/rust/handbook",permalink:"/docs/guides/rust/handbook",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/rust/handbook.mdx",tags:[],version:"current",frontMatter:{title:"Rust handbook",sidebar_label:"Handbook",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Vue",permalink:"/docs/guides/examples/vue"}},c={},p=[{value:"moon setup",id:"moon-setup",level:2},{value:"Enabling the language",id:"enabling-the-language",level:3},{value:"Utilizing the toolchain",id:"utilizing-the-toolchain",level:3},{value:"Repository structure",id:"repository-structure",level:2},{value:"Example <code>moon.yml</code>",id:"example-moonyml",level:3},{value:"Cargo integration",id:"cargo-integration",level:2},{value:"Global binaries",id:"global-binaries",level:3},{value:"Lockfile handling",id:"lockfile-handling",level:3},{value:"FAQ",id:"faq",level:2},{value:"Should we cache the <code>target</code> directory as an output?",id:"should-we-cache-the-target-directory-as-an-output",level:3},{value:"How can we improve CI times?",id:"how-can-we-improve-ci-times",level:3}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,\nwe'll help guide you through this process."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"moon is not a build system and does ",(0,o.kt)("em",{parentName:"p"},"not")," replace Cargo. Instead, moon runs ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo")," commands, and\nefficiently orchestrates those tasks within the workspace.")),(0,o.kt)("h2",{id:"moon-setup"},"moon setup"),(0,o.kt)("p",null,"For this part of the handbook, we'll be focusing on ",(0,o.kt)("a",{parentName:"p",href:"/moon"},"moon"),", our task runner. To start,\nlanguages in moon act like plugins, where their functionality and support ",(0,o.kt)("em",{parentName:"p"},"is not")," enabled unless\nexplicitly configured. We follow this approach to avoid unnecessary overhead."),(0,o.kt)("h3",{id:"enabling-the-language"},"Enabling the language"),(0,o.kt)("p",null,"To enable Rust, define the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#rust"},(0,o.kt)("inlineCode",{parentName:"a"},"rust"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", even if an empty object."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Rust\nrust: {}\n\n# Enable Rust and override default settings\nrust:\n syncToolchainConfig: true\n")),(0,o.kt)("p",null,"Or by pinning a ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," version in ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," in the workspace root."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'rust = "1.69.0"\n')),(0,o.kt)("p",null,"This will enable the Rust platform and provide the following automations around its ecosystem:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Manifests and lockfiles are parsed for accurate dependency versions for hashing purposes."),(0,o.kt)("li",{parentName:"ul"},"Cargo binaries (in ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.cargo/bin"),") are properly located and executed."),(0,o.kt)("li",{parentName:"ul"},"Automatically sync ",(0,o.kt)("inlineCode",{parentName:"li"},"rust-toolchain.toml")," configuration files."),(0,o.kt)("li",{parentName:"ul"},"For non-workspaces, will inherit ",(0,o.kt)("inlineCode",{parentName:"li"},"package.name")," from ",(0,o.kt)("inlineCode",{parentName:"li"},"Cargo.toml")," as a project alias."),(0,o.kt)("li",{parentName:"ul"},"And more to come!")),(0,o.kt)("h3",{id:"utilizing-the-toolchain"},"Utilizing the toolchain"),(0,o.kt)("p",null,"When a language is enabled, moon by default will assume that the language's binary is available\nwithin the current environment (typically on ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),"). This has the downside of requiring all\ndevelopers and machines to manually install the correct version of the language, ",(0,o.kt)("em",{parentName:"p"},"and to stay in\nsync"),"."),(0,o.kt)("p",null,"Instead, you can utilize ",(0,o.kt)("a",{parentName:"p",href:"../../concepts/toolchain"},"moon's toolchain"),", which will download and\ninstall the language in the background, and ensure every task is executed using the exact version\nacross all machines."),(0,o.kt)("p",null,"Enabling the toolchain is as simple as defining the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#version-2"},(0,o.kt)("inlineCode",{parentName:"a"},"rust.version"))," setting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Rust toolchain with an explicit version\nrust:\n version: '1.69.0'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Versions can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),".")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"moon requires ",(0,o.kt)("inlineCode",{parentName:"p"},"rustup")," to exist in the environment, and will use this to install the necessary Rust\ntoolchains. This requires Rust to be manually installed on the machine, as moon does not\nauto-install the language, just the toolchains.")),(0,o.kt)("h2",{id:"repository-structure"},"Repository structure"),(0,o.kt)("p",null,"Rust/Cargo repositories come in two flavors: a single crate with one ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),", or multiple\ncrates with many ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),"s using\n",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html"},"Cargo workspaces"),". The latter is\nhighly preferred as it enables Cargo incremental caching."),(0,o.kt)("p",null,"Regardless of which flavor your repository uses, in moon, both flavors are a single\n",(0,o.kt)("a",{parentName:"p",href:"../../concepts/project"},"moon project"),". This means that all Rust crates are grouped together into a\nsingle moon project, and the ",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file is located at the root relative\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock")," and the ",(0,o.kt)("inlineCode",{parentName:"p"},"target")," folder."),(0,o.kt)("p",null,"An example of this layout is demonstrated below:"),(0,o.kt)(r.Z,{groupId:"repo-layout",defaultValue:"workspaces",values:[{label:"Workspaces",value:"workspaces"},{label:"Non-workspaces",value:"project"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"workspaces",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 crates/\n\u2502 \u251c\u2500\u2500 client/\n| \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2514\u2500\u2500 Cargo.toml\n\u2502 \u251c\u2500\u2500 server/\n| \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2514\u2500\u2500 Cargo.toml\n\u2502 \u2514\u2500\u2500 utils/\n| \u251c\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 target/\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 moon.yml\n"))),(0,o.kt)(l.Z,{value:"project",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 lib.rs\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 target/\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 Cargo.toml\n\u2514\u2500\u2500 moon.yml\n")))),(0,o.kt)("h3",{id:"example-moonyml"},"Example ",(0,o.kt)("inlineCode",{parentName:"h3"},"moon.yml")),(0,o.kt)("p",null,"The following configuration represents a base that covers most Rust projects."),(0,o.kt)(r.Z,{groupId:"repo-layout",defaultValue:"workspaces",values:[{label:"Workspaces",value:"workspaces"},{label:"Non-workspaces",value:"project"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"workspaces",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\ntype: 'application'\n\nenv:\n CARGO_TERM_COLOR: 'always'\n\nfileGroups:\n sources:\n - 'crates/*/src/**/*'\n - 'crates/*/Cargo.toml'\n - 'Cargo.toml'\n tests:\n - 'crates/*/benches/**/*'\n - 'crates/*/tests/**/*'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - '@globs(sources)'\n check:\n command: 'cargo check --workspace'\n inputs:\n - '@globs(sources)'\n format:\n command: 'cargo fmt --all --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n lint:\n command: 'cargo clippy --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n test:\n command: 'cargo test --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n"))),(0,o.kt)(l.Z,{value:"project",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\ntype: 'application'\n\nenv:\n CARGO_TERM_COLOR: 'always'\n\nfileGroups:\n sources:\n - 'src/**/*'\n - 'Cargo.toml'\n tests:\n - 'benches/**/*'\n - 'tests/**/*'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - '@globs(sources)'\n check:\n command: 'cargo check'\n inputs:\n - '@globs(sources)'\n format:\n command: 'cargo fmt --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n lint:\n command: 'cargo clippy'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n test:\n command: 'cargo test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n")))),(0,o.kt)("h2",{id:"cargo-integration"},"Cargo integration"),(0,o.kt)("p",null,"You can't use Rust without Cargo -- well you could but why would you do that? With moon, we're doing\nour best to integrate with Cargo as much as possible. Here's a few of the benefits we currently\nprovide."),(0,o.kt)("h3",{id:"global-binaries"},"Global binaries"),(0,o.kt)("p",null,"Cargo supports global binaries through the\n",(0,o.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/cargo/commands/cargo-install.html"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo install"))," command, which\ninstalls a crate to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),", or makes it available through the ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo <crate>")," command. These\nare extremely beneficial for development, but they do require every developer to manually install\nthe crate (and appropriate version) to their machine."),(0,o.kt)("p",null,"With moon, this is no longer an issue with the ",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#bins"},(0,o.kt)("inlineCode",{parentName:"a"},"rust.bins"))," setting.\nThis setting requires a list of crates (with optional versions) to install, and moon will install\nthem as part of the task runner ",(0,o.kt)("inlineCode",{parentName:"p"},"InstallRustDeps")," action. Furthermore, binaries will be installed\nwith ",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/cargo-binstall"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo-binstall"))," in an effort to reduce build and\ncompilation times."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-4}',title:'".moon/toolchain.yml"',"{2-4}":!0},"rust:\n bins:\n - 'cargo-make@0.35.0'\n - 'cargo-nextest'\n")),(0,o.kt)("p",null,"At this point, tasks can be configured to run this binary as a command. The ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo")," prefix is\noptional, as we'll inject it when necessary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n test:\n command: 'nextest run --workspace'\n platform: 'rust'\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo-binstall")," crate may require a ",(0,o.kt)("inlineCode",{parentName:"p"},"GITHUB_TOKEN")," environment variable to make GitHub Releases\nAPI requests, especially in CI. If you're being rate limited, or fail to find a download, try\ncreating a token with necessary permissions.")),(0,o.kt)("h3",{id:"lockfile-handling"},"Lockfile handling"),(0,o.kt)("p",null,"To expand our integration even further, we also take ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock")," into account, and apply the\nfollowing automations when a target is being ran:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"If the lockfile does not exist, we generate one with\n",(0,o.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/cargo/commands/cargo-generate-lockfile.html"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo generate-lockfile")),"."),(0,o.kt)("li",{parentName:"ul"},"We parse and extract the resolved checksums and versions for more accurate hashing.")),(0,o.kt)("h2",{id:"faq"},"FAQ"),(0,o.kt)("h3",{id:"should-we-cache-the-target-directory-as-an-output"},"Should we cache the ",(0,o.kt)("inlineCode",{parentName:"h3"},"target")," directory as an output?"),(0,o.kt)("p",null,"No, we don't believe so. Both moon and Cargo support incremental caching, but they're not entirely\ncompatible, and will most likely cause problems when used together."),(0,o.kt)("p",null,"The biggest factor is that moon's caching and hydration uses a tarball strategy, where each task\nwould unpack a tarball on cache hit, and archive a tarball on cache miss. The Cargo target directory\nis extremely large (moon's is around 50gb), and coupling this with our tarball strategy is not\nviable. This would cause massive performance degradation."),(0,o.kt)("p",null,"However, at maximum, you ",(0,o.kt)("em",{parentName:"p"},"could")," cache the compiled binary itself as an output, instead of the\nentire target directory. Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n command: 'cargo build --release'\n outputs: ['target/release/moon']\n")),(0,o.kt)("h3",{id:"how-can-we-improve-ci-times"},"How can we improve CI times?"),(0,o.kt)("p",null,"Rust is known for slow build times and CI is no exception. With that being said, there are a few\npatterns to help alleviate this, both on the moon side and outside of it."),(0,o.kt)("p",null,"To start, you can cache Rust builds in CI. This is a non-moon solution to the ",(0,o.kt)("inlineCode",{parentName:"p"},"target")," directory\nproblem above."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If you use GitHub Actions, feel free to use our\n",(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/setup-rust"},"moonrepo/setup-rust")," action, which has built-in caching."),(0,o.kt)("li",{parentName:"ol"},"A more integrated solution is ",(0,o.kt)("a",{parentName:"li",href:"https://crates.io/crates/sccache"},"sccache"),", which stores build\nartifacts in a cloud storage provider.")),(0,o.kt)("p",null,"For moon, if you're looking to persist task results across CI runs, you can utilize the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/workspace#archivabletargets"},(0,o.kt)("inlineCode",{parentName:"a"},"runner.archivableTargets"))," setting. This is useful for\ncaching ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo check"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo clippy"),", and other Cargo tasks that ",(0,o.kt)("em",{parentName:"p"},"do not")," produce direct outputs."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"runner:\n archivableTargets:\n - 'rust:check'\n - 'rust:lint'\n - 'rust:test'\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4a1ab9c8.2a4aa1f0.js b/assets/js/4a1ab9c8.2a4aa1f0.js deleted file mode 100644 index f0eb726cc34..00000000000 --- a/assets/js/4a1ab9c8.2a4aa1f0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7008],{59202:e=>{e.exports=JSON.parse('{"title":"Commands","keywords":["cli","commands"],"slug":"/commands","permalink":"/docs/commands","navigation":{"previous":{"title":"VS Code","permalink":"/docs/editors/vscode"},"next":{"title":"Overview","permalink":"/docs/commands/overview"}}}')}}]); \ No newline at end of file diff --git a/assets/js/4a1ab9c8.8b0f8273.js b/assets/js/4a1ab9c8.8b0f8273.js new file mode 100644 index 00000000000..6522cd3bb3e --- /dev/null +++ b/assets/js/4a1ab9c8.8b0f8273.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77008],{59202:e=>{e.exports=JSON.parse('{"title":"Commands","keywords":["cli","commands"],"slug":"/commands","permalink":"/docs/commands","navigation":{"previous":{"title":"VS Code","permalink":"/docs/editors/vscode"},"next":{"title":"Overview","permalink":"/docs/commands/overview"}}}')}}]); \ No newline at end of file diff --git a/assets/js/4a3d03f6.01b14516.js b/assets/js/4a3d03f6.01b14516.js new file mode 100644 index 00000000000..aaf8c8f3956 --- /dev/null +++ b/assets/js/4a3d03f6.01b14516.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83884],{65585:e=>{e.exports=JSON.parse('{"label":"owners","permalink":"/docs/tags/owners","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","permalink":"/docs/guides/codeowners"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4a3d03f6.d20ef42d.js b/assets/js/4a3d03f6.d20ef42d.js deleted file mode 100644 index 375484005f2..00000000000 --- a/assets/js/4a3d03f6.d20ef42d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3884],{65585:e=>{e.exports=JSON.parse('{"label":"owners","permalink":"/docs/tags/owners","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","permalink":"/docs/guides/codeowners"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4aa262b7.342e9402.js b/assets/js/4aa262b7.342e9402.js new file mode 100644 index 00000000000..b235236a054 --- /dev/null +++ b/assets/js/4aa262b7.342e9402.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96897],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),m=a,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:i="center",padding:s="1rem"}=e;return n.createElement("div",{style:{marginBottom:s,marginTop:s,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},93365:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=r(25773),a=(r(27378),r(35318)),o=r(88109);const i={slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},s=void 0,l={permalink:"/blog/moon-v1.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx",source:"@site/blog/2023-05-30_moon-v1.7.mdx",title:"moon v1.7 - Next-generation configuration and errors",description:"With this release, we've rewritten configuration from the ground up, improved error messages, and",date:"2023-05-30T00:00:00.000Z",formattedDate:"May 30, 2023",tags:[{label:"config",permalink:"/blog/tags/config"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.43,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},prevItem:{title:"moon v1.8 - Code owners and shared configuration",permalink:"/blog/moon-v1.8"},nextItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"}},c={image:r(46037).Z,authorsImageUrls:[void 0]},u=[{value:"Configuration rewrite",id:"configuration-rewrite",level:2},{value:"Strict parsing",id:"strict-parsing",level:3},{value:"Recursive validation",id:"recursive-validation",level:3},{value:"What's next?",id:"whats-next",level:3},{value:"Better errors",id:"better-errors",level:2},{value:"Other changes",id:"other-changes",level:2}],d={toc:u};function p(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've rewritten configuration from the ground up, improved error messages, and\nstarted work on diagnostics!"),(0,a.kt)("h2",{id:"configuration-rewrite"},"Configuration rewrite"),(0,a.kt)("p",null,"If you've ever written Rust before, you may be familiar with the state of configuration crates in\nthe ecosystem. There's only 2 viable choices to choose from, and we've been using 1 of them.\nHowever, it's been a constant source of friction for our use cases, and didn't support features that\nwe've needed (built-in validation, file extending, and more)."),(0,a.kt)("p",null,"After researching our options, and attempting to contribute upstream, we decided to build our own\nconfiguration solution, unique to moonrepo's projects. As such, we're excited to announce\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/schematic"},"schematic"),", the most powerful configuration crate in the\nRust ecosystem, with built-in features like:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Strict parsing with serde (serilization, deserialization)."),(0,a.kt)("li",{parentName:"ul"},"Code frames in errors (when applicable)."),(0,a.kt)("li",{parentName:"ul"},"Source file/URL extending."),(0,a.kt)("li",{parentName:"ul"},"Partial file parsing and merging."),(0,a.kt)("li",{parentName:"ul"},"Field-level merge strategies."),(0,a.kt)("li",{parentName:"ul"},"Recursive validation."),(0,a.kt)("li",{parentName:"ul"},"Dynamic default and env var values."),(0,a.kt)("li",{parentName:"ul"},"And much more!")),(0,a.kt)("p",null,"We've spent the last few weeks building this crate from the ground up, and migrating the moon\ncodebase to it. It's been quite a feat, but we're very excited for what it has to offer already, and\nwhat's to come!"),(0,a.kt)("h3",{id:"strict-parsing"},"Strict parsing"),(0,a.kt)("p",null,"When we fail to parse a configuration file, we now include a descriptive message of the failure, and\nthe file that failed to parse. Typically this will be for unknown fields and invalid value types."),(0,a.kt)(o.Z,{src:r(35319),width:"90%",mdxType:"Image"}),(0,a.kt)(o.Z,{src:r(21905),width:"90%",mdxType:"Image"}),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"We hope this bubbles up typos and incorrectly nested settings!")),(0,a.kt)("h3",{id:"recursive-validation"},"Recursive validation"),(0,a.kt)("p",null,"Previously when validation would fail, we'd return on the first error and ignore subsequent errors.\nThis is a non-ideal experience as you'd have to constantly run ",(0,a.kt)("inlineCode",{parentName:"p"},"moon")," commands until all validation\nissues have been resolved."),(0,a.kt)("p",null,"Now we aggregate all validation errors, even from deeply nested fields, and present them together."),(0,a.kt)(o.Z,{src:r(704),width:"90%",mdxType:"Image"}),(0,a.kt)("h3",{id:"whats-next"},"What's next?"),(0,a.kt)("p",null,"Since ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/schematic"},"schematic")," is very young, and it hasn't been tested\nheavily in the ecosystem, we expect bugs and weird edge cases to popup. If you encounter any issues,\nplease report them immediately so that we can fix them as soon as possible!"),(0,a.kt)("p",null,"With that being said, we'll continue to improve parsing, error messages, and unique functionality,\nlike code frames within errors. Here's an example for a basic JSON file."),(0,a.kt)(o.Z,{src:r(44221),width:"90%",mdxType:"Image"}),(0,a.kt)("h2",{id:"better-errors"},"Better errors"),(0,a.kt)("p",null,"You may have noticed the errors in the screenshots above look quite different than what we've\nrendered until now, and you are correct. Going forward, all errors will be rendered by the wonderful\nRust crate, ",(0,a.kt)("a",{parentName:"p",href:"https://crates.io/crates/miette"},"miette"),"."),(0,a.kt)("p",null,"We've introduced this crate to handle ",(0,a.kt)("em",{parentName:"p"},"all")," errors and diagnostics within moon, not just\nconfiguration. So expect a much better developer experience moving forward!"),(0,a.kt)(o.Z,{src:r(29426),width:"90%",mdxType:"Image"}),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.7.0"},"official release")," for a full list of\nchanges."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added support for npm lockfile v3 format.")))}p.isMDXComponent=!0},44221:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/code-frame-d3a7c89957fbda329862d5703004a54a.png"},29426:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/errors-f298dbbf1f59c29318216a22e8464fac.png"},21905:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/parse-type-2388b085fbfbf10a8f6dd0f74a2fb863.png"},35319:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/parse-unknown-2435995564068e43b3a8d5b52f1ddfaa.png"},704:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/validate-c6d158c2f0d9ff9919b13b52e58321ea.png"},46037:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.7-1356b391b5588236312e2f059de16e2a.png"}}]); \ No newline at end of file diff --git a/assets/js/4aa262b7.60472b77.js b/assets/js/4aa262b7.60472b77.js deleted file mode 100644 index 556f844419d..00000000000 --- a/assets/js/4aa262b7.60472b77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6897],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),m=a,f=p["".concat(l,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:i="center",padding:s="1rem"}=e;return n.createElement("div",{style:{marginBottom:s,marginTop:s,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},93365:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=r(25773),a=(r(27378),r(35318)),o=r(88109);const i={slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},s=void 0,l={permalink:"/blog/moon-v1.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx",source:"@site/blog/2023-05-30_moon-v1.7.mdx",title:"moon v1.7 - Next-generation configuration and errors",description:"With this release, we've rewritten configuration from the ground up, improved error messages, and",date:"2023-05-30T00:00:00.000Z",formattedDate:"May 30, 2023",tags:[{label:"config",permalink:"/blog/tags/config"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.43,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},prevItem:{title:"moon v1.8 - Code owners and shared configuration",permalink:"/blog/moon-v1.8"},nextItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"}},c={image:r(46037).Z,authorsImageUrls:[void 0]},u=[{value:"Configuration rewrite",id:"configuration-rewrite",level:2},{value:"Strict parsing",id:"strict-parsing",level:3},{value:"Recursive validation",id:"recursive-validation",level:3},{value:"What's next?",id:"whats-next",level:3},{value:"Better errors",id:"better-errors",level:2},{value:"Other changes",id:"other-changes",level:2}],d={toc:u};function p(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've rewritten configuration from the ground up, improved error messages, and\nstarted work on diagnostics!"),(0,a.kt)("h2",{id:"configuration-rewrite"},"Configuration rewrite"),(0,a.kt)("p",null,"If you've ever written Rust before, you may be familiar with the state of configuration crates in\nthe ecosystem. There's only 2 viable choices to choose from, and we've been using 1 of them.\nHowever, it's been a constant source of friction for our use cases, and didn't support features that\nwe've needed (built-in validation, file extending, and more)."),(0,a.kt)("p",null,"After researching our options, and attempting to contribute upstream, we decided to build our own\nconfiguration solution, unique to moonrepo's projects. As such, we're excited to announce\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/schematic"},"schematic"),", the most powerful configuration crate in the\nRust ecosystem, with built-in features like:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Strict parsing with serde (serilization, deserialization)."),(0,a.kt)("li",{parentName:"ul"},"Code frames in errors (when applicable)."),(0,a.kt)("li",{parentName:"ul"},"Source file/URL extending."),(0,a.kt)("li",{parentName:"ul"},"Partial file parsing and merging."),(0,a.kt)("li",{parentName:"ul"},"Field-level merge strategies."),(0,a.kt)("li",{parentName:"ul"},"Recursive validation."),(0,a.kt)("li",{parentName:"ul"},"Dynamic default and env var values."),(0,a.kt)("li",{parentName:"ul"},"And much more!")),(0,a.kt)("p",null,"We've spent the last few weeks building this crate from the ground up, and migrating the moon\ncodebase to it. It's been quite a feat, but we're very excited for what it has to offer already, and\nwhat's to come!"),(0,a.kt)("h3",{id:"strict-parsing"},"Strict parsing"),(0,a.kt)("p",null,"When we fail to parse a configuration file, we now include a descriptive message of the failure, and\nthe file that failed to parse. Typically this will be for unknown fields and invalid value types."),(0,a.kt)(o.Z,{src:r(35319),width:"90%",mdxType:"Image"}),(0,a.kt)(o.Z,{src:r(21905),width:"90%",mdxType:"Image"}),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"We hope this bubbles up typos and incorrectly nested settings!")),(0,a.kt)("h3",{id:"recursive-validation"},"Recursive validation"),(0,a.kt)("p",null,"Previously when validation would fail, we'd return on the first error and ignore subsequent errors.\nThis is a non-ideal experience as you'd have to constantly run ",(0,a.kt)("inlineCode",{parentName:"p"},"moon")," commands until all validation\nissues have been resolved."),(0,a.kt)("p",null,"Now we aggregate all validation errors, even from deeply nested fields, and present them together."),(0,a.kt)(o.Z,{src:r(704),width:"90%",mdxType:"Image"}),(0,a.kt)("h3",{id:"whats-next"},"What's next?"),(0,a.kt)("p",null,"Since ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/schematic"},"schematic")," is very young, and it hasn't been tested\nheavily in the ecosystem, we expect bugs and weird edge cases to popup. If you encounter any issues,\nplease report them immediately so that we can fix them as soon as possible!"),(0,a.kt)("p",null,"With that being said, we'll continue to improve parsing, error messages, and unique functionality,\nlike code frames within errors. Here's an example for a basic JSON file."),(0,a.kt)(o.Z,{src:r(44221),width:"90%",mdxType:"Image"}),(0,a.kt)("h2",{id:"better-errors"},"Better errors"),(0,a.kt)("p",null,"You may have noticed the errors in the screenshots above look quite different than what we've\nrendered until now, and you are correct. Going forward, all errors will be rendered by the wonderful\nRust crate, ",(0,a.kt)("a",{parentName:"p",href:"https://crates.io/crates/miette"},"miette"),"."),(0,a.kt)("p",null,"We've introduced this crate to handle ",(0,a.kt)("em",{parentName:"p"},"all")," errors and diagnostics within moon, not just\nconfiguration. So expect a much better developer experience moving forward!"),(0,a.kt)(o.Z,{src:r(29426),width:"90%",mdxType:"Image"}),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.7.0"},"official release")," for a full list of\nchanges."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added support for npm lockfile v3 format.")))}p.isMDXComponent=!0},44221:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/code-frame-d3a7c89957fbda329862d5703004a54a.png"},29426:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/errors-f298dbbf1f59c29318216a22e8464fac.png"},21905:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/parse-type-2388b085fbfbf10a8f6dd0f74a2fb863.png"},35319:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/parse-unknown-2435995564068e43b3a8d5b52f1ddfaa.png"},704:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});const n=r.p+"assets/images/validate-c6d158c2f0d9ff9919b13b52e58321ea.png"},46037:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.7-1356b391b5588236312e2f059de16e2a.png"}}]); \ No newline at end of file diff --git a/assets/js/4ab2bb95.24cdd91d.js b/assets/js/4ab2bb95.24cdd91d.js deleted file mode 100644 index ee54d38aa8c..00000000000 --- a/assets/js/4ab2bb95.24cdd91d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6282],{27592:e=>{e.exports=JSON.parse('{"label":"local","permalink":"/blog/tags/local","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4ab2bb95.adfce42e.js b/assets/js/4ab2bb95.adfce42e.js new file mode 100644 index 00000000000..36c62280192 --- /dev/null +++ b/assets/js/4ab2bb95.adfce42e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54488],{27592:e=>{e.exports=JSON.parse('{"label":"local","permalink":"/blog/tags/local","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4b8535eb.1ec02750.js b/assets/js/4b8535eb.1ec02750.js new file mode 100644 index 00000000000..9648aca55ec --- /dev/null +++ b/assets/js/4b8535eb.1ec02750.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20612],{1360:e=>{e.exports=JSON.parse('{"label":"tier","permalink":"/blog/tags/tier","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4b8535eb.df8acacc.js b/assets/js/4b8535eb.df8acacc.js deleted file mode 100644 index 08fb5b6fc4d..00000000000 --- a/assets/js/4b8535eb.df8acacc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[612],{1360:e=>{e.exports=JSON.parse('{"label":"tier","permalink":"/blog/tags/tier","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4bddfbdb.21c1a6d5.js b/assets/js/4bddfbdb.21c1a6d5.js deleted file mode 100644 index 709b6b9778e..00000000000 --- a/assets/js/4bddfbdb.21c1a6d5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5437],{26325:e=>{e.exports=JSON.parse('{"label":"vscode","permalink":"/blog/tags/vscode","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/4bddfbdb.ebbc8b8a.js b/assets/js/4bddfbdb.ebbc8b8a.js new file mode 100644 index 00000000000..57f4e0afe26 --- /dev/null +++ b/assets/js/4bddfbdb.ebbc8b8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15437],{26325:e=>{e.exports=JSON.parse('{"label":"vscode","permalink":"/blog/tags/vscode","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/4c2d8fdb.c1808cff.js b/assets/js/4c2d8fdb.c1808cff.js deleted file mode 100644 index 8a5bb492e43..00000000000 --- a/assets/js/4c2d8fdb.c1808cff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1148],{81467:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/npm","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4c2d8fdb.f81c6c57.js b/assets/js/4c2d8fdb.f81c6c57.js new file mode 100644 index 00000000000..1edf5a93009 --- /dev/null +++ b/assets/js/4c2d8fdb.f81c6c57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81148],{81467:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/npm","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4c8cef38.8da52144.js b/assets/js/4c8cef38.8da52144.js new file mode 100644 index 00000000000..a20bab2f9a3 --- /dev/null +++ b/assets/js/4c8cef38.8da52144.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11126],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),d=o,h=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(h,i(i({ref:t},p),{},{components:r})):n.createElement(h,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},11126:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"v0.13",title:"moon v0.13 - Hashing and toolchain improvements",authors:["milesj"],tags:["hasher","toolchain"]},i=void 0,l={permalink:"/blog/v0.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-01_v0.13.mdx",source:"@site/blog/2022-09-01_v0.13.mdx",title:"moon v0.13 - Hashing and toolchain improvements",description:"With this release, we've landed some improvements to our smart hashing, and paved the road for",date:"2022-09-01T00:00:00.000Z",formattedDate:"September 1, 2022",tags:[{label:"hasher",permalink:"/blog/tags/hasher"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:2.995,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.13",title:"moon v0.13 - Hashing and toolchain improvements",authors:["milesj"],tags:["hasher","toolchain"]},prevItem:{title:"moon v0.14 - Code generation and implicit dependencies",permalink:"/blog/v0.14"}},s={authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've landed some improvements to our smart hashing, and paved the road for\nadditional languagues and tooling."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4c8cef38.93be090c.js b/assets/js/4c8cef38.93be090c.js deleted file mode 100644 index 6e5e8de93e6..00000000000 --- a/assets/js/4c8cef38.93be090c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1126],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),d=o,h=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(h,i(i({ref:t},p),{},{components:r})):n.createElement(h,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},11126:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"v0.13",title:"moon v0.13 - Hashing and toolchain improvements",authors:["milesj"],tags:["hasher","toolchain"]},i=void 0,l={permalink:"/blog/v0.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-01_v0.13.mdx",source:"@site/blog/2022-09-01_v0.13.mdx",title:"moon v0.13 - Hashing and toolchain improvements",description:"With this release, we've landed some improvements to our smart hashing, and paved the road for",date:"2022-09-01T00:00:00.000Z",formattedDate:"September 1, 2022",tags:[{label:"hasher",permalink:"/blog/tags/hasher"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:2.995,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.13",title:"moon v0.13 - Hashing and toolchain improvements",authors:["milesj"],tags:["hasher","toolchain"]},prevItem:{title:"moon v0.14 - Code generation and implicit dependencies",permalink:"/blog/v0.14"}},s={authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've landed some improvements to our smart hashing, and paved the road for\nadditional languagues and tooling."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4d66ab66.c324234f.js b/assets/js/4d66ab66.c324234f.js new file mode 100644 index 00000000000..060615fc705 --- /dev/null +++ b/assets/js/4d66ab66.c324234f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92293],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(n),u=r,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||l;return n?o.createElement(f,a(a({ref:t},c),{},{components:n})):o.createElement(f,a({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,a=new Array(l);a[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,a[1]=i;for(var p=2;p<l;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88612:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const l={title:"install-global"},a=void 0,i={unversionedId:"proto/commands/install-global",id:"proto/commands/install-global",title:"install-global",description:"The proto install-global ... (or proto ig) command will install one or many",source:"@site/docs/proto/commands/install-global.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/install-global",permalink:"/docs/proto/commands/install-global",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/install-global.mdx",tags:[],version:"current",frontMatter:{title:"install-global"},sidebar:"proto",previous:{title:"install",permalink:"/docs/proto/commands/install"},next:{title:"list",permalink:"/docs/proto/commands/list"}},s={},p=[{value:"Arguments",id:"arguments",level:3}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto install-global <tool> ...<dependencies>")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"proto ig"),") command will install one or many\nglobal packages/modules/dependencies for the provided tool."),(0,r.kt)("p",null,"Where globals are installed and linked are dependent on the tool. For example, Deno installs to\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.deno/bin")," and Rust to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),". Refer to the ",(0,r.kt)("a",{parentName:"p",href:"../tools"},"supported tools")," section for all\ninstall locations, and the\n",(0,r.kt)("a",{parentName:"p",href:"../faq#how-can-i-install-a-global-binary-for-a-language"},"FAQ for more information")," on why this\nexists."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Install a global by name\n$ proto install-global rust cargo-release\n\n# Install multiple globals\n$ proto install-global rust cargo-release cargo-udeps\n\n# Can also include an optional version (depending on the language)\n$ proto install-global node typescript@v5\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"proto installs globals but ",(0,r.kt)("em",{parentName:"p"},"does not")," make them available on ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),". You'll need to manually add all\nthe ",(0,r.kt)("a",{parentName:"p",href:"../tools"},"global binary locations")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," from your shell profile.")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"...<dependencies>")," - Name of dependencies and optional version.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4d66ab66.e287665e.js b/assets/js/4d66ab66.e287665e.js deleted file mode 100644 index c14baca2a08..00000000000 --- a/assets/js/4d66ab66.e287665e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2293],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(n),u=r,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||l;return n?o.createElement(f,a(a({ref:t},c),{},{components:n})):o.createElement(f,a({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,a=new Array(l);a[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,a[1]=i;for(var p=2;p<l;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88612:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const l={title:"install-global"},a=void 0,i={unversionedId:"proto/commands/install-global",id:"proto/commands/install-global",title:"install-global",description:"The proto install-global ... (or proto ig) command will install one or many",source:"@site/docs/proto/commands/install-global.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/install-global",permalink:"/docs/proto/commands/install-global",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/install-global.mdx",tags:[],version:"current",frontMatter:{title:"install-global"},sidebar:"proto",previous:{title:"install",permalink:"/docs/proto/commands/install"},next:{title:"list",permalink:"/docs/proto/commands/list"}},s={},p=[{value:"Arguments",id:"arguments",level:3}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto install-global <tool> ...<dependencies>")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"proto ig"),") command will install one or many\nglobal packages/modules/dependencies for the provided tool."),(0,r.kt)("p",null,"Where globals are installed and linked are dependent on the tool. For example, Deno installs to\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.deno/bin")," and Rust to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),". Refer to the ",(0,r.kt)("a",{parentName:"p",href:"../tools"},"supported tools")," section for all\ninstall locations, and the\n",(0,r.kt)("a",{parentName:"p",href:"../faq#how-can-i-install-a-global-binary-for-a-language"},"FAQ for more information")," on why this\nexists."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Install a global by name\n$ proto install-global rust cargo-release\n\n# Install multiple globals\n$ proto install-global rust cargo-release cargo-udeps\n\n# Can also include an optional version (depending on the language)\n$ proto install-global node typescript@v5\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"proto installs globals but ",(0,r.kt)("em",{parentName:"p"},"does not")," make them available on ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),". You'll need to manually add all\nthe ",(0,r.kt)("a",{parentName:"p",href:"../tools"},"global binary locations")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," from your shell profile.")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"...<dependencies>")," - Name of dependencies and optional version.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4d69ebec.2f907b31.js b/assets/js/4d69ebec.2f907b31.js deleted file mode 100644 index a6b83405449..00000000000 --- a/assets/js/4d69ebec.2f907b31.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6480],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>u});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),g=c(n),u=o,b=g["".concat(p,".").concat(u)]||g[u]||m[u]||a;return n?r.createElement(b,i(i({ref:t},s),{},{components:n})):r.createElement(b,i({ref:t},s))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}g.displayName="MDXCreateElement"},41723:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},i=void 0,l={permalink:"/blog/moon-v1.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx",source:"@site/blog/2023-10-09_moon-v1.15.mdx",title:"moon v1.15 - Next-generation action graph",description:"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the",date:"2023-10-09T00:00:00.000Z",formattedDate:"October 9, 2023",tags:[{label:"action",permalink:"/blog/tags/action"},{label:"dependency",permalink:"/blog/tags/dependency"},{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"railway",permalink:"/blog/tags/railway"}],readingTime:4.62,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},nextItem:{title:"proto v0.19 - Version pinning and outdated checks",permalink:"/blog/proto-v0.19"}},p={image:n(2985).Z,authorsImageUrls:[void 0]},c=[],s={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the\ndependency graph."))}m.isMDXComponent=!0},2985:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.15-24f6509aa7bcbfaf9ac48f4d63883483.png"}}]); \ No newline at end of file diff --git a/assets/js/4d69ebec.5b66bd1f.js b/assets/js/4d69ebec.5b66bd1f.js new file mode 100644 index 00000000000..24c85c79222 --- /dev/null +++ b/assets/js/4d69ebec.5b66bd1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46480],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>u});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),g=c(n),u=o,b=g["".concat(p,".").concat(u)]||g[u]||m[u]||a;return n?r.createElement(b,i(i({ref:t},s),{},{components:n})):r.createElement(b,i({ref:t},s))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}g.displayName="MDXCreateElement"},41723:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},i=void 0,l={permalink:"/blog/moon-v1.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx",source:"@site/blog/2023-10-09_moon-v1.15.mdx",title:"moon v1.15 - Next-generation action graph",description:"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the",date:"2023-10-09T00:00:00.000Z",formattedDate:"October 9, 2023",tags:[{label:"action",permalink:"/blog/tags/action"},{label:"dependency",permalink:"/blog/tags/dependency"},{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"railway",permalink:"/blog/tags/railway"}],readingTime:4.62,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},prevItem:{title:"proto v0.20 - New shims and binaries management",permalink:"/blog/proto-v0.20"},nextItem:{title:"proto v0.19 - Version pinning and outdated checks",permalink:"/blog/proto-v0.19"}},p={image:n(2985).Z,authorsImageUrls:[void 0]},c=[],s={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the\ndependency graph."))}m.isMDXComponent=!0},2985:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.15-24f6509aa7bcbfaf9ac48f4d63883483.png"}}]); \ No newline at end of file diff --git a/assets/js/4ddbfcdc.b83ea6ac.js b/assets/js/4ddbfcdc.b83ea6ac.js new file mode 100644 index 00000000000..c4835e148cf --- /dev/null +++ b/assets/js/4ddbfcdc.b83ea6ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96758],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=s(n),m=r,g=c["".concat(p,".").concat(m)]||c[m]||d[m]||a;return n?o.createElement(g,l(l({ref:t},u),{},{components:n})):o.createElement(g,l({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<a;s++)l[s]=n[s];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},17078:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const a={slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.16",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx",source:"@site/blog/2023-09-04_proto-v0.16.mdx",title:"proto v0.16 - Add, remove, and purge plugins",description:"This release adds functionality for managing plugins and purging the proto store.",date:"2023-09-04T00:00:00.000Z",formattedDate:"September 4, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.445,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},prevItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"},nextItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"}},p={authorsImageUrls:[void 0]},s=[{value:"Add and remove plugins",id:"add-and-remove-plugins",level:2},{value:"Purge tools and plugins",id:"purge-tools-and-plugins",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This release adds functionality for managing plugins and purging the proto store."),(0,r.kt)("h2",{id:"add-and-remove-plugins"},"Add and remove plugins"),(0,r.kt)("p",null,"Now that proto has fully embraced a plugin based architecture, we thought it'd be nice to support\nthe management of these plugins through the CLI. This release adds two new commands:\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/add-plugin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto add-plugin"))," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/remove-plugin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto remove-plugin")),"."),(0,r.kt)("p",null,"Adding a plugin requires a unique ID and what we call a locator, which is a string that dictates\nwhere to locate and download the plugin from. Here's an example for Node.js, but this isn't\nnecessary as it's built-in:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\n")),(0,r.kt)("p",null,"Additionally, removing a plugin is even easier."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto remove-plugin node\n")),(0,r.kt)("h2",{id:"purge-tools-and-plugins"},"Purge tools and plugins"),(0,r.kt)("p",null,"proto has supported cleaning for quite some time through the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/clean"},(0,r.kt)("inlineCode",{parentName:"a"},"proto clean"))," command (and the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config#user-configuration"},(0,r.kt)("inlineCode",{parentName:"a"},"auto-clean")," setting"),"), which would automatically delete\ninstalled tool versions and temporary files that are older then a specific timeframe. This helps to\nfree up disk space for unused or rarely used tools."),(0,r.kt)("p",null,"In this release, we're expanding the ",(0,r.kt)("inlineCode",{parentName:"p"},"clean"),' command\'s functionality with a concept known as\npurging, which will "delete entirely". The first being the new ',(0,r.kt)("inlineCode",{parentName:"p"},"--purge")," option, which will delete a\ntool, its manifest, ",(0,r.kt)("em",{parentName:"p"},"all")," installed versions, and the entire ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<id>")," directory."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Delete all traces of Node.js\n$ proto clean --purge node\n")),(0,r.kt)("p",null,"Additionaly, a new ",(0,r.kt)("inlineCode",{parentName:"p"},"--purge-plugins")," option can be used to delete all downloaded plugins (the\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/plugins")," directory). Useful for house keeping or if you want to start fresh."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto clean --purge-plugins\n")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.16.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added folder locking during tool installation to avoid colliding processes."),(0,r.kt)("li",{parentName:"ul"},"Renamed ",(0,r.kt)("inlineCode",{parentName:"li"},"PROTO_ROOT")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"PROTO_HOME"),", but we'll support ",(0,r.kt)("inlineCode",{parentName:"li"},"PROTO_ROOT")," for the time being.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4ddbfcdc.c4f28645.js b/assets/js/4ddbfcdc.c4f28645.js deleted file mode 100644 index b47b6e949f7..00000000000 --- a/assets/js/4ddbfcdc.c4f28645.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6758],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=s(n),m=r,g=c["".concat(p,".").concat(m)]||c[m]||d[m]||a;return n?o.createElement(g,l(l({ref:t},u),{},{components:n})):o.createElement(g,l({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<a;s++)l[s]=n[s];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},17078:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const a={slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.16",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx",source:"@site/blog/2023-09-04_proto-v0.16.mdx",title:"proto v0.16 - Add, remove, and purge plugins",description:"This release adds functionality for managing plugins and purging the proto store.",date:"2023-09-04T00:00:00.000Z",formattedDate:"September 4, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.445,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},prevItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"},nextItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"}},p={authorsImageUrls:[void 0]},s=[{value:"Add and remove plugins",id:"add-and-remove-plugins",level:2},{value:"Purge tools and plugins",id:"purge-tools-and-plugins",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This release adds functionality for managing plugins and purging the proto store."),(0,r.kt)("h2",{id:"add-and-remove-plugins"},"Add and remove plugins"),(0,r.kt)("p",null,"Now that proto has fully embraced a plugin based architecture, we thought it'd be nice to support\nthe management of these plugins through the CLI. This release adds two new commands:\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/add-plugin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto add-plugin"))," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/remove-plugin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto remove-plugin")),"."),(0,r.kt)("p",null,"Adding a plugin requires a unique ID and what we call a locator, which is a string that dictates\nwhere to locate and download the plugin from. Here's an example for Node.js, but this isn't\nnecessary as it's built-in:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\n")),(0,r.kt)("p",null,"Additionally, removing a plugin is even easier."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto remove-plugin node\n")),(0,r.kt)("h2",{id:"purge-tools-and-plugins"},"Purge tools and plugins"),(0,r.kt)("p",null,"proto has supported cleaning for quite some time through the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/clean"},(0,r.kt)("inlineCode",{parentName:"a"},"proto clean"))," command (and the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config#user-configuration"},(0,r.kt)("inlineCode",{parentName:"a"},"auto-clean")," setting"),"), which would automatically delete\ninstalled tool versions and temporary files that are older then a specific timeframe. This helps to\nfree up disk space for unused or rarely used tools."),(0,r.kt)("p",null,"In this release, we're expanding the ",(0,r.kt)("inlineCode",{parentName:"p"},"clean"),' command\'s functionality with a concept known as\npurging, which will "delete entirely". The first being the new ',(0,r.kt)("inlineCode",{parentName:"p"},"--purge")," option, which will delete a\ntool, its manifest, ",(0,r.kt)("em",{parentName:"p"},"all")," installed versions, and the entire ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<id>")," directory."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Delete all traces of Node.js\n$ proto clean --purge node\n")),(0,r.kt)("p",null,"Additionaly, a new ",(0,r.kt)("inlineCode",{parentName:"p"},"--purge-plugins")," option can be used to delete all downloaded plugins (the\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/plugins")," directory). Useful for house keeping or if you want to start fresh."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto clean --purge-plugins\n")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.16.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added folder locking during tool installation to avoid colliding processes."),(0,r.kt)("li",{parentName:"ul"},"Renamed ",(0,r.kt)("inlineCode",{parentName:"li"},"PROTO_ROOT")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"PROTO_HOME"),", but we'll support ",(0,r.kt)("inlineCode",{parentName:"li"},"PROTO_ROOT")," for the time being.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4e986fc6.4c608e63.js b/assets/js/4e986fc6.4c608e63.js deleted file mode 100644 index 4f8a4ebee85..00000000000 --- a/assets/js/4e986fc6.4c608e63.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8233],{35318:(A,I,g)=>{g.d(I,{Zo:()=>B,kt:()=>V});var C=g(27378);function e(A,I,g){return I in A?Object.defineProperty(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}function U(A,I){var g=Object.keys(A);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(A);I&&(C=C.filter((function(I){return Object.getOwnPropertyDescriptor(A,I).enumerable}))),g.push.apply(g,C)}return g}function Q(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?U(Object(g),!0).forEach((function(I){e(A,I,g[I])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(g)):U(Object(g)).forEach((function(I){Object.defineProperty(A,I,Object.getOwnPropertyDescriptor(g,I))}))}return A}function F(A,I){if(null==A)return{};var g,C,e=function(A,I){if(null==A)return{};var g,C,e={},U=Object.keys(A);for(C=0;C<U.length;C++)g=U[C],I.indexOf(g)>=0||(e[g]=A[g]);return e}(A,I);if(Object.getOwnPropertySymbols){var U=Object.getOwnPropertySymbols(A);for(C=0;C<U.length;C++)g=U[C],I.indexOf(g)>=0||Object.prototype.propertyIsEnumerable.call(A,g)&&(e[g]=A[g])}return e}var l=C.createContext({}),t=function(A){var I=C.useContext(l),g=I;return A&&(g="function"==typeof A?A(I):Q(Q({},I),A)),g},B=function(A){var I=t(A.components);return C.createElement(l.Provider,{value:I},A.children)},a={inlineCode:"code",wrapper:function(A){var I=A.children;return C.createElement(C.Fragment,{},I)}},E=C.forwardRef((function(A,I){var g=A.components,e=A.mdxType,U=A.originalType,l=A.parentName,B=F(A,["components","mdxType","originalType","parentName"]),E=t(g),V=e,n=E["".concat(l,".").concat(V)]||E[V]||a[V]||U;return g?C.createElement(n,Q(Q({ref:I},B),{},{components:g})):C.createElement(n,Q({ref:I},B))}));function V(A,I){var g=arguments,e=I&&I.mdxType;if("string"==typeof A||e){var U=g.length,Q=new Array(U);Q[0]=E;var F={};for(var l in I)hasOwnProperty.call(I,l)&&(F[l]=I[l]);F.originalType=A,F.mdxType="string"==typeof A?A:e,Q[1]=F;for(var t=2;t<U;t++)Q[t]=g[t];return C.createElement.apply(null,Q)}return C.createElement.apply(null,g)}E.displayName="MDXCreateElement"},3580:(A,I,g)=>{g.d(I,{Z:()=>B});var C,e,U,Q,F,l=g(27378);function t(){return t=Object.assign?Object.assign.bind():function(A){for(var I=1;I<arguments.length;I++){var g=arguments[I];for(var C in g)Object.prototype.hasOwnProperty.call(g,C)&&(A[C]=g[C])}return A},t.apply(this,arguments)}const B=A=>{let{title:I,titleId:g,...B}=A;return l.createElement("svg",t({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 326 100",role:"img","aria-labelledby":g},B),I?l.createElement("title",{id:g},I):null,C||(C=l.createElement("path",{fill:"currentColor",d:"M206.776 22.102c-15.275 0-27.655 12.49-27.655 27.9 0 15.41 12.38 27.9 27.655 27.9s27.656-12.49 27.656-27.9c0-15.41-12.381-27.9-27.656-27.9Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072Zm91.569-44.972c-15.275 0-27.656 12.49-27.656 27.9 0 15.41 12.381 27.9 27.656 27.9 15.274 0 27.655-12.49 27.655-27.9 0-15.41-12.381-27.9-27.655-27.9Zm0 44.972c-9.353 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.339 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072ZM117.07 22.102c-15.275 0-27.655 12.49-27.655 27.9v50h10.732V72.035c4.677 3.663 10.545 5.866 16.923 5.866 15.275 0 27.656-12.49 27.656-27.9 0-15.409-12.381-27.899-27.656-27.899Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.57 17.072-16.923 17.072ZM252.346.002h-10.733v54.366c0 13.003 10.452 23.533 23.328 23.533V67.074c-6.954 0-12.595-5.69-12.595-12.706V27.523h12.595V16.695h-12.595V.002Zm-76.428 22.1c-12.889 0-23.327 10.544-23.327 23.534V77.9h10.732V45.636c0-7.016 5.641-12.706 12.595-12.706V22.102Z"})),l.createElement("mask",{id:"a",width:67,height:68,x:0,y:16,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},e||(e=l.createElement("path",{fill:"#fff",d:"m66.744 63.6-4.61-14.774a21.975 21.975 0 0 1 0-13.139l4.69-15.044c.804-2.569-1.594-4.988-4.14-4.177l-14.913 4.73a21.421 21.421 0 0 1-13.024 0l-14.645-4.65c-2.6-.824-5.011 1.704-4.1 4.286l2.68 7.623a22.06 22.06 0 0 1-1.233 17.451L.392 78.82c-1.514 2.92 1.648 6.056 4.516 4.461L35.94 66.047a21.553 21.553 0 0 1 17.713-1.46l8.843 3.15c2.56.919 5.065-1.528 4.248-4.137Z"}))),l.createElement("g",{mask:"url(#a)"},l.createElement("mask",{id:"b",width:81,height:82,x:-7,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=l.createElement("path",{fill:"#fff",d:"M73.684 9.545H-6.709v80.914h80.393V9.545Z"}))),Q||(Q=l.createElement("g",{mask:"url(#b)"},l.createElement("path",{fill:"url(#c)",d:"M-6.963 9.215h81.037v81.752H-6.963z"})))),F||(F=l.createElement("defs",null,l.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},l.createElement("use",{xlinkHref:"#d",transform:"scale(.00794 .00806)"})),l.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1Qmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozMzoyMS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjMzOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzM6MjEtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xNjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFCQUJBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FPOCtkdk5lcTZKZlc2V1hwU0k4UmFTSyYjeEE7VlMyL0lnSDRTcHpiOW5hSEhtaVRLK2ZSek1HbTQ0RW9XVDh3WnRIL0FDNTFMemhySVc0K3FGMmp0NGdJNmt1c1VVVmZpcHlrWWI3NyYjeEE7SEtkZHBvUXpjRU80T0puL0FIZCtTVVJmbUw1KzBEVmROaTg5NlBZMjJuYTBzdjFPZlRKWlpaTGVhS0l6ZWhjckpzek1xa2NvL2hybSYjeEE7TDRjU1BTZVRqK0pJSDFEbWwybS9tdCtZK3NycE5scGVqYVltc2VZb3BkVDB4TGlhWXdXdWx4MFZKTHNvT1R5U09kaEgycFVlRWppaSYjeEE7THNtaDk3RVpaR3FBcy9jeHJ6ZjVxODErWmZNSGxuUTUxZzBIem5vbXVtMm5uaUgxcTFCbXRmVmhualY2Y2xkUDJXeWNJaUlKNXhJWSYjeEE7VGtaRURsSUZtTjMrWXY1azNjbXZYM2xyUjlQdTlDOHIzRTFsZnRleXl4WGQ1TlpMVzYrckxHREdnQit6ejYvZ0t4amp0WjNMWWNrdCYjeEE7Nkd3ZWkrWE5jdGRlMERUdGF0VlpMZlVyZUs2alIvdEtKVURjVzkxclE1VEtOR202TXJGcGprV1RzVmVZdDUvOHl2ZXBZeE5iZ1N6aSYjeEE7TkxyMHlXNHMvRUg3WEdsUGJPbS9rdkNJOFo0dGh5dnljL05vK0VXOU96bVhBZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjViL09uL25KWHo3NUkvTXpXZkwraUhUN3pUb0k3Y1JKZFFNN3dTU1FJNzhYaWxqNUhrMWZqclRwVEZYcDMvS3p2TXVtZiYjeEE7bEg1UzEyVzNoMXZ6WjVyYXl0TENGQ0xlM2E3MUZHbGo5VWl2Qlk0MVBPbmNkdW9WUzdVZnpxODVlVERyZGg1LzBheU9wMk9sTnJHbCYjeEE7WEdqeXl0YVhTQ1pMY3dONjYrcEc2eVNyeWFsS1YyNlZWVmJmOHdQenExUFZaUExHbGFMb2llWk5IdElidnpMUGR6WElzbzN2SGQ3VyYjeEE7MXR4SHlrYVEyNkRrNVBIbnk3QVZWWXhwbm5EVy9PdjVxK1VOYnNuSGwyOHNkTTFDUHpGWnl4aTYrQ3h2NGt2TFZHMnA2Z1g0WkFLaiYjeEE7NTRxbS93RHl1djhBTWxQTGEvbUxONWQwOWZ5NWVaZjNJbmwvVEMyYlRlZ0xvclQwQ0N4RGNCdjlIeFlxOVVsOG9XTjVxTTk3cVRtNyYjeEE7TWgvZHhib2lKMFZkalUwSHZtZkhYeWhBUmg2YWRnZGZJWXhDQTRRT2ZteFQ4NXZLY3N2NVJhOW8zbDNUNUo3bTVlMmtpczdjUEk3cyYjeEE7THVCbktyVmpzaVYyOE1yR29sUElKVExyTlVaVGllcFZiUDhBSnExRjlGZGF0NWcxUFhCWTI4MXRvME4rOGJMYWllTXhOSjhDcDZzZyYjeEE7UTBETi9TbFJ6ZHdBWUREM2tsVnV2eWhzVzBueTdCWWF2ZWFackhsbTNGcHArczJ2QVN0RnhDdWtzYkJrZFc0MTQrT0l6Ym5iWXFjTyYjeEE7dzMzQ0gvNVVob2Y2Rk52K2xMLzlQRytYVlQ1bE1nTjc5Y1ZTaXYwNGNBcDQrblNsUGZmSHh6ZkxidVh3QlhQZnZkcS81TDIxNWU2ayYjeEE7OWo1aDFMU3RPMTEvVjE3VExSb3hEY3lzQXNzaThsSmlhWUQ5NXgrMTh0c1JtcnB5VTRiNjgyZmFacHRscGVuV3VtMkVRZ3NyT0pJTCYjeEE7YUZhMFdPTlFxcnZ2c0JsUk5tMjBDaFNKd0pRMnBXczExWXpXMFV2b1BNdkQxYWNxQS9hMnFPMldZWmlNaElpNmJzR1FRbUpFWFhSSyYjeEE7YmZ5TDVjamlWWkxjenlMdVpuZGcxZXY3SlVETXVYYWVZblkwM1o5ZGt5R3pzbitZRGh1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdU5hR2hvZXhPNHJpcnhueTcvemk1NUdqdXIzVnZPVHllYk5mMUtaN2k4dXB5OXZBSkpYNXQ2VU1UMUcvd0RNN2UxTyYjeEE7bUtvbjgyUHl5aHV2S3ZranluNWJ0YnV6MHF3OHhXVHRKcDd1WjdLMldLNTVYQ1N2NmpKNmJ5QWgyclEweFZWdlArY2ZkUDFQVDlkRyYjeEE7dStZZFExblc5YnRZOVA4QTB6ZCtrWHRyU0taSnhGQkVpcEd2SjR3V1BmMjNxcW5YbS84QUtaTlo4eE41bDBUWDcveXhyZHhiaXkxRyYjeEE7NTA4b1Z1WUYrd0pJNUFSelQ5aHh1UHVvcWhyTDhqUExHbG55ekxvbDVlYWRkZVczZXR5cnJJOTlEY1NDUzdodmVhMGtFNUJxUlRqWCYjeEE7YnRSVkxFLzV4MjBaZU9sTjVnMVIvSkNYUXZJL0tCa1EyWWNTZXFJaTVYMURDSlBpOU92MDEzeFYvOWs9PC94bXBHSW1nOmltYWdlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L3htcDpUaHVtYm5haWxzPgogICAgICAgICA8eG1wTU06UmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwveG1wTU06UmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjczNzkyNDVjLWMyNDctNGFlMi05OTM1LTk0ZjM4NGJkYjMzNjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3Mzc5MjQ1Yy1jMjQ3LTRhZTItOTkzNS05NGYzODRiZGIzMzY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OGE0ODVjMDgtOTQ4Yi00OWUzLTkyYWItNTk5NWRiODI0YjBhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjhhNDg1YzA4LTk0OGItNDllMy05MmFiLTU5OTVkYjgyNGIwYTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpyZW5kaXRpb25DbGFzcz5kZWZhdWx0PC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzM3OTI0NWMtYzI0Ny00YWUyLTk5MzUtOTRmMzg0YmRiMzM2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjMzOjIxLTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAEP/uAA5BZG9iZQBkwAAAAAH/wAARCAB8AH4DABEAAREBAhEB/8QBogABAAECBwEAAAAAAAAAAAAACgkFCAABAgMEBgcLAQACAgIBBQAAAAAAAAAAAAAACQcIBAUCAQMGCgsQAAAEAQIDBAWMAwAAAAAAAAECAwQFAAYHEhMIERUxCRQWIUIKFxgZGiIjJCUmJygpKjIzNDU2Nzg5OkFDREVGR0hJSlFSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+hEAAQIDAwICBwWJAAAAAAAAAQIDAAQRBQYhBxITMQgVFiJBUWEUI0KDkQkKFxgZGiQlJicoKSoyMzQ1Njc4OTpDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanFyc3R1dnd4eXqBgoSFhoeIiYqSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwB/EiCMSIIxIgiGOt71sGcqE6InQPoWxpzA4dBCCyn/ADkha4t4nFIs4QUB1NaHvUFBUZwqGt1ykenIJF1ndOgNImia1i9Go6ZErKcslq/97mETE1MHOk2HBVtttJGbMLSRRTi1AloGqEt5rmvKWNDme4VzpZUqm3LUQFuLxaQoVSlIOCyDpqJGug1ATRWJUM2IsZXSESwoRtmlzEdhQi4+h/Wv60XQzqCM36J8ffQ1CnKWDTqUTnbC6ieoUzdFKPkfrsEQFuUSg1VQEgielEKopTxdeTInkwvXnLtKyZZuaVTb2XBl3KiuJLJQFnXjXRErrrta5qc3xW0rrWDaFVPSzaXDuJGuHpuu0B09iDXDZCl+lD60rgBUGtFehZk8zmOUPInqACaSE1ZyLaimMoaM5NLSWZ5V1vLqHVc5651r7LNanW+m1JmGB06ABLbM52kI8AtDJ2E1VZ0xhsEuD19PYNwfAi+uZdbUrMU+G6SzGi5NiBLHqgKsp6uDzLcNjpETUOmqrOQkOh6leRUKU6S6qahq8pTGMU4Fr1buQfKzd90omLFm5hsUoqVAmkqBJAIDBWsYg1CkJUBQkAEE+GTV27alFUcYWobNGvg9y1O6geYj0eN1oKgRNtMVI5RmoWw0bDxiqSDmfk2AeuofSqmI6YMCxMz6IEXqBypAgmoZU5RKQDGt0vF5DJtlDtRWbZ9hWu6NF0MlMo/mpXhVK16HmIIqCrPUkJBqqgxjXps+fXway6cacGKpXamlB2GLNaJ9pRqz7M1JZvMVrOWirFikXqNhbFea83SuESgBEXsanG1bxJNNZU1cVVrDXhKUpjV4hSAecrpaiPlJtxaXLwrlbHkqiuiLD71DplLTCigkDEpcfaNSBs83NbsOcOL2a2NqandBhupER2UUbSi1oieiazCZaM2qFcMVIukKsCYhHJxqJOCgQxFI3OArtogdJMBqarRk0XTMYTAemAgks5dHUR8mVhLTMW6qatibBBo6vQmAU41DTOaogng5LjriCAAU0zgrJFlMNcHVUdrgN0HwYj/npRBn5REfkik/Z5zpnpEEqqCDudEeicdWakXEgqpNDRJ05tUQNUiBU0qQgAQoAFcUACyFhXau7dmWMpdyRk5CWNKpl2W2gqlaFWYlOccTiqpxJrUmoW0IFEAAbSOkjLfiMdQxjv8AQyoq0QKDs6mM8qHM5ojNmOsTkEVmate0foFGvMwi8OVBRjFocsAjToOE1Exs64DAAh45eu592772O5Yd6JRqbs5waShryDym2sUW2sbBaCFbCtCQewpIUKK0oVFWVK0NCa0tQihE/wBq2QhcebLqQGekCQOJ0oROhgi3UeFaAoqsvYVEUHCbpoJzHOCKwEOYyhDjJQWWDJnOZKr6PXbeWp6zlJD0q6Ri4wsqCc6gA0RBSptygAKklQASpMa9xGYrN2Ef/9B/EiCMSIIxIggg8air6PxiLR2JqVaJRqJPotEFq4Qqz6IulXjtWuETCFUXWMNvERt8nWyEnL2bJM2dKDNlWGkNoGyQhISkdgAAi4bMu3LsoYaFG0JCRtAkUHhBFLEJZYMdVJjaMEuYMY60xxzhLuCMNwRxThLvJjWvCOCpicshMal8RT1Qs5ZKI0cwKxTlAlkpMaN9McI4SyEmNS6mOKYJd4GNe4mNkQlzBjEUmNsQlyBjslMTNWh7jsUTnTRqmxa0c0FcwCa0eFmcxzJpRRlEYjDyum5BNU0DuGj8SLCUoGVBJKmEQTKAUY1NuzpRVkWDa2YBPpmZhnOFKltSELzVHTICkVTU0TnLpwca4U0mgBj/0X8SIIxIgjEiCCn0cKHTihTRcogUPl0qinNucj5CGhXnGqwF4JYnNx1XKru1S2uQB62VpTqqHLT1xjGEBEXCXAvO1fG5dm3lbOcqalUFelg8nXH04BI115C01CUg0qABQC3VgT6bYsaWtJJqXWgVbRY11Y0gMFhQ0hpaQjykSy8xrG1LcbRiy5gxjrbjjnLLuJMYLqI4ahZd9JjVvIjgqFlkJMah9EU9UtnLJQY0j6N1jgKFlkJMaZ9EcI5ZZCTGpdRHFMWXdBjXOIjYMWXcBjDWiNoSy51jsFET1WiJoaKQqYlE2is9STA87Y/DZoQQTgarkh01Gyz+KuUhpAJarEolHk0hu8JhUh43dKAAJ11amnepM5eKybnME0kpZcy7TSK5hQQ2k7HOQhlStIDNeGJxCdXOHXggbAR//9J/EiCMSIIxIgiFq0oVDUWM7Jg0VWSB7VpwwpxM6OKFFMEUopA1FIjBllCiAKmcxKGxBwnXgJiAnDwrwKNvPe3USb1CYsa0rnvqGiyzyZloY1LboCHQNhmoWhB2Bq8dMcGz3kgtIPyczYzh19pYdRsyleuq2lEqSk7Oq9jsIqRTziVws6JmLMbRiS5hUYzjMcU5Jd1KowHWo4ahJd9Ko1TzUcBQkshCo0z7UU9UlnLJQqNJMNRwFCSyUqjTPtRwTkl30mNS83HFMSXeCo1zjUbJiS7gVGGtuNoSS5gxjqbhedZmoYmoOUBKFtDldOpRCb81mqscSBRZUic5Y6u4nFOciR3FcsKBJwxd0CdeUlcSuACkCuKCVMq17BfjKLa96GznS0zOKDRoASw0EssEgYV0FtuuJxrio4nxh9eiOqWNInwmwj//038SIIxIgjEiCLLbSAwFhGKy/PN88TqjibMXmbHIUakRNUX686YXNtRSvVSUUTr4XOBySvTMme71cJhIJyGnbUbrRmZHK1Iy7Bo1NsTLTmJxQJdx8DAgHbxlBooEYVpnAESPkoedRfeWYb4MfbeQrTxSGlObA8pNpONRhpVoQeYUs4kzALi2qpbCNg6UuYXGI5LxxTp5xLvJVGteYjgqJyyEqjUPsRT1U7OWShUaWYZinqp2cslCo0kwzFPUTlkpVGkfZjhHTziWQlUal1mOKZOXdCo17jMbBk5dwKjDWzFy1Y6oYGosVpGhZNdROnhbScSE6o+IqLIp2CTQKacL1sos2vMJWJmh5GZDEEpgUcFu8TAZYqy33tFzsltr2sk0m1ypl2cATosztylQCtdOh55dINRmoOCuDTrLQpLyq3NjSg6acPqwsKScY8Mj/9R/EiCMSIIxIgiw20iU7m0EoBHmyLupvp9TngkNSZEI3UUdQ+COSzjfLnBYQVSaNHcMagZRKvOCqqRBu4c9dYjUZbFdn8o4tbMrL2fKOrKiVAJW6nQEAUwKlJW5QKwzUrUNeSImTIdY7lo3y23BFWJOWcWVY0CnBoSRhgVKCl0CsKJUdMCIGzI5xJiQci3a5SmwjinRziXdSuNe9LRw1ErO3S76Vxqn5aOAqlLJQuNM/LxT1U84lkoVGkmGIpyqecSyUKjRzDEU9ROzlkpVGkfY044R084lkJVGpdYjiHTziXdCo1zjEbIpy7gVGIpiJgrRGzKTXnZRiohLIrEVg03puTNhy5kHINnCc5Yk8jcZSSc1YjQ6zM002AqEFNRQpVyCBkymEFKS6mjbym7GsO7SFJKH5l+ZWKpzklhCWmiU0KqK20OgHOSklChRRFUeI3nOhoaZ5SJVugAG61O6bpORJf0eIR//1X8SIIxIgjEiCIBa2jRmJRhoruGkHcnWmbMEjqbc3hAwCg/fVcozij6RSmUKBYo+bkRSOU1cqzZoHEpTGMUGO5Cbim5FzkvTyQm3LRKX3tmhFNuWTpcI0KKlAiqXHHE1IAJv3keuCu6V0kPTyM22Z/Ned2aE025aOlihJKlAjXXHHE1IAJs5OjnEpwSuJKelY4aiOcS76Vxq3pWOColnEshC40z8tTYRT1UrO3SyULjSzEvSKcqlZyykLjRTEvFNVSllIXGimJeKeonZ26WSlUaN9jTjgnTlkJVGoeYjimTl3QqNe4xGyKcu5nRiFiJqrRIzhRGHUapoqCgm4QezNnG0CmPaw6RdoR2GREaSupAQYHYtbfX14mc5wEqHamfZi9tVg20nOLam5lhXKKSksuIx06rC3OwIjwK+ksW1S7w0iFJO0pmkbrU7pEyMqOx4NH//1n8SIIxIgi1qte0XRoT0IorYa6qE655AtNiblTPSuG1rSBrF4wnXCByWFQ0xqRQMAOlUa+zlLuRW5WtjfVnbUjOseRo+/UYKzTt22dgdEXSo2LaV7KJiyIXGN9r7NCZRnWNIUmH6jXVZp26aOw28XSo2LaXNlEAh0s4kx5K4Yu7LbSOIdLOJd5K41rsttI4SiVnbpZCVxqn5aOAqlLIQuNLMS1IpyqVnLKQuNHMy+nFMVSs5ZSFxoJmXimqp5xLLQqNBMsbSKcqnLJQqNHMMxwVE5ZCVRp3mI4hk5d4KjWuMxsinLuBUYimYvLrAtEG5vK07MSrr1CFz4teodxSuJTnWtpiJWAoJ166BCVSeDKG05hp65MDVxRNS10GakbdrWmyTWjoac6bs/MnW8aAaAToxOBOEst+gFNepUgVjxu9Vn7arEdKRr7VHB2Lwd4YVQmKSp4haP//XfxIgjEiCIB61TRdUowUV4u/YvDuJozbMpNyaCZFRO0VYM1TFexpEgCCRjzgiBTuCq0pVRa1BM9fUi1zHMkFy03JucxLTDYTbU0A/MkjXgtQ11onToyiiCmpSHNEUng81aLkWyeJuHcaXlZpsIt6cAfmiRrwWsa4ydjtwiiCmpSHNFWmmea20GTs7dKVguJRcYjjHSl3UrjXuy8cJRLOJd9K41T8vFPVSziWShcaSYl6DSimKp2dulloXGgmWNpFMWTs5ZSFR4/MsRTFU7OWWhUePzLG6RTVU7OWUhUaGYZinqElkpVGlfajiHJLvpVGrdajYMSXcCoxFtxvsnTqHPWkQYrHbPWDlB6zcp1wKN3TVUi7ddMRAQA6SqYGC3WYS7b7LM0wuWmEhbDiClSTpFKhRQO0IJEdlTKVpKFCqSKHphhblCqe6NEqhpMOf6JUU7a+acCjy7dvTVFm+iMOQXiLAlOdUwWHvzKoDXmPXCmN3hsxTDfCwF3VvVaN3FlR2xTjrIKtNSELIQs0A4PRmq0hp6Q0hXG0ZQyE+9Jmu3Tik47EA4HsIoewx/9B/EiCLQK2XRiPQyoZKQGDuCpTqogEfQJkYphBeHwMW1Tj8WSEhinSXIg5I3QOAgYirgFC29MZTXkMuQm9d6xaM8kmx7NKHlbJbudVls1wIJSVrGkUozTgqLCajlk6Tfa+gtW0EFVhWSUPrw11x7Oqw0aggpKkqcWMQUozFYLiEASyv7WGXlusbYklyCo7CmqxsHTziXcSqMN1iscNROXfSqNU+xFPVTs5ZKFRpZhjTimLJ2cstCo8fmWNOKUsnZyy0Kjx2aZpWKWsSzt0sxCo8cmmopapLOWWhUePTLWnFOULZyykmNI+3HDOWXfSY1TrcccxZdwGMFaI2xCXKsdkpifC0X1ENScdBacUwHSpDuKG06VBYkIJgMjN+eNrUZaFUKY57vmj7eKGpgpSiUQCurymMZc+pa3ZTZd+5W8bIIatWUGedm9LZrSqbTQVS4oamoJrQgCF8ocgJe1m51PBsw3j08iiT4aUfppf/0X5rrotkVnLlZJu3bpKLuHC6hEkUEUiCoqssqoJU0kkkyiYxjCAFAK8Zc223HXEtNJKnVEAACpJOAAAxJJwAGnHNpp191LLKVLeWoJSlIJUpRNAABiSTgAMSYgDrR1Fk1GKilGpyNVlTzcY0sDmmkoRVKlgUPUVqTsUFSkVRVizpRV0YpygclWAhsAAAMeyX3NFyLosWU8kC1HNvZgih29WBVNRUENpCWwQSDmlQ4OxbNkbuAMnVxpaxX0pFsu7fzRBB2/cAqjOFQQ0kJaBBKTmFQ4ONfB66UiRKdBGKWRWOJQDG2YkuYVHZcbjiKEs5d5Ko1jzUU9UlnbpZKFRpZhmKYsSWUhUaCaZilLJ2csxtUeNzbOnFIXJZyzWzHjE23pxSVi2cs1BjxqaRFNUCWUgxoX0xwThLvpMal1MccwS7oMYK0xtiEudY7BTusS1WihZxA87KMj9Mp7C203ZpNHhgWIVMH76JRhaGlM3FQFFTmbw93SnAhipgBgESicANTLUxn5ZNjWHLqI21rmphScDXMQhoL16lAM5bdRUE1BAOaaRdlMUgSsog8JS4sjDYAJrj00p6b2DD/9Jj9bhotWw9DQsyIU5qc4qI9rMNWqR65VnNNsCdj6xqUTUlitWTYlKcoFVRXcCUaZK3T1kAuZrQXqNvziK2ZZeasVGCphVdBG5dFOkg1SpLdRRcWa1F/J/rUX1N559FbHsbNcFRguaVXQANnoVFPkpNUrQyFCi8YYa6V6oZLSMV0iDNjFlIjppdNjSNvl1EcFYiNg5ZdxJjCdRHBUJZyyEmNQ+3FNWJZyykKjRTLUbkHm1Hp1RVtA5tQaJx6MPT0jSGQhi4iD5c1xCm2bJqKiQgDXmNXUpQt4iAW+XGetWzrHk12har7UtItiqnHFpQgdNUogVOwGmdIR4hbU3IWXKrnbSeal5NA15bighI7CogV2Q0zsIvNmZaOWjZOZkWITniU1ZglVIrU4ZEnq8ajhTlOlUTuG0DRdQlBu4SOYwDa8ZchigU6RRERLBdu6k/cKyZgy1ktTlokEVcQkNNUoahKnSlwqBAHCIIINUrNMa6Xgy5XQlHyxZiJmdoRr6UhtvY1oXClZINBwjCTWoUdj3SO2i3nkmZxbO0WZsxMpWxjNBjU3IrAhWd1MwkQcFYvpxg2bCqAAKpRWMBREamIhSjorP1Lmw1BOrOxptolWvaE+29RNcSnPQxnKpjmnNFcM4aY8KTlvs98AzUg82SccxxLlBsxVLdTtMBtdiLNKJlZArQtDAy60aodxWMwhE4FCPzOLbVQs6YpicXKxYSC0UhjYhiiQTvWzYKcAC4iCac7qZbMml7AluQtNlidUOEMzvjuA1pmjRKNuK2NGlrw6Yqnkkhfi7NsgCWmUIeI4Md27V0zXtdUenVKw6YaWtHlLqY3DsbBpdwRhLEc6DQWLTii0OgMBhzyLxqLvG8OhcLh7dR0+fvnShUW7Vq3SKZRZZZQwAUACWPPT8nZkm7aNoutsSDDZW44shKEISKqUpRwAA0zGI+60w0p99QQ0gElRNAANMk7KEo1jes9LVnqhMjBo6mzGfk6HgzgnouzVK6TbuRJUYXAknhCgVwjA2FcUwkEyQu1VzJmMQxTCrDLjlLRlLvkqes8r1nZRvQZUKGaVJrVx4p3CXV4itFaGlsKAUCBXi9tvC3rULzNdsTYzWwcKjYqpsM49hzQmtCKD//053qOtE57Rcomzkneu4VVhp3R4ZNpucytIxmzD1lU4UgiksUhm9rBTmcqkpS17lwoauATDJl+T26bFy7pytiNpAmggOPkUqt9YBcJIrWlA2k1OuIQK0AhvWS25Etk+uTJ3eaQlM6EByZUKVXMuAF1RIqFZpAbQanbttAqQBHkMvNYkOMwGRHIGMDIgV4WMpdY4RtGCXMRjuCsbSbZd0si2bIquHLhVNBu3QTOsuuuscE0kUUkwMoqqqoYClKUBExhrglyU62y2p11QS0kEkkgAACpJJwAAxJOAEauaU2y0p55SUNISSpRIASAKkknAADEk4CL5aDtYLn3PUYfG6JbhWYE2l6g4NCATIpPV60PSqGStSWTO1m6qqkIhTPAUcInwG1GuEJV+vvqRV3rB0SQuqkWlaqap0SpEqhQwrnAhTwBxo2UoUODXhpxVXKFqR12bDLtnXSSm07VTVOi1pKIUMK54IU+AcduiELHBrw04lToZ0IaHlCGEDBphTcaQZJalM/fGMq8jEUWApQFaJRV2dZ65rzFpip0xUEhEQTIQtuCoF6763mvrO7brxzS31p4MRgltsbJDaQEp2RVQrVTX1KOMUxvTfO8l853bdeGZW+scGpwS22NkhtICU7IqoVKprylHGPSpeKx4vGJEEYkQR4pRKrOlBOi4Vc8/KHU3YtEXBAIePN2xoPOUAIoKyd7igyjCMHImsImBM6x0hExgMUSmMBvPLq5Tr+3LKU3dtOZZlkmugqVorGlQ7cuhbQJGFQkKwFCCARu7NvHbdkUEhMuIaG4Cc5Hciqp7CBXa4Clpj20XtZ6dOlnCM46LMOSVOJyMmc45rHati1wBU0TxCZD56YgV2Kiyhs5ySZWNS2ylstJbclbGdWBipTEwFK2pCJpCa9OpA2keUpym3gCQlTcoojYlC6ndHAN0Ai52g3WX6C1AmmdTDmiiScCqNQcztja6kbnOskNWA6aERd16cIRXTWpFkmCTRFcCEFUhzFAQie/OVq/eULbm8U6o2aFVTLNANMA4UJQnFwgiqVPKcUglWYpIJEeM2veW2Lb12edOgVqEJGajdBwdSmBUVEY0Ii4GUbRoY//9SYCTZId5GJEEYkR1jOzCRHXTFdjGUiOMXV0GqyFRNor2qRd+2tiZmqqpmPHI8gsnEIg2GkMoeAQMSkdvq9NQBIssLZocBGkVOYpiSh+/OWu6dzs+Sl17b7cANGmSChCsaB53g1GINUpz3BhnISCDEB5SdSCuTcTRLOlV6s7xhJoywQW21Y0D72KEYg5yEaI6nDObSFBUSsUI6znQvoMkK5mvBzPJxGbmbuZ1xpQr6OrEUAAWTbqAmk1hjdWurjEapJActcBxOIV8qe30yn3tv0otWs+EWZnVTLtDMaBGkSKlThGwLilUPBubpRQ6/2V6+uUVZatuYDdkhWcmVZBQyCNIqFSpxQ2CnFKoeDc3Sj3WUexGEYkQRiRBGJEEYkQRiRBGJEEYkQRiRBH//VQfWmKB0ToNT+fkbslRmROB04iU04kkk4MzbtnKy6gzecOTpFRLFIQBBLUwOcx29TVuIQKxTJTlAlL83cbU64NX8sgImEEpzipIA0ZKQa6G5WtaABecjYAlrGRTKhJZR7qNKecTrTyjaW5pslIWpSUpG2hKQSS07WudQAOZ6Nwgm3CUoRMkYkQR7rQjrOtE6jKcribEHIzm8VcyDmdUaUMxgaJ0xAFk26gJquomulX1xiNklRIauA4kAa8I+vplOuncZJatZ8rtPNqmXaGe6QdIkVCWwdgXFJqODc7SiLsoGWG5GThBZtyYLlsFAUmVZAW+QdIqFQltJ2CnFJqODQrSiVagzWRKGVCi1SMPm1trPJJJMTxyOoIqMIe5u4ZQ8AgglO0YVyiYCRZYXDslvpFiFMYkqe35y1XrvjnyUuvbBYZJo0ySFrTjQPO4KXgTVKcxs4ZyFEAxQ3KRqQl9r+6JZ0qvVZdxSjRlhRDjicaB97Ba8CaoRobSsM5tRSFRdbKHogaMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSII//1nuzim3N+d0IdwCc8Gh0egr4gFdQ2KNEXjRWkMB0lKmsUwJroKAB0lC0qiShQMQxTAAhn2ZatpWLOotKyX3ZaebOurbUUqFcCKjTBGCkmoUCQQQSDs7Htq1rv2g3a1hzL0paTRqlxpRQoVwIqKVSoYKSapUklKgQSDHNRorHlCaaiUNik33M74cWIvFm54cEYYu2LciaNVAW5n0HdRCmERrhqjhQK4LKvrxGz9xMt18rYW7KWkiSdLTYUF6EtKySaa9mOJRuiB8C42TXUib/AFvuPSNros94sthQc0FaVqJNNezHkt06dbTjug9goV1jOgjCGE3p0xKGRmeD55C4RFytJ2RFu7g7Z44atHhwLCoYwhLR+1BQTFqL0rpIxDCBymtwh4TfDLnf6dmJmyJV1iRl0PON50ugpcUlKlJ4SLW4pCqUOc0W1AiqSMax3fzUkMptoTc5YUk/LWdKtvvNZ8q2pDykJUtA29ccdW2qlDnslpQIBSU4g3noIItkUWzZFJu3bpJoN26CZEkUEUiAmkiikmBU0kkkygUpSgAFAK4JQU44464p11RU6okkk1JJxJJOJJOJJ04ra666+6p55SlvLUVKUokqUompJJxJJxJOJMbsuEcIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCP//Z",id:"d",width:126,height:124}))))}},39798:(A,I,g)=>{g.d(I,{Z:()=>Q});var C=g(27378),e=g(37140);const U="tabItem_wHwb";function Q(A){let{children:I,hidden:g,className:Q}=A;return C.createElement("div",{role:"tabpanel",className:(0,e.Z)(U,Q),hidden:g},I)}},33337:(A,I,g)=>{g.d(I,{Z:()=>n});var C=g(25773),e=g(27378),U=g(37140),Q=g(83457),F=g(35595),l=g(76457);const t="tabList_J5MA",B="tabItem_l0OV";function a(A){let{className:I,block:g,selectedValue:F,selectValue:l,tabValues:t}=A;const a=[],{blockElementScrollPositionUntilNextRender:E}=(0,Q.o5)(),V=A=>{const I=A.currentTarget,g=a.indexOf(I),C=t[g].value;C!==F&&(E(I),l(C))},n=A=>{let I=null;switch(A.key){case"Enter":V(A);break;case"ArrowRight":{const g=a.indexOf(A.currentTarget)+1;I=a[g]??a[0];break}case"ArrowLeft":{const g=a.indexOf(A.currentTarget)-1;I=a[g]??a[a.length-1];break}}I?.focus()};return e.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,U.Z)("tabs",{"tabs--block":g},I)},t.map((A=>{let{value:I,label:g,attributes:Q}=A;return e.createElement("li",(0,C.Z)({role:"tab",tabIndex:F===I?0:-1,"aria-selected":F===I,key:I,ref:A=>a.push(A),onKeyDown:n,onClick:V},Q,{className:(0,U.Z)("tabs__item",B,Q?.className,{"tabs__item--active":F===I})}),g??I)})))}function E(A){let{lazy:I,children:g,selectedValue:C}=A;const U=(Array.isArray(g)?g:[g]).filter(Boolean);if(I){const A=U.find((A=>A.props.value===C));return A?(0,e.cloneElement)(A,{className:"margin-top--md"}):null}return e.createElement("div",{className:"margin-top--md"},U.map(((A,I)=>(0,e.cloneElement)(A,{key:I,hidden:A.props.value!==C}))))}function V(A){const I=(0,F.Y)(A);return e.createElement("div",{className:(0,U.Z)("tabs-container",t)},e.createElement(a,(0,C.Z)({},A,I)),e.createElement(E,(0,C.Z)({},A,I)))}function n(A){const I=(0,l.Z)();return e.createElement(V,(0,C.Z)({key:String(I)},A))}},35595:(A,I,g)=>{g.d(I,{Y:()=>E});var C=g(27378),e=g(35331),U=g(30654),Q=g(70784),F=g(71819);function l(A){return function(A){return C.Children.map(A,(A=>{if(!A||(0,C.isValidElement)(A)&&function(A){const{props:I}=A;return!!I&&"object"==typeof I&&"value"in I}(A))return A;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof A.type?A.type:A.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(A).map((A=>{let{props:{value:I,label:g,attributes:C,default:e}}=A;return{value:I,label:g,attributes:C,default:e}}))}function t(A){const{values:I,children:g}=A;return(0,C.useMemo)((()=>{const A=I??l(g);return function(A){const I=(0,Q.l)(A,((A,I)=>A.value===I.value));if(I.length>0)throw new Error(`Docusaurus error: Duplicate values "${I.map((A=>A.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(A),A}),[I,g])}function B(A){let{value:I,tabValues:g}=A;return g.some((A=>A.value===I))}function a(A){let{queryString:I=!1,groupId:g}=A;const Q=(0,e.k6)(),F=function(A){let{queryString:I=!1,groupId:g}=A;if("string"==typeof I)return I;if(!1===I)return null;if(!0===I&&!g)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return g??null}({queryString:I,groupId:g});return[(0,U._X)(F),(0,C.useCallback)((A=>{if(!F)return;const I=new URLSearchParams(Q.location.search);I.set(F,A),Q.replace({...Q.location,search:I.toString()})}),[F,Q])]}function E(A){const{defaultValue:I,queryString:g=!1,groupId:e}=A,U=t(A),[Q,l]=(0,C.useState)((()=>function(A){let{defaultValue:I,tabValues:g}=A;if(0===g.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(I){if(!B({value:I,tabValues:g}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${I}" but none of its children has the corresponding value. Available values are: ${g.map((A=>A.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return I}const C=g.find((A=>A.default))??g[0];if(!C)throw new Error("Unexpected error: 0 tabValues");return C.value}({defaultValue:I,tabValues:U}))),[E,V]=a({queryString:g,groupId:e}),[n,R]=function(A){let{groupId:I}=A;const g=function(A){return A?`docusaurus.tab.${A}`:null}(I),[e,U]=(0,F.Nk)(g);return[e,(0,C.useCallback)((A=>{g&&U.set(A)}),[g,U])]}({groupId:e}),d=(()=>{const A=E??n;return B({value:A,tabValues:U})?A:null})();(0,C.useLayoutEffect)((()=>{d&&l(d)}),[d]);return{selectedValue:Q,selectValue:(0,C.useCallback)((A=>{if(!B({value:A,tabValues:U}))throw new Error(`Can't select invalid tab value=${A}`);l(A),V(A),R(A)}),[V,R,U]),tabValues:U}}},92969:(A,I,g)=>{g.r(I),g.d(I,{assets:()=>l,contentTitle:()=>Q,default:()=>a,frontMatter:()=>U,metadata:()=>F,toc:()=>t});var C=g(25773),e=(g(27378),g(35318));g(33337),g(39798),g(76911),g(3580);const U={slug:"v0.26",title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",authors:["milesj"],tags:["proto","docker","query","hash"],image:"./img/v0.26.png"},Q=void 0,F={permalink:"/blog/v0.26",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-13_v0.26.mdx",source:"@site/blog/2023-03-13_v0.26.mdx",title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",description:"With this release, we're providing deeper integration with our new proto toolchain",date:"2023-03-13T00:00:00.000Z",formattedDate:"March 13, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"docker",permalink:"/blog/tags/docker"},{label:"query",permalink:"/blog/tags/query"},{label:"hash",permalink:"/blog/tags/hash"}],readingTime:3.29,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.26",title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",authors:["milesj"],tags:["proto","docker","query","hash"],image:"./img/v0.26.png"},prevItem:{title:"proto v0.3 - Improved npm, go, and version requirement support",permalink:"/blog/proto-v0.3"},nextItem:{title:"Introducing proto, a next-generation toolchain manager!",permalink:"/blog/proto"}},l={image:g(81975).Z,authorsImageUrls:[void 0]},t=[],B={toc:t};function a(A){let{components:I,...g}=A;return(0,e.kt)("wrapper",(0,C.Z)({},B,g,{components:I,mdxType:"MDXLayout"}),(0,e.kt)("p",null,"With this release, we're providing deeper integration with our new ",(0,e.kt)("a",{parentName:"p",href:"/proto"},"proto")," toolchain\nmanager, better Docker support, and new query commands for debugging."))}a.isMDXComponent=!0},81975:(A,I,g)=>{g.d(I,{Z:()=>C});const C=g.p+"assets/images/v0.26-850e9d0ee0ef9e53cd5c72d6bba021d6.png"}}]); \ No newline at end of file diff --git a/assets/js/4e986fc6.5a40e0a8.js b/assets/js/4e986fc6.5a40e0a8.js new file mode 100644 index 00000000000..61ebb70a82d --- /dev/null +++ b/assets/js/4e986fc6.5a40e0a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48233],{35318:(A,I,g)=>{g.d(I,{Zo:()=>B,kt:()=>V});var C=g(27378);function e(A,I,g){return I in A?Object.defineProperty(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}function U(A,I){var g=Object.keys(A);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(A);I&&(C=C.filter((function(I){return Object.getOwnPropertyDescriptor(A,I).enumerable}))),g.push.apply(g,C)}return g}function Q(A){for(var I=1;I<arguments.length;I++){var g=null!=arguments[I]?arguments[I]:{};I%2?U(Object(g),!0).forEach((function(I){e(A,I,g[I])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(g)):U(Object(g)).forEach((function(I){Object.defineProperty(A,I,Object.getOwnPropertyDescriptor(g,I))}))}return A}function F(A,I){if(null==A)return{};var g,C,e=function(A,I){if(null==A)return{};var g,C,e={},U=Object.keys(A);for(C=0;C<U.length;C++)g=U[C],I.indexOf(g)>=0||(e[g]=A[g]);return e}(A,I);if(Object.getOwnPropertySymbols){var U=Object.getOwnPropertySymbols(A);for(C=0;C<U.length;C++)g=U[C],I.indexOf(g)>=0||Object.prototype.propertyIsEnumerable.call(A,g)&&(e[g]=A[g])}return e}var l=C.createContext({}),t=function(A){var I=C.useContext(l),g=I;return A&&(g="function"==typeof A?A(I):Q(Q({},I),A)),g},B=function(A){var I=t(A.components);return C.createElement(l.Provider,{value:I},A.children)},a={inlineCode:"code",wrapper:function(A){var I=A.children;return C.createElement(C.Fragment,{},I)}},E=C.forwardRef((function(A,I){var g=A.components,e=A.mdxType,U=A.originalType,l=A.parentName,B=F(A,["components","mdxType","originalType","parentName"]),E=t(g),V=e,n=E["".concat(l,".").concat(V)]||E[V]||a[V]||U;return g?C.createElement(n,Q(Q({ref:I},B),{},{components:g})):C.createElement(n,Q({ref:I},B))}));function V(A,I){var g=arguments,e=I&&I.mdxType;if("string"==typeof A||e){var U=g.length,Q=new Array(U);Q[0]=E;var F={};for(var l in I)hasOwnProperty.call(I,l)&&(F[l]=I[l]);F.originalType=A,F.mdxType="string"==typeof A?A:e,Q[1]=F;for(var t=2;t<U;t++)Q[t]=g[t];return C.createElement.apply(null,Q)}return C.createElement.apply(null,g)}E.displayName="MDXCreateElement"},3580:(A,I,g)=>{g.d(I,{Z:()=>B});var C,e,U,Q,F,l=g(27378);function t(){return t=Object.assign?Object.assign.bind():function(A){for(var I=1;I<arguments.length;I++){var g=arguments[I];for(var C in g)Object.prototype.hasOwnProperty.call(g,C)&&(A[C]=g[C])}return A},t.apply(this,arguments)}const B=A=>{let{title:I,titleId:g,...B}=A;return l.createElement("svg",t({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 326 100",role:"img","aria-labelledby":g},B),I?l.createElement("title",{id:g},I):null,C||(C=l.createElement("path",{fill:"currentColor",d:"M206.776 22.102c-15.275 0-27.655 12.49-27.655 27.9 0 15.41 12.38 27.9 27.655 27.9s27.656-12.49 27.656-27.9c0-15.41-12.381-27.9-27.656-27.9Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072Zm91.569-44.972c-15.275 0-27.656 12.49-27.656 27.9 0 15.41 12.381 27.9 27.656 27.9 15.274 0 27.655-12.49 27.655-27.9 0-15.41-12.381-27.9-27.655-27.9Zm0 44.972c-9.353 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.339 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072ZM117.07 22.102c-15.275 0-27.655 12.49-27.655 27.9v50h10.732V72.035c4.677 3.663 10.545 5.866 16.923 5.866 15.275 0 27.656-12.49 27.656-27.9 0-15.409-12.381-27.899-27.656-27.899Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.57 17.072-16.923 17.072ZM252.346.002h-10.733v54.366c0 13.003 10.452 23.533 23.328 23.533V67.074c-6.954 0-12.595-5.69-12.595-12.706V27.523h12.595V16.695h-12.595V.002Zm-76.428 22.1c-12.889 0-23.327 10.544-23.327 23.534V77.9h10.732V45.636c0-7.016 5.641-12.706 12.595-12.706V22.102Z"})),l.createElement("mask",{id:"a",width:67,height:68,x:0,y:16,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},e||(e=l.createElement("path",{fill:"#fff",d:"m66.744 63.6-4.61-14.774a21.975 21.975 0 0 1 0-13.139l4.69-15.044c.804-2.569-1.594-4.988-4.14-4.177l-14.913 4.73a21.421 21.421 0 0 1-13.024 0l-14.645-4.65c-2.6-.824-5.011 1.704-4.1 4.286l2.68 7.623a22.06 22.06 0 0 1-1.233 17.451L.392 78.82c-1.514 2.92 1.648 6.056 4.516 4.461L35.94 66.047a21.553 21.553 0 0 1 17.713-1.46l8.843 3.15c2.56.919 5.065-1.528 4.248-4.137Z"}))),l.createElement("g",{mask:"url(#a)"},l.createElement("mask",{id:"b",width:81,height:82,x:-7,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=l.createElement("path",{fill:"#fff",d:"M73.684 9.545H-6.709v80.914h80.393V9.545Z"}))),Q||(Q=l.createElement("g",{mask:"url(#b)"},l.createElement("path",{fill:"url(#c)",d:"M-6.963 9.215h81.037v81.752H-6.963z"})))),F||(F=l.createElement("defs",null,l.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},l.createElement("use",{xlinkHref:"#d",transform:"scale(.00794 .00806)"})),l.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1Qmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozMzoyMS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjMzOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzM6MjEtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xNjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFCQUJBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FPOCtkdk5lcTZKZlc2V1hwU0k4UmFTSyYjeEE7VlMyL0lnSDRTcHpiOW5hSEhtaVRLK2ZSek1HbTQ0RW9XVDh3WnRIL0FDNTFMemhySVc0K3FGMmp0NGdJNmt1c1VVVmZpcHlrWWI3NyYjeEE7SEtkZHBvUXpjRU80T0puL0FIZCtTVVJmbUw1KzBEVmROaTg5NlBZMjJuYTBzdjFPZlRKWlpaTGVhS0l6ZWhjckpzek1xa2NvL2hybSYjeEE7TDRjU1BTZVRqK0pJSDFEbWwybS9tdCtZK3NycE5scGVqYVltc2VZb3BkVDB4TGlhWXdXdWx4MFZKTHNvT1R5U09kaEgycFVlRWppaSYjeEE7THNtaDk3RVpaR3FBcy9jeHJ6ZjVxODErWmZNSGxuUTUxZzBIem5vbXVtMm5uaUgxcTFCbXRmVmhualY2Y2xkUDJXeWNJaUlKNXhJWSYjeEE7VGtaRURsSUZtTjMrWXY1azNjbXZYM2xyUjlQdTlDOHIzRTFsZnRleXl4WGQ1TlpMVzYrckxHREdnQit6ejYvZ0t4amp0WjNMWWNrdCYjeEE7Nkd3ZWkrWE5jdGRlMERUdGF0VlpMZlVyZUs2alIvdEtKVURjVzkxclE1VEtOR202TXJGcGprV1RzVmVZdDUvOHl2ZXBZeE5iZ1N6aSYjeEE7TkxyMHlXNHMvRUg3WEdsUGJPbS9rdkNJOFo0dGh5dnljL05vK0VXOU96bVhBZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjViL09uL25KWHo3NUkvTXpXZkwraUhUN3pUb0k3Y1JKZFFNN3dTU1FJNzhYaWxqNUhrMWZqclRwVEZYcDMvS3p2TXVtZiYjeEE7bEg1UzEyVzNoMXZ6WjVyYXl0TENGQ0xlM2E3MUZHbGo5VWl2Qlk0MVBPbmNkdW9WUzdVZnpxODVlVERyZGg1LzBheU9wMk9sTnJHbCYjeEE7WEdqeXl0YVhTQ1pMY3dONjYrcEc2eVNyeWFsS1YyNlZWVmJmOHdQenExUFZaUExHbGFMb2llWk5IdElidnpMUGR6WElzbzN2SGQ3VyYjeEE7MXR4SHlrYVEyNkRrNVBIbnk3QVZWWXhwbm5EVy9PdjVxK1VOYnNuSGwyOHNkTTFDUHpGWnl4aTYrQ3h2NGt2TFZHMnA2Z1g0WkFLaiYjeEE7NTRxbS93RHl1djhBTWxQTGEvbUxONWQwOWZ5NWVaZjNJbmwvVEMyYlRlZ0xvclQwQ0N4RGNCdjlIeFlxOVVsOG9XTjVxTTk3cVRtNyYjeEE7TWgvZHhib2lKMFZkalUwSHZtZkhYeWhBUmg2YWRnZGZJWXhDQTRRT2ZteFQ4NXZLY3N2NVJhOW8zbDNUNUo3bTVlMmtpczdjUEk3cyYjeEE7THVCbktyVmpzaVYyOE1yR29sUElKVExyTlVaVGllcFZiUDhBSnExRjlGZGF0NWcxUFhCWTI4MXRvME4rOGJMYWllTXhOSjhDcDZzZyYjeEE7UTBETi9TbFJ6ZHdBWUREM2tsVnV2eWhzVzBueTdCWWF2ZWFackhsbTNGcHArczJ2QVN0RnhDdWtzYkJrZFc0MTQrT0l6Ym5iWXFjTyYjeEE7dzMzQ0gvNVVob2Y2Rk52K2xMLzlQRytYVlQ1bE1nTjc5Y1ZTaXYwNGNBcDQrblNsUGZmSHh6ZkxidVh3QlhQZnZkcS81TDIxNWU2ayYjeEE7OWo1aDFMU3RPMTEvVjE3VExSb3hEY3lzQXNzaThsSmlhWUQ5NXgrMTh0c1JtcnB5VTRiNjgyZmFacHRscGVuV3VtMkVRZ3NyT0pJTCYjeEE7YUZhMFdPTlFxcnZ2c0JsUk5tMjBDaFNKd0pRMnBXczExWXpXMFV2b1BNdkQxYWNxQS9hMnFPMldZWmlNaElpNmJzR1FRbUpFWFhSSyYjeEE7YmZ5TDVjamlWWkxjenlMdVpuZGcxZXY3SlVETXVYYWVZblkwM1o5ZGt5R3pzbitZRGh1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdU5hR2hvZXhPNHJpcnhueTcvemk1NUdqdXIzVnZPVHllYk5mMUtaN2k4dXB5OXZBSkpYNXQ2VU1UMUcvd0RNN2UxTyYjeEE7bUtvbjgyUHl5aHV2S3ZranluNWJ0YnV6MHF3OHhXVHRKcDd1WjdLMldLNTVYQ1N2NmpKNmJ5QWgyclEweFZWdlArY2ZkUDFQVDlkRyYjeEE7dStZZFExblc5YnRZOVA4QTB6ZCtrWHRyU0taSnhGQkVpcEd2SjR3V1BmMjNxcW5YbS84QUtaTlo4eE41bDBUWDcveXhyZHhiaXkxRyYjeEE7NTA4b1Z1WUYrd0pJNUFSelQ5aHh1UHVvcWhyTDhqUExHbG55ekxvbDVlYWRkZVczZXR5cnJJOTlEY1NDUzdodmVhMGtFNUJxUlRqWCYjeEE7YnRSVkxFLzV4MjBaZU9sTjVnMVIvSkNYUXZJL0tCa1EyWWNTZXFJaTVYMURDSlBpOU92MDEzeFYvOWs9PC94bXBHSW1nOmltYWdlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L3htcDpUaHVtYm5haWxzPgogICAgICAgICA8eG1wTU06UmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwveG1wTU06UmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjczNzkyNDVjLWMyNDctNGFlMi05OTM1LTk0ZjM4NGJkYjMzNjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3Mzc5MjQ1Yy1jMjQ3LTRhZTItOTkzNS05NGYzODRiZGIzMzY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OGE0ODVjMDgtOTQ4Yi00OWUzLTkyYWItNTk5NWRiODI0YjBhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjhhNDg1YzA4LTk0OGItNDllMy05MmFiLTU5OTVkYjgyNGIwYTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpyZW5kaXRpb25DbGFzcz5kZWZhdWx0PC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzM3OTI0NWMtYzI0Ny00YWUyLTk5MzUtOTRmMzg0YmRiMzM2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjMzOjIxLTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAEP/uAA5BZG9iZQBkwAAAAAH/wAARCAB8AH4DABEAAREBAhEB/8QBogABAAECBwEAAAAAAAAAAAAACgkFCAABAgMEBgcLAQACAgIBBQAAAAAAAAAAAAAACQcIBAUCAQMGCgsQAAAEAQIDBAWMAwAAAAAAAAECAwQFAAYHEhMIERUxCRQWIUIKFxgZGiIjJCUmJygpKjIzNDU2Nzg5OkFDREVGR0hJSlFSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+hEAAQIDAwICBwWJAAAAAAAAAQIDAAQRBQYhBxITMQgVFiJBUWEUI0KDkQkKFxgZGiQlJicoKSoyMzQ1Njc4OTpDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanFyc3R1dnd4eXqBgoSFhoeIiYqSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwB/EiCMSIIxIgiGOt71sGcqE6InQPoWxpzA4dBCCyn/ADkha4t4nFIs4QUB1NaHvUFBUZwqGt1ykenIJF1ndOgNImia1i9Go6ZErKcslq/97mETE1MHOk2HBVtttJGbMLSRRTi1AloGqEt5rmvKWNDme4VzpZUqm3LUQFuLxaQoVSlIOCyDpqJGug1ATRWJUM2IsZXSESwoRtmlzEdhQi4+h/Wv60XQzqCM36J8ffQ1CnKWDTqUTnbC6ieoUzdFKPkfrsEQFuUSg1VQEgielEKopTxdeTInkwvXnLtKyZZuaVTb2XBl3KiuJLJQFnXjXRErrrta5qc3xW0rrWDaFVPSzaXDuJGuHpuu0B09iDXDZCl+lD60rgBUGtFehZk8zmOUPInqACaSE1ZyLaimMoaM5NLSWZ5V1vLqHVc5651r7LNanW+m1JmGB06ABLbM52kI8AtDJ2E1VZ0xhsEuD19PYNwfAi+uZdbUrMU+G6SzGi5NiBLHqgKsp6uDzLcNjpETUOmqrOQkOh6leRUKU6S6qahq8pTGMU4Fr1buQfKzd90omLFm5hsUoqVAmkqBJAIDBWsYg1CkJUBQkAEE+GTV27alFUcYWobNGvg9y1O6geYj0eN1oKgRNtMVI5RmoWw0bDxiqSDmfk2AeuofSqmI6YMCxMz6IEXqBypAgmoZU5RKQDGt0vF5DJtlDtRWbZ9hWu6NF0MlMo/mpXhVK16HmIIqCrPUkJBqqgxjXps+fXway6cacGKpXamlB2GLNaJ9pRqz7M1JZvMVrOWirFikXqNhbFea83SuESgBEXsanG1bxJNNZU1cVVrDXhKUpjV4hSAecrpaiPlJtxaXLwrlbHkqiuiLD71DplLTCigkDEpcfaNSBs83NbsOcOL2a2NqandBhupER2UUbSi1oieiazCZaM2qFcMVIukKsCYhHJxqJOCgQxFI3OArtogdJMBqarRk0XTMYTAemAgks5dHUR8mVhLTMW6qatibBBo6vQmAU41DTOaogng5LjriCAAU0zgrJFlMNcHVUdrgN0HwYj/npRBn5REfkik/Z5zpnpEEqqCDudEeicdWakXEgqpNDRJ05tUQNUiBU0qQgAQoAFcUACyFhXau7dmWMpdyRk5CWNKpl2W2gqlaFWYlOccTiqpxJrUmoW0IFEAAbSOkjLfiMdQxjv8AQyoq0QKDs6mM8qHM5ojNmOsTkEVmate0foFGvMwi8OVBRjFocsAjToOE1Exs64DAAh45eu592772O5Yd6JRqbs5waShryDym2sUW2sbBaCFbCtCQewpIUKK0oVFWVK0NCa0tQihE/wBq2QhcebLqQGekCQOJ0oROhgi3UeFaAoqsvYVEUHCbpoJzHOCKwEOYyhDjJQWWDJnOZKr6PXbeWp6zlJD0q6Ri4wsqCc6gA0RBSptygAKklQASpMa9xGYrN2Ef/9B/EiCMSIIxIggg8air6PxiLR2JqVaJRqJPotEFq4Qqz6IulXjtWuETCFUXWMNvERt8nWyEnL2bJM2dKDNlWGkNoGyQhISkdgAAi4bMu3LsoYaFG0JCRtAkUHhBFLEJZYMdVJjaMEuYMY60xxzhLuCMNwRxThLvJjWvCOCpicshMal8RT1Qs5ZKI0cwKxTlAlkpMaN9McI4SyEmNS6mOKYJd4GNe4mNkQlzBjEUmNsQlyBjslMTNWh7jsUTnTRqmxa0c0FcwCa0eFmcxzJpRRlEYjDyum5BNU0DuGj8SLCUoGVBJKmEQTKAUY1NuzpRVkWDa2YBPpmZhnOFKltSELzVHTICkVTU0TnLpwca4U0mgBj/0X8SIIxIgjEiCCn0cKHTihTRcogUPl0qinNucj5CGhXnGqwF4JYnNx1XKru1S2uQB62VpTqqHLT1xjGEBEXCXAvO1fG5dm3lbOcqalUFelg8nXH04BI115C01CUg0qABQC3VgT6bYsaWtJJqXWgVbRY11Y0gMFhQ0hpaQjykSy8xrG1LcbRiy5gxjrbjjnLLuJMYLqI4ahZd9JjVvIjgqFlkJMah9EU9UtnLJQY0j6N1jgKFlkJMaZ9EcI5ZZCTGpdRHFMWXdBjXOIjYMWXcBjDWiNoSy51jsFET1WiJoaKQqYlE2is9STA87Y/DZoQQTgarkh01Gyz+KuUhpAJarEolHk0hu8JhUh43dKAAJ11amnepM5eKybnME0kpZcy7TSK5hQQ2k7HOQhlStIDNeGJxCdXOHXggbAR//9J/EiCMSIIxIgiFq0oVDUWM7Jg0VWSB7VpwwpxM6OKFFMEUopA1FIjBllCiAKmcxKGxBwnXgJiAnDwrwKNvPe3USb1CYsa0rnvqGiyzyZloY1LboCHQNhmoWhB2Bq8dMcGz3kgtIPyczYzh19pYdRsyleuq2lEqSk7Oq9jsIqRTziVws6JmLMbRiS5hUYzjMcU5Jd1KowHWo4ahJd9Ko1TzUcBQkshCo0z7UU9UlnLJQqNJMNRwFCSyUqjTPtRwTkl30mNS83HFMSXeCo1zjUbJiS7gVGGtuNoSS5gxjqbhedZmoYmoOUBKFtDldOpRCb81mqscSBRZUic5Y6u4nFOciR3FcsKBJwxd0CdeUlcSuACkCuKCVMq17BfjKLa96GznS0zOKDRoASw0EssEgYV0FtuuJxrio4nxh9eiOqWNInwmwj//038SIIxIgjEiCLLbSAwFhGKy/PN88TqjibMXmbHIUakRNUX686YXNtRSvVSUUTr4XOBySvTMme71cJhIJyGnbUbrRmZHK1Iy7Bo1NsTLTmJxQJdx8DAgHbxlBooEYVpnAESPkoedRfeWYb4MfbeQrTxSGlObA8pNpONRhpVoQeYUs4kzALi2qpbCNg6UuYXGI5LxxTp5xLvJVGteYjgqJyyEqjUPsRT1U7OWShUaWYZinqp2cslCo0kwzFPUTlkpVGkfZjhHTziWQlUal1mOKZOXdCo17jMbBk5dwKjDWzFy1Y6oYGosVpGhZNdROnhbScSE6o+IqLIp2CTQKacL1sos2vMJWJmh5GZDEEpgUcFu8TAZYqy33tFzsltr2sk0m1ypl2cATosztylQCtdOh55dINRmoOCuDTrLQpLyq3NjSg6acPqwsKScY8Mj/9R/EiCMSIIxIgiw20iU7m0EoBHmyLupvp9TngkNSZEI3UUdQ+COSzjfLnBYQVSaNHcMagZRKvOCqqRBu4c9dYjUZbFdn8o4tbMrL2fKOrKiVAJW6nQEAUwKlJW5QKwzUrUNeSImTIdY7lo3y23BFWJOWcWVY0CnBoSRhgVKCl0CsKJUdMCIGzI5xJiQci3a5SmwjinRziXdSuNe9LRw1ErO3S76Vxqn5aOAqlLJQuNM/LxT1U84lkoVGkmGIpyqecSyUKjRzDEU9ROzlkpVGkfY044R084lkJVGpdYjiHTziXdCo1zjEbIpy7gVGIpiJgrRGzKTXnZRiohLIrEVg03puTNhy5kHINnCc5Yk8jcZSSc1YjQ6zM002AqEFNRQpVyCBkymEFKS6mjbym7GsO7SFJKH5l+ZWKpzklhCWmiU0KqK20OgHOSklChRRFUeI3nOhoaZ5SJVugAG61O6bpORJf0eIR//1X8SIIxIgjEiCIBa2jRmJRhoruGkHcnWmbMEjqbc3hAwCg/fVcozij6RSmUKBYo+bkRSOU1cqzZoHEpTGMUGO5Cbim5FzkvTyQm3LRKX3tmhFNuWTpcI0KKlAiqXHHE1IAJv3keuCu6V0kPTyM22Z/Ned2aE025aOlihJKlAjXXHHE1IAJs5OjnEpwSuJKelY4aiOcS76Vxq3pWOColnEshC40z8tTYRT1UrO3SyULjSzEvSKcqlZyykLjRTEvFNVSllIXGimJeKeonZ26WSlUaN9jTjgnTlkJVGoeYjimTl3QqNe4xGyKcu5nRiFiJqrRIzhRGHUapoqCgm4QezNnG0CmPaw6RdoR2GREaSupAQYHYtbfX14mc5wEqHamfZi9tVg20nOLam5lhXKKSksuIx06rC3OwIjwK+ksW1S7w0iFJO0pmkbrU7pEyMqOx4NH//1n8SIIxIgi1qte0XRoT0IorYa6qE655AtNiblTPSuG1rSBrF4wnXCByWFQ0xqRQMAOlUa+zlLuRW5WtjfVnbUjOseRo+/UYKzTt22dgdEXSo2LaV7KJiyIXGN9r7NCZRnWNIUmH6jXVZp26aOw28XSo2LaXNlEAh0s4kx5K4Yu7LbSOIdLOJd5K41rsttI4SiVnbpZCVxqn5aOAqlLIQuNLMS1IpyqVnLKQuNHMy+nFMVSs5ZSFxoJmXimqp5xLLQqNBMsbSKcqnLJQqNHMMxwVE5ZCVRp3mI4hk5d4KjWuMxsinLuBUYimYvLrAtEG5vK07MSrr1CFz4teodxSuJTnWtpiJWAoJ166BCVSeDKG05hp65MDVxRNS10GakbdrWmyTWjoac6bs/MnW8aAaAToxOBOEst+gFNepUgVjxu9Vn7arEdKRr7VHB2Lwd4YVQmKSp4haP//XfxIgjEiCIB61TRdUowUV4u/YvDuJozbMpNyaCZFRO0VYM1TFexpEgCCRjzgiBTuCq0pVRa1BM9fUi1zHMkFy03JucxLTDYTbU0A/MkjXgtQ11onToyiiCmpSHNEUng81aLkWyeJuHcaXlZpsIt6cAfmiRrwWsa4ydjtwiiCmpSHNFWmmea20GTs7dKVguJRcYjjHSl3UrjXuy8cJRLOJd9K41T8vFPVSziWShcaSYl6DSimKp2dulloXGgmWNpFMWTs5ZSFR4/MsRTFU7OWWhUePzLG6RTVU7OWUhUaGYZinqElkpVGlfajiHJLvpVGrdajYMSXcCoxFtxvsnTqHPWkQYrHbPWDlB6zcp1wKN3TVUi7ddMRAQA6SqYGC3WYS7b7LM0wuWmEhbDiClSTpFKhRQO0IJEdlTKVpKFCqSKHphhblCqe6NEqhpMOf6JUU7a+acCjy7dvTVFm+iMOQXiLAlOdUwWHvzKoDXmPXCmN3hsxTDfCwF3VvVaN3FlR2xTjrIKtNSELIQs0A4PRmq0hp6Q0hXG0ZQyE+9Jmu3Tik47EA4HsIoewx/9B/EiCLQK2XRiPQyoZKQGDuCpTqogEfQJkYphBeHwMW1Tj8WSEhinSXIg5I3QOAgYirgFC29MZTXkMuQm9d6xaM8kmx7NKHlbJbudVls1wIJSVrGkUozTgqLCajlk6Tfa+gtW0EFVhWSUPrw11x7Oqw0aggpKkqcWMQUozFYLiEASyv7WGXlusbYklyCo7CmqxsHTziXcSqMN1iscNROXfSqNU+xFPVTs5ZKFRpZhjTimLJ2cstCo8fmWNOKUsnZyy0Kjx2aZpWKWsSzt0sxCo8cmmopapLOWWhUePTLWnFOULZyykmNI+3HDOWXfSY1TrcccxZdwGMFaI2xCXKsdkpifC0X1ENScdBacUwHSpDuKG06VBYkIJgMjN+eNrUZaFUKY57vmj7eKGpgpSiUQCurymMZc+pa3ZTZd+5W8bIIatWUGedm9LZrSqbTQVS4oamoJrQgCF8ocgJe1m51PBsw3j08iiT4aUfppf/0X5rrotkVnLlZJu3bpKLuHC6hEkUEUiCoqssqoJU0kkkyiYxjCAFAK8Zc223HXEtNJKnVEAACpJOAAAxJJwAGnHNpp191LLKVLeWoJSlIJUpRNAABiSTgAMSYgDrR1Fk1GKilGpyNVlTzcY0sDmmkoRVKlgUPUVqTsUFSkVRVizpRV0YpygclWAhsAAAMeyX3NFyLosWU8kC1HNvZgih29WBVNRUENpCWwQSDmlQ4OxbNkbuAMnVxpaxX0pFsu7fzRBB2/cAqjOFQQ0kJaBBKTmFQ4ONfB66UiRKdBGKWRWOJQDG2YkuYVHZcbjiKEs5d5Ko1jzUU9UlnbpZKFRpZhmKYsSWUhUaCaZilLJ2csxtUeNzbOnFIXJZyzWzHjE23pxSVi2cs1BjxqaRFNUCWUgxoX0xwThLvpMal1MccwS7oMYK0xtiEudY7BTusS1WihZxA87KMj9Mp7C203ZpNHhgWIVMH76JRhaGlM3FQFFTmbw93SnAhipgBgESicANTLUxn5ZNjWHLqI21rmphScDXMQhoL16lAM5bdRUE1BAOaaRdlMUgSsog8JS4sjDYAJrj00p6b2DD/9Jj9bhotWw9DQsyIU5qc4qI9rMNWqR65VnNNsCdj6xqUTUlitWTYlKcoFVRXcCUaZK3T1kAuZrQXqNvziK2ZZeasVGCphVdBG5dFOkg1SpLdRRcWa1F/J/rUX1N559FbHsbNcFRguaVXQANnoVFPkpNUrQyFCi8YYa6V6oZLSMV0iDNjFlIjppdNjSNvl1EcFYiNg5ZdxJjCdRHBUJZyyEmNQ+3FNWJZyykKjRTLUbkHm1Hp1RVtA5tQaJx6MPT0jSGQhi4iD5c1xCm2bJqKiQgDXmNXUpQt4iAW+XGetWzrHk12har7UtItiqnHFpQgdNUogVOwGmdIR4hbU3IWXKrnbSeal5NA15bighI7CogV2Q0zsIvNmZaOWjZOZkWITniU1ZglVIrU4ZEnq8ajhTlOlUTuG0DRdQlBu4SOYwDa8ZchigU6RRERLBdu6k/cKyZgy1ktTlokEVcQkNNUoahKnSlwqBAHCIIINUrNMa6Xgy5XQlHyxZiJmdoRr6UhtvY1oXClZINBwjCTWoUdj3SO2i3nkmZxbO0WZsxMpWxjNBjU3IrAhWd1MwkQcFYvpxg2bCqAAKpRWMBREamIhSjorP1Lmw1BOrOxptolWvaE+29RNcSnPQxnKpjmnNFcM4aY8KTlvs98AzUg82SccxxLlBsxVLdTtMBtdiLNKJlZArQtDAy60aodxWMwhE4FCPzOLbVQs6YpicXKxYSC0UhjYhiiQTvWzYKcAC4iCac7qZbMml7AluQtNlidUOEMzvjuA1pmjRKNuK2NGlrw6Yqnkkhfi7NsgCWmUIeI4Md27V0zXtdUenVKw6YaWtHlLqY3DsbBpdwRhLEc6DQWLTii0OgMBhzyLxqLvG8OhcLh7dR0+fvnShUW7Vq3SKZRZZZQwAUACWPPT8nZkm7aNoutsSDDZW44shKEISKqUpRwAA0zGI+60w0p99QQ0gElRNAANMk7KEo1jes9LVnqhMjBo6mzGfk6HgzgnouzVK6TbuRJUYXAknhCgVwjA2FcUwkEyQu1VzJmMQxTCrDLjlLRlLvkqes8r1nZRvQZUKGaVJrVx4p3CXV4itFaGlsKAUCBXi9tvC3rULzNdsTYzWwcKjYqpsM49hzQmtCKD//053qOtE57Rcomzkneu4VVhp3R4ZNpucytIxmzD1lU4UgiksUhm9rBTmcqkpS17lwoauATDJl+T26bFy7pytiNpAmggOPkUqt9YBcJIrWlA2k1OuIQK0AhvWS25Etk+uTJ3eaQlM6EByZUKVXMuAF1RIqFZpAbQanbttAqQBHkMvNYkOMwGRHIGMDIgV4WMpdY4RtGCXMRjuCsbSbZd0si2bIquHLhVNBu3QTOsuuuscE0kUUkwMoqqqoYClKUBExhrglyU62y2p11QS0kEkkgAACpJJwAAxJOAEauaU2y0p55SUNISSpRIASAKkknAADEk4CL5aDtYLn3PUYfG6JbhWYE2l6g4NCATIpPV60PSqGStSWTO1m6qqkIhTPAUcInwG1GuEJV+vvqRV3rB0SQuqkWlaqap0SpEqhQwrnAhTwBxo2UoUODXhpxVXKFqR12bDLtnXSSm07VTVOi1pKIUMK54IU+AcduiELHBrw04lToZ0IaHlCGEDBphTcaQZJalM/fGMq8jEUWApQFaJRV2dZ65rzFpip0xUEhEQTIQtuCoF6763mvrO7brxzS31p4MRgltsbJDaQEp2RVQrVTX1KOMUxvTfO8l853bdeGZW+scGpwS22NkhtICU7IqoVKprylHGPSpeKx4vGJEEYkQR4pRKrOlBOi4Vc8/KHU3YtEXBAIePN2xoPOUAIoKyd7igyjCMHImsImBM6x0hExgMUSmMBvPLq5Tr+3LKU3dtOZZlkmugqVorGlQ7cuhbQJGFQkKwFCCARu7NvHbdkUEhMuIaG4Cc5Hciqp7CBXa4Clpj20XtZ6dOlnCM46LMOSVOJyMmc45rHati1wBU0TxCZD56YgV2Kiyhs5ySZWNS2ylstJbclbGdWBipTEwFK2pCJpCa9OpA2keUpym3gCQlTcoojYlC6ndHAN0Ai52g3WX6C1AmmdTDmiiScCqNQcztja6kbnOskNWA6aERd16cIRXTWpFkmCTRFcCEFUhzFAQie/OVq/eULbm8U6o2aFVTLNANMA4UJQnFwgiqVPKcUglWYpIJEeM2veW2Lb12edOgVqEJGajdBwdSmBUVEY0Ii4GUbRoY//9SYCTZId5GJEEYkR1jOzCRHXTFdjGUiOMXV0GqyFRNor2qRd+2tiZmqqpmPHI8gsnEIg2GkMoeAQMSkdvq9NQBIssLZocBGkVOYpiSh+/OWu6dzs+Sl17b7cANGmSChCsaB53g1GINUpz3BhnISCDEB5SdSCuTcTRLOlV6s7xhJoywQW21Y0D72KEYg5yEaI6nDObSFBUSsUI6znQvoMkK5mvBzPJxGbmbuZ1xpQr6OrEUAAWTbqAmk1hjdWurjEapJActcBxOIV8qe30yn3tv0otWs+EWZnVTLtDMaBGkSKlThGwLilUPBubpRQ6/2V6+uUVZatuYDdkhWcmVZBQyCNIqFSpxQ2CnFKoeDc3Sj3WUexGEYkQRiRBGJEEYkQRiRBGJEEYkQRiRBH//VQfWmKB0ToNT+fkbslRmROB04iU04kkk4MzbtnKy6gzecOTpFRLFIQBBLUwOcx29TVuIQKxTJTlAlL83cbU64NX8sgImEEpzipIA0ZKQa6G5WtaABecjYAlrGRTKhJZR7qNKecTrTyjaW5pslIWpSUpG2hKQSS07WudQAOZ6Nwgm3CUoRMkYkQR7rQjrOtE6jKcribEHIzm8VcyDmdUaUMxgaJ0xAFk26gJquomulX1xiNklRIauA4kAa8I+vplOuncZJatZ8rtPNqmXaGe6QdIkVCWwdgXFJqODc7SiLsoGWG5GThBZtyYLlsFAUmVZAW+QdIqFQltJ2CnFJqODQrSiVagzWRKGVCi1SMPm1trPJJJMTxyOoIqMIe5u4ZQ8AgglO0YVyiYCRZYXDslvpFiFMYkqe35y1XrvjnyUuvbBYZJo0ySFrTjQPO4KXgTVKcxs4ZyFEAxQ3KRqQl9r+6JZ0qvVZdxSjRlhRDjicaB97Ba8CaoRobSsM5tRSFRdbKHogaMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSII//1nuzim3N+d0IdwCc8Gh0egr4gFdQ2KNEXjRWkMB0lKmsUwJroKAB0lC0qiShQMQxTAAhn2ZatpWLOotKyX3ZaebOurbUUqFcCKjTBGCkmoUCQQQSDs7Htq1rv2g3a1hzL0paTRqlxpRQoVwIqKVSoYKSapUklKgQSDHNRorHlCaaiUNik33M74cWIvFm54cEYYu2LciaNVAW5n0HdRCmERrhqjhQK4LKvrxGz9xMt18rYW7KWkiSdLTYUF6EtKySaa9mOJRuiB8C42TXUib/AFvuPSNros94sthQc0FaVqJNNezHkt06dbTjug9goV1jOgjCGE3p0xKGRmeD55C4RFytJ2RFu7g7Z44atHhwLCoYwhLR+1BQTFqL0rpIxDCBymtwh4TfDLnf6dmJmyJV1iRl0PON50ugpcUlKlJ4SLW4pCqUOc0W1AiqSMax3fzUkMptoTc5YUk/LWdKtvvNZ8q2pDykJUtA29ccdW2qlDnslpQIBSU4g3noIItkUWzZFJu3bpJoN26CZEkUEUiAmkiikmBU0kkkygUpSgAFAK4JQU44464p11RU6okkk1JJxJJOJJOJJ04ra666+6p55SlvLUVKUokqUompJJxJJxJOJMbsuEcIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCP//Z",id:"d",width:126,height:124}))))}},39798:(A,I,g)=>{g.d(I,{Z:()=>Q});var C=g(27378),e=g(37140);const U="tabItem_wHwb";function Q(A){let{children:I,hidden:g,className:Q}=A;return C.createElement("div",{role:"tabpanel",className:(0,e.Z)(U,Q),hidden:g},I)}},33337:(A,I,g)=>{g.d(I,{Z:()=>n});var C=g(25773),e=g(27378),U=g(37140),Q=g(83457),F=g(35595),l=g(76457);const t="tabList_J5MA",B="tabItem_l0OV";function a(A){let{className:I,block:g,selectedValue:F,selectValue:l,tabValues:t}=A;const a=[],{blockElementScrollPositionUntilNextRender:E}=(0,Q.o5)(),V=A=>{const I=A.currentTarget,g=a.indexOf(I),C=t[g].value;C!==F&&(E(I),l(C))},n=A=>{let I=null;switch(A.key){case"Enter":V(A);break;case"ArrowRight":{const g=a.indexOf(A.currentTarget)+1;I=a[g]??a[0];break}case"ArrowLeft":{const g=a.indexOf(A.currentTarget)-1;I=a[g]??a[a.length-1];break}}I?.focus()};return e.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,U.Z)("tabs",{"tabs--block":g},I)},t.map((A=>{let{value:I,label:g,attributes:Q}=A;return e.createElement("li",(0,C.Z)({role:"tab",tabIndex:F===I?0:-1,"aria-selected":F===I,key:I,ref:A=>a.push(A),onKeyDown:n,onClick:V},Q,{className:(0,U.Z)("tabs__item",B,Q?.className,{"tabs__item--active":F===I})}),g??I)})))}function E(A){let{lazy:I,children:g,selectedValue:C}=A;const U=(Array.isArray(g)?g:[g]).filter(Boolean);if(I){const A=U.find((A=>A.props.value===C));return A?(0,e.cloneElement)(A,{className:"margin-top--md"}):null}return e.createElement("div",{className:"margin-top--md"},U.map(((A,I)=>(0,e.cloneElement)(A,{key:I,hidden:A.props.value!==C}))))}function V(A){const I=(0,F.Y)(A);return e.createElement("div",{className:(0,U.Z)("tabs-container",t)},e.createElement(a,(0,C.Z)({},A,I)),e.createElement(E,(0,C.Z)({},A,I)))}function n(A){const I=(0,l.Z)();return e.createElement(V,(0,C.Z)({key:String(I)},A))}},35595:(A,I,g)=>{g.d(I,{Y:()=>E});var C=g(27378),e=g(35331),U=g(30654),Q=g(70784),F=g(71819);function l(A){return function(A){return C.Children.map(A,(A=>{if(!A||(0,C.isValidElement)(A)&&function(A){const{props:I}=A;return!!I&&"object"==typeof I&&"value"in I}(A))return A;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof A.type?A.type:A.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(A).map((A=>{let{props:{value:I,label:g,attributes:C,default:e}}=A;return{value:I,label:g,attributes:C,default:e}}))}function t(A){const{values:I,children:g}=A;return(0,C.useMemo)((()=>{const A=I??l(g);return function(A){const I=(0,Q.l)(A,((A,I)=>A.value===I.value));if(I.length>0)throw new Error(`Docusaurus error: Duplicate values "${I.map((A=>A.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(A),A}),[I,g])}function B(A){let{value:I,tabValues:g}=A;return g.some((A=>A.value===I))}function a(A){let{queryString:I=!1,groupId:g}=A;const Q=(0,e.k6)(),F=function(A){let{queryString:I=!1,groupId:g}=A;if("string"==typeof I)return I;if(!1===I)return null;if(!0===I&&!g)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return g??null}({queryString:I,groupId:g});return[(0,U._X)(F),(0,C.useCallback)((A=>{if(!F)return;const I=new URLSearchParams(Q.location.search);I.set(F,A),Q.replace({...Q.location,search:I.toString()})}),[F,Q])]}function E(A){const{defaultValue:I,queryString:g=!1,groupId:e}=A,U=t(A),[Q,l]=(0,C.useState)((()=>function(A){let{defaultValue:I,tabValues:g}=A;if(0===g.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(I){if(!B({value:I,tabValues:g}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${I}" but none of its children has the corresponding value. Available values are: ${g.map((A=>A.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return I}const C=g.find((A=>A.default))??g[0];if(!C)throw new Error("Unexpected error: 0 tabValues");return C.value}({defaultValue:I,tabValues:U}))),[E,V]=a({queryString:g,groupId:e}),[n,R]=function(A){let{groupId:I}=A;const g=function(A){return A?`docusaurus.tab.${A}`:null}(I),[e,U]=(0,F.Nk)(g);return[e,(0,C.useCallback)((A=>{g&&U.set(A)}),[g,U])]}({groupId:e}),d=(()=>{const A=E??n;return B({value:A,tabValues:U})?A:null})();(0,C.useLayoutEffect)((()=>{d&&l(d)}),[d]);return{selectedValue:Q,selectValue:(0,C.useCallback)((A=>{if(!B({value:A,tabValues:U}))throw new Error(`Can't select invalid tab value=${A}`);l(A),V(A),R(A)}),[V,R,U]),tabValues:U}}},92969:(A,I,g)=>{g.r(I),g.d(I,{assets:()=>l,contentTitle:()=>Q,default:()=>a,frontMatter:()=>U,metadata:()=>F,toc:()=>t});var C=g(25773),e=(g(27378),g(35318));g(33337),g(39798),g(76911),g(3580);const U={slug:"v0.26",title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",authors:["milesj"],tags:["proto","docker","query","hash"],image:"./img/v0.26.png"},Q=void 0,F={permalink:"/blog/v0.26",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-13_v0.26.mdx",source:"@site/blog/2023-03-13_v0.26.mdx",title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",description:"With this release, we're providing deeper integration with our new proto toolchain",date:"2023-03-13T00:00:00.000Z",formattedDate:"March 13, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"docker",permalink:"/blog/tags/docker"},{label:"query",permalink:"/blog/tags/query"},{label:"hash",permalink:"/blog/tags/hash"}],readingTime:3.29,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.26",title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",authors:["milesj"],tags:["proto","docker","query","hash"],image:"./img/v0.26.png"},prevItem:{title:"proto v0.3 - Improved npm, go, and version requirement support",permalink:"/blog/proto-v0.3"},nextItem:{title:"Introducing proto, a next-generation toolchain manager!",permalink:"/blog/proto"}},l={image:g(81975).Z,authorsImageUrls:[void 0]},t=[],B={toc:t};function a(A){let{components:I,...g}=A;return(0,e.kt)("wrapper",(0,C.Z)({},B,g,{components:I,mdxType:"MDXLayout"}),(0,e.kt)("p",null,"With this release, we're providing deeper integration with our new ",(0,e.kt)("a",{parentName:"p",href:"/proto"},"proto")," toolchain\nmanager, better Docker support, and new query commands for debugging."))}a.isMDXComponent=!0},81975:(A,I,g)=>{g.d(I,{Z:()=>C});const C=g.p+"assets/images/v0.26-850e9d0ee0ef9e53cd5c72d6bba021d6.png"}}]); \ No newline at end of file diff --git a/assets/js/4ec8a4a9.6065a421.js b/assets/js/4ec8a4a9.6065a421.js new file mode 100644 index 00000000000..06277da7433 --- /dev/null +++ b/assets/js/4ec8a4a9.6065a421.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50818],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=p(n),u=i,k=c["".concat(s,".").concat(u)]||c[u]||d[u]||o;return n?a.createElement(k,r(r({ref:t},m),{},{components:n})):a.createElement(k,r({ref:t},m))}));function u(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378),i=n(83469),o=n(31792);function r(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:i.dT$}))}},9785:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),i=n(9619);function o(e){let{text:t="Required"}=e;return a.createElement(i.Z,{text:t,variant:"failure",className:"ml-2"})}},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),i=n(9619);function o(e){let{header:t,inline:n,updated:o,version:r}=e;return a.createElement(i.Z,{text:`v${r}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),i=n(40624),o=n(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,i.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?r[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},44501:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>k,frontMatter:()=>s,metadata:()=>m,toc:()=>c});var a=n(25773),i=(n(27378),n(35318)),o=n(32189),r=n(9785),l=n(79022);const s={title:"moon.yml",toc_max_heading_level:6},p=void 0,m={unversionedId:"config/project",id:"config/project",title:"moon.yml",description:"The moon.yml configuration file is not required but can be used to define additional metadata",source:"@site/docs/config/project.mdx",sourceDirName:"config",slug:"/config/project",permalink:"/docs/config/project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/project.mdx",tags:[],version:"current",frontMatter:{title:"moon.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:".moon/tasks...",permalink:"/docs/config/tasks"},next:{title:"template.yml",permalink:"/docs/config/template"}},d={},c=[{value:"<code>dependsOn</code>",id:"dependson",level:2},{value:"Metadata",id:"metadata",level:2},{value:"<code>language</code>",id:"language",level:2},{value:'<code>owners</code><VersionLabel version="1.8.0" />',id:"owners",level:2},{value:'<code>customGroups</code><RequiredLabel text="Bitbucket" />',id:"customgroups",level:3},{value:"<code>defaultOwner</code>",id:"defaultowner",level:3},{value:'<code>optional</code><RequiredLabel text="GitLab" />',id:"optional",level:3},{value:"<code>paths</code>",id:"paths",level:3},{value:'<code>requiredApprovals</code><RequiredLabel text="Bitbucket / GitLab" />',id:"requiredapprovals",level:3},{value:"<code>project</code>",id:"project",level:2},{value:"<code>channel</code>",id:"channel",level:3},{value:"<code>description</code><RequiredLabel />",id:"description",level:3},{value:"<code>maintainers</code>",id:"maintainers",level:3},{value:"<code>name</code>",id:"name",level:3},{value:"<code>owner</code>",id:"owner",level:3},{value:"<code>tags</code>",id:"tags",level:2},{value:"<code>type</code>",id:"type",level:2},{value:"Tasks",id:"tasks",level:2},{value:"<code>env</code>",id:"env",level:2},{value:"<code>fileGroups</code>",id:"filegroups",level:2},{value:"<code>platform</code>",id:"platform",level:2},{value:"<code>tasks</code>",id:"tasks-1",level:2},{value:'<code>extends</code><VersionLabel version="1.12.0" />',id:"extends",level:3},{value:"<code>command</code><RequiredLabel />",id:"command",level:3},{value:"Special commands",id:"special-commands",level:4},{value:"<code>args</code>",id:"args",level:3},{value:"<code>deps</code>",id:"deps",level:3},{value:"<code>env</code>",id:"env-1",level:3},{value:"<code>inputs</code>",id:"inputs",level:3},{value:"<code>local</code>",id:"local",level:3},{value:"<code>outputs</code>",id:"outputs",level:3},{value:"<code>platform</code>",id:"platform-1",level:3},{value:"<code>options</code>",id:"options",level:3},{value:"<code>affectedFiles</code>",id:"affectedfiles",level:4},{value:'<code>allowFailure</code><VersionLabel version="1.13.0" />',id:"allowfailure",level:4},{value:"<code>cache</code>",id:"cache",level:4},{value:"<code>envFile</code>",id:"envfile",level:4},{value:'<code>interactive</code><VersionLabel version="1.12.0" />',id:"interactive",level:4},{value:"<code>mergeArgs</code>",id:"mergeargs",level:4},{value:"<code>mergeDeps</code>",id:"mergedeps",level:4},{value:"<code>mergeEnv</code>",id:"mergeenv",level:4},{value:"<code>mergeInputs</code>",id:"mergeinputs",level:4},{value:"<code>mergeOutputs</code>",id:"mergeoutputs",level:4},{value:"<code>outputStyle</code>",id:"outputstyle",level:4},{value:'<code>persistent</code><VersionLabel version="1.6.0" />',id:"persistent",level:4},{value:"<code>retryCount</code>",id:"retrycount",level:4},{value:"<code>runDepsInParallel</code>",id:"rundepsinparallel",level:4},{value:"<code>runInCI</code>",id:"runinci",level:4},{value:"<code>runFromWorkspaceRoot</code>",id:"runfromworkspaceroot",level:4},{value:"<code>shell</code>",id:"shell",level:4},{value:"Overrides",id:"overrides",level:2},{value:"<code>toolchain</code>",id:"toolchain",level:2},{value:"<code>node</code>",id:"node",level:3},{value:"<code>version</code>",id:"version",level:4},{value:"<code>rust</code>",id:"rust",level:3},{value:"<code>version</code>",id:"version-1",level:4},{value:"<code>typescript</code>",id:"typescript",level:3},{value:"<code>disabled</code>",id:"disabled",level:4},{value:"<code>routeOutDirToCache</code>",id:"routeoutdirtocache",level:4},{value:"<code>syncProjectReferences</code>",id:"syncprojectreferences",level:4},{value:"<code>syncProjectReferencesToPaths</code>",id:"syncprojectreferencestopaths",level:4},{value:"<code>workspace</code>",id:"workspace",level:2},{value:"<code>inheritedTasks</code>",id:"inheritedtasks",level:3},{value:"<code>exclude</code>",id:"exclude",level:4},{value:"<code>include</code>",id:"include",level:4},{value:"<code>rename</code>",id:"rename",level:4}],u={toc:c};function k(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"moon.yml")," configuration file ",(0,i.kt)("em",{parentName:"p"},"is not required")," but can be used to define additional metadata\nfor a project, override inherited tasks, and more at the project-level. When used, this file must\nexist in a project's root, as configured in ",(0,i.kt)("a",{parentName:"p",href:"./workspace#projects"},(0,i.kt)("inlineCode",{parentName:"a"},"projects")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"$schema: 'https://moonrepo.dev/schemas/project.json'\n")),(0,i.kt)("h2",{id:"dependson"},(0,i.kt)("inlineCode",{parentName:"h2"},"dependsOn")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#dependsOn",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Explicitly defines ",(0,i.kt)("em",{parentName:"p"},"other")," projects that ",(0,i.kt)("em",{parentName:"p"},"this")," project depends on, primarily when generating the\nproject and task graphs. The most common use case for this is building those projects ",(0,i.kt)("em",{parentName:"p"},"before"),"\nbuilding this one. When defined, this setting requires an array of project names, which are the keys\nfound in the ",(0,i.kt)("a",{parentName:"p",href:"./workspace#projects"},(0,i.kt)("inlineCode",{parentName:"a"},"projects"))," map."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'apiClients'\n - 'designSystem'\n")),(0,i.kt)("p",null,"A dependency object can also be defined, where a specific ",(0,i.kt)("inlineCode",{parentName:"p"},"scope"),' can be assigned, which accepts\n"production" (default), "development", "build", or "peer".'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - id: 'apiClients'\n scope: 'production'\n - id: 'designSystem'\n scope: 'peer'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Learn more about ",(0,i.kt)("a",{parentName:"p",href:"../concepts/project#dependencies"},"implicit and explicit dependencies"),".")),(0,i.kt)("h2",{id:"metadata"},"Metadata"),(0,i.kt)("h2",{id:"language"},(0,i.kt)("inlineCode",{parentName:"h2"},"language")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#language",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The primary programming language the project is written in. This setting is required for\n",(0,i.kt)("a",{parentName:"p",href:"./tasks"},"task inheritance"),", editor extensions, and more. Supports the following values:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"bash")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Bash_(Unix_shell)"},"Bash")," based project (Unix only)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"batch")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://en.wikibooks.org/wiki/Windows_Batch_Scripting"},"Batch"),"/PowerShell based\nproject (Windows only)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"go")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://go.dev/"},"Go")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"javascript")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript"},"JavaScript")," based\nproject."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"php")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.php.net"},"PHP")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"python")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.python.org/"},"Python")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ruby")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.ruby-lang.org/en/"},"Ruby")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"rust")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.rust-lang.org/"},"Rust")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"typescript")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/"},"TypeScript")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"unknown")," (default) - When not configured or inferred."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"*")," - A custom language. Values will be converted to kebab-case.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'javascript'\n\n# Custom\nlanguage: 'kotlin'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"For convenience, when this setting is not defined, moon will attempt to detect the language based\non configuration files found in the project root. This only applies to non-custom languages!")),(0,i.kt)("h2",{id:"owners"},(0,i.kt)("inlineCode",{parentName:"h2"},"owners"),(0,i.kt)(l.Z,{version:"1.8.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#owners",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Defines ownership of source code within the current project, by mapping file system paths to owners.\nAn owner is either a user, team, or group."),(0,i.kt)("p",null,"Currently supports\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners"},"GitHub"),",\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html"},"GitLab"),", and\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.atlassian.com/apps/1218598/code-owners-for-bitbucket?tab=overview&hosting=cloud"},"Bitbucket"),"\n(via app)."),(0,i.kt)("h3",{id:"customgroups"},(0,i.kt)("inlineCode",{parentName:"h3"},"customGroups"),(0,i.kt)(r.Z,{text:"Bitbucket",mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#customGroups",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"When using the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.atlassian.com/apps/1218598/code-owners-for-bitbucket?tab=overview&hosting=cloud"},"Code Owners for Bitbucket"),"\napp, this setting provides a way to define custom groups that will be injected at the top of the\n",(0,i.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file. These groups ",(0,i.kt)("em",{parentName:"p"},"must")," be unique across all projects."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2,3}',title:'"moon.yml"',"{2,3}":!0},"owners:\n customGroups:\n '@@@backend': ['@\"user name\"', '@@team']\n")),(0,i.kt)("h3",{id:"defaultowner"},(0,i.kt)("inlineCode",{parentName:"h3"},"defaultOwner")),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#defaultOwner",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The default owner for all ",(0,i.kt)("a",{parentName:"p",href:"#paths"},(0,i.kt)("inlineCode",{parentName:"a"},"paths")),". This setting is optional in some cases but helps to\navoid unnecessary repetition."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"owners:\n defaultOwner: '@frontend'\n")),(0,i.kt)("h3",{id:"optional"},(0,i.kt)("inlineCode",{parentName:"h3"},"optional"),(0,i.kt)(r.Z,{text:"GitLab",mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#optional",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"For GitLab, marks the project's\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html#optional-sections"},"code owners section"),"\nas optional. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"owners:\n optional: true\n")),(0,i.kt)("h3",{id:"paths"},(0,i.kt)("inlineCode",{parentName:"h3"},"paths")),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#paths",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The primary setting for defining ownership of source code within the current project. This setting\nsupports 2 formats, the first being a list of file paths relative from the current project. This\nformat requires ",(0,i.kt)("a",{parentName:"p",href:"#defaultowner"},(0,i.kt)("inlineCode",{parentName:"a"},"defaultOwner"))," to be defined, and only supports 1 owner for every\npath (the default owner)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-5}',title:'"moon.yml"',"{3-5}":!0},"owners:\n defaultOwner: '@frontend'\n paths:\n - '**/*.ts'\n - '**/*.tsx'\n - '*.config.js'\n")),(0,i.kt)("p",null,"The second format provides far more granularity, allowing for multiple owners per path. This format\nrequires a map, where the key is a file path relative from the current project, and the value is a\nlist of owners. Paths with an empty list of owners will fallback to ",(0,i.kt)("a",{parentName:"p",href:"#defaultowner"},(0,i.kt)("inlineCode",{parentName:"a"},"defaultOwner")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-6}',title:'"moon.yml"',"{3-6}":!0},"owners:\n defaultOwner: '@frontend'\n paths:\n '**/*.rs': ['@backend']\n '**/*.js': []\n '*.config.js': ['@frontend', '@frontend-infra']\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"The syntax for owners is dependent on the provider you are using for version control (GitHub,\nGitLab, Bitbucket). moon provides no validation or guarantees that these are correct.")),(0,i.kt)("h3",{id:"requiredapprovals"},(0,i.kt)("inlineCode",{parentName:"h3"},"requiredApprovals"),(0,i.kt)(r.Z,{text:"Bitbucket / GitLab",mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#requiredApprovals",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Requires a specific number of approvals for a pull/merge request to be satisfied. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"1"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"For Bitbucket, defines the\n",(0,i.kt)("a",{parentName:"li",href:"https://docs.mibexsoftware.com/codeowners/merge-checks#MergeChecks-2.MergeChecks:HowmanyoftheseCodeOwnersneedtoapprovebeforeapullrequestcanbemerged?"},(0,i.kt)("inlineCode",{parentName:"a"},"Check()")," condition"),"\nwhen using a ",(0,i.kt)("a",{parentName:"li",href:"#defaultowner"},(0,i.kt)("inlineCode",{parentName:"a"},"defaultOwner")),"."),(0,i.kt)("li",{parentName:"ul"},"For GitLab, defines a requirement on the\n",(0,i.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html#sections-requiring-multiple-approvals"},"code owners section"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"owners:\n requiredApprovals: 2\n")),(0,i.kt)("h2",{id:"project"},(0,i.kt)("inlineCode",{parentName:"h2"},"project")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#project",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"project")," setting defines metadata about the project itself."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"project:\n name: 'moon'\n description: 'A monorepo management tool.'\n channel: '#moon'\n owner: 'infra.platform'\n maintainers: ['miles.johnson']\n")),(0,i.kt)("p",null,"The information listed within ",(0,i.kt)("inlineCode",{parentName:"p"},"project")," is purely informational and primarily displayed within the\nCLI. However, this setting exists for you, your team, and your company, as a means to identify and\norganize all projects. Feel free to build your own tooling around these settings!"),(0,i.kt)("h3",{id:"channel"},(0,i.kt)("inlineCode",{parentName:"h3"},"channel")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#channel",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The Slack, Discord, Teams, IRC, etc channel name (with leading #) in which to discuss the project."),(0,i.kt)("h3",{id:"description"},(0,i.kt)("inlineCode",{parentName:"h3"},"description"),(0,i.kt)(r.Z,{mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#description",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A description of what the project does and aims to achieve. Be as descriptive as possible, as this\nis the kind of information search engines would index on."),(0,i.kt)("h3",{id:"maintainers"},(0,i.kt)("inlineCode",{parentName:"h3"},"maintainers")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#maintainers",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A list of people/developers that maintain the project, review code changes, and can provide support.\nCan be a name, email, LDAP name, GitHub username, etc, the choice is yours."),(0,i.kt)("h3",{id:"name"},(0,i.kt)("inlineCode",{parentName:"h3"},"name")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#name",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A human readable name of the project. This is ",(0,i.kt)("em",{parentName:"p"},"different")," from the unique project name configured in\n",(0,i.kt)("a",{parentName:"p",href:"./workspace#projects"},(0,i.kt)("inlineCode",{parentName:"a"},"projects")),"."),(0,i.kt)("h3",{id:"owner"},(0,i.kt)("inlineCode",{parentName:"h3"},"owner")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#owner",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The team or organization that owns the project. Can be a title, LDAP name, GitHub team, etc. We\nsuggest ",(0,i.kt)("em",{parentName:"p"},"not")," listing people/developers as the owner, use ",(0,i.kt)("a",{parentName:"p",href:"#maintainers"},"maintainers")," instead."),(0,i.kt)("h2",{id:"tags"},(0,i.kt)("inlineCode",{parentName:"h2"},"tags")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#tags",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Tags are a simple mechanism for categorizing projects. They can be used to group projects together\nfor ",(0,i.kt)("a",{parentName:"p",href:"../commands/query/projects"},"easier querying"),", enforcing of\n",(0,i.kt)("a",{parentName:"p",href:"./workspace#constraints"},"project boundaries and constraints"),",\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance"},"task inheritance"),", and more."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tags:\n - 'react'\n - 'prisma'\n")),(0,i.kt)("h2",{id:"type"},(0,i.kt)("inlineCode",{parentName:"h2"},"type")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#type",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The type of project. Supports the following values:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"application")," - A backend, frontend, or CLI application."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"library")," - A self-contained, shareable, and publishable set of code."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"tool")," - An internal tool, one-off script, etc."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"unknown")," (default) - When not configured.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"type: 'application'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Project type is used in task inheritance, constraints and boundaries, editor extensions, and more!")),(0,i.kt)("h2",{id:"tasks"},"Tasks"),(0,i.kt)("h2",{id:"env"},(0,i.kt)("inlineCode",{parentName:"h2"},"env")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#env",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"env")," field is map of strings that are passed as environment variables to ",(0,i.kt)("em",{parentName:"p"},"all tasks")," within the\ncurrent project. Project-level variables will not override task-level variables of the same name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {1,2}',title:'"moon.yml"',"{1,2}":!0},"env:\n NODE_ENV: 'production'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"View the task ",(0,i.kt)("a",{parentName:"p",href:"#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env"))," setting for more usage examples and information.")),(0,i.kt)("h2",{id:"filegroups"},(0,i.kt)("inlineCode",{parentName:"h2"},"fileGroups")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#fileGroups",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Defines ",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-group"},"file groups")," to be used by local tasks. By default, this setting\n",(0,i.kt)("em",{parentName:"p"},"is not required")," for the following reasons:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"File groups are an optional feature, and are designed for advanced use cases."),(0,i.kt)("li",{parentName:"ul"},"File groups defined in ",(0,i.kt)("a",{parentName:"li",href:"./tasks"},(0,i.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," will be inherited by all projects.")),(0,i.kt)("p",null,"When defined this setting requires a map, where the key is the file group name, and the value is a\nlist of ",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-pattern"},"globs or paths"),". Globs and paths are\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-pattern#project-relative"},"relative to a project")," (even when defined\n",(0,i.kt)("a",{parentName:"p",href:"./tasks"},"globally"),")."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"fileGroups:\n configs:\n - '*.config.{js,cjs,mjs}'\n - '*.json'\n sources:\n - 'src/**/*'\n - 'types/**/*'\n tests:\n - 'tests/**/*'\n - '**/__tests__/**/*'\n assets:\n - 'assets/**/*'\n - 'images/**/*'\n - 'static/**/*'\n - '**/*.{scss,css}'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"The code snippet above is merely an example of file groups. Feel free to use those groups as-is,\nmodify the glob lists, add and remove groups, or implement completely new groups. The choice is\nyours!")),(0,i.kt)("h2",{id:"platform"},(0,i.kt)("inlineCode",{parentName:"h2"},"platform")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#platform",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The default ",(0,i.kt)("a",{parentName:"p",href:"#platform-1"},(0,i.kt)("inlineCode",{parentName:"a"},"platform"))," for all task's within the current project. When a task's\n",(0,i.kt)("inlineCode",{parentName:"p"},"platform")," has ",(0,i.kt)("em",{parentName:"p"},"not been")," explicitly configured, the platform will fallback to this configured\nvalue, otherwise the platform will be detected from the project's environment."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"platform: 'node'\n")),(0,i.kt)("h2",{id:"tasks-1"},(0,i.kt)("inlineCode",{parentName:"h2"},"tasks")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#tasks",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Tasks are actions that are ran within the context of a ",(0,i.kt)("a",{parentName:"p",href:"../concepts/project"},"project"),", and commonly\nwrap an npm binary or system command. This setting requires a map, where the key is a unique name\nfor the task, and the value is an object of task parameters."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n format:\n command: 'prettier'\n lint:\n command: 'eslint'\n test:\n command: 'jest'\n typecheck:\n command: 'tsc'\n")),(0,i.kt)("h3",{id:"extends"},(0,i.kt)("inlineCode",{parentName:"h3"},"extends"),(0,i.kt)(l.Z,{version:"1.12.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#extends",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"extends")," field can be used to extend the settings from a sibling task within the same project,\nor ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance"},"inherited from the global scope"),". This is useful for composing\nsimilar tasks with different arguments or options."),(0,i.kt)("p",null,"When extending another task, the same\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"merge strategies")," used for inheritance are applied."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint .'\n inputs:\n - 'src/**/*'\n\n lint-fix:\n extends: 'lint'\n args: '--fix'\n local: true\n")),(0,i.kt)("h3",{id:"command"},(0,i.kt)("inlineCode",{parentName:"h3"},"command"),(0,i.kt)(r.Z,{mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#command",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"command")," field is the command line to run for the task, including the command name (must be\nfirst) and any optional ",(0,i.kt)("a",{parentName:"p",href:"#args"},"arguments"),". This field is required when ",(0,i.kt)("em",{parentName:"p"},"not")," inheriting a global\ntask of the same name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3}',title:'"moon.yml"',"{3}":!0},"tasks:\n format:\n # Using a string\n command: 'prettier --check .'\n # Using an array\n command:\n - 'prettier'\n - '--check'\n - '.'\n")),(0,i.kt)("p",null,"By default a task assumes the command name is an npm binary, and if you'd like to reference a system\ncommand, you'll also need to set the ",(0,i.kt)("a",{parentName:"p",href:"#platform"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),' to "system". We do our best to\nautomatically detect this, but it\'s not accurate in all scenarios.'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n clean:\n command: 'rm -rf ./dist'\n platform: 'system'\n")),(0,i.kt)("h4",{id:"special-commands"},"Special commands"),(0,i.kt)("p",null,"For interoperability reasons, the following command names have special handling."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"noop"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"no-op"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"nop"),' - Marks the task as a "no operation". Will not execute a command in the\naction pipeline but can define dependencies.'),(0,i.kt)("li",{parentName:"ul"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"platform"),' is "deno":',(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Will execute with ",(0,i.kt)("inlineCode",{parentName:"li"},"deno")," binary."))),(0,i.kt)("li",{parentName:"ul"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"platform"),' is "node":',(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"node"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"npm"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"pnpm"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"yarn")," - Uses the binaries from the toolchain."))),(0,i.kt)("li",{parentName:"ul"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"platform"),' is "rust":',(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Will execute with ",(0,i.kt)("inlineCode",{parentName:"li"},"cargo")," binary.")))),(0,i.kt)("h3",{id:"args"},(0,i.kt)("inlineCode",{parentName:"h3"},"args")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#args",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"args")," field is a collection of ",(0,i.kt)("em",{parentName:"p"},"additional")," arguments to pass to the command line when\nexecuting the task. This field exists purely to provide arguments for\n",(0,i.kt)("a",{parentName:"p",href:"./tasks#tasks"},"inherited tasks"),"."),(0,i.kt)("p",null,"This setting can be defined using a string, or an array of strings. We suggest using arrays when\ndealing with many args, or the args string cannot be parsed easily."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n test:\n command: 'jest'\n # Using a string\n args: '--color --maxWorkers 3'\n # Using an array\n args:\n - '--color'\n - '--maxWorkers'\n - '3'\n")),(0,i.kt)("p",null,"However, for the array approach to work correctly, each argument ",(0,i.kt)("em",{parentName:"p"},"must")," be its own distinct item,\nincluding argument values. For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n test:\n command: 'jest'\n args:\n # Valid\n - '--maxWorkers'\n - '3'\n # Also valid\n - '--maxWorkers=3'\n # Invalid\n - '--maxWorkers 3'\n")),(0,i.kt)("h3",{id:"deps"},(0,i.kt)("inlineCode",{parentName:"h3"},"deps")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#deps",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"deps")," field is a list of other tasks (known as ",(0,i.kt)("a",{parentName:"p",href:"../concepts/target"},"targets"),"), either within\nthis project or found in another project, that will be executed ",(0,i.kt)("em",{parentName:"p"},"before")," this task. It achieves this\nby generating a directed task graph based on the project graph."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4-6}',title:'"moon.yml"',"{4-6}":!0},"tasks:\n build:\n command: 'webpack'\n deps:\n - 'apiClients:build'\n - 'designSystem:build'\n # A task within the current project\n - 'codegen'\n")),(0,i.kt)("h3",{id:"env-1"},(0,i.kt)("inlineCode",{parentName:"h3"},"env")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#env",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"env")," field is map of strings that are passed as environment variables when running the command.\nVariables defined here will take precedence over those loaded with ",(0,i.kt)("a",{parentName:"p",href:"#envfile"},(0,i.kt)("inlineCode",{parentName:"a"},"envFile")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n env:\n NODE_ENV: 'production'\n")),(0,i.kt)("p",null,"Variables also support substitution using the syntax ",(0,i.kt)("inlineCode",{parentName:"p"},"${VAR_NAME}"),". When using substitution, only\nvariables in the current process can be referenced, and not those currently defined in ",(0,i.kt)("inlineCode",{parentName:"p"},"env"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n env:\n APP_TARGET: '${REGION}-${ENVIRONMENT}'\n")),(0,i.kt)("h3",{id:"inputs"},(0,i.kt)("inlineCode",{parentName:"h3"},"inputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#inputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"inputs")," field is a list of sources that calculate whether to execute this task based on the\nenvironment and files that have been touched since the last time the task has been ran. If ",(0,i.kt)("em",{parentName:"p"},"not"),"\ndefined or inherited, then all files within a project are considered an input (",(0,i.kt)("inlineCode",{parentName:"p"},"**/*"),")."),(0,i.kt)("p",null,"Inputs support the following source types:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Environment variables (must start with a ",(0,i.kt)("inlineCode",{parentName:"li"},"$"),")"),(0,i.kt)("li",{parentName:"ul"},"Files, folders, globs\n(",(0,i.kt)("a",{parentName:"li",href:"../concepts/file-pattern#project-relative"},"project and workspace relative file patterns"),")")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4-10}',title:'"moon.yml"',"{4-10}":!0},"tasks:\n lint:\n command: 'eslint'\n inputs:\n # Config files anywhere within the project\n - '**/.eslintignore'\n - '**/.eslintrc.js'\n # Config files at the workspace root\n - '/.eslintignore'\n - '/.eslintrc.js'\n # Environment variables\n - '$ESLINT_CACHE'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"When using an environment variable, we assume ",(0,i.kt)("em",{parentName:"p"},"it's not defined")," by default, and will trigger an\naffected state when it ",(0,i.kt)("em",{parentName:"p"},"is")," defined. If the environment variable always exists, then the task will\nalways run and bypass the cache.")),(0,i.kt)("admonition",{type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"When using globs, be aware that files that match the glob, but are ignored via ",(0,i.kt)("inlineCode",{parentName:"p"},".gitignore")," (or\nsimilar), will ",(0,i.kt)("em",{parentName:"p"},"not")," be considered an input. To work around this, use explicit file inputs.")),(0,i.kt)("h3",{id:"local"},(0,i.kt)("inlineCode",{parentName:"h3"},"local")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#local",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Marks the task as local only. This should primarily be enabled for long-running or never-ending\ntasks, like development servers and watch mode. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),' if the task name is "dev",\n"start", or "serve", and ',(0,i.kt)("inlineCode",{parentName:"p"},"false")," otherwise."),(0,i.kt)("p",null,"This is a convenience setting for local development that sets the following task options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#cache"},(0,i.kt)("inlineCode",{parentName:"a"},"cache"))," -> Turned off"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#outputstyle"},(0,i.kt)("inlineCode",{parentName:"a"},"outputStyle")),' -> Set to "stream"'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#persistent"},(0,i.kt)("inlineCode",{parentName:"a"},"persistent"))," -> Turned on"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#runinci"},(0,i.kt)("inlineCode",{parentName:"a"},"runInCI"))," -> Turned off")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n dev:\n command: 'webpack server'\n local: true\n")),(0,i.kt)("h3",{id:"outputs"},(0,i.kt)("inlineCode",{parentName:"h3"},"outputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#outputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"outputs")," field is a list of ",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-pattern#project-relative"},"files and folders")," that\nare ",(0,i.kt)("em",{parentName:"p"},"created")," as a result of executing this task, typically from a build or compilation related\ntask. Outputs are necessary for ",(0,i.kt)("a",{parentName:"p",href:"../concepts/cache"},"incremental caching and hydration"),". If you'd\nprefer to avoid that functionality, omit this field."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4-6}',title:'"moon.yml"',"{4-6}":!0},"tasks:\n build:\n command: 'webpack'\n outputs:\n # Relative from project root\n - 'build/'\n")),(0,i.kt)("p",null,"Globs can also be used if you'd like to restrict which files are cached. For example, when building\na JavaScript project, you may want to include ",(0,i.kt)("inlineCode",{parentName:"p"},".js")," files, but exclude ",(0,i.kt)("inlineCode",{parentName:"p"},".map")," and other files."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n outputs:\n - 'build/**/*.js'\n - '!build/internal.js'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"When using globs and moon hydrates an output (a cache hit), all files not matching the glob will be\n",(0,i.kt)("strong",{parentName:"p"},"deleted"),". Ensure that all files critical for the build to function correctly are included.")),(0,i.kt)("h3",{id:"platform-1"},(0,i.kt)("inlineCode",{parentName:"h3"},"platform")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#platform",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"platform")," field defines the platform (language runtime) the command runs on, where to locate\nits executable, and which tool to execute it with. By default moon will set to a value based on the\nproject's ",(0,i.kt)("a",{parentName:"p",href:"#language"},(0,i.kt)("inlineCode",{parentName:"a"},"language"))," or default ",(0,i.kt)("a",{parentName:"p",href:"#platform"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"deno")," - Command is executed with Deno, or is a Deno binary located in ",(0,i.kt)("inlineCode",{parentName:"li"},"~/.deno/bin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"node")," - Command is a binary within ",(0,i.kt)("inlineCode",{parentName:"li"},"node_modules")," and will be executed with Node.js."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"rust")," - Command is executed with Cargo, or is a Cargo binary located in ",(0,i.kt)("inlineCode",{parentName:"li"},"~/.cargo/bin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"system")," - Command is expected to exist within the system's environment / user's shell."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"unknown")," - When not configured or inferred.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4}',title:'"moon.yml"',"{4}":!0},"tasks:\n env:\n command: 'printenv'\n platform: 'system'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"This field exists because of our ",(0,i.kt)("a",{parentName:"p",href:"../concepts/toolchain"},"toolchain"),", and moon ensuring the correct\ncommand is ran.")),(0,i.kt)("h3",{id:"options"},(0,i.kt)("inlineCode",{parentName:"h3"},"options")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#options",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"options")," field is an object of configurable options that can be used to modify the task and its\nexecution. The following fields can be provided, with merge related fields supporting all\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"merge strategies"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6-8}',title:'"moon.yml"',"{6-8}":!0},"tasks:\n typecheck:\n command: 'tsc --noEmit'\n options:\n mergeArgs: 'replace'\n runFromWorkspaceRoot: true\n")),(0,i.kt)("h4",{id:"affectedfiles"},(0,i.kt)("inlineCode",{parentName:"h4"},"affectedFiles")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#affectedFiles",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"When enabled and the ",(0,i.kt)("a",{parentName:"p",href:"../run-task#running-based-on-affected-files-only"},(0,i.kt)("inlineCode",{parentName:"a"},"--affected")," option")," is\nprovided, all affected files that match this task's ",(0,i.kt)("a",{parentName:"p",href:"#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs"))," will be passed as relative\nfile paths as command line arguments, and as a ",(0,i.kt)("inlineCode",{parentName:"p"},"MOON_AFFECTED_FILES")," environment variable. If there\nare no affected files, ",(0,i.kt)("inlineCode",{parentName:"p"},".")," (current directory) will be passed instead for arguments, and an empty\nvalue for the environment variable."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n lint:\n command: 'eslint'\n options:\n affectedFiles: true\n # Only pass args\n affectedFiles: 'args'\n # Only set env var\n affectedFiles: 'env'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"When using this option, ensure that explicit files or ",(0,i.kt)("inlineCode",{parentName:"p"},".")," ",(0,i.kt)("em",{parentName:"p"},"are not present")," in the ",(0,i.kt)("a",{parentName:"p",href:"#args"},(0,i.kt)("inlineCode",{parentName:"a"},"args")),"\nlist. Furthermore, this functionality will only work if the task's command supports an arbitrary\nlist of files being passed as arguments.")),(0,i.kt)("h4",{id:"allowfailure"},(0,i.kt)("inlineCode",{parentName:"h4"},"allowFailure"),(0,i.kt)(l.Z,{version:"1.13.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#allowFailure",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Allows a task to fail without failing the entire pipeline. When enabled, the following changes\noccur:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Other tasks ",(0,i.kt)("em",{parentName:"li"},"cannot")," depend on this task, as we can't ensure it's side-effect free."),(0,i.kt)("li",{parentName:"ul"},"For ",(0,i.kt)("a",{parentName:"li",href:"../commands/run"},(0,i.kt)("inlineCode",{parentName:"a"},"moon run")),", the process will not bail early and will run to completion."),(0,i.kt)("li",{parentName:"ul"},"For ",(0,i.kt)("a",{parentName:"li",href:"../commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci")),", the process will not exit with a non-zero exit code, if the only\nfailing tasks are allowed to fail.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint'\n options:\n allowFailure: true\n")),(0,i.kt)("h4",{id:"cache"},(0,i.kt)("inlineCode",{parentName:"h4"},"cache")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#cache",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to cache the task's execution result using our ",(0,i.kt)("a",{parentName:"p",href:"../concepts/cache#hashing"},"smart hashing"),"\nsystem. If disabled, ",(0,i.kt)("em",{parentName:"p"},"will not")," create a cache hash, and ",(0,i.kt)("em",{parentName:"p"},"will not")," persist a task's\n",(0,i.kt)("a",{parentName:"p",href:"#outputs"},"outputs"),". Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"We suggest disabling caching when defining cleanup tasks, one-off scripts, or file system heavy\noperations."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n clean:\n command: 'rm -rf ./temp'\n options:\n cache: false\n")),(0,i.kt)("h4",{id:"envfile"},(0,i.kt)("inlineCode",{parentName:"h4"},"envFile")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#envFile",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A boolean or path to a ",(0,i.kt)("inlineCode",{parentName:"p"},".env")," file (also know as dotenv file) that defines a collection of\n",(0,i.kt)("a",{parentName:"p",href:"#env-1"},"environment variables")," for the current task. Variables will be loaded on project creation,\nbut will ",(0,i.kt)("em",{parentName:"p"},"not")," override those defined in ",(0,i.kt)("a",{parentName:"p",href:"#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env")),"."),(0,i.kt)("p",null,"Variables defined in the file support value substitution/expansion by wrapping the variable name in\ncurly brackets, such as ",(0,i.kt)("inlineCode",{parentName:"p"},"${VAR_NAME}"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n build:\n command: 'webpack'\n options:\n # Defaults to .env\n envFile: true\n # Or\n envFile: '.env.production'\n # Or from the workspace root\n envFile: '/.env.shared'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"File parsing is done using the Rust ",(0,i.kt)("a",{parentName:"p",href:"https://crates.io/crates/dotenvy"},(0,i.kt)("inlineCode",{parentName:"a"},"dotenvy"))," crate, which is\n",(0,i.kt)("em",{parentName:"p"},"different")," than the Node.js ",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/dotenv"},(0,i.kt)("inlineCode",{parentName:"a"},"dotenv"))," package. The biggest\ndifferences are around quote handling and variable substitution, so be aware of this!")),(0,i.kt)("h4",{id:"interactive"},(0,i.kt)("inlineCode",{parentName:"h4"},"interactive"),(0,i.kt)(l.Z,{version:"1.12.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#interactive",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Marks the task as interactive. ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task#interactive"},"Interactive tasks")," run in isolation so\nthat they can interact with stdin."),(0,i.kt)("p",null,"This setting also disables caching, turns of CI, and other functionality, similar to the\n",(0,i.kt)("a",{parentName:"p",href:"#local"},(0,i.kt)("inlineCode",{parentName:"a"},"local"))," setting."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n init:\n # ...\n options:\n interactive: true\n")),(0,i.kt)("h4",{id:"mergeargs"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeArgs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeArgs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#args"},(0,i.kt)("inlineCode",{parentName:"a"},"args")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergedeps"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeDeps")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeDeps",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#deps"},(0,i.kt)("inlineCode",{parentName:"a"},"deps")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergeenv"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeEnv")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeEnv",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env")),' map with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergeinputs"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeInputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeInputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergeoutputs"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeOutputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeOutputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#outputs"},(0,i.kt)("inlineCode",{parentName:"a"},"outputs")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"outputstyle"},(0,i.kt)("inlineCode",{parentName:"h4"},"outputStyle")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#outputStyle",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Controls how stdout/stderr is displayed when the task is ran as a ",(0,i.kt)("em",{parentName:"p"},"transitive target"),". By default,\nthis setting is not defined and defers to the action pipeline, but can be overridden with one of the\nfollowing values:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"buffer")," - Buffers output and displays after the task has exited (either success or failure)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"buffer-only-failure")," - Like ",(0,i.kt)("inlineCode",{parentName:"li"},"buffer"),", but only displays on failures."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," - Ignores output and only displays the generated ",(0,i.kt)("a",{parentName:"li",href:"../concepts/cache#hashing"},"hash"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"none")," - Ignores output."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"stream")," - Streams output directly to the terminal. Will prefix each line of output with the\ntarget.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n test:\n # ...\n options:\n outputStyle: 'stream'\n")),(0,i.kt)("h4",{id:"persistent"},(0,i.kt)("inlineCode",{parentName:"h4"},"persistent"),(0,i.kt)(l.Z,{version:"1.6.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#persistent",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Marks the task as persistent (continuously running). ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task#persistent"},"Persistent tasks"),"\nare handled differently than non-persistent tasks in the action graph. When running a target, all\npersistent tasks are ",(0,i.kt)("em",{parentName:"p"},"ran last")," and ",(0,i.kt)("em",{parentName:"p"},"in parallel"),", after all their dependencies have completed."),(0,i.kt)("p",null,"This is extremely useful for running a server (or a watcher) in the background while other tasks are\nrunning."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n dev:\n # ...\n options:\n persistent: true\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"We suggest using the ",(0,i.kt)("a",{parentName:"p",href:"#local"},(0,i.kt)("inlineCode",{parentName:"a"},"local"))," setting instead, which enables this setting, amongst other\nuseful settings.")),(0,i.kt)("h4",{id:"retrycount"},(0,i.kt)("inlineCode",{parentName:"h4"},"retryCount")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#retryCount",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The number of attempts the task will retry execution before returning a failure. This is especially\nuseful for flaky tasks. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"0"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n test:\n # ...\n options:\n retryCount: 3\n")),(0,i.kt)("h4",{id:"rundepsinparallel"},(0,i.kt)("inlineCode",{parentName:"h4"},"runDepsInParallel")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#runDepsInParallel",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to run the task's direct ",(0,i.kt)("a",{parentName:"p",href:"#deps"},(0,i.kt)("inlineCode",{parentName:"a"},"deps"))," in parallel or serial (in order). Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"When disabled, this ",(0,i.kt)("em",{parentName:"p"},"does not")," run dependencies of dependencies in serial, only direct dependencies."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {8}',title:'"moon.yml"',"{8}":!0},"tasks:\n start:\n # ...\n deps:\n - '~:clean'\n - '~:build'\n options:\n runDepsInParallel: false\n")),(0,i.kt)("h4",{id:"runinci"},(0,i.kt)("inlineCode",{parentName:"h4"},"runInCI")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#runInCI",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to run the task automatically in a CI (continuous integration) environment when affected by\ntouched files, typically through the ",(0,i.kt)("a",{parentName:"p",href:"../commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," command. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," unless\nthe ",(0,i.kt)("a",{parentName:"p",href:"#local"},(0,i.kt)("inlineCode",{parentName:"a"},"local"))," setting is disabled, but is ",(0,i.kt)("em",{parentName:"p"},"always")," true when a task defines\n",(0,i.kt)("a",{parentName:"p",href:"#outputs"},(0,i.kt)("inlineCode",{parentName:"a"},"outputs")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n build:\n # ...\n options:\n runInCI: false\n")),(0,i.kt)("h4",{id:"runfromworkspaceroot"},(0,i.kt)("inlineCode",{parentName:"h4"},"runFromWorkspaceRoot")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#runFromWorkspaceRoot",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to use the workspace root as the working directory when executing a task. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"false")," and runs from the task's project root."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n typecheck:\n # ...\n options:\n runFromWorkspaceRoot: true\n")),(0,i.kt)("h4",{id:"shell"},(0,i.kt)("inlineCode",{parentName:"h4"},"shell")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#shell",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"For ",(0,i.kt)("a",{parentName:"p",href:"#platform-1"},"system tasks"),", whether to run the command within a shell or not. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"On Unix, will derive the shell from the ",(0,i.kt)("inlineCode",{parentName:"li"},"SHELL")," environment variable, or default to ",(0,i.kt)("inlineCode",{parentName:"li"},"/bin/sh"),". The\nshell will be ran using the ",(0,i.kt)("inlineCode",{parentName:"li"},"-c")," option."),(0,i.kt)("li",{parentName:"ul"},"On Windows, will use ",(0,i.kt)("inlineCode",{parentName:"li"},"pwsh.exe")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"powershell.exe"),". The shell will be ran using the ",(0,i.kt)("inlineCode",{parentName:"li"},"-Command"),"\noption, coupled with ",(0,i.kt)("inlineCode",{parentName:"li"},"-"),", so that args are passed via stdin.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-5}',title:'"moon.yml"',"{3-5}":!0},"tasks:\n native:\n command: 'echo $SHELL'\n options:\n shell: true\n")),(0,i.kt)("p",null,"If you'd like to use a different shell, or customize the shell's arguments, you can set ",(0,i.kt)("inlineCode",{parentName:"p"},"shell")," to\nfalse and configure a fully qualified command."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-5}',title:'"moon.yml"',"{3-5}":!0},"tasks:\n native:\n command: '/bin/zsh -c \"echo $SHELL\"'\n options:\n shell: false\n")),(0,i.kt)("h2",{id:"overrides"},"Overrides"),(0,i.kt)("p",null,"Dictates how a project interacts with settings defined at the top-level."),(0,i.kt)("h2",{id:"toolchain"},(0,i.kt)("inlineCode",{parentName:"h2"},"toolchain")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#toolchain",mdxType:"HeadingApiLink"}),(0,i.kt)("h3",{id:"node"},(0,i.kt)("inlineCode",{parentName:"h3"},"node")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainConfig#node",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Configures Node.js for this project and overrides the top-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#node"},(0,i.kt)("inlineCode",{parentName:"a"},"node"))," setting.\nCurrently, only the Node.js version can be overridden per-project, not the package manager."),(0,i.kt)("h4",{id:"version"},(0,i.kt)("inlineCode",{parentName:"h4"},"version")),(0,i.kt)("p",null,"Defines the explicit Node.js ",(0,i.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version specification")," to\nuse when ",(0,i.kt)("em",{parentName:"p"},"running tasks")," for this project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2,3}',title:'"moon.yml"',"{2,3}":!0},"toolchain:\n node:\n version: '12.12.0'\n")),(0,i.kt)("h3",{id:"rust"},(0,i.kt)("inlineCode",{parentName:"h3"},"rust")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainConfig#rust",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Configures Rust for this project and overrides the top-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#rust"},(0,i.kt)("inlineCode",{parentName:"a"},"rust"))," setting."),(0,i.kt)("h4",{id:"version-1"},(0,i.kt)("inlineCode",{parentName:"h4"},"version")),(0,i.kt)("p",null,"Defines the explicit Rust\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version/channel specification")," to use when ",(0,i.kt)("em",{parentName:"p"},"running\ntasks")," for this project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2,3}',title:'"moon.yml"',"{2,3}":!0},"toolchain:\n rust:\n version: '1.68.0'\n")),(0,i.kt)("h3",{id:"typescript"},(0,i.kt)("inlineCode",{parentName:"h3"},"typescript")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainConfig#typescript",mdxType:"HeadingApiLink"}),(0,i.kt)("h4",{id:"disabled"},(0,i.kt)("inlineCode",{parentName:"h4"},"disabled")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#disabled",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Disables ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#typescript"},"TypeScript support")," entirely for this project. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n disabled: true\n")),(0,i.kt)("h4",{id:"routeoutdirtocache"},(0,i.kt)("inlineCode",{parentName:"h4"},"routeOutDirToCache")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#routeOutDirToCache",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Overrides the workspace-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#routeoutdirtocache"},(0,i.kt)("inlineCode",{parentName:"a"},"routeOutDirToCache"))," setting.\nDefaults to undefined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n routeOutDirToCache: false\n")),(0,i.kt)("h4",{id:"syncprojectreferences"},(0,i.kt)("inlineCode",{parentName:"h4"},"syncProjectReferences")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#syncProjectReferences",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Overrides the workspace-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#syncprojectreferences"},(0,i.kt)("inlineCode",{parentName:"a"},"syncProjectReferences"))," setting.\nDefaults to undefined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n syncProjectReferences: false\n")),(0,i.kt)("h4",{id:"syncprojectreferencestopaths"},(0,i.kt)("inlineCode",{parentName:"h4"},"syncProjectReferencesToPaths")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#syncProjectReferencesToPaths",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Overrides the workspace-level\n",(0,i.kt)("a",{parentName:"p",href:"./toolchain#syncprojectreferencestopaths"},(0,i.kt)("inlineCode",{parentName:"a"},"syncProjectReferencesToPaths"))," setting. Defaults to\nundefined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n syncProjectReferencesToPaths: false\n")),(0,i.kt)("h2",{id:"workspace"},(0,i.kt)("inlineCode",{parentName:"h2"},"workspace")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#workspace",mdxType:"HeadingApiLink"}),(0,i.kt)("h3",{id:"inheritedtasks"},(0,i.kt)("inlineCode",{parentName:"h3"},"inheritedTasks")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectWorkspaceConfig#inheritedTasks",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Provides a layer of control when inheriting tasks from ",(0,i.kt)("a",{parentName:"p",href:"./tasks"},(0,i.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),"."),(0,i.kt)("h4",{id:"exclude"},(0,i.kt)("inlineCode",{parentName:"h4"},"exclude")),(0,i.kt)("p",null,"The optional ",(0,i.kt)("inlineCode",{parentName:"p"},"exclude")," setting permits a project to exclude specific tasks from being inherited. It\naccepts a list of strings, where each string is the name of a global task to exclude."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4}',title:'"moon.yml"',"{4}":!0},"workspace:\n inheritedTasks:\n # Exclude the inherited `test` task for this project\n exclude: ['test']\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Exclusion is applied after inclusion and before renaming.")),(0,i.kt)("h4",{id:"include"},(0,i.kt)("inlineCode",{parentName:"h4"},"include")),(0,i.kt)("p",null,"The optional ",(0,i.kt)("inlineCode",{parentName:"p"},"include")," setting permits a project to ",(0,i.kt)("em",{parentName:"p"},"only")," include specific inherited tasks (works\nlike an allow/white list). It accepts a list of strings, where each string is the name of a global\ntask to include."),(0,i.kt)("p",null,"When this field is not defined, the project will inherit all tasks from the global project config."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,7-9}',title:'"moon.yml"',"{4,7-9}":!0},"workspace:\n inheritedTasks:\n # Include *no* tasks (works like a full exclude)\n include: []\n\n # Only include the `lint` and `test` tasks for this project\n include:\n - 'lint'\n - 'test'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Inclusion is applied before exclusion and renaming.")),(0,i.kt)("h4",{id:"rename"},(0,i.kt)("inlineCode",{parentName:"h4"},"rename")),(0,i.kt)("p",null,"The optional ",(0,i.kt)("inlineCode",{parentName:"p"},"rename")," setting permits a project to rename the inherited task within the current\nproject. It accepts a map of strings, where the key is the original name (found in the global\nproject config), and the value is the new name to use."),(0,i.kt)("p",null,"For example, say we have 2 tasks in the global project config called ",(0,i.kt)("inlineCode",{parentName:"p"},"buildPackage")," and\n",(0,i.kt)("inlineCode",{parentName:"p"},"buildApplication"),", but we only need 1, and since we're an application, we should omit and rename."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"workspace:\n inheritedTasks:\n exclude: ['buildPackage']\n rename:\n buildApplication: 'build'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Renaming occurs after inclusion and exclusion.")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4ec8a4a9.d6d1b4ab.js b/assets/js/4ec8a4a9.d6d1b4ab.js deleted file mode 100644 index 9f38cea0cb4..00000000000 --- a/assets/js/4ec8a4a9.d6d1b4ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[818],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=p(n),u=i,k=c["".concat(s,".").concat(u)]||c[u]||d[u]||o;return n?a.createElement(k,r(r({ref:t},m),{},{components:n})):a.createElement(k,r({ref:t},m))}));function u(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378),i=n(83469),o=n(31792);function r(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:i.dT$}))}},9785:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),i=n(9619);function o(e){let{text:t="Required"}=e;return a.createElement(i.Z,{text:t,variant:"failure",className:"ml-2"})}},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),i=n(9619);function o(e){let{header:t,inline:n,updated:o,version:r}=e;return a.createElement(i.Z,{text:`v${r}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),i=n(40624),o=n(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,i.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?r[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},44501:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>k,frontMatter:()=>s,metadata:()=>m,toc:()=>c});var a=n(25773),i=(n(27378),n(35318)),o=n(32189),r=n(9785),l=n(79022);const s={title:"moon.yml",toc_max_heading_level:6},p=void 0,m={unversionedId:"config/project",id:"config/project",title:"moon.yml",description:"The moon.yml configuration file is not required but can be used to define additional metadata",source:"@site/docs/config/project.mdx",sourceDirName:"config",slug:"/config/project",permalink:"/docs/config/project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/project.mdx",tags:[],version:"current",frontMatter:{title:"moon.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:".moon/tasks...",permalink:"/docs/config/tasks"},next:{title:"template.yml",permalink:"/docs/config/template"}},d={},c=[{value:"<code>dependsOn</code>",id:"dependson",level:2},{value:"Metadata",id:"metadata",level:2},{value:"<code>language</code>",id:"language",level:2},{value:'<code>owners</code><VersionLabel version="1.8.0" />',id:"owners",level:2},{value:'<code>customGroups</code><RequiredLabel text="Bitbucket" />',id:"customgroups",level:3},{value:"<code>defaultOwner</code>",id:"defaultowner",level:3},{value:'<code>optional</code><RequiredLabel text="GitLab" />',id:"optional",level:3},{value:"<code>paths</code>",id:"paths",level:3},{value:'<code>requiredApprovals</code><RequiredLabel text="Bitbucket / GitLab" />',id:"requiredapprovals",level:3},{value:"<code>project</code>",id:"project",level:2},{value:"<code>channel</code>",id:"channel",level:3},{value:"<code>description</code><RequiredLabel />",id:"description",level:3},{value:"<code>maintainers</code>",id:"maintainers",level:3},{value:"<code>name</code>",id:"name",level:3},{value:"<code>owner</code>",id:"owner",level:3},{value:"<code>tags</code>",id:"tags",level:2},{value:"<code>type</code>",id:"type",level:2},{value:"Tasks",id:"tasks",level:2},{value:"<code>env</code>",id:"env",level:2},{value:"<code>fileGroups</code>",id:"filegroups",level:2},{value:"<code>platform</code>",id:"platform",level:2},{value:"<code>tasks</code>",id:"tasks-1",level:2},{value:'<code>extends</code><VersionLabel version="1.12.0" />',id:"extends",level:3},{value:"<code>command</code><RequiredLabel />",id:"command",level:3},{value:"Special commands",id:"special-commands",level:4},{value:"<code>args</code>",id:"args",level:3},{value:"<code>deps</code>",id:"deps",level:3},{value:"<code>env</code>",id:"env-1",level:3},{value:"<code>inputs</code>",id:"inputs",level:3},{value:"<code>local</code>",id:"local",level:3},{value:"<code>outputs</code>",id:"outputs",level:3},{value:"<code>platform</code>",id:"platform-1",level:3},{value:"<code>options</code>",id:"options",level:3},{value:"<code>affectedFiles</code>",id:"affectedfiles",level:4},{value:'<code>allowFailure</code><VersionLabel version="1.13.0" />',id:"allowfailure",level:4},{value:"<code>cache</code>",id:"cache",level:4},{value:"<code>envFile</code>",id:"envfile",level:4},{value:'<code>interactive</code><VersionLabel version="1.12.0" />',id:"interactive",level:4},{value:"<code>mergeArgs</code>",id:"mergeargs",level:4},{value:"<code>mergeDeps</code>",id:"mergedeps",level:4},{value:"<code>mergeEnv</code>",id:"mergeenv",level:4},{value:"<code>mergeInputs</code>",id:"mergeinputs",level:4},{value:"<code>mergeOutputs</code>",id:"mergeoutputs",level:4},{value:"<code>outputStyle</code>",id:"outputstyle",level:4},{value:'<code>persistent</code><VersionLabel version="1.6.0" />',id:"persistent",level:4},{value:"<code>retryCount</code>",id:"retrycount",level:4},{value:"<code>runDepsInParallel</code>",id:"rundepsinparallel",level:4},{value:"<code>runInCI</code>",id:"runinci",level:4},{value:"<code>runFromWorkspaceRoot</code>",id:"runfromworkspaceroot",level:4},{value:"<code>shell</code>",id:"shell",level:4},{value:"Overrides",id:"overrides",level:2},{value:"<code>toolchain</code>",id:"toolchain",level:2},{value:"<code>node</code>",id:"node",level:3},{value:"<code>version</code>",id:"version",level:4},{value:"<code>rust</code>",id:"rust",level:3},{value:"<code>version</code>",id:"version-1",level:4},{value:"<code>typescript</code>",id:"typescript",level:3},{value:"<code>disabled</code>",id:"disabled",level:4},{value:"<code>routeOutDirToCache</code>",id:"routeoutdirtocache",level:4},{value:"<code>syncProjectReferences</code>",id:"syncprojectreferences",level:4},{value:"<code>syncProjectReferencesToPaths</code>",id:"syncprojectreferencestopaths",level:4},{value:"<code>workspace</code>",id:"workspace",level:2},{value:"<code>inheritedTasks</code>",id:"inheritedtasks",level:3},{value:"<code>exclude</code>",id:"exclude",level:4},{value:"<code>include</code>",id:"include",level:4},{value:"<code>rename</code>",id:"rename",level:4}],u={toc:c};function k(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"moon.yml")," configuration file ",(0,i.kt)("em",{parentName:"p"},"is not required")," but can be used to define additional metadata\nfor a project, override inherited tasks, and more at the project-level. When used, this file must\nexist in a project's root, as configured in ",(0,i.kt)("a",{parentName:"p",href:"./workspace#projects"},(0,i.kt)("inlineCode",{parentName:"a"},"projects")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"$schema: 'https://moonrepo.dev/schemas/project.json'\n")),(0,i.kt)("h2",{id:"dependson"},(0,i.kt)("inlineCode",{parentName:"h2"},"dependsOn")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#dependsOn",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Explicitly defines ",(0,i.kt)("em",{parentName:"p"},"other")," projects that ",(0,i.kt)("em",{parentName:"p"},"this")," project depends on, primarily when generating the\nproject and task graphs. The most common use case for this is building those projects ",(0,i.kt)("em",{parentName:"p"},"before"),"\nbuilding this one. When defined, this setting requires an array of project names, which are the keys\nfound in the ",(0,i.kt)("a",{parentName:"p",href:"./workspace#projects"},(0,i.kt)("inlineCode",{parentName:"a"},"projects"))," map."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'apiClients'\n - 'designSystem'\n")),(0,i.kt)("p",null,"A dependency object can also be defined, where a specific ",(0,i.kt)("inlineCode",{parentName:"p"},"scope"),' can be assigned, which accepts\n"production" (default), "development", "build", or "peer".'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - id: 'apiClients'\n scope: 'production'\n - id: 'designSystem'\n scope: 'peer'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Learn more about ",(0,i.kt)("a",{parentName:"p",href:"../concepts/project#dependencies"},"implicit and explicit dependencies"),".")),(0,i.kt)("h2",{id:"metadata"},"Metadata"),(0,i.kt)("h2",{id:"language"},(0,i.kt)("inlineCode",{parentName:"h2"},"language")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#language",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The primary programming language the project is written in. This setting is required for\n",(0,i.kt)("a",{parentName:"p",href:"./tasks"},"task inheritance"),", editor extensions, and more. Supports the following values:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"bash")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Bash_(Unix_shell)"},"Bash")," based project (Unix only)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"batch")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://en.wikibooks.org/wiki/Windows_Batch_Scripting"},"Batch"),"/PowerShell based\nproject (Windows only)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"go")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://go.dev/"},"Go")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"javascript")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript"},"JavaScript")," based\nproject."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"php")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.php.net"},"PHP")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"python")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.python.org/"},"Python")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ruby")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.ruby-lang.org/en/"},"Ruby")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"rust")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.rust-lang.org/"},"Rust")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"typescript")," - A ",(0,i.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/"},"TypeScript")," based project."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"unknown")," (default) - When not configured or inferred."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"*")," - A custom language. Values will be converted to kebab-case.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'javascript'\n\n# Custom\nlanguage: 'kotlin'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"For convenience, when this setting is not defined, moon will attempt to detect the language based\non configuration files found in the project root. This only applies to non-custom languages!")),(0,i.kt)("h2",{id:"owners"},(0,i.kt)("inlineCode",{parentName:"h2"},"owners"),(0,i.kt)(l.Z,{version:"1.8.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#owners",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Defines ownership of source code within the current project, by mapping file system paths to owners.\nAn owner is either a user, team, or group."),(0,i.kt)("p",null,"Currently supports\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners"},"GitHub"),",\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html"},"GitLab"),", and\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.atlassian.com/apps/1218598/code-owners-for-bitbucket?tab=overview&hosting=cloud"},"Bitbucket"),"\n(via app)."),(0,i.kt)("h3",{id:"customgroups"},(0,i.kt)("inlineCode",{parentName:"h3"},"customGroups"),(0,i.kt)(r.Z,{text:"Bitbucket",mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#customGroups",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"When using the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.atlassian.com/apps/1218598/code-owners-for-bitbucket?tab=overview&hosting=cloud"},"Code Owners for Bitbucket"),"\napp, this setting provides a way to define custom groups that will be injected at the top of the\n",(0,i.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file. These groups ",(0,i.kt)("em",{parentName:"p"},"must")," be unique across all projects."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2,3}',title:'"moon.yml"',"{2,3}":!0},"owners:\n customGroups:\n '@@@backend': ['@\"user name\"', '@@team']\n")),(0,i.kt)("h3",{id:"defaultowner"},(0,i.kt)("inlineCode",{parentName:"h3"},"defaultOwner")),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#defaultOwner",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The default owner for all ",(0,i.kt)("a",{parentName:"p",href:"#paths"},(0,i.kt)("inlineCode",{parentName:"a"},"paths")),". This setting is optional in some cases but helps to\navoid unnecessary repetition."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"owners:\n defaultOwner: '@frontend'\n")),(0,i.kt)("h3",{id:"optional"},(0,i.kt)("inlineCode",{parentName:"h3"},"optional"),(0,i.kt)(r.Z,{text:"GitLab",mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#optional",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"For GitLab, marks the project's\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html#optional-sections"},"code owners section"),"\nas optional. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"owners:\n optional: true\n")),(0,i.kt)("h3",{id:"paths"},(0,i.kt)("inlineCode",{parentName:"h3"},"paths")),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#paths",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The primary setting for defining ownership of source code within the current project. This setting\nsupports 2 formats, the first being a list of file paths relative from the current project. This\nformat requires ",(0,i.kt)("a",{parentName:"p",href:"#defaultowner"},(0,i.kt)("inlineCode",{parentName:"a"},"defaultOwner"))," to be defined, and only supports 1 owner for every\npath (the default owner)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-5}',title:'"moon.yml"',"{3-5}":!0},"owners:\n defaultOwner: '@frontend'\n paths:\n - '**/*.ts'\n - '**/*.tsx'\n - '*.config.js'\n")),(0,i.kt)("p",null,"The second format provides far more granularity, allowing for multiple owners per path. This format\nrequires a map, where the key is a file path relative from the current project, and the value is a\nlist of owners. Paths with an empty list of owners will fallback to ",(0,i.kt)("a",{parentName:"p",href:"#defaultowner"},(0,i.kt)("inlineCode",{parentName:"a"},"defaultOwner")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-6}',title:'"moon.yml"',"{3-6}":!0},"owners:\n defaultOwner: '@frontend'\n paths:\n '**/*.rs': ['@backend']\n '**/*.js': []\n '*.config.js': ['@frontend', '@frontend-infra']\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"The syntax for owners is dependent on the provider you are using for version control (GitHub,\nGitLab, Bitbucket). moon provides no validation or guarantees that these are correct.")),(0,i.kt)("h3",{id:"requiredapprovals"},(0,i.kt)("inlineCode",{parentName:"h3"},"requiredApprovals"),(0,i.kt)(r.Z,{text:"Bitbucket / GitLab",mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/OwnersConfig#requiredApprovals",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Requires a specific number of approvals for a pull/merge request to be satisfied. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"1"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"For Bitbucket, defines the\n",(0,i.kt)("a",{parentName:"li",href:"https://docs.mibexsoftware.com/codeowners/merge-checks#MergeChecks-2.MergeChecks:HowmanyoftheseCodeOwnersneedtoapprovebeforeapullrequestcanbemerged?"},(0,i.kt)("inlineCode",{parentName:"a"},"Check()")," condition"),"\nwhen using a ",(0,i.kt)("a",{parentName:"li",href:"#defaultowner"},(0,i.kt)("inlineCode",{parentName:"a"},"defaultOwner")),"."),(0,i.kt)("li",{parentName:"ul"},"For GitLab, defines a requirement on the\n",(0,i.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html#sections-requiring-multiple-approvals"},"code owners section"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"owners:\n requiredApprovals: 2\n")),(0,i.kt)("h2",{id:"project"},(0,i.kt)("inlineCode",{parentName:"h2"},"project")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#project",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"project")," setting defines metadata about the project itself."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"project:\n name: 'moon'\n description: 'A monorepo management tool.'\n channel: '#moon'\n owner: 'infra.platform'\n maintainers: ['miles.johnson']\n")),(0,i.kt)("p",null,"The information listed within ",(0,i.kt)("inlineCode",{parentName:"p"},"project")," is purely informational and primarily displayed within the\nCLI. However, this setting exists for you, your team, and your company, as a means to identify and\norganize all projects. Feel free to build your own tooling around these settings!"),(0,i.kt)("h3",{id:"channel"},(0,i.kt)("inlineCode",{parentName:"h3"},"channel")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#channel",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The Slack, Discord, Teams, IRC, etc channel name (with leading #) in which to discuss the project."),(0,i.kt)("h3",{id:"description"},(0,i.kt)("inlineCode",{parentName:"h3"},"description"),(0,i.kt)(r.Z,{mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#description",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A description of what the project does and aims to achieve. Be as descriptive as possible, as this\nis the kind of information search engines would index on."),(0,i.kt)("h3",{id:"maintainers"},(0,i.kt)("inlineCode",{parentName:"h3"},"maintainers")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#maintainers",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A list of people/developers that maintain the project, review code changes, and can provide support.\nCan be a name, email, LDAP name, GitHub username, etc, the choice is yours."),(0,i.kt)("h3",{id:"name"},(0,i.kt)("inlineCode",{parentName:"h3"},"name")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#name",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A human readable name of the project. This is ",(0,i.kt)("em",{parentName:"p"},"different")," from the unique project name configured in\n",(0,i.kt)("a",{parentName:"p",href:"./workspace#projects"},(0,i.kt)("inlineCode",{parentName:"a"},"projects")),"."),(0,i.kt)("h3",{id:"owner"},(0,i.kt)("inlineCode",{parentName:"h3"},"owner")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#owner",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The team or organization that owns the project. Can be a title, LDAP name, GitHub team, etc. We\nsuggest ",(0,i.kt)("em",{parentName:"p"},"not")," listing people/developers as the owner, use ",(0,i.kt)("a",{parentName:"p",href:"#maintainers"},"maintainers")," instead."),(0,i.kt)("h2",{id:"tags"},(0,i.kt)("inlineCode",{parentName:"h2"},"tags")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#tags",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Tags are a simple mechanism for categorizing projects. They can be used to group projects together\nfor ",(0,i.kt)("a",{parentName:"p",href:"../commands/query/projects"},"easier querying"),", enforcing of\n",(0,i.kt)("a",{parentName:"p",href:"./workspace#constraints"},"project boundaries and constraints"),",\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance"},"task inheritance"),", and more."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tags:\n - 'react'\n - 'prisma'\n")),(0,i.kt)("h2",{id:"type"},(0,i.kt)("inlineCode",{parentName:"h2"},"type")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectMetadataConfig#type",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The type of project. Supports the following values:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"application")," - A backend, frontend, or CLI application."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"library")," - A self-contained, shareable, and publishable set of code."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"tool")," - An internal tool, one-off script, etc."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"unknown")," (default) - When not configured.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"type: 'application'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Project type is used in task inheritance, constraints and boundaries, editor extensions, and more!")),(0,i.kt)("h2",{id:"tasks"},"Tasks"),(0,i.kt)("h2",{id:"env"},(0,i.kt)("inlineCode",{parentName:"h2"},"env")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#env",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"env")," field is map of strings that are passed as environment variables to ",(0,i.kt)("em",{parentName:"p"},"all tasks")," within the\ncurrent project. Project-level variables will not override task-level variables of the same name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {1,2}',title:'"moon.yml"',"{1,2}":!0},"env:\n NODE_ENV: 'production'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"View the task ",(0,i.kt)("a",{parentName:"p",href:"#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env"))," setting for more usage examples and information.")),(0,i.kt)("h2",{id:"filegroups"},(0,i.kt)("inlineCode",{parentName:"h2"},"fileGroups")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#fileGroups",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Defines ",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-group"},"file groups")," to be used by local tasks. By default, this setting\n",(0,i.kt)("em",{parentName:"p"},"is not required")," for the following reasons:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"File groups are an optional feature, and are designed for advanced use cases."),(0,i.kt)("li",{parentName:"ul"},"File groups defined in ",(0,i.kt)("a",{parentName:"li",href:"./tasks"},(0,i.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," will be inherited by all projects.")),(0,i.kt)("p",null,"When defined this setting requires a map, where the key is the file group name, and the value is a\nlist of ",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-pattern"},"globs or paths"),". Globs and paths are\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-pattern#project-relative"},"relative to a project")," (even when defined\n",(0,i.kt)("a",{parentName:"p",href:"./tasks"},"globally"),")."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"fileGroups:\n configs:\n - '*.config.{js,cjs,mjs}'\n - '*.json'\n sources:\n - 'src/**/*'\n - 'types/**/*'\n tests:\n - 'tests/**/*'\n - '**/__tests__/**/*'\n assets:\n - 'assets/**/*'\n - 'images/**/*'\n - 'static/**/*'\n - '**/*.{scss,css}'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"The code snippet above is merely an example of file groups. Feel free to use those groups as-is,\nmodify the glob lists, add and remove groups, or implement completely new groups. The choice is\nyours!")),(0,i.kt)("h2",{id:"platform"},(0,i.kt)("inlineCode",{parentName:"h2"},"platform")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#platform",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The default ",(0,i.kt)("a",{parentName:"p",href:"#platform-1"},(0,i.kt)("inlineCode",{parentName:"a"},"platform"))," for all task's within the current project. When a task's\n",(0,i.kt)("inlineCode",{parentName:"p"},"platform")," has ",(0,i.kt)("em",{parentName:"p"},"not been")," explicitly configured, the platform will fallback to this configured\nvalue, otherwise the platform will be detected from the project's environment."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"platform: 'node'\n")),(0,i.kt)("h2",{id:"tasks-1"},(0,i.kt)("inlineCode",{parentName:"h2"},"tasks")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#tasks",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Tasks are actions that are ran within the context of a ",(0,i.kt)("a",{parentName:"p",href:"../concepts/project"},"project"),", and commonly\nwrap an npm binary or system command. This setting requires a map, where the key is a unique name\nfor the task, and the value is an object of task parameters."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n format:\n command: 'prettier'\n lint:\n command: 'eslint'\n test:\n command: 'jest'\n typecheck:\n command: 'tsc'\n")),(0,i.kt)("h3",{id:"extends"},(0,i.kt)("inlineCode",{parentName:"h3"},"extends"),(0,i.kt)(l.Z,{version:"1.12.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#extends",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"extends")," field can be used to extend the settings from a sibling task within the same project,\nor ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance"},"inherited from the global scope"),". This is useful for composing\nsimilar tasks with different arguments or options."),(0,i.kt)("p",null,"When extending another task, the same\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"merge strategies")," used for inheritance are applied."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint .'\n inputs:\n - 'src/**/*'\n\n lint-fix:\n extends: 'lint'\n args: '--fix'\n local: true\n")),(0,i.kt)("h3",{id:"command"},(0,i.kt)("inlineCode",{parentName:"h3"},"command"),(0,i.kt)(r.Z,{mdxType:"RequiredLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#command",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"command")," field is the command line to run for the task, including the command name (must be\nfirst) and any optional ",(0,i.kt)("a",{parentName:"p",href:"#args"},"arguments"),". This field is required when ",(0,i.kt)("em",{parentName:"p"},"not")," inheriting a global\ntask of the same name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3}',title:'"moon.yml"',"{3}":!0},"tasks:\n format:\n # Using a string\n command: 'prettier --check .'\n # Using an array\n command:\n - 'prettier'\n - '--check'\n - '.'\n")),(0,i.kt)("p",null,"By default a task assumes the command name is an npm binary, and if you'd like to reference a system\ncommand, you'll also need to set the ",(0,i.kt)("a",{parentName:"p",href:"#platform"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),' to "system". We do our best to\nautomatically detect this, but it\'s not accurate in all scenarios.'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n clean:\n command: 'rm -rf ./dist'\n platform: 'system'\n")),(0,i.kt)("h4",{id:"special-commands"},"Special commands"),(0,i.kt)("p",null,"For interoperability reasons, the following command names have special handling."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"noop"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"no-op"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"nop"),' - Marks the task as a "no operation". Will not execute a command in the\naction pipeline but can define dependencies.'),(0,i.kt)("li",{parentName:"ul"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"platform"),' is "deno":',(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Will execute with ",(0,i.kt)("inlineCode",{parentName:"li"},"deno")," binary."))),(0,i.kt)("li",{parentName:"ul"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"platform"),' is "node":',(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"node"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"npm"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"pnpm"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"yarn")," - Uses the binaries from the toolchain."))),(0,i.kt)("li",{parentName:"ul"},"When ",(0,i.kt)("inlineCode",{parentName:"li"},"platform"),' is "rust":',(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Will execute with ",(0,i.kt)("inlineCode",{parentName:"li"},"cargo")," binary.")))),(0,i.kt)("h3",{id:"args"},(0,i.kt)("inlineCode",{parentName:"h3"},"args")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#args",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"args")," field is a collection of ",(0,i.kt)("em",{parentName:"p"},"additional")," arguments to pass to the command line when\nexecuting the task. This field exists purely to provide arguments for\n",(0,i.kt)("a",{parentName:"p",href:"./tasks#tasks"},"inherited tasks"),"."),(0,i.kt)("p",null,"This setting can be defined using a string, or an array of strings. We suggest using arrays when\ndealing with many args, or the args string cannot be parsed easily."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n test:\n command: 'jest'\n # Using a string\n args: '--color --maxWorkers 3'\n # Using an array\n args:\n - '--color'\n - '--maxWorkers'\n - '3'\n")),(0,i.kt)("p",null,"However, for the array approach to work correctly, each argument ",(0,i.kt)("em",{parentName:"p"},"must")," be its own distinct item,\nincluding argument values. For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n test:\n command: 'jest'\n args:\n # Valid\n - '--maxWorkers'\n - '3'\n # Also valid\n - '--maxWorkers=3'\n # Invalid\n - '--maxWorkers 3'\n")),(0,i.kt)("h3",{id:"deps"},(0,i.kt)("inlineCode",{parentName:"h3"},"deps")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#deps",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"deps")," field is a list of other tasks (known as ",(0,i.kt)("a",{parentName:"p",href:"../concepts/target"},"targets"),"), either within\nthis project or found in another project, that will be executed ",(0,i.kt)("em",{parentName:"p"},"before")," this task. It achieves this\nby generating a directed task graph based on the project graph."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4-6}',title:'"moon.yml"',"{4-6}":!0},"tasks:\n build:\n command: 'webpack'\n deps:\n - 'apiClients:build'\n - 'designSystem:build'\n # A task within the current project\n - 'codegen'\n")),(0,i.kt)("h3",{id:"env-1"},(0,i.kt)("inlineCode",{parentName:"h3"},"env")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#env",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"env")," field is map of strings that are passed as environment variables when running the command.\nVariables defined here will take precedence over those loaded with ",(0,i.kt)("a",{parentName:"p",href:"#envfile"},(0,i.kt)("inlineCode",{parentName:"a"},"envFile")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n env:\n NODE_ENV: 'production'\n")),(0,i.kt)("p",null,"Variables also support substitution using the syntax ",(0,i.kt)("inlineCode",{parentName:"p"},"${VAR_NAME}"),". When using substitution, only\nvariables in the current process can be referenced, and not those currently defined in ",(0,i.kt)("inlineCode",{parentName:"p"},"env"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n env:\n APP_TARGET: '${REGION}-${ENVIRONMENT}'\n")),(0,i.kt)("h3",{id:"inputs"},(0,i.kt)("inlineCode",{parentName:"h3"},"inputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#inputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"inputs")," field is a list of sources that calculate whether to execute this task based on the\nenvironment and files that have been touched since the last time the task has been ran. If ",(0,i.kt)("em",{parentName:"p"},"not"),"\ndefined or inherited, then all files within a project are considered an input (",(0,i.kt)("inlineCode",{parentName:"p"},"**/*"),")."),(0,i.kt)("p",null,"Inputs support the following source types:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Environment variables (must start with a ",(0,i.kt)("inlineCode",{parentName:"li"},"$"),")"),(0,i.kt)("li",{parentName:"ul"},"Files, folders, globs\n(",(0,i.kt)("a",{parentName:"li",href:"../concepts/file-pattern#project-relative"},"project and workspace relative file patterns"),")")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4-10}',title:'"moon.yml"',"{4-10}":!0},"tasks:\n lint:\n command: 'eslint'\n inputs:\n # Config files anywhere within the project\n - '**/.eslintignore'\n - '**/.eslintrc.js'\n # Config files at the workspace root\n - '/.eslintignore'\n - '/.eslintrc.js'\n # Environment variables\n - '$ESLINT_CACHE'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"When using an environment variable, we assume ",(0,i.kt)("em",{parentName:"p"},"it's not defined")," by default, and will trigger an\naffected state when it ",(0,i.kt)("em",{parentName:"p"},"is")," defined. If the environment variable always exists, then the task will\nalways run and bypass the cache.")),(0,i.kt)("admonition",{type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"When using globs, be aware that files that match the glob, but are ignored via ",(0,i.kt)("inlineCode",{parentName:"p"},".gitignore")," (or\nsimilar), will ",(0,i.kt)("em",{parentName:"p"},"not")," be considered an input. To work around this, use explicit file inputs.")),(0,i.kt)("h3",{id:"local"},(0,i.kt)("inlineCode",{parentName:"h3"},"local")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#local",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Marks the task as local only. This should primarily be enabled for long-running or never-ending\ntasks, like development servers and watch mode. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),' if the task name is "dev",\n"start", or "serve", and ',(0,i.kt)("inlineCode",{parentName:"p"},"false")," otherwise."),(0,i.kt)("p",null,"This is a convenience setting for local development that sets the following task options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#cache"},(0,i.kt)("inlineCode",{parentName:"a"},"cache"))," -> Turned off"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#outputstyle"},(0,i.kt)("inlineCode",{parentName:"a"},"outputStyle")),' -> Set to "stream"'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#persistent"},(0,i.kt)("inlineCode",{parentName:"a"},"persistent"))," -> Turned on"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#runinci"},(0,i.kt)("inlineCode",{parentName:"a"},"runInCI"))," -> Turned off")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n dev:\n command: 'webpack server'\n local: true\n")),(0,i.kt)("h3",{id:"outputs"},(0,i.kt)("inlineCode",{parentName:"h3"},"outputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#outputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"outputs")," field is a list of ",(0,i.kt)("a",{parentName:"p",href:"../concepts/file-pattern#project-relative"},"files and folders")," that\nare ",(0,i.kt)("em",{parentName:"p"},"created")," as a result of executing this task, typically from a build or compilation related\ntask. Outputs are necessary for ",(0,i.kt)("a",{parentName:"p",href:"../concepts/cache"},"incremental caching and hydration"),". If you'd\nprefer to avoid that functionality, omit this field."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4-6}',title:'"moon.yml"',"{4-6}":!0},"tasks:\n build:\n command: 'webpack'\n outputs:\n # Relative from project root\n - 'build/'\n")),(0,i.kt)("p",null,"Globs can also be used if you'd like to restrict which files are cached. For example, when building\na JavaScript project, you may want to include ",(0,i.kt)("inlineCode",{parentName:"p"},".js")," files, but exclude ",(0,i.kt)("inlineCode",{parentName:"p"},".map")," and other files."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"tasks:\n build:\n command: 'webpack'\n outputs:\n - 'build/**/*.js'\n - '!build/internal.js'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"When using globs and moon hydrates an output (a cache hit), all files not matching the glob will be\n",(0,i.kt)("strong",{parentName:"p"},"deleted"),". Ensure that all files critical for the build to function correctly are included.")),(0,i.kt)("h3",{id:"platform-1"},(0,i.kt)("inlineCode",{parentName:"h3"},"platform")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#platform",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"platform")," field defines the platform (language runtime) the command runs on, where to locate\nits executable, and which tool to execute it with. By default moon will set to a value based on the\nproject's ",(0,i.kt)("a",{parentName:"p",href:"#language"},(0,i.kt)("inlineCode",{parentName:"a"},"language"))," or default ",(0,i.kt)("a",{parentName:"p",href:"#platform"},(0,i.kt)("inlineCode",{parentName:"a"},"platform")),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"deno")," - Command is executed with Deno, or is a Deno binary located in ",(0,i.kt)("inlineCode",{parentName:"li"},"~/.deno/bin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"node")," - Command is a binary within ",(0,i.kt)("inlineCode",{parentName:"li"},"node_modules")," and will be executed with Node.js."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"rust")," - Command is executed with Cargo, or is a Cargo binary located in ",(0,i.kt)("inlineCode",{parentName:"li"},"~/.cargo/bin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"system")," - Command is expected to exist within the system's environment / user's shell."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"unknown")," - When not configured or inferred.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4}',title:'"moon.yml"',"{4}":!0},"tasks:\n env:\n command: 'printenv'\n platform: 'system'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"This field exists because of our ",(0,i.kt)("a",{parentName:"p",href:"../concepts/toolchain"},"toolchain"),", and moon ensuring the correct\ncommand is ran.")),(0,i.kt)("h3",{id:"options"},(0,i.kt)("inlineCode",{parentName:"h3"},"options")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskConfig#options",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"options")," field is an object of configurable options that can be used to modify the task and its\nexecution. The following fields can be provided, with merge related fields supporting all\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"merge strategies"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6-8}',title:'"moon.yml"',"{6-8}":!0},"tasks:\n typecheck:\n command: 'tsc --noEmit'\n options:\n mergeArgs: 'replace'\n runFromWorkspaceRoot: true\n")),(0,i.kt)("h4",{id:"affectedfiles"},(0,i.kt)("inlineCode",{parentName:"h4"},"affectedFiles")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#affectedFiles",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"When enabled and the ",(0,i.kt)("a",{parentName:"p",href:"../run-task#running-based-on-affected-files-only"},(0,i.kt)("inlineCode",{parentName:"a"},"--affected")," option")," is\nprovided, all affected files that match this task's ",(0,i.kt)("a",{parentName:"p",href:"#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs"))," will be passed as relative\nfile paths as command line arguments, and as a ",(0,i.kt)("inlineCode",{parentName:"p"},"MOON_AFFECTED_FILES")," environment variable. If there\nare no affected files, ",(0,i.kt)("inlineCode",{parentName:"p"},".")," (current directory) will be passed instead for arguments, and an empty\nvalue for the environment variable."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n lint:\n command: 'eslint'\n options:\n affectedFiles: true\n # Only pass args\n affectedFiles: 'args'\n # Only set env var\n affectedFiles: 'env'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"When using this option, ensure that explicit files or ",(0,i.kt)("inlineCode",{parentName:"p"},".")," ",(0,i.kt)("em",{parentName:"p"},"are not present")," in the ",(0,i.kt)("a",{parentName:"p",href:"#args"},(0,i.kt)("inlineCode",{parentName:"a"},"args")),"\nlist. Furthermore, this functionality will only work if the task's command supports an arbitrary\nlist of files being passed as arguments.")),(0,i.kt)("h4",{id:"allowfailure"},(0,i.kt)("inlineCode",{parentName:"h4"},"allowFailure"),(0,i.kt)(l.Z,{version:"1.13.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#allowFailure",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Allows a task to fail without failing the entire pipeline. When enabled, the following changes\noccur:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Other tasks ",(0,i.kt)("em",{parentName:"li"},"cannot")," depend on this task, as we can't ensure it's side-effect free."),(0,i.kt)("li",{parentName:"ul"},"For ",(0,i.kt)("a",{parentName:"li",href:"../commands/run"},(0,i.kt)("inlineCode",{parentName:"a"},"moon run")),", the process will not bail early and will run to completion."),(0,i.kt)("li",{parentName:"ul"},"For ",(0,i.kt)("a",{parentName:"li",href:"../commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci")),", the process will not exit with a non-zero exit code, if the only\nfailing tasks are allowed to fail.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint'\n options:\n allowFailure: true\n")),(0,i.kt)("h4",{id:"cache"},(0,i.kt)("inlineCode",{parentName:"h4"},"cache")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#cache",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to cache the task's execution result using our ",(0,i.kt)("a",{parentName:"p",href:"../concepts/cache#hashing"},"smart hashing"),"\nsystem. If disabled, ",(0,i.kt)("em",{parentName:"p"},"will not")," create a cache hash, and ",(0,i.kt)("em",{parentName:"p"},"will not")," persist a task's\n",(0,i.kt)("a",{parentName:"p",href:"#outputs"},"outputs"),". Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"We suggest disabling caching when defining cleanup tasks, one-off scripts, or file system heavy\noperations."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n clean:\n command: 'rm -rf ./temp'\n options:\n cache: false\n")),(0,i.kt)("h4",{id:"envfile"},(0,i.kt)("inlineCode",{parentName:"h4"},"envFile")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#envFile",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"A boolean or path to a ",(0,i.kt)("inlineCode",{parentName:"p"},".env")," file (also know as dotenv file) that defines a collection of\n",(0,i.kt)("a",{parentName:"p",href:"#env-1"},"environment variables")," for the current task. Variables will be loaded on project creation,\nbut will ",(0,i.kt)("em",{parentName:"p"},"not")," override those defined in ",(0,i.kt)("a",{parentName:"p",href:"#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env")),"."),(0,i.kt)("p",null,"Variables defined in the file support value substitution/expansion by wrapping the variable name in\ncurly brackets, such as ",(0,i.kt)("inlineCode",{parentName:"p"},"${VAR_NAME}"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {6}',title:'"moon.yml"',"{6}":!0},"tasks:\n build:\n command: 'webpack'\n options:\n # Defaults to .env\n envFile: true\n # Or\n envFile: '.env.production'\n # Or from the workspace root\n envFile: '/.env.shared'\n")),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"File parsing is done using the Rust ",(0,i.kt)("a",{parentName:"p",href:"https://crates.io/crates/dotenvy"},(0,i.kt)("inlineCode",{parentName:"a"},"dotenvy"))," crate, which is\n",(0,i.kt)("em",{parentName:"p"},"different")," than the Node.js ",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/dotenv"},(0,i.kt)("inlineCode",{parentName:"a"},"dotenv"))," package. The biggest\ndifferences are around quote handling and variable substitution, so be aware of this!")),(0,i.kt)("h4",{id:"interactive"},(0,i.kt)("inlineCode",{parentName:"h4"},"interactive"),(0,i.kt)(l.Z,{version:"1.12.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#interactive",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Marks the task as interactive. ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task#interactive"},"Interactive tasks")," run in isolation so\nthat they can interact with stdin."),(0,i.kt)("p",null,"This setting also disables caching, turns of CI, and other functionality, similar to the\n",(0,i.kt)("a",{parentName:"p",href:"#local"},(0,i.kt)("inlineCode",{parentName:"a"},"local"))," setting."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n init:\n # ...\n options:\n interactive: true\n")),(0,i.kt)("h4",{id:"mergeargs"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeArgs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeArgs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#args"},(0,i.kt)("inlineCode",{parentName:"a"},"args")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergedeps"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeDeps")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeDeps",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#deps"},(0,i.kt)("inlineCode",{parentName:"a"},"deps")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergeenv"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeEnv")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeEnv",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env")),' map with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergeinputs"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeInputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeInputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#inputs"},(0,i.kt)("inlineCode",{parentName:"a"},"inputs")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"mergeoutputs"},(0,i.kt)("inlineCode",{parentName:"h4"},"mergeOutputs")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#mergeOutputs",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task-inheritance#merge-strategies"},"strategy")," to use when merging the\n",(0,i.kt)("a",{parentName:"p",href:"#outputs"},(0,i.kt)("inlineCode",{parentName:"a"},"outputs")),' list with an inherited task. Defaults to "append".'),(0,i.kt)("h4",{id:"outputstyle"},(0,i.kt)("inlineCode",{parentName:"h4"},"outputStyle")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#outputStyle",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Controls how stdout/stderr is displayed when the task is ran as a ",(0,i.kt)("em",{parentName:"p"},"transitive target"),". By default,\nthis setting is not defined and defers to the action pipeline, but can be overridden with one of the\nfollowing values:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"buffer")," - Buffers output and displays after the task has exited (either success or failure)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"buffer-only-failure")," - Like ",(0,i.kt)("inlineCode",{parentName:"li"},"buffer"),", but only displays on failures."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"hash")," - Ignores output and only displays the generated ",(0,i.kt)("a",{parentName:"li",href:"../concepts/cache#hashing"},"hash"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"none")," - Ignores output."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"stream")," - Streams output directly to the terminal. Will prefix each line of output with the\ntarget.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n test:\n # ...\n options:\n outputStyle: 'stream'\n")),(0,i.kt)("h4",{id:"persistent"},(0,i.kt)("inlineCode",{parentName:"h4"},"persistent"),(0,i.kt)(l.Z,{version:"1.6.0",mdxType:"VersionLabel"})),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#persistent",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Marks the task as persistent (continuously running). ",(0,i.kt)("a",{parentName:"p",href:"../concepts/task#persistent"},"Persistent tasks"),"\nare handled differently than non-persistent tasks in the action graph. When running a target, all\npersistent tasks are ",(0,i.kt)("em",{parentName:"p"},"ran last")," and ",(0,i.kt)("em",{parentName:"p"},"in parallel"),", after all their dependencies have completed."),(0,i.kt)("p",null,"This is extremely useful for running a server (or a watcher) in the background while other tasks are\nrunning."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n dev:\n # ...\n options:\n persistent: true\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"We suggest using the ",(0,i.kt)("a",{parentName:"p",href:"#local"},(0,i.kt)("inlineCode",{parentName:"a"},"local"))," setting instead, which enables this setting, amongst other\nuseful settings.")),(0,i.kt)("h4",{id:"retrycount"},(0,i.kt)("inlineCode",{parentName:"h4"},"retryCount")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#retryCount",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"The number of attempts the task will retry execution before returning a failure. This is especially\nuseful for flaky tasks. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"0"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n test:\n # ...\n options:\n retryCount: 3\n")),(0,i.kt)("h4",{id:"rundepsinparallel"},(0,i.kt)("inlineCode",{parentName:"h4"},"runDepsInParallel")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#runDepsInParallel",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to run the task's direct ",(0,i.kt)("a",{parentName:"p",href:"#deps"},(0,i.kt)("inlineCode",{parentName:"a"},"deps"))," in parallel or serial (in order). Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"When disabled, this ",(0,i.kt)("em",{parentName:"p"},"does not")," run dependencies of dependencies in serial, only direct dependencies."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {8}',title:'"moon.yml"',"{8}":!0},"tasks:\n start:\n # ...\n deps:\n - '~:clean'\n - '~:build'\n options:\n runDepsInParallel: false\n")),(0,i.kt)("h4",{id:"runinci"},(0,i.kt)("inlineCode",{parentName:"h4"},"runInCI")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#runInCI",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to run the task automatically in a CI (continuous integration) environment when affected by\ntouched files, typically through the ",(0,i.kt)("a",{parentName:"p",href:"../commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," command. Defaults to ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," unless\nthe ",(0,i.kt)("a",{parentName:"p",href:"#local"},(0,i.kt)("inlineCode",{parentName:"a"},"local"))," setting is disabled, but is ",(0,i.kt)("em",{parentName:"p"},"always")," true when a task defines\n",(0,i.kt)("a",{parentName:"p",href:"#outputs"},(0,i.kt)("inlineCode",{parentName:"a"},"outputs")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n build:\n # ...\n options:\n runInCI: false\n")),(0,i.kt)("h4",{id:"runfromworkspaceroot"},(0,i.kt)("inlineCode",{parentName:"h4"},"runFromWorkspaceRoot")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#runFromWorkspaceRoot",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Whether to use the workspace root as the working directory when executing a task. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"false")," and runs from the task's project root."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {5}',title:'"moon.yml"',"{5}":!0},"tasks:\n typecheck:\n # ...\n options:\n runFromWorkspaceRoot: true\n")),(0,i.kt)("h4",{id:"shell"},(0,i.kt)("inlineCode",{parentName:"h4"},"shell")),(0,i.kt)(o.Z,{to:"/api/types/interface/TaskOptionsConfig#shell",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"For ",(0,i.kt)("a",{parentName:"p",href:"#platform-1"},"system tasks"),", whether to run the command within a shell or not. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"On Unix, will derive the shell from the ",(0,i.kt)("inlineCode",{parentName:"li"},"SHELL")," environment variable, or default to ",(0,i.kt)("inlineCode",{parentName:"li"},"/bin/sh"),". The\nshell will be ran using the ",(0,i.kt)("inlineCode",{parentName:"li"},"-c")," option."),(0,i.kt)("li",{parentName:"ul"},"On Windows, will use ",(0,i.kt)("inlineCode",{parentName:"li"},"pwsh.exe")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"powershell.exe"),". The shell will be ran using the ",(0,i.kt)("inlineCode",{parentName:"li"},"-Command"),"\noption, coupled with ",(0,i.kt)("inlineCode",{parentName:"li"},"-"),", so that args are passed via stdin.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-5}',title:'"moon.yml"',"{3-5}":!0},"tasks:\n native:\n command: 'echo $SHELL'\n options:\n shell: true\n")),(0,i.kt)("p",null,"If you'd like to use a different shell, or customize the shell's arguments, you can set ",(0,i.kt)("inlineCode",{parentName:"p"},"shell")," to\nfalse and configure a fully qualified command."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {3-5}',title:'"moon.yml"',"{3-5}":!0},"tasks:\n native:\n command: '/bin/zsh -c \"echo $SHELL\"'\n options:\n shell: false\n")),(0,i.kt)("h2",{id:"overrides"},"Overrides"),(0,i.kt)("p",null,"Dictates how a project interacts with settings defined at the top-level."),(0,i.kt)("h2",{id:"toolchain"},(0,i.kt)("inlineCode",{parentName:"h2"},"toolchain")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#toolchain",mdxType:"HeadingApiLink"}),(0,i.kt)("h3",{id:"node"},(0,i.kt)("inlineCode",{parentName:"h3"},"node")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainConfig#node",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Configures Node.js for this project and overrides the top-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#node"},(0,i.kt)("inlineCode",{parentName:"a"},"node"))," setting.\nCurrently, only the Node.js version can be overridden per-project, not the package manager."),(0,i.kt)("h4",{id:"version"},(0,i.kt)("inlineCode",{parentName:"h4"},"version")),(0,i.kt)("p",null,"Defines the explicit Node.js ",(0,i.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version specification")," to\nuse when ",(0,i.kt)("em",{parentName:"p"},"running tasks")," for this project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2,3}',title:'"moon.yml"',"{2,3}":!0},"toolchain:\n node:\n version: '12.12.0'\n")),(0,i.kt)("h3",{id:"rust"},(0,i.kt)("inlineCode",{parentName:"h3"},"rust")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainConfig#rust",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Configures Rust for this project and overrides the top-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#rust"},(0,i.kt)("inlineCode",{parentName:"a"},"rust"))," setting."),(0,i.kt)("h4",{id:"version-1"},(0,i.kt)("inlineCode",{parentName:"h4"},"version")),(0,i.kt)("p",null,"Defines the explicit Rust\n",(0,i.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version/channel specification")," to use when ",(0,i.kt)("em",{parentName:"p"},"running\ntasks")," for this project."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2,3}',title:'"moon.yml"',"{2,3}":!0},"toolchain:\n rust:\n version: '1.68.0'\n")),(0,i.kt)("h3",{id:"typescript"},(0,i.kt)("inlineCode",{parentName:"h3"},"typescript")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainConfig#typescript",mdxType:"HeadingApiLink"}),(0,i.kt)("h4",{id:"disabled"},(0,i.kt)("inlineCode",{parentName:"h4"},"disabled")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#disabled",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Disables ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#typescript"},"TypeScript support")," entirely for this project. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n disabled: true\n")),(0,i.kt)("h4",{id:"routeoutdirtocache"},(0,i.kt)("inlineCode",{parentName:"h4"},"routeOutDirToCache")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#routeOutDirToCache",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Overrides the workspace-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#routeoutdirtocache"},(0,i.kt)("inlineCode",{parentName:"a"},"routeOutDirToCache"))," setting.\nDefaults to undefined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n routeOutDirToCache: false\n")),(0,i.kt)("h4",{id:"syncprojectreferences"},(0,i.kt)("inlineCode",{parentName:"h4"},"syncProjectReferences")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#syncProjectReferences",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Overrides the workspace-level ",(0,i.kt)("a",{parentName:"p",href:"./toolchain#syncprojectreferences"},(0,i.kt)("inlineCode",{parentName:"a"},"syncProjectReferences"))," setting.\nDefaults to undefined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n syncProjectReferences: false\n")),(0,i.kt)("h4",{id:"syncprojectreferencestopaths"},(0,i.kt)("inlineCode",{parentName:"h4"},"syncProjectReferencesToPaths")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectToolchainTypeScriptConfig#syncProjectReferencesToPaths",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Overrides the workspace-level\n",(0,i.kt)("a",{parentName:"p",href:"./toolchain#syncprojectreferencestopaths"},(0,i.kt)("inlineCode",{parentName:"a"},"syncProjectReferencesToPaths"))," setting. Defaults to\nundefined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {2}',title:'"moon.yml"',"{2}":!0},"toolchain:\n typescript:\n syncProjectReferencesToPaths: false\n")),(0,i.kt)("h2",{id:"workspace"},(0,i.kt)("inlineCode",{parentName:"h2"},"workspace")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectConfig#workspace",mdxType:"HeadingApiLink"}),(0,i.kt)("h3",{id:"inheritedtasks"},(0,i.kt)("inlineCode",{parentName:"h3"},"inheritedTasks")),(0,i.kt)(o.Z,{to:"/api/types/interface/ProjectWorkspaceConfig#inheritedTasks",mdxType:"HeadingApiLink"}),(0,i.kt)("p",null,"Provides a layer of control when inheriting tasks from ",(0,i.kt)("a",{parentName:"p",href:"./tasks"},(0,i.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),"."),(0,i.kt)("h4",{id:"exclude"},(0,i.kt)("inlineCode",{parentName:"h4"},"exclude")),(0,i.kt)("p",null,"The optional ",(0,i.kt)("inlineCode",{parentName:"p"},"exclude")," setting permits a project to exclude specific tasks from being inherited. It\naccepts a list of strings, where each string is the name of a global task to exclude."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4}',title:'"moon.yml"',"{4}":!0},"workspace:\n inheritedTasks:\n # Exclude the inherited `test` task for this project\n exclude: ['test']\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Exclusion is applied after inclusion and before renaming.")),(0,i.kt)("h4",{id:"include"},(0,i.kt)("inlineCode",{parentName:"h4"},"include")),(0,i.kt)("p",null,"The optional ",(0,i.kt)("inlineCode",{parentName:"p"},"include")," setting permits a project to ",(0,i.kt)("em",{parentName:"p"},"only")," include specific inherited tasks (works\nlike an allow/white list). It accepts a list of strings, where each string is the name of a global\ntask to include."),(0,i.kt)("p",null,"When this field is not defined, the project will inherit all tasks from the global project config."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,7-9}',title:'"moon.yml"',"{4,7-9}":!0},"workspace:\n inheritedTasks:\n # Include *no* tasks (works like a full exclude)\n include: []\n\n # Only include the `lint` and `test` tasks for this project\n include:\n - 'lint'\n - 'test'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Inclusion is applied before exclusion and renaming.")),(0,i.kt)("h4",{id:"rename"},(0,i.kt)("inlineCode",{parentName:"h4"},"rename")),(0,i.kt)("p",null,"The optional ",(0,i.kt)("inlineCode",{parentName:"p"},"rename")," setting permits a project to rename the inherited task within the current\nproject. It accepts a map of strings, where the key is the original name (found in the global\nproject config), and the value is the new name to use."),(0,i.kt)("p",null,"For example, say we have 2 tasks in the global project config called ",(0,i.kt)("inlineCode",{parentName:"p"},"buildPackage")," and\n",(0,i.kt)("inlineCode",{parentName:"p"},"buildApplication"),", but we only need 1, and since we're an application, we should omit and rename."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml" {4,5}',title:'"moon.yml"',"{4,5}":!0},"workspace:\n inheritedTasks:\n exclude: ['buildPackage']\n rename:\n buildApplication: 'build'\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Renaming occurs after inclusion and exclusion.")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4f0c5301.088212bb.js b/assets/js/4f0c5301.088212bb.js deleted file mode 100644 index ee36bc7de36..00000000000 --- a/assets/js/4f0c5301.088212bb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6361],{32535:e=>{e.exports=JSON.parse('{"label":"code","permalink":"/blog/tags/code","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4f0c5301.cada38e0.js b/assets/js/4f0c5301.cada38e0.js new file mode 100644 index 00000000000..552c5d49f82 --- /dev/null +++ b/assets/js/4f0c5301.cada38e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36361],{32535:e=>{e.exports=JSON.parse('{"label":"code","permalink":"/blog/tags/code","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/4fa82ff8.0b537110.js b/assets/js/4fa82ff8.0b537110.js deleted file mode 100644 index 0088278dc02..00000000000 --- a/assets/js/4fa82ff8.0b537110.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9769],{26675:(e,t,a)=>{a.d(t,{A:()=>r});var n=a(35315),o=a.n(n),l=a(58406),i=a.n(l);function r(e,t){return o()({container:e,elements:t,layout:{fit:!0,name:"dagre",nodeDimensionsIncludeLabels:!0,spacingFactor:1},style:[{selector:"edges",style:{"arrow-scale":2,"curve-style":"straight","line-cap":"round","line-color":"#c9eef6","line-opacity":.25,"overlay-color":"#c9eef6","target-arrow-color":"#c9eef6","target-arrow-shape":"tee",width:3}},{selector:"node",style:{"background-fill":"linear-gradient","background-gradient-direction":"to-bottom-right","background-gradient-stop-colors":"#d7dfe9 #bdc9db #97a1af",color:"#fff",height:60,label:"data(label)","overlay-color":"#99aab7","overlay-shape":"ellipse",padding:0,shape:"ellipse","text-halign":"center","text-margin-y":6,"text-valign":"bottom","underlay-shape":"ellipse",width:60}},{selector:'node[type="run-task"], node[type="sm"]',style:{"background-gradient-stop-colors":"#6e58d1 #4a2ec6 #3b259e"}},{selector:'node[type="run-target"], node[type="sm"]',style:{"background-gradient-stop-colors":"#6e58d1 #4a2ec6 #3b259e"}},{selector:'node[type="sync-project"], node[type="md"]',style:{"background-gradient-stop-colors":"#ffafff #ff79ff #cc61cc",height:80,width:80}},{selector:'node[type="install-deps"], node[type="lg"]',style:{"background-gradient-stop-colors":"#afe6f2 #79d5e9 #61aaba",height:100,width:100}},{selector:'node[type="setup-tool"], node[type="xl"]',style:{"background-gradient-stop-colors":"#ff9da6 #ff5b6b #cc4956",height:120,width:120}},{selector:'node[id="sync-workspace"]',style:{"background-gradient-stop-colors":"#b7a9f9 #9a87f7 #8c75f5",height:120,width:120}}]})}o().use(i())},23706:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>d,default:()=>c,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var n=a(25773),o=a(27378),l=a(35318),i=a(26675);function r(){const e=(0,o.useRef)(null);return(0,o.useEffect)((()=>{e.current&&(0,i.A)(e.current,{edges:[{data:{source:"node",target:"node-lang"}},{data:{source:"node",target:"node-platform"}},{data:{source:"node",target:"node-tool"}},{data:{source:"node-platform",target:"node-lang"}},{data:{source:"node-tool",target:"node-lang"}},{data:{source:"node-platform",target:"node-tool"}},{data:{source:"deno",target:"deno-lang"}},{data:{source:"deno",target:"deno-platform"}},{data:{source:"deno-platform",target:"deno-lang"}},{data:{source:"bun",target:"bun-lang"}},{data:{source:"moon",target:"system"}},{data:{source:"moon",target:"go"}},{data:{source:"moon",target:"bun"}},{data:{source:"moon",target:"deno"}},{data:{source:"moon",target:"node"}}],nodes:[{data:{id:"moon",label:"moon",type:"xl"}},{data:{id:"system",label:"System (Fallback)",type:"md"}},{data:{id:"node",label:"Node (Tier 3)",type:"lg"}},{data:{id:"node-lang",label:"Language (1)"}},{data:{id:"node-platform",label:"Platform (2)"}},{data:{id:"node-tool",label:"Toolchain (3)"}},{data:{id:"deno",label:"Deno (Tier 2)",type:"lg"}},{data:{id:"deno-lang",label:"Language (1)"}},{data:{id:"deno-platform",label:"Platform (2)"}},{data:{id:"bun",label:"Bun (Tier 1)",type:"lg"}},{data:{id:"bun-lang",label:"Language (1)"}},{data:{id:"go",label:"Go (Tier 0)",type:"lg"}}]})}),[]),o.createElement("div",{id:"lang-graph",ref:e,className:"p-1 mb-2 rounded bg-slate-800",style:{height:"600px",width:"100%"}})}const s={title:"Languages"},d=void 0,p={unversionedId:"how-it-works/languages",id:"how-it-works/languages",title:"Languages",description:"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a",source:"@site/docs/how-it-works/languages.mdx",sourceDirName:"how-it-works",slug:"/how-it-works/languages",permalink:"/docs/how-it-works/languages",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/how-it-works/languages.mdx",tags:[],version:"current",frontMatter:{title:"Languages"},sidebar:"docs",previous:{title:"How it works",permalink:"/docs/how-it-works"},next:{title:"Project graph",permalink:"/docs/how-it-works/project-graph"}},m={},u=[{value:"Enabling a language",id:"enabling-a-language",level:2},{value:"System language and platform",id:"system-language-and-platform",level:2},{value:"Tier structure and responsibilities",id:"tier-structure-and-responsibilities",level:2},{value:"Tier 0 = Unsupported",id:"tier-0--unsupported",level:3},{value:"Tier 1 = Language",id:"tier-1--language",level:3},{value:"Tier 2 = Platform",id:"tier-2--platform",level:3},{value:"Tier 3 = Toolchain",id:"tier-3--toolchain",level:3}],g={toc:u};function c(e){let{components:t,...a}=e;return(0,l.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a\nmulti-language task runner and monorepo management tool. To that end, we've designed our languages\nto work like plugins, where their functionality is implemented in isolation, and is ",(0,l.kt)("em",{parentName:"p"},"opt-in"),"."),(0,l.kt)(r,{mdxType:"LangGraph"}),(0,l.kt)("admonition",{type:"info"},(0,l.kt)("p",{parentName:"admonition"},"We do not support third-party language plugins at this time, but are working towards it!")),(0,l.kt)("h2",{id:"enabling-a-language"},"Enabling a language"),(0,l.kt)("p",null,"moon ",(0,l.kt)("a",{parentName:"p",href:"../#supported-languages"},"supported languages")," are opt-in, and ",(0,l.kt)("em",{parentName:"p"},"are not")," enabled by default. We\nchose this pattern to avoid unnecessary overhead, especially for the future when we have 10 or more\nbuilt-in languages."),(0,l.kt)("p",null,"To enable a supported language, simply define a configuration block with the language's name in\n",(0,l.kt)("a",{parentName:"p",href:"../config/toolchain"},(0,l.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". Even an empty block will enable the language."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Node.js\nnode: {}\n\n# Enable Node.js with custom settings\nnode:\n packageManager: 'pnpm'\n\n# Enable Deno\ndeno: {}\n")),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"For unsupported languages, use the system platform. Continue reading to learn more!")),(0,l.kt)("h2",{id:"system-language-and-platform"},"System language and platform"),(0,l.kt)("p",null,"When working with moon, you'll most likely have tasks that run built-in system commands that do not\nbelong to any of the supported languages. For example, you may have a task that runs ",(0,l.kt)("inlineCode",{parentName:"p"},"git")," or\n",(0,l.kt)("inlineCode",{parentName:"p"},"docker")," commands, or common commands like ",(0,l.kt)("inlineCode",{parentName:"p"},"rm"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"cp"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"mv"),", etc."),(0,l.kt)("p",null,"For these cases, moon provides a special language/platform called ",(0,l.kt)("inlineCode",{parentName:"p"},"system"),", that is always enabled.\nThis platform is a catch-all, an escape-hatch, a fallback, and provides the following:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Runs a system command or a binary found on ",(0,l.kt)("inlineCode",{parentName:"li"},"PATH"),"."),(0,l.kt)("li",{parentName:"ul"},"Wraps the execution in a shell. ",(0,l.kt)("inlineCode",{parentName:"li"},"SHELL")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"/bin/sh")," on Unix, and ",(0,l.kt)("inlineCode",{parentName:"li"},"pwsh")," on Windows.")),(0,l.kt)("p",null,"To run system commands, set a task's ",(0,l.kt)("a",{parentName:"p",href:"../config/project#platform-1"},(0,l.kt)("inlineCode",{parentName:"a"},"platform")),' setting to "system".'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'git status'\n platform: 'system'\n")),(0,l.kt)("h2",{id:"tier-structure-and-responsibilities"},"Tier structure and responsibilities"),(0,l.kt)("p",null,"As mentioned in our introduction,\n",(0,l.kt)("a",{parentName:"p",href:"../#supported-languages"},"language support is divided up into tiers"),", where each tier introduces\nmore internal integrations and automations, but requires more work to properly implement."),(0,l.kt)("p",null,"Internally each tier maps to a Rust crate, as demonstrated by the graph at the top of the article."),(0,l.kt)("h3",{id:"tier-0--unsupported"},"Tier 0 = Unsupported"),(0,l.kt)("p",null,"The zero tier represents all languages ",(0,l.kt)("em",{parentName:"p"},"not directly")," supported by moon. This tier merely exists as\na mechanism for running non-supported language binaries via the\n",(0,l.kt)("a",{parentName:"p",href:"#system-language-and-platform"},"system platform"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'ruby'\n platform: 'system'\n")),(0,l.kt)("h3",{id:"tier-1--language"},"Tier 1 = Language"),(0,l.kt)("p",null,"The first tier is the language itself. This is the most basic level of support, and is the only tier\nthat is required to be implemented for a language to be considered minimally supported. This tier is\nin charge of:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Declaring metadata about the language. For example, the name of the binary, supported file\nextensions, available dependency/package/version managers, names of config/manifest/lock files,\netc."),(0,l.kt)("li",{parentName:"ul"},"Helpers for parsing lockfiles and manifest files, and interacting with the language's ecosystem\n(for example, Node.js module resolution)."),(0,l.kt)("li",{parentName:"ul"},"Mechanisms for detecting the language of a project based on config files and other criteria."),(0,l.kt)("li",{parentName:"ul"},"Maps to a project's ",(0,l.kt)("a",{parentName:"li",href:"../config/project#language"},(0,l.kt)("inlineCode",{parentName:"a"},"language"))," setting.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'javascript'\n")),(0,l.kt)("h3",{id:"tier-2--platform"},"Tier 2 = Platform"),(0,l.kt)("p",null,"The second tier requires the language functionality from tier 1, and eventually the toolchain\nfunctionality from tier 3, and provides interoperability with moon's internals. This is the most\ncomplex of all tiers, and the tier is in charge of:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Determining when, where, and how to install dependencies for a project or the workspace."),(0,l.kt)("li",{parentName:"ul"},"Loading project aliases and inferring implicit relationships between projects."),(0,l.kt)("li",{parentName:"ul"},"Syncing a project and ensuring a healthy project state."),(0,l.kt)("li",{parentName:"ul"},"Hashing efficiently for dependency installs and target runs."),(0,l.kt)("li",{parentName:"ul"},"Finding an appropriate binary for a task's command (for example, Node.js tasks will find the\ncommand in ",(0,l.kt)("inlineCode",{parentName:"li"},"node_modules/.bin"),")."),(0,l.kt)("li",{parentName:"ul"},"Running a target's command with proper arguments, environment variables, and flags."),(0,l.kt)("li",{parentName:"ul"},"When tier 3 is supported, integrating the toolchain for running targets with the language's\nbinary. When not tier 3, relies on the language's binary on ",(0,l.kt)("inlineCode",{parentName:"li"},"PATH"),"."),(0,l.kt)("li",{parentName:"ul"},"Maps to a project's ",(0,l.kt)("a",{parentName:"li",href:"../config/project#platform"},(0,l.kt)("inlineCode",{parentName:"a"},"platform"))," or task's\n",(0,l.kt)("a",{parentName:"li",href:"../config/project#platform-1"},(0,l.kt)("inlineCode",{parentName:"a"},"platform"))," setting."),(0,l.kt)("li",{parentName:"ul"},"Supports a configuration block by name in ",(0,l.kt)("a",{parentName:"li",href:"../config/toolchain"},(0,l.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),".")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'webpack'\n platform: 'node'\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node: {}\n")),(0,l.kt)("h3",{id:"tier-3--toolchain"},"Tier 3 = Toolchain"),(0,l.kt)("p",null,"The third tier is toolchain support via ",(0,l.kt)("a",{parentName:"p",href:"/proto"},"proto"),". This is the final tier, as the toolchain is\nunusable unless the platform has been entirely integrated, and as such, the platform depends on this\ntier. This tier handles:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Downloading and installing a language into the toolchain."),(0,l.kt)("li",{parentName:"ul"},"Installing and deduping project dependencies."),(0,l.kt)("li",{parentName:"ul"},"Detecting appropriate versions of tools to use."),(0,l.kt)("li",{parentName:"ul"},"Determining which binary to use and execute targets with."),(0,l.kt)("li",{parentName:"ul"},"Supports a ",(0,l.kt)("inlineCode",{parentName:"li"},"version")," field in the named configuration block in\n",(0,l.kt)("a",{parentName:"li",href:"../config/toolchain"},(0,l.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),".")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4fa82ff8.0c1fe6b2.js b/assets/js/4fa82ff8.0c1fe6b2.js new file mode 100644 index 00000000000..49456a9e5cf --- /dev/null +++ b/assets/js/4fa82ff8.0c1fe6b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29769],{26675:(e,t,a)=>{a.d(t,{A:()=>r});var n=a(35315),o=a.n(n),l=a(58406),i=a.n(l);function r(e,t){return o()({container:e,elements:t,layout:{fit:!0,name:"dagre",nodeDimensionsIncludeLabels:!0,spacingFactor:1},style:[{selector:"edges",style:{"arrow-scale":2,"curve-style":"straight","line-cap":"round","line-color":"#c9eef6","line-opacity":.25,"overlay-color":"#c9eef6","target-arrow-color":"#c9eef6","target-arrow-shape":"tee",width:3}},{selector:"node",style:{"background-fill":"linear-gradient","background-gradient-direction":"to-bottom-right","background-gradient-stop-colors":"#d7dfe9 #bdc9db #97a1af",color:"#fff",height:60,label:"data(label)","overlay-color":"#99aab7","overlay-shape":"ellipse",padding:0,shape:"ellipse","text-halign":"center","text-margin-y":6,"text-valign":"bottom","underlay-shape":"ellipse",width:60}},{selector:'node[type="run-task"], node[type="sm"]',style:{"background-gradient-stop-colors":"#6e58d1 #4a2ec6 #3b259e"}},{selector:'node[type="run-target"], node[type="sm"]',style:{"background-gradient-stop-colors":"#6e58d1 #4a2ec6 #3b259e"}},{selector:'node[type="sync-project"], node[type="md"]',style:{"background-gradient-stop-colors":"#ffafff #ff79ff #cc61cc",height:80,width:80}},{selector:'node[type="install-deps"], node[type="lg"]',style:{"background-gradient-stop-colors":"#afe6f2 #79d5e9 #61aaba",height:100,width:100}},{selector:'node[type="setup-tool"], node[type="xl"]',style:{"background-gradient-stop-colors":"#ff9da6 #ff5b6b #cc4956",height:120,width:120}},{selector:'node[id="sync-workspace"]',style:{"background-gradient-stop-colors":"#b7a9f9 #9a87f7 #8c75f5",height:120,width:120}}]})}o().use(i())},23706:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>d,default:()=>c,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var n=a(25773),o=a(27378),l=a(35318),i=a(26675);function r(){const e=(0,o.useRef)(null);return(0,o.useEffect)((()=>{e.current&&(0,i.A)(e.current,{edges:[{data:{source:"node",target:"node-lang"}},{data:{source:"node",target:"node-platform"}},{data:{source:"node",target:"node-tool"}},{data:{source:"node-platform",target:"node-lang"}},{data:{source:"node-tool",target:"node-lang"}},{data:{source:"node-platform",target:"node-tool"}},{data:{source:"deno",target:"deno-lang"}},{data:{source:"deno",target:"deno-platform"}},{data:{source:"deno-platform",target:"deno-lang"}},{data:{source:"bun",target:"bun-lang"}},{data:{source:"moon",target:"system"}},{data:{source:"moon",target:"go"}},{data:{source:"moon",target:"bun"}},{data:{source:"moon",target:"deno"}},{data:{source:"moon",target:"node"}}],nodes:[{data:{id:"moon",label:"moon",type:"xl"}},{data:{id:"system",label:"System (Fallback)",type:"md"}},{data:{id:"node",label:"Node (Tier 3)",type:"lg"}},{data:{id:"node-lang",label:"Language (1)"}},{data:{id:"node-platform",label:"Platform (2)"}},{data:{id:"node-tool",label:"Toolchain (3)"}},{data:{id:"deno",label:"Deno (Tier 2)",type:"lg"}},{data:{id:"deno-lang",label:"Language (1)"}},{data:{id:"deno-platform",label:"Platform (2)"}},{data:{id:"bun",label:"Bun (Tier 1)",type:"lg"}},{data:{id:"bun-lang",label:"Language (1)"}},{data:{id:"go",label:"Go (Tier 0)",type:"lg"}}]})}),[]),o.createElement("div",{id:"lang-graph",ref:e,className:"p-1 mb-2 rounded bg-slate-800",style:{height:"600px",width:"100%"}})}const s={title:"Languages"},d=void 0,p={unversionedId:"how-it-works/languages",id:"how-it-works/languages",title:"Languages",description:"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a",source:"@site/docs/how-it-works/languages.mdx",sourceDirName:"how-it-works",slug:"/how-it-works/languages",permalink:"/docs/how-it-works/languages",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/how-it-works/languages.mdx",tags:[],version:"current",frontMatter:{title:"Languages"},sidebar:"docs",previous:{title:"How it works",permalink:"/docs/how-it-works"},next:{title:"Project graph",permalink:"/docs/how-it-works/project-graph"}},m={},u=[{value:"Enabling a language",id:"enabling-a-language",level:2},{value:"System language and platform",id:"system-language-and-platform",level:2},{value:"Tier structure and responsibilities",id:"tier-structure-and-responsibilities",level:2},{value:"Tier 0 = Unsupported",id:"tier-0--unsupported",level:3},{value:"Tier 1 = Language",id:"tier-1--language",level:3},{value:"Tier 2 = Platform",id:"tier-2--platform",level:3},{value:"Tier 3 = Toolchain",id:"tier-3--toolchain",level:3}],g={toc:u};function c(e){let{components:t,...a}=e;return(0,l.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a\nmulti-language task runner and monorepo management tool. To that end, we've designed our languages\nto work like plugins, where their functionality is implemented in isolation, and is ",(0,l.kt)("em",{parentName:"p"},"opt-in"),"."),(0,l.kt)(r,{mdxType:"LangGraph"}),(0,l.kt)("admonition",{type:"info"},(0,l.kt)("p",{parentName:"admonition"},"We do not support third-party language plugins at this time, but are working towards it!")),(0,l.kt)("h2",{id:"enabling-a-language"},"Enabling a language"),(0,l.kt)("p",null,"moon ",(0,l.kt)("a",{parentName:"p",href:"../#supported-languages"},"supported languages")," are opt-in, and ",(0,l.kt)("em",{parentName:"p"},"are not")," enabled by default. We\nchose this pattern to avoid unnecessary overhead, especially for the future when we have 10 or more\nbuilt-in languages."),(0,l.kt)("p",null,"To enable a supported language, simply define a configuration block with the language's name in\n",(0,l.kt)("a",{parentName:"p",href:"../config/toolchain"},(0,l.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". Even an empty block will enable the language."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"# Enable Node.js\nnode: {}\n\n# Enable Node.js with custom settings\nnode:\n packageManager: 'pnpm'\n\n# Enable Deno\ndeno: {}\n")),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"For unsupported languages, use the system platform. Continue reading to learn more!")),(0,l.kt)("h2",{id:"system-language-and-platform"},"System language and platform"),(0,l.kt)("p",null,"When working with moon, you'll most likely have tasks that run built-in system commands that do not\nbelong to any of the supported languages. For example, you may have a task that runs ",(0,l.kt)("inlineCode",{parentName:"p"},"git")," or\n",(0,l.kt)("inlineCode",{parentName:"p"},"docker")," commands, or common commands like ",(0,l.kt)("inlineCode",{parentName:"p"},"rm"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"cp"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"mv"),", etc."),(0,l.kt)("p",null,"For these cases, moon provides a special language/platform called ",(0,l.kt)("inlineCode",{parentName:"p"},"system"),", that is always enabled.\nThis platform is a catch-all, an escape-hatch, a fallback, and provides the following:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Runs a system command or a binary found on ",(0,l.kt)("inlineCode",{parentName:"li"},"PATH"),"."),(0,l.kt)("li",{parentName:"ul"},"Wraps the execution in a shell. ",(0,l.kt)("inlineCode",{parentName:"li"},"SHELL")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"/bin/sh")," on Unix, and ",(0,l.kt)("inlineCode",{parentName:"li"},"pwsh")," on Windows.")),(0,l.kt)("p",null,"To run system commands, set a task's ",(0,l.kt)("a",{parentName:"p",href:"../config/project#platform-1"},(0,l.kt)("inlineCode",{parentName:"a"},"platform")),' setting to "system".'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'git status'\n platform: 'system'\n")),(0,l.kt)("h2",{id:"tier-structure-and-responsibilities"},"Tier structure and responsibilities"),(0,l.kt)("p",null,"As mentioned in our introduction,\n",(0,l.kt)("a",{parentName:"p",href:"../#supported-languages"},"language support is divided up into tiers"),", where each tier introduces\nmore internal integrations and automations, but requires more work to properly implement."),(0,l.kt)("p",null,"Internally each tier maps to a Rust crate, as demonstrated by the graph at the top of the article."),(0,l.kt)("h3",{id:"tier-0--unsupported"},"Tier 0 = Unsupported"),(0,l.kt)("p",null,"The zero tier represents all languages ",(0,l.kt)("em",{parentName:"p"},"not directly")," supported by moon. This tier merely exists as\na mechanism for running non-supported language binaries via the\n",(0,l.kt)("a",{parentName:"p",href:"#system-language-and-platform"},"system platform"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'ruby'\n platform: 'system'\n")),(0,l.kt)("h3",{id:"tier-1--language"},"Tier 1 = Language"),(0,l.kt)("p",null,"The first tier is the language itself. This is the most basic level of support, and is the only tier\nthat is required to be implemented for a language to be considered minimally supported. This tier is\nin charge of:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Declaring metadata about the language. For example, the name of the binary, supported file\nextensions, available dependency/package/version managers, names of config/manifest/lock files,\netc."),(0,l.kt)("li",{parentName:"ul"},"Helpers for parsing lockfiles and manifest files, and interacting with the language's ecosystem\n(for example, Node.js module resolution)."),(0,l.kt)("li",{parentName:"ul"},"Mechanisms for detecting the language of a project based on config files and other criteria."),(0,l.kt)("li",{parentName:"ul"},"Maps to a project's ",(0,l.kt)("a",{parentName:"li",href:"../config/project#language"},(0,l.kt)("inlineCode",{parentName:"a"},"language"))," setting.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'javascript'\n")),(0,l.kt)("h3",{id:"tier-2--platform"},"Tier 2 = Platform"),(0,l.kt)("p",null,"The second tier requires the language functionality from tier 1, and eventually the toolchain\nfunctionality from tier 3, and provides interoperability with moon's internals. This is the most\ncomplex of all tiers, and the tier is in charge of:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Determining when, where, and how to install dependencies for a project or the workspace."),(0,l.kt)("li",{parentName:"ul"},"Loading project aliases and inferring implicit relationships between projects."),(0,l.kt)("li",{parentName:"ul"},"Syncing a project and ensuring a healthy project state."),(0,l.kt)("li",{parentName:"ul"},"Hashing efficiently for dependency installs and target runs."),(0,l.kt)("li",{parentName:"ul"},"Finding an appropriate binary for a task's command (for example, Node.js tasks will find the\ncommand in ",(0,l.kt)("inlineCode",{parentName:"li"},"node_modules/.bin"),")."),(0,l.kt)("li",{parentName:"ul"},"Running a target's command with proper arguments, environment variables, and flags."),(0,l.kt)("li",{parentName:"ul"},"When tier 3 is supported, integrating the toolchain for running targets with the language's\nbinary. When not tier 3, relies on the language's binary on ",(0,l.kt)("inlineCode",{parentName:"li"},"PATH"),"."),(0,l.kt)("li",{parentName:"ul"},"Maps to a project's ",(0,l.kt)("a",{parentName:"li",href:"../config/project#platform"},(0,l.kt)("inlineCode",{parentName:"a"},"platform"))," or task's\n",(0,l.kt)("a",{parentName:"li",href:"../config/project#platform-1"},(0,l.kt)("inlineCode",{parentName:"a"},"platform"))," setting."),(0,l.kt)("li",{parentName:"ul"},"Supports a configuration block by name in ",(0,l.kt)("a",{parentName:"li",href:"../config/toolchain"},(0,l.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),".")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n example:\n command: 'webpack'\n platform: 'node'\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node: {}\n")),(0,l.kt)("h3",{id:"tier-3--toolchain"},"Tier 3 = Toolchain"),(0,l.kt)("p",null,"The third tier is toolchain support via ",(0,l.kt)("a",{parentName:"p",href:"/proto"},"proto"),". This is the final tier, as the toolchain is\nunusable unless the platform has been entirely integrated, and as such, the platform depends on this\ntier. This tier handles:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Downloading and installing a language into the toolchain."),(0,l.kt)("li",{parentName:"ul"},"Installing and deduping project dependencies."),(0,l.kt)("li",{parentName:"ul"},"Detecting appropriate versions of tools to use."),(0,l.kt)("li",{parentName:"ul"},"Determining which binary to use and execute targets with."),(0,l.kt)("li",{parentName:"ul"},"Supports a ",(0,l.kt)("inlineCode",{parentName:"li"},"version")," field in the named configuration block in\n",(0,l.kt)("a",{parentName:"li",href:"../config/toolchain"},(0,l.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),".")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4fd1aaa1.009d6638.js b/assets/js/4fd1aaa1.009d6638.js deleted file mode 100644 index 534c3a4e425..00000000000 --- a/assets/js/4fd1aaa1.009d6638.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6842],{29340:e=>{e.exports=JSON.parse('{"label":"config","permalink":"/blog/tags/config","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/4fd1aaa1.d428f9ea.js b/assets/js/4fd1aaa1.d428f9ea.js new file mode 100644 index 00000000000..ac2b23e3687 --- /dev/null +++ b/assets/js/4fd1aaa1.d428f9ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56842],{29340:e=>{e.exports=JSON.parse('{"label":"config","permalink":"/blog/tags/config","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/51985ffa.ce3664cc.js b/assets/js/51985ffa.ce3664cc.js new file mode 100644 index 00000000000..4ffbfd9a9ea --- /dev/null +++ b/assets/js/51985ffa.ce3664cc.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76353],{1999:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>d});var n=a(25773),r=a(27378),s=a(37140),l=a(99213),c=a(20624),o=a(81884);const i="anchorWithStickyNavbar_JmGV",u="anchorWithHideOnScrollNavbar_pMLv";function d(e){let{as:t,id:a,...d}=e;const{navbar:{hideOnScroll:m}}=(0,c.L)();if("h1"===t||!a)return r.createElement(t,(0,n.Z)({},d,{id:void 0}));const f=(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:a});return r.createElement(t,(0,n.Z)({},d,{className:(0,s.Z)("anchor",m?u:i,d.className),id:a}),d.children,r.createElement(o.default,{className:"hash-link",to:`#${a}`,"aria-label":f,title:f},"\u200b"))}},96177:(e,t,a)=>{"use strict";a.d(t,{F:()=>c});var n=a(27378),r=a(41763);const s={attributes:!0,characterData:!0,childList:!0,subtree:!0};function l(e,t){const[a,l]=(0,n.useState)(),c=(0,n.useCallback)((()=>{l(e.current?.closest("[role=tabpanel][hidden]"))}),[e,l]);(0,n.useEffect)((()=>{c()}),[c]),function(e,t,a){void 0===a&&(a=s);const l=(0,r.zX)(t),c=(0,r.Ql)(a);(0,n.useEffect)((()=>{const t=new MutationObserver(l);return e&&t.observe(e,c),()=>t.disconnect()}),[e,l,c])}(a,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),c())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function c(){const[e,t]=(0,n.useState)(!1),[a,r]=(0,n.useState)(!1),s=(0,n.useRef)(null),c=(0,n.useCallback)((()=>{const a=s.current.querySelector("code");e?a.removeAttribute("style"):(a.style.whiteSpace="pre-wrap",a.style.overflowWrap="anywhere"),t((e=>!e))}),[s,e]),o=(0,n.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=s.current,a=e>t||s.current.querySelector("code").hasAttribute("style");r(a)}),[s]);return l(s,o),(0,n.useEffect)((()=>{o()}),[e,o]),(0,n.useEffect)((()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)})),[o]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:a,toggle:c}}},6499:(e,t,a)=>{"use strict";a.d(t,{p:()=>s});var n=a(55421),r=a(20624);function s(){const{prism:e}=(0,r.L)(),{colorMode:t}=(0,n.I)(),a=e.theme,s=e.darkTheme||a;return"dark"===t?s:a}},90433:(e,t,a)=>{"use strict";a.d(t,{QC:()=>f,Vo:()=>d,bc:()=>i,nZ:()=>m,nt:()=>u});var n=a(6324),r=a.n(n);const s=/title=(?<quote>["'])(?<title>.*?)\1/,l=/\{(?<range>[\d,-]+)\}/,c={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function o(e,t){const a=e.map((e=>{const{start:a,end:n}=c[e];return`(?:${a}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${a})\\s*$`)}function i(e){return e?.match(s)?.groups.title??""}function u(e){return Boolean(e?.includes("showLineNumbers"))}function d(e){return e.split(" ").find((e=>e.startsWith("language-")))?.replace(/language-/,"")}function m(e,t){let a=e.replace(/\n$/,"");const{language:n,magicComments:s,metastring:i}=t;if(i&&l.test(i)){const e=i.match(l).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=s[0].className,n=r()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:a}}if(void 0===n)return{lineClassNames:{},code:a};const u=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return o(["js","jsBlock"],t);case"jsx":case"tsx":return o(["js","jsBlock","jsx"],t);case"html":return o(["js","jsBlock","html"],t);case"python":case"py":case"bash":return o(["bash"],t);case"markdown":case"md":return o(["html","jsx","bash"],t);default:return o(Object.keys(c),t)}}(n,s),d=a.split("\n"),m=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),f=Object.fromEntries(s.filter((e=>e.line)).map((e=>{let{className:t,line:a}=e;return[a,t]}))),p=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:a}=e;return[a.start,t]}))),h=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:a}=e;return[a.end,t]})));for(let r=0;r<d.length;){const e=d[r].match(u);if(!e){r+=1;continue}const t=e.slice(1).find((e=>void 0!==e));f[t]?m[f[t]].range+=`${r},`:p[t]?m[p[t]].start=r:h[t]&&(m[h[t]].range+=`${m[h[t]].start}-${r-1},`),d.splice(r,1)}a=d.join("\n");const g={};return Object.entries(m).forEach((e=>{let[t,{range:a}]=e;r()(a).forEach((e=>{g[e]??=[],g[e].push(t)}))})),{lineClassNames:g,code:a}}function f(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},a={};return Object.entries(e.plain).forEach((e=>{let[n,r]=e;const s=t[n];s&&"string"==typeof r&&(a[s]=r)})),a}},51739:(e,t,a)=>{"use strict";const n=a(27378),r=a(81884),s=a(95709),l=a(12700),c=a(1999),o=a(64137),i=a(66498),u=a(66715),d=e=>e&&e.__esModule?e:{default:e},m=d(n),f=d(r),p=d(c);function h(e,t,a){if(!e.match(/api\/([\d.]+)/)&&!e.includes("api/next")&&a&&a.name!==t.version){const t="current"===a.name?"next":a.name;return e.endsWith("/api")?`${e}/${t}`:e.replace("/api/",`/api/${t}/`)}return e}e.exports=function(e){let{options:t,packages:a,history:r}=e;const c=l.useDocsVersion(),d=s.useDocsPreferredVersion(c.pluginId).preferredVersion;return n.useEffect((()=>{1===a.length?r.replace(h(a[0].entryPoints[0].reflection.permalink,c,d)):d&&r.replace(h(r.location.pathname,c,d))}),[a,r,c,d]),m.default.createElement("div",{className:"row"},m.default.createElement("div",{className:"col apiItemCol"},t.banner&&m.default.createElement("div",{className:"alert alert--info margin-bottom--md",role:"alert"},m.default.createElement("div",{dangerouslySetInnerHTML:{__html:t.banner}})),m.default.createElement(u.VersionBanner,null),m.default.createElement("div",{className:"apiItemContainer"},m.default.createElement("article",null,m.default.createElement("div",{className:"markdown"},m.default.createElement("header",null,m.default.createElement(p.default,{as:"h1"},"API")),m.default.createElement("section",{className:"tsd-panel"},m.default.createElement("h3",{className:"tsd-panel-header"},"Packages"),m.default.createElement("div",{className:"tsd-panel-content"},m.default.createElement("ul",{className:"tsd-index-list"},a.map((e=>m.default.createElement("li",{key:e.packageName,className:"tsd-truncate"},m.default.createElement(f.default,{className:"tsd-kind-icon",to:e.entryPoints[0].reflection.permalink},m.default.createElement("span",{className:"tsd-signature-symbol"},"v",e.packageVersion)," ",m.default.createElement("span",null,o.removeScopes(e.packageName,t.scopes)))))))))),m.default.createElement(i.Footer,null)))))}},66498:(e,t,a)=>{"use strict";const n=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.Footer=function(){return n.default.createElement("footer",{className:"tsd-footer"},"Powered by"," ",n.default.createElement("a",{href:"https://github.com/milesj/docusaurus-plugin-typedoc-api"},"docusaurus-plugin-typedoc-api")," ","and ",n.default.createElement("a",{href:"https://typedoc.org/"},"TypeDoc"))}},66715:(e,t,a)=>{"use strict";const n=a(27378),r=a(81884),s=a(62935),l=a(95709),c=a(12700),o=e=>e&&e.__esModule?e:{default:e},i=o(n),u=o(r);t.VersionBanner=function(){const e=c.useDocsVersion(),t=e.banner,a=e.docs,r=e.pluginId,o=e.version,d=s.useDocVersionSuggestions(r).latestVersionSuggestion,m=l.useDocsPreferredVersion(r).savePreferredVersionName,f=n.useCallback((()=>{m(d.name)}),[d.name,m]);if(!t||!d)return null;const p=a[d.label];return i.default.createElement("div",{className:`${l.ThemeClassNames.docs.docVersionBanner} alert alert--warning margin-bottom--md`,role:"alert"},i.default.createElement("div",null,"unreleased"===t&&i.default.createElement(i.default.Fragment,null,"This is documentation for an unreleased version."),"unmaintained"===t&&i.default.createElement(i.default.Fragment,null,"This is documentation for version ",i.default.createElement("b",null,o),".")," ","For the latest API, see version"," ",i.default.createElement("b",null,i.default.createElement(u.default,{to:p.id,onClick:f},p.title)),"."))}},64137:(e,t)=>{"use strict";t.removeScopes=function(e,t){return 0===t.length?e:t.reduce(((e,t)=>e.replace(new RegExp(`^(${t}-|@${t}/)`),"")),e)}},6324:(e,t)=>{function a(e){let t,a=[];for(let n of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(n))a.push(parseInt(n,10));else if(t=n.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,n,r,s]=t;if(n&&s){n=parseInt(n),s=parseInt(s);const e=n<s?1:-1;"-"!==r&&".."!==r&&"\u2025"!==r||(s+=e);for(let t=n;t!==s;t+=e)a.push(t)}}return a}t.default=a,e.exports=a}}]); \ No newline at end of file diff --git a/assets/js/51985ffa.ce564ac0.js b/assets/js/51985ffa.ce564ac0.js deleted file mode 100644 index c5b6b00e51f..00000000000 --- a/assets/js/51985ffa.ce564ac0.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6353],{1999:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>d});var n=a(25773),r=a(27378),s=a(37140),l=a(99213),c=a(20624),o=a(81884);const i="anchorWithStickyNavbar_JmGV",u="anchorWithHideOnScrollNavbar_pMLv";function d(e){let{as:t,id:a,...d}=e;const{navbar:{hideOnScroll:m}}=(0,c.L)();if("h1"===t||!a)return r.createElement(t,(0,n.Z)({},d,{id:void 0}));const f=(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:a});return r.createElement(t,(0,n.Z)({},d,{className:(0,s.Z)("anchor",m?u:i,d.className),id:a}),d.children,r.createElement(o.default,{className:"hash-link",to:`#${a}`,"aria-label":f,title:f},"\u200b"))}},96177:(e,t,a)=>{"use strict";a.d(t,{F:()=>c});var n=a(27378),r=a(41763);const s={attributes:!0,characterData:!0,childList:!0,subtree:!0};function l(e,t){const[a,l]=(0,n.useState)(),c=(0,n.useCallback)((()=>{l(e.current?.closest("[role=tabpanel][hidden]"))}),[e,l]);(0,n.useEffect)((()=>{c()}),[c]),function(e,t,a){void 0===a&&(a=s);const l=(0,r.zX)(t),c=(0,r.Ql)(a);(0,n.useEffect)((()=>{const t=new MutationObserver(l);return e&&t.observe(e,c),()=>t.disconnect()}),[e,l,c])}(a,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),c())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function c(){const[e,t]=(0,n.useState)(!1),[a,r]=(0,n.useState)(!1),s=(0,n.useRef)(null),c=(0,n.useCallback)((()=>{const a=s.current.querySelector("code");e?a.removeAttribute("style"):(a.style.whiteSpace="pre-wrap",a.style.overflowWrap="anywhere"),t((e=>!e))}),[s,e]),o=(0,n.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=s.current,a=e>t||s.current.querySelector("code").hasAttribute("style");r(a)}),[s]);return l(s,o),(0,n.useEffect)((()=>{o()}),[e,o]),(0,n.useEffect)((()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)})),[o]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:a,toggle:c}}},6499:(e,t,a)=>{"use strict";a.d(t,{p:()=>s});var n=a(55421),r=a(20624);function s(){const{prism:e}=(0,r.L)(),{colorMode:t}=(0,n.I)(),a=e.theme,s=e.darkTheme||a;return"dark"===t?s:a}},90433:(e,t,a)=>{"use strict";a.d(t,{QC:()=>f,Vo:()=>d,bc:()=>i,nZ:()=>m,nt:()=>u});var n=a(6324),r=a.n(n);const s=/title=(?<quote>["'])(?<title>.*?)\1/,l=/\{(?<range>[\d,-]+)\}/,c={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function o(e,t){const a=e.map((e=>{const{start:a,end:n}=c[e];return`(?:${a}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${a})\\s*$`)}function i(e){return e?.match(s)?.groups.title??""}function u(e){return Boolean(e?.includes("showLineNumbers"))}function d(e){return e.split(" ").find((e=>e.startsWith("language-")))?.replace(/language-/,"")}function m(e,t){let a=e.replace(/\n$/,"");const{language:n,magicComments:s,metastring:i}=t;if(i&&l.test(i)){const e=i.match(l).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=s[0].className,n=r()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:a}}if(void 0===n)return{lineClassNames:{},code:a};const u=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return o(["js","jsBlock"],t);case"jsx":case"tsx":return o(["js","jsBlock","jsx"],t);case"html":return o(["js","jsBlock","html"],t);case"python":case"py":case"bash":return o(["bash"],t);case"markdown":case"md":return o(["html","jsx","bash"],t);default:return o(Object.keys(c),t)}}(n,s),d=a.split("\n"),m=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),f=Object.fromEntries(s.filter((e=>e.line)).map((e=>{let{className:t,line:a}=e;return[a,t]}))),p=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:a}=e;return[a.start,t]}))),h=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:a}=e;return[a.end,t]})));for(let r=0;r<d.length;){const e=d[r].match(u);if(!e){r+=1;continue}const t=e.slice(1).find((e=>void 0!==e));f[t]?m[f[t]].range+=`${r},`:p[t]?m[p[t]].start=r:h[t]&&(m[h[t]].range+=`${m[h[t]].start}-${r-1},`),d.splice(r,1)}a=d.join("\n");const g={};return Object.entries(m).forEach((e=>{let[t,{range:a}]=e;r()(a).forEach((e=>{g[e]??=[],g[e].push(t)}))})),{lineClassNames:g,code:a}}function f(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},a={};return Object.entries(e.plain).forEach((e=>{let[n,r]=e;const s=t[n];s&&"string"==typeof r&&(a[s]=r)})),a}},51739:(e,t,a)=>{"use strict";const n=a(27378),r=a(81884),s=a(95709),l=a(12700),c=a(1999),o=a(64137),i=a(66498),u=a(66715),d=e=>e&&e.__esModule?e:{default:e},m=d(n),f=d(r),p=d(c);function h(e,t,a){if(!e.match(/api\/([\d.]+)/)&&!e.includes("api/next")&&a&&a.name!==t.version){const t="current"===a.name?"next":a.name;return e.endsWith("/api")?`${e}/${t}`:e.replace("/api/",`/api/${t}/`)}return e}e.exports=function(e){let{options:t,packages:a,history:r}=e;const c=l.useDocsVersion(),d=s.useDocsPreferredVersion(c.pluginId).preferredVersion;return n.useEffect((()=>{1===a.length?r.replace(h(a[0].entryPoints[0].reflection.permalink,c,d)):d&&r.replace(h(r.location.pathname,c,d))}),[a,r,c,d]),m.default.createElement("div",{className:"row"},m.default.createElement("div",{className:"col apiItemCol"},t.banner&&m.default.createElement("div",{className:"alert alert--info margin-bottom--md",role:"alert"},m.default.createElement("div",{dangerouslySetInnerHTML:{__html:t.banner}})),m.default.createElement(u.VersionBanner,null),m.default.createElement("div",{className:"apiItemContainer"},m.default.createElement("article",null,m.default.createElement("div",{className:"markdown"},m.default.createElement("header",null,m.default.createElement(p.default,{as:"h1"},"API")),m.default.createElement("section",{className:"tsd-panel"},m.default.createElement("h3",{className:"tsd-panel-header"},"Packages"),m.default.createElement("div",{className:"tsd-panel-content"},m.default.createElement("ul",{className:"tsd-index-list"},a.map((e=>m.default.createElement("li",{key:e.packageName,className:"tsd-truncate"},m.default.createElement(f.default,{className:"tsd-kind-icon",to:e.entryPoints[0].reflection.permalink},m.default.createElement("span",{className:"tsd-signature-symbol"},"v",e.packageVersion)," ",m.default.createElement("span",null,o.removeScopes(e.packageName,t.scopes)))))))))),m.default.createElement(i.Footer,null)))))}},66498:(e,t,a)=>{"use strict";const n=(e=>e&&e.__esModule?e:{default:e})(a(27378));t.Footer=function(){return n.default.createElement("footer",{className:"tsd-footer"},"Powered by"," ",n.default.createElement("a",{href:"https://github.com/milesj/docusaurus-plugin-typedoc-api"},"docusaurus-plugin-typedoc-api")," ","and ",n.default.createElement("a",{href:"https://typedoc.org/"},"TypeDoc"))}},66715:(e,t,a)=>{"use strict";const n=a(27378),r=a(81884),s=a(62935),l=a(95709),c=a(12700),o=e=>e&&e.__esModule?e:{default:e},i=o(n),u=o(r);t.VersionBanner=function(){const e=c.useDocsVersion(),t=e.banner,a=e.docs,r=e.pluginId,o=e.version,d=s.useDocVersionSuggestions(r).latestVersionSuggestion,m=l.useDocsPreferredVersion(r).savePreferredVersionName,f=n.useCallback((()=>{m(d.name)}),[d.name,m]);if(!t||!d)return null;const p=a[d.label];return i.default.createElement("div",{className:`${l.ThemeClassNames.docs.docVersionBanner} alert alert--warning margin-bottom--md`,role:"alert"},i.default.createElement("div",null,"unreleased"===t&&i.default.createElement(i.default.Fragment,null,"This is documentation for an unreleased version."),"unmaintained"===t&&i.default.createElement(i.default.Fragment,null,"This is documentation for version ",i.default.createElement("b",null,o),".")," ","For the latest API, see version"," ",i.default.createElement("b",null,i.default.createElement(u.default,{to:p.id,onClick:f},p.title)),"."))}},64137:(e,t)=>{"use strict";t.removeScopes=function(e,t){return 0===t.length?e:t.reduce(((e,t)=>e.replace(new RegExp(`^(${t}-|@${t}/)`),"")),e)}},6324:(e,t)=>{function a(e){let t,a=[];for(let n of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(n))a.push(parseInt(n,10));else if(t=n.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,n,r,s]=t;if(n&&s){n=parseInt(n),s=parseInt(s);const e=n<s?1:-1;"-"!==r&&".."!==r&&"\u2025"!==r||(s+=e);for(let t=n;t!==s;t+=e)a.push(t)}}return a}t.default=a,e.exports=a}}]); \ No newline at end of file diff --git a/assets/js/51ada3e3.a61b6085.js b/assets/js/51ada3e3.a61b6085.js new file mode 100644 index 00000000000..a9ec62db2d1 --- /dev/null +++ b/assets/js/51ada3e3.a61b6085.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51294],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(p,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},80144:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx",source:"@site/blog/2023-07-21_proto-v0.13.mdx",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",description:"With this release, we're embracing WASM even further.",date:"2023-07-21T00:00:00.000Z",formattedDate:"July 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2.195,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"},nextItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're embracing WASM even further."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/51ada3e3.d44d0d14.js b/assets/js/51ada3e3.d44d0d14.js deleted file mode 100644 index 2edecabd5e1..00000000000 --- a/assets/js/51ada3e3.d44d0d14.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1294],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(p,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},80144:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx",source:"@site/blog/2023-07-21_proto-v0.13.mdx",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",description:"With this release, we're embracing WASM even further.",date:"2023-07-21T00:00:00.000Z",formattedDate:"July 21, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2.195,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.13",title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"},nextItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're embracing WASM even further."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/53893.283b8554.js b/assets/js/53893.283b8554.js new file mode 100644 index 00000000000..b867f43f843 --- /dev/null +++ b/assets/js/53893.283b8554.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53893],{53893:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(99213),o=n(1123),r=n(64654);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/53df8e83.94eed950.js b/assets/js/53df8e83.94eed950.js new file mode 100644 index 00000000000..d350c71ea73 --- /dev/null +++ b/assets/js/53df8e83.94eed950.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33439],{35318:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>y});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),s=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=s(e.components);return o.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=s(r),y=n,f=u["".concat(c,".").concat(y)]||u[y]||m[y]||i;return r?o.createElement(f,a(a({ref:t},l),{},{components:r})):o.createElement(f,a({ref:t},l))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,a=new Array(i);a[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:n,a[1]=p;for(var s=2;s<i;s++)a[s]=r[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},67887:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));const i={slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},a=void 0,p={permalink:"/blog/typescript-monorepo",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-21_typescript-monorepo.mdx",source:"@site/blog/2022-11-21_typescript-monorepo.mdx",title:"Integrating TypeScript in a monorepo",description:"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is",date:"2022-11-21T00:00:00.000Z",formattedDate:"November 21, 2022",tags:[{label:"typescript",permalink:"/blog/tags/typescript"},{label:"monorepo",permalink:"/blog/tags/monorepo"}],readingTime:.505,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},prevItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"},nextItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"}},c={authorsImageUrls:[void 0]},s=[],l={toc:s};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is\na fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we\ntook it upon ourselves to answer this question!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/53df8e83.99d5018a.js b/assets/js/53df8e83.99d5018a.js deleted file mode 100644 index 09e5fe6e28d..00000000000 --- a/assets/js/53df8e83.99d5018a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3439],{35318:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>y});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),s=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=s(e.components);return o.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=s(r),y=n,f=u["".concat(c,".").concat(y)]||u[y]||m[y]||i;return r?o.createElement(f,a(a({ref:t},l),{},{components:r})):o.createElement(f,a({ref:t},l))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,a=new Array(i);a[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:n,a[1]=p;for(var s=2;s<i;s++)a[s]=r[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},67887:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));const i={slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},a=void 0,p={permalink:"/blog/typescript-monorepo",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-21_typescript-monorepo.mdx",source:"@site/blog/2022-11-21_typescript-monorepo.mdx",title:"Integrating TypeScript in a monorepo",description:"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is",date:"2022-11-21T00:00:00.000Z",formattedDate:"November 21, 2022",tags:[{label:"typescript",permalink:"/blog/tags/typescript"},{label:"monorepo",permalink:"/blog/tags/monorepo"}],readingTime:.505,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},prevItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"},nextItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"}},c={authorsImageUrls:[void 0]},s=[],l={toc:s};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is\na fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we\ntook it upon ourselves to answer this question!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/54024cf2.1e9f4e38.js b/assets/js/54024cf2.1e9f4e38.js deleted file mode 100644 index 6c5fe220383..00000000000 --- a/assets/js/54024cf2.1e9f4e38.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1783],{54712:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/node","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/54024cf2.f40bb160.js b/assets/js/54024cf2.f40bb160.js new file mode 100644 index 00000000000..b6e3f16a3d9 --- /dev/null +++ b/assets/js/54024cf2.f40bb160.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22293],{54712:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/node","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5419aa43.a273dc78.js b/assets/js/5419aa43.a273dc78.js new file mode 100644 index 00000000000..7826dc8f4b5 --- /dev/null +++ b/assets/js/5419aa43.a273dc78.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18914],{12349:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/migrate","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5419aa43.bb1d4d7f.js b/assets/js/5419aa43.bb1d4d7f.js deleted file mode 100644 index 4ea75b6a610..00000000000 --- a/assets/js/5419aa43.bb1d4d7f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8914],{12349:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/migrate","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/54350ada.2ac61142.js b/assets/js/54350ada.2ac61142.js deleted file mode 100644 index 1eaf1a1c31c..00000000000 --- a/assets/js/54350ada.2ac61142.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6154],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var l=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,l,a=function(e,t){if(null==e)return{};var n,l,a={},o=Object.keys(e);for(l=0;l<o.length;l++)n=o[l],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l<o.length;l++)n=o[l],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=l.createContext({}),p=function(e){var t=l.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return l.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},g=l.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),g=p(n),c=a,d=g["".concat(s,".").concat(c)]||g[c]||m[c]||o;return n?l.createElement(d,r(r({ref:t},u),{},{components:n})):l.createElement(d,r({ref:t},u))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=g;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,r[1]=i;for(var p=2;p<o;p++)r[p]=n[p];return l.createElement.apply(null,r)}return l.createElement.apply(null,n)}g.displayName="MDXCreateElement"},62265:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var l=n(25773),a=(n(27378),n(35318));const o={slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},r=void 0,i={permalink:"/blog/proto-v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx",source:"@site/blog/2023-08-23_proto-v0.15.mdx",title:"proto v0.15 - Install and uninstall globals",description:"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.",date:"2023-08-23T00:00:00.000Z",formattedDate:"August 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"global",permalink:"/blog/tags/global"}],readingTime:1.48,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},prevItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"},nextItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"}},s={authorsImageUrls:[void 0]},p=[{value:"Uninstall global dependencies",id:"uninstall-global-dependencies",level:2},{value:"WASM functions",id:"wasm-functions",level:3},{value:"TOML setting",id:"toml-setting",level:3},{value:"Improved WASM documentation",id:"improved-wasm-documentation",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,l.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This is a small release that adds support for uninstalling globals, and improves our WASM APIs."),(0,a.kt)("h2",{id:"uninstall-global-dependencies"},"Uninstall global dependencies"),(0,a.kt)("p",null,"proto has supported ",(0,a.kt)("a",{parentName:"p",href:"./proto-v0.5"},"installing globals since v0.5"),", but there's been no way to\nuninstall an existing global, until now! In this release, we're introducing the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/uninstall-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto uninstall-global"))," command, which will do just that!\nThe API is exactly the same as its installation counter-part."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"proto install-global node prettier\n\n# On second thought, nevermind...\nproto uninstall-global node prettier\n")),(0,a.kt)("h3",{id:"wasm-functions"},"WASM functions"),(0,a.kt)("p",null,"Implementing this command was rather straight forward, but most of the work went into supporting\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/wasm-plugin#installing-and-uninstalling-globals"},(0,a.kt)("inlineCode",{parentName:"a"},"install_global")," and ",(0,a.kt)("inlineCode",{parentName:"a"},"uninstall_global")),"\nfunctions for WASM plugins, and then updating all existing plugins! For those of you writing your\nown plugins, here's an example of what the Rust code looks like:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn install_global(\n Json(input): Json<InstallGlobalInput>,\n) -> FnResult<Json<InstallGlobalOutput>> {\n let result = exec_command!(inherit, "npm", ["install", "--global", &input.dependency]);\n\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\n}\n')),(0,a.kt)("h3",{id:"toml-setting"},"TOML setting"),(0,a.kt)("p",null,"We've also updated our TOML plugins to support uninstalling globals through the new\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/toml-plugin#global-packages"},(0,a.kt)("inlineCode",{parentName:"a"},"globals.uninstall-args"))," setting. Hopefully the name is\nself explanatory, but it's a list of arguments passed to the tool's binary, that'll uninstall the\nglobal."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'# ...\n\n[globals]\ninstall-args = ["install", "--global", "{dependency}"]\nuninstall-args = ["uninstall", "--global", "{dependency}"]\n')),(0,a.kt)("h2",{id:"improved-wasm-documentation"},"Improved WASM documentation"),(0,a.kt)("p",null,"With each release we're slowly stabilizing the WASM and TOML APIs for an official v1 release (which\nis soon), and with this, it requires more documentation. As part of this release, we've done a giant\npolish pass on our WASM documentation, and have included the following sections:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#virtual-paths"},"Virtual paths")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#host-environment"},"Host environment")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#host-functions"},"Host functions")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#tool-id-and-context"},"Tool ID and context")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#installing-and-uninstalling-globals"},"Installing and uninstalling globals"))),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.15.0"},"official release")," for a full list\nof changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Major WASM API improvements, including backwards incompatible changes.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/54350ada.590fdef8.js b/assets/js/54350ada.590fdef8.js new file mode 100644 index 00000000000..99fd96114c3 --- /dev/null +++ b/assets/js/54350ada.590fdef8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93363],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var l=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,l,a=function(e,t){if(null==e)return{};var n,l,a={},o=Object.keys(e);for(l=0;l<o.length;l++)n=o[l],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l<o.length;l++)n=o[l],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=l.createContext({}),p=function(e){var t=l.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return l.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},g=l.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),g=p(n),c=a,d=g["".concat(s,".").concat(c)]||g[c]||m[c]||o;return n?l.createElement(d,r(r({ref:t},u),{},{components:n})):l.createElement(d,r({ref:t},u))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=g;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,r[1]=i;for(var p=2;p<o;p++)r[p]=n[p];return l.createElement.apply(null,r)}return l.createElement.apply(null,n)}g.displayName="MDXCreateElement"},62265:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var l=n(25773),a=(n(27378),n(35318));const o={slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},r=void 0,i={permalink:"/blog/proto-v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx",source:"@site/blog/2023-08-23_proto-v0.15.mdx",title:"proto v0.15 - Install and uninstall globals",description:"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.",date:"2023-08-23T00:00:00.000Z",formattedDate:"August 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"global",permalink:"/blog/tags/global"}],readingTime:1.48,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},prevItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"},nextItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"}},s={authorsImageUrls:[void 0]},p=[{value:"Uninstall global dependencies",id:"uninstall-global-dependencies",level:2},{value:"WASM functions",id:"wasm-functions",level:3},{value:"TOML setting",id:"toml-setting",level:3},{value:"Improved WASM documentation",id:"improved-wasm-documentation",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,l.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This is a small release that adds support for uninstalling globals, and improves our WASM APIs."),(0,a.kt)("h2",{id:"uninstall-global-dependencies"},"Uninstall global dependencies"),(0,a.kt)("p",null,"proto has supported ",(0,a.kt)("a",{parentName:"p",href:"./proto-v0.5"},"installing globals since v0.5"),", but there's been no way to\nuninstall an existing global, until now! In this release, we're introducing the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/uninstall-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto uninstall-global"))," command, which will do just that!\nThe API is exactly the same as its installation counter-part."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"proto install-global node prettier\n\n# On second thought, nevermind...\nproto uninstall-global node prettier\n")),(0,a.kt)("h3",{id:"wasm-functions"},"WASM functions"),(0,a.kt)("p",null,"Implementing this command was rather straight forward, but most of the work went into supporting\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/wasm-plugin#installing-and-uninstalling-globals"},(0,a.kt)("inlineCode",{parentName:"a"},"install_global")," and ",(0,a.kt)("inlineCode",{parentName:"a"},"uninstall_global")),"\nfunctions for WASM plugins, and then updating all existing plugins! For those of you writing your\nown plugins, here's an example of what the Rust code looks like:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn install_global(\n Json(input): Json<InstallGlobalInput>,\n) -> FnResult<Json<InstallGlobalOutput>> {\n let result = exec_command!(inherit, "npm", ["install", "--global", &input.dependency]);\n\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\n}\n')),(0,a.kt)("h3",{id:"toml-setting"},"TOML setting"),(0,a.kt)("p",null,"We've also updated our TOML plugins to support uninstalling globals through the new\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/toml-plugin#global-packages"},(0,a.kt)("inlineCode",{parentName:"a"},"globals.uninstall-args"))," setting. Hopefully the name is\nself explanatory, but it's a list of arguments passed to the tool's binary, that'll uninstall the\nglobal."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'# ...\n\n[globals]\ninstall-args = ["install", "--global", "{dependency}"]\nuninstall-args = ["uninstall", "--global", "{dependency}"]\n')),(0,a.kt)("h2",{id:"improved-wasm-documentation"},"Improved WASM documentation"),(0,a.kt)("p",null,"With each release we're slowly stabilizing the WASM and TOML APIs for an official v1 release (which\nis soon), and with this, it requires more documentation. As part of this release, we've done a giant\npolish pass on our WASM documentation, and have included the following sections:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#virtual-paths"},"Virtual paths")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#host-environment"},"Host environment")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#host-functions"},"Host functions")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#tool-id-and-context"},"Tool ID and context")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/proto/wasm-plugin#installing-and-uninstalling-globals"},"Installing and uninstalling globals"))),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.15.0"},"official release")," for a full list\nof changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Major WASM API improvements, including backwards incompatible changes.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/54eec65a.15b3c20a.js b/assets/js/54eec65a.15b3c20a.js deleted file mode 100644 index 9261aa448f5..00000000000 --- a/assets/js/54eec65a.15b3c20a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[984],{73757:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/project","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/54eec65a.cc360961.js b/assets/js/54eec65a.cc360961.js new file mode 100644 index 00000000000..e320e4ed079 --- /dev/null +++ b/assets/js/54eec65a.cc360961.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50984],{73757:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/project","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5534fb85.615837c5.js b/assets/js/5534fb85.615837c5.js new file mode 100644 index 00000000000..ea96973df93 --- /dev/null +++ b/assets/js/5534fb85.615837c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43238],{26577:e=>{e.exports=JSON.parse('{"label":"log","permalink":"/blog/tags/log","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5534fb85.c3d88f18.js b/assets/js/5534fb85.c3d88f18.js deleted file mode 100644 index 8bb21b825c8..00000000000 --- a/assets/js/5534fb85.c3d88f18.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3238],{26577:e=>{e.exports=JSON.parse('{"label":"log","permalink":"/blog/tags/log","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5552634a.4bfd380d.js b/assets/js/5552634a.4bfd380d.js deleted file mode 100644 index 6f656a9a8ff..00000000000 --- a/assets/js/5552634a.4bfd380d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9719],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||l;return n?r.createElement(g,a(a({ref:t},p),{},{components:n})):r.createElement(g,a({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,a=new Array(l);a[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<l;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(9619);function l(e){let{header:t,inline:n,updated:l,version:a}=e;return r.createElement(o.Z,{text:`v${a}`,variant:l?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(40624),l=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?a[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},70978:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(25773),o=(n(27378),n(35318)),l=n(79022);const a={title:"uninstall-global"},i=void 0,s={unversionedId:"proto/commands/uninstall-global",id:"proto/commands/uninstall-global",title:"uninstall-global",description:"The proto uninstall-global ... (or proto ug) command will uninstall one or",source:"@site/docs/proto/commands/uninstall-global.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/uninstall-global",permalink:"/docs/proto/commands/uninstall-global",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/uninstall-global.mdx",tags:[],version:"current",frontMatter:{title:"uninstall-global"},sidebar:"proto",previous:{title:"uninstall",permalink:"/docs/proto/commands/uninstall"},next:{title:"upgrade",permalink:"/docs/proto/commands/upgrade"}},c={},p=[{value:"Arguments",id:"arguments",level:3}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(l.Z,{version:"0.15.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto uninstall-global <tool> ...<dependencies>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ug"),") command will uninstall one or\nmany global packages/modules/dependencies for the provided tool."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Uninstall a global by name\n$ proto uninstall-global rust cargo-release\n\n# Uninstall multiple globals\n$ proto uninstall-global rust cargo-release cargo-udeps\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"...<dependencies>")," - Name of dependencies and optional version.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5552634a.56ede7c7.js b/assets/js/5552634a.56ede7c7.js new file mode 100644 index 00000000000..e3bf8f9641d --- /dev/null +++ b/assets/js/5552634a.56ede7c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29719],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||l;return n?r.createElement(g,a(a({ref:t},p),{},{components:n})):r.createElement(g,a({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,a=new Array(l);a[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<l;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(9619);function l(e){let{header:t,inline:n,updated:l,version:a}=e;return r.createElement(o.Z,{text:`v${a}`,variant:l?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(40624),l=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?a[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},70978:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(25773),o=(n(27378),n(35318)),l=n(79022);const a={title:"uninstall-global"},i=void 0,s={unversionedId:"proto/commands/uninstall-global",id:"proto/commands/uninstall-global",title:"uninstall-global",description:"The proto uninstall-global ... (or proto ug) command will uninstall one or",source:"@site/docs/proto/commands/uninstall-global.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/uninstall-global",permalink:"/docs/proto/commands/uninstall-global",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/uninstall-global.mdx",tags:[],version:"current",frontMatter:{title:"uninstall-global"},sidebar:"proto",previous:{title:"uninstall",permalink:"/docs/proto/commands/uninstall"},next:{title:"upgrade",permalink:"/docs/proto/commands/upgrade"}},c={},p=[{value:"Arguments",id:"arguments",level:3}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(l.Z,{version:"0.15.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto uninstall-global <tool> ...<dependencies>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ug"),") command will uninstall one or\nmany global packages/modules/dependencies for the provided tool."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Uninstall a global by name\n$ proto uninstall-global rust cargo-release\n\n# Uninstall multiple globals\n$ proto uninstall-global rust cargo-release cargo-udeps\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"...<dependencies>")," - Name of dependencies and optional version.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.011ee45d.js b/assets/js/55960ee5.011ee45d.js deleted file mode 100644 index 2900cfdfeaf..00000000000 --- a/assets/js/55960ee5.011ee45d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4121],{88070:e=>{e.exports=JSON.parse('[{"label":"query","permalink":"/docs/tags/query","count":1},{"label":"lang","permalink":"/docs/tags/lang","count":1},{"label":"mql","permalink":"/docs/tags/mql","count":1},{"label":"codegen","permalink":"/docs/tags/codegen","count":1},{"label":"generator","permalink":"/docs/tags/generator","count":1},{"label":"scaffold","permalink":"/docs/tags/scaffold","count":1},{"label":"template","permalink":"/docs/tags/template","count":1},{"label":"code","permalink":"/docs/tags/code","count":1},{"label":"owners","permalink":"/docs/tags/owners","count":1},{"label":"codeowners","permalink":"/docs/tags/codeowners","count":1},{"label":"solid","permalink":"/docs/tags/solid","count":1},{"label":"solidjs","permalink":"/docs/tags/solidjs","count":1},{"label":"vcs","permalink":"/docs/tags/vcs","count":1},{"label":"hooks","permalink":"/docs/tags/hooks","count":1},{"label":"git","permalink":"/docs/tags/git","count":1},{"label":"git-hooks","permalink":"/docs/tags/git-hooks","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.4631ebe6.js b/assets/js/55960ee5.4631ebe6.js new file mode 100644 index 00000000000..c06c142031e --- /dev/null +++ b/assets/js/55960ee5.4631ebe6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74121],{88070:e=>{e.exports=JSON.parse('[{"label":"query","permalink":"/docs/tags/query","count":1},{"label":"lang","permalink":"/docs/tags/lang","count":1},{"label":"mql","permalink":"/docs/tags/mql","count":1},{"label":"codegen","permalink":"/docs/tags/codegen","count":1},{"label":"generator","permalink":"/docs/tags/generator","count":1},{"label":"scaffold","permalink":"/docs/tags/scaffold","count":1},{"label":"template","permalink":"/docs/tags/template","count":1},{"label":"code","permalink":"/docs/tags/code","count":1},{"label":"owners","permalink":"/docs/tags/owners","count":1},{"label":"codeowners","permalink":"/docs/tags/codeowners","count":1},{"label":"solid","permalink":"/docs/tags/solid","count":1},{"label":"solidjs","permalink":"/docs/tags/solidjs","count":1},{"label":"vcs","permalink":"/docs/tags/vcs","count":1},{"label":"hooks","permalink":"/docs/tags/hooks","count":1},{"label":"git","permalink":"/docs/tags/git","count":1},{"label":"git-hooks","permalink":"/docs/tags/git-hooks","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/5613e7cf.707015fb.js b/assets/js/5613e7cf.707015fb.js new file mode 100644 index 00000000000..91198126d62 --- /dev/null +++ b/assets/js/5613e7cf.707015fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64492],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=c(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||p[g]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},41560:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},i=void 0,l={permalink:"/blog/moon-v1.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx",source:"@site/blog/2023-06-26_moon-v1.9.mdx",title:"moon v1.9 - VCS hooks management and improved task inheritance",description:"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete",date:"2023-06-26T00:00:00.000Z",formattedDate:"June 26, 2023",tags:[{label:"vcs",permalink:"/blog/tags/vcs"},{label:"git",permalink:"/blog/tags/git"},{label:"hooks",permalink:"/blog/tags/hooks"},{label:"task",permalink:"/blog/tags/task"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:2.625,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},prevItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"},nextItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"}},s={image:r(1269).Z,authorsImageUrls:[void 0]},c=[],m={toc:c};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete\nrewrite of our task inheritance layer."))}p.isMDXComponent=!0},1269:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.9-0b831cf2af6e85b7dc549d1966de7775.png"}}]); \ No newline at end of file diff --git a/assets/js/5613e7cf.b49c10e3.js b/assets/js/5613e7cf.b49c10e3.js deleted file mode 100644 index 9b7af7e44eb..00000000000 --- a/assets/js/5613e7cf.b49c10e3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4492],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=c(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||p[g]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},41560:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},i=void 0,l={permalink:"/blog/moon-v1.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx",source:"@site/blog/2023-06-26_moon-v1.9.mdx",title:"moon v1.9 - VCS hooks management and improved task inheritance",description:"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete",date:"2023-06-26T00:00:00.000Z",formattedDate:"June 26, 2023",tags:[{label:"vcs",permalink:"/blog/tags/vcs"},{label:"git",permalink:"/blog/tags/git"},{label:"hooks",permalink:"/blog/tags/hooks"},{label:"task",permalink:"/blog/tags/task"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:2.625,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},prevItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"},nextItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"}},s={image:r(1269).Z,authorsImageUrls:[void 0]},c=[],m={toc:c};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete\nrewrite of our task inheritance layer."))}p.isMDXComponent=!0},1269:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.9-0b831cf2af6e85b7dc549d1966de7775.png"}}]); \ No newline at end of file diff --git a/assets/js/56a06382.6c6ffc0b.js b/assets/js/56a06382.6c6ffc0b.js deleted file mode 100644 index 952ef32e7c7..00000000000 --- a/assets/js/56a06382.6c6ffc0b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5091],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=r,g=m["".concat(s,".").concat(d)]||m[d]||c[d]||l;return n?a.createElement(g,o(o({ref:t},u),{},{components:n})):a.createElement(g,o({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var p=2;p<l;p++)o[p]=n[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const p="tabList_J5MA",u="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:p}=e;const c=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=c.indexOf(t),a=p[n].value;a!==i&&(m(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:d},o,{className:(0,l.Z)("tabs__item",u,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",p)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=p(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=c({queryString:n,groupId:r}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=m??g;return u({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),f(e)}),[d,f,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function p(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},55210:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>u,default:()=>f,frontMatter:()=>p,metadata:()=>c,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=(n(27457),n(33337)),i=n(39798),s=n(32189);const p={title:"Next example",sidebar_label:"Next"},u=void 0,c={unversionedId:"guides/examples/next",id:"guides/examples/next",title:"Next example",description:"In this guide, you'll learn how to integrate Next.js into moon.",source:"@site/docs/guides/examples/next.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/next",permalink:"/docs/guides/examples/next",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/next.mdx",tags:[],version:"current",frontMatter:{title:"Next example",sidebar_label:"Next"},sidebar:"guides",previous:{title:"Nest",permalink:"/docs/guides/examples/nest"},next:{title:"Nuxt",permalink:"/docs/guides/examples/nuxt"}},m={},d=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],g={toc:d};function f(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(s.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/nextjs-app",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org"},"Next.js")," into moon."),(0,r.kt)("p",null,"Begin by creating a new Next.js project at a specified folder path (this should not be created in\nthe workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npx create-next-app <project> --typescript\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/learn/basics/create-nextjs-app/setup"},"official Next.js docs")," for a\nmore in-depth guide to getting started!")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Next.js is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Next.js tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/next"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"# Inherit tasks from the `next` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['next']\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"Next.js has ",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/eslint"},"built-in support for ESLint"),", which is\ngreat, but complicates things a bit. Because of this, you have two options for moving forward:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use a ",(0,r.kt)("a",{parentName:"li",href:"./eslint"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"lint")," task")," and bypass Next.js's solution (preferred)."),(0,r.kt)("li",{parentName:"ul"},"Use Next.js's solution only.")),(0,r.kt)("p",null,"Regardless of which option is chosen, the following changes are applicable to all options and should\nbe made. Begin be installing the\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/eslint#eslint-config"},(0,r.kt)("inlineCode",{parentName:"a"},"eslint-config-next"))," dependency in\nthe application's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,r.kt)(l.Z,{dep:"eslint-config-next",package:"<project>",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("p",null,"Since the Next.js app is located within a subfolder, we'll need to tell the ESLint plugin where to\nlocate it. This can be achieved with a project-level ",(0,r.kt)("inlineCode",{parentName:"p"},".eslintrc.js")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/.eslintrc.js"',title:'"<project>/.eslintrc.js"'},"module.exports = {\n extends: 'next', // or 'next/core-web-vitals'\n settings: {\n next: {\n rootDir: __dirname,\n },\n },\n};\n")),(0,r.kt)("p",null,"With the basics now setup, choose the option that works best for you."),(0,r.kt)(o.Z,{groupId:"lint-type",defaultValue:"global",values:[{label:"Global lint",value:"global"},{label:"Next.js lint",value:"nextjs"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"global",mdxType:"TabItem"},(0,r.kt)("p",null,"We encourage using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task for consistency across all projects within the repository.\nWith this approach, the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint")," command itself will be ran and the ",(0,r.kt)("inlineCode",{parentName:"p"},"next lint")," command will be\nignored, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint-config-next")," rules will still be used."),(0,r.kt)("p",null,"Additionally, we suggest disabling the linter during the build process, but is not a requirement. As\na potential alternative, add the ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task as a dependency for the ",(0,r.kt)("inlineCode",{parentName:"p"},"build")," task."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/next.config.js"',title:'"<project>/next.config.js"'},"module.exports = {\n eslint: {\n ignoreDuringBuilds: true,\n },\n};\n"))),(0,r.kt)(i.Z,{value:"nextjs",mdxType:"TabItem"},(0,r.kt)("p",null,"If you'd prefer to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"next lint")," command, add it as a task to the project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n command: 'next lint'\n inputs:\n - '@group(next)'\n")),(0,r.kt)("p",null,"Furthermore, if a global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task exists, be sure to exclude it from being inherited."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['lint']\n")))),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Next.js also has\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/typescript"},"built-in support for TypeScript"),", but has\nsimilar caveats to the ",(0,r.kt)("a",{parentName:"p",href:"#eslint-integration"},"ESLint integration"),". TypeScript itself is a bit\ninvolved, so we suggest reading the official Next.js documentation before continuing."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository."),(0,r.kt)("p",null,"Additionally, we suggest disabling the typechecker during the build process, but is not a\nrequirement. As a potential alternative, add the ",(0,r.kt)("inlineCode",{parentName:"p"},"typecheck")," task as a dependency for the ",(0,r.kt)("inlineCode",{parentName:"p"},"build"),"\ntask."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/next.config.js"',title:'"<project>/next.config.js"'},"module.exports = {\n typescript: {\n ignoreBuildErrors: true,\n },\n};\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Next.js should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"next")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Next.js project, a\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/api-reference/next.config.js/introduction"},(0,r.kt)("inlineCode",{parentName:"a"},"next.config.<js|mjs>"))," is\ncreated, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure Next.js for\ntheir needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/next.config.js"',title:'"<project>/next.config.js"'},"module.exports = {\n compress: true,\n};\n")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/56a06382.a6fad1ed.js b/assets/js/56a06382.a6fad1ed.js new file mode 100644 index 00000000000..8438fa3a489 --- /dev/null +++ b/assets/js/56a06382.a6fad1ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15091],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=r,g=m["".concat(s,".").concat(d)]||m[d]||c[d]||l;return n?a.createElement(g,o(o({ref:t},u),{},{components:n})):a.createElement(g,o({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var p=2;p<l;p++)o[p]=n[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const p="tabList_J5MA",u="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:p}=e;const c=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=c.indexOf(t),a=p[n].value;a!==i&&(m(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:d},o,{className:(0,l.Z)("tabs__item",u,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",p)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=p(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=c({queryString:n,groupId:r}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=m??g;return u({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),f(e)}),[d,f,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function p(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},55210:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>u,default:()=>f,frontMatter:()=>p,metadata:()=>c,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=(n(27457),n(33337)),i=n(39798),s=n(32189);const p={title:"Next example",sidebar_label:"Next"},u=void 0,c={unversionedId:"guides/examples/next",id:"guides/examples/next",title:"Next example",description:"In this guide, you'll learn how to integrate Next.js into moon.",source:"@site/docs/guides/examples/next.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/next",permalink:"/docs/guides/examples/next",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/next.mdx",tags:[],version:"current",frontMatter:{title:"Next example",sidebar_label:"Next"},sidebar:"guides",previous:{title:"Nest",permalink:"/docs/guides/examples/nest"},next:{title:"Nuxt",permalink:"/docs/guides/examples/nuxt"}},m={},d=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],g={toc:d};function f(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(s.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/nextjs-app",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org"},"Next.js")," into moon."),(0,r.kt)("p",null,"Begin by creating a new Next.js project at a specified folder path (this should not be created in\nthe workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npx create-next-app <project> --typescript\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/learn/basics/create-nextjs-app/setup"},"official Next.js docs")," for a\nmore in-depth guide to getting started!")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Next.js is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Next.js tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/next"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"# Inherit tasks from the `next` preset\n# https://github.com/moonrepo/moon-configs\ntags: ['next']\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"Next.js has ",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/eslint"},"built-in support for ESLint"),", which is\ngreat, but complicates things a bit. Because of this, you have two options for moving forward:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use a ",(0,r.kt)("a",{parentName:"li",href:"./eslint"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"lint")," task")," and bypass Next.js's solution (preferred)."),(0,r.kt)("li",{parentName:"ul"},"Use Next.js's solution only.")),(0,r.kt)("p",null,"Regardless of which option is chosen, the following changes are applicable to all options and should\nbe made. Begin be installing the\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/eslint#eslint-config"},(0,r.kt)("inlineCode",{parentName:"a"},"eslint-config-next"))," dependency in\nthe application's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,r.kt)(l.Z,{dep:"eslint-config-next",package:"<project>",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("p",null,"Since the Next.js app is located within a subfolder, we'll need to tell the ESLint plugin where to\nlocate it. This can be achieved with a project-level ",(0,r.kt)("inlineCode",{parentName:"p"},".eslintrc.js")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/.eslintrc.js"',title:'"<project>/.eslintrc.js"'},"module.exports = {\n extends: 'next', // or 'next/core-web-vitals'\n settings: {\n next: {\n rootDir: __dirname,\n },\n },\n};\n")),(0,r.kt)("p",null,"With the basics now setup, choose the option that works best for you."),(0,r.kt)(o.Z,{groupId:"lint-type",defaultValue:"global",values:[{label:"Global lint",value:"global"},{label:"Next.js lint",value:"nextjs"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"global",mdxType:"TabItem"},(0,r.kt)("p",null,"We encourage using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task for consistency across all projects within the repository.\nWith this approach, the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint")," command itself will be ran and the ",(0,r.kt)("inlineCode",{parentName:"p"},"next lint")," command will be\nignored, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint-config-next")," rules will still be used."),(0,r.kt)("p",null,"Additionally, we suggest disabling the linter during the build process, but is not a requirement. As\na potential alternative, add the ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task as a dependency for the ",(0,r.kt)("inlineCode",{parentName:"p"},"build")," task."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/next.config.js"',title:'"<project>/next.config.js"'},"module.exports = {\n eslint: {\n ignoreDuringBuilds: true,\n },\n};\n"))),(0,r.kt)(i.Z,{value:"nextjs",mdxType:"TabItem"},(0,r.kt)("p",null,"If you'd prefer to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"next lint")," command, add it as a task to the project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n command: 'next lint'\n inputs:\n - '@group(next)'\n")),(0,r.kt)("p",null,"Furthermore, if a global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task exists, be sure to exclude it from being inherited."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['lint']\n")))),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Next.js also has\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/typescript"},"built-in support for TypeScript"),", but has\nsimilar caveats to the ",(0,r.kt)("a",{parentName:"p",href:"#eslint-integration"},"ESLint integration"),". TypeScript itself is a bit\ninvolved, so we suggest reading the official Next.js documentation before continuing."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository."),(0,r.kt)("p",null,"Additionally, we suggest disabling the typechecker during the build process, but is not a\nrequirement. As a potential alternative, add the ",(0,r.kt)("inlineCode",{parentName:"p"},"typecheck")," task as a dependency for the ",(0,r.kt)("inlineCode",{parentName:"p"},"build"),"\ntask."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/next.config.js"',title:'"<project>/next.config.js"'},"module.exports = {\n typescript: {\n ignoreBuildErrors: true,\n },\n};\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Next.js should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"next")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Next.js project, a\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/api-reference/next.config.js/introduction"},(0,r.kt)("inlineCode",{parentName:"a"},"next.config.<js|mjs>"))," is\ncreated, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure Next.js for\ntheir needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/next.config.js"',title:'"<project>/next.config.js"'},"module.exports = {\n compress: true,\n};\n")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5730.b7c57b9c.js b/assets/js/5730.b7c57b9c.js deleted file mode 100644 index e1d7f8f59e7..00000000000 --- a/assets/js/5730.b7c57b9c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5730],{35318:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>p});var r=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,a=function(e,n){if(null==e)return{};var t,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=r.createContext({}),s=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},m=function(e){var n=s(e.components);return r.createElement(c.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(t),p=a,f=u["".concat(c,".").concat(p)]||u[p]||d[p]||i;return t?r.createElement(f,o(o({ref:n},m),{},{components:t})):r.createElement(f,o({ref:n},m))}));function p(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=u;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var s=2;s<i;s++)o[s]=t[s];return r.createElement.apply(null,o)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},74903:(e,n,t)=>{t.d(n,{Z:()=>f});var r=t(27378),a=t(37140),i=t(75484),o=t(99213);const l="admonition_uH4V",c="admonitionHeading_P5_N",s="admonitionIcon_MF44",m="admonitionContent_yySL";const d={note:{infimaClassName:"secondary",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:r.createElement(o.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:r.createElement(o.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:r.createElement(o.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:r.createElement(o.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 16 16"},r.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:r.createElement(o.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},u={secondary:"note",important:"info",success:"tip",warning:"danger"};function p(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=r.Children.toArray(e),t=n.find((e=>r.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=r.createElement(r.Fragment,null,n.filter((e=>e!==t)));return{mdxAdmonitionTitle:t,rest:a}}(e.children);return{...e,title:e.title??n,children:t}}function f(e){const{children:n,type:t,title:o,icon:f}=p(e),h=function(e){const n=u[e]??e;return d[n]||(console.warn(`No admonition config found for admonition type "${n}". Using Info as fallback.`),d.info)}(t),v=o??h.label,{iconComponent:y}=h,E=f??r.createElement(y,null);return r.createElement("div",{className:(0,a.Z)(i.k.common.admonition,i.k.common.admonitionType(e.type),"alert",`alert--${h.infimaClassName}`,l)},r.createElement("div",{className:c},r.createElement("span",{className:s},E),v),r.createElement("div",{className:m},n))}},1999:(e,n,t)=>{t.r(n),t.d(n,{default:()=>d});var r=t(25773),a=t(27378),i=t(37140),o=t(99213),l=t(20624),c=t(81884);const s="anchorWithStickyNavbar_JmGV",m="anchorWithHideOnScrollNavbar_pMLv";function d(e){let{as:n,id:t,...d}=e;const{navbar:{hideOnScroll:u}}=(0,l.L)();if("h1"===n||!t)return a.createElement(n,(0,r.Z)({},d,{id:void 0}));const p=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:t});return a.createElement(n,(0,r.Z)({},d,{className:(0,i.Z)("anchor",u?m:s,d.className),id:t}),d.children,a.createElement(c.default,{className:"hash-link",to:`#${t}`,"aria-label":p,title:p},"\u200b"))}},40527:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(27378),a=t(30780);function i(e){const n=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return r.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,r.isValidElement)(e)&&n.includes(e.props?.mdxType)))?r.createElement("code",e):r.createElement(a.Z,e)}},36256:(e,n,t)=>{t.r(n),t.d(n,{default:()=>x});var r=t(25773),a=t(27378),i=t(7092);var o=t(40527),l=t(81884);var c=t(30780);var s=t(37140),m=t(33441),d=t(76457),u=t(80376);const p="details_IpIu",f="isBrowser_QD4r",h="collapsibleContent_Fd2D";function v(e){return!!e&&("SUMMARY"===e.tagName||v(e.parentElement))}function y(e,n){return!!e&&(e===n||y(e.parentElement,n))}function E(e){let{summary:n,children:t,...i}=e;const o=(0,d.Z)(),l=(0,a.useRef)(null),{collapsed:c,setCollapsed:s}=(0,u.u)({initialState:!i.open}),[E,g]=(0,a.useState)(i.open),b=a.isValidElement(n)?n:a.createElement("summary",null,n??"Details");return a.createElement("details",(0,r.Z)({},i,{ref:l,open:E,"data-collapsed":c,className:(0,m.Z)(p,o&&f,i.className),onMouseDown:e=>{v(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const n=e.target;v(n)&&y(n,l.current)&&(e.preventDefault(),c?(s(!1),g(!0)):s(!0))}}),b,a.createElement(u.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{s(e),g(!e)}},a.createElement("div",{className:h},t)))}const g="details_jERq";function b(e){let{...n}=e;return a.createElement(E,(0,r.Z)({},n,{className:(0,s.Z)("alert alert--info",g,n.className)}))}var C=t(1999);function Z(e){return a.createElement(C.default,e)}const N="containsTaskList_QWGu";function T(e){if(void 0!==e)return(0,s.Z)(e,e?.includes("contains-task-list")&&N)}const O="img_SS3x";var w=t(74903);const x={head:function(e){const n=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:n,originalType:t,...r}=e.props;return a.createElement(e.props.originalType,r)}return e}(e):e));return a.createElement(i.Z,e,n)},code:o.Z,a:function(e){return a.createElement(l.default,e)},pre:function(e){return a.createElement(c.Z,(0,a.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const n=a.Children.toArray(e.children),t=n.find((e=>a.isValidElement(e)&&"summary"===e.props?.mdxType)),i=a.createElement(a.Fragment,null,n.filter((e=>e!==t)));return a.createElement(b,(0,r.Z)({},e,{summary:t}),i)},ul:function(e){return a.createElement("ul",(0,r.Z)({},e,{className:T(e.className)}))},img:function(e){return a.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(n=e.className,(0,s.Z)(n,O))}));var n},h1:e=>a.createElement(Z,(0,r.Z)({as:"h1"},e)),h2:e=>a.createElement(Z,(0,r.Z)({as:"h2"},e)),h3:e=>a.createElement(Z,(0,r.Z)({as:"h3"},e)),h4:e=>a.createElement(Z,(0,r.Z)({as:"h4"},e)),h5:e=>a.createElement(Z,(0,r.Z)({as:"h5"},e)),h6:e=>a.createElement(Z,(0,r.Z)({as:"h6"},e)),admonition:w.Z,mermaid:()=>null}}}]); \ No newline at end of file diff --git a/assets/js/5794c75f.047b7365.js b/assets/js/5794c75f.047b7365.js deleted file mode 100644 index 4a0251ad1e0..00000000000 --- a/assets/js/5794c75f.047b7365.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3210],{23756:e=>{e.exports=JSON.parse('{"label":"dep-graph","permalink":"/blog/tags/dep-graph","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5794c75f.bba9810b.js b/assets/js/5794c75f.bba9810b.js new file mode 100644 index 00000000000..8df18bb1d9d --- /dev/null +++ b/assets/js/5794c75f.bba9810b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63210],{23756:e=>{e.exports=JSON.parse('{"label":"dep-graph","permalink":"/blog/tags/dep-graph","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/57bd32c7.6fbe4157.js b/assets/js/57bd32c7.6fbe4157.js new file mode 100644 index 00000000000..c3f6d9cfbed --- /dev/null +++ b/assets/js/57bd32c7.6fbe4157.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15911],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(n),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||r;return n?a.createElement(f,l(l({ref:t},u),{},{components:n})):a.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=m;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<r;s++)l[s]=n[s];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},74903:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(27378),o=n(37140),r=n(75484),l=n(99213);const i="admonition_uH4V",c="admonitionHeading_P5_N",s="admonitionIcon_MF44",u="admonitionContent_yySL";const p={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(l.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(l.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(l.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(l.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(l.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},m={secondary:"note",important:"info",success:"tip",warning:"danger"};function d(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=a.Children.toArray(e),n=t.find((e=>a.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:o}}(e.children);return{...e,title:e.title??t,children:n}}function f(e){const{children:t,type:n,title:l,icon:f}=d(e),h=function(e){const t=m[e]??e;return p[t]||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),p.info)}(n),g=l??h.label,{iconComponent:b}=h,k=f??a.createElement(b,null);return a.createElement("div",{className:(0,o.Z)(r.k.common.admonition,r.k.common.admonitionType(e.type),"alert",`alert--${h.infimaClassName}`,i)},a.createElement("div",{className:c},a.createElement("span",{className:s},k),g),a.createElement("div",{className:u},t))}},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),o=n(27378),r=n(37140),l=n(83457),i=n(35595),c=n(76457);const s="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:c,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=s[n].value;a!==i&&(m(t),c(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,r.Z)("tabs__item",u,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",s)},o.createElement(p,(0,a.Z)({},e,t)),o.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,c.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),o=n(35331),r=n(30654),l=n(70784),i=n(71819);function c(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function s(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=s(e),[l,c]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[m,d]=p({queryString:n,groupId:o}),[f,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,i.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),g=(()=>{const e=m??f;return u({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{g&&c(g)}),[g]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),h(e)}),[d,h,r]),tabValues:r}}},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(83469),r=n(9619);function l(e){let{text:t}=e;return a.createElement(r.Z,{text:t,icon:o.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},83893:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(74903),r=n(83828);const l={bun:"Bun",deno:"Deno",go:"Go",node:"Node.js",php:"PHP",python:"Python",ruby:"Ruby",rust:"Rust"};function i(e){let{children:t,noError:n}=e;const i=(0,r.gE)(),c=a.Children.toArray(t).find((e=>!!a.isValidElement(e)&&("string"==typeof e.key&&e.key.endsWith(i))));return c?a.createElement(a.Fragment,null,c):n?null:a.createElement(o.Z,{type:"danger"},"Sorry, there's no example for ",l[i]||i,". Try switching to another language for the time being!")}},83828:(e,t,n)=>{n.d(t,{ZP:()=>s,gE:()=>c});var a=n(27378),o=n(35331);const r=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function l(){return"undefined"!=typeof window&&"localStorage"in window}function i(){return(l()?localStorage.getItem("moonrepo.language"):null)??"node"}function c(){const[e,t]=(0,a.useState)(i());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function s(){const[e,t]=(0,a.useState)(i()),n=(0,o.TH)(),c=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),l())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return r.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:c,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},9634:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),o=n(81884),r=n(25773),l=n(9928),i=n(83469),c=n(31792);const s={discord:l.omb,github:l.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:l.mdU,workspace:i.emM,"workspace-config":i.cRF};function u(e){let{name:t,...n}=e;return a.createElement(c.Z,(0,r.Z)({},n,{icon:s[t]}))}function p(e){let{links:t}=e;return a.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>a.createElement(o.default,{key:e.url,href:e.url,className:"focus:outline-none"},a.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},a.createElement("div",{className:"flex-shrink-0"},a.createElement(u,{size:"lg",name:e.icon})),a.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(40624),r=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:c}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?l[c]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(r.Z,{icon:n,className:"mr-1"}),i)}},96570:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>u,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var a=n(25773),o=(n(27378),n(35318)),r=n(33337),l=n(39798),i=n(27915),c=n(9634);n(83893);const s={title:"Create a project"},u=void 0,p={unversionedId:"create-project",id:"create-project",title:"Create a project",description:"With a workspace, we can now house one or many projects,",source:"@site/docs/create-project.mdx",sourceDirName:".",slug:"/create-project",permalink:"/docs/create-project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/create-project.mdx",tags:[],version:"current",frontMatter:{title:"Create a project"},sidebar:"docs",previous:{title:"Setup toolchain",permalink:"/docs/setup-toolchain"},next:{title:"Create a task",permalink:"/docs/create-task"}},m={},d=[{value:"Declaring a project in the workspace",id:"declaring-a-project-in-the-workspace",level:2},{value:"Configuring a project",id:"configuring-a-project",level:2},{value:"Adding optional metadata",id:"adding-optional-metadata",level:3},{value:"Next steps",id:"next-steps",level:2}],f={toc:d};function h(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(i.Z,{text:"3 min",mdxType:"HeaderLabel"}),(0,o.kt)("p",null,"With a ",(0,o.kt)("a",{parentName:"p",href:"./setup-workspace"},"workspace"),", we can now house one or many ",(0,o.kt)("a",{parentName:"p",href:"./concepts/project"},"projects"),",\nwith a project being an application, library, or tool. In the end, each project will have its own\nbuild layer, personal tasks, and custom configuration."),(0,o.kt)("h2",{id:"declaring-a-project-in-the-workspace"},"Declaring a project in the workspace"),(0,o.kt)("p",null,"Although a project may exist in your repository, it's not accessible from moon until it's been\nmapped in the ",(0,o.kt)("a",{parentName:"p",href:"./config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects"))," setting found in\n",(0,o.kt)("a",{parentName:"p",href:"./config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". When mapping a project, we require a unique name for\nthe project, and a project source location (path relative from the workspace root)."),(0,o.kt)("p",null,'Let\'s say we have a frontend web application called "client", and a backend application called\n"server", our ',(0,o.kt)("inlineCode",{parentName:"p"},"projects")," setting would look like the following."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n client: 'apps/client'\n server: 'apps/server'\n")),(0,o.kt)("p",null,"We can now run ",(0,o.kt)("a",{parentName:"p",href:"./commands/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon project client"))," and\n",(0,o.kt)("a",{parentName:"p",href:"./commands/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon project server"))," to display information about each project. If these\nprojects were not mapped, or were pointing to an invalid source, the command would throw an error."),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("a",{parentName:"p",href:"./config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects"))," setting also supports a list of globs, if you'd prefer\nto not manually curate the projects list!")),(0,o.kt)("h2",{id:"configuring-a-project"},"Configuring a project"),(0,o.kt)("p",null,"A project can be configured in 1 of 2 ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Through the ",(0,o.kt)("a",{parentName:"li",href:"./config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," config file, which defines file groups and tasks\nthat are inherited by projects within the workspace. Perfect for standardizing common tasks like\nlinting, typechecking, and code formatting."),(0,o.kt)("li",{parentName:"ul"},"Through the ",(0,o.kt)("a",{parentName:"li",href:"./config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," config file, found at the root of each project, which\ndefines files groups, tasks, dependencies, and more that are unique to that project.")),(0,o.kt)("p",null,"Both config files are optional, and can be used separately or together, the choice is yours!"),(0,o.kt)("p",null,"Now let's continue with our client and server example above. If we wanted to configure both\nprojects, and define config that's also shared between the 2, we could do something like the\nfollowing:"),(0,o.kt)(r.Z,{groupId:"project-config",defaultValue:"client",values:[{label:"Client",value:"client"},{label:"Server",value:"server"},{label:"Both (inherited)",value:"inherit"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"client",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="apps/client/moon.yml"',title:'"apps/client/moon.yml"'},"tasks:\n build:\n command: 'webpack build --mode production --entry src/index.tsx --output-path build'\n inputs:\n - 'src/**/*'\n outputs:\n - 'build'\n"))),(0,o.kt)(l.Z,{value:"server",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="apps/server/moon.yml"',title:'"apps/server/moon.yml"'},"tasks:\n build:\n command: 'babel src --out-dir build'\n inputs:\n - 'src/**/*'\n outputs:\n - 'build'\n"))),(0,o.kt)(l.Z,{value:"inherit",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"tasks:\n format:\n command: 'prettier --check .'\n lint:\n command: 'eslint --no-error-on-unmatched-pattern .'\n test:\n command: 'jest --passWithNoTests .'\n typecheck:\n command: 'tsc --build'\n")))),(0,o.kt)("h3",{id:"adding-optional-metadata"},"Adding optional metadata"),(0,o.kt)("p",null,"When utilizing moon in a large monorepo or organization, ownership becomes very important, but also\ndifficult to maintain. To combat this problem, moon supports the\n",(0,o.kt)("a",{parentName:"p",href:"./config/project#project"},(0,o.kt)("inlineCode",{parentName:"a"},"project"))," field within a project's ",(0,o.kt)("a",{parentName:"p",href:"./config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"\nconfig."),(0,o.kt)("p",null,"This field is ",(0,o.kt)("em",{parentName:"p"},"optional")," by default, but when defined it provides metadata about the project,\nspecifically around team ownership, which developers maintain the project, where to discuss it, and\nmore!"),(0,o.kt)("p",null,"Furthermore, we also support the ",(0,o.kt)("a",{parentName:"p",href:"./config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," and\n",(0,o.kt)("a",{parentName:"p",href:"./config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language"))," settings for a more granular breakdown of what exists in the\nrepository."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"type: 'tool'\nlanguage: 'typescript'\n\nproject:\n name: 'moon'\n description: 'A repo management tool.'\n channel: '#moon'\n owner: 'infra.platform'\n maintainers: ['miles.johnson']\n")),(0,o.kt)("h2",{id:"next-steps"},"Next steps"),(0,o.kt)(c.Z,{links:[{icon:"new-task",label:"Create a task",url:"./create-task"},{icon:"workspace-config",label:(0,o.kt)("span",null,"Configure ",(0,o.kt)("code",null,".moon/workspace.yml")," further"),url:"./config/workspace"},{icon:"project-config-global",label:(0,o.kt)("span",null,"Configure ",(0,o.kt)("code",null,".moon/tasks.yml")," further"),url:"./config/tasks"},{icon:"project-config",label:(0,o.kt)("span",null,"Configure ",(0,o.kt)("code",null,"moon.yml")," further"),url:"./config/project"},{icon:"project",label:"Learn about projects",url:"./concepts/project"}],mdxType:"NextSteps"}))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/57bd32c7.78322b6b.js b/assets/js/57bd32c7.78322b6b.js deleted file mode 100644 index 59b4d68e7d3..00000000000 --- a/assets/js/57bd32c7.78322b6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5911],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(n),d=o,f=m["".concat(c,".").concat(d)]||m[d]||p[d]||r;return n?a.createElement(f,l(l({ref:t},u),{},{components:n})):a.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=m;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<r;s++)l[s]=n[s];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},74903:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(27378),o=n(37140),r=n(75484),l=n(99213);const i="admonition_uH4V",c="admonitionHeading_P5_N",s="admonitionIcon_MF44",u="admonitionContent_yySL";const p={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(l.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(l.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(l.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(l.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(l.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},m={secondary:"note",important:"info",success:"tip",warning:"danger"};function d(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=a.Children.toArray(e),n=t.find((e=>a.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:o}}(e.children);return{...e,title:e.title??t,children:n}}function f(e){const{children:t,type:n,title:l,icon:f}=d(e),h=function(e){const t=m[e]??e;return p[t]||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),p.info)}(n),g=l??h.label,{iconComponent:b}=h,k=f??a.createElement(b,null);return a.createElement("div",{className:(0,o.Z)(r.k.common.admonition,r.k.common.admonitionType(e.type),"alert",`alert--${h.infimaClassName}`,i)},a.createElement("div",{className:c},a.createElement("span",{className:s},k),g),a.createElement("div",{className:u},t))}},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),o=n(27378),r=n(37140),l=n(83457),i=n(35595),c=n(76457);const s="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:c,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=s[n].value;a!==i&&(m(t),c(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,r.Z)("tabs__item",u,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",s)},o.createElement(p,(0,a.Z)({},e,t)),o.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,c.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),o=n(35331),r=n(30654),l=n(70784),i=n(71819);function c(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function s(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=s(e),[l,c]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[m,d]=p({queryString:n,groupId:o}),[f,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,i.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),g=(()=>{const e=m??f;return u({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{g&&c(g)}),[g]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),h(e)}),[d,h,r]),tabValues:r}}},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(83469),r=n(9619);function l(e){let{text:t}=e;return a.createElement(r.Z,{text:t,icon:o.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},83893:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(74903),r=n(83828);const l={bun:"Bun",deno:"Deno",go:"Go",node:"Node.js",php:"PHP",python:"Python",ruby:"Ruby",rust:"Rust"};function i(e){let{children:t,noError:n}=e;const i=(0,r.gE)(),c=a.Children.toArray(t).find((e=>!!a.isValidElement(e)&&("string"==typeof e.key&&e.key.endsWith(i))));return c?a.createElement(a.Fragment,null,c):n?null:a.createElement(o.Z,{type:"danger"},"Sorry, there's no example for ",l[i]||i,". Try switching to another language for the time being!")}},83828:(e,t,n)=>{n.d(t,{ZP:()=>s,gE:()=>c});var a=n(27378),o=n(35331);const r=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function l(){return"undefined"!=typeof window&&"localStorage"in window}function i(){return(l()?localStorage.getItem("moonrepo.language"):null)??"node"}function c(){const[e,t]=(0,a.useState)(i());return(0,a.useEffect)((()=>{const e=e=>{t(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function s(){const[e,t]=(0,a.useState)(i()),n=(0,o.TH)(),c=(0,a.useCallback)((e=>{let{target:n}=e;const a=n.value;if(t(a),l())try{localStorage.setItem("moonrepo.language",a)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:a}))}),[]);return r.some((e=>n.pathname.startsWith(e)))?a.createElement("select",{value:e,onChange:c,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},a.createElement("option",{value:"deno"},"Deno"),a.createElement("option",{value:"go"},"Go"),a.createElement("option",{value:"node"},"Node.js"),a.createElement("option",{value:"php"},"PHP"),a.createElement("option",{value:"python"},"Python"),a.createElement("option",{value:"ruby"},"Ruby"),a.createElement("option",{value:"rust"},"Rust")):null}},9634:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),o=n(81884),r=n(25773),l=n(9928),i=n(83469),c=n(31792);const s={discord:l.omb,github:l.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:l.mdU,workspace:i.emM,"workspace-config":i.cRF};function u(e){let{name:t,...n}=e;return a.createElement(c.Z,(0,r.Z)({},n,{icon:s[t]}))}function p(e){let{links:t}=e;return a.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>a.createElement(o.default,{key:e.url,href:e.url,className:"focus:outline-none"},a.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},a.createElement("div",{className:"flex-shrink-0"},a.createElement(u,{size:"lg",name:e.icon})),a.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(40624),r=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:c}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?l[c]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(r.Z,{icon:n,className:"mr-1"}),i)}},96570:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>u,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var a=n(25773),o=(n(27378),n(35318)),r=n(33337),l=n(39798),i=n(27915),c=n(9634);n(83893);const s={title:"Create a project"},u=void 0,p={unversionedId:"create-project",id:"create-project",title:"Create a project",description:"With a workspace, we can now house one or many projects,",source:"@site/docs/create-project.mdx",sourceDirName:".",slug:"/create-project",permalink:"/docs/create-project",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/create-project.mdx",tags:[],version:"current",frontMatter:{title:"Create a project"},sidebar:"docs",previous:{title:"Setup toolchain",permalink:"/docs/setup-toolchain"},next:{title:"Create a task",permalink:"/docs/create-task"}},m={},d=[{value:"Declaring a project in the workspace",id:"declaring-a-project-in-the-workspace",level:2},{value:"Configuring a project",id:"configuring-a-project",level:2},{value:"Adding optional metadata",id:"adding-optional-metadata",level:3},{value:"Next steps",id:"next-steps",level:2}],f={toc:d};function h(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(i.Z,{text:"3 min",mdxType:"HeaderLabel"}),(0,o.kt)("p",null,"With a ",(0,o.kt)("a",{parentName:"p",href:"./setup-workspace"},"workspace"),", we can now house one or many ",(0,o.kt)("a",{parentName:"p",href:"./concepts/project"},"projects"),",\nwith a project being an application, library, or tool. In the end, each project will have its own\nbuild layer, personal tasks, and custom configuration."),(0,o.kt)("h2",{id:"declaring-a-project-in-the-workspace"},"Declaring a project in the workspace"),(0,o.kt)("p",null,"Although a project may exist in your repository, it's not accessible from moon until it's been\nmapped in the ",(0,o.kt)("a",{parentName:"p",href:"./config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects"))," setting found in\n",(0,o.kt)("a",{parentName:"p",href:"./config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". When mapping a project, we require a unique name for\nthe project, and a project source location (path relative from the workspace root)."),(0,o.kt)("p",null,'Let\'s say we have a frontend web application called "client", and a backend application called\n"server", our ',(0,o.kt)("inlineCode",{parentName:"p"},"projects")," setting would look like the following."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n client: 'apps/client'\n server: 'apps/server'\n")),(0,o.kt)("p",null,"We can now run ",(0,o.kt)("a",{parentName:"p",href:"./commands/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon project client"))," and\n",(0,o.kt)("a",{parentName:"p",href:"./commands/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon project server"))," to display information about each project. If these\nprojects were not mapped, or were pointing to an invalid source, the command would throw an error."),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("a",{parentName:"p",href:"./config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects"))," setting also supports a list of globs, if you'd prefer\nto not manually curate the projects list!")),(0,o.kt)("h2",{id:"configuring-a-project"},"Configuring a project"),(0,o.kt)("p",null,"A project can be configured in 1 of 2 ways:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Through the ",(0,o.kt)("a",{parentName:"li",href:"./config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," config file, which defines file groups and tasks\nthat are inherited by projects within the workspace. Perfect for standardizing common tasks like\nlinting, typechecking, and code formatting."),(0,o.kt)("li",{parentName:"ul"},"Through the ",(0,o.kt)("a",{parentName:"li",href:"./config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," config file, found at the root of each project, which\ndefines files groups, tasks, dependencies, and more that are unique to that project.")),(0,o.kt)("p",null,"Both config files are optional, and can be used separately or together, the choice is yours!"),(0,o.kt)("p",null,"Now let's continue with our client and server example above. If we wanted to configure both\nprojects, and define config that's also shared between the 2, we could do something like the\nfollowing:"),(0,o.kt)(r.Z,{groupId:"project-config",defaultValue:"client",values:[{label:"Client",value:"client"},{label:"Server",value:"server"},{label:"Both (inherited)",value:"inherit"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"client",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="apps/client/moon.yml"',title:'"apps/client/moon.yml"'},"tasks:\n build:\n command: 'webpack build --mode production --entry src/index.tsx --output-path build'\n inputs:\n - 'src/**/*'\n outputs:\n - 'build'\n"))),(0,o.kt)(l.Z,{value:"server",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="apps/server/moon.yml"',title:'"apps/server/moon.yml"'},"tasks:\n build:\n command: 'babel src --out-dir build'\n inputs:\n - 'src/**/*'\n outputs:\n - 'build'\n"))),(0,o.kt)(l.Z,{value:"inherit",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"tasks:\n format:\n command: 'prettier --check .'\n lint:\n command: 'eslint --no-error-on-unmatched-pattern .'\n test:\n command: 'jest --passWithNoTests .'\n typecheck:\n command: 'tsc --build'\n")))),(0,o.kt)("h3",{id:"adding-optional-metadata"},"Adding optional metadata"),(0,o.kt)("p",null,"When utilizing moon in a large monorepo or organization, ownership becomes very important, but also\ndifficult to maintain. To combat this problem, moon supports the\n",(0,o.kt)("a",{parentName:"p",href:"./config/project#project"},(0,o.kt)("inlineCode",{parentName:"a"},"project"))," field within a project's ",(0,o.kt)("a",{parentName:"p",href:"./config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"\nconfig."),(0,o.kt)("p",null,"This field is ",(0,o.kt)("em",{parentName:"p"},"optional")," by default, but when defined it provides metadata about the project,\nspecifically around team ownership, which developers maintain the project, where to discuss it, and\nmore!"),(0,o.kt)("p",null,"Furthermore, we also support the ",(0,o.kt)("a",{parentName:"p",href:"./config/project#type"},(0,o.kt)("inlineCode",{parentName:"a"},"type"))," and\n",(0,o.kt)("a",{parentName:"p",href:"./config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language"))," settings for a more granular breakdown of what exists in the\nrepository."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"type: 'tool'\nlanguage: 'typescript'\n\nproject:\n name: 'moon'\n description: 'A repo management tool.'\n channel: '#moon'\n owner: 'infra.platform'\n maintainers: ['miles.johnson']\n")),(0,o.kt)("h2",{id:"next-steps"},"Next steps"),(0,o.kt)(c.Z,{links:[{icon:"new-task",label:"Create a task",url:"./create-task"},{icon:"workspace-config",label:(0,o.kt)("span",null,"Configure ",(0,o.kt)("code",null,".moon/workspace.yml")," further"),url:"./config/workspace"},{icon:"project-config-global",label:(0,o.kt)("span",null,"Configure ",(0,o.kt)("code",null,".moon/tasks.yml")," further"),url:"./config/tasks"},{icon:"project-config",label:(0,o.kt)("span",null,"Configure ",(0,o.kt)("code",null,"moon.yml")," further"),url:"./config/project"},{icon:"project",label:"Learn about projects",url:"./concepts/project"}],mdxType:"NextSteps"}))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/59262.fbc6c49f.js b/assets/js/59262.fbc6c49f.js new file mode 100644 index 00000000000..49467e182c7 --- /dev/null +++ b/assets/js/59262.fbc6c49f.js @@ -0,0 +1,2 @@ +/*! For license information please see 59262.fbc6c49f.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59262],{35318:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>c,kt:()=>f});var r=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),l=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),h=l(n),f=i,p=h["".concat(u,".").concat(f)]||h[f]||d[f]||a;return n?r.createElement(p,o(o({ref:t},c),{},{components:n})):r.createElement(p,o({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var l=2;l<a;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}h.displayName="MDXCreateElement"},58406:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var r=n(1),i=function(e){e&&e("layout","dagre",r)};"undefined"!=typeof cytoscape&&i(cytoscape),e.exports=i},function(e,t,n){function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var i=function(e){return"function"==typeof e},a=n(2),o=n(3),s=n(4);function u(e){this.options=o({},a,e)}u.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,a=function(e,t){return i(t)?t.apply(e,[e]):t},o=e.boundingBox||{x1:0,y1:0,w:t.width(),h:t.height()};void 0===o.x2&&(o.x2=o.x1+o.w),void 0===o.w&&(o.w=o.x2-o.x1),void 0===o.y2&&(o.y2=o.y1+o.h),void 0===o.h&&(o.h=o.y2-o.y1);var u=new s.graphlib.Graph({multigraph:!0,compound:!0}),l={},c=function(e,t){null!=t&&(l[e]=t)};c("nodesep",e.nodeSep),c("edgesep",e.edgeSep),c("ranksep",e.rankSep),c("rankdir",e.rankDir),c("align",e.align),c("ranker",e.ranker),c("acyclicer",e.acyclicer),u.setGraph(l),u.setDefaultEdgeLabel((function(){return{}})),u.setDefaultNodeLabel((function(){return{}}));var d=n.nodes();i(e.sort)&&(d=d.sort(e.sort));for(var h=0;h<d.length;h++){var f=d[h],p=f.layoutDimensions(e);u.setNode(f.id(),{width:p.w,height:p.h,name:f.id()})}for(var v=0;v<d.length;v++){var g=d[v];g.isChild()&&u.setParent(g.id(),g.parent().id())}var y=n.edges().stdFilter((function(e){return!e.source().isParent()&&!e.target().isParent()}));i(e.sort)&&(y=y.sort(e.sort));for(var m=0;m<y.length;m++){var b=y[m];u.setEdge(b.source().id(),b.target().id(),{minlen:a(b,e.minLen),weight:a(b,e.edgeWeight),name:b.id()},b.id())}s.layout(u);for(var x,w=u.nodes(),E=0;E<w.length;E++){var k=w[E],_=u.node(k);t.getElementById(k).scratch().dagre=_}return e.boundingBox?(x={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0},d.forEach((function(e){var t=e.scratch().dagre;x.x1=Math.min(x.x1,t.x),x.x2=Math.max(x.x2,t.x),x.y1=Math.min(x.y1,t.y),x.y2=Math.max(x.y2,t.y)})),x.w=x.x2-x.x1,x.h=x.y2-x.y1):x=o,d.layoutPositions(this,e,(function(t){var n=(t="object"===r(t)?t:this).scratch().dagre;return function(t){if(e.boundingBox){var n=0===x.w?0:(t.x-x.x1)/x.w,r=0===x.h?0:(t.y-x.y1)/x.h;return{x:o.x1+n*o.w,y:o.y1+r*o.h}}return t}({x:n.x,y:n.y})})),this},e.exports=u},function(e,t){var n={nodeSep:void 0,edgeSep:void 0,rankSep:void 0,rankDir:void 0,align:void 0,acyclicer:void 0,ranker:void 0,minLen:function(e){return 1},edgeWeight:function(e){return 1},fit:!0,padding:30,spacingFactor:void 0,nodeDimensionsIncludeLabels:!1,animate:!1,animateFilter:function(e,t){return!0},animationDuration:500,animationEasing:void 0,boundingBox:void 0,transform:function(e,t){return t},ready:function(){},sort:void 0,stop:function(){}};e.exports=n},function(e,t){e.exports=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return n.forEach((function(t){Object.keys(t).forEach((function(n){return e[n]=t[n]}))})),e}},function(t,n){t.exports=e}])},e.exports=r(n(24259))},35315:(e,t,n)=>{"use strict";var r=n(66726),i=n(87251),a=n(99729),o=n(47215),s=n(40110);function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(r),c=u(i),d=u(a),h=u(o),f=u(s);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t,n){return t&&g(e.prototype,t),n&&g(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(u){s=!0,i=u}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return x(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return x(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w="undefined"==typeof window?null:window,E=w?w.navigator:null;w&&w.document;var k=p(""),_=p({}),C=p((function(){})),S="undefined"==typeof HTMLElement?"undefined":p(HTMLElement),P=function(e){return e&&e.instanceString&&T(e.instanceString)?e.instanceString():null},D=function(e){return null!=e&&p(e)==k},T=function(e){return null!=e&&p(e)===C},M=function(e){return!O(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},B=function(e){return null!=e&&p(e)===_&&!M(e)&&e.constructor===Object},N=function(e){return null!=e&&p(e)===p(1)&&!isNaN(e)},I=function(e){return"undefined"===S?void 0:null!=e&&e instanceof HTMLElement},O=function(e){return z(e)||L(e)},z=function(e){return"collection"===P(e)&&e._private.single},L=function(e){return"collection"===P(e)&&!e._private.single},A=function(e){return"core"===P(e)},j=function(e){return"stylesheet"===P(e)},R=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},F=function(e){return function(e){return null!=e&&p(e)===_}(e)&&T(e.then)},V=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=this,a=arguments,o=t.apply(i,a),s=n.cache;return(r=s[o])||(r=s[o]=e.apply(i,a)),r};return n.cache={},n},q=V((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),Y=V((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),X=V((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),W=function(e){return R(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},G="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",H=function(e,t){return e<t?-1:e>t?1:0},U=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},K=function(e){return(M(e)?e:null)||function(e){return Z[e.toLowerCase()]}(e)||function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}}(e)||function(e){var t,n=new RegExp("^rgb[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var u=n[4];if(void 0!==u){if((u=parseFloat(u))<0||u>1)return;t.push(u)}}return t}(e)||function(e){var t,n,r,i,a,o,s,u;function l(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=u=Math.round(255*i);else{var d=i<.5?i*(1+r):i+r-i*r,h=2*i-d;o=Math.round(255*l(h,d,n+1/3)),s=Math.round(255*l(h,d,n)),u=Math.round(255*l(h,d,n-1/3))}t=[o,s,u,a]}return t}(e)},Z={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},$=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(B(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},Q=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(B(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t},J=w?w.performance:null,ee=J&&J.now?function(){return J.now()}:function(){return Date.now()},te=function(){if(w){if(w.requestAnimationFrame)return function(e){w.requestAnimationFrame(e)};if(w.mozRequestAnimationFrame)return function(e){w.mozRequestAnimationFrame(e)};if(w.webkitRequestAnimationFrame)return function(e){w.webkitRequestAnimationFrame(e)};if(w.msRequestAnimationFrame)return function(e){w.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(ee())}),1e3/60)}}(),ne=function(e){return te(e)},re=ee,ie=9261,ae=65599,oe=5381,se=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie,r=n;!(t=e.next()).done;)r=r*ae+t.value|0;return r},ue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie;return t*ae+e|0},le=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:oe;return(t<<5)+t+e|0},ce=function(e){return 2097152*e[0]+e[1]},de=function(e,t){return[ue(e[0],t[0]),le(e[1],t[1])]},he=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return se({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},fe=function(){return pe(arguments)},pe=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?he(r):he(r,t)}return t},ve=!0,ge=null!=console.warn,ye=null!=console.trace,me=Number.MAX_SAFE_INTEGER||9007199254740991,be=function(){return!0},xe=function(){return!1},we=function(){return 0},Ee=function(){},ke=function(e){throw new Error(e)},_e=function(e){if(void 0===e)return ve;ve=!!e},Ce=function(e){_e()&&(ge?console.warn(e):(console.log(e),ye&&console.trace()))},Se=function(e){return null==e?e:M(e)?e.slice():B(e)?function(e){return U({},e)}(e):e},Pe=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},De={},Te=function(){return De},Me=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Be=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Ne=function(e){e.splice(0,e.length)},Ie=function(e,t,n){return n&&(t=X(n,t)),e[t]},Oe=function(e,t,n,r){n&&(t=X(n,t)),e[t]=r},ze="undefined"!=typeof Map?Map:function(){function e(){v(this,e),this._obj={}}return y(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),Le=function(){function e(t){if(v(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r<n.length;r++)this.add(n[r])}}return y(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ae="undefined"!==("undefined"==typeof Set?"undefined":p(Set))?Set:Le,je=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&A(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ae,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var u=[];M(t.classes)?u=t.classes:D(t.classes)&&(u=t.classes.split(/\s+/));for(var l=0,c=u.length;l<c;l++){var d=u[l];d&&""!==d&&i.classes.add(d)}this.createEmitter();var h=t.style||t.css;h&&(Ce("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(h)),(void 0===n||n)&&this.restore()}else ke("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else ke("An element must have a core reference and parameters set")},Re=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;B(t)&&!O(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||T(n)?r:n,n=T(n)?n:function(){};for(var a,o=this._private.cy,s=t=D(t)?this.filter(t):t,u=[],l=[],c={},d={},h={},f=0,p=this.byGroup(),v=p.nodes,g=p.edges,y=0;y<s.length;y++){var m=s[y],b=m.id();m.isNode()&&(u.unshift(m),e.bfs&&(h[b]=!0,l.push(m)),d[b]=0)}for(var x=function(){var t=e.bfs?u.shift():u.pop(),i=t.id();if(e.dfs){if(h[i])return"continue";h[i]=!0,l.push(t)}var o,s=d[i],p=c[i],y=null!=p?p.source():null,m=null!=p?p.target():null,b=null==p?void 0:t.same(y)?m[0]:y[0];if(!0===(o=n(t,p,b,f++,s)))return a=t,"break";if(!1===o)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&g.has(e)})),w=0;w<x.length;w++){var E=x[w],k=E.connectedNodes().filter((function(e){return!e.same(t)&&v.has(e)})),_=k.id();0===k.length||h[_]||(k=k[0],u.push(k),e.bfs&&(h[_]=!0,l.push(k)),c[_]=E,d[_]=d[i]+1)}};0!==u.length;){var w=x();if("continue"!==w&&"break"===w)break}for(var E=o.collection(),k=0;k<l.length;k++){var _=l[k],C=c[_.id()];null!=C&&E.push(C),E.push(_)}return{path:o.collection(E),found:o.collection(a)}}},Fe={breadthFirstSearch:Re({bfs:!0}),depthFirstSearch:Re({dfs:!0})};Fe.bfs=Fe.breadthFirstSearch,Fe.dfs=Fe.depthFirstSearch;var Ve=Me({root:null,weight:function(e){return 1},directed:!1}),qe={dijkstra:function(e){if(!B(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Ve(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,u=D(r)?this.filter(r)[0]:r[0],l={},d={},h={},f=this.byGroup(),p=f.nodes,v=f.edges;v.unmergeBy((function(e){return e.isLoop()}));for(var g=function(e){return l[e.id()]},y=function(e,t){l[e.id()]=t,m.updateItem(e)},m=new c.default((function(e,t){return g(e)-g(t)})),b=0;b<p.length;b++){var x=p[b];l[x.id()]=x.same(u)?0:1/0,m.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(v),i=1/0,o=0;o<r.length;o++){var u=r[o],l=s(u);(l<i||!n)&&(i=l,n=u)}return{edge:n,dist:i}};m.size()>0;){var E=m.pop(),k=g(E),_=E.id();if(h[_]=k,k!==1/0)for(var C=E.neighborhood().intersect(p),S=0;S<C.length;S++){var P=C[S],T=P.id(),M=w(E,P),N=k+M.dist;N<g(P)&&(y(P,N),d[T]={node:E,edge:M.edge})}}return{distanceTo:function(e){var t=D(e)?p.filter(e)[0]:e[0];return h[t.id()]},pathTo:function(e){var t=D(e)?p.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)for(n.unshift(t);d[i];){var a=d[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},Ye={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t<a.length;t++){if(a[t].has(e))return t}},u=0;u<i;u++)a[u]=this.spawn(n[u]);for(var l=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<l.length;c++){var d=l[c],h=d.source()[0],f=d.target()[0],p=s(h),v=s(f),g=a[p],y=a[v];p!==v&&(o.merge(d),g.merge(y),a.splice(v,1))}return o}},Xe=Me({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),We={aStar:function(e){var t=this.cy(),n=Xe(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var u,l,d=r.id(),h=i.id(),f={},p={},v={},g=new c.default((function(e,t){return p[e.id()]-p[t.id()]})),y=new Ae,m={},b={},x=function(e,t){g.push(e),y.add(t)};x(r,d),f[d]=0,p[d]=a(r);for(var w,E=0;g.size()>0;){if(u=g.pop(),l=u.id(),y.delete(l),E++,l===h){for(var k=[],_=i,C=h,S=b[C];k.unshift(_),null!=S&&k.unshift(S),null!=(_=m[C]);)S=b[C=_.id()];return{found:!0,distance:f[l],path:this.spawn(k),steps:E}}v[l]=!0;for(var P=u._private.edges,D=0;D<P.length;D++){var T=P[D];if(this.hasElementWithId(T.id())&&(!o||T.data("source")===l)){var M=T.source(),B=T.target(),N=M.id()!==l?M:B,I=N.id();if(this.hasElementWithId(I)&&!v[I]){var O=f[l]+s(T);w=I,y.has(w)?O<f[I]&&(f[I]=O,p[I]=O+a(N),m[I]=u,b[I]=T):(f[I]=O,p[I]=O+a(N),x(N,I),m[I]=u,b[I]=T)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},Ge=Me({weight:function(e){return 1},directed:!1}),He={floydWarshall:function(e){for(var t=this.cy(),n=Ge(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,u=o.edges,l=s.length,c=l*l,d=function(e){return s.indexOf(e)},h=function(e){return s[e]},f=new Array(c),p=0;p<c;p++){var v=p%l,g=(p-v)/l;f[p]=g===v?0:1/0}for(var y=new Array(c),m=new Array(c),b=0;b<u.length;b++){var x=u[b],w=x.source()[0],E=x.target()[0];if(w!==E){var k=d(w),_=d(E),C=k*l+_,S=a(x);if(f[C]>S&&(f[C]=S,y[C]=_,m[C]=x),!i){var P=_*l+k;!i&&f[P]>S&&(f[P]=S,y[P]=k,m[P]=x)}}}for(var T=0;T<l;T++)for(var M=0;M<l;M++)for(var B=M*l+T,N=0;N<l;N++){var I=M*l+N,O=T*l+N;f[B]+f[O]<f[I]&&(f[I]=f[B]+f[O],y[I]=y[B])}var z=function(e){return d(function(e){return(D(e)?t.filter(e):e)[0]}(e))},L={distance:function(e,t){var n=z(e),r=z(t);return f[n*l+r]},path:function(e,n){var r=z(e),i=z(n),a=h(r);if(r===i)return a.collection();if(null==y[r*l+i])return t.collection();var o,s=t.collection(),u=r;for(s.merge(a);r!==i;)u=r,r=y[r*l+i],o=m[u*l+r],s.merge(o),s.merge(h(r));return s}};return L}},Ue=Me({weight:function(e){return 1},directed:!1,root:null}),Ke={bellmanFord:function(e){var t=this,n=Ue(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,u=this.cy(),l=this.byGroup(),c=l.edges,d=l.nodes,h=d.length,f=new ze,p=!1,v=[];a=u.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var g=c.length,y=function(e){var t=f.get(e.id());return t||(t={},f.set(e.id(),t)),t},m=function(e){return(D(e)?u.$(e):e)[0]},b=0;b<h;b++){var x=d[b],w=y(x);x.same(a)?w.dist=0:w.dist=1/0,w.pred=null,w.edge=null}for(var E=!1,k=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,E=!0)},_=1;_<h;_++){E=!1;for(var C=0;C<g;C++){var S=c[C],P=S.source(),T=S.target(),M=o(S),B=y(P),N=y(T);k(P,0,S,B,N,M),i||k(T,0,S,N,B,M)}if(!E)break}if(E)for(var I=[],O=0;O<g;O++){var z=c[O],L=z.source(),A=z.target(),j=o(z),R=y(L).dist,F=y(A).dist;if(R+j<F||!i&&F+j<R){if(p||(Ce("Graph contains a negative weight cycle for Bellman-Ford"),p=!0),!1===e.findNegativeWeightCycles)break;var V=[];R+j<F&&V.push(L),!i&&F+j<R&&V.push(A);for(var q=V.length,Y=0;Y<q;Y++){var X=V[Y],W=[X];W.push(y(X).edge);for(var G=y(X).pred;-1===W.indexOf(G);)W.push(G),W.push(y(G).edge),G=y(G).pred;for(var H=(W=W.slice(W.indexOf(G)))[0].id(),U=0,K=2;K<W.length;K+=2)W[K].id()<H&&(H=W[K].id(),U=K);(W=W.slice(U).concat(W.slice(0,U))).push(W[0]);var Z=W.map((function(e){return e.id()})).join(",");-1===I.indexOf(Z)&&(v.push(s.spawn(W)),I.push(Z))}}}return{distanceTo:function(e){return y(m(e)).dist},pathTo:function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,r=m(e),i=[],o=r;;){if(null==o)return t.spawn();var u=y(o),l=u.edge,c=u.pred;if(i.unshift(o[0]),o.same(n)&&i.length>0)break;null!=l&&i.unshift(l),o=c}return s.spawn(i)},hasNegativeWeightCycle:p,negativeWeightCycles:v}}},Ze=Math.sqrt(2),$e=function(e,t,n){0===n.length&&ke("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],u=n,l=u.length-1;l>=0;l--){var c=u[l],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&u.splice(l,1)}for(var f=0;f<u.length;f++){var p=u[f];p[1]===s?(u[f]=p.slice(),u[f][1]=o):p[2]===s&&(u[f]=p.slice(),u[f][2]=o)}for(var v=0;v<t.length;v++)t[v]===s&&(t[v]=o);return u},Qe=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=$e(i,e,t),n--}return t},Je={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/Ze);if(!(i<2)){for(var u=[],l=0;l<a;l++){var c=r[l];u.push([l,n.indexOf(c.source()),n.indexOf(c.target())])}for(var d=1/0,h=[],f=new Array(i),p=new Array(i),v=new Array(i),g=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)p[m]=m;var b=Qe(p,u.slice(),i,s),x=b.slice();g(p,v);var w=Qe(p,b,s,2),E=Qe(v,x,s,2);w.length<=E.length&&w.length<d?(d=w.length,h=w,g(p,f)):E.length<=w.length&&E.length<d&&(d=E.length,h=E,g(v,f))}for(var k=this.spawn(h.map((function(e){return r[e[0]]}))),_=this.spawn(),C=this.spawn(),S=f[0],P=0;P<f.length;P++){var D=f[P],T=n[P];D===S?_.merge(T):C.merge(T)}var M=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!k.contains(t)&&n.merge(t)}))})),n},B=[M(_),M(C)];return{cut:k,components:B,partition1:_,partition2:C}}ke("At least 2 nodes are required for Karger-Stein algorithm")}},et=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},tt=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},nt=function(e){return{x:e[0],y:e[1]}},rt=function(e,t){return Math.atan2(t,e)-Math.PI/2},it=Math.log2||function(e){return Math.log(e)/Math.log(2)},at=function(e){return e>0?1:e<0?-1:0},ot=function(e,t){return Math.sqrt(st(e,t))},st=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},ut=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},lt=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},ct=function(e,t,n,r){return{x:lt(e.x,t.x,n.x,r),y:lt(e.y,t.y,n.y,r)}},dt=function(e,t,n){return Math.max(e,Math.min(n,t))},ht=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},ft=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},pt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},vt=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=b(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},gt=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},yt=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2<t.x1)&&(!(t.x2<e.x1)&&(!(e.y2<t.y1)&&(!(t.y2<e.y1)&&(!(e.y1>t.y2)&&!(t.y1>e.y2)))))))},mt=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},bt=function(e,t){return mt(e,t.x1,t.y1)&&mt(e,t.x2,t.y2)},xt=function(e,t,n,r,i,a,o){var s,u=jt(i,a),l=i/2,c=a/2,d=r-c-o;if((s=Nt(e,t,n,r,n-l+u-o,d,n+l-u+o,d,!1)).length>0)return s;var h=n+l+o;if((s=Nt(e,t,n,r,h,r-c+u-o,h,r+c-u+o,!1)).length>0)return s;var f=r+c+o;if((s=Nt(e,t,n,r,n-l+u-o,f,n+l-u+o,f,!1)).length>0)return s;var p,v=n-l-o;if((s=Nt(e,t,n,r,v,r-c+u-o,v,r+c-u+o,!1)).length>0)return s;var g=n-l+u,y=r-c+u;if((p=Mt(e,t,n,r,g,y,u+o)).length>0&&p[0]<=g&&p[1]<=y)return[p[0],p[1]];var m=n+l-u,b=r-c+u;if((p=Mt(e,t,n,r,m,b,u+o)).length>0&&p[0]>=m&&p[1]<=b)return[p[0],p[1]];var x=n+l-u,w=r+c-u;if((p=Mt(e,t,n,r,x,w,u+o)).length>0&&p[0]>=x&&p[1]>=w)return[p[0],p[1]];var E=n-l+u,k=r+c-u;return(p=Mt(e,t,n,r,E,k,u+o)).length>0&&p[0]<=E&&p[1]>=k?[p[0],p[1]]:[]},wt=function(e,t,n,r,i,a,o){var s=o,u=Math.min(n,i),l=Math.max(n,i),c=Math.min(r,a),d=Math.max(r,a);return u-s<=e&&e<=l+s&&c-s<=t&&t<=d+s},Et=function(e,t,n,r,i,a,o,s,u){var l=Math.min(n,o,i)-u,c=Math.max(n,o,i)+u,d=Math.min(r,s,a)-u,h=Math.max(r,s,a)+u;return!(e<l||e>c||t<d||t>h)},kt=function(e,t,n,r,i,a,o,s){var u=[];!function(e,t,n,r,i){var a,o,s,u,l,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,d=t/3,a>0?(l=(l=s+Math.sqrt(a))<0?-Math.pow(-l,1/3):Math.pow(l,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-d+l+c,d+=(l+c)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-c+l)/2,i[3]=d,i[5]=-d):(i[5]=i[3]=0,0===a?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*h-d,i[4]=i[2]=-(h+d)):(u=(o=-o)*o*o,u=Math.acos(s/Math.sqrt(u)),h=2*Math.sqrt(o),i[0]=-d+h*Math.cos(u/3),i[2]=-d+h*Math.cos((u+2*Math.PI)/3),i[4]=-d+h*Math.cos((u+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,u);for(var l=[],c=0;c<6;c+=2)Math.abs(u[c+1])<1e-7&&u[c]>=0&&u[c]<=1&&l.push(u[c]);l.push(1),l.push(0);for(var d,h,f,p=-1,v=0;v<l.length;v++)d=Math.pow(1-l[v],2)*n+2*(1-l[v])*l[v]*i+l[v]*l[v]*o,h=Math.pow(1-l[v],2)*r+2*(1-l[v])*l[v]*a+l[v]*l[v]*s,f=Math.pow(d-e,2)+Math.pow(h-t,2),p>=0?f<p&&(p=f):p=f;return p},_t=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],u=s[0]*s[0]+s[1]*s[1],l=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],d=c*c/u;return c<0?l:d>u?(e-i)*(e-i)+(t-a)*(t-a):l-d},Ct=function(e,t,n){for(var r,i,a,o,s=0,u=0;u<n.length/2;u++)if(r=n[2*u],i=n[2*u+1],u+1<n.length/2?(a=n[2*(u+1)],o=n[2*(u+1)+1]):(a=n[2*(u+1-n.length/2)],o=n[2*(u+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},St=function(e,t,n,r,i,a,o,s,u){var l,c=new Array(n.length);null!=s[0]?(l=Math.atan(s[1]/s[0]),s[0]<0?l+=Math.PI/2:l=-l-Math.PI/2):l=s;for(var d,h=Math.cos(-l),f=Math.sin(-l),p=0;p<c.length/2;p++)c[2*p]=a/2*(n[2*p]*h-n[2*p+1]*f),c[2*p+1]=o/2*(n[2*p+1]*h+n[2*p]*f),c[2*p]+=r,c[2*p+1]+=i;if(u>0){var v=Dt(c,-u);d=Pt(v)}else d=c;return Ct(e,t,d)},Pt=function(e){for(var t,n,r,i,a,o,s,u,l=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],u=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],u=e[3]);var d=Nt(t,n,r,i,a,o,s,u,!0);l[2*c]=d[0],l[2*c+1]=d[1]}return l},Dt=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var u=a-r,l=-(i-n),c=Math.sqrt(u*u+l*l),d=u/c,h=l/c;o[4*s]=n+d*t,o[4*s+1]=r+h*t,o[4*s+2]=i+d*t,o[4*s+3]=a+h*t}return o},Tt=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},Mt=function(e,t,n,r,i,a,o){var s=[n-e,r-t],u=[e-i,t-a],l=s[0]*s[0]+s[1]*s[1],c=2*(u[0]*s[0]+u[1]*s[1]),d=c*c-4*l*(u[0]*u[0]+u[1]*u[1]-o*o);if(d<0)return[];var h=(-c+Math.sqrt(d))/(2*l),f=(-c-Math.sqrt(d))/(2*l),p=Math.min(h,f),v=Math.max(h,f),g=[];if(p>=0&&p<=1&&g.push(p),v>=0&&v<=1&&g.push(v),0===g.length)return[];var y=g[0]*s[0]+e,m=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[y,m]:[y,m,g[1]*s[0]+e,g[1]*s[1]+t]:[y,m]},Bt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Nt=function(e,t,n,r,i,a,o,s,u){var l=e-i,c=n-e,d=o-i,h=t-a,f=r-t,p=s-a,v=d*h-p*l,g=c*h-f*l,y=p*c-d*f;if(0!==y){var m=v/y,b=g/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||u?[e+m*c,t+m*f]:[]}return 0===v||0===g?Bt(e,n,o)===o?[o,s]:Bt(e,n,i)===i?[i,a]:Bt(i,o,n)===n?[n,r]:[]:[]},It=function(e,t,n,r,i,a,o,s){var u,l,c,d,h,f,p=[],v=new Array(n.length),g=!0;if(null==a&&(g=!1),g){for(var y=0;y<v.length/2;y++)v[2*y]=n[2*y]*a+r,v[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=Dt(v,-s);l=Pt(m)}else l=v}else l=n;for(var b=0;b<l.length/2;b++)c=l[2*b],d=l[2*b+1],b<l.length/2-1?(h=l[2*(b+1)],f=l[2*(b+1)+1]):(h=l[0],f=l[1]),0!==(u=Nt(e,t,r,i,c,d,h,f)).length&&p.push(u[0],u[1]);return p},Ot=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},zt=function(e,t){var n=At(e,t);return n=Lt(n)},Lt=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,u=0;u<r;u++)t=e[2*u],n=e[2*u+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var l=2/(o-i),c=2/(s-a),d=0;d<r;d++)t=e[2*d]=e[2*d]*l,n=e[2*d+1]=e[2*d+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var h=0;h<r;h++)n=e[2*h+1]=e[2*h+1]+(-1-a);return e},At=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},jt=function(e,t){return Math.min(e/4,t/4,8)},Rt=function(e,t){return Math.min(e/10,t/10,8)},Ft=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},Vt=Me({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),qt={pageRank:function(e){for(var t=Vt(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),u=s.nodes,l=s.edges,c=u.length,d=c*c,h=l.length,f=new Array(d),p=new Array(c),v=(1-n)/c,g=0;g<c;g++){for(var y=0;y<c;y++){f[g*c+y]=0}p[g]=0}for(var m=0;m<h;m++){var b=l[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=u.indexOfId(x),k=u.indexOfId(w),_=a(b);f[k*c+E]+=_,p[E]+=_}}for(var C=1/c+v,S=0;S<c;S++)if(0===p[S])for(var P=0;P<c;P++){f[P*c+S]=C}else for(var D=0;D<c;D++){var T=D*c+S;f[T]=f[T]/p[S]+v}for(var M,B=new Array(c),N=new Array(c),I=0;I<c;I++)B[I]=1;for(var O=0;O<i;O++){for(var z=0;z<c;z++)N[z]=0;for(var L=0;L<c;L++)for(var A=0;A<c;A++){var j=L*c+A;N[L]+=f[j]*B[A]}ut(N),M=B,B=N,N=M;for(var R=0,F=0;F<c;F++){var V=M[F]-B[F];R+=V*V}if(R<r)break}return{rank:function(e){return e=o.collection(e)[0],B[u.indexOf(e)]}}}},Yt=Me({root:null,weight:function(e){return 1},directed:!1,alpha:0}),Xt={degreeCentralityNormalized:function(e){e=Yt(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,u=0;u<r;u++){var l=n[u],c=l.id();e.root=l;var d=this.degreeCentrality(e);o<d.indegree&&(o=d.indegree),s<d.outdegree&&(s=d.outdegree),i[c]=d.indegree,a[c]=d.outdegree}return{indegree:function(e){return 0==o?0:(D(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(D(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var h={},f=0,p=0;p<r;p++){var v=n[p];e.root=v;var g=this.degreeCentrality(e);f<g.degree&&(f=g.degree),h[v.id()]=g.degree}return{degree:function(e){return 0===f?0:(D(e)&&(e=t.filter(e)),h[e.id()]/f)}}},degreeCentrality:function(e){e=Yt(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var u=i.connectedEdges(),l=u.filter((function(e){return e.target().same(i)&&n.has(e)})),c=u.filter((function(e){return e.source().same(i)&&n.has(e)})),d=l.length,h=c.length,f=0,p=0,v=0;v<l.length;v++)f+=a(l[v]);for(var g=0;g<c.length;g++)p+=a(c[g]);return{indegree:Math.pow(d,1-s)*Math.pow(f,s),outdegree:Math.pow(h,1-s)*Math.pow(p,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};Xt.dc=Xt.degreeCentrality,Xt.dcn=Xt.degreeCentralityNormalised=Xt.degreeCentralityNormalized;var Wt=Me({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),Gt={closenessCentralityNormalized:function(e){for(var t=Wt(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,u=this.nodes(),l=this.floydWarshall({weight:r,directed:i}),c=0;c<u.length;c++){for(var d=0,h=u[c],f=0;f<u.length;f++)if(c!==f){var p=l.distance(h,u[f]);d+=n?1/p:p}n||(d=1/d),s<d&&(s=d),o[h.id()]=d}return{closeness:function(e){return 0==s?0:(e=D(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=Wt(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,u=this.nodes(),l=0;l<u.length;l++){var c=u[l];if(!c.same(n)){var d=o.distanceTo(c);s+=a?1/d:d}}return a?s:1/s}};Gt.cc=Gt.closenessCentrality,Gt.ccn=Gt.closenessCentralityNormalised=Gt.closenessCentralityNormalized;var Ht=Me({weight:null,directed:!1}),Ut={betweennessCentrality:function(e){for(var t=Ht(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},u={},l=0,d=function(e,t){u[e]=t,t>l&&(l=t)},h=function(e){return u[e]},f=0;f<o.length;f++){var p=o[f],v=p.id();s[v]=n?p.outgoers().nodes():p.openNeighborhood().nodes(),d(v,0)}for(var g=function(e){for(var t=o[e].id(),n=[],u={},l={},f={},p=new c.default((function(e,t){return f[e]-f[t]})),v=0;v<o.length;v++){var g=o[v].id();u[g]=[],l[g]=0,f[g]=1/0}for(l[t]=1,f[t]=0,p.push(t);!p.empty();){var y=p.pop();if(n.push(y),i)for(var m=0;m<s[y].length;m++){var b=s[y][m],x=a.getElementById(y),w=void 0;w=x.edgesTo(b).length>0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var E=r(w);b=b.id(),f[b]>f[y]+E&&(f[b]=f[y]+E,p.nodes.indexOf(b)<0?p.push(b):p.updateItem(b),l[b]=0,u[b]=[]),f[b]==f[y]+E&&(l[b]=l[b]+l[y],u[b].push(y))}else for(var k=0;k<s[y].length;k++){var _=s[y][k].id();f[_]==1/0&&(p.push(_),f[_]=f[y]+1),f[_]==f[y]+1&&(l[_]=l[_]+l[y],u[_].push(y))}}for(var C={},S=0;S<o.length;S++)C[o[S].id()]=0;for(;n.length>0;){for(var P=n.pop(),D=0;D<u[P].length;D++){var T=u[P][D];C[T]=C[T]+l[T]/l[P]*(1+C[P])}P!=o[e].id()&&d(P,h(P)+C[P])}},y=0;y<o.length;y++)g(y);var m={betweenness:function(e){var t=a.collection(e).id();return h(t)},betweennessNormalized:function(e){if(0==l)return 0;var t=a.collection(e).id();return h(t)/l}};return m.betweennessNormalised=m.betweennessNormalized,m}};Ut.bc=Ut.betweennessCentrality;var Kt=Me({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),Zt=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},$t=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},Qt=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},Jt=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=Qt(e,r,t);return e},en=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return $t(r,t),r},tn=function(e,t,n,r){for(var i=0;i<n;i++){if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!==Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1}return!0},nn=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},rn=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=function(e){return Kt(e)}(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,u=t.length,l=u*u,c=new Array(l),d=0;d<l;d++)c[d]=0;for(var h=0;h<n.length;h++){var f=n[h],p=a[f.source().id()],v=a[f.target().id()],g=Zt(f,i.attributes);c[p*u+v]+=g,c[v*u+p]+=g}!function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n}(c,u,i.multFactor),$t(c,u);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=Jt(c,u,i.expandFactor),c=en(s,u,i.inflateFactor),tn(c,s,l,4)||(y=!0),m++;var b=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,u,t,r);return b=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&nn(e[t],e[n])&&e.splice(n,1);return e}(b),b},an={markovClustering:rn,mcl:rn},on=function(e){return e},sn=function(e,t){return Math.abs(t-e)},un=function(e,t,n){return e+sn(t,n)},ln=function(e,t,n){return e+Math.pow(n-t,2)},cn=function(e){return Math.sqrt(e)},dn=function(e,t,n){return Math.max(e,sn(t,n))},hn=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:on,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},fn={euclidean:function(e,t,n){return e>=2?hn(e,t,n,0,ln,cn):hn(e,t,n,0,un)},squaredEuclidean:function(e,t,n){return hn(e,t,n,0,ln)},manhattan:function(e,t,n){return hn(e,t,n,0,un)},max:function(e,t,n){return hn(e,t,n,-1/0,dn)}};function pn(e,t,n,r,i,a){var o;return o=T(e)?e:fn[e]||fn.euclidean,0===t&&T(e)?o(i,a):o(t,n,r,i,a)}fn["squared-euclidean"]=fn.squaredEuclidean,fn.squaredeuclidean=fn.squaredEuclidean;var vn=Me({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),gn=function(e){return vn(e)},yn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return pn(e,r.length,a,(function(e){return r[e](t)}),o,s)},mn=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,u=0;u<r;u++)i[u]=e.min(n[u]).value,a[u]=e.max(n[u]).value;for(var l=0;l<t;l++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[l]=s}return o},bn=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var u=yn(n,e,t[s],r,i);u<a&&(a=u,o=s)}return o},xn=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},wn=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++){if(Math.abs(e[r][i]-t[r][i])>n)return!1}return!0},En=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},kn=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];En(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},_n=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=yn("manhattan",t[i],e,n,"kMedoids");return r},Cn=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var u=0;u<e.length;u++)r[s][u]=Math.pow(n[s][u],i.m);for(var l=0;l<e.length;l++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var d=0;d<t.length;d++)a+=r[d][l]*i.attributes[c](t[d]),o+=r[d][l];e[l][c]=a/o}},Sn=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,u,l=2/(i.m-1),c=0;c<n.length;c++)for(var d=0;d<r.length;d++){o=0;for(var h=0;h<n.length;h++)s=yn(i.distance,r[d],n[c],i.attributes,"cmeans"),u=yn(i.distance,r[d],n[h],i.attributes,"cmeans"),o+=Math.pow(s/u,l);e[d][c]=1/o}},Pn=function(e){var t,n,r,i,a,o=this.cy(),s=this.nodes(),u=gn(e);i=new Array(s.length);for(var l=0;l<s.length;l++)i[l]=new Array(u.k);r=new Array(s.length);for(var c=0;c<s.length;c++)r[c]=new Array(u.k);for(var d=0;d<s.length;d++){for(var h=0,f=0;f<u.k;f++)r[d][f]=Math.random(),h+=r[d][f];for(var p=0;p<u.k;p++)r[d][p]=r[d][p]/h}n=new Array(u.k);for(var v=0;v<u.k;v++)n[v]=new Array(u.attributes.length);a=new Array(s.length);for(var g=0;g<s.length;g++)a[g]=new Array(u.k);for(var y=!0,m=0;y&&m<u.maxIterations;)y=!1,Cn(n,s,r,a,u),Sn(r,i,n,s,u),wn(r,i,u.sensitivityThreshold)||(y=!0),m++;return t=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var u=0;u<t.length;u++){i=-1/0,a=-1;for(var l=0;l<t[0].length;l++)t[u][l]>i&&(i=t[u][l],a=l);o[a].push(e[u])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o}(s,r,u,o),{clusters:t,degreeOfMembership:r}},Dn={kMeans:function(e){var t,n=this.cy(),r=this.nodes(),i=null,a=gn(e),o=new Array(a.k),s={};a.testMode?"number"==typeof a.testCentroids?(a.testCentroids,t=mn(r,a.k,a.attributes)):t="object"===p(a.testCentroids)?a.testCentroids:mn(r,a.k,a.attributes):t=mn(r,a.k,a.attributes);for(var u,l,c,d=!0,h=0;d&&h<a.maxIterations;){for(var f=0;f<r.length;f++)s[(i=r[f]).id()]=bn(i,t,a.distance,a.attributes,"kMeans");d=!1;for(var v=0;v<a.k;v++){var g=xn(v,r,s);if(0!==g.length){for(var y=a.attributes.length,m=t[v],b=new Array(y),x=new Array(y),w=0;w<y;w++){x[w]=0;for(var E=0;E<g.length;E++)i=g[E],x[w]+=a.attributes[w](i);b[w]=x[w]/g.length,u=b[w],l=m[w],c=a.sensitivityThreshold,Math.abs(l-u)<=c||(d=!0)}t[v]=b,o[v]=n.collection(g)}}h++}return o},kMedoids:function(e){var t,n,r=this.cy(),i=this.nodes(),a=null,o=gn(e),s=new Array(o.k),u={},l=new Array(o.k);o.testMode?"number"==typeof o.testCentroids||(t="object"===p(o.testCentroids)?o.testCentroids:kn(i,o.k)):t=kn(i,o.k);for(var c=!0,d=0;c&&d<o.maxIterations;){for(var h=0;h<i.length;h++)u[(a=i[h]).id()]=bn(a,t,o.distance,o.attributes,"kMedoids");c=!1;for(var f=0;f<t.length;f++){var v=xn(f,i,u);if(0!==v.length){l[f]=_n(t[f],v,o.attributes);for(var g=0;g<v.length;g++)(n=_n(v[g],v,o.attributes))<l[f]&&(l[f]=n,t[f]=v[g],c=!0);s[f]=r.collection(v)}}d++}return s},fuzzyCMeans:Pn,fcm:Pn},Tn=Me({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),Mn={single:"min",complete:"max"},Bn=function(e,t,n,r,i){for(var a,o=0,s=1/0,u=i.attributes,l=function(e,t){return pn(i.distance,u.length,(function(t){return u[t](e)}),(function(e){return u[e](t)}),e,t)},c=0;c<e.length;c++){var d=e[c].key,h=n[d][r[d]];h<s&&(o=d,s=h)}if("threshold"===i.mode&&s>=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var f,p=t[o],v=t[r[o]];f="dendrogram"===i.mode?{left:p,right:v,key:p.key}:{value:p.value.concat(v.value),key:p.key},e[p.index]=f,e.splice(v.index,1),t[p.key]=f;for(var g=0;g<e.length;g++){var y=e[g];p.key===y.key?a=1/0:"min"===i.linkage?(a=n[p.key][y.key],n[p.key][y.key]>n[v.key][y.key]&&(a=n[v.key][y.key])):"max"===i.linkage?(a=n[p.key][y.key],n[p.key][y.key]<n[v.key][y.key]&&(a=n[v.key][y.key])):a="mean"===i.linkage?(n[p.key][y.key]*p.size+n[v.key][y.key]*v.size)/(p.size+v.size):"dendrogram"===i.mode?l(y.value,p.value):l(y.value[0],p.value[0]),n[p.key][y.key]=n[y.key][p.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===p.key||r[b]===v.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return p.key=v.key=p.index=v.index=null,!0},Nn=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},In=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},On=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&Nn(t.left,i),t.right&&Nn(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&Nn(t.left,i),t.right&&Nn(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},zn=function(e){for(var t=this.cy(),n=this.nodes(),r=function(e){var t=Tn(e),n=Mn[t.linkage];return null!=n&&(t.linkage=n),t}(e),i=r.attributes,a=function(e,t){return pn(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],u=[],l=[],c=0;c<n.length;c++){var d={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=d,l[c]=d,s[c]=[],u[c]=0}for(var h=0;h<o.length;h++)for(var f=0;f<=h;f++){var p=void 0;p="dendrogram"===r.mode?h===f?1/0:a(o[h].value,o[f].value):h===f?1/0:a(o[h].value[0],o[f].value[0]),s[h][f]=p,s[f][h]=p,p<s[h][u[h]]&&(u[h]=f)}for(var v,g=Bn(o,l,s,u,r);g;)g=Bn(o,l,s,u,r);return"dendrogram"===r.mode?(v=On(o[0],r.dendrogramDepth,t),r.addDendrogram&&In(o[0],t)):(v=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,v[n]=t.collection(e.value)}))),v},Ln={hierarchicalClustering:zn,hca:zn},An=Me({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),jn=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-pn(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},Rn=function(e,t){var n=null;return n="median"===t?function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n<e.length&&e.splice(n,e.length-n),t>0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var u=e.length,l=Math.floor(u/2);return u%2!=0?e[l+1+a]:(e[l-1+a]+e[l+a])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i}(e):"min"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r}(e):"max"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r}(e):t,n},Fn=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var u=n[s];t[i*e+u]>o&&(a=u,o=t[i*e+u])}a>0&&r.push(a)}for(var l=0;l<n.length;l++)r[n[l]]=n[l];return r},Vn=function(e){for(var t,n,r,i,a,o,s=this.cy(),u=this.nodes(),l=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||ke("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||N(n)||ke("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),An(e)}(e),c={},d=0;d<u.length;d++)c[u[d].id()]=d;n=(t=u.length)*t,r=new Array(n);for(var h=0;h<n;h++)r[h]=-1/0;for(var f=0;f<t;f++)for(var p=0;p<t;p++)f!==p&&(r[f*t+p]=jn(l.distance,u[f],u[p],l.attributes));i=Rn(r,l.preference);for(var v=0;v<t;v++)r[v*t+v]=i;a=new Array(n);for(var g=0;g<n;g++)a[g]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,k=new Array(t*l.minIterations),_=0;_<k.length;_++)k[_]=0;for(E=0;E<l.maxIterations;E++){for(var C=0;C<t;C++){for(var S=-1/0,P=-1/0,D=-1,T=0,M=0;M<t;M++)m[M]=a[C*t+M],(T=o[C*t+M]+r[C*t+M])>=S?(P=S,S=T,D=M):T>P&&(P=T);for(var B=0;B<t;B++)a[C*t+B]=(1-l.damping)*(r[C*t+B]-S)+l.damping*m[B];a[C*t+D]=(1-l.damping)*(r[C*t+D]-P)+l.damping*m[D]}for(var I=0;I<t;I++){for(var O=0,z=0;z<t;z++)m[z]=o[z*t+I],b[z]=Math.max(0,a[z*t+I]),O+=b[z];O-=b[I],b[I]=a[I*t+I],O+=b[I];for(var L=0;L<t;L++)o[L*t+I]=(1-l.damping)*Math.min(0,O-b[L])+l.damping*m[L];o[I*t+I]=(1-l.damping)*(O-b[I])+l.damping*m[I]}for(var A=0,j=0;j<t;j++){var R=o[j*t+j]+a[j*t+j]>0?1:0;k[E%l.minIterations*t+j]=R,A+=R}if(A>0&&(E>=l.minIterations-1||E==l.maxIterations-1)){for(var F=0,V=0;V<t;V++){x[V]=0;for(var q=0;q<l.minIterations;q++)x[V]+=k[q*t+V];0!==x[V]&&x[V]!==l.minIterations||F++}if(F===t)break}}for(var Y=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r}(t,a,o),X=function(e,t,n){for(var r=Fn(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,u=-1/0,l=0;l<a.length;l++){for(var c=0,d=0;d<a.length;d++)c+=t[a[d]*e+a[l]];c>u&&(s=l,u=c)}n[i]=a[s]}return Fn(e,t,n)}(t,r,Y),W={},G=0;G<Y.length;G++)W[Y[G]]=[];for(var H=0;H<u.length;H++){var U=X[c[u[H].id()]];null!=U&&W[U].push(u[H])}for(var K=new Array(Y.length),Z=0;Z<Y.length;Z++)K[Z]=s.collection(W[Y[Z]]);return K},qn={affinityPropagation:Vn,ap:Vn},Yn=Me({root:void 0,directed:!1}),Xn=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(u,l,c){u===c&&(r+=1),t[l]={id:n,low:n++,cutVertex:!1};var d,h,f,p,v=e.getElementById(l).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(l))):v.forEach((function(n){d=n.source().id(),h=n.target().id(),(f=d===l?h:d)!==c&&(p=n.id(),o[p]||(o[p]=!0,a.push({x:l,y:f,edge:n})),f in t?t[l].low=Math.min(t[l].low,t[f].id):(s(u,f,l),t[l].low=Math.min(t[l].low,t[f].low),t[l].id<=t[f].low&&(t[l].cutVertex=!0,function(n,r){for(var o=a.length-1,s=[],u=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);u.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);u.merge(n),t[r].cutVertex?u.merge(i.filter((function(e){return e.isLoop()}))):u.merge(i)}))})),i.push(u)}(l,f))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Wn=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var u=e.spawn();;){var l=i.pop();if(u.merge(e.getElementById(l)),t[l].low=t[s].index,t[l].explored=!0,l===s)break}var c=u.edgesWith(u),d=u.merge(c);r.push(d),a=a.difference(d)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Gn={};[Fe,qe,Ye,We,He,Ke,Je,qt,Xt,Gt,Ut,an,Dn,Ln,qn,{hierholzer:function(e){if(!B(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Yn(e),o=a.root,s=a.directed,u=this,l=!1;o&&(i=D(o)?this.filter(o)[0].id():o[0].id());var c={},d={};s?u.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?l=!0:n=t:1==s?r?l=!0:r=t:(s>1||o>1)&&(l=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else d[t]=[void 0,e.target().id()]})):u.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?l=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):d[t]=[e.source().id(),e.target().id()]}));var h={found:!1,trail:void 0};if(l)return h;if(r&&n)if(s){if(i&&r!=i)return h;i=r}else{if(i&&r!=i&&n!=i)return h;i||(i=r)}else i||(i=u[0].id());var f=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=d[t][0],i!=(r=d[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},p=[],v=[];for(v=f(i);1!=v.length;)0==c[v[0]].length?(p.unshift(u.getElementById(v.shift())),p.unshift(u.getElementById(v.shift()))):v=f(v.shift()).concat(v);for(var g in p.unshift(u.getElementById(v.shift())),c)if(c[g].length)return h;return h.found=!0,h.trail=this.spawn(p,!0),h}},{hopcroftTarjanBiconnected:Xn,htbc:Xn,htb:Xn,hopcroftTarjanBiconnectedComponents:Xn},{tarjanStronglyConnected:Wn,tsc:Wn,tscc:Wn,tarjanStronglyConnectedComponents:Wn}].forEach((function(e){U(Gn,e)}));var Hn=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Hn.prototype={fulfill:function(e){return Un(this,1,"fulfillValue",e)},reject:function(e){return Un(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Hn;return n.onFulfilled.push($n(e,r,"fulfill")),n.onRejected.push($n(t,r,"reject")),Kn(n),r.proxy}};var Un=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Kn(e)),e},Kn=function(e){1===e.state?Zn(e,"onFulfilled",e.fulfillValue):2===e.state&&Zn(e,"onRejected",e.rejectReason)},Zn=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},$n=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}Qn(t,i)}}},Qn=function e(t,n){if(t!==n&&t.proxy!==n){var r;if("object"===p(n)&&null!==n||"function"==typeof n)try{r=n.then}catch(a){return void t.reject(a)}if("function"!=typeof r)t.fulfill(n);else{var i=!1;try{r.call(n,(function(r){i||(i=!0,r===n?t.reject(new TypeError("circular thenable chain")):e(t,r))}),(function(e){i||(i=!0,t.reject(e))}))}catch(a){i||t.reject(a)}}}else t.reject(new TypeError("cannot resolve promise with itself"))};Hn.all=function(e){return new Hn((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Hn.resolve=function(e){return new Hn((function(t,n){t(e)}))},Hn.reject=function(e){return new Hn((function(t,n){n(e)}))};var Jn="undefined"!=typeof Promise?Promise:Hn,er=function(e,t,n){var r=A(e),i=!r,a=this._private=U({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&T(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},tr=er.prototype;U(tr,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),O(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;if("frame"===e)t=n.frames;else t=n.completes;return new Jn((function(e,n){t.push((function(){e()}))}))}}),tr.complete=tr.completed,tr.run=tr.play,tr.running=tr.playing;var nr={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n<t.length;n++){t[n]._private.animation.queue=[]}return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var u=a.style();if(e=U({},e,t),0===Object.keys(e).length)return new er(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=u.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var l=e.renderedPosition,c=a.pan(),d=a.zoom();e.position=tt(l,d,c)}if(o&&null!=e.panBy){var h=e.panBy,f=a.pan();e.pan={x:f.x+h.x,y:f.y+h.y}}var p=e.center||e.centre;if(o&&null!=p){var v=a.getCenterPan(p.eles,e.zoom);null!=v&&(e.pan=v)}if(o&&null!=e.fit){var g=e.fit,y=a.getFitViewport(g.eles||g.boundingBox,g.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&B(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new er(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=U({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,u=0;u<s.length;u++){var l=s[u]._private;t&&(l.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},rr={data:function(e){return e=U({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,a=void 0!==i.length,o=a?i:[i],s=a?i[0]:i;if(D(t)){var u,l=-1!==t.indexOf(".")&&f.default(t);if(r.allowGetting&&void 0===n)return s&&(r.beforeGet(s),u=l&&void 0===s._private[r.field][t]?d.default(s._private[r.field],l):s._private[r.field][t]),u;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var c=m({},t,n);r.beforeSet(i,c);for(var p=0,v=o.length;p<v;p++){var g=o[p];r.canSet(g)&&(l&&void 0===s._private[r.field][t]?h.default(g._private[r.field],l,n):g._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&B(t)){var y,b,x=t,w=Object.keys(x);r.beforeSet(i,x);for(var E=0;E<w.length;E++){if(b=x[y=w[E]],!r.immutableKeys[y])for(var k=0;k<o.length;k++){var _=o[k];r.canSet(_)&&(_._private[r.field][y]=b)}}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&T(t)){var C=t;i.on(r.bindingEvent,C)}else if(r.allowGetting&&void 0===t){var S;return s&&(r.beforeGet(s),S=s._private[r.field]),S}return i}},removeData:function(e){return e=U({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(D(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var u=a[s];if(!R(u))if(!n.immutableKeys[u])for(var l=0,c=i.length;l<c;l++)i[l]._private[n.field][u]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var d=0,h=i.length;d<h;d++)for(var f=i[d]._private[n.field],p=Object.keys(f),v=0;v<p.length;v++){var g=p[v];!n.immutableKeys[g]&&(f[g]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},ir={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new Jn((function(e,t){var i=r.concat([function(t){n.off.apply(n,a),e(t)}]),a=i.concat([]);n.on.apply(n,i)}))}}},ar={};[nr,rr,ir].forEach((function(e){U(ar,e)}));var or={animate:ar.animate(),animation:ar.animation(),animated:ar.animated(),clearQueue:ar.clearQueue(),delay:ar.delay(),delayAnimation:ar.delayAnimation(),stop:ar.stop()},sr={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}M(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ae(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,u=s.classes,l=!1,c=0;c<e.length;c++){var d=e[c];if(!u.has(d)){l=!0;break}}l||(l=u.size!==e.length),l&&(s.classes=i,r.push(o))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){M(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a<o;a++)for(var s=n[a],u=s._private.classes,l=!1,c=0;c<e.length;c++){var d=e[c],h=u.has(d),f=!1;t||r&&!h?(u.add(d),f=!0):(!t||r&&h)&&(u.delete(d),f=!0),!l&&f&&(i.push(s),l=!0)}return i.length>0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};sr.className=sr.classNames=sr.classes;var ur={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:G,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};ur.variable="(?:[\\w-.]|(?:\\\\"+ur.metaChar+"))+",ur.className="(?:[\\w-]|(?:\\\\"+ur.metaChar+"))+",ur.value=ur.string+"|"+ur.number,ur.id=ur.variable,function(){var e,t,n;for(e=ur.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],ur.comparatorOp+="|@"+t;for(e=ur.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(ur.comparatorOp+="|\\!"+t)}();var lr=0,cr=1,dr=2,hr=3,fr=4,pr=5,vr=6,gr=7,yr=8,mr=9,br=10,xr=11,wr=12,Er=13,kr=14,_r=15,Cr=16,Sr=17,Pr=18,Dr=19,Tr=20,Mr=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*H(e,t)}(e.selector,t.selector)})),Br=function(){for(var e,t={},n=0;n<Mr.length;n++)t[(e=Mr[n]).selector]=e.matches;return t}(),Nr="("+Mr.map((function(e){return e.selector})).join("|")+")",Ir=function(e){return e.replace(new RegExp("\\\\("+ur.metaChar+")","g"),(function(e,t){return t}))},Or=function(e,t,n){e[e.length-1]=n},zr=[{name:"group",query:!0,regex:"("+ur.group+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:lr,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:Nr,populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:gr,value:r})}},{name:"id",query:!0,regex:"\\#("+ur.id+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:yr,value:Ir(r)})}},{name:"className",query:!0,regex:"\\.("+ur.className+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:mr,value:Ir(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+ur.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:fr,field:Ir(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+ur.variable+")\\s*("+ur.comparatorOp+")\\s*("+ur.value+")\\s*\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];o=null!=new RegExp("^"+ur.string+"$").exec(o)?o.substring(1,o.length-1):parseFloat(o),t.checks.push({type:hr,field:Ir(i),operator:a,value:o})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+ur.boolOp+")\\s*("+ur.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,2),i=r[0],a=r[1];t.checks.push({type:pr,field:Ir(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+ur.meta+")\\s*("+ur.comparatorOp+")\\s*("+ur.number+")\\s*\\]\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];t.checks.push({type:vr,field:Ir(i),operator:a,value:parseFloat(o)})}},{name:"nextQuery",separator:!0,regex:ur.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]={checks:[]}}},{name:"directedEdge",separator:!0,regex:ur.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:xr,source:r,target:i}),Or(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:wr,source:o,target:s}),Or(e,0,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:ur.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:br,nodes:[r,i]}),Or(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:kr,node:o,neighbor:s}),Or(e,0,a),s}},{name:"child",separator:!0,regex:ur.child,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:_r,parent:i,child:r}),Or(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},u={checks:[]},l={checks:[]},c={checks:[]};return a.checks.push({type:Dr,left:o,right:s,subject:u}),u.checks=t.checks,t.checks=[{type:Tr}],c.checks.push({type:Tr}),s.checks.push({type:Sr,parent:c,child:l}),Or(e,0,a),e.currentSubject=u,e.compoundCount++,l}var d={checks:[]},h={checks:[]},f=[{type:Sr,parent:d,child:h}];return d.checks=t.checks,t.checks=f,e.compoundCount++,h}},{name:"descendant",separator:!0,regex:ur.descendant,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:Cr,ancestor:i,descendant:r}),Or(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},u={checks:[]},l={checks:[]},c={checks:[]};return a.checks.push({type:Dr,left:o,right:s,subject:u}),u.checks=t.checks,t.checks=[{type:Tr}],c.checks.push({type:Tr}),s.checks.push({type:Pr,ancestor:c,descendant:l}),Or(e,0,a),e.currentSubject=u,e.compoundCount++,l}var d={checks:[]},h={checks:[]},f=[{type:Pr,ancestor:d,descendant:h}];return d.checks=t.checks,t.checks=f,e.compoundCount++,h}},{name:"subject",modifier:!0,regex:ur.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Ce("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===xr?n.type=Er:r===br&&(n.type=kr,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];zr.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var Lr=function(e){for(var t,n,r,i=0;i<zr.length;i++){var a=zr[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var u=s[0];e=e.substring(u.length);break}}return{expr:t,match:n,name:r,remaining:e}},Ar={parse:function(e){var t=this,n=t.inputText=e,r=t[0]={checks:[]};for(t.length=1,n=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e}(n);;){var i=Lr(n);if(null==i.expr)return Ce("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var u=0;u<t.length;u++){var l=t[u];if(l.compoundCount>0&&l.edgeCount>0)return Ce("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(l.edgeCount>1)return Ce("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===l.edgeCount&&Ce("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return D(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case lr:var u=e(s);return u.substring(0,u.length-1);case hr:var l=r.field,c=r.operator;return"["+l+n(e(c))+t(s)+"]";case pr:var d=r.operator,h=r.field;return"["+e(d)+h+"]";case fr:return"["+r.field+"]";case vr:var f=r.operator;return"[["+r.field+n(e(f))+t(s)+"]]";case gr:return s;case yr:return"#"+s;case mr:return"."+s;case Sr:case _r:return i(r.parent,a)+n(">")+i(r.child,a);case Pr:case Cr:return i(r.ancestor,a)+" "+i(r.descendant,a);case Dr:var p=i(r.left,a),v=i(r.subject,a),g=i(r.right,a);return p+(p.length>0?" ":"")+v+g;case Tr:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},jr=function(e,t,n){var r,i,a,o=D(e),s=N(e),u=D(n),l=!1,c=!1,d=!1;switch(t.indexOf("!")>=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),l=!0),(o||u||l)&&(i=o||s?""+e:"",a=""+n),l&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":d=!0,r=e>n;break;case">=":d=!0,r=e>=n;break;case"<":d=!0,r=e<n;break;case"<=":d=!0,r=e<=n;break;default:r=!1}return!c||null==e&&d||(r=!r),r},Rr=function(e,t){return e.data(t)},Fr=[],Vr=function(e,t){return e.checks.every((function(e){return Fr[e.type](e,t)}))};Fr[lr]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Fr[gr]=function(e,t){return function(e,t){return Br[e](t)}(e.value,t)},Fr[yr]=function(e,t){var n=e.value;return t.id()===n},Fr[mr]=function(e,t){var n=e.value;return t.hasClass(n)},Fr[vr]=function(e,t){var n=e.field,r=e.operator,i=e.value;return jr(function(e,t){return e[t]()}(t,n),r,i)},Fr[hr]=function(e,t){var n=e.field,r=e.operator,i=e.value;return jr(Rr(t,n),r,i)},Fr[pr]=function(e,t){var n=e.field,r=e.operator;return function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}}(Rr(t,n),r)},Fr[fr]=function(e,t){var n=e.field;return e.operator,void 0!==Rr(t,n)},Fr[br]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return Vr(n,i)&&Vr(r,a)||Vr(r,i)&&Vr(n,a)},Fr[kr]=function(e,t){return Vr(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&Vr(e.neighbor,t)}))},Fr[xr]=function(e,t){return Vr(e.source,t.source())&&Vr(e.target,t.target())},Fr[wr]=function(e,t){return Vr(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&Vr(e.target,t)}))},Fr[Er]=function(e,t){return Vr(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&Vr(e.source,t)}))},Fr[_r]=function(e,t){return Vr(e.child,t)&&Vr(e.parent,t.parent())},Fr[Sr]=function(e,t){return Vr(e.parent,t)&&t.children().some((function(t){return Vr(e.child,t)}))},Fr[Cr]=function(e,t){return Vr(e.descendant,t)&&t.ancestors().some((function(t){return Vr(e.ancestor,t)}))},Fr[Pr]=function(e,t){return Vr(e.ancestor,t)&&t.descendants().some((function(t){return Vr(e.descendant,t)}))},Fr[Dr]=function(e,t){return Vr(e.subject,t)&&Vr(e.left,t)&&Vr(e.right,t)},Fr[Tr]=function(){return!0},Fr[cr]=function(e,t){return e.value.has(t)},Fr[dr]=function(e,t){return(0,e.value)(t)};var qr={matches:function(e){for(var t=0;t<this.length;t++){var n=this[t];if(Vr(n,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===yr)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(Vr(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Yr=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||D(e)&&e.match(/^\s*$/)||(O(e)?this.addQuery({checks:[{type:cr,value:e.collection()}]}):T(e)?this.addQuery({checks:[{type:dr,value:e}]}):D(e)?this.parse(e)||(this.invalid=!0):ke("A selector must be created from a string; found "))},Xr=Yr.prototype;[Ar,qr].forEach((function(e){return U(Xr,e)})),Xr.text=function(){return this.inputText},Xr.size=function(){return this.length},Xr.eq=function(e){return this[e]},Xr.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Xr.addQuery=function(e){this[this.length++]=e},Xr.selector=Xr.toString;var Wr={allAre:function(e){var t=new Yr(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Yr(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++){if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0}return!1},every:function(e,t){for(var n=0;n<this.length;n++){if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1}return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};Wr.allAreNeighbours=Wr.allAreNeighbors,Wr.has=Wr.contains,Wr.equal=Wr.equals=Wr.same;var Gr,Hr,Ur=function(e,t){return function(n,r,i,a){var o,s=n,u=this;if(null==s?o="":O(s)&&1===s.length&&(o=s.id()),1===u.length&&o){var l=u[0]._private,c=l.traversalCache=l.traversalCache||{},d=c[t]=c[t]||[],h=he(o),f=d[h];return f||(d[h]=e.call(u,n,r,i,a))}return e.call(u,n,r,i,a)}},Kr={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Ur((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];return function e(n){for(var r=0;r<n.length;r++){var i=n[r];t.push(i),i.children().nonempty()&&e(i.children())}}(this.children()),this.spawn(t,!0).filter(e)}};function Zr(e,t,n,r){for(var i=[],a=new Ae,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var u=e[s];n?i.push(u):o&&r(i,a,u)}for(;i.length>0;){var l=i.shift();t(l),a.add(l.id()),o&&r(i,a,l)}return e}function $r(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function Qr(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function Jr(e,t,n){Qr(e,t,n),$r(e,t,n)}Kr.forEachDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Zr(this,e,t,$r)},Kr.forEachUp=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Zr(this,e,t,Qr)},Kr.forEachUpAndDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Zr(this,e,t,Jr)},Kr.ancestors=Kr.parents,(Gr=Hr={data:ar.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:ar.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ar.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ar.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ar.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ar.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Gr.data,Gr.removeAttr=Gr.removeData;var ei,ti,ni=Hr,ri={};function ii(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function ai(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}U(ri,{degree:ii((function(e,t){return t.source().same(t.target())?2:1})),indegree:ii((function(e,t){return t.target().same(e)?1:0})),outdegree:ii((function(e,t){return t.source().same(e)?1:0}))}),U(ri,{minDegree:ai("degree",(function(e,t){return e<t})),maxDegree:ai("degree",(function(e,t){return e>t})),minIndegree:ai("indegree",(function(e,t){return e<t})),maxIndegree:ai("indegree",(function(e,t){return e>t})),minOutdegree:ai("outdegree",(function(e,t){return e<t})),maxOutdegree:ai("outdegree",(function(e,t){return e>t}))}),U(ri,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var oi=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},si={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){oi(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};ei=ti={position:ar.data(si),silentPosition:ar.data(U({},si,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){oi(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(B(e))t?this.silentPosition(e):this.position(e);else if(T(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a,o=this[i];(a=n(o,i))&&(t?o.silentPosition(a):o.position(a))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(B(e)?(r={x:N(e.x)?e.x:0,y:N(e.y)?e.y:0},n=t):D(e)&&N(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),u={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(u):o.position(u)}}i.endBatch()}return this},silentShift:function(e,t){return B(e)?this.shift(e,!0):D(e)&&N(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=B(e)?e:void 0,s=void 0!==o||void 0!==t&&D(e);if(n&&n.isNode()){if(!s){var u=n.position();return o=et(u,i,a),void 0===e?o:o[e]}for(var l=0;l<this.length;l++){var c=this[l];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(tt(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=B(e)?e:void 0,a=void 0!==i||void 0!==t&&D(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),u=o?n.parent():null,l=u&&u.length>0,c=l;l&&(u=u[0]);var d=c?u.position():{x:0,y:0};return i={x:s.x-d.x,y:s.y-d.y},void 0===e?i:i[e]}for(var h=0;h<this.length;h++){var f=this[h],p=o?f.parent():null,v=p&&p.length>0,g=v;v&&(p=p[0]);var y=g?p.position():{x:0,y:0};void 0!==t?f.position(e,t+y[e]):void 0!==i&&f.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}},ei.modelPosition=ei.point=ei.position,ei.modelPositions=ei.points=ei.positions,ei.renderedPoint=ei.renderedPosition,ei.relativePoint=ei.relativePosition;var ui,li,ci=ti;ui=li={},li.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,u=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:u,w:o-a,h:u-s}},li.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},li.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var u=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(u=100*u/i.width.val);var l=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(l=100*l/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var d=y(i.width.val-a.w,s,u),h=d.biasDiff,f=d.biasComplementDiff,p=y(i.height.val-a.h,l,c),v=p.biasDiff,g=p.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-h+a.x1+a.x2+f)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-v+a.y1+a.y2+g)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var di=function(e){return e===1/0||e===-1/0?0:e},hi=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},fi=function(e,t){return null==t?e:hi(e,t.x1,t.y1,t.x2,t.y2)},pi=function(e,t,n){return Ie(e,t,n)},vi=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var u=a.arrowBounds=a.arrowBounds||{},l=u[n]=u[n]||{};l.x1=r-s,l.y1=i-s,l.x2=r+s,l.y2=i+s,l.w=l.x2-l.x1,l.h=l.y2-l.y1,pt(l,1),hi(e,l.x1,l.y1,l.x2,l.y2)}}},gi=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,u,l,c=t.pstyle("text-halign"),d=t.pstyle("text-valign"),h=pi(a,"labelWidth",n),f=pi(a,"labelHeight",n),p=pi(a,"labelX",n),v=pi(a,"labelY",n),g=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,k=f,_=h,C=_/2,S=k/2;if(m)o=p-C,s=p+C,u=v-S,l=v+S;else{switch(c.value){case"left":o=p-_,s=p;break;case"center":o=p-C,s=p+C;break;case"right":o=p,s=p+_}switch(d.value){case"top":u=v-k,l=v;break;case"center":u=v-S,l=v+S;break;case"bottom":u=v,l=v+k}}o+=g-Math.max(x,w)-E-2,s+=g+Math.max(x,w)+E+2,u+=y-Math.max(x,w)-E-2,l+=y+Math.max(x,w)+E+2;var P=n||"main",D=i.labelBounds,T=D[P]=D[P]||{};T.x1=o,T.y1=u,T.x2=s,T.y2=l,T.w=s-o,T.h=l-u;var M=m&&"autorotate"===b.strValue,B=null!=b.pfValue&&0!==b.pfValue;if(M||B){var N=M?pi(i.rstyle,"labelAngle",n):b.pfValue,I=Math.cos(N),O=Math.sin(N),z=(o+s)/2,L=(u+l)/2;if(!m){switch(c.value){case"left":z=s;break;case"right":z=o}switch(d.value){case"top":L=l;break;case"bottom":L=u}}var A=function(e,t){return{x:(e-=z)*I-(t-=L)*O+z,y:e*O+t*I+L}},j=A(o,u),R=A(o,l),F=A(s,u),V=A(s,l);o=Math.min(j.x,R.x,F.x,V.x),s=Math.max(j.x,R.x,F.x,V.x),u=Math.min(j.y,R.y,F.y,V.y),l=Math.max(j.y,R.y,F.y,V.y)}var q=P+"Rot",Y=D[q]=D[q]||{};Y.x1=o,Y.y1=u,Y.x2=s,Y.y2=l,Y.w=s-o,Y.h=l-u,hi(e,o,u,s,l),hi(i.labelBounds.all,o,u,s,l)}return e}},yi=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays)},mi=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return function(e,t){var n={value:0,done:!1},r=0,i=e.length;return se({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)}([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},bi=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?wi:yi(t))===wi,o=mi(e),s=r.bbCachePosKey===o,u=t.useCache&&s,l=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!u||l(e)||i&&l(e.source())||l(e.target())?(s||e.recalculateRenderedStyle(u),n=function(e,t){var n,r,i,a,o,s,u,l=e._private.cy,c=l.styleEnabled(),d=l.headless(),h=ht(),f=e._private,p=e.isNode(),v=e.isEdge(),g=f.rstyle,y=p&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!v||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),k=0;if(c&&(k=e.pstyle("width").pfValue/2),p&&t.includeNodes){var _=e.position();o=_.x,s=_.y;var C=e.outerWidth()/2,S=e.outerHeight()/2;hi(h,n=o-C,i=s-S,r=o+C,a=s+S)}else if(v&&t.includeEdges)if(c&&!d){var P=e.pstyle("curve-style").strValue;if(n=Math.min(g.srcX,g.midX,g.tgtX),r=Math.max(g.srcX,g.midX,g.tgtX),i=Math.min(g.srcY,g.midY,g.tgtY),a=Math.max(g.srcY,g.midY,g.tgtY),hi(h,n-=k,i-=k,r+=k,a+=k),"haystack"===P){var D=g.haystackPts;if(D&&2===D.length){if(n=D[0].x,i=D[0].y,n>(r=D[1].x)){var T=n;n=r,r=T}if(i>(a=D[1].y)){var M=i;i=a,a=M}hi(h,n-k,i-k,r+k,a+k)}}else if("bezier"===P||"unbundled-bezier"===P||"segments"===P||"taxi"===P){var B;switch(P){case"bezier":case"unbundled-bezier":B=g.bezierPts;break;case"segments":case"taxi":B=g.linePts}if(null!=B)for(var N=0;N<B.length;N++){var I=B[N];n=I.x-k,r=I.x+k,i=I.y-k,a=I.y+k,hi(h,n,i,r,a)}}}else{var O=e.source().position(),z=e.target().position();if((n=O.x)>(r=z.x)){var L=n;n=r,r=L}if((i=O.y)>(a=z.y)){var A=i;i=a,a=A}hi(h,n-=k,i-=k,r+=k,a+=k)}if(c&&t.includeEdges&&v&&(vi(h,e,"mid-source"),vi(h,e,"mid-target"),vi(h,e,"source"),vi(h,e,"target")),c&&"yes"===e.pstyle("ghost").value){var j=e.pstyle("ghost-offset-x").pfValue,R=e.pstyle("ghost-offset-y").pfValue;hi(h,h.x1+j,h.y1+R,h.x2+j,h.y2+R)}var F=f.bodyBounds=f.bodyBounds||{};gt(F,h),vt(F,y),pt(F,1),c&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,hi(h,n-E,i-E,r+E,a+E));var V=f.overlayBounds=f.overlayBounds||{};gt(V,h),vt(V,y),pt(V,1);var q=f.labelBounds=f.labelBounds||{};null!=q.all?((u=q.all).x1=1/0,u.y1=1/0,u.x2=-1/0,u.y2=-1/0,u.w=0,u.h=0):q.all=ht(),c&&t.includeLabels&&(t.includeMainLabels&&gi(h,e,null),v&&(t.includeSourceLabels&&gi(h,e,"source"),t.includeTargetLabels&&gi(h,e,"target")))}return h.x1=di(h.x1),h.y1=di(h.y1),h.x2=di(h.x2),h.y2=di(h.y2),h.w=di(h.x2-h.x1),h.h=di(h.y2-h.y1),h.w>0&&h.h>0&&b&&(vt(h,y),pt(h,1)),h}(e,xi),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=ht(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?fi(n,r.overlayBounds):fi(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?fi(n,r.labelBounds.all):(t.includeMainLabels&&fi(n,r.labelBounds.mainRot),t.includeSourceLabels&&fi(n,r.labelBounds.sourceRot),t.includeTargetLabels&&fi(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},xi={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},wi=yi(xi),Ei=Me(xi);li.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=ht();var n=Ei(e=e||xi),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=mi(a),u=o.bbCachePosKey===s,l=n.useCache&&u&&!o.styleDirty;a.recalculateRenderedStyle(l)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var d=r[c];fi(t,bi(d,n))}}else e=void 0===e?xi:Ei(e),t=bi(this[0],e);return t.x1=di(t.x1),t.y1=di(t.y1),t.x2=di(t.x2),t.y2=di(t.y2),t.w=di(t.x2-t.x1),t.h=di(t.y2-t.y1),t},li.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},li.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),B(e)){var a=e;e=function(){return a}}n.startBatch(),t.forEach((function(t,n){return t._private.bbAtOldPos=e(t,n)})).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var o=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}}(this.boundingBox({useCache:!1}));return t.silentPositions((function(e){return e._private.bbAtOldPos})),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),o},ui.boundingbox=ui.bb=ui.boundingBox,ui.renderedBoundingbox=ui.renderedBoundingBox;var ki,_i,Ci=li;ki=_i={};var Si=function(e){e.uppercaseName=W(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=W(e.outerName),ki[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},ki["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},ki["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},ki["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};Si({name:"width"}),Si({name:"height"}),_i.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},_i.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},_i.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var Pi=_i,Di={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Ti=Object.keys(Di).reduce((function(e,t){var n=Di[t],r=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)}(t);return e[t]=function(){return function(e,t){if(e.isEdge())return t(e)}(this,n.get)},n.mult?e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return et(e,i,r)}))}}(this,n.get)}:e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy();return et(t(e),n.zoom(),n.pan())}}(this,n.get)},e}),{}),Mi=U({},ci,Ci,Pi,Ti),Bi=function(e,t){this.recycle(e,t)};function Ni(){return!1}function Ii(){return!0}Bi.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ni,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Ii:Ni):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Ii;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Ii;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Ii,this.stopPropagation()},isDefaultPrevented:Ni,isPropagationStopped:Ni,isImmediatePropagationStopped:Ni};var Oi=/^([^.]+)(\.(?:[^.]+))?$/,zi={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Li=Object.keys(zi),Ai={};function ji(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ai,t=arguments.length>1?arguments[1]:void 0,n=0;n<Li.length;n++){var r=Li[n];this[r]=e[r]||zi[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Ri=ji.prototype,Fi=function(e,t,n,r,i,a,o){T(r)&&(i=r,r=null),o&&(a=null==a?o:U({},a,o));for(var s=M(n)?n:n.split(/\s+/),u=0;u<s.length;u++){var l=s[u];if(!R(l)){var c=l.match(Oi);if(c)if(!1===t(e,l,c[1],c[2]?c[2]:null,r,i,a))break}}},Vi=function(e,t){return e.addEventFields(e.context,t),new Bi(t.type,t)},qi=function(e,t,n){if("event"!==P(n))if(B(n))t(e,Vi(e,n));else for(var r=M(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!R(a)){var o=a.match(Oi);if(o){var s=o[1],u=o[2]?o[2]:null;t(e,Vi(e,{type:s,namespace:u,target:e.context}))}}}else t(e,n)};Ri.on=Ri.addListener=function(e,t,n,r,i){return Fi(this,(function(e,t,n,r,i,a,o){T(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Ri.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Ri.removeListener=Ri.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=this.listeners.slice());for(var a=this.listeners,o=function(o){var s=a[o];Fi(i,(function(t,n,r,i,u,l){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!u||t.qualifierCompare(s.qualifier,u))&&(!l||s.callback===l))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Ri.removeAllListeners=function(){return this.removeListener("*")},Ri.emit=Ri.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,M(t)||(t=[t]),qi(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||".*"===i.namespace)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}}(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),u=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===u&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Yi={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&z(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},Xi=function(e){return D(e)?new Yr(e):e},Wi={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new ji(Yi,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n)}return this},removeListener:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().removeListener(e,r,n)}return this},removeAllListeners:function(){for(var e=0;e<this.length;e++){this[e].emitter().removeAllListeners()}return this},one:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().one(e,r,n)}return this},once:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})}},emit:function(e,t){for(var n=0;n<this.length;n++){this[n].emitter().emit(e,t)}return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};ar.eventAliasesOn(Wi);var Gi={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(D(e)||O(e))return new Yr(e).filter(this);if(T(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){D(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(D(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=e,i=this.length<e.length,a=i?this:r,o=i?r:this,s=0;s<a.length;s++){var u=a[s];o.has(u)&&n.push(u)}return n},xor:function(e){var t=this._private.cy;D(e)&&(e=t.$(e));var n=this.spawn(),r=e,i=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return i(this,r),i(r,this),n},diff:function(e){var t=this._private.cy;D(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=e,o=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return o(this,a,n),o(a,this,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(D(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&D(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var u=this.length++;this[u]=o,i.set(s,{ele:o,index:u})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&D(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},Hi=Gi;Hi.u=Hi["|"]=Hi["+"]=Hi.union=Hi.or=Hi.add,Hi["\\"]=Hi["!"]=Hi["-"]=Hi.difference=Hi.relativeComplement=Hi.subtract=Hi.not,Hi.n=Hi["&"]=Hi["."]=Hi.and=Hi.intersection=Hi.intersect,Hi["^"]=Hi["(+)"]=Hi["(-)"]=Hi.symmetricDifference=Hi.symdiff=Hi.xor,Hi.fnFilter=Hi.filterFn=Hi.stdFilter=Hi.filter,Hi.complement=Hi.abscomp=Hi.absoluteComplement;var Ui=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?me:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},Ki={forEach:function(e,t){if(T(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!T(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Ui)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:me-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};Ki.each=Ki.forEach;var Zi;Zi="undefined",("undefined"==typeof Symbol?"undefined":p(Symbol))!=Zi&&p(Symbol.iterator)!=Zi&&(Ki[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return m({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var $i=Me({nodeDimensionsIncludeLabels:!1}),Qi={layoutDimensions:function(e){var t;if(e=$i(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=V(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var u=t.spacingFactor&&1!==t.spacingFactor,l=function(){if(!u)return null;for(var e=ht(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);ft(e,i.x,i.y)}return e}(),c=V((function(e,n){var r=s(e,n);u&&(r=function(e,t,n){var r=t.x1+t.w/2,i=t.y1+t.h/2;return{x:r+(n.x-r)*e,y:i+(n.y-i)*e}}(Math.abs(t.spacingFactor),l,r));return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var d=0;d<r.length;d++){var h=r[d],f=c(h,d);if(null==t.animateFilter||t.animateFilter(h,d)){var p=h.animation({position:f,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(p)}else h.position(f)}if(t.fit){var v=i.animation({fit:{boundingBox:a.boundingBoxAt(c),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}else if(void 0!==t.zoom&&void 0!==t.pan){var g=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(g)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),Jn.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(c),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(U({},e,{eles:this}))}};function Ji(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function ea(e,t){return e=he(e),function(n){return Ji(e,t,n)}}function ta(e,t){e=he(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return Ji(e,n,t)}}Qi.createLayout=Qi.makeLayout=Qi.layout;var na={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)}));return this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=n.style();if(B(e)){var i=e;r.applyBypass(this,i,false),this.emitAndNotify("style")}else if(D(e)){if(void 0===t){var a=this[0];return a?r.getStylePropertyValue(a,e):void 0}r.applyBypass(this,e,t,false),this.emitAndNotify("style")}else if(void 0===e){var o=this[0];return o?r.getRawStyle(o):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style(),r=this;if(void 0===e)for(var i=0;i<r.length;i++){var a=r[i];n.removeAllBypasses(a,false)}else{e=e.split(/\s+/);for(var o=0;o<r.length;o++){var s=r[o];n.removeBypasses(s,e,false)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++){i*=a[o].pstyle("opacity").value}return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function ra(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++){if(!t(n[r]))return!1}return!0}function ia(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||ra(i,r);var s=o.source,u=o.target;return n(s)&&(!a||ra(s,n))&&(s===u||n(u)&&(!a||ra(u,n)))}}}var aa=ea("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));na.takesUpSpace=ta("takesUpSpace",ia({ok:aa}));var oa=ea("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&aa(e)})),sa=ea("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&aa(e)}));na.interactive=ta("interactive",ia({ok:oa,parentOk:sa,edgeOkViaNode:aa})),na.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var ua=ea("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&aa(e)})),la=aa;na.visible=ta("visible",ia({ok:ua,edgeOkViaNode:la})),na.hidden=function(){var e=this[0];if(e)return!e.visible()},na.isBundledBezier=ta("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&(!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace())})),na.bypass=na.css=na.style,na.renderedCss=na.renderedStyle,na.removeBypass=na.removeCss=na.removeStyle,na.pstyle=na.parsedStyle;var ca={};function da(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&T(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&M(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var u=this[s],l=!e.ableField||u._private[e.ableField],c=u._private[e.field]!=e.value;if(e.overrideAble){var d=e.overrideAble(u);if(void 0!==d&&(l=d,!d))return this}l&&(u._private[e.field]=e.value,c&&n.push(u))}var h=this.spawn(n);h.updateStyle(),h.emit(e.event),o&&h.emit(o)}return this}}function ha(e){ca[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},ca[e.on]=da({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),ca[e.off]=da({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}ha({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),ha({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),ha({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),ha({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),ca.deselect=ca.unselect,ca.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},ha({field:"active",on:"activate",off:"unactivate"}),ha({field:"pannable",on:"panify",off:"unpanify"}),ca.inactive=function(){var e=this[0];if(e)return!e._private.active};var fa={},pa=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode()){for(var a=!1,o=i.connectedEdges(),s=0;s<o.length;s++){var u=o[s],l=u.source(),c=u.target();if(e.noIncomingEdges&&c===i&&l!==i||e.noOutgoingEdges&&l===i&&c!==i){a=!0;break}}a||n.push(i)}}return this.spawn(n,!0).filter(t)}},va=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode())for(var a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],u=s.source(),l=s.target();e.outgoing&&u===i?(n.push(s),n.push(l)):e.incoming&&l===i&&(n.push(s),n.push(u))}}return this.spawn(n,!0).filter(t)}},ga=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var u=a[s],l=u.id();i[l]||(i[l]=!0,r.push(u),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function ya(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function ma(e){return function(t){var n=[],r=this._private.cy,i=e||{};D(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var u=o[s],l=u._private.data,c=this.hasElementWithId(l.source)&&t.hasElementWithId(l.target),d=t.hasElementWithId(l.source)&&this.hasElementWithId(l.target);if(c||d){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!d)continue}n.push(u)}}return this.spawn(n,!0)}}function ba(e){return e=U({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,u=s._private.data.id,l=o.data.target,c=s._private.edges,d=0;d<c.length;d++){var h=c[d],f=h._private.data,p=f.target,v=f.source,g=p===l&&v===u,y=u===p&&l===v;(i.codirected&&g||!i.codirected&&(g||y))&&n.push(h)}return this.spawn(n,!0).filter(t)}}fa.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},U(fa,{roots:pa({noIncomingEdges:!0}),leaves:pa({noOutgoingEdges:!0}),outgoers:Ur(va({outgoing:!0}),"outgoers"),successors:ga({outgoing:!0}),incomers:Ur(va({incoming:!0}),"incomers"),predecessors:ga({incoming:!0})}),U(fa,{neighborhood:Ur((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],u=s.source(),l=s.target(),c=i===u?l:u;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),fa.neighbourhood=fa.neighborhood,fa.closedNeighbourhood=fa.closedNeighborhood,fa.openNeighbourhood=fa.openNeighborhood,U(fa,{source:Ur((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Ur((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:ya({attr:"source"}),targets:ya({attr:"target"})}),U(fa,{edgesWith:Ur(ma(),"edgesWith"),edgesTo:Ur(ma({thisIsSrc:!0}),"edgesTo")}),U(fa,{connectedEdges:Ur((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];if(r.isNode())for(var i=r._private.edges,a=0;a<i.length;a++){var o=i[a];t.push(o)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Ur((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];r.isEdge()&&(t.push(r.source()[0]),t.push(r.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Ur(ba(),"parallelEdges"),codirectedEdges:Ur(ba({codirected:!0}),"codirectedEdges")}),U(fa,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),fa.componentsOf=fa.components;var xa=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new ze,a=!1;if(t){if(t.length>0&&B(t[0])&&!z(t[0])){a=!0;for(var o=[],s=new Ae,u=0,l=t.length;u<l;u++){var c=t[u];null==c.data&&(c.data={});var d=c.data;if(null==d.id)d.id=Pe();else if(e.hasElementWithId(d.id)||s.has(d.id))continue;var h=new je(e,c,!1);o.push(h),s.add(d.id)}t=o}}else t=[];this.length=0;for(var f=0,p=t.length;f<p;f++){var v=t[f][0];if(null!=v){var g=v._private.data.id;n&&i.has(g)||(n&&i.set(g,{index:this.length,ele:v}),this[this.length]=v,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new ze,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else ke("A collection must have a reference to the core")},wa=je.prototype=xa.prototype=Object.create(Array.prototype);wa.instanceString=function(){return"collection"},wa.spawn=function(e,t){return new xa(this.cy(),e,t)},wa.spawnSelf=function(){return this.spawn(this)},wa.cy=function(){return this._private.cy},wa.renderer=function(){return this._private.cy.renderer()},wa.element=function(){return this[0]},wa.collection=function(){return L(this)?this:new xa(this._private.cy,[this])},wa.unique=function(){return new xa(this._private.cy,this,!0)},wa.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},wa.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new xa(t)},wa.$id=wa.getElementById,wa.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},wa.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},wa.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},wa.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(B(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,u=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=u&&u!=i.target&&(o.target=""+u,a=!0),a&&(t=t.move(o))}else{var l="parent"in e.data,c=e.data.parent;!l||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var d=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return d("removed","remove","restore"),d("selected","select","unselect"),d("selectable","selectify","unselectify"),d("locked","lock","unlock"),d("grabbable","grabify","ungrabify"),d("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var h={data:Se(r.data),position:Se(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};h.classes="";var f=0;return r.classes.forEach((function(e){return h.classes+=0==f++?e:" "+e})),h}}},wa.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},wa.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new je(e,r,!1);t.push(i)}return new xa(e,t)},wa.copy=wa.clone,wa.restore=function(){for(var e,t,n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],u=[],l=0,c=i.length;l<c;l++){var d=i[l];r&&!d.removed()||(d.isNode()?s.push(d):u.push(d))}e=s.concat(u);var h=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var f=e[t],p=f._private,v=p.data;if(f.clearTraversalCache(),r||p.removed)if(void 0===v.id)v.id=Pe();else if(N(v.id))v.id=""+v.id;else{if(R(v.id)||!D(v.id)){ke("Can not create element with invalid string ID `"+v.id+"`"),h();continue}if(a.hasElementWithId(v.id)){ke("Can not create second element with ID `"+v.id+"`"),h();continue}}else;var g=v.id;if(f.isNode()){var y=p.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(f.isEdge()){for(var m=f,b=["source","target"],x=b.length,w=!1,E=0;E<x;E++){var k=b[E],_=v[k];N(_)&&(_=v[k]=""+v[k]),null==_||""===_?(ke("Can not create edge `"+g+"` with unspecified "+k),w=!0):a.hasElementWithId(_)||(ke("Can not create edge `"+g+"` with nonexistant "+k+" `"+_+"`"),w=!0)}if(w){h();continue}var C=a.getElementById(v.source),S=a.getElementById(v.target);C.same(S)?C._private.edges.push(m):(C._private.edges.push(m),S._private.edges.push(m)),m._private.source=C,m._private.target=S}p.map=new ze,p.map.set(g,{ele:f,index:0}),p.removed=!1,r&&a.addToPool(f)}for(var P=0;P<s.length;P++){var T=s[P],M=T._private.data;N(M.parent)&&(M.parent=""+M.parent);var B=M.parent,I=null!=B;if(I||T._private.parent){var O=T._private.parent?a.collection().merge(T._private.parent):a.getElementById(B);if(O.empty())M.parent=void 0;else if(O[0].removed())Ce("Node added with missing parent, reference to parent removed"),M.parent=void 0,T._private.parent=null;else{for(var z=!1,L=O;!L.empty();){if(T.same(L)){z=!0,M.parent=void 0;break}L=L.parent()}z||(O[0]._private.children.push(T),T._private.parent=O[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var A=e.length===i.length?i:new xa(a,e),j=0;j<A.length;j++){var F=A[j];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(A).merge(A.connectedNodes()).merge(A.parent()):A).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?A.emitAndNotify("add"):r&&A.emit("add")}return i},wa.removed=function(){var e=this[0];return e&&e._private.removed},wa.inside=function(){var e=this[0];return e&&!e._private.removed},wa.remove=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){for(var t=e._private.edges,n=0;n<t.length;n++)u(t[n])}function s(e){for(var t=e._private.children,n=0;n<t.length;n++)u(t[n])}function u(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),o(e),s(e)):r.unshift(e))}for(var l=0,c=n.length;l<c;l++){var d=n[l];u(d)}function h(e,t){var n=e._private.edges;Be(n,t),e.clearTraversalCache()}function f(e){e.clearTraversalCache()}var p=[];function v(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Be(n,t),t._private.parent=null,p.ids[r]||(p.ids[r]=!0,p.push(e))}p.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var g=0;g<r.length;g++){var y=r[g];if(y.isEdge()){var m=y.source()[0],b=y.target()[0];h(m,y),h(b,y);for(var x=y.parallelEdges(),w=0;w<x.length;w++){var E=x[w];f(E),E.isBundledBezier()&&E.dirtyBoundingBoxCache()}}else{var k=y.parent();0!==k.length&&v(k,y)}t&&(y._private.removed=!0)}var _=a._private.elements;a._private.hasCompoundNodes=!1;for(var C=0;C<_.length;C++){var S=_[C];if(S.isParent()){a._private.hasCompoundNodes=!0;break}}var P=new xa(this.cy(),r);P.size()>0&&(e?P.emitAndNotify("remove"):t&&P.emit("remove"));for(var D=0;D<p.length;D++){var T=p[D];t&&T.removed()||T.updateStyle()}return P},wa.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),u=null!=o&&t.hasElementWithId(o),l=null!=s&&t.hasElementWithId(s);(u||l)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(u&&(a.source=o),l&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var d=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=d)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Gn,or,sr,Wr,Kr,ni,ri,Mi,Wi,Gi,{isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},Ki,Qi,na,ca,fa].forEach((function(e){U(wa,e)}));var Ea={add:function(e){var t,n=this;if(O(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new xa(n,i)}}else if(M(e)){t=new xa(n,e)}else if(B(e)&&(M(e.nodes)||M(e.edges))){for(var s=e,u=[],l=["nodes","edges"],c=0,d=l.length;c<d;c++){var h=l[c],f=s[h];if(M(f))for(var p=0,v=f.length;p<v;p++){var g=U({group:h},f[p]);u.push(g)}}t=new xa(n,u)}else{t=new je(n,e).collection()}return t},remove:function(e){if(O(e));else if(D(e)){var t=e;e=this.$(t)}return e.remove()}};var ka=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),u=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),l=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+u*r,n.v=n.v+l*r,n}return function e(t,r,i){var a,o,s,u={x:-1,v:0,tension:null,friction:null},l=[0],c=0,d=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,u.tension=t,u.friction=r,o=(a=null!==i)?(c=e(t,r))/i*.016:.016;s=n(s||u,o),l.push(1+s.x),c+=16,Math.abs(s.x)>d&&Math.abs(s.v)>d;);return a?function(e){return l[e*(l.length-1)|0]}:c}}(),_a=function(e,t,n,r){var i=function(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,u=11,l=1/(u-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var d=0;d<4;++d)if("number"!=typeof arguments[d]||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var h=c?new Float32Array(u):new Array(u);function f(e,t){return 1-3*t+3*e}function p(e,t){return 3*t-6*e}function v(e){return 3*e}function g(e,t,n){return((f(t,n)*e+p(t,n))*e+v(t))*e}function y(e,t,n){return 3*f(t,n)*e*e+2*p(t,n)*e+v(t)}function m(t,r){for(var a=0;a<i;++a){var o=y(r,e,n);if(0===o)return r;r-=(g(r,e,n)-t)/o}return r}function b(){for(var t=0;t<u;++t)h[t]=g(t*l,e,n)}function x(t,r,i){var a,u,l=0;do{(a=g(u=r+(i-r)/2,e,n)-t)>0?i=u:r=u}while(Math.abs(a)>o&&++l<s);return u}function w(t){for(var r=0,i=1,o=u-1;i!==o&&h[i]<=t;++i)r+=l;--i;var s=r+(t-h[i])/(h[i+1]-h[i])*l,c=y(s,e,n);return c>=a?m(t,s):0===c?s:x(t,r,r+l)}var E=!1;function k(){E=!0,e===t&&n===r||b()}var _=function(i){return E||k(),e===t&&n===r?i:0===i?0:1===i?1:g(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var C="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return C},_}(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Ca={linear:function(e,t,n){return e+(t-e)*n},ease:_a(.25,.1,.25,1),"ease-in":_a(.42,0,1,1),"ease-out":_a(0,0,.58,1),"ease-in-out":_a(.42,0,.58,1),"ease-in-sine":_a(.47,0,.745,.715),"ease-out-sine":_a(.39,.575,.565,1),"ease-in-out-sine":_a(.445,.05,.55,.95),"ease-in-quad":_a(.55,.085,.68,.53),"ease-out-quad":_a(.25,.46,.45,.94),"ease-in-out-quad":_a(.455,.03,.515,.955),"ease-in-cubic":_a(.55,.055,.675,.19),"ease-out-cubic":_a(.215,.61,.355,1),"ease-in-out-cubic":_a(.645,.045,.355,1),"ease-in-quart":_a(.895,.03,.685,.22),"ease-out-quart":_a(.165,.84,.44,1),"ease-in-out-quart":_a(.77,0,.175,1),"ease-in-quint":_a(.755,.05,.855,.06),"ease-out-quint":_a(.23,1,.32,1),"ease-in-out-quint":_a(.86,0,.07,1),"ease-in-expo":_a(.95,.05,.795,.035),"ease-out-expo":_a(.19,1,.22,1),"ease-in-out-expo":_a(1,0,0,1),"ease-in-circ":_a(.6,.04,.98,.335),"ease-out-circ":_a(.075,.82,.165,1),"ease-in-out-circ":_a(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Ca.linear;var r=ka(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":_a};function Sa(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Pa(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Da(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Pa(e,i),s=Pa(t,i);if(N(o)&&N(s))return Sa(a,o,s,n,r);if(M(o)&&M(s)){for(var u=[],l=0;l<s.length;l++){var c=o[l],d=s[l];if(null!=c&&null!=d){var h=Sa(a,c,d,n,r);u.push(h)}else u.push(d)}return u}}function Ta(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,u=o.startTime,l=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Ca.linear;else{var c,d,h;if(D(s))c=l.parse("transition-timing-function",s).value;else c=s;D(c)?(d=c,h=[]):(d=c[1],h=c.slice(2).map((function(e){return+e}))),h.length>0?("spring"===d&&h.push(o.duration),o.easingImpl=Ca[d].apply(null,h)):o.easingImpl=Ca[d]}var f,p=o.easingImpl;if(f=0===o.duration?1:(n-u)/o.duration,o.applying&&(f=o.progress),f<0?f=0:f>1&&(f=1),null==o.delay){var v=o.startPosition,g=o.position;if(g&&i&&!e.locked()){var y={};Ma(v.x,g.x)&&(y.x=Da(v.x,g.x,f,p)),Ma(v.y,g.y)&&(y.y=Da(v.y,g.y,f,p)),e.position(y)}var m=o.startPan,b=o.pan,x=a.pan,w=null!=b&&r;w&&(Ma(m.x,b.x)&&(x.x=Da(m.x,b.x,f,p)),Ma(m.y,b.y)&&(x.y=Da(m.y,b.y,f,p)),e.emit("pan"));var E=o.startZoom,k=o.zoom,_=null!=k&&r;_&&(Ma(E,k)&&(a.zoom=dt(a.minZoom,Da(E,k,f,p),a.maxZoom)),e.emit("zoom")),(w||_)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&i){for(var S=0;S<C.length;S++){var P=C[S],T=P.name,M=P,B=o.startStyle[T],N=Da(B,M,f,p,l.properties[B.name]);l.overrideBypass(e,T,N)}e.emit("style")}}return o.progress=f,f}function Ma(e,t){return null!=e&&null!=t&&(!(!N(e)||!N(t))||!(!e||!t))}function Ba(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Na(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var u=o.shift();u&&a.push(u)}for(var l=function(e){for(var t=e.length-1;t>=0;t--){(0,e[t])()}e.splice(0,e.length)},c=a.length-1;c>=0;c--){var d=a[c],h=d._private;h.stopped?(a.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,l(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||Ba(0,d,e),Ta(t,d,e,n),h.applying&&(h.applying=!1),l(h.frames),null!=h.step&&h.step(e),d.completed()&&(a.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,l(h.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o<n.length;o++){var s=i(n[o]);a=a||s}var u=i(t,!0);(a||u)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Ia={animate:ar.animate(),animation:ar.animation(),animated:ar.animated(),clearQueue:ar.clearQueue(),delay:ar.delay(),delayAnimation:ar.delayAnimation(),stop:ar.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Na(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&ne((function(n){Na(n,e),t()}))}()}}},Oa={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&z(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},za=function(e){return D(e)?new Yr(e):e},La={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new ji(Oa,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,za(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,za(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,za(t),n),this},once:function(e,t,n){return this.emitter().one(e,za(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};ar.eventAliasesOn(La);var Aa={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Aa.jpeg=Aa.jpg;var ja={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=D(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(U({},e,{cy:t,eles:i}));return a}ke("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else ke("A `name` must be specified to make a layout");else ke("Layout options must be specified to make a layout")}};ja.createLayout=ja.makeLayout=ja.layout;var Ra={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},Fa=Me({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Va={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Ce("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var r=Fa(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else ke("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Va.invalidateDimensions=Va.resize;var qa={collection:function(e,t){return D(e)?this.$(e):O(e)?e.collection():M(e)?(t||(t={}),new xa(this,e,t.unique,t.removed)):new xa(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};qa.elements=qa.filter=qa.$;var Ya={},Xa="t";Ya.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},Ya.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},u=0;u<n.length;u++){var l=n[u],c=e[u]===Xa,d=t[u]===Xa,h=c!==d,f=l.mappedProperties.length>0;if(h||d&&f){var p=void 0;h&&f||h?p=l.properties:f&&(p=l.mappedProperties);for(var v=0;v<p.length;v++){for(var g=p[v],y=g.name,m=!1,b=u+1;b<n.length;b++){var x=n[b];if(t[b]===Xa&&(m=null!=x.properties[g.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},Ya.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Xa:"f"}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},Ya.getContextStyle=function(e){var t=e.key,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var r={_private:{key:t}},i=0;i<this.length;i++){var a=this[i];if(t[i]===Xa)for(var o=0;o<a.properties.length;o++){var s=a.properties[o];r[s.name]=s}}return n[t]=r,r},Ya.applyContextStyle=function(e,t,n){for(var r=e.diffPropNames,i={},a=this.types,o=0;o<r.length;o++){var s=r[o],u=t[s],l=n.pstyle(s);if(!u){if(!l)continue;u=l.bypass?{name:s,deleteBypassed:!0}:{name:s,delete:!0}}if(l!==u){if(u.mapped===a.fn&&null!=l&&null!=l.mapping&&l.mapping.value===u.value){var c=l.mapping;if((c.fnValue=u.value(n))===c.prevFnValue)continue}var d=i[s]={prev:l};this.applyParsedProperty(n,u),d.next=n.pstyle(s),d.next&&d.next.bypass&&(d.next=d.next.bypassed)}}return{diffProps:i}},Ya.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,u=e._private.style;r=Object.keys(u);for(var l=0;l<i.length;l++){var c=i[l];t.styleKeys[c]=[ie,oe]}for(var d,h=function(e,n){return t.styleKeys[n][0]=ue(e,t.styleKeys[n][0])},f=function(e,n){return t.styleKeys[n][1]=le(e,t.styleKeys[n][1])},p=function(e,t){h(e,t),f(e,t)},v=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);h(r,t),f(r,t)}},g=0;g<r.length;g++){var y=r[g],m=u[y];if(null!=m){var b=this.properties[y],x=b.type,w=b.groupKey,E=void 0;null!=b.hashOverride?E=b.hashOverride(e,m):null!=m.pfValue&&(E=m.pfValue);var k=null==b.enums?m.value:null,_=null!=E,C=_||null!=k,S=m.units;if(x.number&&C&&!x.multiple)p(-128<(d=_?E:k)&&d<128&&Math.floor(d)!==d?2e9-(1024*d|0):d,w),_||null==S||v(S,w);else v(m.strValue,w)}}for(var P,D,T=[ie,oe],M=0;M<i.length;M++){var B=i[M],N=t.styleKeys[B];T[0]=ue(N[0],T[0]),T[1]=le(N[1],T[1])}t.styleKey=(P=T[0],D=T[1],2097152*P+D);var I=t.styleKeys;t.labelDimsKey=ce(I.labelDimensions);var O=a(e,["label"],I.labelDimensions);if(t.labelKey=ce(O),t.labelStyleKey=ce(de(I.commonLabel,O)),!s){var z=a(e,["source-label"],I.labelDimensions);t.sourceLabelKey=ce(z),t.sourceLabelStyleKey=ce(de(I.commonLabel,z));var L=a(e,["target-label"],I.labelDimensions);t.targetLabelKey=ce(L),t.targetLabelStyleKey=ce(de(I.commonLabel,L))}if(s){var A=t.styleKeys,j=A.nodeBody,R=A.nodeBorder,F=A.backgroundImage,V=A.compound,q=A.pie,Y=[j,R,F,V,q].filter((function(e){return null!=e})).reduce(de,[ie,oe]);t.nodeKey=ce(Y),t.hasPie=null!=q&&q[0]!==ie&&q[1]!==oe}return o!==t.styleKey},Ya.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},Ya.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,u=i.bypass,l=a[i.name],c=l&&l.bypass,d=e._private,h="mapping",f=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},p=function(){var t=f(l),n=f(i);r.checkTriggers(e,i.name,t,n)};if(i&&"pie"===i.name.substr(0,3)&&Ce("The pie style properties are deprecated. Create charts using background images instead."),"curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",u)),i.delete)return a[i.name]=void 0,p(),!0;if(i.deleteBypassed)return l?!!l.bypass&&(l.bypassed=void 0,p(),!0):(p(),!0);if(i.deleteBypass)return l?!!l.bypass&&(a[i.name]=l.bypassed,p(),!0):(p(),!0);var v=function(){Ce("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var g,y=i.field.split("."),m=d.data,b=0;b<y.length&&m;b++){m=m[y[b]]}if(null==m)return v(),!1;if(!N(m))return Ce("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((g=0===x?0:(m-i.fieldMin)/x)<0?g=0:g>1&&(g=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],k=i.valueMin[1],_=i.valueMax[1],C=i.valueMin[2],S=i.valueMax[2],P=null==i.valueMin[3]?1:i.valueMin[3],D=null==i.valueMax[3]?1:i.valueMax[3],T=[Math.round(w+(E-w)*g),Math.round(k+(_-k)*g),Math.round(C+(S-C)*g),Math.round(P+(D-P)*g)];n={bypass:i.bypass,name:i.name,value:T,strValue:"rgb("+T[0]+", "+T[1]+", "+T[2]+")"}}else{if(!s.number)return!1;var M=i.valueMin+(i.valueMax-i.valueMin)*g;n=this.parse(i.name,M,i.bypass,h)}if(!n)return v(),!1;n.mapping=i,i=n;break;case o.data:for(var B=i.field.split("."),I=d.data,O=0;O<B.length&&I;O++){I=I[B[O]]}if(null!=I&&(n=this.parse(i.name,I,i.bypass,h)),!n)return v(),!1;n.mapping=i,i=n;break;case o.fn:var z=i.value,L=null!=i.fnValue?i.fnValue:z(e);if(i.prevFnValue=L,null==L)return Ce("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,L,i.bypass,h)))return Ce("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Se(i),i=n;break;case void 0:break;default:return!1}return u?(i.bypassed=c?l.bypassed:l,a[i.name]=i):c?l.bypassed=i:a[i.name]=i,p(),!0},Ya.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],u=i[s];null!=u&&(u.bypass?u.bypassed=null:i[s]=null)}else r._private.style={}}},Ya.update=function(){this._private.cy.mutableElements().updateStyle()},Ya.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},u=!1,l=0;l<i.length;l++){var c=i[l],d=e.pstyle(c),h=t[c];if(h){var f=h.prev,p=null!=h.next?h.next:d,v=!1,g=void 0,y=1e-6;f&&(N(f.pfValue)&&N(p.pfValue)?(v=p.pfValue-f.pfValue,g=f.pfValue+y*v):N(f.value)&&N(p.value)?(v=p.value-f.value,g=f.value+y*v):M(f.value)&&M(p.value)&&(v=f.value[0]!==p.value[0]||f.value[1]!==p.value[1]||f.value[2]!==p.value[2],g=f.strValue),v&&(s[c]=p.strValue,this.applyBypass(e,c,g),u=!0))}}if(!u)return;r.transitioning=!0,new Jn((function(t){o>0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Ya.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Ya.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Ya.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Ya.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Wa={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;a<this.properties.length;a++){var o=this.properties[a].name,s=this.parse(o,n,!0);s&&i.push(s)}}else if(D(t)){var u=this.parse(t,n,!0);u&&i.push(u)}else{if(!B(t))return!1;var l=t;r=n;for(var c=Object.keys(l),d=0;d<c.length;d++){var h=c[d],f=l[h];if(void 0===f&&(f=l[Y(h)]),void 0!==f){var p=this.parse(h,f,!0);p&&i.push(p)}}}if(0===i.length)return!1;for(var v=!1,g=0;g<e.length;g++){for(var y=e[g],m={},b=void 0,x=0;x<i.length;x++){var w=i[x];if(r){var E=y.pstyle(w.name);b=m[w.name]={prev:E}}v=this.applyParsedProperty(y,Se(w))||v,r&&(b.next=y.pstyle(w.name))}v&&this.updateStyleHints(y),r&&this.updateTransitions(y,m,true)}return v},overrideBypass:function(e,t,n){t=q(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,u=o.mutiple,l=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":u?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,l,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=0;r<e.length;r++){for(var i=e[r],a={},o=0;o<t.length;o++){var s=t[o],u=this.properties[s],l=i.pstyle(u.name);if(l&&l.bypass){var c=this.parse(s,"",!0),d=a[u.name]={prev:l};this.applyParsedProperty(i,c),d.next=i.pstyle(u.name)}}this.updateStyleHints(i),n&&this.updateTransitions(i,a,true)}}},Ga={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy,n=t.container(),r=t.window();if(r&&n&&r.getComputedStyle)return r.getComputedStyle(n).getPropertyValue(e)}},Ha={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[Y(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){if(e=e[0]){var r=this.properties[t];r.alias&&(r=r.pointsTo);var i=r.type,a=e.pstyle(r.name);if(a){var o=a.value,s=a.units,u=a.strValue;if(n&&i.number&&null!=o&&N(o)){var l=e.cy().zoom(),c=function(e){return e*l},d=function(e,t){return c(e)+t},h=M(o);return(h?s.every((function(e){return null!=e})):null!=s)?h?o.map((function(e,t){return d(e,s[t])})).join(" "):d(o,s):h?o.map((function(e){return D(e)?e:""+c(e)})).join(" "):""+c(o)}if(null!=u)return u}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=B(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],u=r[o]||r[q(o)],l=this.parse(u.name,s);l&&t.push(l)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,u,l=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)l[0]=ue(o,l[0]),l[1]=le(o,l[1]);else for(a=i.strValue,u=0;u<a.length;u++)o=a.charCodeAt(u),l[0]=ue(o,l[0]),l[1]=le(o,l[1]);return l}};Ha.getPropertiesHash=Ha.getNonDefaultPropertiesHash;var Ua={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var u=o[s],l=a[u];t.css(u,l)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},Ka={appendFromString:function(e){var t,n,r,i=this,a=""+e;function o(){a=a.length>t.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var u=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Ce("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=u[0];var l=u[1];if("core"!==l)if(new Yr(l).invalid){Ce("Skipping parsing of block: Invalid selector found in string stylesheet: "+l),o();continue}var c=u[2],d=!1;n=c;for(var h=[];;){if(n.match(/^\s*$/))break;var f=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!f){Ce("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),d=!0;break}r=f[0];var p=f[1],v=f[2];if(this.properties[p])i.parse(p,v)?(h.push({name:p,val:v}),s()):(Ce("Skipping property: Invalid property definition in: "+r),s());else Ce("Skipping property: Invalid property name in: "+r),s()}if(d){o();break}i.selector(l);for(var g=0;g<h.length;g++){var y=h[g];i.css(y.name,y.val)}o()}return i},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},Za={};!function(){var e=G,t=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},n=function(t){var n=e+"|\\w+|rgb[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)|hsl[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)|\\#[0-9a-fA-F]{3}|\\#[0-9a-fA-F]{6}";return"^"+t+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+n+")\\s*\\,\\s*("+n+")\\)$"},r=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];Za.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:t("data")},layoutData:{mapping:!0,regex:t("layoutData")},scratch:{mapping:!0,regex:t("scratch")},mapData:{mapping:!0,regex:n("mapData")},mapLayoutData:{mapping:!0,regex:n("mapLayoutData")},mapScratch:{mapping:!0,regex:n("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:r,singleRegexMatchValue:!0},urls:{regexes:r,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return D(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var i={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||(0==e&&0!=t||0!=e&&0==t)},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=R(e),r=R(t);return n&&!r||!n&&r}},a=Za.types,o=[{name:"label",type:a.text,triggersBounds:i.any,triggersZOrder:i.emptyNonEmpty},{name:"text-rotation",type:a.textRotation,triggersBounds:i.any},{name:"text-margin-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"text-margin-y",type:a.bidirectionalSize,triggersBounds:i.any}],s=[{name:"source-label",type:a.text,triggersBounds:i.any},{name:"source-text-rotation",type:a.textRotation,triggersBounds:i.any},{name:"source-text-margin-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"source-text-margin-y",type:a.bidirectionalSize,triggersBounds:i.any},{name:"source-text-offset",type:a.size,triggersBounds:i.any}],u=[{name:"target-label",type:a.text,triggersBounds:i.any},{name:"target-text-rotation",type:a.textRotation,triggersBounds:i.any},{name:"target-text-margin-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"target-text-margin-y",type:a.bidirectionalSize,triggersBounds:i.any},{name:"target-text-offset",type:a.size,triggersBounds:i.any}],l=[{name:"font-family",type:a.fontFamily,triggersBounds:i.any},{name:"font-style",type:a.fontStyle,triggersBounds:i.any},{name:"font-weight",type:a.fontWeight,triggersBounds:i.any},{name:"font-size",type:a.size,triggersBounds:i.any},{name:"text-transform",type:a.textTransform,triggersBounds:i.any},{name:"text-wrap",type:a.textWrap,triggersBounds:i.any},{name:"text-overflow-wrap",type:a.textOverflowWrap,triggersBounds:i.any},{name:"text-max-width",type:a.size,triggersBounds:i.any},{name:"text-outline-width",type:a.size,triggersBounds:i.any},{name:"line-height",type:a.positiveNumber,triggersBounds:i.any}],c=[{name:"text-valign",type:a.valign,triggersBounds:i.any},{name:"text-halign",type:a.halign,triggersBounds:i.any},{name:"color",type:a.color},{name:"text-outline-color",type:a.color},{name:"text-outline-opacity",type:a.zeroOneNumber},{name:"text-background-color",type:a.color},{name:"text-background-opacity",type:a.zeroOneNumber},{name:"text-background-padding",type:a.size,triggersBounds:i.any},{name:"text-border-opacity",type:a.zeroOneNumber},{name:"text-border-color",type:a.color},{name:"text-border-width",type:a.size,triggersBounds:i.any},{name:"text-border-style",type:a.borderStyle,triggersBounds:i.any},{name:"text-background-shape",type:a.textBackgroundShape,triggersBounds:i.any},{name:"text-justification",type:a.justification}],d=[{name:"events",type:a.bool},{name:"text-events",type:a.bool}],h=[{name:"display",type:a.display,triggersZOrder:i.any,triggersBounds:i.any,triggersBoundsOfParallelBeziers:!0},{name:"visibility",type:a.visibility,triggersZOrder:i.any},{name:"opacity",type:a.zeroOneNumber,triggersZOrder:i.zeroNonZero},{name:"text-opacity",type:a.zeroOneNumber},{name:"min-zoomed-font-size",type:a.size},{name:"z-compound-depth",type:a.zCompoundDepth,triggersZOrder:i.any},{name:"z-index-compare",type:a.zIndexCompare,triggersZOrder:i.any},{name:"z-index",type:a.nonNegativeInt,triggersZOrder:i.any}],f=[{name:"overlay-padding",type:a.size,triggersBounds:i.any},{name:"overlay-color",type:a.color},{name:"overlay-opacity",type:a.zeroOneNumber,triggersBounds:i.zeroNonZero},{name:"overlay-shape",type:a.overlayShape,triggersBounds:i.any}],p=[{name:"underlay-padding",type:a.size,triggersBounds:i.any},{name:"underlay-color",type:a.color},{name:"underlay-opacity",type:a.zeroOneNumber,triggersBounds:i.zeroNonZero},{name:"underlay-shape",type:a.overlayShape,triggersBounds:i.any}],v=[{name:"transition-property",type:a.propList},{name:"transition-duration",type:a.time},{name:"transition-delay",type:a.time},{name:"transition-timing-function",type:a.easing}],g=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},y=[{name:"height",type:a.nodeSize,triggersBounds:i.any,hashOverride:g},{name:"width",type:a.nodeSize,triggersBounds:i.any,hashOverride:g},{name:"shape",type:a.nodeShape,triggersBounds:i.any},{name:"shape-polygon-points",type:a.polygonPointList,triggersBounds:i.any},{name:"background-color",type:a.color},{name:"background-fill",type:a.fill},{name:"background-opacity",type:a.zeroOneNumber},{name:"background-blacken",type:a.nOneOneNumber},{name:"background-gradient-stop-colors",type:a.colors},{name:"background-gradient-stop-positions",type:a.percentages},{name:"background-gradient-direction",type:a.gradientDirection},{name:"padding",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"padding-relative-to",type:a.paddingRelativeTo,triggersBounds:i.any},{name:"bounds-expansion",type:a.boundsExpansion,triggersBounds:i.any}],m=[{name:"border-color",type:a.color},{name:"border-opacity",type:a.zeroOneNumber},{name:"border-width",type:a.size,triggersBounds:i.any},{name:"border-style",type:a.borderStyle}],b=[{name:"background-image",type:a.urls},{name:"background-image-crossorigin",type:a.bgCrossOrigin},{name:"background-image-opacity",type:a.zeroOneNumbers},{name:"background-image-containment",type:a.bgContainment},{name:"background-image-smoothing",type:a.bools},{name:"background-position-x",type:a.bgPos},{name:"background-position-y",type:a.bgPos},{name:"background-width-relative-to",type:a.bgRelativeTo},{name:"background-height-relative-to",type:a.bgRelativeTo},{name:"background-repeat",type:a.bgRepeat},{name:"background-fit",type:a.bgFit},{name:"background-clip",type:a.bgClip},{name:"background-width",type:a.bgWH},{name:"background-height",type:a.bgWH},{name:"background-offset-x",type:a.bgPos},{name:"background-offset-y",type:a.bgPos}],x=[{name:"position",type:a.position,triggersBounds:i.any},{name:"compound-sizing-wrt-labels",type:a.compoundIncludeLabels,triggersBounds:i.any},{name:"min-width",type:a.size,triggersBounds:i.any},{name:"min-width-bias-left",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"min-width-bias-right",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"min-height",type:a.size,triggersBounds:i.any},{name:"min-height-bias-top",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"min-height-bias-bottom",type:a.sizeMaybePercent,triggersBounds:i.any}],w=[{name:"line-style",type:a.lineStyle},{name:"line-color",type:a.color},{name:"line-fill",type:a.fill},{name:"line-cap",type:a.lineCap},{name:"line-opacity",type:a.zeroOneNumber},{name:"line-dash-pattern",type:a.numbers},{name:"line-dash-offset",type:a.number},{name:"line-gradient-stop-colors",type:a.colors},{name:"line-gradient-stop-positions",type:a.percentages},{name:"curve-style",type:a.curveStyle,triggersBounds:i.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:a.zeroOneNumber,triggersBounds:i.any},{name:"source-endpoint",type:a.edgeEndpoint,triggersBounds:i.any},{name:"target-endpoint",type:a.edgeEndpoint,triggersBounds:i.any},{name:"control-point-step-size",type:a.size,triggersBounds:i.any},{name:"control-point-distances",type:a.bidirectionalSizes,triggersBounds:i.any},{name:"control-point-weights",type:a.numbers,triggersBounds:i.any},{name:"segment-distances",type:a.bidirectionalSizes,triggersBounds:i.any},{name:"segment-weights",type:a.numbers,triggersBounds:i.any},{name:"taxi-turn",type:a.bidirectionalSizeMaybePercent,triggersBounds:i.any},{name:"taxi-turn-min-distance",type:a.size,triggersBounds:i.any},{name:"taxi-direction",type:a.axisDirection,triggersBounds:i.any},{name:"edge-distances",type:a.edgeDistances,triggersBounds:i.any},{name:"arrow-scale",type:a.positiveNumber,triggersBounds:i.any},{name:"loop-direction",type:a.angle,triggersBounds:i.any},{name:"loop-sweep",type:a.angle,triggersBounds:i.any},{name:"source-distance-from-node",type:a.size,triggersBounds:i.any},{name:"target-distance-from-node",type:a.size,triggersBounds:i.any}],E=[{name:"ghost",type:a.bool,triggersBounds:i.any},{name:"ghost-offset-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"ghost-offset-y",type:a.bidirectionalSize,triggersBounds:i.any},{name:"ghost-opacity",type:a.zeroOneNumber}],k=[{name:"selection-box-color",type:a.color},{name:"selection-box-opacity",type:a.zeroOneNumber},{name:"selection-box-border-color",type:a.color},{name:"selection-box-border-width",type:a.size},{name:"active-bg-color",type:a.color},{name:"active-bg-opacity",type:a.zeroOneNumber},{name:"active-bg-size",type:a.size},{name:"outside-texture-bg-color",type:a.color},{name:"outside-texture-bg-opacity",type:a.zeroOneNumber}],_=[];Za.pieBackgroundN=16,_.push({name:"pie-size",type:a.sizeMaybePercent});for(var C=1;C<=Za.pieBackgroundN;C++)_.push({name:"pie-"+C+"-background-color",type:a.color}),_.push({name:"pie-"+C+"-background-size",type:a.percent}),_.push({name:"pie-"+C+"-background-opacity",type:a.zeroOneNumber});var S=[],P=Za.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:a.arrowShape,triggersBounds:i.any},{name:"arrow-color",type:a.color},{name:"arrow-fill",type:a.arrowFill}].forEach((function(e){P.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;S.push({name:n,type:r,triggersBounds:i})}))}),{});var T=Za.properties=[].concat(d,v,h,f,p,E,c,l,o,s,u,y,m,b,_,x,w,S,k),M=Za.propertyGroups={behavior:d,transition:v,visibility:h,overlay:f,underlay:p,ghost:E,commonLabel:c,labelDimensions:l,mainLabel:o,sourceLabel:s,targetLabel:u,nodeBody:y,nodeBorder:m,backgroundImage:b,pie:_,compound:x,edgeLine:w,edgeArrow:S,core:k},B=Za.propertyGroupNames={};(Za.propertyGroupKeys=Object.keys(M)).forEach((function(e){B[e]=M[e].map((function(e){return e.name})),M[e].forEach((function(t){return t.groupKey=e}))}));var N=Za.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];Za.propertyNames=T.map((function(e){return e.name}));for(var I=0;I<T.length;I++){var O=T[I];T[O.name]=O}for(var z=0;z<N.length;z++){var L=N[z],A=T[L.pointsTo],j={name:L.name,alias:!0,pointsTo:A};T.push(j),T[L.name]=j}}(),Za.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},Za.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=U({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=Za.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce((function(e,t){return Za.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},Za.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var $a={parse:function(e,t,n,r){var i=this;if(T(t))return i.parseImplWarn(e,t,n,r);var a,o=fe(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Se(a))&&(a.value=Se(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Ce("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Ce("The style value of `label` is deprecated for `"+i.name+"`"),i}};$a.parseImpl=function(e,t,n,r){var i=this;e=q(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var u=D(t);u&&(t=t.trim());var l,c,d=a.type;if(!d)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(T(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!u||r||t.length<7||"a"!==t[1]);else{if(t.length>=7&&"d"===t[0]&&(l=new RegExp(s.data.regex).exec(t))){if(n)return!1;var h=s.data;return{name:e,value:l,strValue:""+t,mapped:h,field:l[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(d.multiple)return!1;var f=s.mapData;if(!d.color&&!d.number)return!1;var p=this.parse(e,c[4]);if(!p||p.mapped)return!1;var v=this.parse(e,c[5]);if(!v||v.mapped)return!1;if(p.pfValue===v.pfValue||p.strValue===v.strValue)return Ce("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+p.strValue+"`"),this.parse(e,p.strValue);if(d.color){var g=p.value,y=v.value;if(!(g[0]!==y[0]||g[1]!==y[1]||g[2]!==y[2]||g[3]!==y[3]&&(null!=g[3]&&1!==g[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:f,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:p.value,valueMax:v.value,bypass:n}}}if(d.multiple&&"multiple"!==r){var m;if(m=u?t.split(/\s+/):M(t)?t:[t],d.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",k=!1,_=0;_<m.length;_++){var C=i.parse(e,m[_],n,"multiple");k=k||D(C.value),b.push(C.value),w.push(null!=C.pfValue?C.pfValue:C.value),x.push(C.units),E+=(_>0?" ":"")+C.strValue}return d.validate&&!d.validate(b,x)?null:d.singleEnum&&k?1===b.length&&D(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var S,P,B=function(){for(var r=0;r<d.enums.length;r++){if(d.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n}}return null};if(d.number){var I,O="px";if(d.units&&(I=d.units),d.implicitUnits&&(O=d.implicitUnits),!d.unitless)if(u){var z="px|em"+(d.allowPercent?"|\\%":"");I&&(z=I);var L=t.match("^("+G+")("+z+")?$");L&&(t=L[1],I=L[2]||O)}else I&&!d.implicitUnits||(I=O);if(t=parseFloat(t),isNaN(t)&&void 0===d.enums)return null;if(isNaN(t)&&void 0!==d.enums)return t=o,B();if(d.integer&&(!N(P=t)||Math.floor(P)!==P))return null;if(void 0!==d.min&&(t<d.min||d.strictMin&&t===d.min)||void 0!==d.max&&(t>d.max||d.strictMax&&t===d.max))return null;var A={name:e,value:t,strValue:""+t+(I||""),units:I,bypass:n};return d.unitless||"px"!==I&&"em"!==I?A.pfValue=t:A.pfValue="px"!==I&&I?this.getEmSizeInPixels()*t:t,"ms"!==I&&"s"!==I||(A.pfValue="ms"===I?t:1e3*t),"deg"!==I&&"rad"!==I||(A.pfValue="rad"===I?t:(S=t,Math.PI*S/180)),"%"===I&&(A.pfValue=t/100),A}if(d.propList){var j=[],R=""+t;if("none"===R);else{for(var F=R.split(/\s*,\s*|\s+/),V=0;V<F.length;V++){var Y=F[V].trim();i.properties[Y]?j.push(Y):Ce("`"+Y+"` is not a valid property name")}if(0===j.length)return null}return{name:e,value:j,strValue:0===j.length?"none":j.join(" "),bypass:n}}if(d.color){var X=K(t);return X?{name:e,value:X,pfValue:X,strValue:"rgb("+X[0]+","+X[1]+","+X[2]+")",bypass:n}:null}if(d.regex||d.regexes){if(d.enums){var W=B();if(W)return W}for(var H=d.regexes?d.regexes:[d.regex],U=0;U<H.length;U++){var Z=new RegExp(H[U]).exec(t);if(Z)return{name:e,value:d.singleRegexMatchValue?Z[1]:Z,strValue:""+t,bypass:n}}return null}return d.string?{name:e,value:""+t,strValue:""+t,bypass:n}:d.enums?B():null};var Qa=function e(t){if(!(this instanceof e))return new e(t);A(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):ke("A style must have a core reference")},Ja=Qa.prototype;Ja.instanceString=function(){return"style"},Ja.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},Ja.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},Ja.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},Ja.selector=function(e){var t="core"===e?null:new Yr(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},Ja.css=function(){var e=this,t=arguments;if(1===t.length)for(var n=t[0],r=0;r<e.properties.length;r++){var i=e.properties[r],a=n[i.name];void 0===a&&(a=n[Y(i.name)]),void 0!==a&&this.cssRule(i.name,a)}else 2===t.length&&this.cssRule(t[0],t[1]);return this},Ja.style=Ja.css,Ja.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},Ja.append=function(e){return j(e)?e.appendToStyle(this):M(e)?this.appendFromJson(e):D(e)&&this.appendFromString(e),this},Qa.fromJson=function(e,t){var n=new Qa(e);return n.fromJson(t),n},Qa.fromString=function(e,t){return new Qa(e).fromString(t)},[Ya,Wa,Ga,Ha,Ua,Ka,Za,$a].forEach((function(e){U(Ja,e)})),Qa.types=Ja.types,Qa.properties=Ja.properties,Qa.propertyGroups=Ja.propertyGroups,Qa.propertyGroupNames=Ja.propertyGroupNames,Qa.propertyGroupKeys=Ja.propertyGroupKeys;var eo={style:function(e){e&&this.setStyle(e).update();return this._private.style},setStyle:function(e){var t=this._private;return j(e)?t.style=e.generateStyle(this):M(e)?t.style=Qa.fromJson(this,e):D(e)?t.style=Qa.fromString(this,e):t.style=Qa(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},to={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType="single"),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(D(a[0]))return o[e=a[0]];if(B(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,N(r)&&(o.x=r),N(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=a[0],t=a[1],"x"!==e&&"y"!==e||!N(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,u=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:B(e)&&(a=(i=s[0]).x,o=i.y,N(a)&&(u.x+=a),N(o)&&(u.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!N(r)||(u[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(N(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n,r;if(D(e)){var i=e;e=this.$(i)}else if(B(r=e)&&N(r.x1)&&N(r.x2)&&N(r.y1)&&N(r.y2)){var a=e;(n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else O(e)||(e=this.mutableElements());if(!O(e)||!e.empty()){n=n||e.boundingBox();var o,s=this.width(),u=this.height();if(t=N(t)?t:0,!isNaN(s)&&!isNaN(u)&&s>0&&u>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(u-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)<this._private.minZoom?this._private.minZoom:o,pan:{x:(s-o*(n.x1+n.x2))/2,y:(u-o*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return N(e)&&N(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):N(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:N(t)&&void 0===e&&t>=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),N(e)?n=e:B(e)&&(n=e.level,null!=e.position?t=et(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!N(n)||n===a||null!=t&&(!N(t.x)||!N(t.y)))return null;if(null!=t){var s=i,u=a,l=n;return{zoomed:!0,panned:!0,zoom:l,pan:{x:-l/u*(t.x-s.x)+t.x,y:-l/u*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(N(e.zoom)||(n=!1),B(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var u=e.pan;N(u.x)&&(t.pan.x=u.x,o=!1),N(u.y)&&(t.pan.y=u.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(D(e)){var n=e;e=this.mutableElements().filter(n)}else O(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};to.centre=to.center,to.autolockNodes=to.autolock,to.autoungrabifyNodes=to.autoungrabify;var no={data:ar.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ar.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ar.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ar.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};no.attr=no.data,no.removeAttr=no.removeData;var ro=function(e){var t=this,n=(e=U({},e)).container;n&&!I(n)&&I(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==w&&void 0!==n&&!e.headless,o=e;o.layout=U({name:a?"grid":"null"},o.layout),o.renderer=U({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},u=this._private={container:n,ready:!1,options:o,elements:new xa(this),listeners:[],aniEles:new xa(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:N(o.zoom)?o.zoom:1,pan:{x:B(o.pan)&&N(o.pan.x)?o.pan.x:0,y:B(o.pan)&&N(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});u.styleEnabled&&t.setStyle([]);var l=U({},o,o.renderer);t.initRenderer(l);!function(e,t){if(e.some(F))return Jn.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];u.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(B(e)||M(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=U({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),u.ready=!0,T(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},io=ro.prototype;U(io,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){if(null==this._private.container)return w;var e=this._private.container.ownerDocument;return void 0===e||null==e?w:e.defaultView||w},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!I(e)&&I(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(U({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Se(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements();if(B(e)){if(t.startBatch(),e.elements){var i={},a=function(e,n){for(var r=[],a=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var u=""+s.data.id,l=t.getElementById(u);i[u]=!0,0!==l.length?a.push({ele:l,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Ce("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<a.length;c++){var d=a[c],h=d.ele,f=d.json;h.json(f)}};if(M(e.elements))a(e.elements);else for(var o=["nodes","edges"],s=0;s<o.length;s++){var u=o[s],l=e.elements[u];M(l)&&a(l,u)}var c=t.collection();r.filter((function(e){return!i[e.id()]})).forEach((function(e){e.isParent()?c.merge(e):e.remove()})),c.forEach((function(e){return e.children().move({parent:null})})),c.forEach((function(e){return function(e){return t.getElementById(e.id())}(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var d=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],h=0;h<d.length;h++){var f=d[h];null!=e[f]&&t[f](e[f])}return t.endBatch(),this}var p={};!!e?p.elements=this.elements().map((function(e){return e.json()})):(p.elements={},r.forEach((function(e){var t=e.group();p.elements[t]||(p.elements[t]=[]),p.elements[t].push(e.json())}))),this._private.styleEnabled&&(p.style=t.style().json()),p.data=Se(t.data());var v=n.options;return p.zoomingEnabled=n.zoomingEnabled,p.userZoomingEnabled=n.userZoomingEnabled,p.zoom=n.zoom,p.minZoom=n.minZoom,p.maxZoom=n.maxZoom,p.panningEnabled=n.panningEnabled,p.userPanningEnabled=n.userPanningEnabled,p.pan=Se(n.pan),p.boxSelectionEnabled=n.boxSelectionEnabled,p.renderer=Se(v.renderer),p.hideEdgesOnViewport=v.hideEdgesOnViewport,p.textureOnViewport=v.textureOnViewport,p.wheelSensitivity=v.wheelSensitivity,p.motionBlur=v.motionBlur,p.multiClickDebounceTime=v.multiClickDebounceTime,p}}),io.$id=io.getElementById,[Ea,Ia,La,Aa,ja,Ra,Va,qa,eo,to,no].forEach((function(e){U(io,e)}));var ao={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},oo={maximal:!1,acyclic:!1},so=function(e){return e.scratch("breadthfirst")},uo=function(e,t){return e.scratch("breadthfirst",t)};function lo(e){this.options=U({},ao,oo,e)}lo.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,u=n.acyclic||n.maximal||n.maximalAdjustments>0,l=ht(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(O(n.roots))e=n.roots;else if(M(n.roots)){for(var c=[],d=0;d<n.roots.length;d++){var h=n.roots[d],f=r.getElementById(h);c.push(f)}e=r.collection(c)}else if(D(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var p=i.components();e=r.collection();for(var v=function(t){var n=p[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},g=0;g<p.length;g++)v(g)}var y=[],m={},b=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),uo(e,{index:n,depth:t})};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();b(a,i),m[o]=!0}});for(var x=[],w=0;w<a.length;w++){var E=a[w];m[E.id()]||x.push(E)}var k=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?uo(r,{depth:e,index:n}):(t.splice(n,1),n--)}},_=function(){for(var e=0;e<y.length;e++)k(e)},C=function(e,t){for(var r=so(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),u=0;u<a.length;u++){var l=a[u],c=so(l);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var d=o+1;return function(e,t){var n=so(e),r=n.depth,i=n.index;y[r][i]=null,b(e,t)}(e,d),t[s]=d,!0}return!1};if(s&&u){var S=[],P={},T=function(e){return S.push(e)};for(a.forEach((function(e){return S.push(e)}));S.length>0;){var B=S.shift(),N=C(B,P);if(N)B.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(T);else if(null===N){Ce("Detected double maximal shift for node `"+B.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}_();var I=0;if(n.avoidOverlap)for(var z=0;z<a.length;z++){var L=a[z].layoutDimensions(n),A=L.w,j=L.h;I=Math.max(I,A,j)}var R={},F=function(e){if(R[e.id()])return R[e.id()];for(var t=so(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var u=so(s);if(null!=u){var l=u.index,c=u.depth;if(null!=l&&null!=c){var d=y[c].length;c<t&&(r+=l/d,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),R[e.id()]=r,r},V=function(e,t){var n=F(e)-F(t);return 0===n?H(e.id(),t.id()):n};void 0!==n.depthSort&&(V=n.depthSort);for(var q=0;q<y.length;q++)y[q].sort(V),k(q);for(var Y=[],X=0;X<x.length;X++)Y.push(x[X]);y.unshift(Y),_();for(var W=0,G=0;G<y.length;G++)W=Math.max(y[G].length,W);var U=l.x1+l.w/2,K=l.x1+l.h/2,Z=y.reduce((function(e,t){return Math.max(e,t.length)}),0);return i.nodes().layoutPositions(this,n,(function(e){var t=so(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(l.w/((n.grid?Z:a)+1),I),s=Math.max(l.h/(y.length+1),I),u=Math.min(l.w/2/y.length,l.h/2/y.length);if(u=Math.max(u,I),n.circle){var c=u*r+u-(y.length>0&&y[0].length<=3?u/2:0),d=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:U+c*Math.cos(d),y:K+c*Math.sin(d)}}return{x:U+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var co={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function ho(e){this.options=U({},co,e)}ho.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=ht(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),u=s.x1+s.w/2,l=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),d=0,h=0;h<a.length;h++){var f=a[h].layoutDimensions(t),p=f.w,v=f.h;d=Math.max(d,p,v)}if(o=N(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-d,a.length>1&&t.avoidOverlap){d*=1.75;var g=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(d*d/(g*g+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:u+a,y:l+s}})),this};var fo,po={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function vo(e){this.options=U({},po,e)}vo.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=ht(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,u=o.y1+o.h/2,l=[],c=0,d=0;d<a.length;d++){var h,f=a[d];h=t.concentric(f),l.push({value:h,node:f}),f._private.scratch.concentric=h}a.updateStyle();for(var p=0;p<a.length;p++){var v=a[p].layoutDimensions(t);c=Math.max(c,v.w,v.h)}l.sort((function(e,t){return t.value-e.value}));for(var g=t.levelWidth(a),y=[[]],m=y[0],b=0;b<l.length;b++){var x=l[b];if(m.length>0)Math.abs(m[0].value-x.value)>=g&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,k=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,k)}for(var _=0,C=0;C<y.length;C++){var S=y[C],P=void 0===t.sweep?2*Math.PI-2*Math.PI/S.length:t.sweep,D=S.dTheta=P/Math.max(1,S.length-1);if(S.length>1&&t.avoidOverlap){var T=Math.cos(D)-Math.cos(0),M=Math.sin(D)-Math.sin(0),B=Math.sqrt(w*w/(T*T+M*M));_=Math.max(B,_)}S.r=_,_+=w}if(t.equidistant){for(var N=0,I=0,O=0;O<y.length;O++){var z=y[O].r-I;N=Math.max(N,z)}I=0;for(var L=0;L<y.length;L++){var A=y[L];0===L&&(I=A.r),A.r=I,I+=N}}for(var j={},R=0;R<y.length;R++)for(var F=y[R],V=F.dTheta,q=F.r,Y=0;Y<F.length;Y++){var X=F[Y],W=t.startAngle+(n?1:-1)*V*Y,G={x:s+q*Math.cos(W),y:u+q*Math.sin(W)};j[X.node.id()]=G}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return j[t]})),this};var go={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function yo(e){this.options=U({},go,e),this.options.layout=this}yo.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),fo=!0===e.debug;var r=mo(t,n,e);fo&&undefined(r),e.randomize&&wo(r);var i=re(),a=function(){ko(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter)&&(_o(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=Eo(r,e,t);t.layoutPositions(n,e,i)}},u=0,l=!0;if(!0===e.animate){!function t(){for(var n=0;l&&n<e.refresh;)l=o(u),u++,n++;l?(re()-i>=e.animationThreshold&&a(),ne(t)):(Lo(r,e),s())}()}else{for(;l;)l=o(u),u++;Lo(r,e),s()}return this},yo.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},yo.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var mo=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=ht(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),u={},l=0;l<s.length;l++)for(var c=s[l],d=0;d<c.length;d++){u[c[d].id()]=l}for(l=0;l<o.nodeSize;l++){var h=(y=i[l]).layoutDimensions(n);(O={}).isLocked=y.locked(),O.id=y.data("id"),O.parentId=y.data("parent"),O.cmptId=u[y.id()],O.children=[],O.positionX=y.position("x"),O.positionY=y.position("y"),O.offsetX=0,O.offsetY=0,O.height=h.w,O.width=h.h,O.maxX=O.positionX+O.width/2,O.minX=O.positionX-O.width/2,O.maxY=O.positionY+O.height/2,O.minY=O.positionY-O.height/2,O.padLeft=parseFloat(y.style("padding")),O.padRight=parseFloat(y.style("padding")),O.padTop=parseFloat(y.style("padding")),O.padBottom=parseFloat(y.style("padding")),O.nodeRepulsion=T(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(O),o.idToIndex[O.id]=l}var f=[],p=0,v=-1,g=[];for(l=0;l<o.nodeSize;l++){var y,m=(y=o.layoutNodes[l]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(f[++v]=y.id,g.push(y.id))}for(o.graphSet.push(g);p<=v;){var b=f[p++],x=o.idToIndex[b],w=o.layoutNodes[x].children;if(w.length>0){o.graphSet.push(w);for(l=0;l<w.length;l++)f[++v]=w[l]}}for(l=0;l<o.graphSet.length;l++){var E=o.graphSet[l];for(d=0;d<E.length;d++){var k=o.idToIndex[E[d]];o.indexToGraph[k]=l}}for(l=0;l<o.edgeSize;l++){var _=r[l],C={};C.id=_.data("id"),C.sourceId=_.data("source"),C.targetId=_.data("target");var S=T(n.idealEdgeLength)?n.idealEdgeLength(_):n.idealEdgeLength,P=T(n.edgeElasticity)?n.edgeElasticity(_):n.edgeElasticity,D=o.idToIndex[C.sourceId],M=o.idToIndex[C.targetId];if(o.indexToGraph[D]!=o.indexToGraph[M]){for(var B=bo(C.sourceId,C.targetId,o),N=o.graphSet[B],I=0,O=o.layoutNodes[D];-1===N.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],I++;for(O=o.layoutNodes[M];-1===N.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],I++;S*=I*n.nestingFactor}C.idealLength=S,C.elasticity=P,o.layoutEdges.push(C)}return o},bo=function(e,t,n){var r=xo(e,t,0,n);return 2>r.count?0:r.graph},xo=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var u=a[s],l=i.idToIndex[u],c=i.layoutNodes[l].children;if(0!==c.length){var d=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==d.count){if(1!==d.count)return d;if(2===++o)break}}}return{count:o,graph:r}},wo=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},Eo=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,u=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+u*r.h}}return{x:o.positionX,y:o.positionY}}},ko=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=Eo(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},_o=function(e,t,n){Co(e,t),Mo(e),Bo(e,t),No(e),Io(e)},Co=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var u=e.layoutNodes[e.idToIndex[r[s]]];Po(o,u,e,t)}},So=function(e){return-e+2*e*Math.random()},Po=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY;0===i&&0===a&&(i=So(1),a=So(1));var o=Do(e,t,i,a);if(o>0)var s=(l=r.nodeOverlap*o)*i/(v=Math.sqrt(i*i+a*a)),u=l*a/v;else{var l,c=To(e,i,a),d=To(t,-1*i,-1*a),h=d.x-c.x,f=d.y-c.y,p=h*h+f*f,v=Math.sqrt(p);s=(l=(e.nodeRepulsion+t.nodeRepulsion)/p)*h/v,u=l*f/v}e.isLocked||(e.offsetX-=s,e.offsetY-=u),t.isLocked||(t.offsetX+=s,t.offsetY+=u)}},Do=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},To=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,u=a/o,l={};return 0===t&&0<n||0===t&&0>n?(l.x=r,l.y=i+a/2,l):0<t&&-1*u<=s&&s<=u?(l.x=r+o/2,l.y=i+o*n/2/t,l):0>t&&-1*u<=s&&s<=u?(l.x=r-o/2,l.y=i-o*n/2/t,l):0<n&&(s<=-1*u||s>=u)?(l.x=r+a*t/2/n,l.y=i+a/2,l):0>n&&(s<=-1*u||s>=u)?(l.x=r-a*t/2/n,l.y=i-a/2,l):l},Mo=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],u=s.positionX-a.positionX,l=s.positionY-a.positionY;if(0!==u||0!==l){var c=To(a,u,l),d=To(s,-1*u,-1*l),h=d.x-c.x,f=d.y-c.y,p=Math.sqrt(h*h+f*f),v=Math.pow(r.idealLength-p,2)/r.elasticity;if(0!==p)var g=v*h/p,y=v*f/p;else g=0,y=0;a.isLocked||(a.offsetX+=g,a.offsetY+=y),s.isLocked||(s.offsetX-=g,s.offsetY-=y)}}},Bo=function(e,t){if(0!==t.gravity)for(var n=0;n<e.graphSet.length;n++){var r=e.graphSet[n],i=r.length;if(0===n)var a=e.clientHeight/2,o=e.clientWidth/2;else{var s=e.layoutNodes[e.idToIndex[r[0]]],u=e.layoutNodes[e.idToIndex[s.parentId]];a=u.positionX,o=u.positionY}for(var l=0;l<i;l++){var c=e.layoutNodes[e.idToIndex[r[l]]];if(!c.isLocked){var d=a-c.positionX,h=o-c.positionY,f=Math.sqrt(d*d+h*h);if(f>1){var p=t.gravity*d/f,v=t.gravity*h/f;c.offsetX+=p,c.offsetY+=v}}}}},No=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],u=s.children;if(0<u.length&&!s.isLocked){for(var l=s.offsetX,c=s.offsetY,d=0;d<u.length;d++){var h=e.layoutNodes[e.idToIndex[u[d]]];h.offsetX+=l,h.offsetY+=c,n[++i]=u[d]}s.offsetX=0,s.offsetY=0}}},Io=function(e,t){for(var n=0;n<e.nodeSize;n++){0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(n=0;n<e.nodeSize;n++){if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Oo(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,zo(i,e)}}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Oo=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},zo=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Lo=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++){if(v=r[i]){v.x1=1/0,v.x2=-1/0,v.y1=1/0,v.y2=-1/0;for(var u=0;u<v.length;u++){var l=v[u];v.x1=Math.min(v.x1,l.positionX-l.width/2),v.x2=Math.max(v.x2,l.positionX+l.width/2),v.y1=Math.min(v.y1,l.positionY-l.height/2),v.y2=Math.max(v.y2,l.positionY+l.height/2)}v.w=v.x2-v.x1,v.h=v.y2-v.y1,s+=v.w*v.h}}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,d=0,h=0,f=0,p=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var v;if(v=r[i]){for(u=0;u<v.length;u++){(l=v[u]).isLocked||(l.positionX+=c-v.x1,l.positionY+=d-v.y1)}c+=v.w+t.componentSpacing,h+=v.w+t.componentSpacing,f=Math.max(f,v.h),h>p&&(d+=f+t.componentSpacing,c=0,h=0,f=0)}}},Ao={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function jo(e){this.options=U({},Ao,e)}jo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=ht(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),u=Math.round(s),l=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(u,l);Math.min(u,l)==u?u=e:l=e},d=function(e){if(null==e)return Math.max(u,l);Math.max(u,l)==u?u=e:l=e},h=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=h&&null!=f)u=h,l=f;else if(null!=h&&null==f)u=h,l=Math.ceil(o/u);else if(null==h&&null!=f)l=f,u=Math.ceil(o/l);else if(l*u>o){var p=c(),v=d();(p-1)*v>=o?c(p-1):(v-1)*p>=o&&d(v-1)}else for(;l*u<o;){var g=c(),y=d();(y+1)*g>=o?d(y+1):c(g+1)}var m=a.w/l,b=a.h/u;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var k=w.layoutDimensions(t),_=t.avoidOverlapPadding,C=k.w+_,S=k.h+_;m=Math.max(m,C),b=Math.max(b,S)}for(var P={},D=function(e,t){return!!P["c-"+e+"-"+t]},T=function(e,t){P["c-"+e+"-"+t]=!0},M=0,B=0,N=function(){++B>=l&&(B=0,M++)},I={},O=0;O<i.length;O++){var z=i[O],L=t.position(z);if(L&&(void 0!==L.row||void 0!==L.col)){var A={row:L.row,col:L.col};if(void 0===A.col)for(A.col=0;D(A.row,A.col);)A.col++;else if(void 0===A.row)for(A.row=0;D(A.row,A.col);)A.row++;I[z.id()]=A,T(A.row,A.col)}}i.layoutPositions(this,t,(function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=I[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;D(M,B);)N();n=B*m+m/2+a.x1,r=M*b+b/2+a.y1,T(M,B),N()}return{x:n,y:r}}))}return this};var Ro={ready:function(){},stop:function(){}};function Fo(e){this.options=U({},Ro,e)}Fo.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},Fo.prototype.stop=function(){return this};var Vo={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function qo(e){this.options=U({},Vo,e)}qo.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=T(e.positions);return t.layoutPositions(this,e,(function(t,r){var i=function(t){if(null==e.positions)return function(e){return{x:e.x,y:e.y}}(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}(t);return!t.locked()&&null!=i&&i})),this};var Yo={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Xo(e){this.options=U({},Yo,e)}Xo.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=ht(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});return n.nodes().layoutPositions(this,e,(function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}})),this};var Wo=[{name:"breadthfirst",impl:lo},{name:"circle",impl:ho},{name:"concentric",impl:vo},{name:"cose",impl:yo},{name:"grid",impl:jo},{name:"null",impl:Fo},{name:"preset",impl:qo},{name:"random",impl:Xo}];function Go(e){this.options=e,this.notifications=0}var Ho=function(){},Uo=function(){throw new Error("A headless instance can not render images")};Go.prototype={recalculateRenderedStyle:Ho,notify:function(){this.notifications++},init:Ho,isHeadless:function(){return!0},png:Uo,jpg:Uo};var Ko={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,u=i.x+n/2+o,l=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=u&&l<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],u=e[o+1];a.push(r(s,u,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){D(s)&&(s=e[s]),e[r]=U({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var u=a(i(this.points,n+2*s,r,o));return Ct(e,t,u)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:xe,roughCollide:xe,draw:Ee,spacing:we,gap:we}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var u=i(this.points,n,a,o),l=this.controlPoint,c=r(l[0],l[1],n,a,o);t.arrowShapeImpl(this.name)(e,u,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,u){var l=a(i(this.points,n+2*u,r,o)),c=a(i(this.pointsTee,n+2*u,r,o));return Ct(e,t,l)||Ct(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),u=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,u)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,u){var l=o,c=Math.pow(l.x-e,2)+Math.pow(l.y-t,2)<=Math.pow((n+2*u)*this.radius,2),d=a(i(this.points,n+2*u,r,o));return Ct(e,t,d)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e;return n[3]=n[3]-r,n[5]=n[5]-r,n},collide:function(e,t,n,r,o,s,u){var l=a(i(this.points,n+2*u,r,o)),c=a(i(this.crossLinePts(n,s),n+2*u,r,o));return Ct(e,t,l)||Ct(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),u=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,u)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},Zo={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),u=n.zoom();return[((e-i)/o-s.x)/u,((t-a)/o-s.y)/u]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=this.cy.window().getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i=r("padding-left"),a=r("padding-right"),o=r("padding-top"),s=r("padding-bottom"),u=r("border-left-width"),l=r("border-right-width"),c=r("border-top-width"),d=(r("border-bottom-width"),e.clientWidth),h=e.clientHeight,f=i+a,p=o+s,v=u+l,g=t.width/(d+v),y=d-f,m=h-p,b=t.left+i+u,x=t.top+o+c;return this.containerBB=[b,x,y,m,g]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,u=s.getCachedZSortedEles(),l=[],c=s.cy.zoom(),d=s.cy.hasCompoundNodes(),h=(r?24:8)/c,f=(r?8:2)/c,p=(r?8:2)/c,v=1/0;function g(e,t){if(e.isNode()){if(a)return;a=e,l.push(e)}if(e.isEdge()&&(null==t||t<v))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<l.length;n++)if(l[n].isEdge()){l[n]=e,i=e,v=null!=t?t:v;break}}else l.push(e),i=e,v=null!=t?t:v}function y(n){var r=n.outerWidth()+2*f,i=n.outerHeight()+2*f,a=r/2,u=i/2,l=n.position();if(l.x-a<=e&&e<=l.x+a&&l.y-u<=t&&t<=l.y+u&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,l.x,l.y))return g(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,u=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,f=u/2+h,p=f*f,v=2*f,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(wt(e,t,x[w],x[w+1],x[w+2],x[w+3],v)&&p>(r=_t(e,t,x[w],x[w+1],x[w+2],x[w+3])))return g(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5<a.allpts.length;w+=4)if(Et(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],v)&&p>(r=kt(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return g(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(u,c),k=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<k.length;w++){var _=k[w],C=s.arrowShapes[n.pstyle(_.name+"-arrow-shape").value],S=n.pstyle("width").pfValue;if(C.roughCollide(e,t,E,_.angle,{x:_.x,y:_.y},S,h)&&C.collide(e,t,E,_.angle,{x:_.x,y:_.y},S,h))return g(n),!0}d&&l.length>0&&(y(m),y(b))}function b(e,t,n){return Ie(e,t,n)}function x(n,r){var i,a=n._private,o=p;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],u=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&u){var l=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),d=b(a.rscratch,"labelAngle",r),h=n.pstyle(i+"text-margin-x").pfValue,f=n.pstyle(i+"text-margin-y").pfValue,v=s.x1-o-h,y=s.x2+o-h,m=s.y1-o-f,x=s.y2+o-f;if(d){var w=Math.cos(d),E=Math.sin(d),k=function(e,t){return{x:(e-=l)*w-(t-=c)*E+l,y:e*E+t*w+c}},_=k(v,m),C=k(v,x),S=k(y,m),P=k(y,x),D=[_.x+h,_.y+f,S.x+h,S.y+f,P.x+h,P.y+f,C.x+h,C.y+f];if(Ct(e,t,D))return g(n),!0}else if(mt(s,e,t))return g(n),!0}}n&&(u=u.interactive);for(var w=u.length-1;w>=0;w--){var E=u[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return l},getAllInBox:function(e,t,n,r){for(var i,a,o=this.getCachedZSortedEles().interactive,s=[],u=Math.min(e,n),l=Math.max(e,n),c=Math.min(t,r),d=Math.max(t,r),h=ht({x1:e=u,y1:t=c,x2:n=l,y2:r=d}),f=0;f<o.length;f++){var p=o[f];if(p.isNode()){var v=p,g=v.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});yt(h,g)&&!bt(g,h)&&s.push(v)}else{var y=p,m=y._private,b=m.rscratch;if(null!=b.startX&&null!=b.startY&&!mt(h,b.startX,b.startY))continue;if(null!=b.endX&&null!=b.endY&&!mt(h,b.endX,b.endY))continue;if("bezier"===b.edgeType||"multibezier"===b.edgeType||"self"===b.edgeType||"compound"===b.edgeType||"segments"===b.edgeType||"haystack"===b.edgeType){for(var x=m.rstyle.bezierPts||m.rstyle.linePts||m.rstyle.haystackPts,w=!0,E=0;E<x.length;E++)if(i=h,a=x[E],!mt(i,a.x,a.y)){w=!1;break}w&&s.push(y)}else"haystack"!==b.edgeType&&"straight"!==b.edgeType||s.push(y)}}return s}},$o={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,u="haystack"===s.edgeType,l="bezier"===s.edgeType,c="multibezier"===s.edgeType,d="segments"===s.edgeType,h="compound"===s.edgeType,f="self"===s.edgeType;if(u?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),v=s.midX,g=s.midY,d)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||h||f||l){var p=s.allpts;t=r-lt(p[0],p[2],p[4],.1),n=i-lt(p[1],p[3],p[5],.1)}else t=r-v,n=i-g;s.srcArrowAngle=rt(t,n);var v=s.midX,g=s.midY;if(u&&(v=(r+a)/2,g=(i+o)/2),t=a-r,n=o-i,d)if((p=s.allpts).length/2%2==0){var y=(m=p.length/2)-2;t=p[m]-p[y],n=p[m+1]-p[y+1]}else{y=(m=p.length/2-1)-2;var m,b=m+2;t=p[m]-p[y],n=p[m+1]-p[y+1]}else if(c||h||f){var x,w,E,k,p=s.allpts;if(s.ctrlpts.length/2%2==0){var _=(C=(S=p.length/2-1)+2)+2;x=lt(p[S],p[C],p[_],0),w=lt(p[S+1],p[C+1],p[_+1],0),E=lt(p[S],p[C],p[_],1e-4),k=lt(p[S+1],p[C+1],p[_+1],1e-4)}else{var C,S;_=(C=p.length/2-1)+2;x=lt(p[S=C-2],p[C],p[_],.4999),w=lt(p[S+1],p[C+1],p[_+1],.4999),E=lt(p[S],p[C],p[_],.5),k=lt(p[S+1],p[C+1],p[_+1],.5)}t=E-x,n=k-w}(s.midtgtArrowAngle=rt(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,d)&&((p=s.allpts).length/2%2==0||(t=-(p[b=(m=p.length/2-1)+2]-p[m]),n=-(p[b+1]-p[m+1])));if(s.midsrcArrowAngle=rt(t,n),d)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||h||f||l){var P=(p=s.allpts).length;t=a-lt(p[P-6],p[P-4],p[P-2],.9),n=o-lt(p[P-5],p[P-3],p[P-1],.9)}else t=a-v,n=o-g;s.tgtArrowAngle=rt(t,n)}};$o.getArrowWidth=$o.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var Qo={};function Jo(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}Qo.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,u=o.position(),l=s.position(),c=o.width(),d=s.width(),h=o.height(),f=s.height(),p=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*p+u.x,i.source.y*h*p+u.y,i.target.x*d*p+l.x,i.target.y*f*p+l.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},Qo.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("edge-distances").value,s=e.pstyle("segment-weights"),u=e.pstyle("segment-distances"),l=Math.min(s.pfValue.length,u.pfValue.length);n.edgeType="segments",n.segpts=[];for(var c=0;c<l;c++){var d=s.pfValue[c],h=u.pfValue[c],f=1-d,p=d,v="node-position"===o?r:i,g={x:v.x1*f+v.x2*p,y:v.y1*f+v.y2*p};n.segpts.push(g.x+a.x*h,g.y+a.y*h)}},Qo.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),u=s?s.pfValue[0]:void 0,l=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,d=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var h=n,f=d;r&&(h=0,f=u);var p=l-Math.PI/2,v=p-c/2,g=p+c/2,y=String(l+"_"+c);h=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(v)*f*(h/3+1),o.y+1.4*Math.sin(v)*f*(h/3+1),o.x+1.4*Math.cos(g)*f*(h/3+1),o.y+1.4*Math.sin(g)*f*(h/3+1)]},Qo.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,u=t.srcH,l=t.tgtW,c=t.tgtH,d=e.pstyle("control-point-step-size").pfValue,h=e.pstyle("control-point-distances"),f=h?h.pfValue[0]:void 0,p=n,v=d;r&&(p=0,v=f);var g={x:a.x-s/2,y:a.y-u/2},y={x:o.x-l/2,y:o.y-c/2},m={x:Math.min(g.x,y.x),y:Math.min(g.y,y.y)},b=Math.max(.5,Math.log(.01*s)),x=Math.max(.5,Math.log(.01*l));i.ctrlpts=[m.x,m.y-(1+Math.pow(50,1.12)/100)*v*(p/3+1)*b,m.x-(1+Math.pow(50,1.12)/100)*v*(p/3+1)*x,m.y]},Qo.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},Qo.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=t.vectorNormInverse,s=t.posPts,u=t.intersectionPts,l=e.pstyle("edge-distances").value,c=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),h=e.pstyle("control-point-weights"),f=d&&h?Math.min(d.value.length,h.value.length):1,p=d?d.pfValue[0]:void 0,v=h.value[0],g=r;a.edgeType=g?"multibezier":"bezier",a.ctrlpts=[];for(var y=0;y<f;y++){var m=(.5-t.eles.length/2+n)*c*(i?-1:1),b=void 0,x=at(m);g&&(p=d?d.pfValue[y]:c,v=h.value[y]);var w=void 0!==(b=r?p:void 0!==p?x*p:void 0)?b:m,E=1-v,k=v,_="node-position"===l?s:u,C={x:_.x1*E+_.x2*k,y:_.y1*E+_.y2*k};a.ctrlpts.push(C.x+o.x*w,C.y+o.y*w)}},Qo.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",u="upward",l=t.posPts,c=t.srcW,d=t.srcH,h=t.tgtW,f=t.tgtH,p="node-position"!==e.pstyle("edge-distances").value,v=e.pstyle("taxi-direction").value,g=v,y=e.pstyle("taxi-turn"),m="%"===y.units,b=y.pfValue,x=b<0,w=e.pstyle("taxi-turn-min-distance").pfValue,E=p?(c+h)/2:0,k=p?(d+f)/2:0,_=l.x2-l.x1,C=l.y2-l.y1,S=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},P=S(_,E),D=S(C,k),T=!1;"auto"===g?v=Math.abs(P)>Math.abs(D)?i:r:g===u||g===s?(v=r,T=!0):g!==a&&g!==o||(v=i,T=!0);var M,B=v===r,N=B?D:P,I=B?C:_,O=at(I),z=!1;(T&&(m||x)||!(g===s&&I<0||g===u&&I>0||g===a&&I>0||g===o&&I<0)||(N=(O*=-1)*Math.abs(N),z=!0),m)?M=(b<0?1+b:b)*N:M=(b<0?N:0)+b*O;var L=function(e){return Math.abs(e)<w||Math.abs(e)>=Math.abs(N)},A=L(M),j=L(Math.abs(N)-Math.abs(M));if((A||j)&&!z)if(B){var R=Math.abs(I)<=d/2,F=Math.abs(_)<=h/2;if(R){var V=(l.x1+l.x2)/2,q=l.y1,Y=l.y2;n.segpts=[V,q,V,Y]}else if(F){var X=(l.y1+l.y2)/2,W=l.x1,G=l.x2;n.segpts=[W,X,G,X]}else n.segpts=[l.x1,l.y2]}else{var H=Math.abs(I)<=c/2,U=Math.abs(C)<=f/2;if(H){var K=(l.y1+l.y2)/2,Z=l.x1,$=l.x2;n.segpts=[Z,K,$,K]}else if(U){var Q=(l.x1+l.x2)/2,J=l.y1,ee=l.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[l.x2,l.y1]}else if(B){var te=l.y1+M+(p?d/2*O:0),ne=l.x1,re=l.x2;n.segpts=[ne,te,re,te]}else{var ie=l.x1+M+(p?c/2*O:0),ae=l.y1,oe=l.y2;n.segpts=[ie,ae,ie,oe]}},Qo.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,u=t.tgtH,l=t.srcShape,c=t.tgtShape,d=!N(n.startX)||!N(n.startY),h=!N(n.arrowStartX)||!N(n.arrowStartY),f=!N(n.endX)||!N(n.endY),p=!N(n.arrowEndX)||!N(n.arrowEndY),v=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),g=ot({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=g<v,m=ot({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<v,x=!1;if(d||h||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),k={x:w.x/E,y:w.y/E},_=Math.max(a,o),C={x:n.ctrlpts[0]+2*k.x*_,y:n.ctrlpts[1]+2*k.y*_},S=l.intersectLine(r.x,r.y,a,o,C.x,C.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+k.x*(v-g),n.ctrlpts[1]=n.ctrlpts[1]+k.y*(v-g)):(n.ctrlpts[0]=S[0]+k.x*v,n.ctrlpts[1]=S[1]+k.y*v)}if(f||p||b){x=!0;var P={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},D=Math.sqrt(P.x*P.x+P.y*P.y),T={x:P.x/D,y:P.y/D},M=Math.max(a,o),B={x:n.ctrlpts[0]+2*T.x*M,y:n.ctrlpts[1]+2*T.y*M},I=c.intersectLine(i.x,i.y,s,u,B.x,B.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+T.x*(v-m),n.ctrlpts[1]=n.ctrlpts[1]+T.y*(v-m)):(n.ctrlpts[0]=I[0]+T.x*v,n.ctrlpts[1]=I[1]+T.y*v)}x&&this.findEndpoints(e)}},Qo.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,.5,t.midX=lt(t.allpts[r],t.allpts[r+2],t.allpts[r+4],.5),t.midY=lt(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],.5))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var i=t.segpts.length/2,a=i-2;t.midX=(t.segpts[a]+t.segpts[i])/2,t.midY=(t.segpts[a+1]+t.segpts[i+1])/2}else{var o=t.segpts.length/2-1;t.midX=t.segpts[o],t.midY=t.segpts[o+1]}},Qo.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||N(t.startX)&&N(t.startY)&&N(t.endX)&&N(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Ce("Edge `"+e.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))},Qo.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new ze,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new ze,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var u=e[s],l=u._private,c=u.pstyle("curve-style").value;if(!u.removed()&&u.takesUpSpace())if("haystack"!==c){var d="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,h="unbundled-bezier"===c||"bezier"===c,f=l.source,p=l.target,v=[f.poolIndex(),p.poolIndex()].sort(),g=i.get(v);null==g&&(g={eles:[]},i.set(v,g),a.push(v)),g.eles.push(u),d&&(g.hasUnbundled=!0),h&&(g.hasBezier=!0)}else o.push(u)}for(var y=function(e){var o=a[e],s=i.get(o),u=void 0;if(!s.hasUnbundled){var l=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Ne(s.eles),l.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],d=c.source(),h=c.target();if(d.poolIndex()>h.poolIndex()){var f=d;d=h,h=f}var p=s.srcPos=d.position(),v=s.tgtPos=h.position(),g=s.srcW=d.outerWidth(),y=s.srcH=d.outerHeight(),m=s.tgtW=h.outerWidth(),b=s.tgtH=h.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(d)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(h)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var k=s.eles[E],_=k[0]._private.rscratch,C=k.pstyle("curve-style").value,S="unbundled-bezier"===C||"segments"===C||"taxi"===C,P=!d.same(k.source());if(!s.calculatedIntersection&&d!==h&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var D=x.intersectLine(p.x,p.y,g,y,v.x,v.y,0),T=s.srcIntn=D,M=w.intersectLine(v.x,v.y,m,b,p.x,p.y,0),B=s.tgtIntn=M,I=s.intersectionPts={x1:D[0],x2:M[0],y1:D[1],y2:M[1]},O=s.posPts={x1:p.x,x2:v.x,y1:p.y,y2:v.y},z=M[1]-D[1],L=M[0]-D[0],A=Math.sqrt(L*L+z*z),j=s.vector={x:L,y:z},R=s.vectorNorm={x:j.x/A,y:j.y/A},F={x:-R.y,y:R.x};s.nodesOverlap=!N(A)||w.checkPoint(D[0],D[1],0,m,b,v.x,v.y)||x.checkPoint(M[0],M[1],0,g,y,p.x,p.y),s.vectorNormInverse=F,u={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:v,tgtPos:p,srcW:m,srcH:b,tgtW:g,tgtH:y,srcIntn:B,tgtIntn:T,srcShape:w,tgtShape:x,posPts:{x1:O.x2,y1:O.y2,x2:O.x1,y2:O.y1},intersectionPts:{x1:I.x2,y1:I.y2,x2:I.x1,y2:I.y1},vector:{x:-j.x,y:-j.y},vectorNorm:{x:-R.x,y:-R.y},vectorNormInverse:{x:-F.x,y:-F.y}}}var V=P?u:s;_.nodesOverlap=V.nodesOverlap,_.srcIntn=V.srcIntn,_.tgtIntn=V.tgtIntn,r&&(d.isParent()||d.isChild()||h.isParent()||h.isChild())&&(d.parents().anySame(h)||h.parents().anySame(d)||d.same(h)&&d.isParent())?t.findCompoundLoopPoints(k,V,E,S):d===h?t.findLoopPoints(k,V,E,S):"segments"===C?t.findSegmentsPoints(k,V):"taxi"===C?t.findTaxiPoints(k,V):"straight"===C||!S&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(k):t.findBezierPoints(k,V,E,S,P),t.findEndpoints(k),t.tryToCorrectInvalidPoints(k,V),t.checkForInvalidEdgeWarning(k),t.storeAllpts(k),t.storeEdgeProjections(k),t.calculateArrowAngles(k),t.recalculateEdgeLabelProjections(k),t.calculateLabelAngles(k)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},Qo.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),Jo(t.segpts)},Qo.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),Jo(t.ctrlpts)},Qo.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var es={manualEndptToPx:function(e,t){var n=e.position(),r=e.outerWidth(),i=e.outerHeight();if(2===t.value.length){var a=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(a[0]=a[0]*r),"%"===t.units[1]&&(a[1]=a[1]*i),a[0]+=n.x,a[1]+=n.y,a}var o=t.pfValue[0];o=-Math.PI/2+o;var s=2*Math.max(r,i),u=[n.x+Math.cos(o)*s,n.y+Math.sin(o)*s];return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x,n.y,r,i,u[0],u[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],u=e.target()[0],l=s.position(),c=u.position(),d=e.pstyle("target-arrow-shape").value,h=e.pstyle("source-arrow-shape").value,f=e.pstyle("target-distance-from-node").pfValue,p=e.pstyle("source-distance-from-node").pfValue,v=e.pstyle("curve-style").value,g=e._private.rscratch,y=g.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,k=b||x||w,_=m||"taxi"===v,C=e.pstyle("source-endpoint"),S=_?"outside-to-node":C.value,P=e.pstyle("target-endpoint"),D=_?"outside-to-node":P.value;if(g.srcManEndpt=C,g.tgtManEndpt=P,b){var T=[g.ctrlpts[0],g.ctrlpts[1]];n=x?[g.ctrlpts[g.ctrlpts.length-2],g.ctrlpts[g.ctrlpts.length-1]]:T,r=T}else if(w){var M=E?g.segpts.slice(0,2):[c.x,c.y];n=E?g.segpts.slice(g.segpts.length-2):[l.x,l.y],r=M}if("inside-to-node"===D)t=[c.x,c.y];else if(P.units)t=this.manualEndptToPx(u,P);else if("outside-to-line"===D)t=g.tgtIntn;else if("outside-to-node"===D||"outside-to-node-or-label"===D?i=n:"outside-to-line"!==D&&"outside-to-line-or-label"!==D||(i=[l.x,l.y]),t=o.nodeShapes[this.getNodeShape(u)].intersectLine(c.x,c.y,u.outerWidth(),u.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===D||"outside-to-line-or-label"===D){var B=u._private.rscratch,I=B.labelWidth,O=B.labelHeight,z=B.labelX,L=B.labelY,A=I/2,j=O/2,R=u.pstyle("text-valign").value;"top"===R?L-=j:"bottom"===R&&(L+=j);var F=u.pstyle("text-halign").value;"left"===F?z-=A:"right"===F&&(z+=A);var V=It(i[0],i[1],[z-A,L-j,z+A,L-j,z+A,L+j,z-A,L+j],c.x,c.y);if(V.length>0){var q=l,Y=st(q,nt(t)),X=st(q,nt(V)),W=Y;if(X<Y&&(t=V,W=X),V.length>2)st(q,{x:V[2],y:V[3]})<W&&(t=[V[2],V[3]])}}var G=Ot(t,n,o.arrowShapes[d].spacing(e)+f),H=Ot(t,n,o.arrowShapes[d].gap(e)+f);if(g.endX=H[0],g.endY=H[1],g.arrowEndX=G[0],g.arrowEndY=G[1],"inside-to-node"===S)t=[l.x,l.y];else if(C.units)t=this.manualEndptToPx(s,C);else if("outside-to-line"===S)t=g.srcIntn;else if("outside-to-node"===S||"outside-to-node-or-label"===S?a=r:"outside-to-line"!==S&&"outside-to-line-or-label"!==S||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(l.x,l.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0),"outside-to-node-or-label"===S||"outside-to-line-or-label"===S){var U=s._private.rscratch,K=U.labelWidth,Z=U.labelHeight,$=U.labelX,Q=U.labelY,J=K/2,ee=Z/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?$-=J:"right"===ne&&($+=J);var re=It(a[0],a[1],[$-J,Q-ee,$+J,Q-ee,$+J,Q+ee,$-J,Q+ee],l.x,l.y);if(re.length>0){var ie=c,ae=st(ie,nt(t)),oe=st(ie,nt(re)),se=ae;if(oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2)st(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var ue=Ot(t,r,o.arrowShapes[h].spacing(e)+p),le=Ot(t,r,o.arrowShapes[h].gap(e)+p);g.startX=le[0],g.startY=le[1],g.arrowStartX=ue[0],g.arrowStartY=ue[1],k&&(N(g.startX)&&N(g.startY)&&N(g.endX)&&N(g.endY)?g.badLine=!1:g.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},ts={};function ns(e,t,n){for(var r=function(e,t,n,r){return lt(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}ts.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ns(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},ts.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var rs={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!R(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),u=e.position(),l=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,d=i.rscratch,h=i.rstyle;switch(l){case"left":n=u.x-a/2-s;break;case"right":n=u.x+a/2+s;break;default:n=u.x}switch(c){case"top":r=u.y-o/2-s;break;case"bottom":r=u.y+o/2+s;break;default:r=u.y}d.labelX=n,d.labelY=r,h.labelX=n,h.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},is=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},as=function(e,t){var n=t.x-e.x,r=t.y-e.y;return is(n,r)};rs.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){Oe(n.rscratch,e,t,r),Oe(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=is(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var u=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},u={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:u,startDist:0,length:0,segments:[]})}var l=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function d(e,t,n,r,i){var a=ot(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var h=0;h<t.length;h++){var f=t[h],p=t[h-1];p&&(f.startDist=p.startDist+p.length),d(f,f.p0,l[h*c],0,i.bezierProjPcts[0]);for(var v=0;v<c-1;v++)d(f,l[h*c+v],l[h*c+v+1],i.bezierProjPcts[v],i.bezierProjPcts[v+1]);d(f,l[h*c+c-1],f.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},l=function(n){var i,s="source"===n;if(a[n]){var l=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,d=u(),h=0,f=0,p=0;p<d.length;p++){for(var v=d[s?p:d.length-1-p],g=0;g<v.segments.length;g++){var y=v.segments[s?g:v.segments.length-1-g],m=p===d.length-1&&g===v.segments.length-1;if(h=f,(f+=y.length)>=l||m){c={cp:v,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(l-h)/x.length,E=x.t1-x.t0,k=s?x.t0+E*w:x.t1-E*w;k=dt(0,k,1),t=ct(b.p0,b.p1,b.p2,k),i=function(e,t,n,r){var i=dt(0,r-.001,1),a=dt(0,r+.001,1),o=ct(e,t,n,i),s=ct(e,t,n,a);return as(o,s)}(b.p0,b.p1,b.p2,k);break;case"straight":case"segments":case"haystack":for(var _,C,S,P,D=0,T=r.allpts.length,M=0;M+3<T&&(s?(S={x:r.allpts[M],y:r.allpts[M+1]},P={x:r.allpts[M+2],y:r.allpts[M+3]}):(S={x:r.allpts[T-2-M],y:r.allpts[T-1-M]},P={x:r.allpts[T-4-M],y:r.allpts[T-3-M]}),C=D,!((D+=_=ot(S,P))>=l));M+=2);var B=(l-C)/_;B=dt(0,B,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=ot(e,t),s=i/o,u=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+u*r}}(S,P,B),i=as(S,P)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};l("source"),l("target"),this.applyLabelDimensions(e)}},rs.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},rs.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Ie(n.rscratch,"labelWrapCachedLines",t)||[],u="wrap"!==o?1:Math.max(s.length,1),l=i.height/u,c=l*a,d=i.width,h=i.height+(u-1)*(a-1)*l;Oe(n.rstyle,"labelWidth",t,d),Oe(n.rscratch,"labelWidth",t,d),Oe(n.rstyle,"labelHeight",t,h),Oe(n.rscratch,"labelHeight",t,h),Oe(n.rscratch,"labelLineHeight",t,c)},rs.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(Oe(n.rscratch,e,t,r),r):Ie(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var u=o("labelKey");if(null!=u&&o("labelWrapKey")===u)return o("labelWrapCachedText");for(var l=i.split("\n"),c=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,h=[],f=/[\s\u200b]+/,p=d?"":" ",v=0;v<l.length;v++){var g=l[v],y=this.calculateLabelDimensions(e,g).width;if(d){var m=g.split("").join("\u200b");g=m}if(y>c){for(var b=g.split(f),x="",w=0;w<b.length;w++){var E=b[w],k=0===x.length?E:x+p+E;this.calculateLabelDimensions(e,k).width<=c?x+=E+p:(x&&h.push(x),x=E+p)}x.match(/^[\s\u200b]+$/)||h.push(x)}else h.push(g)}o("labelWrapCachedLines",h),i=o("labelWrapCachedText",h.join("\n")),o("labelWrapKey",u)}else if("ellipsis"===s){var _=e.pstyle("text-max-width").pfValue,C="",S=!1;if(this.calculateLabelDimensions(e,i).width<_)return i;for(var P=0;P<i.length;P++){if(this.calculateLabelDimensions(e,C+i[P]+"\u2026").width>_)break;C+=i[P],P===i.length-1&&(S=!0)}return S||(C+="\u2026"),C}return i},rs.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},rs.calculateLabelDimensions=function(e,t){var n=he(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,u=e.pstyle("font-weight").strValue,l=this.labelCalcCanvas,c=this.labelCalcCanvasContext;if(!l){l=this.labelCalcCanvas=document.createElement("canvas"),c=this.labelCalcCanvasContext=l.getContext("2d");var d=l.style;d.position="absolute",d.left="-9999px",d.top="-9999px",d.zIndex="-1",d.visibility="hidden",d.pointerEvents="none"}c.font="".concat(a," ").concat(u," ").concat(o,"px ").concat(s);for(var h=0,f=0,p=t.split("\n"),v=0;v<p.length;v++){var g=p[v],y=c.measureText(g),m=Math.ceil(y.width),b=o;h=Math.max(m,h),f+=b}return h+=0,f+=0,r[n]={width:h,height:f}},rs.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},rs.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var os={},ss=!1;os.getNodeShape=function(e){var t=e.pstyle("shape").value;if("cutrectangle"===t&&(e.width()<28||e.height()<28))return ss||(Ce("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),ss=!0),"rectangle";if(e.isParent())return"rectangle"===t||"roundrectangle"===t||"round-rectangle"===t||"cutrectangle"===t||"cut-rectangle"===t||"barrel"===t?t:"rectangle";if("polygon"===t){var n=e.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return t};var us={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r],a=i._private,o=a.rstyle;o.clean=!1,o.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],u=s._private.rstyle;s.isNode()&&!u.cleanConnected&&(r(s.connectedEdges()),u.cleanConnected=!0)}if(a)for(var l=0;l<a.length;l++){(0,a[l])(i,t)}n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,u=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(u.clean=!1),t&&u.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),u.clean=!0)}for(var l=0;l<i.length;l++){var c=i[l],d=c._private.rstyle,h=c.position();this.recalculateNodeLabelProjection(c),d.nodeX=h.x,d.nodeY=h.y,d.nodeW=c.pstyle("width").pfValue,d.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var f=0;f<r.length;f++){var p=r[f]._private,v=p.rstyle,g=p.rscratch;v.srcX=g.arrowStartX,v.srcY=g.arrowStartY,v.tgtX=g.arrowEndX,v.tgtY=g.arrowEndY,v.midX=g.midX,v.midY=g.midY,v.labelAngle=g.labelAngle,v.sourceLabelAngle=g.sourceLabelAngle,v.targetLabelAngle=g.targetLabelAngle}}}},ls={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Ui),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},cs={};[Zo,$o,Qo,es,ts,rs,os,us,ls].forEach((function(e){U(cs,e)}));var ds={getCachedImage:function(e,t,n){var r=this.imageCache=this.imageCache||{},i=r[e];if(i)return i.image.complete||i.image.addEventListener("load",n),i.image;var a=(i=r[e]=r[e]||{}).image=new Image;a.addEventListener("load",n),a.addEventListener("error",(function(){a.error=!0}));var o="data:";return e.substring(0,o.length).toLowerCase()===o||(t="null"===t?null:t,a.crossOrigin=t),a.src=e,a}},hs={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)}};hs.binder=function(e){var t,n=this,r=n.cy.window(),i=e===r||e===r.document||e===r.document.body||(t=e,"undefined"!=typeof HTMLElement&&t instanceof HTMLElement);if(null==n.supportsPassiveEvents){var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){return a=!0,!0}});r.addEventListener("test",null,o)}catch(u){}n.supportsPassiveEvents=a}var s=function(t,r,a){var o=Array.prototype.slice.call(arguments);return i&&n.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),n.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:s,addEventListener:s,addListener:s,bind:s}},hs.nodeIsDraggable=function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},hs.nodeIsGrabbable=function(e){return this.nodeIsDraggable(e)&&e.interactive()},hs.load=function(){var e=this,t=e.cy.window(),n=function(e){return e.selected()},r=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},i=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable())for(var i=0;n&&i<n.length;i++){if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},o=function(e){e[0]._private.rscratch.inDragLayer=!0},s=function(e){e[0]._private.rscratch.isGrabTarget=!0},u=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),function(e){e[0]._private.grabbed=!0}(e))},c=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(o),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(o)),n.addToList&&t.forEach((function(e){u(e,n)})),function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(o),n.connectedEdges().forEach(o)),t.addToList&&u(n,t)}}(t,n),f(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},d=c,h=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){!function(e){e[0]._private.grabbed=!1}(e),function(e){e[0]._private.rscratch.inDragLayer=!1}(e),function(e){e[0]._private.rscratch.isGrabTarget=!1}(e)})),e.updateCachedGrabbedEles())},f=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(o),r.forEach(o)),t.addToList&&r.forEach((function(e){u(e,t)}))}}},p=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},v="undefined"!=typeof MutationObserver,g="undefined"!=typeof ResizeObserver;v?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++){if(r[i]===e.container){e.destroy();break}}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var y=l.default((function(){e.cy.resize()}),100);v&&(e.styleObserver=new MutationObserver(y),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(t,"resize",y),g&&(e.resizeObserver=new ResizeObserver(y),e.resizeObserver.observe(e.container));var m=function(){e.invalidateContainerClientCoordsCache()};!function(e,t){for(;null!=e;)t(e),e=e.parentNode}(e.container,(function(t){e.registerBinding(t,"transitionend",m),e.registerBinding(t,"animationend",m),e.registerBinding(t,"scroll",m)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var b,x,w,E=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],u=!1,l=0;l<s.length;l++){var c=s[l];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){u=!0;break}}if(!u)return!1;for(var d=e.container,h=t.target.parentNode,f=!1;h;){if(h===d){f=!0;break}h=h.parentNode}return!!f};e.registerBinding(e.container,"mousedown",(function(t){if(E(t)){t.preventDefault(),p(),e.hoverData.capture=!0,e.hoverData.which=t.which;var n=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,u=e.findNearestElements(a[0],a[1],!0,!1),l=u[0],h=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;if(3==t.which){e.hoverData.cxtStarted=!0;var f={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};l?(l.activate(),l.emit(f),e.hoverData.down=l):n.emit(f),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(l&&l.activate(),null!=l&&e.nodeIsGrabbable(l)){var v=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(s(l),l.selected()){h=e.dragData.possibleDragElements=n.collection();var g=n.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));c(g,{addToList:h}),l.emit(v("grabon")),g.forEach((function(e){e.emit(v("grab"))}))}else h=e.dragData.possibleDragElements=n.collection(),d(l,{addToList:h}),l.emit(v("grabon")).emit(v("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=l,e.hoverData.downs=u,e.hoverData.downTime=(new Date).getTime(),r(l,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==l?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):l.pannable()&&(o[4]=1),e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var r=e.hoverData.down;r?r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(t,"mousemove",(function(t){if(e.hoverData.capture||E(t)){var n=!1,o=e.cy,s=o.zoom(),u=[t.clientX,t.clientY],l=e.projectIntoViewport(u[0],u[1]),d=e.hoverData.mdownPos,f=e.hoverData.mdownGPos,p=e.selection,v=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(v=e.findNearestElement(l[0],l[1],!0,!1));var g,y=e.hoverData.last,m=e.hoverData.down,b=[l[0]-p[2],l[1]-p[3]],x=e.dragData.possibleDragElements;if(f){var w=u[0]-f[0],k=w*w,_=u[1]-f[1],C=k+_*_;e.hoverData.isOverThresholdDrag=g=C>=e.desktopTapThreshold2}var S=i(t);g&&(e.hoverData.tapholdCancelled=!0);n=!0,r(v,["mousemove","vmousemove","tapdrag"],t,{x:l[0],y:l[1]});var P=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:l[0],y:l[1]}}),p[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(g){var D={originalEvent:t,type:"cxtdrag",position:{x:l[0],y:l[1]}};m?m.emit(D):o.emit(D),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&v===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:l[0],y:l[1]}}),e.hoverData.cxtOver=v,v&&v.emit({originalEvent:t,type:"cxtdragover",position:{x:l[0],y:l[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var T;if(e.hoverData.justStartedPan){var M=e.hoverData.mdownPos;T={x:(l[0]-M[0])*s,y:(l[1]-M[1])*s},e.hoverData.justStartedPan=!1}else T={x:b[0]*s,y:b[1]*s};o.panBy(T),o.emit("dragpan"),e.hoverData.dragged=!0}l=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=p[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||v==y||(y&&r(y,["mouseout","tapdragout"],t,{x:l[0],y:l[1]}),v&&r(v,["mouseover","tapdragover"],t,{x:l[0],y:l[1]}),e.hoverData.last=v),m)if(g){if(o.boxSelectionEnabled()&&S)m&&m.grabbed()&&(h(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),P();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var B=!e.dragData.didDrag;B&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||c(x,{inDragLayer:!0});var I={x:0,y:0};if(N(b[0])&&N(b[1])&&(I.x+=b[0],I.y+=b[1],B)){var O=e.hoverData.dragDelta;O&&N(O[0])&&N(O[1])&&(I.x+=O[0],I.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(I).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])}();n=!0}else if(g){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!S&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,p[4]=0,e.data.bgActivePosistion=nt(d),e.redrawHint("select",!0),e.redraw())}}else P();m&&m.pannable()&&m.active()&&m.unactivate()}return p[2]=l[0],p[3]=l[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,u=e.findNearestElement(o[0],o[1],!0,!1),l=e.dragData.possibleDragElements,c=e.hoverData.down,d=i(t);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var f={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(f):a.emit(f),!e.hoverData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(u,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=a.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout((function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).unselect(["tapunselect"]),l.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=l=a.collection()),u!=c||e.dragData.didDrag||e.hoverData.selecting||null!=u&&u._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||d?u.selected()?u.unselect(["tapunselect"]):u.select(["tapselect"]):d||(a.$(n).unmerge(u).unselect(["tapunselect"]),u.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var v=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),v.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var g=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||d||a.$(n).unmerge(v).unselect(),v.emit("box").stdFilter(g).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();h(l),y&&(c.emit("freeon"),l.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),l.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var k,_,C,S,P,D,T,M,B,I,O,z,L,A=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var u=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(u=e.gestureStartZoom*t.scale),n.zoom({level:u,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",A,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||A(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var j,R,F,V,q,Y,X,W=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},G=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",j=function(t){if(e.hasTouchStarted=!0,E(t)){p(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=o[0],i[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=o[0],i[5]=o[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,h(e.dragData.touchDragEles);var u=e.findContainerClientCoords();B=u[0],I=u[1],O=u[2],z=u[3],k=t.touches[0].clientX-B,_=t.touches[0].clientY-I,C=t.touches[1].clientX-B,S=t.touches[1].clientY-I,L=0<=k&&k<=O&&0<=C&&C<=O&&0<=_&&_<=z&&0<=S&&S<=z;var l=n.pan(),f=n.zoom();P=W(k,_,C,S),D=G(k,_,C,S),M=[((T=[(k+C)/2,(_+S)/2])[0]-l.x)/f,(T[1]-l.y)/f];if(D<4e4&&!t.touches[2]){var v=e.findNearestElement(i[0],i[1],!0,!0),g=e.findNearestElement(i[2],i[3],!0,!0);return v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):g&&g.isNode()?(g.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=g):n.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var y=e.findNearestElements(i[0],i[1],!0,!0),m=y[0];if(null!=m&&(m.activate(),e.touchData.start=m,e.touchData.starts=y,e.nodeIsGrabbable(m))){var b=e.dragData.touchDragEles=n.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),c(x,{addToList:b})):d(m,{addToList:b}),s(m);var w=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(w("grabon")),x?x.forEach((function(e){e.emit(w("grab"))})):m.emit(w("grab"))}r(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var N=e.touchData.startPosition=[null,null,null,null,null,null],A=0;A<i.length;A++)N[A]=a[A]=i[A];var j=t.touches[0];e.touchData.startGPosition=[j.clientX,j.clientY]}}},!1),e.registerBinding(window,"touchmove",R=function(t){var n=e.touchData.capture;if(n||E(t)){var i=e.selection,o=e.cy,s=e.touchData.now,u=e.touchData.earlier,l=o.zoom();if(t.touches[0]){var d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=d[0],s[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=d[0],s[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=d[0],s[5]=d[1]}var f,p=e.touchData.startGPosition;if(n&&t.touches[0]&&p){for(var v=[],g=0;g<s.length;g++)v[g]=s[g]-u[g];var y=t.touches[0].clientX-p[0],m=y*y,b=t.touches[0].clientY-p[1];f=m+b*b>=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-B,w=t.touches[0].clientY-I,T=t.touches[1].clientX-B,O=t.touches[1].clientY-I,z=G(x,w,T,O);if(z/D>=2.25||z>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var A={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(A),e.touchData.start=null):o.emit(A)}}if(n&&e.touchData.cxt){A={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}};e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(A):o.emit(A),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var j=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&j===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=j,j&&j.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var R=0;R<ee.length;R++){var F=ee[R]._private;F.grabbed=!1,F.rscratch.inDragLayer=!1}}var V=e.touchData.start,q=(x=t.touches[0].clientX-B,w=t.touches[0].clientY-I,T=t.touches[1].clientX-B,O=t.touches[1].clientY-I,W(x,w,T,O)),Y=q/P;if(L){var X=(x-k+(T-C))/2,H=(w-_+(O-S))/2,U=o.zoom(),K=U*Y,Z=o.pan(),$=M[0]*U+Z.x,Q=M[1]*U+Z.y,J={x:-K/U*($-Z.x-X)+$,y:-K/U*(Q-Z.y-H)+Q};if(V&&V.active()){var ee=e.dragData.touchDragEles;h(ee),e.redrawHint("drag",!0),e.redrawHint("eles",!0),V.unactivate().emit("freeon"),ee.emit("free"),e.dragData.didDrag&&(V.emit("dragfreeon"),ee.emit("dragfree"))}o.viewport({zoom:K,pan:J,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),P=q,k=x,_=w,C=T,S=O,e.pinching=!0}if(t.touches[0]){d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=d[0],s[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=d[0],s[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=d[0],s[5]=d[1]}}else if(t.touches[0]&&!e.touchData.didSelect){var te=e.touchData.start,ne=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(j=e.findNearestElement(s[0],s[1],!0,!0)),n&&null!=te&&t.preventDefault(),n&&null!=te&&e.nodeIsDraggable(te))if(f){ee=e.dragData.touchDragEles;var re=!e.dragData.didDrag;re&&c(ee,{inDragLayer:!0}),e.dragData.didDrag=!0;var ie={x:0,y:0};if(N(v[0])&&N(v[1]))if(ie.x+=v[0],ie.y+=v[1],re)e.redrawHint("eles",!0),(ae=e.touchData.dragDelta)&&N(ae[0])&&N(ae[1])&&(ie.x+=ae[0],ie.y+=ae[1]);e.hoverData.draggingEles=!0,ee.silentShift(ie).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==u[0]&&e.touchData.startPosition[1]==u[1]&&e.redrawHint("eles",!0),e.redraw()}else{var ae;0===(ae=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(ae.push(v[0]),ae.push(v[1])):(ae[0]+=v[0],ae[1]+=v[1])}if(r(te||j,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),te&&te.grabbed()||j==ne||(ne&&ne.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),j&&j.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=j,n)for(R=0;R<s.length;R++)s[R]&&e.touchData.startPosition[R]&&f&&(e.touchData.singleTouchMoved=!0);if(n&&(null==te||te.pannable())&&o.panningEnabled()&&o.userPanningEnabled()){a(te,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=nt(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:v[0]*l,y:v[1]*l}),o.emit("dragpan")):f&&(e.swipePanning=!0,o.panBy({x:y*l,y:b*l}),o.emit("dragpan"),te&&(te.unactivate(),e.redrawHint("select",!0),e.touchData.start=null)));d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=d[0],s[1]=d[1]}}for(g=0;g<s.length;g++)u[g]=s[g];n&&t.touches.length>0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",F=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",V=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,u=s.zoom(),l=e.touchData.now,c=e.touchData.earlier;if(t.touches[0]){var d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);l[0]=d[0],l[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);l[2]=d[0],l[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);l[4]=d[0],l[5]=d[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:l[0],y:l[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var f={originalEvent:t,type:"cxttap",position:{x:l[0],y:l[1]}};i?i.emit(f):s.emit(f)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:t,position:{x:l[0],y:l[1]}});p.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var v=e.dragData.touchDragEles;if(null!=i){var g=i._private.grabbed;h(v),e.redrawHint("drag",!0),e.redrawHint("eles",!0),g&&(i.emit("freeon"),v.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),v.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(l[0],l[1],!0,!0);r(y,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]})}var m=e.touchData.startPosition[0]-l[0],b=m*m,x=e.touchData.startPosition[1]-l[1],w=(b+x*x)*u*u;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:l[0],y:l[1]}),q=!1,t.timeStamp-X<=s.multiClickDebounceTime()?(Y&&clearTimeout(Y),q=!0,X=null,r(i,["dbltap","vdblclick"],t,{x:l[0],y:l[1]})):(Y=setTimeout((function(){q||r(i,["onetap","voneclick"],t,{x:l[0],y:l[1]})}),s.multiClickDebounceTime()),X=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(n).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var E=0;E<l.length;E++)c[E]=l[E];e.dragData.didDrag=!1,0===t.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=[null,null,null,null,null,null],e.touchData.startGPosition=null,e.touchData.didSelect=!1),t.touches.length<2&&(1===t.touches.length&&(e.touchData.startGPosition=[t.touches[0].clientX,t.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var H=[],U=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},K=function(e){H.push(function(e){return{event:e,touch:U(e)}}(e))},Z=function(e){for(var t=0;t<H.length;t++){if(H[t].event.pointerId===e.pointerId)return void H.splice(t,1)}},$=function(e){e.touches=H.map((function(e){return e.touch}))},Q=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){Q(e)||(e.preventDefault(),K(e),$(e),j(e))})),e.registerBinding(e.container,"pointerup",(function(e){Q(e)||(Z(e),$(e),V(e))})),e.registerBinding(e.container,"pointercancel",(function(e){Q(e)||(Z(e),$(e),F())})),e.registerBinding(e.container,"pointermove",(function(e){Q(e)||(e.preventDefault(),function(e){var t=H.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=U(e)}(e),$(e),R(e))}))}};var fs={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return It(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return St(e,t,this.points,a,o,r,i,[0,-1],n)}}}};fs.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var u=Math.sqrt(o*o+s*s),l=u-1;if(l<0)return[];var c=l/u;return[(n-e)*c+e,(r-t)*c+t]}(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return Tt(e,t,r,i,a,o,n)}}},fs.generateRoundPolygon=function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],u=Math.sqrt(o*o+s*s);n[4*r+2]=o/u,n[4*r+3]=s/u}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o,s){for(var u,l=[],c=new Array(n.length),d=a/2,h=o/2,f=Rt(a,o),p=0;p<n.length/4;p++){var v,g=void 0;g=0===p?n.length-2:4*p-2,v=4*p+2;var y=r+d*n[4*p],m=i+h*n[4*p+1],b=-n[g]*n[v]-n[g+1]*n[v+1],x=f/Math.tan(Math.acos(b)/2),w=y-x*n[g],E=m-x*n[g+1],k=y+x*n[v],_=m+x*n[v+1];0===p?(c[n.length-2]=w,c[n.length-1]=E):(c[4*p-2]=w,c[4*p-1]=E),c[4*p]=k,c[4*p+1]=_;var C=n[g+1],S=-n[g];C*n[v]+S*n[v+1]<0&&(C*=-1,S*=-1),0!==(u=Mt(e,t,r,i,w+C*f,E+S*f,f)).length&&l.push(u[0],u[1])}for(var P=0;P<c.length/4;P++)0!==(u=Nt(e,t,r,i,c[4*P],c[4*P+1],c[4*P+2],c[4*P+3],!1)).length&&l.push(u[0],u[1]);if(l.length>2){for(var D=[l[0],l[1]],T=Math.pow(D[0]-e,2)+Math.pow(D[1]-t,2),M=1;M<l.length/2;M++){var B=Math.pow(l[2*M]-e,2)+Math.pow(l[2*M+1]-t,2);B<=T&&(D[0]=l[2*M],D[1]=l[2*M+1],T=B)}return D}return l}(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o){for(var s=new Array(n.length),u=a/2,l=o/2,c=Rt(a,o),d=c*c,h=0;h<n.length/4;h++){var f,p=void 0;p=0===h?n.length-2:4*h-2,f=4*h+2;var v=r+u*n[4*h],g=i+l*n[4*h+1],y=-n[p]*n[f]-n[p+1]*n[f+1],m=c/Math.tan(Math.acos(y)/2),b=v-m*n[p],x=g-m*n[p+1],w=v+m*n[f],E=g+m*n[f+1];s[4*h]=b,s[4*h+1]=x,s[4*h+2]=w,s[4*h+3]=E;var k=n[p+1],_=-n[p];k*n[f]+_*n[f+1]<0&&(k*=-1,_*=-1);var C=b+k*c,S=x+_*c;if(Math.pow(C-e,2)+Math.pow(S-t,2)<=d)return!0}return Ct(e,t,s)}(e,t,this.points,a,o,r,i)}}},fs.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return xt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=jt(r,i),u=2*s;return!!St(e,t,this.points,a,o,r,i-u,[0,-1],n)||(!!St(e,t,this.points,a,o,r-u,i,[0,-1],n)||(!!Tt(e,t,u,u,a-r/2+s,o-i/2+s,n)||(!!Tt(e,t,u,u,a+r/2-s,o-i/2+s,n)||(!!Tt(e,t,u,u,a+r/2-s,o+i/2-s,n)||!!Tt(e,t,u,u,a-r/2+s,o+i/2-s,n)))))}}},fs.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:8,points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,u=n+o,l=r-a,c=r+a;return{topLeft:[s,l+i,s+i,l,s+i,l+i],topRight:[u-i,l,u,l+i,u-i,l+i],bottomRight:[u,c-i,u-i,c,u-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),u=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return It(i,a,u,e,t)},checkPoint:function(e,t,n,r,i,a,o){if(St(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if(St(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Ct(e,t,s.topLeft)||Ct(e,t,s.topRight)||Ct(e,t,s.bottomRight)||Ct(e,t,s.bottomLeft)}}},fs.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),u=function(e){var t=ct({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.15),n=ct({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.5),r=ct({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.85);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},l=[].concat(u(s.topLeft),u(s.topRight),u(s.bottomRight),u(s.bottomLeft));return It(i,a,l,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,u=r-i,l=r+i,c=Ft(e,t),d=c.heightOffset,h=c.widthOffset,f=c.ctrlPtOffsetPct*e,p={topLeft:[o,u+d,o+f,u,o+h,u],topRight:[s-h,u,s-f,u,s,u+d],bottomRight:[s,l-d,s-f,l,s-h,l],bottomLeft:[o+h,l,o+f,l,o,l-d]};return p.topLeft.isTop=!0,p.topRight.isTop=!0,p.bottomLeft.isBottom=!0,p.bottomRight.isBottom=!0,p},checkPoint:function(e,t,n,r,i,a,o){var s=Ft(r,i),u=s.heightOffset,l=s.widthOffset;if(St(e,t,this.points,a,o,r,i-2*u,[0,-1],n))return!0;if(St(e,t,this.points,a,o,r-2*l,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),d=function(e,t,n){var r,i,a=n[4],o=n[2],s=n[0],u=n[5],l=n[1],c=Math.min(a,s),d=Math.max(a,s),h=Math.min(u,l),f=Math.max(u,l);if(c<=e&&e<=d&&h<=t&&t<=f){var p=[(r=a)-2*(i=o)+s,2*(i-r),r],v=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]}(p[0],p[1],p[2],e).filter((function(e){return 0<=e&&e<=1}));if(v.length>0)return v[0]}return null},h=Object.keys(c),f=0;f<h.length;f++){var p=c[h[f]],v=d(e,t,p);if(null!=v){var g=p[5],y=p[3],m=p[1],b=lt(g,y,m,v);if(p.isTop&&b<=t)return!0;if(p.isBottom&&t<=b)return!0}}return!1}}},fs.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),u=Nt(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return u.length>0?u:xt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=jt(r,i),u=2*s;if(St(e,t,this.points,a,o,r,i-u,[0,-1],n))return!0;if(St(e,t,this.points,a,o,r-u,i,[0,-1],n))return!0;var l=r/2+2*n,c=i/2+2*n;return!!Ct(e,t,[a-l,o-c,a-l,o,a+l,o,a+l,o-c])||(!!Tt(e,t,u,u,a+r/2-s,o+i/2-s,n)||!!Tt(e,t,u,u,a-r/2+s,o+i/2-s,n))}}},fs.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",zt(3,0)),this.generateRoundPolygon("round-triangle",zt(3,0)),this.generatePolygon("rectangle",zt(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",zt(5,0)),this.generateRoundPolygon("round-pentagon",zt(5,0)),this.generatePolygon("hexagon",zt(6,0)),this.generateRoundPolygon("round-hexagon",zt(6,0)),this.generatePolygon("heptagon",zt(7,0)),this.generateRoundPolygon("round-heptagon",zt(7,0)),this.generatePolygon("octagon",zt(8,0)),this.generateRoundPolygon("round-octagon",zt(8,0));var r=new Array(20),i=At(5,0),a=At(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=Lt(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var u=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",u),this.generateRoundPolygon("round-tag",u),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}};var ps={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||Te();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&ke("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},vs=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};ps.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;ne((function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){vs(e,!0,r);var i=re();e.render(e.renderOptions);var a=e.lastDrawTime=re();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else vs(e,!1,r);e.skipFrame=!1,ne(n)}}))}};var gs=function(e){this.init(e)},ys=gs.prototype;ys.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],ys.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container(),r=t.cy.window();if(r){var i=r.document,a=i.head,o="__________cytoscape_stylesheet",s="__________cytoscape_container",u=null!=i.getElementById(o);if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!u){var l=i.createElement("style");l.id=o,l.textContent="."+s+" { position: relative; }",a.insertBefore(l,a.children[0])}"static"===r.getComputedStyle(n).getPropertyValue("position")&&Ce("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=N(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},ys.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},ys.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},ys.isHeadless=function(){return!1},[Ko,cs,ds,hs,fs,ps].forEach((function(e){U(ys,e)}));var ms=1e3/60,bs=function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=l.default((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=e.priority||Ee;n.beforeRender((function(i,a){var o=re(),s=n.averageRedrawTime,u=n.lastRedrawTime,l=[],c=n.cy.extent(),d=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var h=re(),f=h-o,p=h-a;if(u<ms){var v=ms-(i?s:0);if(p>=e.deqFastCost*v)break}else if(i){if(f>=e.deqCost*u||f>=e.deqAvgCost*s)break}else if(p>=e.deqNoDrawCost*ms)break;var g=e.deq(t,d,c);if(!(g.length>0))break;for(var y=0;y<g.length;y++)l.push(g[y])}l.length>0&&(e.onDeqd(t,l),!i&&e.shouldRedraw(t,l,d,c)&&r())}),i(t))}}},xs=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:xe;v(this,e),this.idsByKey=new ze,this.keyForId=new ze,this.cachesByLvl=new ze,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return y(e,[{key:"getIdsFor",value:function(e){null==e&&ke("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ae,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new ze,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),ws={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Es=Me({getKey:null,doesEleInvalidateKey:xe,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:be,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),ks=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Es(t);U(n,r),n.lookup=new xs(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},_s=ks.prototype;_s.reasons=ws,_s.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},_s.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},_s.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new c.default((function(e,t){return t.reqs-e.reqs}))},_s.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},_s.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),u=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(it(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var l=Math.pow(2,r),c=t.h*l,d=t.w*l,h=o.eleTextBiggerThanMin(e,l);if(!this.isVisible(e,h))return null;var f,p=u.get(e,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(f=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||d>1024)return null;var v=a.getTextureQueue(f),g=v[v.length-2],y=function(){return a.recycleTexture(f,d)||a.addTexture(f,d)};g||(g=v[v.length-1]),g||(g=y()),g.width-g.usedWidth<d&&(g=y());for(var m,b=function(e){return e&&e.scaledLabelShown===h},x=i&&i===ws.dequeue,w=i&&i===ws.highQuality,E=i&&i===ws.downscale,k=r+1;k<=3;k++){var _=u.get(e,k);if(_){m=_;break}}var C=m&&m.level===r+1?m:null,S=function(){g.context.drawImage(C.texture.canvas,C.x,0,C.width,C.height,g.usedWidth,0,d,c)};if(g.context.setTransform(1,0,0,1,0,0),g.context.clearRect(g.usedWidth,0,d,f),b(C))S();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var P=m.level;P>r;P--)C=a.getElement(e,t,n,P,ws.downscale);S()}else{var D;if(!x&&!w&&!E)for(var T=r-1;T>=-4;T--){var M=u.get(e,T);if(M){D=M;break}}if(b(D))return a.queueElement(e,r),D;g.context.translate(g.usedWidth,0),g.context.scale(l,l),this.drawElement(g.context,e,t,h,!1),g.context.scale(1/l,1/l),g.context.translate(-g.usedWidth,0)}return p={x:g.usedWidth,texture:g,level:r,scale:l,width:d,height:c,scaledLabelShown:h},g.usedWidth+=Math.ceil(d+8),g.eleCaches.push(p),u.set(e,r,p),a.checkTextureFullness(g),p},_s.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},_s.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=-4;i<=3;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],u=s.texture;u.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(u)}t.removeFromQueue(e)}},_s.checkTextureUtility=function(e){e.invalidatedWidth>=.2*e.width&&this.retireTexture(e)},_s.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?Be(t,e):e.fullnessChecks++},_s.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;Be(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a<i.length;a++){var o=i[a];r.deleteCache(o.key,o.level)}Ne(i),this.getRetiredTextureQueue(t).push(e)},_s.addTexture=function(e,t){var n={};return this.getTextureQueue(e).push(n),n.eleCaches=[],n.height=e,n.width=Math.max(1024,t),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=this.renderer.makeOffscreenCanvas(n.width,n.height),n.context=n.canvas.getContext("2d"),n},_s.recycleTexture=function(e,t){for(var n=this.getTextureQueue(e),r=this.getRetiredTextureQueue(e),i=0;i<r.length;i++){var a=r[i];if(a.width>=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,Ne(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),Be(r,a),n.push(a),a}},_s.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},_s.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),u=s.key,l=s.eles[0],c=a.hasCache(l,s.level);if(r[u]=null,!c){i.push(s);var d=t.getBoundingBox(l);t.getElement(l,d,e,s.level,ws.dequeue)}}return i},_s.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=me,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},_s.onDequeue=function(e){this.onDequeues.push(e)},_s.offDequeue=function(e){Be(this.onDequeues,e)},_s.setupDequeueing=bs({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++){(0,e.onDequeues[n])(t)}},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(yt(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var Cs=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=re()-500,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=l.default((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),50),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=250?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);t.layersQueue=new c.default((function(e,t){return t.reqs-e.reqs})),t.setupDequeueing()},Ss=Cs.prototype,Ps=0,Ds=Math.pow(2,53)-1;Ss.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:Ps=++Ps%Ds,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,u=-o.bb.x1,l=-o.bb.y1;return s.scale(n,n),s.translate(u,l),o},Ss.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(it(i*t)))<-4)n=-4;else if(i>=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,u=r.layersByLevel,l=Math.pow(2,n),c=u[n]=u[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=u[t],!0},i=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Be(c,o)}}();var d=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=ht();for(var t=0;t<e.length;t++)n=o,r=e[t].boundingBox(),n.x1=Math.min(n.x1,r.x1),n.x2=Math.max(n.x2,r.x2),n.w=n.x2-n.x1,n.y1=Math.min(n.y1,r.y1),n.y2=Math.max(n.y2,r.y2),n.h=n.y2-n.y1}var n,r}(),o.w*l*(o.h*l)>16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=c.indexOf(i)+1;c.splice(s,0,a)}else(void 0===t.insert||t.insert)&&c.unshift(a);return a};if(r.skipping&&!a)return null;for(var h=null,f=e.length/1,p=!a,v=0;v<e.length;v++){var g=e[v],y=g._private.rscratch,m=y.imgLayerCaches=y.imgLayerCaches||{},b=m[n];if(b)h=b;else{if((!h||h.eles.length>=f||!bt(h.bb,g.boundingBox()))&&!(h=d({insert:!0,after:h})))return null;s||p?r.queueLayer(h,g):r.drawEleInLayer(h,g,n,t),h.eles.push(g),m[n]=h}}return s||(p?null:c)},Ss.getEleLevelForLayerLevel=function(e,t){return e},Ss.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},Ss.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},Ss.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},Ss.updateElementsInLayers=function(e,t){for(var n=z(e[0]),r=0;r<e.length;r++)for(var i=n?null:e[r],a=n?e[r]:e[r].ele,o=a._private.rscratch,s=o.imgLayerCaches=o.imgLayerCaches||{},u=-4;u<=2;u++){var l=s[u];l&&(i&&this.getEleLevelForLayerLevel(l.level)!==i.level||t(l,a,i))}},Ss.haveLayers=function(){for(var e=!1,t=-4;t<=2;t++){var n=this.layersByLevel[t];if(n&&n.length>0){e=!0;break}}return e},Ss.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=re(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Ss.invalidateLayer=function(e){if(this.lastInvalidationTime=re(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Be(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},Ss.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},Ss.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},Ss.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},Ss.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<1&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},Ss.applyLayerReplacement=function(e){var t=this.layersByLevel[e.level],n=e.replaces,r=t.indexOf(n);if(!(r<0||n.invalid)){t[r]=e;for(var i=0;i<e.eles.length;i++){var a=e.eles[i]._private,o=a.imgLayerCaches=a.imgLayerCaches||{};o&&(o[e.level]=e)}this.requestRedraw()}},Ss.requestRedraw=l.default((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),Ss.setupDequeueing=bs({deqRedrawThreshold:50,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t){return e.dequeue(t)},onDeqd:Ee,shouldRedraw:be,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var Ts,Ms={};function Bs(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function Ns(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function Is(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];e.moveTo(s.x,s.y);for(i=1;i<o.length;i++){a=o[i];e.lineTo(a.x,a.y)}e.closePath&&e.closePath()}function Os(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var u=a[s];e.lineTo(u.x,u.y)}e.closePath&&e.closePath()}function zs(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}Ms.arrowShapeImpl=function(e){return(Ts||(Ts={polygon:Bs,"triangle-backcurve":Ns,"triangle-tee":Is,"circle-triangle":Os,"triangle-cross":Is,circle:zs}))[e]};var Ls={drawElement:function(e,t,n,r,i,a){t.isNode()?this.drawNode(e,t,n,r,i,a):this.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){t.isNode()?this.drawNodeOverlay(e,t):this.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){t.isNode()?this.drawNodeUnderlay(e,t):this.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var u=this,l=n.getBoundingBox(t);if(0!==l.w&&0!==l.h){var c=n.getElement(t,l,r,i,a);if(null!=c){var d=s(u,t);if(0===d)return;var h,f,p,v,g,y,m=o(u,t),b=l.x1,x=l.y1,w=l.w,E=l.h;if(0!==m){var k=n.getRotationPoint(t);p=k.x,v=k.y,e.translate(p,v),e.rotate(m),(g=u.getImgSmoothing(e))||u.setImgSmoothing(e,!0);var _=n.getRotationOffset(t);h=_.x,f=_.y}else h=b,f=x;1!==d&&(y=e.globalAlpha,e.globalAlpha=y*d),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,h,f,w,E),1!==d&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-p,-v),g||u.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},As=function(){return 0},js=function(e,t){return e.getTextAngle(t,null)},Rs=function(e,t){return e.getTextAngle(t,"source")},Fs=function(e,t){return e.getTextAngle(t,"target")},Vs=function(e,t){return t.effectiveOpacity()},qs=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};Ls.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,u=s.eleTxrCache,l=s.lblTxrCache,c=s.slbTxrCache,d=s.tlbTxrCache,h=t.boundingBox(),f=!0===a?u.reasons.highQuality:null;if(0!==h.w&&0!==h.h&&t.visible()&&(!r||yt(h,r))){var p=t.isEdge(),v=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,u,n,i,f,As,Vs),p&&v||o.drawCachedElementPortion(e,t,l,n,i,f,js,qs),p&&!v&&(o.drawCachedElementPortion(e,t,c,n,i,f,Rs,qs),o.drawCachedElementPortion(e,t,d,n,i,f,Fs,qs)),o.drawElementOverlay(e,t)}},Ls.drawElements=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];this.drawElement(e,r)}},Ls.drawCachedElements=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];this.drawCachedElement(e,a,n,r)}},Ls.drawCachedNodes=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];a.isNode()&&this.drawCachedElement(e,a,n,r)}},Ls.drawLayeredElements=function(e,t,n,r){var i=this.data.lyrTxrCache.getLayers(t,n);if(i)for(var a=0;a<i.length;a++){var o=i[a],s=o.bb;0!==s.w&&0!==s.h&&e.drawImage(o.canvas,s.x1,s.y1,s.w,s.h)}else this.drawCachedElements(e,t,n,r)};var Ys={drawEdge:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var u;n&&(u=n,e.translate(-u.x1,-u.y1));var l=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,d=t.pstyle("curve-style").value,h=t.pstyle("line-style").value,f=t.pstyle("width").pfValue,p=t.pstyle("line-cap").value,v=l*c,g=l*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;"straight-triangle"===d?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=f,e.lineCap=p,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")},m=function(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};e.lineJoin="round";var E="yes"===t.pstyle("ghost").value;if(E){var k=t.pstyle("ghost-offset-x").pfValue,_=t.pstyle("ghost-offset-y").pfValue,C=t.pstyle("ghost-opacity").value,S=v*C;e.translate(k,_),y(S),x(S),e.translate(-k,-_)}b(),y(),x(),m(),w(),n&&e.translate(u.x1,u.y1)}}},Xs=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,u=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,u[0],u[1],u[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};Ys.drawEdgeOverlay=Xs("overlay"),Ys.drawEdgeUnderlay=Xs("underlay"),Ys.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,u=this.usePaths(),l=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(u){var d=n.join("$");a.pathCacheKey&&a.pathCacheKey===d?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=d,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(l),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+3<n.length;h+=4)t.quadraticCurveTo(n[h],n[h+1],n[h+2],n[h+3]);break;case"straight":case"segments":case"haystack":for(var f=2;f+1<n.length;f+=2)t.lineTo(n[f],n[f+1])}t=o,u?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},Ys.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],u=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-u[0],n[i+1]-u[1]),t.lineTo(n[i]+u[0],n[i+1]+u[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},Ys.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},Ys.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,u=t.pstyle(n+"-arrow-shape").value;if("none"!==u){var l="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,d=t.pstyle("width").pfValue,h=t.pstyle("opacity").value;void 0===o&&(o=h);var f=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,l,d,u,r,i,a),e.globalCompositeOperation=f);var p=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,p[0],p[1],p[2],o),s.colorStrokeStyle(e,p[0],p[1],p[2],o),s.drawArrowShape(t,e,c,d,u,r,i,a)}}},Ys.drawArrowShape=function(e,t,n,r,i,a,o,s){var u,l=this,c=this.usePaths()&&"triangle-cross"!==i,d=!1,h=t,f={x:a,y:o},p=e.pstyle("arrow-scale").value,v=this.getArrowWidth(r,p),g=l.arrowShapes[i];if(c){var y=l.arrowPathCache=l.arrowPathCache||[],m=he(i),b=y[m];null!=b?(u=t=b,d=!0):(u=t=new Path2D,y[m]=u)}d||(t.beginPath&&t.beginPath(),c?g.draw(t,1,0,{x:0,y:0},1):g.draw(t,v,s,f,r),t.closePath&&t.closePath()),t=h,c&&(t.translate(a,o),t.rotate(s),t.scale(v,v)),"filled"!==n&&"both"!==n||(c?t.fill(u):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=(g.matchEdgeWidth?r:1)/(c?v:1),t.lineJoin="miter",c?t.stroke(u):t.stroke()),c&&(t.scale(1/v,1/v),t.rotate(-s),t.translate(-a,-o))};var Ws={safeDrawImage:function(e,t,n,r,i,a,o,s,u,l){if(!(i<=0||a<=0||u<=0||l<=0))try{e.drawImage(t,n,r,i,a,o,s,u,l)}catch(c){Ce(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,u=o.y,l=n.cy().style(),c=l.getIndexedStyle.bind(l),d=c(n,"background-fit","value",r),h=c(n,"background-repeat","value",r),f=n.width(),p=n.height(),v=2*n.padding(),g=f+("inner"===c(n,"background-width-relative-to","value",r)?0:v),y=p+("inner"===c(n,"background-height-relative-to","value",r)?0:v),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,k=t.height||t.cachedH;null!=E&&null!=k||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,k=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var _=E,C=k;if("auto"!==c(n,"background-width","value",r)&&(_="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*g:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(C="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==_&&0!==C){if("contain"===d)_*=S=Math.min(g/_,y/C),C*=S;else if("cover"===d){var S;_*=S=Math.max(g/_,y/C),C*=S}var P=s-g/2,D=c(n,"background-position-x","units",r),T=c(n,"background-position-x","pfValue",r);P+="%"===D?(g-_)*T:T;var M=c(n,"background-offset-x","units",r),B=c(n,"background-offset-x","pfValue",r);P+="%"===M?(g-_)*B:B;var N=u-y/2,I=c(n,"background-position-y","units",r),O=c(n,"background-position-y","pfValue",r);N+="%"===I?(y-C)*O:O;var z=c(n,"background-offset-y","units",r),L=c(n,"background-offset-y","pfValue",r);N+="%"===z?(y-C)*L:L,m.pathCache&&(P-=s,N-=u,s=0,u=0);var A=e.globalAlpha;e.globalAlpha=x;var j=a.getImgSmoothing(e),R=!1;if("no"===w&&j?(a.setImgSmoothing(e,!1),R=!0):"yes"!==w||j||(a.setImgSmoothing(e,!0),R=!0),"no-repeat"===h)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,u,g,y),e.clip())),a.safeDrawImage(e,t,0,0,E,k,P,N,_,C),b&&e.restore();else{var F=e.createPattern(t,h);e.fillStyle=F,a.nodeShapes[a.getNodeShape(n)].draw(e,s,u,g,y),e.translate(P,N),e.fill(),e.translate(-P,-N)}e.globalAlpha=A,R&&a.setImgSmoothing(e,j)}}},Gs={};function Hs(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}Gs.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(it(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Gs.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var u=o.getLabelJustification(t);e.textAlign=u,e.textBaseline="bottom"}else{var l=t.element()._private.rscratch.badLine,c=t.pstyle("label"),d=t.pstyle("source-label"),h=t.pstyle("target-label");if(l||(!c||!c.value)&&(!d||!d.value)&&(!h||!h.value))return;e.textAlign="center",e.textBaseline="bottom"}var f,p=!n;n&&(f=n,e.translate(-f.x1,-f.y1)),null==i?(o.drawText(e,t,null,p,a),t.isEdge()&&(o.drawText(e,t,"source",p,a),o.drawText(e,t,"target",p,a))):o.drawText(e,t,i,p,a),n&&e.translate(f.x1,f.y1)},Gs.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Gs.setupTextStyle=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,u=t.pstyle("text-outline-opacity").value*s,l=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,l[0],l[1],l[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],u)},Gs.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ie(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Gs.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private,o=a.rscratch,s=i?t.effectiveOpacity():1;if(!i||0!==s&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var u,l,c=Ie(o,"labelX",n),d=Ie(o,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(c)&&!isNaN(d)){this.setupTextStyle(e,t,i);var f,p=n?n+"-":"",v=Ie(o,"labelWidth",n),g=Ie(o,"labelHeight",n),y=t.pstyle(p+"text-margin-x").pfValue,m=t.pstyle(p+"text-margin-y").pfValue,b=t.isEdge(),x=t.pstyle("text-halign").value,w=t.pstyle("text-valign").value;switch(b&&(x="center",w="center"),c+=y,d+=m,0!==(f=r?this.getTextAngle(t,n):0)&&(u=c,l=d,e.translate(u,l),e.rotate(f),c=0,d=0),w){case"top":break;case"center":d+=g/2;break;case"bottom":d+=g}var E=t.pstyle("text-background-opacity").value,k=t.pstyle("text-border-opacity").value,_=t.pstyle("text-border-width").pfValue,C=t.pstyle("text-background-padding").pfValue;if(E>0||_>0&&k>0){var S=c-C;switch(x){case"left":S-=v;break;case"center":S-=v/2}var P=d-g-C,D=v+2*C,T=g+2*C;if(E>0){var M=e.fillStyle,B=t.pstyle("text-background-color").value;e.fillStyle="rgba("+B[0]+","+B[1]+","+B[2]+","+E*s+")";var N=t.pstyle("text-background-shape").strValue;0===N.indexOf("round")?Hs(e,S,P,D,T,2):e.fillRect(S,P,D,T),e.fillStyle=M}if(_>0&&k>0){var I=e.strokeStyle,O=e.lineWidth,z=t.pstyle("text-border-color").value,L=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+z[0]+","+z[1]+","+z[2]+","+k*s+")",e.lineWidth=_,e.setLineDash)switch(L){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=_/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(S,P,D,T),"double"===L){var A=_/2;e.strokeRect(S+A,P+A,D-2*A,T-2*A)}e.setLineDash&&e.setLineDash([]),e.lineWidth=O,e.strokeStyle=I}}var j=2*t.pstyle("text-outline-width").pfValue;if(j>0&&(e.lineWidth=j),"wrap"===t.pstyle("text-wrap").value){var R=Ie(o,"labelWrapCachedLines",n),F=Ie(o,"labelLineHeight",n),V=v/2,q=this.getLabelJustification(t);switch("auto"===q||("left"===x?"left"===q?c+=-v:"center"===q&&(c+=-V):"center"===x?"left"===q?c+=-V:"right"===q&&(c+=V):"right"===x&&("center"===q?c+=V:"right"===q&&(c+=v))),w){case"top":case"center":case"bottom":d-=(R.length-1)*F}for(var Y=0;Y<R.length;Y++)j>0&&e.strokeText(R[Y],c,d),e.fillText(R[Y],c,d),d+=F}else j>0&&e.strokeText(h,c,d),e.fillText(h,c,d);0!==f&&(e.rotate(-f),e.translate(-u,-l))}}};var Us={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=this,l=t._private,c=l.rscratch,d=t.position();if(N(d.x)&&N(d.y)&&(!s||t.visible())){var h,f,p=s?t.effectiveOpacity():1,v=u.usePaths(),g=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(f=n,e.translate(-f.x1,-f.y1));for(var m=t.pstyle("background-image"),b=m.value,x=new Array(b.length),w=new Array(b.length),E=0,k=0;k<b.length;k++){var _=b[k],C=x[k]=null!=_&&"none"!==_;if(C){var S=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",k);E++,w[k]=u.getCachedImage(_,S,(function(){l.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var P=t.pstyle("background-blacken").value,D=t.pstyle("border-width").pfValue,T=t.pstyle("background-opacity").value*p,M=t.pstyle("border-color").value,B=t.pstyle("border-style").value,I=t.pstyle("border-opacity").value*p;e.lineJoin="miter";var O=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:T;u.eleFillStyle(e,t,n)},z=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:I;u.colorStrokeStyle(e,M[0],M[1],M[2],t)},L=t.pstyle("shape").strValue,A=t.pstyle("shape-polygon-points").pfValue;if(v){e.translate(d.x,d.y);var j=u.nodePathCache=u.nodePathCache||[],R=fe("polygon"===L?L+","+A.join(","):L,""+i,""+r),F=j[R];null!=F?(h=F,g=!0,c.pathCache=h):(h=new Path2D,j[R]=c.pathCache=h)}var V=function(){if(!g){var n=d;v&&(n={x:0,y:0}),u.nodeShapes[u.getNodeShape(t)].draw(h||e,n.x,n.y,r,i)}v?e.fill(h):e.fill()},q=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=l.backgrounding,a=0,o=0;o<w.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:x[o]&&w[o].complete&&!w[o].error&&(a++,u.drawInscribedImage(e,w[o],t,o,n))}l.backgrounding=!(a===E),i!==l.backgrounding&&t.updateStyle(!1)},Y=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;u.hasPie(t)&&(u.drawPie(e,t,a),n&&(v||u.nodeShapes[u.getNodeShape(t)].draw(e,d.x,d.y,r,i)))},X=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,n=(P>0?P:-P)*t,r=P>0?0:255;0!==P&&(u.colorFillStyle(e,r,r,r,n),v?e.fill(h):e.fill())},W=function(){if(D>0){if(e.lineWidth=D,e.lineCap="butt",e.setLineDash)switch(B){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(v?e.stroke(h):e.stroke(),"double"===B){e.lineWidth=D/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",v?e.stroke(h):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},G=function(){o&&u.drawNodeOverlay(e,t,d,r,i)},H=function(){o&&u.drawNodeUnderlay(e,t,d,r,i)},U=function(){u.drawElementText(e,t,null,a)},K="yes"===t.pstyle("ghost").value;if(K){var Z=t.pstyle("ghost-offset-x").pfValue,$=t.pstyle("ghost-offset-y").pfValue,Q=t.pstyle("ghost-opacity").value,J=Q*p;e.translate(Z,$),O(Q*T),V(),q(J,!0),z(Q*I),W(),Y(0!==P||0!==D),q(J,!1),X(J),e.translate(-Z,-$)}v&&e.translate(-d.x,-d.y),H(),v&&e.translate(d.x,d.y),O(),V(),q(p,!0),z(),W(),Y(0!==P||0!==D),q(p,!1),X(),v&&e.translate(-d.x,-d.y),U(),G(),n&&e.translate(f.x1,f.y1)}}},Ks=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){if(n.visible()){var o=n.pstyle("".concat(e,"-padding")).pfValue,s=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,l=n.pstyle("".concat(e,"-shape")).value;if(s>0){if(r=r||n.position(),null==i||null==a){var c=n.padding();i=n.width()+2*c,a=n.height()+2*c}this.colorFillStyle(t,u[0],u[1],u[2],s),this.nodeShapes[l].draw(t,r.x,r.y,i+2*o,a+2*o),t.fill()}}}};Us.drawNodeOverlay=Ks("overlay"),Us.drawNodeUnderlay=Ks("underlay"),Us.hasPie=function(e){return(e=e[0])._private.hasPie},Us.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,u=t.width(),l=t.height(),c=Math.min(u,l)/2,d=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var h=1;h<=i.pieBackgroundN;h++){var f=t.pstyle("pie-"+h+"-background-size").value,p=t.pstyle("pie-"+h+"-background-color").value,v=t.pstyle("pie-"+h+"-background-opacity").value*n,g=f/100;g+d>1&&(g=1-d);var y=1.5*Math.PI+2*Math.PI*d,m=y+2*Math.PI*g;0===f||d>=1||d+g>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,p[0],p[1],p[2],v),e.fill(),d+=g)}};var Zs={};Zs.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},Zs.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},Zs.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,u=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var l=n.sourceEndpoint(),c=n.targetEndpoint(),d=n.midpoint(),h=ot(l,d),f=ot(c,d);a=e.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(h,f))}else{var p=o?{x:0,y:0}:n.position(),v=n.paddedWidth(),g=n.paddedHeight();a=e.createRadialGradient(p.x,p.y,0,p.x,p.y,Math.max(v,g))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=u.length===s.length,k=s.length,_=0;_<k;_++)a.addColorStop(E?u[_]:_/(k-1),"rgba("+s[_][0]+","+s[_][1]+","+s[_][2]+","+i+")");return a},Zs.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},Zs.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},Zs.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},Zs.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},Zs.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},Zs.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},Zs.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var u,l=i*o,c=a*o;if(l!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var d=n.canvasContainer;d.style.width=i+"px",d.style.height=a+"px";for(var h=0;h<t.CANVAS_LAYERS;h++)(u=n.canvases[h]).width=l,u.height=c,u.style.width=i+"px",u.style.height=a+"px";for(h=0;h<t.BUFFER_COUNT;h++)(u=n.bufferCanvases[h]).width=l,u.height=c,u.style.width=i+"px",u.style.height=a+"px";t.textureMult=1,o<=1&&(u=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,u.width=l*t.textureMult,u.height=c*t.textureMult),t.canvasWidth=l,t.canvasHeight=c}},Zs.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},Zs.render=function(e){var t=(e=e||Te()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,u=o.cy,l=o.data,c=l.canvasNeedsRedraw,d=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),h=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,f=o.motionBlurPxRatio,p=u.hasCompoundNodes(),v=o.hoverData.draggingEles,g=!(!o.hoverData.selecting&&!o.touchData.selecting),y=h=h&&!t&&o.motionBlurEnabled&&!g;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),h&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!d&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=u.style(),b=u.zoom(),x=void 0!==i?i:b,w=u.pan(),E={x:w.x,y:w.y},k={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||k.zoom!==_.zoom||k.pan.x!==_.pan.x||k.pan.y!==_.pan.y||v&&!p||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var C=o.getCachedZSortedEles();function S(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function P(e,r){var s,u,c,d;o.clearingMotionBlur||e!==l.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==l.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,u=x,c=o.canvasWidth,d=o.canvasHeight):(s={x:w.x*f,y:w.y*f},u=b*f,c=o.canvasWidth*f,d=o.canvasHeight*f),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?S(e,0,0,c,d):t||void 0!==r&&!r||e.clearRect(0,0,c,d),n||(e.translate(s.x,s.y),e.scale(u,u)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(d||(o.textureDrawLastFrame=!1),d){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=u.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var D=o.data.bufferContexts[o.TEXTURE_BUFFER];D.setTransform(1,0,0,1,0,0),D.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:D,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(k=o.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-k.pan.x)/k.zoom,y:(0-k.pan.y)/k.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var T=l.contexts[o.NODE],M=o.textureCache.texture;k=o.textureCache.viewport;T.setTransform(1,0,0,1,0,0),h?S(T,0,0,k.width,k.height):T.clearRect(0,0,k.width,k.height);var B=m.core("outside-texture-bg-color").value,N=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(T,B[0],B[1],B[2],N),T.fillRect(0,0,k.width,k.height);b=u.zoom();P(T,!1),T.clearRect(k.mpan.x,k.mpan.y,k.width/k.zoom/s,k.height/k.zoom/s),T.drawImage(M,k.mpan.x,k.mpan.y,k.width/k.zoom/s,k.height/k.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var I=u.extent(),O=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),z=o.hideEdgesOnViewport&&O,L=[];if(L[o.NODE]=!c[o.NODE]&&h&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,L[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),L[o.DRAG]=!c[o.DRAG]&&h&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,L[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||L[o.NODE]){var A=h&&!L[o.NODE]&&1!==f;P(T=t||(A?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:l.contexts[o.NODE]),h&&!A?"motionBlur":void 0),z?o.drawCachedNodes(T,C.nondrag,s,I):o.drawLayeredElements(T,C.nondrag,s,I),o.debug&&o.drawDebugPoints(T,C.nondrag),n||h||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||L[o.DRAG])){A=h&&!L[o.DRAG]&&1!==f;P(T=t||(A?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:l.contexts[o.DRAG]),h&&!A?"motionBlur":void 0),z?o.drawCachedNodes(T,C.drag,s,I):o.drawCachedElements(T,C.drag,s,I),o.debug&&o.drawDebugPoints(T,C.drag),n||h||(c[o.DRAG]=!1)}if(o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(P(T=t||l.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var j=m.core("selection-box-border-width").value/b;T.lineWidth=j,T.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",T.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),j>0&&(T.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",T.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(l.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var R=l.bgActivePosistion;T.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",T.beginPath(),T.arc(R.x,R.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),T.fill()}var F=o.lastRedrawTime;if(o.showFps&&F){F=Math.round(F);var V=Math.round(1e3/F);T.setTransform(1,0,0,1,0,0),T.fillStyle="rgba(255, 0, 0, 0.75)",T.strokeStyle="rgba(255, 0, 0, 0.75)",T.lineWidth=1,T.fillText("1 frame = "+F+" ms = "+V+" fps",0,20);T.strokeRect(0,30,250,20),T.fillRect(0,30,250*Math.min(V/60,1),20)}n||(c[o.SELECT_BOX]=!1)}if(h&&1!==f){var q=l.contexts[o.NODE],Y=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],X=l.contexts[o.DRAG],W=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],G=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):S(e,0,0,o.canvasWidth,o.canvasHeight);var r=f;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||L[o.NODE])&&(G(q,Y,L[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||L[o.DRAG])&&(G(X,W,L[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=k,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),h&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!d,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),100)),t||u.emit("render")};for(var $s={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var u=1;u<a.length/2;u++)e.lineTo(t+o*a[2*u],n+s*a[2*u+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,u=Rt(r,i);e.beginPath&&e.beginPath();for(var l=0;l<a.length/4;l++){var c,d=void 0;d=0===l?a.length-2:4*l-2,c=4*l+2;var h=t+o*a[4*l],f=n+s*a[4*l+1],p=-a[d]*a[c]-a[d+1]*a[c+1],v=u/Math.tan(Math.acos(p)/2),g=h-v*a[d],y=f-v*a[d+1],m=h+v*a[c],b=f+v*a[c+1];0===l?e.moveTo(g,y):e.lineTo(g,y),e.arcTo(h,f,m,b,u)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=jt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=jt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2;e.beginPath&&e.beginPath(),e.moveTo(t-a+8,n-o),e.lineTo(t+a-8,n-o),e.lineTo(t+a,n-o+8),e.lineTo(t+a,n+o-8),e.lineTo(t+a-8,n+o),e.lineTo(t-a+8,n+o),e.lineTo(t-a,n+o-8),e.lineTo(t-a,n-o+8),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,u=t+a,l=n-o,c=n+o,d=Ft(r,i),h=d.widthOffset,f=d.heightOffset,p=d.ctrlPtOffsetPct*h;e.beginPath&&e.beginPath(),e.moveTo(s,l+f),e.lineTo(s,c-f),e.quadraticCurveTo(s+p,c,s+h,c),e.lineTo(u-h,c),e.quadraticCurveTo(u-p,c,u,c-f),e.lineTo(u,l+f),e.quadraticCurveTo(u-p,l,u-h,l),e.lineTo(s+h,l),e.quadraticCurveTo(s+p,l,s,l+f),e.closePath()}},Qs=Math.sin(0),Js=Math.cos(0),eu={},tu={},nu=Math.PI/40,ru=0*Math.PI;ru<2*Math.PI;ru+=nu)eu[ru]=Math.sin(ru),tu[ru]=Math.cos(ru);$s.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,u=i/2,l=0*Math.PI;l<2*Math.PI;l+=nu)a=t-s*eu[l]*Qs+s*tu[l]*Js,o=n+u*tu[l]*Qs+u*eu[l]*Js,0===l?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var iu={};function au(e){var t=e.indexOf(",");return e.substr(t+1)}function ou(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new Jn((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return function(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}(au(r()),n);case"base64":return au(r());default:return r()}}iu.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},iu.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=N(e.maxWidth)||N(e.maxHeight),s=this.getPixelRatio(),u=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,u=e.scale;else if(o){var l=1/0,c=1/0;N(e.maxWidth)&&(l=u*e.maxWidth/i),N(e.maxHeight)&&(c=u*e.maxHeight/a),i*=u=Math.min(l,c),a*=u}o||(i*=s,a*=s,u*=s);var d=document.createElement("canvas");d.width=i,d.height=a,d.style.width=i+"px",d.style.height=a+"px";var h=d.getContext("2d");if(i>0&&a>0){h.clearRect(0,0,i,a),h.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)h.translate(-n.x1*u,-n.y1*u),h.scale(u,u),this.drawElements(h,f),h.scale(1/u,1/u),h.translate(n.x1*u,n.y1*u);else{var p=t.pan(),v={x:p.x*u,y:p.y*u};u*=t.zoom(),h.translate(v.x,v.y),h.scale(u,u),this.drawElements(h,f),h.scale(1/u,1/u),h.translate(-v.x,-v.y)}e.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=e.bg,h.rect(0,0,i,a),h.fill())}return d},iu.png=function(e){return ou(e,this.bufferCanvasImage(e),"image/png")},iu.jpg=function(e){return ou(e,this.bufferCanvasImage(e),"image/jpeg")};var su={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},uu=cu,lu=cu.prototype;function cu(e){var t=this;t.data={canvases:new Array(lu.CANVAS_LAYERS),contexts:new Array(lu.CANVAS_LAYERS),canvasNeedsRedraw:new Array(lu.CANVAS_LAYERS),bufferCanvases:new Array(lu.BUFFER_COUNT),bufferContexts:new Array(lu.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};E&&E.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<lu.CANVAS_LAYERS;s++){var u=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=u.getContext("2d"),Object.keys(o).forEach((function(e){u.style[e]=o[e]})),u.style.position="absolute",u.setAttribute("data-id","layer"+s),u.style.zIndex=String(lu.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(u),t.data.canvasNeedsRedraw[s]=!1}t.data.topCanvas=t.data.canvases[0],t.data.canvases[lu.NODE].setAttribute("data-id","layer"+lu.NODE+"-node"),t.data.canvases[lu.SELECT_BOX].setAttribute("data-id","layer"+lu.SELECT_BOX+"-selectbox"),t.data.canvases[lu.DRAG].setAttribute("data-id","layer"+lu.DRAG+"-drag");for(s=0;s<lu.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var l=ht(),c=function(e){return{x:-e.w/2,y:-e.h/2}},d=function(e){return e.boundingBox(),e[0]._private.bodyBounds},h=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||l},f=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||l},p=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||l},v=function(e,t){return t},g=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},y=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},m=t.data.eleTxrCache=new ks(t,{getKey:function(e){return e[0]._private.nodeKey},doesEleInvalidateKey:function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},drawElement:function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},getBoundingBox:d,getRotationPoint:function(e){return{x:((t=d(e)).x1+t.x2)/2,y:(t.y1+t.y2)/2};var t},getRotationOffset:function(e){return c(d(e))},allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),b=t.data.lblTxrCache=new ks(t,{getKey:function(e){return e[0]._private.labelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},getBoundingBox:h,getRotationPoint:function(e){return g("",y(e,"labelX","labelY"),e)},getRotationOffset:function(e){var t=h(e),n=c(h(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},isVisible:v}),x=t.data.slbTxrCache=new ks(t,{getKey:function(e){return e[0]._private.sourceLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},getBoundingBox:f,getRotationPoint:function(e){return g("source",y(e,"sourceLabelX","sourceLabelY"),e)},getRotationOffset:function(e){return c(f(e))},isVisible:v}),w=t.data.tlbTxrCache=new ks(t,{getKey:function(e){return e[0]._private.targetLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},getBoundingBox:p,getRotationPoint:function(e){return g("target",y(e,"targetLabelX","targetLabelY"),e)},getRotationOffset:function(e){return c(p(e))},isVisible:v}),k=t.data.lyrTxrCache=new Cs(t);t.onUpdateEleCalcs((function(e,t){m.invalidateElements(t),b.invalidateElements(t),x.invalidateElements(t),w.invalidateElements(t),k.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var _=function(e){for(var t=0;t<e.length;t++)k.enqueueElementRefinement(e[t].ele)};m.onDequeue(_),b.onDequeue(_),x.onDequeue(_),w.onDequeue(_)}lu.CANVAS_LAYERS=3,lu.SELECT_BOX=0,lu.DRAG=1,lu.NODE=2,lu.BUFFER_COUNT=3,lu.TEXTURE_BUFFER=0,lu.MOTIONBLUR_BUFFER_NODE=1,lu.MOTIONBLUR_BUFFER_DRAG=2,lu.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[lu.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[lu.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[lu.SELECT_BOX]=t}};var du="undefined"!=typeof Path2D;lu.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},lu.usePaths=function(){return du&&this.pathsEnabled},lu.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},lu.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},lu.makeOffscreenCanvas=function(e,t){var n;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":p(OffscreenCanvas))?n=new OffscreenCanvas(e,t):((n=document.createElement("canvas")).width=e,n.height=t),n},[Ms,Ls,Ys,Ws,Gs,Us,Zs,$s,iu,su].forEach((function(e){U(lu,e)}));var hu=[{type:"layout",extensions:Wo},{type:"renderer",extensions:[{name:"null",impl:Go},{name:"base",impl:gs},{name:"canvas",impl:uu}]}],fu={},pu={};function vu(e,t,n){var r=n,i=function(n){Ce("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(ro.prototype[t])return i(t);ro.prototype[t]=n}else if("collection"===e){if(xa.prototype[t])return i(t);xa.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),B(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],u=0;u<s.length;u++){var l=s[u];o[l]=o[l]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var d=function(e){return e._private.cy},h={addEventFields:function(e,t){t.layout=e,t.cy=d(e),t.target=e},bubble:function(){return!0},parent:function(e){return d(e)}};U(o,{createEmitter:function(){return this._private.emitter=new ji(h,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),ar.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var f=gu("renderer","base"),p=f.prototype,v=n,g=n.prototype,y=function(){f.apply(this,arguments),v.apply(this,arguments)},m=y.prototype;for(var b in p){var x=p[b];if(null!=g[b])return i(b);m[b]=x}for(var w in g)m[w]=g[w];p.clientFunctions.forEach((function(e){m[e]=m[e]||function(){ke("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return ke(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return $({map:fu,keys:[e,t],value:r})}function gu(e,t){return Q({map:fu,keys:[e,t]})}function yu(e,t,n,r,i){return $({map:pu,keys:[e,t,n,r],value:i})}function mu(e,t,n,r){return Q({map:pu,keys:[e,t,n,r]})}var bu=function(){return 2===arguments.length?gu.apply(null,arguments):3===arguments.length?vu.apply(null,arguments):4===arguments.length?mu.apply(null,arguments):5===arguments.length?yu.apply(null,arguments):void ke("Invalid extension access syntax")};ro.prototype.extension=bu,hu.forEach((function(e){e.extensions.forEach((function(t){vu(e.type,t.name,t.impl)}))}));var xu=function e(){if(!(this instanceof e))return new e;this.length=0},wu=xu.prototype;wu.instanceString=function(){return"stylesheet"},wu.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},wu.css=function(e,t){var n=this.length-1;if(D(e))this[n].properties.push({name:e,value:t});else if(B(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var u=Qa.properties[o]||Qa.properties[Y(o)];if(null!=u){var l=u.name,c=s;this[n].properties.push({name:l,value:c})}}}return this},wu.style=wu.css,wu.generateStyle=function(e){var t=new Qa(e);return this.appendToStyle(t)},wu.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var Eu=function(e){return void 0===e&&(e={}),B(e)?new ro(e):D(e)?bu.apply(bu,arguments):void 0};Eu.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(Eu),e.apply(null,t),this},Eu.warnings=function(e){return _e(e)},Eu.version="3.26.0",Eu.stylesheet=Eu.Stylesheet=xu,e.exports=Eu},24259:(e,t,n)=>{e.exports={graphlib:n(99043),layout:n(69155),debug:n(38093),util:{time:n(51942).time,notime:n(51942).notime},version:n(50665)}},19371:(e,t,n)=>{"use strict";var r=n(27568),i=n(26238);e.exports={run:function(e){var t="greedy"===e.graph().acyclicer?i(e,function(e){return function(t){return e.edge(t).weight}}(e)):function(e){var t=[],n={},i={};function a(o){r.has(i,o)||(i[o]=!0,n[o]=!0,r.forEach(e.outEdges(o),(function(e){r.has(n,e.w)?t.push(e):a(e.w)})),delete n[o])}return r.forEach(e.nodes(),a),t}(e);r.forEach(t,(function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.uniqueId("rev"))}))},undo:function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}}))}}},30111:(e,t,n)=>{var r=n(27568),i=n(51942);function a(e,t,n,r,a,o){var s={width:0,height:0,rank:o,borderType:t},u=a[t][o-1],l=i.addDummyNode(e,"border",s,n);a[t][o]=l,e.setParent(l,r),u&&e.setEdge(u,l,{weight:1})}e.exports=function(e){r.forEach(e.children(),(function t(n){var i=e.children(n),o=e.node(n);if(i.length&&r.forEach(i,t),r.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var s=o.minRank,u=o.maxRank+1;s<u;++s)a(e,"borderLeft","_bl",n,o,s),a(e,"borderRight","_br",n,o,s)}}))}},52551:(e,t,n)=>{"use strict";var r=n(27568);function i(e){r.forEach(e.nodes(),(function(t){a(e.node(t))})),r.forEach(e.edges(),(function(t){a(e.edge(t))}))}function a(e){var t=e.width;e.width=e.height,e.height=t}function o(e){e.y=-e.y}function s(e){var t=e.x;e.x=e.y,e.y=t}e.exports={adjust:function(e){var t=e.graph().rankdir.toLowerCase();"lr"!==t&&"rl"!==t||i(e)},undo:function(e){var t=e.graph().rankdir.toLowerCase();"bt"!==t&&"rl"!==t||function(e){r.forEach(e.nodes(),(function(t){o(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,o),r.has(n,"y")&&o(n)}))}(e);"lr"!==t&&"rl"!==t||(!function(e){r.forEach(e.nodes(),(function(t){s(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(e),i(e))}}},65186:e=>{function t(){var e={};e._next=e._prev=e,this._sentinel=e}function n(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function r(e,t){if("_next"!==e&&"_prev"!==e)return t}e.exports=t,t.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return n(t),t},t.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&n(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},t.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,r)),n=n._prev;return"["+e.join(", ")+"]"}},38093:(e,t,n)=>{var r=n(27568),i=n(51942),a=n(99043).Graph;e.exports={debugOrdering:function(e){var t=i.buildLayerMatrix(e),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.forEach(e.nodes(),(function(t){n.setNode(t,{label:t}),n.setParent(t,"layer"+e.node(t).rank)})),r.forEach(e.edges(),(function(e){n.setEdge(e.v,e.w,{},e.name)})),r.forEach(t,(function(e,t){var i="layer"+t;n.setNode(i,{rank:"same"}),r.reduce(e,(function(e,t){return n.setEdge(e,t,{style:"invis"}),t}))})),n}}},99043:(e,t,n)=>{var r;try{r=n(39254)}catch(i){}r||(r=window.graphlib),e.exports=r},26238:(e,t,n)=>{var r=n(27568),i=n(99043).Graph,a=n(65186);e.exports=function(e,t){if(e.nodeCount()<=1)return[];var n=function(e,t){var n=new i,o=0,s=0;r.forEach(e.nodes(),(function(e){n.setNode(e,{v:e,in:0,out:0})})),r.forEach(e.edges(),(function(e){var r=n.edge(e.v,e.w)||0,i=t(e),a=r+i;n.setEdge(e.v,e.w,a),s=Math.max(s,n.node(e.v).out+=i),o=Math.max(o,n.node(e.w).in+=i)}));var l=r.range(s+o+3).map((function(){return new a})),c=o+1;return r.forEach(n.nodes(),(function(e){u(l,c,n.node(e))})),{graph:n,buckets:l,zeroIdx:c}}(e,t||o),l=function(e,t,n){var r,i=[],a=t[t.length-1],o=t[0];for(;e.nodeCount();){for(;r=o.dequeue();)s(e,t,n,r);for(;r=a.dequeue();)s(e,t,n,r);if(e.nodeCount())for(var u=t.length-2;u>0;--u)if(r=t[u].dequeue()){i=i.concat(s(e,t,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(l,(function(t){return e.outEdges(t.v,t.w)})),!0)};var o=r.constant(1);function s(e,t,n,i,a){var o=a?[]:void 0;return r.forEach(e.inEdges(i.v),(function(r){var i=e.edge(r),s=e.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,u(t,n,s)})),r.forEach(e.outEdges(i.v),(function(r){var i=e.edge(r),a=r.w,o=e.node(a);o.in-=i,u(t,n,o)})),e.removeNode(i.v),o}function u(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},69155:(e,t,n)=>{"use strict";var r=n(27568),i=n(19371),a=n(431),o=n(29102),s=n(51942).normalizeRanks,u=n(14146),l=n(51942).removeEmptyRanks,c=n(2856),d=n(30111),h=n(52551),f=n(79595),p=n(50199),v=n(51942),g=n(99043).Graph;e.exports=function(e,t){var n=t&&t.debugTiming?v.time:v.notime;n("layout",(function(){var t=n(" buildLayoutGraph",(function(){return function(e){var t=new g({multigraph:!0,compound:!0}),n=S(e.graph());return t.setGraph(r.merge({},m,C(n,y),r.pick(n,b))),r.forEach(e.nodes(),(function(n){var i=S(e.node(n));t.setNode(n,r.defaults(C(i,x),w)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var i=S(e.edge(n));t.setEdge(n,r.merge({},k,C(i,E),r.pick(i,_)))})),t}(e)}));n(" runLayout",(function(){!function(e,t){t(" makeSpaceForEdgeLabels",(function(){!function(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(e)})),t(" removeSelfEdges",(function(){!function(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}(e)})),t(" acyclic",(function(){i.run(e)})),t(" nestingGraph.run",(function(){c.run(e)})),t(" rank",(function(){o(v.asNonCompoundGraph(e))})),t(" injectEdgeLabelProxies",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),i={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};v.addDummyNode(e,"edge-proxy",i,"_ep")}}))}(e)})),t(" removeEmptyRanks",(function(){l(e)})),t(" nestingGraph.cleanup",(function(){c.cleanup(e)})),t(" normalizeRanks",(function(){s(e)})),t(" assignRankMinMax",(function(){!function(e){var t=0;r.forEach(e.nodes(),(function(n){var i=e.node(n);i.borderTop&&(i.minRank=e.node(i.borderTop).rank,i.maxRank=e.node(i.borderBottom).rank,t=r.max(t,i.maxRank))})),e.graph().maxRank=t}(e)})),t(" removeEdgeLabelProxies",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}(e)})),t(" normalize.run",(function(){a.run(e)})),t(" parentDummyChains",(function(){u(e)})),t(" addBorderSegments",(function(){d(e)})),t(" order",(function(){f(e)})),t(" insertSelfEdges",(function(){!function(e){var t=v.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,i){var a=e.node(t);a.order=i+n,r.forEach(a.selfEdges,(function(t){v.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:a.rank,order:i+ ++n,e:t.e,label:t.label},"_se")})),delete a.selfEdges}))}))}(e)})),t(" adjustCoordinateSystem",(function(){h.adjust(e)})),t(" position",(function(){p(e)})),t(" positionSelfEdges",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(e)})),t(" removeBorderNodes",(function(){!function(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),i=e.node(n.borderTop),a=e.node(n.borderBottom),o=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(e.nodes(),(function(t){"border"===e.node(t).dummy&&e.removeNode(t)}))}(e)})),t(" normalize.undo",(function(){a.undo(e)})),t(" fixupEdgeLabelCoords",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(e)})),t(" undoCoordinateSystem",(function(){h.undo(e)})),t(" translateGraph",(function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=e.graph(),s=o.marginx||0,u=o.marginy||0;function l(e){var r=e.x,o=e.y,s=e.width,u=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-u/2),a=Math.max(a,o+u/2)}r.forEach(e.nodes(),(function(t){l(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,"x")&&l(n)})),t-=s,i-=u,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=i})),r.forEach(e.edges(),(function(n){var a=e.edge(n);r.forEach(a.points,(function(e){e.x-=t,e.y-=i})),r.has(a,"x")&&(a.x-=t),r.has(a,"y")&&(a.y-=i)})),o.width=n-t+s,o.height=a-i+u}(e)})),t(" assignNodeIntersects",(function(){!function(e){r.forEach(e.edges(),(function(t){var n,r,i=e.edge(t),a=e.node(t.v),o=e.node(t.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(v.intersectRect(a,n)),i.points.push(v.intersectRect(o,r))}))}(e)})),t(" reversePoints",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}(e)})),t(" acyclic.undo",(function(){i.undo(e)}))}(t,n)})),n(" updateInputGraph",(function(){!function(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),i=t.node(n);r&&(r.x=i.x,r.y=i.y,t.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(e.edges(),(function(n){var i=e.edge(n),a=t.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)}))}))};var y=["nodesep","edgesep","ranksep","marginx","marginy"],m={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],x=["width","height"],w={width:0,height:0},E=["minlen","weight","width","height","labeloffset"],k={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},_=["labelpos"];function C(e,t){return r.mapValues(r.pick(e,t),Number)}function S(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},27568:(e,t,n)=>{var r;try{r={cloneDeep:n(30454),constant:n(551),defaults:n(70236),each:n(72856),filter:n(69238),find:n(64925),flatten:n(89754),forEach:n(47003),forIn:n(3544),has:n(73915),isUndefined:n(92465),last:n(31159),map:n(55807),mapValues:n(25389),max:n(7620),merge:n(15409),min:n(14176),minBy:n(70201),now:n(82846),pick:n(14648),range:n(4215),reduce:n(34172),sortBy:n(95099),uniqueId:n(46854),values:n(58185),zipObject:n(11775)}}catch(i){}r||(r=window._),e.exports=r},2856:(e,t,n)=>{var r=n(27568),i=n(51942);function a(e,t,n,o,s,u,l){var c=e.children(l);if(c.length){var d=i.addBorderNode(e,"_bt"),h=i.addBorderNode(e,"_bb"),f=e.node(l);e.setParent(d,l),f.borderTop=d,e.setParent(h,l),f.borderBottom=h,r.forEach(c,(function(r){a(e,t,n,o,s,u,r);var i=e.node(r),c=i.borderTop?i.borderTop:r,f=i.borderBottom?i.borderBottom:r,p=i.borderTop?o:2*o,v=c!==f?1:s-u[l]+1;e.setEdge(d,c,{weight:p,minlen:v,nestingEdge:!0}),e.setEdge(f,h,{weight:p,minlen:v,nestingEdge:!0})})),e.parent(l)||e.setEdge(t,d,{weight:0,minlen:s+u[l]})}else l!==t&&e.setEdge(t,l,{weight:0,minlen:n})}e.exports={run:function(e){var t=i.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};function n(i,a){var o=e.children(i);o&&o.length&&r.forEach(o,(function(e){n(e,a+1)})),t[i]=a}return r.forEach(e.children(),(function(e){n(e,1)})),t}(e),o=r.max(r.values(n))-1,s=2*o+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=s}));var u=function(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}(e)+1;r.forEach(e.children(),(function(r){a(e,t,s,u,o,n,r)})),e.graph().nodeRankFactor=s},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}}},431:(e,t,n)=>{"use strict";var r=n(27568),i=n(51942);e.exports={run:function(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){!function(e,t){var n,r,a,o=t.v,s=e.node(o).rank,u=t.w,l=e.node(u).rank,c=t.name,d=e.edge(t),h=d.labelRank;if(l===s+1)return;for(e.removeEdge(t),a=0,++s;s<l;++a,++s)d.points=[],r={width:0,height:0,edgeLabel:d,edgeObj:t,rank:s},n=i.addDummyNode(e,"edge",r,"_d"),s===h&&(r.width=d.width,r.height=d.height,r.dummy="edge-label",r.labelpos=d.labelpos),e.setEdge(o,n,{weight:d.weight},c),0===a&&e.graph().dummyChains.push(n),o=n;e.setEdge(o,u,{weight:d.weight},c)}(e,t)}))},undo:function(e){r.forEach(e.graph().dummyChains,(function(t){var n,r=e.node(t),i=r.edgeLabel;for(e.setEdge(r.edgeObj,i);r.dummy;)n=e.successors(t)[0],e.removeNode(t),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),t=n,r=e.node(t)}))}}},74671:(e,t,n)=>{var r=n(27568);e.exports=function(e,t,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=e.parent(n);s;){if((r=e.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void t.setEdge(o,s);s=r}}))}},18346:(e,t,n)=>{var r=n(27568);e.exports=function(e,t){return r.map(t,(function(t){var n=e.inEdges(t);if(n.length){var i=r.reduce(n,(function(t,n){var r=e.edge(n),i=e.node(n.v);return{sum:t.sum+r.weight*i.order,weight:t.weight+r.weight}}),{sum:0,weight:0});return{v:t,barycenter:i.sum/i.weight,weight:i.weight}}return{v:t}}))}},46901:(e,t,n)=>{var r=n(27568),i=n(99043).Graph;e.exports=function(e,t,n){var a=function(e){var t;for(;e.hasNode(t=r.uniqueId("_root")););return t}(e),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(t){return e.node(t)}));return r.forEach(e.nodes(),(function(i){var s=e.node(i),u=e.parent(i);(s.rank===t||s.minRank<=t&&t<=s.maxRank)&&(o.setNode(i),o.setParent(i,u||a),r.forEach(e[n](i),(function(t){var n=t.v===i?t.w:t.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:e.edge(t).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[t],borderRight:s.borderRight[t]}))})),o}},27525:(e,t,n)=>{"use strict";var r=n(27568);function i(e,t,n){for(var i=r.zipObject(n,r.map(n,(function(e,t){return t}))),a=r.flatten(r.map(t,(function(t){return r.sortBy(r.map(e.outEdges(t),(function(t){return{pos:i[t.w],weight:e.edge(t).weight}})),"pos")})),!0),o=1;o<n.length;)o<<=1;var s=2*o-1;o-=1;var u=r.map(new Array(s),(function(){return 0})),l=0;return r.forEach(a.forEach((function(e){var t=e.pos+o;u[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=u[t+1]),u[t=t-1>>1]+=e.weight;l+=e.weight*n}))),l}e.exports=function(e,t){for(var n=0,r=1;r<t.length;++r)n+=i(e,t[r-1],t[r]);return n}},79595:(e,t,n)=>{"use strict";var r=n(27568),i=n(35037),a=n(27525),o=n(60066),s=n(46901),u=n(74671),l=n(99043).Graph,c=n(51942);function d(e,t,n){return r.map(t,(function(t){return s(e,t,n)}))}function h(e,t){var n=new l;r.forEach(e,(function(e){var i=e.graph().root,a=o(e,i,n,t);r.forEach(a.vs,(function(t,n){e.node(t).order=n})),u(e,n,a.vs)}))}function f(e,t){r.forEach(t,(function(t){r.forEach(t,(function(t,n){e.node(t).order=n}))}))}e.exports=function(e){var t=c.maxRank(e),n=d(e,r.range(1,t+1),"inEdges"),o=d(e,r.range(t-1,-1,-1),"outEdges"),s=i(e);f(e,s);for(var u,l=Number.POSITIVE_INFINITY,p=0,v=0;v<4;++p,++v){h(p%2?n:o,p%4>=2),s=c.buildLayerMatrix(e);var g=a(e,s);g<l&&(v=0,u=r.cloneDeep(s),l=g)}f(e,u)}},35037:(e,t,n)=>{"use strict";var r=n(27568);e.exports=function(e){var t={},n=r.filter(e.nodes(),(function(t){return!e.children(t).length})),i=r.max(r.map(n,(function(t){return e.node(t).rank}))),a=r.map(r.range(i+1),(function(){return[]}));var o=r.sortBy(n,(function(t){return e.node(t).rank}));return r.forEach(o,(function n(i){if(r.has(t,i))return;t[i]=!0;var o=e.node(i);a[o.rank].push(i),r.forEach(e.successors(i),n)})),a}},64873:(e,t,n)=>{"use strict";var r=n(27568);e.exports=function(e,t){var n={};return r.forEach(e,(function(e,t){var i=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};r.isUndefined(e.barycenter)||(i.barycenter=e.barycenter,i.weight=e.weight)})),r.forEach(t.edges(),(function(e){var t=n[e.v],i=n[e.w];r.isUndefined(t)||r.isUndefined(i)||(i.indegree++,t.out.push(n[e.w]))})),function(e){var t=[];function n(e){return function(t){t.merged||(r.isUndefined(t.barycenter)||r.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&function(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}(e,t)}}function i(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var a=e.pop();t.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(e){return!e.indegree})))}},60066:(e,t,n)=>{var r=n(27568),i=n(18346),a=n(64873),o=n(22474);e.exports=function e(t,n,s,u){var l=t.children(n),c=t.node(n),d=c?c.borderLeft:void 0,h=c?c.borderRight:void 0,f={};d&&(l=r.filter(l,(function(e){return e!==d&&e!==h})));var p=i(t,l);r.forEach(p,(function(n){if(t.children(n.v).length){var i=e(t,n.v,s,u);f[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var v=a(p,s);!function(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}(v,f);var g=o(v,u);if(d&&(g.vs=r.flatten([d,g.vs,h],!0),t.predecessors(d).length)){var y=t.node(t.predecessors(d)[0]),m=t.node(t.predecessors(h)[0]);r.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+y.order+m.order)/(g.weight+2),g.weight+=2}return g}},22474:(e,t,n)=>{var r=n(27568),i=n(51942);function a(e,t,n){for(var i;t.length&&(i=r.last(t)).i<=n;)t.pop(),e.push(i.vs),n++;return n}e.exports=function(e,t){var n=i.partition(e,(function(e){return r.has(e,"barycenter")})),o=n.lhs,s=r.sortBy(n.rhs,(function(e){return-e.i})),u=[],l=0,c=0,d=0;o.sort((h=!!t,function(e,t){return e.barycenter<t.barycenter?-1:e.barycenter>t.barycenter?1:h?t.i-e.i:e.i-t.i})),d=a(u,s,d),r.forEach(o,(function(e){d+=e.vs.length,u.push(e.vs),l+=e.barycenter*e.weight,c+=e.weight,d=a(u,s,d)}));var h;var f={vs:r.flatten(u,!0)};c&&(f.barycenter=l/c,f.weight=c);return f}},14146:(e,t,n)=>{var r=n(27568);e.exports=function(e){var t=function(e){var t={},n=0;function i(a){var o=n;r.forEach(e.children(a),i),t[a]={low:o,lim:n++}}return r.forEach(e.children(),i),t}(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),i=r.edgeObj,a=function(e,t,n,r){var i,a,o=[],s=[],u=Math.min(t[n].low,t[r].low),l=Math.max(t[n].lim,t[r].lim);i=n;do{i=e.parent(i),o.push(i)}while(i&&(t[i].low>u||l>t[i].lim));a=i,i=r;for(;(i=e.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(e,t,i.v,i.w),o=a.path,s=a.lca,u=0,l=o[u],c=!0;n!==i.w;){if(r=e.node(n),c){for(;(l=o[u])!==s&&e.node(l).maxRank<r.rank;)u++;l===s&&(c=!1)}if(!c){for(;u<o.length-1&&e.node(l=o[u+1]).minRank<=r.rank;)u++;l=o[u]}e.setParent(n,l),n=e.successors(n)[0]}}))}},31867:(e,t,n)=>{"use strict";var r=n(27568),i=n(99043).Graph,a=n(51942);function o(e,t){var n={};return r.reduce(t,(function(t,i){var a=0,o=0,s=t.length,l=r.last(i);return r.forEach(i,(function(t,c){var d=function(e,t){if(e.node(t).dummy)return r.find(e.predecessors(t),(function(t){return e.node(t).dummy}))}(e,t),h=d?e.node(d).order:s;(d||t===l)&&(r.forEach(i.slice(o,c+1),(function(t){r.forEach(e.predecessors(t),(function(r){var i=e.node(r),o=i.order;!(o<a||h<o)||i.dummy&&e.node(t).dummy||u(n,r,t)}))})),o=c+1,a=h)})),i})),n}function s(e,t){var n={};function i(t,i,a,o,s){var l;r.forEach(r.range(i,a),(function(i){l=t[i],e.node(l).dummy&&r.forEach(e.predecessors(l),(function(t){var r=e.node(t);r.dummy&&(r.order<o||r.order>s)&&u(n,t,l)}))}))}return r.reduce(t,(function(t,n){var a,o=-1,s=0;return r.forEach(n,(function(r,u){if("border"===e.node(r).dummy){var l=e.predecessors(r);l.length&&(a=e.node(l[0]).order,i(n,s,u,o,a),s=u,o=a)}i(n,s,n.length,a,t.length)})),n})),n}function u(e,t,n){if(t>n){var r=t;t=n,n=r}var i=e[t];i||(e[t]=i={}),i[n]=!0}function l(e,t,n){if(t>n){var i=t;t=n,n=i}return r.has(e[t],n)}function c(e,t,n,i){var a={},o={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){a[e]=e,o[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var u=i(e);if(u.length){u=r.sortBy(u,(function(e){return s[e]}));for(var c=(u.length-1)/2,d=Math.floor(c),h=Math.ceil(c);d<=h;++d){var f=u[d];o[e]===e&&t<s[f]&&!l(n,e,f)&&(o[f]=e,o[e]=a[e]=a[f],t=s[f])}}}))})),{root:a,align:o}}function d(e,t,n,a,o){var s={},u=function(e,t,n,a){var o=new i,s=e.graph(),u=function(e,t,n){return function(i,a,o){var s,u=i.node(a),l=i.node(o),c=0;if(c+=u.width/2,r.has(u,"labelpos"))switch(u.labelpos.toLowerCase()){case"l":s=-u.width/2;break;case"r":s=u.width/2}if(s&&(c+=n?s:-s),s=0,c+=(u.dummy?t:e)/2,c+=(l.dummy?t:e)/2,c+=l.width/2,r.has(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":s=l.width/2;break;case"r":s=-l.width/2}return s&&(c+=n?s:-s),s=0,c}}(s.nodesep,s.edgesep,a);return r.forEach(t,(function(t){var i;r.forEach(t,(function(t){var r=n[t];if(o.setNode(r),i){var a=n[i],s=o.edge(a,r);o.setEdge(a,r,Math.max(u(e,t,i),s||0))}i=t}))})),o}(e,t,n,o),l=o?"borderLeft":"borderRight";function c(e,t){for(var n=u.nodes(),r=n.pop(),i={};r;)i[r]?e(r):(i[r]=!0,n.push(r),n=n.concat(t(r))),r=n.pop()}return c((function(e){s[e]=u.inEdges(e).reduce((function(e,t){return Math.max(e,s[t.v]+u.edge(t))}),0)}),u.predecessors.bind(u)),c((function(t){var n=u.outEdges(t).reduce((function(e,t){return Math.min(e,s[t.w]-u.edge(t))}),Number.POSITIVE_INFINITY),r=e.node(t);n!==Number.POSITIVE_INFINITY&&r.borderType!==l&&(s[t]=Math.max(s[t],n))}),u.successors.bind(u)),r.forEach(a,(function(e){s[e]=s[n[e]]})),s}function h(e,t){return r.minBy(r.values(t),(function(t){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return r.forIn(t,(function(t,r){var a=function(e,t){return e.node(t).width}(e,r)/2;n=Math.max(t+a,n),i=Math.min(t-a,i)})),n-i}))}function f(e,t){var n=r.values(t),i=r.min(n),a=r.max(n);r.forEach(["u","d"],(function(n){r.forEach(["l","r"],(function(o){var s,u=n+o,l=e[u];if(l!==t){var c=r.values(l);(s="l"===o?i-r.min(c):a-r.max(c))&&(e[u]=r.mapValues(l,(function(e){return e+s})))}}))}))}function p(e,t){return r.mapValues(e.ul,(function(n,i){if(t)return e[t.toLowerCase()][i];var a=r.sortBy(r.map(e,i));return(a[1]+a[2])/2}))}e.exports={positionX:function(e){var t,n=a.buildLayerMatrix(e),i=r.merge(o(e,n),s(e,n)),u={};r.forEach(["u","d"],(function(a){t="u"===a?n:r.values(n).reverse(),r.forEach(["l","r"],(function(n){"r"===n&&(t=r.map(t,(function(e){return r.values(e).reverse()})));var o=("u"===a?e.predecessors:e.successors).bind(e),s=c(e,t,i,o),l=d(e,t,s.root,s.align,"r"===n);"r"===n&&(l=r.mapValues(l,(function(e){return-e}))),u[a+n]=l}))}));var l=h(e,u);return f(u,l),p(u,e.graph().align)},findType1Conflicts:o,findType2Conflicts:s,addConflict:u,hasConflict:l,verticalAlignment:c,horizontalCompaction:d,alignCoordinates:f,findSmallestWidthAlignment:h,balance:p}},50199:(e,t,n)=>{"use strict";var r=n(27568),i=n(51942),a=n(31867).positionX;e.exports=function(e){(function(e){var t=i.buildLayerMatrix(e),n=e.graph().ranksep,a=0;r.forEach(t,(function(t){var i=r.max(r.map(t,(function(t){return e.node(t).height})));r.forEach(t,(function(t){e.node(t).y=a+i/2})),a+=i+n}))})(e=i.asNonCompoundGraph(e)),r.forEach(a(e),(function(t,n){e.node(n).x=t}))}},7589:(e,t,n)=>{"use strict";var r=n(27568),i=n(99043).Graph,a=n(51512).slack;function o(e,t){return r.forEach(e.nodes(),(function n(i){r.forEach(t.nodeEdges(i),(function(r){var o=r.v,s=i===o?r.w:o;e.hasNode(s)||a(t,r)||(e.setNode(s,{}),e.setEdge(i,s,{}),n(s))}))})),e.nodeCount()}function s(e,t){return r.minBy(t.edges(),(function(n){if(e.hasNode(n.v)!==e.hasNode(n.w))return a(t,n)}))}function u(e,t,n){r.forEach(e.nodes(),(function(e){t.node(e).rank+=n}))}e.exports=function(e){var t,n,r=new i({directed:!1}),l=e.nodes()[0],c=e.nodeCount();r.setNode(l,{});for(;o(r,e)<c;)t=s(r,e),n=r.hasNode(t.v)?a(e,t):-a(e,t),u(r,e,n);return r}},29102:(e,t,n)=>{"use strict";var r=n(51512).longestPath,i=n(7589),a=n(95823);e.exports=function(e){switch(e.graph().ranker){case"network-simplex":default:s(e);break;case"tight-tree":!function(e){r(e),i(e)}(e);break;case"longest-path":o(e)}};var o=r;function s(e){a(e)}},95823:(e,t,n)=>{"use strict";var r=n(27568),i=n(7589),a=n(51512).slack,o=n(51512).longestPath,s=n(99043).alg.preorder,u=n(99043).alg.postorder,l=n(51942).simplify;function c(e){e=l(e),o(e);var t,n=i(e);for(f(n),d(n,e);t=v(n);)y(n,e,t,g(n,e,t))}function d(e,t){var n=u(e,e.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=h(e,t,n)}(e,t,n)}))}function h(e,t,n){var i=e.node(n).parent,a=!0,o=t.edge(n,i),s=0;return o||(a=!1,o=t.edge(i,n)),s=o.weight,r.forEach(t.nodeEdges(n),(function(r){var o,u,l=r.v===n,c=l?r.w:r.v;if(c!==i){var d=l===a,h=t.edge(r).weight;if(s+=d?h:-h,o=n,u=c,e.hasEdge(o,u)){var f=e.edge(n,c).cutvalue;s+=d?-f:f}}})),s}function f(e,t){arguments.length<2&&(t=e.nodes()[0]),p(e,{},1,t)}function p(e,t,n,i,a){var o=n,s=e.node(i);return t[i]=!0,r.forEach(e.neighbors(i),(function(a){r.has(t,a)||(n=p(e,t,n,a,i))})),s.low=o,s.lim=n++,a?s.parent=a:delete s.parent,n}function v(e){return r.find(e.edges(),(function(t){return e.edge(t).cutvalue<0}))}function g(e,t,n){var i=n.v,o=n.w;t.hasEdge(i,o)||(i=n.w,o=n.v);var s=e.node(i),u=e.node(o),l=s,c=!1;s.lim>u.lim&&(l=u,c=!0);var d=r.filter(t.edges(),(function(t){return c===m(e,e.node(t.v),l)&&c!==m(e,e.node(t.w),l)}));return r.minBy(d,(function(e){return a(t,e)}))}function y(e,t,n,i){var a=n.v,o=n.w;e.removeEdge(a,o),e.setEdge(i.v,i.w,{}),f(e),d(e,t),function(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),i=s(e,n);i=i.slice(1),r.forEach(i,(function(n){var r=e.node(n).parent,i=t.edge(n,r),a=!1;i||(i=t.edge(r,n),a=!0),t.node(n).rank=t.node(r).rank+(a?i.minlen:-i.minlen)}))}(e,t)}function m(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}e.exports=c,c.initLowLimValues=f,c.initCutValues=d,c.calcCutValue=h,c.leaveEdge=v,c.enterEdge=g,c.exchangeEdges=y},51512:(e,t,n)=>{"use strict";var r=n(27568);e.exports={longestPath:function(e){var t={};r.forEach(e.sources(),(function n(i){var a=e.node(i);if(r.has(t,i))return a.rank;t[i]=!0;var o=r.min(r.map(e.outEdges(i),(function(t){return n(t.w)-e.edge(t).minlen})));return o!==Number.POSITIVE_INFINITY&&null!=o||(o=0),a.rank=o}))},slack:function(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}}},51942:(e,t,n)=>{"use strict";var r=n(27568),i=n(99043).Graph;function a(e,t,n,i){var a;do{a=r.uniqueId(i)}while(e.hasNode(a));return n.dummy=t,e.setNode(a,n),a}function o(e){return r.max(r.map(e.nodes(),(function(t){var n=e.node(t).rank;if(!r.isUndefined(n))return n})))}e.exports={addDummyNode:a,simplify:function(e){var t=(new i).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},i=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),t},asNonCompoundGraph:function(e){var t=new i({multigraph:e.isMultigraph()}).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){e.children(n).length||t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){t.setEdge(n,e.edge(n))})),t},successorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.outEdges(t),(function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},predecessorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.inEdges(t),(function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},intersectRect:function(e,t){var n,r,i=e.x,a=e.y,o=t.x-i,s=t.y-a,u=e.width/2,l=e.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*u>Math.abs(o)*l?(s<0&&(l=-l),n=l*o/s,r=l):(o<0&&(u=-u),n=u,r=u*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(e){var t=r.map(r.range(o(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var i=e.node(n),a=i.rank;r.isUndefined(a)||(t[a][i.order]=n)})),t},normalizeRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var i=e.node(n);r.has(i,"rank")&&(i.rank-=t)}))},removeEmptyRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var i=e.node(r).rank-t;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%a!=0?--i:i&&r.forEach(t,(function(t){e.node(t).rank+=i}))}))},addBorderNode:function(e,t,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(e,"border",i,t)},maxRank:o,partition:function(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n},time:function(e,t){var n=r.now();try{return t()}finally{console.log(e+" time: "+(r.now()-n)+"ms")}},notime:function(e,t){return t()}}},50665:e=>{e.exports="0.8.5"},39254:(e,t,n)=>{var r=n(44020);e.exports={Graph:r.Graph,json:n(89063),alg:n(2757),version:r.version}},47205:(e,t,n)=>{var r=n(43329);e.exports=function(e){var t,n={},i=[];function a(i){r.has(n,i)||(n[i]=!0,t.push(i),r.each(e.successors(i),a),r.each(e.predecessors(i),a))}return r.each(e.nodes(),(function(e){t=[],a(e),t.length&&i.push(t)})),i}},56658:(e,t,n)=>{var r=n(43329);function i(e,t,n,a,o,s){r.has(a,t)||(a[t]=!0,n||s.push(t),r.each(o(t),(function(t){i(e,t,n,a,o,s)})),n&&s.push(t))}e.exports=function(e,t,n){r.isArray(t)||(t=[t]);var a=(e.isDirected()?e.successors:e.neighbors).bind(e),o=[],s={};return r.each(t,(function(t){if(!e.hasNode(t))throw new Error("Graph does not have node: "+t);i(e,t,"post"===n,s,a,o)})),o}},41884:(e,t,n)=>{var r=n(42081),i=n(43329);e.exports=function(e,t,n){return i.transform(e.nodes(),(function(i,a){i[a]=r(e,a,t,n)}),{})}},42081:(e,t,n)=>{var r=n(43329),i=n(35472);e.exports=function(e,t,n,r){return function(e,t,n,r){var a,o,s={},u=new i,l=function(e){var t=e.v!==a?e.v:e.w,r=s[t],i=n(e),l=o.distance+i;if(i<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+e+" Weight: "+i);l<r.distance&&(r.distance=l,r.predecessor=a,u.decrease(t,l))};e.nodes().forEach((function(e){var n=e===t?0:Number.POSITIVE_INFINITY;s[e]={distance:n},u.add(e,n)}));for(;u.size()>0&&(a=u.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(l);return s}(e,String(t),n||a,r||function(t){return e.outEdges(t)})};var a=r.constant(1)},40641:(e,t,n)=>{var r=n(43329),i=n(45379);e.exports=function(e){return r.filter(i(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}},13917:(e,t,n)=>{var r=n(43329);e.exports=function(e,t,n){return function(e,t,n){var r={},i=e.nodes();return i.forEach((function(e){r[e]={},r[e][e]={distance:0},i.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var i=n.v===e?n.w:n.v,a=t(n);r[e][i]={distance:a,predecessor:e}}))})),i.forEach((function(e){var t=r[e];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[e],i=t[n],o=a[n],s=r.distance+i.distance;s<o.distance&&(o.distance=s,o.predecessor=i.predecessor)}))}))})),r}(e,t||i,n||function(t){return e.outEdges(t)})};var i=r.constant(1)},2757:(e,t,n)=>{e.exports={components:n(47205),dijkstra:n(42081),dijkstraAll:n(41884),findCycles:n(40641),floydWarshall:n(13917),isAcyclic:n(66069),postorder:n(49444),preorder:n(54911),prim:n(73873),tarjan:n(45379),topsort:n(85954)}},66069:(e,t,n)=>{var r=n(85954);e.exports=function(e){try{r(e)}catch(t){if(t instanceof r.CycleException)return!1;throw t}return!0}},49444:(e,t,n)=>{var r=n(56658);e.exports=function(e,t){return r(e,t,"post")}},54911:(e,t,n)=>{var r=n(56658);e.exports=function(e,t){return r(e,t,"pre")}},73873:(e,t,n)=>{var r=n(43329),i=n(14015),a=n(35472);e.exports=function(e,t){var n,o=new i,s={},u=new a;function l(e){var r=e.v===n?e.w:e.v,i=u.priority(r);if(void 0!==i){var a=t(e);a<i&&(s[r]=n,u.decrease(r,a))}}if(0===e.nodeCount())return o;r.each(e.nodes(),(function(e){u.add(e,Number.POSITIVE_INFINITY),o.setNode(e)})),u.decrease(e.nodes()[0],0);var c=!1;for(;u.size()>0;){if(n=u.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(c)throw new Error("Input graph is not connected: "+e);c=!0}e.nodeEdges(n).forEach(l)}return o}},45379:(e,t,n)=>{var r=n(43329);e.exports=function(e){var t=0,n=[],i={},a=[];function o(s){var u=i[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach((function(e){r.has(i,e)?i[e].onStack&&(u.lowlink=Math.min(u.lowlink,i[e].index)):(o(e),u.lowlink=Math.min(u.lowlink,i[e].lowlink))})),u.lowlink===u.index){var l,c=[];do{l=n.pop(),i[l].onStack=!1,c.push(l)}while(s!==l);a.push(c)}}return e.nodes().forEach((function(e){r.has(i,e)||o(e)})),a}},85954:(e,t,n)=>{var r=n(43329);function i(e){var t={},n={},i=[];if(r.each(e.sinks(),(function o(s){if(r.has(n,s))throw new a;r.has(t,s)||(n[s]=!0,t[s]=!0,r.each(e.predecessors(s),o),delete n[s],i.push(s))})),r.size(t)!==e.nodeCount())throw new a;return i}function a(){}e.exports=i,i.CycleException=a,a.prototype=new Error},35472:(e,t,n)=>{var r=n(43329);function i(){this._arr=[],this._keyIndices={}}e.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},i.prototype.has=function(e){return r.has(this._keyIndices,e)},i.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var i=this._arr,a=i.length;return n[e]=a,i.push({key:e,priority:t}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},i.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+e+" Old: "+this._arr[n].priority+" New: "+t);this._arr[n].priority=t,this._decrease(n)},i.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,i=e;n<t.length&&(i=t[n].priority<t[i].priority?n:i,r<t.length&&(i=t[r].priority<t[i].priority?r:i),i!==e&&(this._swap(e,i),this._heapify(i)))},i.prototype._decrease=function(e){for(var t,n=this._arr,r=n[e].priority;0!==e&&!(n[t=e>>1].priority<r);)this._swap(e,t),e=t},i.prototype._swap=function(e,t){var n=this._arr,r=this._keyIndices,i=n[e],a=n[t];n[e]=a,n[t]=i,r[a.key]=e,r[i.key]=t}},14015:(e,t,n)=>{"use strict";var r=n(43329);e.exports=a;var i="\0";function a(e){this._isDirected=!r.has(e,"directed")||e.directed,this._isMultigraph=!!r.has(e,"multigraph")&&e.multigraph,this._isCompound=!!r.has(e,"compound")&&e.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function o(e,t){e[t]?e[t]++:e[t]=1}function s(e,t){--e[t]||delete e[t]}function u(e,t,n,i){var a=""+t,o=""+n;if(!e&&a>o){var s=a;a=o,o=s}return a+"\x01"+o+"\x01"+(r.isUndefined(i)?"\0":i)}function l(e,t,n,r){var i=""+t,a=""+n;if(!e&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function c(e,t){return u(e,t.v,t.w,t.name)}a.prototype._nodeCount=0,a.prototype._edgeCount=0,a.prototype.isDirected=function(){return this._isDirected},a.prototype.isMultigraph=function(){return this._isMultigraph},a.prototype.isCompound=function(){return this._isCompound},a.prototype.setGraph=function(e){return this._label=e,this},a.prototype.graph=function(){return this._label},a.prototype.setDefaultNodeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultNodeLabelFn=e,this},a.prototype.nodeCount=function(){return this._nodeCount},a.prototype.nodes=function(){return r.keys(this._nodes)},a.prototype.sources=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._in[t])}))},a.prototype.sinks=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._out[t])}))},a.prototype.setNodes=function(e,t){var n=arguments,i=this;return r.each(e,(function(e){n.length>1?i.setNode(e,t):i.setNode(e)})),this},a.prototype.setNode=function(e,t){return r.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=i,this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},a.prototype.node=function(e){return this._nodes[e]},a.prototype.hasNode=function(e){return r.has(this._nodes,e)},a.prototype.removeNode=function(e){var t=this;if(r.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],r.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),r.each(r.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],r.each(r.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},a.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(t))t=i;else{for(var n=t+="";!r.isUndefined(n);n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},a.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},a.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==i)return t}},a.prototype.children=function(e){if(r.isUndefined(e)&&(e=i),this._isCompound){var t=this._children[e];if(t)return r.keys(t)}else{if(e===i)return this.nodes();if(this.hasNode(e))return[]}},a.prototype.predecessors=function(e){var t=this._preds[e];if(t)return r.keys(t)},a.prototype.successors=function(e){var t=this._sucs[e];if(t)return r.keys(t)},a.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return r.union(t,this.successors(e))},a.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},a.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),r.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var i={};function a(e){var r=n.parent(e);return void 0===r||t.hasNode(r)?(i[e]=r,r):r in i?i[r]:a(r)}return this._isCompound&&r.each(t.nodes(),(function(e){t.setParent(e,a(e))})),t},a.prototype.setDefaultEdgeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultEdgeLabelFn=e,this},a.prototype.edgeCount=function(){return this._edgeCount},a.prototype.edges=function(){return r.values(this._edgeObjs)},a.prototype.setPath=function(e,t){var n=this,i=arguments;return r.reduce(e,(function(e,r){return i.length>1?n.setEdge(e,r,t):n.setEdge(e,r),r})),this},a.prototype.setEdge=function(){var e,t,n,i,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(e=s.v,t=s.w,n=s.name,2===arguments.length&&(i=arguments[1],a=!0)):(e=s,t=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,t=""+t,r.isUndefined(n)||(n=""+n);var c=u(this._isDirected,e,t,n);if(r.has(this._edgeLabels,c))return a&&(this._edgeLabels[c]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[c]=a?i:this._defaultEdgeLabelFn(e,t,n);var d=l(this._isDirected,e,t,n);return e=d.v,t=d.w,Object.freeze(d),this._edgeObjs[c]=d,o(this._preds[t],e),o(this._sucs[e],t),this._in[t][c]=d,this._out[e][c]=d,this._edgeCount++,this},a.prototype.edge=function(e,t,n){var r=1===arguments.length?c(this._isDirected,arguments[0]):u(this._isDirected,e,t,n);return this._edgeLabels[r]},a.prototype.hasEdge=function(e,t,n){var i=1===arguments.length?c(this._isDirected,arguments[0]):u(this._isDirected,e,t,n);return r.has(this._edgeLabels,i)},a.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?c(this._isDirected,arguments[0]):u(this._isDirected,e,t,n),i=this._edgeObjs[r];return i&&(e=i.v,t=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],s(this._preds[t],e),s(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},a.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var i=r.values(n);return t?r.filter(i,(function(e){return e.v===t})):i}},a.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var i=r.values(n);return t?r.filter(i,(function(e){return e.w===t})):i}},a.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},44020:(e,t,n)=>{e.exports={Graph:n(14015),version:n(86471)}},89063:(e,t,n)=>{var r=n(43329),i=n(14015);function a(e){return r.map(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.isUndefined(n)||(a.value=n),r.isUndefined(i)||(a.parent=i),a}))}function o(e){return r.map(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.isUndefined(t.name)||(i.name=t.name),r.isUndefined(n)||(i.value=n),i}))}e.exports={write:function(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:a(e),edges:o(e)};r.isUndefined(e.graph())||(t.value=r.clone(e.graph()));return t},read:function(e){var t=new i(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}}},43329:(e,t,n)=>{var r;try{r={clone:n(13784),constant:n(551),each:n(72856),filter:n(69238),has:n(73915),isArray:n(19785),isEmpty:n(90104),isFunction:n(28338),isUndefined:n(92465),keys:n(50098),map:n(55807),reduce:n(34172),size:n(36417),transform:n(42673),union:n(68946),values:n(58185)}}catch(i){}r||(r=window._),e.exports=r},86471:e=>{e.exports="2.1.8"},87251:(e,t,n)=>{e.exports=n(21208)},21208:function(e,t){var n,r,i;(function(){var a,o,s,u,l,c,d,h,f,p,v,g,y,m,b;s=Math.floor,p=Math.min,o=function(e,t){return e<t?-1:e>t?1:0},f=function(e,t,n,r,i){var a;if(null==n&&(n=0),null==i&&(i=o),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)i(t,e[a=s((n+r)/2)])<0?r=a:n=a+1;return[].splice.apply(e,[n,n-n].concat(t)),t},c=function(e,t,n){return null==n&&(n=o),e.push(t),m(e,0,e.length-1,n)},l=function(e,t){var n,r;return null==t&&(t=o),n=e.pop(),e.length?(r=e[0],e[0]=n,b(e,0,t)):r=n,r},h=function(e,t,n){var r;return null==n&&(n=o),r=e[0],e[0]=t,b(e,0,n),r},d=function(e,t,n){var r;return null==n&&(n=o),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],b(e,0,n)),t},u=function(e,t){var n,r,i,a,u,l;for(null==t&&(t=o),a=function(){l=[];for(var t=0,n=s(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)l.push(t);return l}.apply(this).reverse(),u=[],r=0,i=a.length;r<i;r++)n=a[r],u.push(b(e,n,t));return u},y=function(e,t,n){var r;if(null==n&&(n=o),-1!==(r=e.indexOf(t)))return m(e,0,r,n),b(e,r,n)},v=function(e,t,n){var r,i,a,s,l;if(null==n&&(n=o),!(i=e.slice(0,t)).length)return i;for(u(i,n),a=0,s=(l=e.slice(t)).length;a<s;a++)r=l[a],d(i,r,n);return i.sort(n).reverse()},g=function(e,t,n){var r,i,a,s,c,d,h,v,g;if(null==n&&(n=o),10*t<=e.length){if(!(a=e.slice(0,t).sort(n)).length)return a;for(i=a[a.length-1],s=0,d=(h=e.slice(t)).length;s<d;s++)n(r=h[s],i)<0&&(f(a,r,0,null,n),a.pop(),i=a[a.length-1]);return a}for(u(e,n),g=[],c=0,v=p(t,e.length);0<=v?c<v:c>v;0<=v?++c:--c)g.push(l(e,n));return g},m=function(e,t,n,r){var i,a,s;for(null==r&&(r=o),i=e[n];n>t&&r(i,a=e[s=n-1>>1])<0;)e[n]=a,n=s;return e[n]=i},b=function(e,t,n){var r,i,a,s,u;for(null==n&&(n=o),i=e.length,u=t,a=e[t],r=2*t+1;r<i;)(s=r+1)<i&&!(n(e[r],e[s])<0)&&(r=s),e[t]=e[r],r=2*(t=r)+1;return e[t]=a,m(e,u,t,n)},a=function(){function e(e){this.cmp=null!=e?e:o,this.nodes=[]}return e.push=c,e.pop=l,e.replace=h,e.pushpop=d,e.heapify=u,e.updateItem=y,e.nlargest=v,e.nsmallest=g,e.prototype.push=function(e){return c(this.nodes,e,this.cmp)},e.prototype.pop=function(){return l(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return h(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return d(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return u(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return y(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),r=[],void 0===(i="function"==typeof(n=function(){return a})?n.apply(t,r):n)||(e.exports=i)}).call(this)},82545:(e,t,n)=>{var r=n(81822)(n(77400),"DataView");e.exports=r},96586:(e,t,n)=>{var r=n(57753),i=n(82452),a=n(22115),o=n(38256),s=n(67426);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=o,u.prototype.set=s,e.exports=u},36301:(e,t,n)=>{var r=n(69417),i=n(72470),a=n(66165),o=n(71873),s=n(52556);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=o,u.prototype.set=s,e.exports=u},44538:(e,t,n)=>{var r=n(81822)(n(77400),"Map");e.exports=r},74554:(e,t,n)=>{var r=n(39448),i=n(7738),a=n(66575),o=n(7238),s=n(38738);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=o,u.prototype.set=s,e.exports=u},64825:(e,t,n)=>{var r=n(81822)(n(77400),"Promise");e.exports=r},46151:(e,t,n)=>{var r=n(81822)(n(77400),"Set");e.exports=r},52485:(e,t,n)=>{var r=n(74554),i=n(38639),a=n(88379);function o(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}o.prototype.add=o.prototype.push=i,o.prototype.has=a,e.exports=o},23694:(e,t,n)=>{var r=n(36301),i=n(7354),a=n(5863),o=n(12367),s=n(90748),u=n(97569);function l(e){var t=this.__data__=new r(e);this.size=t.size}l.prototype.clear=i,l.prototype.delete=a,l.prototype.get=o,l.prototype.has=s,l.prototype.set=u,e.exports=l},96539:(e,t,n)=>{var r=n(77400).Symbol;e.exports=r},59942:(e,t,n)=>{var r=n(77400).Uint8Array;e.exports=r},66902:(e,t,n)=>{var r=n(81822)(n(77400),"WeakMap");e.exports=r},79349:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},80594:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},10263:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}},58095:(e,t,n)=>{var r=n(8817);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},21796:e=>{e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}},98213:(e,t,n)=>{var r=n(24701),i=n(2900),a=n(19785),o=n(43854),s=n(42383),u=n(48519),l=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),c=!n&&i(e),d=!n&&!c&&o(e),h=!n&&!c&&!d&&u(e),f=n||c||d||h,p=f?r(e.length,String):[],v=p.length;for(var g in e)!t&&!l.call(e,g)||f&&("length"==g||d&&("offset"==g||"parent"==g)||h&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,v))||p.push(g);return p}},66070:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},97141:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},6446:e=>{e.exports=function(e,t,n,r){var i=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}},90756:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},46008:(e,t,n)=>{var r=n(50517)("length");e.exports=r},73140:(e,t,n)=>{var r=n(88799),i=n(85638);e.exports=function(e,t,n){(void 0!==n&&!i(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},71928:(e,t,n)=>{var r=n(88799),i=n(85638),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];a.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},93382:(e,t,n)=>{var r=n(85638);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},41876:(e,t,n)=>{var r=n(35159),i=n(50098);e.exports=function(e,t){return e&&r(t,i(t),e)}},5947:(e,t,n)=>{var r=n(35159),i=n(13996);e.exports=function(e,t){return e&&r(t,i(t),e)}},88799:(e,t,n)=>{var r=n(42630);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},40699:(e,t,n)=>{var r=n(23694),i=n(80594),a=n(71928),o=n(41876),s=n(5947),u=n(2734),l=n(37561),c=n(77262),d=n(37048),h=n(51385),f=n(39759),p=n(3533),v=n(86541),g=n(2078),y=n(97635),m=n(19785),b=n(43854),x=n(98247),w=n(11611),E=n(47614),k=n(50098),_=n(13996),C="[object Arguments]",S="[object Function]",P="[object Object]",D={};D[C]=D["[object Array]"]=D["[object ArrayBuffer]"]=D["[object DataView]"]=D["[object Boolean]"]=D["[object Date]"]=D["[object Float32Array]"]=D["[object Float64Array]"]=D["[object Int8Array]"]=D["[object Int16Array]"]=D["[object Int32Array]"]=D["[object Map]"]=D["[object Number]"]=D[P]=D["[object RegExp]"]=D["[object Set]"]=D["[object String]"]=D["[object Symbol]"]=D["[object Uint8Array]"]=D["[object Uint8ClampedArray]"]=D["[object Uint16Array]"]=D["[object Uint32Array]"]=!0,D["[object Error]"]=D[S]=D["[object WeakMap]"]=!1,e.exports=function e(t,n,T,M,B,N){var I,O=1&n,z=2&n,L=4&n;if(T&&(I=B?T(t,M,B,N):T(t)),void 0!==I)return I;if(!w(t))return t;var A=m(t);if(A){if(I=v(t),!O)return l(t,I)}else{var j=p(t),R=j==S||"[object GeneratorFunction]"==j;if(b(t))return u(t,O);if(j==P||j==C||R&&!B){if(I=z||R?{}:y(t),!O)return z?d(t,s(I,t)):c(t,o(I,t))}else{if(!D[j])return B?t:{};I=g(t,j,O)}}N||(N=new r);var F=N.get(t);if(F)return F;N.set(t,I),E(t)?t.forEach((function(r){I.add(e(r,n,T,r,t,N))})):x(t)&&t.forEach((function(r,i){I.set(i,e(r,n,T,i,t,N))}));var V=A?void 0:(L?z?f:h:z?_:k)(t);return i(V||t,(function(r,i){V&&(r=t[i=r]),a(I,i,e(r,n,T,i,t,N))})),I}},80158:(e,t,n)=>{var r=n(11611),i=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},52033:(e,t,n)=>{var r=n(26194),i=n(26789)(r);e.exports=i},58403:(e,t,n)=>{var r=n(55193);e.exports=function(e,t,n){for(var i=-1,a=e.length;++i<a;){var o=e[i],s=t(o);if(null!=s&&(void 0===u?s==s&&!r(s):n(s,u)))var u=s,l=o}return l}},98129:(e,t,n)=>{var r=n(52033);e.exports=function(e,t){var n=[];return r(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}},95372:e=>{e.exports=function(e,t,n,r){for(var i=e.length,a=n+(r?1:-1);r?a--:++a<i;)if(t(e[a],a,e))return a;return-1}},23545:(e,t,n)=>{var r=n(97141),i=n(72889);e.exports=function e(t,n,a,o,s){var u=-1,l=t.length;for(a||(a=i),s||(s=[]);++u<l;){var c=t[u];n>0&&a(c)?n>1?e(c,n-1,a,o,s):r(s,c):o||(s[s.length]=c)}return s}},49819:(e,t,n)=>{var r=n(18911)();e.exports=r},26194:(e,t,n)=>{var r=n(49819),i=n(50098);e.exports=function(e,t){return e&&r(e,t,i)}},79867:(e,t,n)=>{var r=n(76747),i=n(37948);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[i(t[n++])];return n&&n==a?e:void 0}},11324:(e,t,n)=>{var r=n(97141),i=n(19785);e.exports=function(e,t,n){var a=t(e);return i(e)?a:r(a,n(e))}},99736:(e,t,n)=>{var r=n(96539),i=n(34840),a=n(21258),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},59517:e=>{e.exports=function(e,t){return e>t}},30124:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e,n){return null!=e&&t.call(e,n)}},21610:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},8817:(e,t,n)=>{var r=n(95372),i=n(1129),a=n(58263);e.exports=function(e,t,n){return t==t?a(e,t,n):r(e,i,n)}},55829:(e,t,n)=>{var r=n(99736),i=n(92360);e.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},32866:(e,t,n)=>{var r=n(12772),i=n(92360);e.exports=function e(t,n,a,o,s){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,a,o,e,s))}},12772:(e,t,n)=>{var r=n(23694),i=n(27042),a=n(370),o=n(39584),s=n(3533),u=n(19785),l=n(43854),c=n(48519),d="[object Arguments]",h="[object Array]",f="[object Object]",p=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,v,g,y){var m=u(e),b=u(t),x=m?h:s(e),w=b?h:s(t),E=(x=x==d?f:x)==f,k=(w=w==d?f:w)==f,_=x==w;if(_&&l(e)){if(!l(t))return!1;m=!0,E=!1}if(_&&!E)return y||(y=new r),m||c(e)?i(e,t,n,v,g,y):a(e,t,x,n,v,g,y);if(!(1&n)){var C=E&&p.call(e,"__wrapped__"),S=k&&p.call(t,"__wrapped__");if(C||S){var P=C?e.value():e,D=S?t.value():t;return y||(y=new r),g(P,D,n,v,y)}}return!!_&&(y||(y=new r),o(e,t,n,v,g,y))}},57657:(e,t,n)=>{var r=n(3533),i=n(92360);e.exports=function(e){return i(e)&&"[object Map]"==r(e)}},19850:(e,t,n)=>{var r=n(23694),i=n(32866);e.exports=function(e,t,n,a){var o=n.length,s=o,u=!a;if(null==e)return!s;for(e=Object(e);o--;){var l=n[o];if(u&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++o<s;){var c=(l=n[o])[0],d=e[c],h=l[1];if(u&&l[2]){if(void 0===d&&!(c in e))return!1}else{var f=new r;if(a)var p=a(d,h,c,e,t,f);if(!(void 0===p?i(h,d,3,a,f):p))return!1}}return!0}},1129:e=>{e.exports=function(e){return e!=e}},46729:(e,t,n)=>{var r=n(28338),i=n(99678),a=n(11611),o=n(76532),s=/^\[object .+?Constructor\]$/,u=Function.prototype,l=Object.prototype,c=u.toString,d=l.hasOwnProperty,h=RegExp("^"+c.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?h:s).test(o(e))}},26903:(e,t,n)=>{var r=n(3533),i=n(92360);e.exports=function(e){return i(e)&&"[object Set]"==r(e)}},26972:(e,t,n)=>{var r=n(99736),i=n(84194),a=n(92360),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&i(e.length)&&!!o[r(e)]}},89278:(e,t,n)=>{var r=n(71410),i=n(57518),a=n(31137),o=n(19785),s=n(96001);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?o(e)?i(e[0],e[1]):r(e):s(e)}},20186:(e,t,n)=>{var r=n(56016),i=n(50962),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},59464:(e,t,n)=>{var r=n(11611),i=n(56016),a=n(21586),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=i(e),n=[];for(var s in e)("constructor"!=s||!t&&o.call(e,s))&&n.push(s);return n}},73818:e=>{e.exports=function(e,t){return e<t}},67375:(e,t,n)=>{var r=n(52033),i=n(80068);e.exports=function(e,t){var n=-1,a=i(e)?Array(e.length):[];return r(e,(function(e,r,i){a[++n]=t(e,r,i)})),a}},71410:(e,t,n)=>{var r=n(19850),i=n(68125),a=n(65042);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},57518:(e,t,n)=>{var r=n(32866),i=n(99729),a=n(79749),o=n(40318),s=n(68302),u=n(65042),l=n(37948);e.exports=function(e,t){return o(e)&&s(t)?u(l(e),t):function(n){var o=i(n,e);return void 0===o&&o===t?a(n,e):r(t,o,3)}}},40015:(e,t,n)=>{var r=n(23694),i=n(73140),a=n(49819),o=n(68867),s=n(11611),u=n(13996),l=n(97494);e.exports=function e(t,n,c,d,h){t!==n&&a(n,(function(a,u){if(h||(h=new r),s(a))o(t,n,u,c,e,d,h);else{var f=d?d(l(t,u),a,u+"",t,n,h):void 0;void 0===f&&(f=a),i(t,u,f)}}),u)}},68867:(e,t,n)=>{var r=n(73140),i=n(2734),a=n(63428),o=n(37561),s=n(97635),u=n(2900),l=n(19785),c=n(36468),d=n(43854),h=n(28338),f=n(11611),p=n(40861),v=n(48519),g=n(97494),y=n(89328);e.exports=function(e,t,n,m,b,x,w){var E=g(e,n),k=g(t,n),_=w.get(k);if(_)r(e,n,_);else{var C=x?x(E,k,n+"",e,t,w):void 0,S=void 0===C;if(S){var P=l(k),D=!P&&d(k),T=!P&&!D&&v(k);C=k,P||D||T?l(E)?C=E:c(E)?C=o(E):D?(S=!1,C=i(k,!0)):T?(S=!1,C=a(k,!0)):C=[]:p(k)||u(k)?(C=E,u(E)?C=y(E):f(E)&&!h(E)||(C=s(k))):S=!1}S&&(w.set(k,C),b(C,k,m,x,w),w.delete(k)),r(e,n,C)}}},98497:(e,t,n)=>{var r=n(66070),i=n(79867),a=n(89278),o=n(67375),s=n(73303),u=n(39334),l=n(96348),c=n(31137),d=n(19785);e.exports=function(e,t,n){t=t.length?r(t,(function(e){return d(e)?function(t){return i(t,1===e.length?e[0]:e)}:e})):[c];var h=-1;t=r(t,u(a));var f=o(e,(function(e,n,i){return{criteria:r(t,(function(t){return t(e)})),index:++h,value:e}}));return s(f,(function(e,t){return l(e,t,n)}))}},63005:(e,t,n)=>{var r=n(10228),i=n(79749);e.exports=function(e,t){return r(e,t,(function(t,n){return i(e,n)}))}},10228:(e,t,n)=>{var r=n(79867),i=n(78859),a=n(76747);e.exports=function(e,t,n){for(var o=-1,s=t.length,u={};++o<s;){var l=t[o],c=r(e,l);n(c,l)&&i(u,a(l,e),c)}return u}},50517:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},10301:(e,t,n)=>{var r=n(79867);e.exports=function(e){return function(t){return r(t,e)}}},18365:e=>{var t=Math.ceil,n=Math.max;e.exports=function(e,r,i,a){for(var o=-1,s=n(t((r-e)/(i||1)),0),u=Array(s);s--;)u[a?s:++o]=e,e+=i;return u}},19356:e=>{e.exports=function(e,t,n,r,i){return i(e,(function(e,i,a){n=r?(r=!1,e):t(n,e,i,a)})),n}},1197:(e,t,n)=>{var r=n(31137),i=n(11871),a=n(63132);e.exports=function(e,t){return a(i(e,t,r),e+"")}},78859:(e,t,n)=>{var r=n(71928),i=n(76747),a=n(42383),o=n(11611),s=n(37948);e.exports=function(e,t,n,u){if(!o(e))return e;for(var l=-1,c=(t=i(t,e)).length,d=c-1,h=e;null!=h&&++l<c;){var f=s(t[l]),p=n;if("__proto__"===f||"constructor"===f||"prototype"===f)return e;if(l!=d){var v=h[f];void 0===(p=u?u(v,f,h):void 0)&&(p=o(v)?v:a(t[l+1])?[]:{})}r(h,f,p),h=h[f]}return e}},54459:(e,t,n)=>{var r=n(551),i=n(42630),a=n(31137),o=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;e.exports=o},73303:e=>{e.exports=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}},24701:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},34282:(e,t,n)=>{var r=n(96539),i=n(66070),a=n(19785),o=n(55193),s=r?r.prototype:void 0,u=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return u?u.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},74833:(e,t,n)=>{var r=n(56127),i=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(i,""):e}},39334:e=>{e.exports=function(e){return function(t){return e(t)}}},92198:(e,t,n)=>{var r=n(52485),i=n(58095),a=n(21796),o=n(65581),s=n(47111),u=n(43735);e.exports=function(e,t,n){var l=-1,c=i,d=e.length,h=!0,f=[],p=f;if(n)h=!1,c=a;else if(d>=200){var v=t?null:s(e);if(v)return u(v);h=!1,c=o,p=new r}else p=t?[]:f;e:for(;++l<d;){var g=e[l],y=t?t(g):g;if(g=n||0!==g?g:0,h&&y==y){for(var m=p.length;m--;)if(p[m]===y)continue e;t&&p.push(y),f.push(g)}else c(p,y,n)||(p!==f&&p.push(y),f.push(g))}return f}},42231:(e,t,n)=>{var r=n(66070);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},5024:e=>{e.exports=function(e,t,n){for(var r=-1,i=e.length,a=t.length,o={};++r<i;){var s=r<a?t[r]:void 0;n(o,e[r],s)}return o}},65581:e=>{e.exports=function(e,t){return e.has(t)}},62079:(e,t,n)=>{var r=n(31137);e.exports=function(e){return"function"==typeof e?e:r}},76747:(e,t,n)=>{var r=n(19785),i=n(40318),a=n(23419),o=n(65567);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:a(o(e))}},95825:(e,t,n)=>{var r=n(59942);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},2734:(e,t,n)=>{e=n.nmd(e);var r=n(77400),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}},61859:(e,t,n)=>{var r=n(95825);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},9377:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},24116:(e,t,n)=>{var r=n(96539),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},63428:(e,t,n)=>{var r=n(95825);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},17845:(e,t,n)=>{var r=n(55193);e.exports=function(e,t){if(e!==t){var n=void 0!==e,i=null===e,a=e==e,o=r(e),s=void 0!==t,u=null===t,l=t==t,c=r(t);if(!u&&!c&&!o&&e>t||o&&s&&l&&!u&&!c||i&&s&&l||!n&&l||!a)return 1;if(!i&&!o&&!c&&e<t||c&&n&&a&&!i&&!o||u&&n&&a||!s&&a||!l)return-1}return 0}},96348:(e,t,n)=>{var r=n(17845);e.exports=function(e,t,n){for(var i=-1,a=e.criteria,o=t.criteria,s=a.length,u=n.length;++i<s;){var l=r(a[i],o[i]);if(l)return i>=u?l:l*("desc"==n[i]?-1:1)}return e.index-t.index}},37561:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},35159:(e,t,n)=>{var r=n(71928),i=n(88799);e.exports=function(e,t,n,a){var o=!n;n||(n={});for(var s=-1,u=t.length;++s<u;){var l=t[s],c=a?a(n[l],e[l],l,n,e):void 0;void 0===c&&(c=e[l]),o?i(n,l,c):r(n,l,c)}return n}},77262:(e,t,n)=>{var r=n(35159),i=n(83080);e.exports=function(e,t){return r(e,i(e),t)}},37048:(e,t,n)=>{var r=n(35159),i=n(30791);e.exports=function(e,t){return r(e,i(e),t)}},64937:(e,t,n)=>{var r=n(77400)["__core-js_shared__"];e.exports=r},7270:(e,t,n)=>{var r=n(1197),i=n(57535);e.exports=function(e){return r((function(t,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),t=Object(t);++r<a;){var u=n[r];u&&e(t,u,r,o)}return t}))}},26789:(e,t,n)=>{var r=n(80068);e.exports=function(e,t){return function(n,i){if(null==n)return n;if(!r(n))return e(n,i);for(var a=n.length,o=t?a:-1,s=Object(n);(t?o--:++o<a)&&!1!==i(s[o],o,s););return n}}},18911:e=>{e.exports=function(e){return function(t,n,r){for(var i=-1,a=Object(t),o=r(t),s=o.length;s--;){var u=o[e?s:++i];if(!1===n(a[u],u,a))break}return t}}},56632:(e,t,n)=>{var r=n(89278),i=n(80068),a=n(50098);e.exports=function(e){return function(t,n,o){var s=Object(t);if(!i(t)){var u=r(n,3);t=a(t),n=function(e){return u(s[e],e,s)}}var l=e(t,n,o);return l>-1?s[u?t[l]:l]:void 0}}},55294:(e,t,n)=>{var r=n(18365),i=n(57535),a=n(94919);e.exports=function(e){return function(t,n,o){return o&&"number"!=typeof o&&i(t,n,o)&&(n=o=void 0),t=a(t),void 0===n?(n=t,t=0):n=a(n),o=void 0===o?t<n?1:-1:a(o),r(t,n,o,e)}}},47111:(e,t,n)=>{var r=n(46151),i=n(50344),a=n(43735),o=r&&1/a(new r([,-0]))[1]==1/0?function(e){return new r(e)}:i;e.exports=o},42630:(e,t,n)=>{var r=n(81822),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},27042:(e,t,n)=>{var r=n(52485),i=n(90756),a=n(65581);e.exports=function(e,t,n,o,s,u){var l=1&n,c=e.length,d=t.length;if(c!=d&&!(l&&d>c))return!1;var h=u.get(e),f=u.get(t);if(h&&f)return h==t&&f==e;var p=-1,v=!0,g=2&n?new r:void 0;for(u.set(e,t),u.set(t,e);++p<c;){var y=e[p],m=t[p];if(o)var b=l?o(m,y,p,t,e,u):o(y,m,p,e,t,u);if(void 0!==b){if(b)continue;v=!1;break}if(g){if(!i(t,(function(e,t){if(!a(g,t)&&(y===e||s(y,e,n,o,u)))return g.push(t)}))){v=!1;break}}else if(y!==m&&!s(y,m,n,o,u)){v=!1;break}}return u.delete(e),u.delete(t),v}},370:(e,t,n)=>{var r=n(96539),i=n(59942),a=n(85638),o=n(27042),s=n(19383),u=n(43735),l=r?r.prototype:void 0,c=l?l.valueOf:void 0;e.exports=function(e,t,n,r,l,d,h){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var f=s;case"[object Set]":var p=1&r;if(f||(f=u),e.size!=t.size&&!p)return!1;var v=h.get(e);if(v)return v==t;r|=2,h.set(e,t);var g=o(f(e),f(t),r,l,d,h);return h.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},39584:(e,t,n)=>{var r=n(51385),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,a,o,s){var u=1&n,l=r(e),c=l.length;if(c!=r(t).length&&!u)return!1;for(var d=c;d--;){var h=l[d];if(!(u?h in t:i.call(t,h)))return!1}var f=s.get(e),p=s.get(t);if(f&&p)return f==t&&p==e;var v=!0;s.set(e,t),s.set(t,e);for(var g=u;++d<c;){var y=e[h=l[d]],m=t[h];if(a)var b=u?a(m,y,h,t,e,s):a(y,m,h,e,t,s);if(!(void 0===b?y===m||o(y,m,n,a,s):b)){v=!1;break}g||(g="constructor"==h)}if(v&&!g){var x=e.constructor,w=t.constructor;x==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof x&&x instanceof x&&"function"==typeof w&&w instanceof w||(v=!1)}return s.delete(e),s.delete(t),v}},24288:(e,t,n)=>{var r=n(89754),i=n(11871),a=n(63132);e.exports=function(e){return a(i(e,void 0,r),e+"")}},39120:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},51385:(e,t,n)=>{var r=n(11324),i=n(83080),a=n(50098);e.exports=function(e){return r(e,a,i)}},39759:(e,t,n)=>{var r=n(11324),i=n(30791),a=n(13996);e.exports=function(e){return r(e,a,i)}},95899:(e,t,n)=>{var r=n(54479);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},68125:(e,t,n)=>{var r=n(68302),i=n(50098);e.exports=function(e){for(var t=i(e),n=t.length;n--;){var a=t[n],o=e[a];t[n]=[a,o,r(o)]}return t}},81822:(e,t,n)=>{var r=n(46729),i=n(15371);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},2173:(e,t,n)=>{var r=n(58023)(Object.getPrototypeOf,Object);e.exports=r},34840:(e,t,n)=>{var r=n(96539),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(u){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},83080:(e,t,n)=>{var r=n(10263),i=n(15937),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(e){return null==e?[]:(e=Object(e),r(o(e),(function(t){return a.call(e,t)})))}:i;e.exports=s},30791:(e,t,n)=>{var r=n(97141),i=n(2173),a=n(83080),o=n(15937),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=i(e);return t}:o;e.exports=s},3533:(e,t,n)=>{var r=n(82545),i=n(44538),a=n(64825),o=n(46151),s=n(66902),u=n(99736),l=n(76532),c="[object Map]",d="[object Promise]",h="[object Set]",f="[object WeakMap]",p="[object DataView]",v=l(r),g=l(i),y=l(a),m=l(o),b=l(s),x=u;(r&&x(new r(new ArrayBuffer(1)))!=p||i&&x(new i)!=c||a&&x(a.resolve())!=d||o&&x(new o)!=h||s&&x(new s)!=f)&&(x=function(e){var t=u(e),n="[object Object]"==t?e.constructor:void 0,r=n?l(n):"";if(r)switch(r){case v:return p;case g:return c;case y:return d;case m:return h;case b:return f}return t}),e.exports=x},15371:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},731:(e,t,n)=>{var r=n(76747),i=n(2900),a=n(19785),o=n(42383),s=n(84194),u=n(37948);e.exports=function(e,t,n){for(var l=-1,c=(t=r(t,e)).length,d=!1;++l<c;){var h=u(t[l]);if(!(d=null!=e&&n(e,h)))break;e=e[h]}return d||++l!=c?d:!!(c=null==e?0:e.length)&&s(c)&&o(h,c)&&(a(e)||i(e))}},25348:e=>{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},57753:(e,t,n)=>{var r=n(35718);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},82452:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},22115:(e,t,n)=>{var r=n(35718),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},38256:(e,t,n)=>{var r=n(35718),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},67426:(e,t,n)=>{var r=n(35718);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},86541:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},2078:(e,t,n)=>{var r=n(95825),i=n(61859),a=n(9377),o=n(24116),s=n(63428);e.exports=function(e,t,n){var u=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new u(+e);case"[object DataView]":return i(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":case"[object Set]":return new u;case"[object Number]":case"[object String]":return new u(e);case"[object RegExp]":return a(e);case"[object Symbol]":return o(e)}}},97635:(e,t,n)=>{var r=n(80158),i=n(2173),a=n(56016);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(i(e))}},72889:(e,t,n)=>{var r=n(96539),i=n(2900),a=n(19785),o=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||i(e)||!!(o&&e&&e[o])}},42383:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},57535:(e,t,n)=>{var r=n(85638),i=n(80068),a=n(42383),o=n(11611);e.exports=function(e,t,n){if(!o(n))return!1;var s=typeof t;return!!("number"==s?i(n)&&a(t,n.length):"string"==s&&t in n)&&r(n[t],e)}},40318:(e,t,n)=>{var r=n(19785),i=n(55193),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!a.test(e)||null!=t&&e in Object(t))}},54479:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},99678:(e,t,n)=>{var r,i=n(64937),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},56016:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},68302:(e,t,n)=>{var r=n(11611);e.exports=function(e){return e==e&&!r(e)}},69417:e=>{e.exports=function(){this.__data__=[],this.size=0}},72470:(e,t,n)=>{var r=n(93382),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},66165:(e,t,n)=>{var r=n(93382);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},71873:(e,t,n)=>{var r=n(93382);e.exports=function(e){return r(this.__data__,e)>-1}},52556:(e,t,n)=>{var r=n(93382);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},39448:(e,t,n)=>{var r=n(96586),i=n(36301),a=n(44538);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},7738:(e,t,n)=>{var r=n(95899);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},66575:(e,t,n)=>{var r=n(95899);e.exports=function(e){return r(this,e).get(e)}},7238:(e,t,n)=>{var r=n(95899);e.exports=function(e){return r(this,e).has(e)}},38738:(e,t,n)=>{var r=n(95899);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},19383:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},65042:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},2941:(e,t,n)=>{var r=n(16651);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},35718:(e,t,n)=>{var r=n(81822)(Object,"create");e.exports=r},50962:(e,t,n)=>{var r=n(58023)(Object.keys,Object);e.exports=r},21586:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},18125:(e,t,n)=>{e=n.nmd(e);var r=n(39120),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,o=a&&a.exports===i&&r.process,s=function(){try{var e=a&&a.require&&a.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(t){}}();e.exports=s},21258:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},58023:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},11871:(e,t,n)=>{var r=n(79349),i=Math.max;e.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var a=arguments,o=-1,s=i(a.length-t,0),u=Array(s);++o<s;)u[o]=a[t+o];o=-1;for(var l=Array(t+1);++o<t;)l[o]=a[o];return l[t]=n(u),r(e,this,l)}}},77400:(e,t,n)=>{var r=n(39120),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},97494:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}},38639:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},88379:e=>{e.exports=function(e){return this.__data__.has(e)}},43735:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},63132:(e,t,n)=>{var r=n(54459),i=n(49591)(r);e.exports=i},49591:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var i=t(),a=16-(i-r);if(r=i,a>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},7354:(e,t,n)=>{var r=n(36301);e.exports=function(){this.__data__=new r,this.size=0}},5863:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},12367:e=>{e.exports=function(e){return this.__data__.get(e)}},90748:e=>{e.exports=function(e){return this.__data__.has(e)}},97569:(e,t,n)=>{var r=n(36301),i=n(44538),a=n(74554);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(e,t),this.size=n.size,this}},58263:e=>{e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}},64090:(e,t,n)=>{var r=n(46008),i=n(25348),a=n(44088);e.exports=function(e){return i(e)?a(e):r(e)}},23419:(e,t,n)=>{var r=n(2941),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(a,"$1"):n||e)})),t}));e.exports=o},37948:(e,t,n)=>{var r=n(55193);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},76532:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},56127:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},44088:e=>{var t="[\\ud800-\\udfff]",n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",r="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",o="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+n+"|"+r+")"+"?",u="[\\ufe0e\\ufe0f]?",l=u+s+("(?:\\u200d(?:"+[i,a,o].join("|")+")"+u+s+")*"),c="(?:"+[i+n+"?",n,a,o,t].join("|")+")",d=RegExp(r+"(?="+r+")|"+c+l,"g");e.exports=function(e){for(var t=d.lastIndex=0;d.test(e);)++t;return t}},13784:(e,t,n)=>{var r=n(40699);e.exports=function(e){return r(e,4)}},30454:(e,t,n)=>{var r=n(40699);e.exports=function(e){return r(e,5)}},551:e=>{e.exports=function(e){return function(){return e}}},66726:(e,t,n)=>{var r=n(11611),i=n(82846),a=n(91936),o=Math.max,s=Math.min;e.exports=function(e,t,n){var u,l,c,d,h,f,p=0,v=!1,g=!1,y=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=u,r=l;return u=l=void 0,p=t,d=e.apply(r,n)}function b(e){return p=e,h=setTimeout(w,t),v?m(e):d}function x(e){var n=e-f;return void 0===f||n>=t||n<0||g&&e-p>=c}function w(){var e=i();if(x(e))return E(e);h=setTimeout(w,function(e){var n=t-(e-f);return g?s(n,c-(e-p)):n}(e))}function E(e){return h=void 0,y&&u?m(e):(u=l=void 0,d)}function k(){var e=i(),n=x(e);if(u=arguments,l=this,f=e,n){if(void 0===h)return b(f);if(g)return clearTimeout(h),h=setTimeout(w,t),m(f)}return void 0===h&&(h=setTimeout(w,t)),d}return t=a(t)||0,r(n)&&(v=!!n.leading,c=(g="maxWait"in n)?o(a(n.maxWait)||0,t):c,y="trailing"in n?!!n.trailing:y),k.cancel=function(){void 0!==h&&clearTimeout(h),p=0,u=f=l=h=void 0},k.flush=function(){return void 0===h?d:E(i())},k}},70236:(e,t,n)=>{var r=n(1197),i=n(85638),a=n(57535),o=n(13996),s=Object.prototype,u=s.hasOwnProperty,l=r((function(e,t){e=Object(e);var n=-1,r=t.length,l=r>2?t[2]:void 0;for(l&&a(t[0],t[1],l)&&(r=1);++n<r;)for(var c=t[n],d=o(c),h=-1,f=d.length;++h<f;){var p=d[h],v=e[p];(void 0===v||i(v,s[p])&&!u.call(e,p))&&(e[p]=c[p])}return e}));e.exports=l},72856:(e,t,n)=>{e.exports=n(47003)},85638:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},69238:(e,t,n)=>{var r=n(10263),i=n(98129),a=n(89278),o=n(19785);e.exports=function(e,t){return(o(e)?r:i)(e,a(t,3))}},64925:(e,t,n)=>{var r=n(56632)(n(66259));e.exports=r},66259:(e,t,n)=>{var r=n(95372),i=n(89278),a=n(47991),o=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var u=null==n?0:a(n);return u<0&&(u=o(s+u,0)),r(e,i(t,3),u)}},89754:(e,t,n)=>{var r=n(23545);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},47003:(e,t,n)=>{var r=n(80594),i=n(52033),a=n(62079),o=n(19785);e.exports=function(e,t){return(o(e)?r:i)(e,a(t))}},3544:(e,t,n)=>{var r=n(49819),i=n(62079),a=n(13996);e.exports=function(e,t){return null==e?e:r(e,i(t),a)}},99729:(e,t,n)=>{var r=n(79867);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},73915:(e,t,n)=>{var r=n(30124),i=n(731);e.exports=function(e,t){return null!=e&&i(e,t,r)}},79749:(e,t,n)=>{var r=n(21610),i=n(731);e.exports=function(e,t){return null!=e&&i(e,t,r)}},31137:e=>{e.exports=function(e){return e}},2900:(e,t,n)=>{var r=n(55829),i=n(92360),a=Object.prototype,o=a.hasOwnProperty,s=a.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(e){return i(e)&&o.call(e,"callee")&&!s.call(e,"callee")};e.exports=u},19785:e=>{var t=Array.isArray;e.exports=t},80068:(e,t,n)=>{var r=n(28338),i=n(84194);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},36468:(e,t,n)=>{var r=n(80068),i=n(92360);e.exports=function(e){return i(e)&&r(e)}},43854:(e,t,n)=>{e=n.nmd(e);var r=n(77400),i=n(57714),a=t&&!t.nodeType&&t,o=a&&e&&!e.nodeType&&e,s=o&&o.exports===a?r.Buffer:void 0,u=(s?s.isBuffer:void 0)||i;e.exports=u},90104:(e,t,n)=>{var r=n(20186),i=n(3533),a=n(2900),o=n(19785),s=n(80068),u=n(43854),l=n(56016),c=n(48519),d=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(o(e)||"string"==typeof e||"function"==typeof e.splice||u(e)||c(e)||a(e)))return!e.length;var t=i(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(l(e))return!r(e).length;for(var n in e)if(d.call(e,n))return!1;return!0}},28338:(e,t,n)=>{var r=n(99736),i=n(11611);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},84194:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},98247:(e,t,n)=>{var r=n(57657),i=n(39334),a=n(18125),o=a&&a.isMap,s=o?i(o):r;e.exports=s},11611:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},92360:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},40861:(e,t,n)=>{var r=n(99736),i=n(2173),a=n(92360),o=Function.prototype,s=Object.prototype,u=o.toString,l=s.hasOwnProperty,c=u.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=l.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==c}},47614:(e,t,n)=>{var r=n(26903),i=n(39334),a=n(18125),o=a&&a.isSet,s=o?i(o):r;e.exports=s},47206:(e,t,n)=>{var r=n(99736),i=n(19785),a=n(92360);e.exports=function(e){return"string"==typeof e||!i(e)&&a(e)&&"[object String]"==r(e)}},55193:(e,t,n)=>{var r=n(99736),i=n(92360);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},48519:(e,t,n)=>{var r=n(26972),i=n(39334),a=n(18125),o=a&&a.isTypedArray,s=o?i(o):r;e.exports=s},92465:e=>{e.exports=function(e){return void 0===e}},50098:(e,t,n)=>{var r=n(98213),i=n(20186),a=n(80068);e.exports=function(e){return a(e)?r(e):i(e)}},13996:(e,t,n)=>{var r=n(98213),i=n(59464),a=n(80068);e.exports=function(e){return a(e)?r(e,!0):i(e)}},31159:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},55807:(e,t,n)=>{var r=n(66070),i=n(89278),a=n(67375),o=n(19785);e.exports=function(e,t){return(o(e)?r:a)(e,i(t,3))}},25389:(e,t,n)=>{var r=n(88799),i=n(26194),a=n(89278);e.exports=function(e,t){var n={};return t=a(t,3),i(e,(function(e,i,a){r(n,i,t(e,i,a))})),n}},7620:(e,t,n)=>{var r=n(58403),i=n(59517),a=n(31137);e.exports=function(e){return e&&e.length?r(e,a,i):void 0}},16651:(e,t,n)=>{var r=n(74554);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},15409:(e,t,n)=>{var r=n(40015),i=n(7270)((function(e,t,n){r(e,t,n)}));e.exports=i},14176:(e,t,n)=>{var r=n(58403),i=n(73818),a=n(31137);e.exports=function(e){return e&&e.length?r(e,a,i):void 0}},70201:(e,t,n)=>{var r=n(58403),i=n(89278),a=n(73818);e.exports=function(e,t){return e&&e.length?r(e,i(t,2),a):void 0}},50344:e=>{e.exports=function(){}},82846:(e,t,n)=>{var r=n(77400);e.exports=function(){return r.Date.now()}},14648:(e,t,n)=>{var r=n(63005),i=n(24288)((function(e,t){return null==e?{}:r(e,t)}));e.exports=i},96001:(e,t,n)=>{var r=n(50517),i=n(10301),a=n(40318),o=n(37948);e.exports=function(e){return a(e)?r(o(e)):i(e)}},4215:(e,t,n)=>{var r=n(55294)();e.exports=r},34172:(e,t,n)=>{var r=n(6446),i=n(52033),a=n(89278),o=n(19356),s=n(19785);e.exports=function(e,t,n){var u=s(e)?r:o,l=arguments.length<3;return u(e,a(t,4),n,l,i)}},47215:(e,t,n)=>{var r=n(78859);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},36417:(e,t,n)=>{var r=n(20186),i=n(3533),a=n(80068),o=n(47206),s=n(64090);e.exports=function(e){if(null==e)return 0;if(a(e))return o(e)?s(e):e.length;var t=i(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},95099:(e,t,n)=>{var r=n(23545),i=n(98497),a=n(1197),o=n(57535),s=a((function(e,t){if(null==e)return[];var n=t.length;return n>1&&o(e,t[0],t[1])?t=[]:n>2&&o(t[0],t[1],t[2])&&(t=[t[0]]),i(e,r(t,1),[])}));e.exports=s},15937:e=>{e.exports=function(){return[]}},57714:e=>{e.exports=function(){return!1}},94919:(e,t,n)=>{var r=n(91936),i=1/0;e.exports=function(e){return e?(e=r(e))===i||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},47991:(e,t,n)=>{var r=n(94919);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},91936:(e,t,n)=>{var r=n(74833),i=n(11611),a=n(55193),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||u.test(e)?l(e.slice(2),n?2:8):o.test(e)?NaN:+e}},40110:(e,t,n)=>{var r=n(66070),i=n(37561),a=n(19785),o=n(55193),s=n(23419),u=n(37948),l=n(65567);e.exports=function(e){return a(e)?r(e,u):o(e)?[e]:i(s(l(e)))}},89328:(e,t,n)=>{var r=n(35159),i=n(13996);e.exports=function(e){return r(e,i(e))}},65567:(e,t,n)=>{var r=n(34282);e.exports=function(e){return null==e?"":r(e)}},42673:(e,t,n)=>{var r=n(80594),i=n(80158),a=n(26194),o=n(89278),s=n(2173),u=n(19785),l=n(43854),c=n(28338),d=n(11611),h=n(48519);e.exports=function(e,t,n){var f=u(e),p=f||l(e)||h(e);if(t=o(t,4),null==n){var v=e&&e.constructor;n=p?f?new v:[]:d(e)&&c(v)?i(s(e)):{}}return(p?r:a)(e,(function(e,r,i){return t(n,e,r,i)})),n}},68946:(e,t,n)=>{var r=n(23545),i=n(1197),a=n(92198),o=n(36468),s=i((function(e){return a(r(e,1,o,!0))}));e.exports=s},46854:(e,t,n)=>{var r=n(65567),i=0;e.exports=function(e){var t=++i;return r(e)+t}},58185:(e,t,n)=>{var r=n(42231),i=n(50098);e.exports=function(e){return null==e?[]:r(e,i(e))}},11775:(e,t,n)=>{var r=n(71928),i=n(5024);e.exports=function(e,t){return i(e||[],t||[],r)}}}]); \ No newline at end of file diff --git a/assets/js/9262.4c68992b.js.LICENSE.txt b/assets/js/59262.fbc6c49f.js.LICENSE.txt similarity index 100% rename from assets/js/9262.4c68992b.js.LICENSE.txt rename to assets/js/59262.fbc6c49f.js.LICENSE.txt diff --git a/assets/js/59abedb6.abda1003.js b/assets/js/59abedb6.abda1003.js deleted file mode 100644 index c212a8f02af..00000000000 --- a/assets/js/59abedb6.abda1003.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[632],{48381:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/index","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/59abedb6.f14a4eb3.js b/assets/js/59abedb6.f14a4eb3.js new file mode 100644 index 00000000000..49ed84727f1 --- /dev/null +++ b/assets/js/59abedb6.f14a4eb3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80632],{48381:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/index","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5a3a719f.a86f940c.js b/assets/js/5a3a719f.a86f940c.js deleted file mode 100644 index d2d23ba63a3..00000000000 --- a/assets/js/5a3a719f.a86f940c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3109],{99402:a=>{a.exports=JSON.parse('{"label":"canary","permalink":"/blog/tags/canary","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5a3a719f.c216f3c6.js b/assets/js/5a3a719f.c216f3c6.js new file mode 100644 index 00000000000..2d0bcfbba3b --- /dev/null +++ b/assets/js/5a3a719f.c216f3c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43109],{99402:a=>{a.exports=JSON.parse('{"label":"canary","permalink":"/blog/tags/canary","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5b4d43ff.1a328eef.js b/assets/js/5b4d43ff.1a328eef.js deleted file mode 100644 index 2b7afc1274f..00000000000 --- a/assets/js/5b4d43ff.1a328eef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3058],{92095:e=>{e.exports=JSON.parse('{"label":"source","permalink":"/blog/tags/source","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5b4d43ff.764f8770.js b/assets/js/5b4d43ff.764f8770.js new file mode 100644 index 00000000000..9ee78d453ab --- /dev/null +++ b/assets/js/5b4d43ff.764f8770.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63058],{92095:e=>{e.exports=JSON.parse('{"label":"source","permalink":"/blog/tags/source","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/5c653e8d.39df2a71.js b/assets/js/5c653e8d.39df2a71.js deleted file mode 100644 index 1df8e08af50..00000000000 --- a/assets/js/5c653e8d.39df2a71.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6256],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),h=o,d=c["".concat(s,".").concat(h)]||c[h]||m[h]||r;return n?a.createElement(d,i(i({ref:t},u),{},{components:n})):a.createElement(d,i({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},80251:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},i=void 0,l={permalink:"/blog/2023-roadmap",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx",source:"@site/blog/2023-01-04_2023-roadmap.mdx",title:"What's in store for 2023",description:"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long",date:"2023-01-04T00:00:00.000Z",formattedDate:"January 4, 2023",tags:[{label:"roadmap",permalink:"/blog/tags/roadmap"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:5.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},prevItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"},nextItem:{title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",permalink:"/blog/v0.21"}},s={authorsImageUrls:[void 0]},p=[{value:"Year 2022 in review",id:"year-2022-in-review",level:2},{value:"Path to an official v1 release",id:"path-to-an-official-v1-release",level:2},{value:"Launching moonbase",id:"launching-moonbase",level:2},{value:"Launching proto",id:"launching-proto",level:2},{value:"Expanding language support",id:"expanding-language-support",level:2},{value:"Supporting release workflows",id:"supporting-release-workflows",level:2},{value:"More repository management tooling",id:"more-repository-management-tooling",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long\nroadmap."),(0,o.kt)("h2",{id:"year-2022-in-review"},"Year 2022 in review"),(0,o.kt)("p",null,"The original concept and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d"},"first commit of moon"),"\n(codenamed monolith) landed October 23rd, 2021. Eight months later, we\n",(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/tothemoonrepo/status/1527467865200136192"},"launched an alpha of moon")," to the\npublic on May 19th, 2022. Since then, we've landed 21 amazing releases based on feedback from the\ncommunity and our long-term vision, with some such features as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Linux musl, macOS silicon, and ARM support"),(0,o.kt)("li",{parentName:"ul"},"Full Node.js/JavaScript ecosystem support"),(0,o.kt)("li",{parentName:"ul"},"End-to-end caching and hashing of build artifacts"),(0,o.kt)("li",{parentName:"ul"},"Streamlined configuration"),(0,o.kt)("li",{parentName:"ul"},"Improved developer experience"),(0,o.kt)("li",{parentName:"ul"},"Massive performance improvements"),(0,o.kt)("li",{parentName:"ul"},"Automatic cache cleaning"),(0,o.kt)("li",{parentName:"ul"},"Code generation / scaffolding"),(0,o.kt)("li",{parentName:"ul"},"Dockerfile integration"),(0,o.kt)("li",{parentName:"ul"},"Remote caching"),(0,o.kt)("li",{parentName:"ul"},"New langauage agnostic toolchain"),(0,o.kt)("li",{parentName:"ul"},"Onboarding of 5 new languages: Rust, Go, PHP, Python, Ruby"),(0,o.kt)("li",{parentName:"ul"},"Rewritten project and dependency graphs"),(0,o.kt)("li",{parentName:"ul"},"Project-level toolchain overrides"),(0,o.kt)("li",{parentName:"ul"},"Project specific caching"),(0,o.kt)("li",{parentName:"ul"},"VSCode extension"),(0,o.kt)("li",{parentName:"ul"},"2 GitHub actions"),(0,o.kt)("li",{parentName:"ul"},"...and so much more!")),(0,o.kt)("p",null,"We're very proud with the quality and amount of features we've released in a 7 month timeframe. On\ntop of this, our ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/stargazers"},"GitHub stars")," have steadily passed\nthe 1k mark, ",(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@moonrepo/cli"},"npm")," downloads are 500 a week and\ngrowing, and our ",(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/tothemoonrepo"},"Twitter")," isn't doing too bad. This is only the\nstart, and we're not planning to go anywhere!"),(0,o.kt)("h2",{id:"path-to-an-official-v1-release"},"Path to an official v1 release"),(0,o.kt)("p",null,'A common question we receive is "When is v1 going to be released?", as some consumers are weary of\nusing a "beta" tool. We definitely understand, and as such, have posted a\n',(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/491"},"high-level overview")," of what we're hoping to land\nbefore we tag an official v1 release. It basically boils down to landing breaking changes (mainly\naround configuration) before v1, so that we avoid bumping to a v2 or v3 unnecessarily. We also want\nto land our ",(0,o.kt)("a",{parentName:"p",href:"#proto"},"toolchain changes")," and ",(0,o.kt)("a",{parentName:"p",href:"#moonbase"},"remote caching")," improvements before then."),(0,o.kt)("p",null,"Our current timeframe is by end of Q1, if not, early Q2."),(0,o.kt)("h2",{id:"launching-moonbase"},"Launching moonbase"),(0,o.kt)("p",null,"We haven't mentioned this name publicly yet, but now seems like the perfect time! For the past 6\nmonths we've been working a new web application and service called moonbase, which pairs nicely with\nmoon, as it provides additional functionality that can only be achieved by persisting information\nacross runs."),(0,o.kt)("p",null,"To start, this service provides ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/remote-cache"},"remote caching"),", which we're already\nusing in production. At this point in time, objects are stored in our moonrepo S3 buckets, but one\nof our major goals is to support storing objects in your private buckets, supporting additional\ncloud providers like Google Cloud and Azure, and in the long-term, a self-hosted / on-premises\nsolution."),(0,o.kt)("p",null,"But that's not all! moonbase will integrate deeply with ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/ci"},"continuous integration"),"\npipelines to generate insights, capture metrics, and provide near real-time dashboards. Our goal is\nto provide a holistic overview of your entire repository."),(0,o.kt)("p",null,"moonbase with publicly available remote caching is slated for end of Q1. CI integration is\ntentatively slated for Q2. We have even more features that we'll reveal in the future, so stay\ntuned!"),(0,o.kt)("h2",{id:"launching-proto"},"Launching proto"),(0,o.kt)("p",null,"Another tool we haven't mentioned yet is proto (name still in flux). proto is a standardized version\nmanager for programming languages and dependency managers. We've basically extracted our\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/toolchain"},"toolchain")," into a standalone library, as it's super beneficial for\nprojects and developers not using moon. It provides all the functionality you'd expect from a\nversion manager:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Downloading and installing specific versions"),(0,o.kt)("li",{parentName:"ul"},"Automatic version detection"),(0,o.kt)("li",{parentName:"ul"},"Updating PATH with the applicable version"),(0,o.kt)("li",{parentName:"ul"},"Generating shims"),(0,o.kt)("li",{parentName:"ul"},"Pinning shell, local, and global versions")),(0,o.kt)("p",null,"So how's this different from existing version managers like nvm or volta? To start, it's written in\nRust so it's ",(0,o.kt)("em",{parentName:"p"},"fast")," and doesn't suffer from being Bash only. Because of this, it's also\nmulti-platform and will work on Windows. But the biggest different is that proto is language\nagnostic and will support multiple languages. To start, it supports Node.js and Deno, but will be\nexpanded to support our other toolchain languages like Bun, PHP, Ruby, and Python. Another cool\nfeature is that it also manages versions of dependency managers like npm, yarn, and pnpm!"),(0,o.kt)("p",null,"We're planning to launch proto at the start of Q2."),(0,o.kt)("h2",{id:"expanding-language-support"},"Expanding language support"),(0,o.kt)("p",null,"Our initial goal for moon was to provide a first-class build system for the frontend ecosystem that\nfocused heavily on automation and the developer experience. We believe we've accomplished this goal,\nbut of course, nothing is ever actually complete, and so JavaScript, TypeScript, and Node.js support\nwill continually be improved."),(0,o.kt)("p",null,"However, that's not the entirety of the frontend ecosystem, as ",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/"},"Deno")," and\n",(0,o.kt)("a",{parentName:"p",href:"https://bun.sh/"},"Bun")," have been gaining traction this past year, and of course, moon will support\nboth of them as first-class platforms by end of year."),(0,o.kt)("p",null,"Futhermore, we recently landed tier 1 support for 5 new languages: Rust, Ruby, PHP, Python, and Go.\nOur end of year goal for these languages is to provide full tier 2 support. Tier 3 support is still\nan unknown, as we need to investigate the best possible way to integrate these languages into the\ntoolchain (this work is ongoing). We'll also add new languages based on demand."),(0,o.kt)("p",null,"With all that being said, this is our tenative timeline around\n",(0,o.kt)("a",{parentName:"p",href:"/docs#supported-languages"},"language support")," (which may shift at any time):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q1"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 1 support for Bun."),(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Deno."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q2"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Bun, PHP."),(0,o.kt)("li",{parentName:"ul"},"Tier 3 support for Deno."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q3"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Ruby, Python."),(0,o.kt)("li",{parentName:"ul"},"Tier 3 support for Bun."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q4"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Rust, Go.")))),(0,o.kt)("h2",{id:"supporting-release-workflows"},"Supporting release workflows"),(0,o.kt)("p",null,"moon currently excels at organizing projects, running tasks, and building artifacts, but it has no\nsupport for release workflows. This is everything from capturing changes, bumping versions,\ngenerating changelogs, and publishing to upstream registries. If you use\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/lerna/lerna"},"Lerna")," or ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/changesets/changesets"},"changesets"),",\nyou should be very familiar with this workflow."),(0,o.kt)("p",null,"Since moon supports monorepos and has in-depth knowledge of the project graph, we can support\nrelease workflows with ease. Our goal is to support this workflow (for all languages) from start to\nfinish by end of year, ideally much sooner than that!"),(0,o.kt)("h2",{id:"more-repository-management-tooling"},"More repository management tooling"),(0,o.kt)("p",null,"The other aspect of moon is that it's a repository management tool as well as a build system. We\nwant to embrace this even further by providing explicit functionality or automation when applicable.\nSome examples of this are in-repository secrets management, git hooks management, code ownership and\nquality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much\nmore."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5c653e8d.afb8bbd9.js b/assets/js/5c653e8d.afb8bbd9.js new file mode 100644 index 00000000000..1344ddd034d --- /dev/null +++ b/assets/js/5c653e8d.afb8bbd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56256],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),h=o,d=c["".concat(s,".").concat(h)]||c[h]||m[h]||r;return n?a.createElement(d,i(i({ref:t},u),{},{components:n})):a.createElement(d,i({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},80251:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},i=void 0,l={permalink:"/blog/2023-roadmap",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx",source:"@site/blog/2023-01-04_2023-roadmap.mdx",title:"What's in store for 2023",description:"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long",date:"2023-01-04T00:00:00.000Z",formattedDate:"January 4, 2023",tags:[{label:"roadmap",permalink:"/blog/tags/roadmap"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:5.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"2023-roadmap",title:"What's in store for 2023",authors:["milesj"],tags:["roadmap","moonbase","proto","toolchain"]},prevItem:{title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",permalink:"/blog/v0.22"},nextItem:{title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",permalink:"/blog/v0.21"}},s={authorsImageUrls:[void 0]},p=[{value:"Year 2022 in review",id:"year-2022-in-review",level:2},{value:"Path to an official v1 release",id:"path-to-an-official-v1-release",level:2},{value:"Launching moonbase",id:"launching-moonbase",level:2},{value:"Launching proto",id:"launching-proto",level:2},{value:"Expanding language support",id:"expanding-language-support",level:2},{value:"Supporting release workflows",id:"supporting-release-workflows",level:2},{value:"More repository management tooling",id:"more-repository-management-tooling",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long\nroadmap."),(0,o.kt)("h2",{id:"year-2022-in-review"},"Year 2022 in review"),(0,o.kt)("p",null,"The original concept and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d"},"first commit of moon"),"\n(codenamed monolith) landed October 23rd, 2021. Eight months later, we\n",(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/tothemoonrepo/status/1527467865200136192"},"launched an alpha of moon")," to the\npublic on May 19th, 2022. Since then, we've landed 21 amazing releases based on feedback from the\ncommunity and our long-term vision, with some such features as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Linux musl, macOS silicon, and ARM support"),(0,o.kt)("li",{parentName:"ul"},"Full Node.js/JavaScript ecosystem support"),(0,o.kt)("li",{parentName:"ul"},"End-to-end caching and hashing of build artifacts"),(0,o.kt)("li",{parentName:"ul"},"Streamlined configuration"),(0,o.kt)("li",{parentName:"ul"},"Improved developer experience"),(0,o.kt)("li",{parentName:"ul"},"Massive performance improvements"),(0,o.kt)("li",{parentName:"ul"},"Automatic cache cleaning"),(0,o.kt)("li",{parentName:"ul"},"Code generation / scaffolding"),(0,o.kt)("li",{parentName:"ul"},"Dockerfile integration"),(0,o.kt)("li",{parentName:"ul"},"Remote caching"),(0,o.kt)("li",{parentName:"ul"},"New langauage agnostic toolchain"),(0,o.kt)("li",{parentName:"ul"},"Onboarding of 5 new languages: Rust, Go, PHP, Python, Ruby"),(0,o.kt)("li",{parentName:"ul"},"Rewritten project and dependency graphs"),(0,o.kt)("li",{parentName:"ul"},"Project-level toolchain overrides"),(0,o.kt)("li",{parentName:"ul"},"Project specific caching"),(0,o.kt)("li",{parentName:"ul"},"VSCode extension"),(0,o.kt)("li",{parentName:"ul"},"2 GitHub actions"),(0,o.kt)("li",{parentName:"ul"},"...and so much more!")),(0,o.kt)("p",null,"We're very proud with the quality and amount of features we've released in a 7 month timeframe. On\ntop of this, our ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/stargazers"},"GitHub stars")," have steadily passed\nthe 1k mark, ",(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@moonrepo/cli"},"npm")," downloads are 500 a week and\ngrowing, and our ",(0,o.kt)("a",{parentName:"p",href:"https://twitter.com/tothemoonrepo"},"Twitter")," isn't doing too bad. This is only the\nstart, and we're not planning to go anywhere!"),(0,o.kt)("h2",{id:"path-to-an-official-v1-release"},"Path to an official v1 release"),(0,o.kt)("p",null,'A common question we receive is "When is v1 going to be released?", as some consumers are weary of\nusing a "beta" tool. We definitely understand, and as such, have posted a\n',(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/491"},"high-level overview")," of what we're hoping to land\nbefore we tag an official v1 release. It basically boils down to landing breaking changes (mainly\naround configuration) before v1, so that we avoid bumping to a v2 or v3 unnecessarily. We also want\nto land our ",(0,o.kt)("a",{parentName:"p",href:"#proto"},"toolchain changes")," and ",(0,o.kt)("a",{parentName:"p",href:"#moonbase"},"remote caching")," improvements before then."),(0,o.kt)("p",null,"Our current timeframe is by end of Q1, if not, early Q2."),(0,o.kt)("h2",{id:"launching-moonbase"},"Launching moonbase"),(0,o.kt)("p",null,"We haven't mentioned this name publicly yet, but now seems like the perfect time! For the past 6\nmonths we've been working a new web application and service called moonbase, which pairs nicely with\nmoon, as it provides additional functionality that can only be achieved by persisting information\nacross runs."),(0,o.kt)("p",null,"To start, this service provides ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/remote-cache"},"remote caching"),", which we're already\nusing in production. At this point in time, objects are stored in our moonrepo S3 buckets, but one\nof our major goals is to support storing objects in your private buckets, supporting additional\ncloud providers like Google Cloud and Azure, and in the long-term, a self-hosted / on-premises\nsolution."),(0,o.kt)("p",null,"But that's not all! moonbase will integrate deeply with ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/ci"},"continuous integration"),"\npipelines to generate insights, capture metrics, and provide near real-time dashboards. Our goal is\nto provide a holistic overview of your entire repository."),(0,o.kt)("p",null,"moonbase with publicly available remote caching is slated for end of Q1. CI integration is\ntentatively slated for Q2. We have even more features that we'll reveal in the future, so stay\ntuned!"),(0,o.kt)("h2",{id:"launching-proto"},"Launching proto"),(0,o.kt)("p",null,"Another tool we haven't mentioned yet is proto (name still in flux). proto is a standardized version\nmanager for programming languages and dependency managers. We've basically extracted our\n",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/toolchain"},"toolchain")," into a standalone library, as it's super beneficial for\nprojects and developers not using moon. It provides all the functionality you'd expect from a\nversion manager:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Downloading and installing specific versions"),(0,o.kt)("li",{parentName:"ul"},"Automatic version detection"),(0,o.kt)("li",{parentName:"ul"},"Updating PATH with the applicable version"),(0,o.kt)("li",{parentName:"ul"},"Generating shims"),(0,o.kt)("li",{parentName:"ul"},"Pinning shell, local, and global versions")),(0,o.kt)("p",null,"So how's this different from existing version managers like nvm or volta? To start, it's written in\nRust so it's ",(0,o.kt)("em",{parentName:"p"},"fast")," and doesn't suffer from being Bash only. Because of this, it's also\nmulti-platform and will work on Windows. But the biggest different is that proto is language\nagnostic and will support multiple languages. To start, it supports Node.js and Deno, but will be\nexpanded to support our other toolchain languages like Bun, PHP, Ruby, and Python. Another cool\nfeature is that it also manages versions of dependency managers like npm, yarn, and pnpm!"),(0,o.kt)("p",null,"We're planning to launch proto at the start of Q2."),(0,o.kt)("h2",{id:"expanding-language-support"},"Expanding language support"),(0,o.kt)("p",null,"Our initial goal for moon was to provide a first-class build system for the frontend ecosystem that\nfocused heavily on automation and the developer experience. We believe we've accomplished this goal,\nbut of course, nothing is ever actually complete, and so JavaScript, TypeScript, and Node.js support\nwill continually be improved."),(0,o.kt)("p",null,"However, that's not the entirety of the frontend ecosystem, as ",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/"},"Deno")," and\n",(0,o.kt)("a",{parentName:"p",href:"https://bun.sh/"},"Bun")," have been gaining traction this past year, and of course, moon will support\nboth of them as first-class platforms by end of year."),(0,o.kt)("p",null,"Futhermore, we recently landed tier 1 support for 5 new languages: Rust, Ruby, PHP, Python, and Go.\nOur end of year goal for these languages is to provide full tier 2 support. Tier 3 support is still\nan unknown, as we need to investigate the best possible way to integrate these languages into the\ntoolchain (this work is ongoing). We'll also add new languages based on demand."),(0,o.kt)("p",null,"With all that being said, this is our tenative timeline around\n",(0,o.kt)("a",{parentName:"p",href:"/docs#supported-languages"},"language support")," (which may shift at any time):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q1"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 1 support for Bun."),(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Deno."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q2"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Bun, PHP."),(0,o.kt)("li",{parentName:"ul"},"Tier 3 support for Deno."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q3"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Ruby, Python."),(0,o.kt)("li",{parentName:"ul"},"Tier 3 support for Bun."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Q4"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Tier 2 support for Rust, Go.")))),(0,o.kt)("h2",{id:"supporting-release-workflows"},"Supporting release workflows"),(0,o.kt)("p",null,"moon currently excels at organizing projects, running tasks, and building artifacts, but it has no\nsupport for release workflows. This is everything from capturing changes, bumping versions,\ngenerating changelogs, and publishing to upstream registries. If you use\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/lerna/lerna"},"Lerna")," or ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/changesets/changesets"},"changesets"),",\nyou should be very familiar with this workflow."),(0,o.kt)("p",null,"Since moon supports monorepos and has in-depth knowledge of the project graph, we can support\nrelease workflows with ease. Our goal is to support this workflow (for all languages) from start to\nfinish by end of year, ideally much sooner than that!"),(0,o.kt)("h2",{id:"more-repository-management-tooling"},"More repository management tooling"),(0,o.kt)("p",null,"The other aspect of moon is that it's a repository management tool as well as a build system. We\nwant to embrace this even further by providing explicit functionality or automation when applicable.\nSome examples of this are in-repository secrets management, git hooks management, code ownership and\nquality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much\nmore."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5cde4d5c.c4892f4e.js b/assets/js/5cde4d5c.c4892f4e.js new file mode 100644 index 00000000000..6bf242465f4 --- /dev/null +++ b/assets/js/5cde4d5c.c4892f4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18496],{31056:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/env-vars","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5cde4d5c.f75a0d9e.js b/assets/js/5cde4d5c.f75a0d9e.js deleted file mode 100644 index 6ac3b0cee12..00000000000 --- a/assets/js/5cde4d5c.f75a0d9e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8496],{31056:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/env-vars","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5d48ec89.17edefbb.js b/assets/js/5d48ec89.17edefbb.js deleted file mode 100644 index 2cf86ed738f..00000000000 --- a/assets/js/5d48ec89.17edefbb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1303],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return n?a.createElement(g,i(i({ref:t},u),{},{components:n})):a.createElement(g,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:o,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:r,title:o,className:"inline-block"}))}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},3852:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),o=n(9619),i=n(88109);const l={slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},s=void 0,p={permalink:"/blog/v0.21",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx",source:"@site/blog/2022-12-19_v0.21.mdx",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",description:"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered",date:"2022-12-19T00:00:00.000Z",formattedDate:"December 19, 2022",tags:[{label:"runner",permalink:"/blog/tags/runner"},{label:"language",permalink:"/blog/tags/language"},{label:"platform",permalink:"/blog/tags/platform"},{label:"cache",permalink:"/blog/tags/cache"},{label:"graph",permalink:"/blog/tags/graph"}],readingTime:4.255,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},prevItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"},nextItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"}},u={image:n(99851).Z,authorsImageUrls:[void 0]},c=[{value:"New tiered language support",id:"new-tiered-language-support",level:2},{value:"Basic support for Go, PHP, Python, Ruby, and, Rust",id:"basic-support-for-go-php-python-ruby-and-rust",level:2},{value:"Interactive project and dependency graphs",id:"interactive-project-and-dependency-graphs",level:2},{value:"New <code>--updateCache</code> command line option",id:"new---updatecache-command-line-option",level:2},{value:"New multi-status affected filtering",id:"new-multi-status-affected-filtering",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],d={toc:c};function m(e){let{components:t,...l}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\nsystem! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of\nlife improvements."),(0,r.kt)("h2",{id:"new-tiered-language-support"},"New tiered language support"),(0,r.kt)("p",null,"The most common question we receive is whether we plan to support additional languages besides\nNode.js, with Rust, Deno, and Bun being top of that list. Adding new languages is non-trivial, as we\nneed to build abstractions that support and integrate with the language's ecosystem, primarily\ndependency managers and resolution algorithms."),(0,r.kt)("p",null,"This is a very large upfront cost, with a huge time and resource commitment. To reduce this burden,\nwe're introducing a tiered support structure, so that languages can be incrementally integrated into\nmoon and adopted by consumers."),(0,r.kt)("p",null,"The tiers break down as follows:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 0",variant:"failure",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"No direct integration")," - Tool is not\ndirectly supported in moon, but can still be ran using the\n",(0,r.kt)("a",{parentName:"li",href:"../docs/faq#can-we-run-other-languages"},'"system" task platform'),", which expects the tool to exist\nin the current environment."),(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 1",variant:"warning",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"Project categorization")," - Projects can\nconfigure their primary ",(0,r.kt)("a",{parentName:"li",href:"../docs/config/project#language"},"language in ",(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),", and have a\ndedicated Rust crate for metadata."),(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 2",variant:"info",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"Ecosystem platformization")," - moon deeply\nintegrates with the language's ecosystem by parsing manifests, lockfiles, and other semantic files\nto infer dependencies, tasks, and other necessary information."),(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 3",variant:"success",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"Toolchain integration")," - Language is\ndirectly supported in the toolchain, configured in\n",(0,r.kt)("a",{parentName:"li",href:"../docs/config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and will automatically be downloaded and\ninstalled.")),(0,r.kt)("p",null,"To learn more about our currently supported languages and their tiers,\n",(0,r.kt)("a",{parentName:"p",href:"/docs#supported-languages"},"jump to the official documentation"),"."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"One important facet we'd like to express, is that ",(0,r.kt)("em",{parentName:"p"},"all")," languages and tools fall into tier 0. Feel\nfree to use anything you'd like as a task command!")),(0,r.kt)("h2",{id:"basic-support-for-go-php-python-ruby-and-rust"},"Basic support for Go, PHP, Python, Ruby, and, Rust"),(0,r.kt)("p",null,"As announced above, we now incrementally support new languages, and have integrated the following 5\nlanguages with tier 1 support: Go, PHP, Python, Ruby, and, Rust! Start using these languages today\nby setting the ",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language"))," field in ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml"),", or by letting moon\ninfer the language based on files in the project root (for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," is Rust)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - 'src/**/*'\n - 'Cargo.toml'\n test:\n command: 'cargo test'\n inputs:\n - 'src/**/*'\n - 'tests/**/*'\n - 'Cargo.toml'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Because these languages are tier 1, moon ",(0,r.kt)("em",{parentName:"p"},"does not")," install the language automatically, and will\nrequire the command to already exist in the environment. Furthermore, the project language will\nautomatically set all task's ",(0,r.kt)("inlineCode",{parentName:"p"},"platform"),' to "system", at least until it\'s supported directly in the\ntoolchain.')),(0,r.kt)("h2",{id:"interactive-project-and-dependency-graphs"},"Interactive project and dependency graphs"),(0,r.kt)("p",null,"Thanks to the amazing contribution from ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/IgnisDa"},"Diptesh Choudhuri"),", we now have\ninteractive project and dependency graphs when running the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/project-graph"},(0,r.kt)("inlineCode",{parentName:"a"},"moon project-graph"))," and\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/action-graph"},(0,r.kt)("inlineCode",{parentName:"a"},"moon dep-graph"))," commands respectively."),(0,r.kt)("p",null,"This is only the first iteration of these graphs. Expect more advanced features in the future, like\nfiltering, node/edge inspection, exporting, and more!"),(0,r.kt)(i.Z,{src:n(47153),width:"80%",mdxType:"Image"}),(0,r.kt)("h2",{id:"new---updatecache-command-line-option"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"--updateCache")," command line option"),(0,r.kt)("p",null,"Our caching layer is pretty powerful, as it helps to avoid tasks from running unnecessarily.\nHowever, there are situations where you need to refresh or force update the cache outside of the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs"))," list. This is currently achieved with the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/overview#caching"},(0,r.kt)("inlineCode",{parentName:"a"},"--cache"))," option, like ",(0,r.kt)("inlineCode",{parentName:"p"},"moon --cache off run ..."),", but this is\nnon-ideal for a few reasons:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"It disables ",(0,r.kt)("em",{parentName:"li"},"all caching"),", which means dependency installs/dedupes will continually be ran. This\nadds a lot of unwanted overhead."),(0,r.kt)("li",{parentName:"ol"},"It requires you to backspace in the terminal to add the option ",(0,r.kt)("em",{parentName:"li"},"before")," ",(0,r.kt)("inlineCode",{parentName:"li"},"run")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"check"),", as it's\na global option. A little tedious but important for experience.")),(0,r.kt)("p",null,"So to work around these limitations, we've added a new ",(0,r.kt)("inlineCode",{parentName:"p"},"--updateCache")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"-u"),") to both\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," and ",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon check")),", which will bypass\nreading any existing cache items, but will force update the cache base on the latest run."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --updateCache\n")),(0,r.kt)("h2",{id:"new-multi-status-affected-filtering"},"New multi-status affected filtering"),(0,r.kt)("p",null,"We support running tasks based on affected files using the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run --affected")),' command, which is great for reducing the amount of\ntasks being ran, and for applying code quality tooling like Git hooks. However, you were only able\nto apply a single status filter, like "deleted" or "modified", which was non-ideal... but no more!'),(0,r.kt)("p",null,"You can now apply multiple statuses by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--status")," option multiple times."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run :lint --affected --status modified --status added\n")),(0,r.kt)("p",null,"This pairs nicely with the recent\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#affectedfiles"},(0,r.kt)("inlineCode",{parentName:"a"},"affectedFiles")," task option")," changes!"),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.21.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Refactored project and dependency graphs for improved performance."),(0,r.kt)("li",{parentName:"ul"},"Added args and env var variants to the ",(0,r.kt)("inlineCode",{parentName:"li"},"affectedFiles")," task option."),(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"--minimal")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"moon init")," for quick scaffolding and prototyping.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.22 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Generalized hashing for use in any context (improved deps installation)."),(0,r.kt)("li",{parentName:"ul"},"More work on language integrations.")))}m.isMDXComponent=!0},47153:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/graph-0007e61b56b4bb9a3930f73c53766755.png"},99851:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.21-a2807b8b9cbc5e05fe2d8cb2b78050ed.png"}}]); \ No newline at end of file diff --git a/assets/js/5d48ec89.ee5a33c7.js b/assets/js/5d48ec89.ee5a33c7.js new file mode 100644 index 00000000000..2b324363b33 --- /dev/null +++ b/assets/js/5d48ec89.ee5a33c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41303],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return n?a.createElement(g,i(i({ref:t},u),{},{components:n})):a.createElement(g,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:o,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:r,title:o,className:"inline-block"}))}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},3852:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),o=n(9619),i=n(88109);const l={slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},s=void 0,p={permalink:"/blog/v0.21",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx",source:"@site/blog/2022-12-19_v0.21.mdx",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",description:"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered",date:"2022-12-19T00:00:00.000Z",formattedDate:"December 19, 2022",tags:[{label:"runner",permalink:"/blog/tags/runner"},{label:"language",permalink:"/blog/tags/language"},{label:"platform",permalink:"/blog/tags/platform"},{label:"cache",permalink:"/blog/tags/cache"},{label:"graph",permalink:"/blog/tags/graph"}],readingTime:4.255,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},prevItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"},nextItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"}},u={image:n(99851).Z,authorsImageUrls:[void 0]},c=[{value:"New tiered language support",id:"new-tiered-language-support",level:2},{value:"Basic support for Go, PHP, Python, Ruby, and, Rust",id:"basic-support-for-go-php-python-ruby-and-rust",level:2},{value:"Interactive project and dependency graphs",id:"interactive-project-and-dependency-graphs",level:2},{value:"New <code>--updateCache</code> command line option",id:"new---updatecache-command-line-option",level:2},{value:"New multi-status affected filtering",id:"new-multi-status-affected-filtering",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],d={toc:c};function m(e){let{components:t,...l}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\nsystem! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of\nlife improvements."),(0,r.kt)("h2",{id:"new-tiered-language-support"},"New tiered language support"),(0,r.kt)("p",null,"The most common question we receive is whether we plan to support additional languages besides\nNode.js, with Rust, Deno, and Bun being top of that list. Adding new languages is non-trivial, as we\nneed to build abstractions that support and integrate with the language's ecosystem, primarily\ndependency managers and resolution algorithms."),(0,r.kt)("p",null,"This is a very large upfront cost, with a huge time and resource commitment. To reduce this burden,\nwe're introducing a tiered support structure, so that languages can be incrementally integrated into\nmoon and adopted by consumers."),(0,r.kt)("p",null,"The tiers break down as follows:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 0",variant:"failure",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"No direct integration")," - Tool is not\ndirectly supported in moon, but can still be ran using the\n",(0,r.kt)("a",{parentName:"li",href:"../docs/faq#can-we-run-other-languages"},'"system" task platform'),", which expects the tool to exist\nin the current environment."),(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 1",variant:"warning",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"Project categorization")," - Projects can\nconfigure their primary ",(0,r.kt)("a",{parentName:"li",href:"../docs/config/project#language"},"language in ",(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),", and have a\ndedicated Rust crate for metadata."),(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 2",variant:"info",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"Ecosystem platformization")," - moon deeply\nintegrates with the language's ecosystem by parsing manifests, lockfiles, and other semantic files\nto infer dependencies, tasks, and other necessary information."),(0,r.kt)("li",{parentName:"ul"},"\xa0",(0,r.kt)(o.Z,{text:"Tier 3",variant:"success",mdxType:"Label"})," ","\xa0"," ",(0,r.kt)("strong",{parentName:"li"},"Toolchain integration")," - Language is\ndirectly supported in the toolchain, configured in\n",(0,r.kt)("a",{parentName:"li",href:"../docs/config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and will automatically be downloaded and\ninstalled.")),(0,r.kt)("p",null,"To learn more about our currently supported languages and their tiers,\n",(0,r.kt)("a",{parentName:"p",href:"/docs#supported-languages"},"jump to the official documentation"),"."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"One important facet we'd like to express, is that ",(0,r.kt)("em",{parentName:"p"},"all")," languages and tools fall into tier 0. Feel\nfree to use anything you'd like as a task command!")),(0,r.kt)("h2",{id:"basic-support-for-go-php-python-ruby-and-rust"},"Basic support for Go, PHP, Python, Ruby, and, Rust"),(0,r.kt)("p",null,"As announced above, we now incrementally support new languages, and have integrated the following 5\nlanguages with tier 1 support: Go, PHP, Python, Ruby, and, Rust! Start using these languages today\nby setting the ",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language"))," field in ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml"),", or by letting moon\ninfer the language based on files in the project root (for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"Cargo.toml")," is Rust)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - 'src/**/*'\n - 'Cargo.toml'\n test:\n command: 'cargo test'\n inputs:\n - 'src/**/*'\n - 'tests/**/*'\n - 'Cargo.toml'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Because these languages are tier 1, moon ",(0,r.kt)("em",{parentName:"p"},"does not")," install the language automatically, and will\nrequire the command to already exist in the environment. Furthermore, the project language will\nautomatically set all task's ",(0,r.kt)("inlineCode",{parentName:"p"},"platform"),' to "system", at least until it\'s supported directly in the\ntoolchain.')),(0,r.kt)("h2",{id:"interactive-project-and-dependency-graphs"},"Interactive project and dependency graphs"),(0,r.kt)("p",null,"Thanks to the amazing contribution from ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/IgnisDa"},"Diptesh Choudhuri"),", we now have\ninteractive project and dependency graphs when running the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/project-graph"},(0,r.kt)("inlineCode",{parentName:"a"},"moon project-graph"))," and\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/action-graph"},(0,r.kt)("inlineCode",{parentName:"a"},"moon dep-graph"))," commands respectively."),(0,r.kt)("p",null,"This is only the first iteration of these graphs. Expect more advanced features in the future, like\nfiltering, node/edge inspection, exporting, and more!"),(0,r.kt)(i.Z,{src:n(47153),width:"80%",mdxType:"Image"}),(0,r.kt)("h2",{id:"new---updatecache-command-line-option"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"--updateCache")," command line option"),(0,r.kt)("p",null,"Our caching layer is pretty powerful, as it helps to avoid tasks from running unnecessarily.\nHowever, there are situations where you need to refresh or force update the cache outside of the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs"))," list. This is currently achieved with the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/overview#caching"},(0,r.kt)("inlineCode",{parentName:"a"},"--cache"))," option, like ",(0,r.kt)("inlineCode",{parentName:"p"},"moon --cache off run ..."),", but this is\nnon-ideal for a few reasons:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"It disables ",(0,r.kt)("em",{parentName:"li"},"all caching"),", which means dependency installs/dedupes will continually be ran. This\nadds a lot of unwanted overhead."),(0,r.kt)("li",{parentName:"ol"},"It requires you to backspace in the terminal to add the option ",(0,r.kt)("em",{parentName:"li"},"before")," ",(0,r.kt)("inlineCode",{parentName:"li"},"run")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"check"),", as it's\na global option. A little tedious but important for experience.")),(0,r.kt)("p",null,"So to work around these limitations, we've added a new ",(0,r.kt)("inlineCode",{parentName:"p"},"--updateCache")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"-u"),") to both\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," and ",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon check")),", which will bypass\nreading any existing cache items, but will force update the cache base on the latest run."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --updateCache\n")),(0,r.kt)("h2",{id:"new-multi-status-affected-filtering"},"New multi-status affected filtering"),(0,r.kt)("p",null,"We support running tasks based on affected files using the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run --affected")),' command, which is great for reducing the amount of\ntasks being ran, and for applying code quality tooling like Git hooks. However, you were only able\nto apply a single status filter, like "deleted" or "modified", which was non-ideal... but no more!'),(0,r.kt)("p",null,"You can now apply multiple statuses by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--status")," option multiple times."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run :lint --affected --status modified --status added\n")),(0,r.kt)("p",null,"This pairs nicely with the recent\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#affectedfiles"},(0,r.kt)("inlineCode",{parentName:"a"},"affectedFiles")," task option")," changes!"),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.21.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Refactored project and dependency graphs for improved performance."),(0,r.kt)("li",{parentName:"ul"},"Added args and env var variants to the ",(0,r.kt)("inlineCode",{parentName:"li"},"affectedFiles")," task option."),(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"--minimal")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"moon init")," for quick scaffolding and prototyping.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.22 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Generalized hashing for use in any context (improved deps installation)."),(0,r.kt)("li",{parentName:"ul"},"More work on language integrations.")))}m.isMDXComponent=!0},47153:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/graph-0007e61b56b4bb9a3930f73c53766755.png"},99851:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.21-a2807b8b9cbc5e05fe2d8cb2b78050ed.png"}}]); \ No newline at end of file diff --git a/assets/js/5e371f0f.7bc831db.js b/assets/js/5e371f0f.7bc831db.js new file mode 100644 index 00000000000..c955ec9c36d --- /dev/null +++ b/assets/js/5e371f0f.7bc831db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42945],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=o,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:i}=e;return r.createElement(o.Z,{text:`v${i}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),a=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),l)}},40657:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const i={title:"outdated"},l=void 0,s={unversionedId:"proto/commands/outdated",id:"proto/commands/outdated",title:"outdated",description:"The proto outdated command will load the closest .prototools file and check for newer versions",source:"@site/docs/proto/commands/outdated.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/outdated",permalink:"/docs/proto/commands/outdated",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/outdated.mdx",tags:[],version:"current",frontMatter:{title:"outdated"},sidebar:"proto",previous:{title:"list-remote",permalink:"/docs/proto/commands/list-remote"},next:{title:"pin",permalink:"/docs/proto/commands/pin"}},c={},p=[{value:"Options",id:"options",level:3}],d={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.19.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto outdated")," command will load the closest ",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," file and check for newer versions\nof each configured tool. By default, only newer versions that match the configured version\nrequirements or ranges will be used. To ignore this and use the latest version, pass ",(0,o.kt)("inlineCode",{parentName:"p"},"--latest"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"$ proto outdated\n\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("a",{parentName:"p",href:"../config"},"Learn more about the ",(0,o.kt)("inlineCode",{parentName:"a"},".prototools")," configuration file!"))),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--json")," - Print the list in JSON format."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--latest")," - Check for the latest available version, ignoring any version requirements, ranges, or\nconstraints."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--update")," - Update the loaded ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools")," file with newer versions if available.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5e371f0f.b960cf4c.js b/assets/js/5e371f0f.b960cf4c.js deleted file mode 100644 index 02669d58a28..00000000000 --- a/assets/js/5e371f0f.b960cf4c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2945],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(n),m=o,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:i}=e;return r.createElement(o.Z,{text:`v${i}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),a=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),l)}},40657:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const i={title:"outdated"},l=void 0,s={unversionedId:"proto/commands/outdated",id:"proto/commands/outdated",title:"outdated",description:"The proto outdated command will load the closest .prototools file and check for newer versions",source:"@site/docs/proto/commands/outdated.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/outdated",permalink:"/docs/proto/commands/outdated",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/outdated.mdx",tags:[],version:"current",frontMatter:{title:"outdated"},sidebar:"proto",previous:{title:"list-remote",permalink:"/docs/proto/commands/list-remote"},next:{title:"pin",permalink:"/docs/proto/commands/pin"}},c={},p=[{value:"Options",id:"options",level:3}],d={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.19.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto outdated")," command will load the closest ",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," file and check for newer versions\nof each configured tool. By default, only newer versions that match the configured version\nrequirements or ranges will be used. To ignore this and use the latest version, pass ",(0,o.kt)("inlineCode",{parentName:"p"},"--latest"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"$ proto outdated\n\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("a",{parentName:"p",href:"../config"},"Learn more about the ",(0,o.kt)("inlineCode",{parentName:"a"},".prototools")," configuration file!"))),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--json")," - Print the list in JSON format."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--latest")," - Check for the latest available version, ignoring any version requirements, ranges, or\nconstraints."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--update")," - Update the loaded ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools")," file with newer versions if available.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5f3507b2.1c35ec49.js b/assets/js/5f3507b2.1c35ec49.js new file mode 100644 index 00000000000..e76de3afcd5 --- /dev/null +++ b/assets/js/5f3507b2.1c35ec49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[73986],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||l;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var u=2;u<l;u++)o[u]=n[u];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),r=u[n].value;r!==i&&(d(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,l.Z)("tabs-container",u)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,l=u(e),[o,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,l]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:a}),b=(()=>{const e=d??f;return c({value:e,tabValues:l})?e:null})();(0,r.useLayoutEffect)((()=>{b&&s(b)}),[b]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(27378),a=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),r.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(l.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},i(e,!1,!1))),r.createElement(l.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(l.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(l.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},64701:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),l=n(36642);const o={title:"Solid example",sidebar_label:"Solid",tags:["solid","solidjs"]},i=void 0,s={unversionedId:"guides/examples/solid",id:"guides/examples/solid",title:"Solid example",description:"Solid (also known as SolidJS) is a JavaScript framework for building",source:"@site/docs/guides/examples/solid.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/solid",permalink:"/docs/guides/examples/solid",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/solid.mdx",tags:[{label:"solid",permalink:"/docs/tags/solid"},{label:"solidjs",permalink:"/docs/tags/solidjs"}],version:"current",frontMatter:{title:"Solid example",sidebar_label:"Solid",tags:["solid","solidjs"]},sidebar:"guides",previous:{title:"Remix",permalink:"/docs/guides/examples/remix"},next:{title:"Storybook",permalink:"/docs/guides/examples/storybook"}},u={},c=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Vite integration",id:"vite-integration",level:3}],p={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.solidjs.com"},"Solid")," (also known as SolidJS) is a JavaScript framework for building\ninteractive web applications. Because of this, Solid is an application or library concern, and not a\nbuild system one, since the bundling of Solid is abstracted away through the application or a\nbundler."),(0,a.kt)("p",null,"With that being said, we do have some suggestions on utilizing Solid effectively in a monorepo. To\nbegin, install Solid to a project."),(0,a.kt)(l.Z,{dep:"solid-js",package:"<project>",mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Solid utilizes JSX for rendering markup, which requires\n",(0,a.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/babel-preset-solid"},(0,a.kt)("inlineCode",{parentName:"a"},"babel-preset-solid"))," for parsing and\ntransforming. To enable the preset for the entire monorepo, add the preset to a root\n",(0,a.kt)("inlineCode",{parentName:"p"},"babel.config.js"),", otherwise add it to a ",(0,a.kt)("inlineCode",{parentName:"p"},".babelrc.js")," in each project that requires it."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"module.exports = {\n presets: ['solid'],\n};\n")),(0,a.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,a.kt)("p",null,"For each project using Solid, add the following compiler options to the ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," found in the\nproject root."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n "compilerOptions": {\n "jsx": "preserve",\n "jsxImportSource": "solid-js"\n }\n}\n')),(0,a.kt)("h3",{id:"vite-integration"},"Vite integration"),(0,a.kt)("p",null,"If you're using a ",(0,a.kt)("a",{parentName:"p",href:"./vite"},"Vite")," powered application (Solid Start or starter templates), you should\nenable ",(0,a.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/vite-plugin-solid"},(0,a.kt)("inlineCode",{parentName:"a"},"vite-plugin-solid"))," instead of configuring\nBabel. Be sure to read our ",(0,a.kt)("a",{parentName:"p",href:"./vite"},"guide on Vite")," as well!"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/vite.config.js"',title:'"<project>/vite.config.js"'},"import { defineConfig } from 'vite';\nimport solidPlugin from 'vite-plugin-solid';\n\nexport default defineConfig({\n // ...\n plugins: [solidPlugin()],\n});\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5f3507b2.cad679f4.js b/assets/js/5f3507b2.cad679f4.js deleted file mode 100644 index aaba269c99b..00000000000 --- a/assets/js/5f3507b2.cad679f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3986],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||l;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var u=2;u<l;u++)o[u]=n[u];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),r=u[n].value;r!==i&&(d(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,l.Z)("tabs-container",u)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,l=u(e),[o,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,l]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:a}),b=(()=>{const e=d??f;return c({value:e,tabValues:l})?e:null})();(0,r.useLayoutEffect)((()=>{b&&s(b)}),[b]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(27378),a=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),r.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(l.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},i(e,!1,!1))),r.createElement(l.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(l.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(l.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},64701:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),l=n(36642);const o={title:"Solid example",sidebar_label:"Solid",tags:["solid","solidjs"]},i=void 0,s={unversionedId:"guides/examples/solid",id:"guides/examples/solid",title:"Solid example",description:"Solid (also known as SolidJS) is a JavaScript framework for building",source:"@site/docs/guides/examples/solid.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/solid",permalink:"/docs/guides/examples/solid",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/solid.mdx",tags:[{label:"solid",permalink:"/docs/tags/solid"},{label:"solidjs",permalink:"/docs/tags/solidjs"}],version:"current",frontMatter:{title:"Solid example",sidebar_label:"Solid",tags:["solid","solidjs"]},sidebar:"guides",previous:{title:"Remix",permalink:"/docs/guides/examples/remix"},next:{title:"Storybook",permalink:"/docs/guides/examples/storybook"}},u={},c=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Vite integration",id:"vite-integration",level:3}],p={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.solidjs.com"},"Solid")," (also known as SolidJS) is a JavaScript framework for building\ninteractive web applications. Because of this, Solid is an application or library concern, and not a\nbuild system one, since the bundling of Solid is abstracted away through the application or a\nbundler."),(0,a.kt)("p",null,"With that being said, we do have some suggestions on utilizing Solid effectively in a monorepo. To\nbegin, install Solid to a project."),(0,a.kt)(l.Z,{dep:"solid-js",package:"<project>",mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Solid utilizes JSX for rendering markup, which requires\n",(0,a.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/babel-preset-solid"},(0,a.kt)("inlineCode",{parentName:"a"},"babel-preset-solid"))," for parsing and\ntransforming. To enable the preset for the entire monorepo, add the preset to a root\n",(0,a.kt)("inlineCode",{parentName:"p"},"babel.config.js"),", otherwise add it to a ",(0,a.kt)("inlineCode",{parentName:"p"},".babelrc.js")," in each project that requires it."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"module.exports = {\n presets: ['solid'],\n};\n")),(0,a.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,a.kt)("p",null,"For each project using Solid, add the following compiler options to the ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," found in the\nproject root."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n "compilerOptions": {\n "jsx": "preserve",\n "jsxImportSource": "solid-js"\n }\n}\n')),(0,a.kt)("h3",{id:"vite-integration"},"Vite integration"),(0,a.kt)("p",null,"If you're using a ",(0,a.kt)("a",{parentName:"p",href:"./vite"},"Vite")," powered application (Solid Start or starter templates), you should\nenable ",(0,a.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/vite-plugin-solid"},(0,a.kt)("inlineCode",{parentName:"a"},"vite-plugin-solid"))," instead of configuring\nBabel. Be sure to read our ",(0,a.kt)("a",{parentName:"p",href:"./vite"},"guide on Vite")," as well!"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/vite.config.js"',title:'"<project>/vite.config.js"'},"import { defineConfig } from 'vite';\nimport solidPlugin from 'vite-plugin-solid';\n\nexport default defineConfig({\n // ...\n plugins: [solidPlugin()],\n});\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/600433a8.d62b0992.js b/assets/js/600433a8.d62b0992.js deleted file mode 100644 index 940665a86ac..00000000000 --- a/assets/js/600433a8.d62b0992.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7930],{10952:e=>{e.exports=JSON.parse('{"title":"migrate","description":"Operations for migrating existing projects to moon.","keywords":["cli","commands","migrate"],"slug":"/commands/migrate","permalink":"/docs/commands/migrate","navigation":{"previous":{"title":"init","permalink":"/docs/commands/init"},"next":{"title":"from-package-json","permalink":"/docs/commands/migrate/from-package-json"}}}')}}]); \ No newline at end of file diff --git a/assets/js/600433a8.d7107184.js b/assets/js/600433a8.d7107184.js new file mode 100644 index 00000000000..ffd5f0d8a53 --- /dev/null +++ b/assets/js/600433a8.d7107184.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37930],{10952:e=>{e.exports=JSON.parse('{"title":"migrate","description":"Operations for migrating existing projects to moon.","keywords":["cli","commands","migrate"],"slug":"/commands/migrate","permalink":"/docs/commands/migrate","navigation":{"previous":{"title":"init","permalink":"/docs/commands/init"},"next":{"title":"from-package-json","permalink":"/docs/commands/migrate/from-package-json"}}}')}}]); \ No newline at end of file diff --git a/assets/js/60262e21.a38128fc.js b/assets/js/60262e21.a38128fc.js new file mode 100644 index 00000000000..00384782cd7 --- /dev/null +++ b/assets/js/60262e21.a38128fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30727],{99027:e=>{e.exports=JSON.parse('{"label":"git","permalink":"/blog/tags/git","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/60262e21.c3f15032.js b/assets/js/60262e21.c3f15032.js deleted file mode 100644 index abec596a338..00000000000 --- a/assets/js/60262e21.c3f15032.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[727],{99027:e=>{e.exports=JSON.parse('{"label":"git","permalink":"/blog/tags/git","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/60fa46e1.b6e5e3d9.js b/assets/js/60fa46e1.b6e5e3d9.js new file mode 100644 index 00000000000..cc486e77a97 --- /dev/null +++ b/assets/js/60fa46e1.b6e5e3d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64043],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>d});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),d=o,g=u["".concat(l,".").concat(d)]||u[d]||m[d]||a;return t?r.createElement(g,s(s({ref:n},c),{},{components:t})):r.createElement(g,s({ref:n},c))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,s=new Array(a);s[0]=u;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var p=2;p<a;p++)s[p]=t[p];return r.createElement.apply(null,s)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},23574:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=t(25773),o=(t(27378),t(35318));const a={slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},s=void 0,i={permalink:"/blog/moon-v1.1",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx",source:"@site/blog/2023-04-03_moon-v1.1.mdx",title:"moon v1.1 - Task debugging and improvements",description:"With this release, we're introducing some quality of life task improvements.",date:"2023-04-03T00:00:00.000Z",formattedDate:"April 3, 2023",tags:[{label:"tokens",permalink:"/blog/tags/tokens"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.775,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},prevItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"},nextItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"}},l={image:t(89585).Z,authorsImageUrls:[void 0]},p=[{value:"Token variable support in task commands",id:"token-variable-support-in-task-commands",level:2},{value:"Run targets in closest project",id:"run-targets-in-closest-project",level:2},{value:"View resolved task information",id:"view-resolved-task-information",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function m(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're introducing some quality of life task improvements."),(0,o.kt)("h2",{id:"token-variable-support-in-task-commands"},"Token variable support in task commands"),(0,o.kt)("p",null,"moon supports a concept known as ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/token"},"tokens")," where values are injected into tasks\nduring project graph creation. This allows for dynamic values in your tasks, such as the current\nproject language, or the current task name, and is crucial for task inheritance to work."),(0,o.kt)("p",null,"However, tokens were only supported by task args, inputs, and outputs, but not commands... until\nnow. Commands can now use token variables (but not token functions). For example, this is useful for\nreferencing shared scripts from the workspace root."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n precheck:\n command: '$workspaceRoot/scripts/precheck.sh'\n")),(0,o.kt)("h2",{id:"run-targets-in-closest-project"},"Run targets in closest project"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run"))," command can run targets in an array of different formats, but\nwas unable to run targets based on the current working directory. Well no more! You can now run\ntasks from the closest project based on file path by omitting ",(0,o.kt)("inlineCode",{parentName:"p"},":")," from the target name."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ cd packages/components\n\n# Runs `components:build` internally\n$ moon run build\n")),(0,o.kt)("h2",{id:"view-resolved-task-information"},"View resolved task information"),(0,o.kt)("p",null,"Debugging task issues can be a quite a pain, as there can be many points of failure. Are inputs too\ngreedy? Are outputs not being created? Does it exist at all? To help with this, you can now view\ntask information by running ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/task"},(0,o.kt)("inlineCode",{parentName:"a"},"moon task <target>")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon task app:build\n")),(0,o.kt)("p",null,"This command will display ",(0,o.kt)("em",{parentName:"p"},"resolved")," information, including inherited settings, and path resolved\ninputs and outputs. Here's an example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RUNTIME:BUILD\n\nID: build\nProject: runtime\nPlatform: node\nType: build\n\nPROCESS\n\nCommand: packemon build --addFiles --addExports --declaration\nEnvironment variables:\n - NODE_ENV = production\nWorking directory: /Projects/moon/packages/runtime\nRuns dependencies: Concurrently\nRuns in CI: Yes\n\nDEPENDS ON\n\n - types:build\n\nINPUTS\n\n - .moon/*.yml\n - packages/runtime/src/**/*\n - packages/runtime/tsconfig.*.json\n - packages/runtime/types/**/*\n - packages/runtime/package.json\n - packages/runtime/tsconfig.json\n - tsconfig.options.json\n\nOUTPUTS\n\n - packages/runtime/cjs\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.1.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Support pnpm v8's new lockfile format."),(0,o.kt)("li",{parentName:"ul"},"Better handling for task's that execute the ",(0,o.kt)("inlineCode",{parentName:"li"},"moon")," binary."),(0,o.kt)("li",{parentName:"ul"},"Updated ",(0,o.kt)("inlineCode",{parentName:"li"},"noop")," tasks to be cacheable, so that they can be used for cache hit early returns.")))}m.isMDXComponent=!0},89585:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/v1.1-1447beccba44240528518a0af56c91f2.png"}}]); \ No newline at end of file diff --git a/assets/js/60fa46e1.c6af3737.js b/assets/js/60fa46e1.c6af3737.js deleted file mode 100644 index c4b32e35f91..00000000000 --- a/assets/js/60fa46e1.c6af3737.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4043],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>d});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(t),d=o,g=u["".concat(l,".").concat(d)]||u[d]||m[d]||a;return t?r.createElement(g,s(s({ref:n},c),{},{components:t})):r.createElement(g,s({ref:n},c))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,s=new Array(a);s[0]=u;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,s[1]=i;for(var p=2;p<a;p++)s[p]=t[p];return r.createElement.apply(null,s)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},23574:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=t(25773),o=(t(27378),t(35318));const a={slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},s=void 0,i={permalink:"/blog/moon-v1.1",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx",source:"@site/blog/2023-04-03_moon-v1.1.mdx",title:"moon v1.1 - Task debugging and improvements",description:"With this release, we're introducing some quality of life task improvements.",date:"2023-04-03T00:00:00.000Z",formattedDate:"April 3, 2023",tags:[{label:"tokens",permalink:"/blog/tags/tokens"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.775,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},prevItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"},nextItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"}},l={image:t(89585).Z,authorsImageUrls:[void 0]},p=[{value:"Token variable support in task commands",id:"token-variable-support-in-task-commands",level:2},{value:"Run targets in closest project",id:"run-targets-in-closest-project",level:2},{value:"View resolved task information",id:"view-resolved-task-information",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function m(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're introducing some quality of life task improvements."),(0,o.kt)("h2",{id:"token-variable-support-in-task-commands"},"Token variable support in task commands"),(0,o.kt)("p",null,"moon supports a concept known as ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/token"},"tokens")," where values are injected into tasks\nduring project graph creation. This allows for dynamic values in your tasks, such as the current\nproject language, or the current task name, and is crucial for task inheritance to work."),(0,o.kt)("p",null,"However, tokens were only supported by task args, inputs, and outputs, but not commands... until\nnow. Commands can now use token variables (but not token functions). For example, this is useful for\nreferencing shared scripts from the workspace root."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n precheck:\n command: '$workspaceRoot/scripts/precheck.sh'\n")),(0,o.kt)("h2",{id:"run-targets-in-closest-project"},"Run targets in closest project"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run"))," command can run targets in an array of different formats, but\nwas unable to run targets based on the current working directory. Well no more! You can now run\ntasks from the closest project based on file path by omitting ",(0,o.kt)("inlineCode",{parentName:"p"},":")," from the target name."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ cd packages/components\n\n# Runs `components:build` internally\n$ moon run build\n")),(0,o.kt)("h2",{id:"view-resolved-task-information"},"View resolved task information"),(0,o.kt)("p",null,"Debugging task issues can be a quite a pain, as there can be many points of failure. Are inputs too\ngreedy? Are outputs not being created? Does it exist at all? To help with this, you can now view\ntask information by running ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/task"},(0,o.kt)("inlineCode",{parentName:"a"},"moon task <target>")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon task app:build\n")),(0,o.kt)("p",null,"This command will display ",(0,o.kt)("em",{parentName:"p"},"resolved")," information, including inherited settings, and path resolved\ninputs and outputs. Here's an example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RUNTIME:BUILD\n\nID: build\nProject: runtime\nPlatform: node\nType: build\n\nPROCESS\n\nCommand: packemon build --addFiles --addExports --declaration\nEnvironment variables:\n - NODE_ENV = production\nWorking directory: /Projects/moon/packages/runtime\nRuns dependencies: Concurrently\nRuns in CI: Yes\n\nDEPENDS ON\n\n - types:build\n\nINPUTS\n\n - .moon/*.yml\n - packages/runtime/src/**/*\n - packages/runtime/tsconfig.*.json\n - packages/runtime/types/**/*\n - packages/runtime/package.json\n - packages/runtime/tsconfig.json\n - tsconfig.options.json\n\nOUTPUTS\n\n - packages/runtime/cjs\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.1.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Support pnpm v8's new lockfile format."),(0,o.kt)("li",{parentName:"ul"},"Better handling for task's that execute the ",(0,o.kt)("inlineCode",{parentName:"li"},"moon")," binary."),(0,o.kt)("li",{parentName:"ul"},"Updated ",(0,o.kt)("inlineCode",{parentName:"li"},"noop")," tasks to be cacheable, so that they can be used for cache hit early returns.")))}m.isMDXComponent=!0},89585:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/v1.1-1447beccba44240528518a0af56c91f2.png"}}]); \ No newline at end of file diff --git a/assets/js/61486960.074a736c.js b/assets/js/61486960.074a736c.js new file mode 100644 index 00000000000..a1d24546f78 --- /dev/null +++ b/assets/js/61486960.074a736c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18869],{35318:(A,I,C)=>{C.d(I,{Zo:()=>e,kt:()=>R});var g=C(27378);function U(A,I,C){return I in A?Object.defineProperty(A,I,{value:C,enumerable:!0,configurable:!0,writable:!0}):A[I]=C,A}function Q(A,I){var C=Object.keys(A);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(A);I&&(g=g.filter((function(I){return Object.getOwnPropertyDescriptor(A,I).enumerable}))),C.push.apply(C,g)}return C}function F(A){for(var I=1;I<arguments.length;I++){var C=null!=arguments[I]?arguments[I]:{};I%2?Q(Object(C),!0).forEach((function(I){U(A,I,C[I])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(C)):Q(Object(C)).forEach((function(I){Object.defineProperty(A,I,Object.getOwnPropertyDescriptor(C,I))}))}return A}function B(A,I){if(null==A)return{};var C,g,U=function(A,I){if(null==A)return{};var C,g,U={},Q=Object.keys(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||(U[C]=A[C]);return U}(A,I);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||Object.prototype.propertyIsEnumerable.call(A,C)&&(U[C]=A[C])}return U}var E=g.createContext({}),V=function(A){var I=g.useContext(E),C=I;return A&&(C="function"==typeof A?A(I):F(F({},I),A)),C},e=function(A){var I=V(A.components);return g.createElement(E.Provider,{value:I},A.children)},l={inlineCode:"code",wrapper:function(A){var I=A.children;return g.createElement(g.Fragment,{},I)}},Z=g.forwardRef((function(A,I){var C=A.components,U=A.mdxType,Q=A.originalType,E=A.parentName,e=B(A,["components","mdxType","originalType","parentName"]),Z=V(C),R=U,a=Z["".concat(E,".").concat(R)]||Z[R]||l[R]||Q;return C?g.createElement(a,F(F({ref:I},e),{},{components:C})):g.createElement(a,F({ref:I},e))}));function R(A,I){var C=arguments,U=I&&I.mdxType;if("string"==typeof A||U){var Q=C.length,F=new Array(Q);F[0]=Z;var B={};for(var E in I)hasOwnProperty.call(I,E)&&(B[E]=I[E]);B.originalType=A,B.mdxType="string"==typeof A?A:U,F[1]=B;for(var V=2;V<Q;V++)F[V]=C[V];return g.createElement.apply(null,F)}return g.createElement.apply(null,C)}Z.displayName="MDXCreateElement"},24516:(A,I,C)=>{C.d(I,{Z:()=>a});var g,U,Q,F,B,E,V,e,l,Z=C(27378);function R(){return R=Object.assign?Object.assign.bind():function(A){for(var I=1;I<arguments.length;I++){var C=arguments[I];for(var g in C)Object.prototype.hasOwnProperty.call(C,g)&&(A[g]=C[g])}return A},R.apply(this,arguments)}const a=A=>{let{title:I,titleId:C,...a}=A;return Z.createElement("svg",R({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 413 74",role:"img","aria-labelledby":C},a),I?Z.createElement("title",{id:C},I):null,Z.createElement("mask",{id:"a",width:65,height:65,x:0,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},g||(g=Z.createElement("path",{fill:"#fff",d:"M32.64 73.698c17.828 0 32.28-14.453 32.28-32.28 0-17.828-14.452-32.28-32.28-32.28C14.812 9.137.36 23.59.36 41.417c0 17.827 14.452 32.28 32.28 32.28Z"}))),Z.createElement("g",{mask:"url(#a)"},Z.createElement("mask",{id:"b",width:75,height:75,x:-5,y:4,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=Z.createElement("path",{fill:"#fff",d:"M-4.64 4.138h74.56v74.56H-4.64V4.138Z"}))),Q||(Q=Z.createElement("g",{mask:"url(#b)"},Z.createElement("path",{fill:"url(#c)",d:"M-4.67 3.923h74.88v74.88H-4.67z"})))),F||(F=Z.createElement("path",{fill:"#5341D6",d:"M60.39 33.898v-11.01c0-1.55-.83-2.98-2.17-3.76l-9.54-5.51c-1.34-.77-3-.77-4.34 0l-9.54 5.51a4.342 4.342 0 0 0-2.17 3.76v11.01c0 1.55.83 2.98 2.17 3.76l9.54 5.51c1.34.77 3 .77 4.34 0l9.54-5.51a4.355 4.355 0 0 0 2.17-3.76Z"})),Z.createElement("mask",{id:"d",width:29,height:31,x:45,y:0,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},B||(B=Z.createElement("path",{fill:"#fff",d:"M73.07 20.867V9.848c0-1.55-.83-2.98-2.17-3.76L61.36.578c-1.34-.77-3-.77-4.34 0l-9.54 5.51a4.342 4.342 0 0 0-2.17 3.76v11.01c0 1.55.83 2.98 2.17 3.76l9.54 5.51c1.34.77 3 .77 4.34 0l9.54-5.51c1.34-.77 2.17-2.2 2.17-3.75Z"}))),Z.createElement("g",{mask:"url(#d)"},Z.createElement("mask",{id:"e",width:39,height:41,x:40,y:-5,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},E||(E=Z.createElement("path",{fill:"#fff",d:"M40.32-4.992h37.75v40.7H40.32v-40.7Z"}))),V||(V=Z.createElement("g",{mask:"url(#e)"},Z.createElement("path",{fill:"url(#f)",d:"M39.97-5.197h38.4v41.28h-38.4z"})))),e||(e=Z.createElement("path",{fill:"#000",fillRule:"evenodd",d:"M142.16 42.258c0-10.08 8.17-18.26 18.26-18.26 10.09 0 18.26 8.18 18.26 18.26 0 10.08-8.17 18.26-18.26 18.26-10.08 0-18.26-8.18-18.26-18.26Zm7.08 0c0 6.18 5.01 11.18 11.18 11.18s11.18-5 11.18-11.18-5-11.18-11.18-11.18-11.18 5.01-11.18 11.18Zm34.19 0c0-10.08 8.17-18.26 18.26-18.26 10.09 0 18.26 8.18 18.26 18.26 0 10.08-8.17 18.26-18.26 18.26-10.08 0-18.26-8.18-18.26-18.26Zm7.08 0c0 6.18 5.01 11.18 11.18 11.18s11.18-5 11.18-11.18-5-11.18-11.18-11.18-11.18 5.01-11.18 11.18Zm-80.33-12.71c2.82-3.39 7.07-5.55 11.83-5.55 8.5 0 15.4 6.9 15.42 15.41v21.12h-7.09v-21.12a8.321 8.321 0 0 0-8.32-8.32c-4.39 0-7.98 3.41-8.29 7.72l.012.2c.009.133.018.266.018.4v21.12h-7.15v-21.12c0-.134.009-.267.018-.4l.012-.2c-.31-4.31-3.9-7.72-8.29-7.72a8.32 8.32 0 0 0-8.32 8.32v21.12h-7.09v-21.12c0-8.51 6.9-15.41 15.41-15.41 4.75 0 9 2.16 11.83 5.55Zm114.51 9.86c0-8.51 6.9-15.41 15.41-15.41s15.41 6.9 15.41 15.41v21.12h-7.09v-21.12a8.321 8.321 0 0 0-14.203-5.884 8.317 8.317 0 0 0-2.437 5.883v21.12h-7.09v-21.12Zm169.61-15.4c10.08 0 18.26 8.17 18.26 18.26 0 1.2-.13 2.38-.34 3.52H383.7c1.48 4.44 5.66 7.65 10.6 7.65a11.152 11.152 0 0 0 7.9-3.27l5.01 5.01c-3.3 3.31-7.87 5.35-12.91 5.35-10.08 0-18.26-8.18-18.26-18.26 0-10.08 8.17-18.26 18.26-18.26Zm10.59 14.73c-1.48-4.44-5.66-7.65-10.6-7.65-4.94 0-9.12 3.21-10.6 7.65h21.2Zm-137.55-10.9c3.09-2.4 6.97-3.84 11.18-3.84 10.09 0 18.25 8.19 18.25 18.27s-8.17 18.26-18.26 18.26c-10.08 0-18.26-8.17-18.26-18.26V9.538h7.09v18.3Zm0 14.42c0 6.18 5.01 11.18 11.18 11.18s11.17-5 11.18-11.18c0-6.18-5-11.18-11.18-11.18s-11.18 5.01-11.18 11.18Zm52.45-18.25c10.08 0 18.26 8.17 18.26 18.26l.01 18.26h-7.09v-3.84c-3.1 2.4-6.97 3.84-11.18 3.84-10.08 0-18.26-8.18-18.26-18.26 0-10.08 8.17-18.26 18.26-18.26Zm-11.18 18.25c0 6.18 5.01 11.18 11.18 11.18s11.18-5 11.18-11.18-5-11.18-11.18-11.18-11.18 5.01-11.18 11.18Zm63.3-18.26v6.84h-18.23a2.96 2.96 0 0 0-.8 5.81l11.3 3.15c4.57 1.27 7.73 5.43 7.73 10.17 0 5.83-4.73 10.56-10.56 10.56h-17.72v-6.87h17.69c1.93 0 3.5-1.57 3.5-3.5 0-1.57-1.05-2.95-2.56-3.37l-11.31-3.15a10.01 10.01 0 0 1-7.32-9.64c0-5.52 4.47-10 10-10h18.28Z",clipRule:"evenodd"})),l||(l=Z.createElement("defs",null,Z.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},Z.createElement("use",{xlinkHref:"#g",transform:"scale(.00641 .00645)"})),Z.createElement("pattern",{id:"f",width:1,height:1,patternContentUnits:"objectBoundingBox"},Z.createElement("use",{xlinkHref:"#h",transform:"scale(.0125 .0119)"})),Z.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1pmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjUwOjEwWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTA6MTAtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xMjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFBd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FKUDVsL09mek12bVc0anRaVEZwOXRjUCYjeEE7QTFpaW9yR05DVUpMa0Z1UnBYcnQyenRkUDJKaDhBYlhNaTdhODBES0JBTkU5V1hYSDVqNjVvV2k2ZTFqcFg2Ykw2YkpyZDM2MTBMWiYjeEE7b3JRU0pHc2NaWkplYmd5VjNvS0RiT2IxZUtQaXlIS2pYeGF4SXdpQnpvSmZyZjU5NnRvNXVyVyswQzJnMVRTM3VEcVVNdW9va0xSMiYjeEE7Nlc4bkMwa2FJR2FaMHUxb25FZEQxekhqZ0I2b2xuSTZOWFAvQURrUUl0VHVJSTlFRTF1WmJ1MHNJaGRvTHczTnB4QSt0Vy9FL1Y0cCYjeEE7WGZpamxqOHQ4UnA5dWFuVWI4a3MxRDgrZk0yaytaOVFUVXRJZ2lnMDJ6UmIvVG52bzBYMTRMdVNPWTJUdEhXNGtraW1oWUo4TkFQRSYjeEE7NUlZQVJzV0p6a0hjSjFEK2ZOMWNhcGUyTnRvY2MwbEw5Tkx0bHZFK3R0THB6OFhXN3QrSEszOVFWWlB0TnRRQWtqSWVCdHpaK1B2eSYjeEE7VUxQOC9kU3VOYTByUzQ5Qmp2Skx4WW51MnRKNXl5ck5POEZJWTVyZUptYUgwejZnZmp2VlIwcmhPQVVUYUJuTmdVOWx6R2NsNW4rYyYjeEE7WDVnYXQ1YU5qWTZaSUxlVzdSNUpMa3FyTlJTRkNxR0JBNzFOTTZIc1BzN0ZuNHBaTjY2S3Bmazk1dDFYelBjWE05OUxJWnJLQ09PNCYjeEE7QklLU05JVHhjQmFCZnNIYW1SN1kwY05QRUNJSHFKcnljYkRobEdVcEUzZjJQVWMwRGt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdmt6enQrZjNtVzUvT0RWdks5NTVqbDhuZVZMRjczVFZ1N2EyV2FVVEpFOFVjOHBNY2twRFRVYjRPTkY2RUg0OFZaUCYjeEE7K1dYbmZ6VDVQL0xQU0dpYVh6clBxNzZ6cktYRjNjU1dvZzByU2pISE42YlhDeVNNWkhwSkdwVWZiM3AxeFZPZFYvNXlNMTNUbFMwdSYjeEE7UExOckJyRENTNTlPZlZJNHJRV2lXTWQrditrdkVsWjJTWUlJK05LZ210TVZVNS8rY280NHJ4cGY4UGY3aWhidElJMnZJMTFMMVYweiYjeEE7OUprdFpjU3l3OFAzZnFWcFhmMnhWRGVZZnorODVhRnI4bHZxZWgyVnBkNlpiWGcxUFM1ZFRqanQzZUdHenZZMmd1R2hySk9ZTHIwMSYjeEE7aUE2MU5TQmlxYVdmL09TUDF6ekFMRzIwRVNXdHcxM2JXRURYc1Nhazl6WjJndS8zdG95L3VvcGY3dEhMbmZjNHFsMDMvT1RXcjI5eCYjeEE7cHRuL0FJYml2cjY2VjVydTJ0TGk1RHhxbDBMUTI2TFBhd3NicFpBeFpIQ3JUalJqekdLcHI1dy81VVIvamFYOUxlcitsdlVINlErciYjeEE7ZXQ5WDlYbDhYcThOdVZmdDhQcDNyblM2UDgvNEk0UHByYTZ1dkw5RnBlcHYvaGIwbDlUNmw2WDFQNGVmcFUrbzFIai9BTHByeC95ZSYjeEE7bWM5TGlzM2QzOXJFMTFRK28vNEY5Y2ZwTDlGK3Y5YStINng5WDUvWE9DZE9lL3JjUFQveXFjZmJBT0xwYkU4UFdtcHY4Q2ZwSzg5YiYjeEE7OUYvcFBpbjZRNS9WL1g0ODA0ZXRYNDZjK0hIbDNwN1krcXVxK20ranIzL0FuMXVMNjkraS9yZjFsdlE5YjZ2Nm4xdjRPZkRsOFhxLyYjeEE7WXJUNHVudGlPTHpVOFBraHRRLzVWbDlldXYwaitoZnIxVDllK3NmVlBWclRmMWVmeGRQNXNSeGRMUWVIclNNai93QUZmV05MOVA4QSYjeEE7UnYxajAvOEFjSng5RG42VlArUFdtL0duOG0yRDFic3ZUc25lUlpNRC9Oei9BSlZ4K2liVC9HbGFlb2YwZjZQTDZ6eTI1K253MzQwcCYjeEE7eTVmRDA3MHphOWxmbWVNK0I4ZTVVVitWMytBLzBBLytENi9WZlUvMHIxT2ZyK3BUYjFPZS9UcFQ0ZkR2a2UxUHpIaUR4K2ZUdStDcyYjeEE7eXpXSzdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxK2NmenAvd0NoWHY4QUgzL081ZXQvaUtrZjZUL1IvcjhLVVhoOSYjeEE7YTlIYmx3L2srUGoxL1p4VjdacHYrQWYwTHB2MUg5SGZvbjlIeWZvdW5wZW4raitDZXQ2ZkwvZFBIaDZuYnB5eFZicWYvS3VQcTcvcCYjeEE7VDlEL0FGZjFJT2YxcjZydzlUMHY5SHJ6MjVlbC9kLzVQVGJGVlMrL3dCK2xMcjYvK2l2MHI5VGY2NTYvMWI2eDlSNGZ2UFY1L0g2UCYjeEE7RDdYTDRhWXF0MW4vQUpWNTZzbjZiL1JIcS9XVTlYNjc5VzVmVy9TWDArWHE3K3I2UEhqKzF4cDJ4VlExai9sVi93Q2xaLzB6K2hQMCYjeEE7dHdQMW42NTlVK3NjUFNhdlAxUGo0K2x5Ni9zMTdZcXFwL3lyajBOSTRmb2YwT1QvQUtBNC9WZUhMbDhmMU9tMWVYWDArK0t2LzlrPTwveG1wR0ltZzppbWFnZT4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC94bXA6VGh1bWJuYWlscz4KICAgICAgICAgPHhtcE1NOlJlbmRpdGlvbkNsYXNzPmRlZmF1bHQ8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo4YTBlMTA1Ni1iM2UwLTQxNzMtYjFhMy02YTMzMjhiNWZiYjI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6OGEwZTEwNTYtYjNlMC00MTczLWIxYTMtNmEzMzI4YjVmYmIyPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjQ0ZDEwYTViLWE1MGUtNDNiZC04NTFhLWNlMDk2ZWMxYTM5MTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDo0NGQxMGE1Yi1hNTBlLTQzYmQtODUxYS1jZTA5NmVjMWEzOTE8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwvc3RSZWY6cmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5OWU2NGVkMy1hNTM0LTQ5MzYtOGEwNS1iMTUzNmY2YzllOWI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjItMDMtMjhUMTE6MzI6MDQtMDQ6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIElsbHVzdHJhdG9yIDI2LjEgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjhhMGUxMDU2LWIzZTAtNDE3My1iMWEzLTZhMzMyOGI1ZmJiMjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8aWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+V2ViPC9pbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT4KICAgICAgICAgPGlsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPkFkb2JlIElsbHVzdHJhdG9yPC9pbGx1c3RyYXRvcjpDcmVhdG9yU3ViVG9vbD4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BZG9iZSBQREYgbGlicmFyeSAxNy4wMDwvcGRmOlByb2R1Y2VyPgogICAgICAgICA8cGRmeDpDcmVhdG9yVmVyc2lvbj4yMS4wLjA8L3BkZng6Q3JlYXRvclZlcnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEAAQCWAAAAAQAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/3QAEABT/7gAOQWRvYmUAZMAAAAAB/8AAEQgAmwCcAwARAAERAQIRAf/EAaIAAAIBAwUBAAAAAAAAAAAAAAoLCAQGCQABAgUHAwEAAQQCAgMAAAAAAAAAAAAAAAMECQoCBwEFBggLEAAAAwMEBQcIE3EAAAAAAAACAwQBBQYABxMUCBESIWEJFRYxgaHwCkFRcZGx0eEXGBkaIiMkJSYnKCkqMjM0NTbBNzg5OkJDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanJzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vHy8/T19vf4+foRAAECAwIEAgUMgwAAAAAAAAEAAgMEEQUSBgcTIQgxCRQVIlEKFhcYGRojJCUyQUImJygpKjM0NTY3ODk6Q0RFRkdISUpSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+v/aAAwDAAABEQIRAD8AP4kIWpCFqQhakIWpCFjhskcVHsXLHo59w4miQydechzmGoz4Jm+aFclQvMoRpJqN/wAaDAKFnSaiVECJWEEnLHijMC0JiS6vS9n8V2hJxt4ymQLUiyosfBeOA4TU5rjnsNCHQZUHViIHNIdDe5sKDEaatjUzrINJWD2efFjbLKckSpDAimGZlIfNMDRFQg7CnzFBiWhaEadfFUTlvFjDBHiu2HO5E7DAhAANu1dtM9/cBtBDibwWDJjCFk3b1pAZzMxDCgB1cxZLwCzNTNdjRY7SSTyKG5hgWNGNZx5w5yXgB7Tix5GcfPQq6o3lGsUPyKXgXdkpUw7hY/Fy9QC7ToCC22hXwEgDlACxntTYWC+DWC0sZPBizpGzpQ6bJWBCl2Ghc4VbCYxu7nvOlpucdNxrkrLl3qFqQhakIX1JOOTnFKE5phB5BgDiDyRiKOJOKEwZZpRgGhGWYWMLGhExrGsay2yWL2MisMOIA6G4EEEVBBzEEHMQRmIKFMOaTFAbL2ZY0lkJz3Rc83SSWwjI3HazJ/DzErBFjqqRDFrHqNyl3ZbG3TvMSGMtiYwTGDGwWkcNNDhiVw7Y42zYElCnHGuXlG6pxr2cXnPl8nlTQ6UZsRulmq1pHBaCswtjpi4UKP5cQ4LJuAi4FEoMLAXOFNwS9n1C6Zo2BYYJ+QatUPSK3aiIuBCYchUvg8xowgqwWBEYL0kxm6AW2LOl3WjiptE2gGgkyc6YcKO6mlkplrYcu9xqBdislmChdlSSGDAs2CzczcToTdTvwyTGU18aQ7HcLnqDkQXzDTzTPNIUuTgKMUO9W0gYjELxTlqCxGJzglnACYFogsYILW+hOFGCWE2BVqusPCyRmrPtZrQ7JR4bobix1Q17aij2EhwD2ktJBANQaYaSvyXjyFqQhakIWpCFqQhf/9A/iQhakIWpCF4xPvZATV2N0BLpxJ2omTQ8409MndqQNyofcTPgCNStTw9DLrpCzHo+lxaUdGC6AUBjGjOMKKCMwPnOL3FxhfjQwih4M4GyjpmfdQvdpQoEMua0xo8ShEOEwuFTQuO7WNe8hp5AJ0kK9ZlYqPPVZLLXrCkCrXrNDMsMwaciFnK8AkxTFSQthxIVkcRKgAQsMLeBRwhGOdIaF2FhEEs2ujJApFLviP0JWAmKuXg2xhBDg21h0AHGYisrLy7jQ3ZWA+rQWEACZiNMdxBczINe6EFA0DpKxfS9slyuTBtZhkUXK3pMGfIQt6TBIQtUmDPkIW1Jgz5GdC2u24JCFxa1rctsiiFtIXC9jmTn/nfsdosZGkzsbvWDX0YWUmeIUbSFTqfiEo2mC73+5F5Sp0vlEwy20IFBI6MTbotoR2hM8Jw8xcYFYzLH1hYbSEGekAS5l6rYkJxFL8GKwtiQnUzEscLwzOqMyCAdNFD2DeKkzbWSoHFNxOe13TaT5qau7UqE1QMEIzhLwp0hVZhV4qQlhdT6eq8wxhbkUGGHcFCnPVCE0IIlsf8AoScKMVjpjCfBPK2rgA289zwKzMmyrjdmGNrlIUNgbemmNa3TMWHCABcmW06QssEvTxYrUhC1IQtSEL//0T+JCFqQhRjsrbK2bKxGmyVzgzgq628VdZQwRBCFSSVEEcRAUSEYXa7QjCbVHckpQDeDwGARCEgTGtYYcYQQdtXFBigwqxzYVMwbwcZclWXXzU09pMGVgk0vvpS891CIMEEOiuBztY2JEZyBVBmWR9k1OzZSzhL5wJ0ogUrhiUq8jcLJlCoEKQQ6lTU4WOWFXQceaS7kzSUZLDzr6laYUw1QYaa1o2zi4sMVWB2KTBqHg5glLNhtuty8dwaZiaiNruLMRAAXuq51xuZkJriyE1jKBKgUXgLB6lktj0I0lyt7oOp18ipQt7pmpZrZFTsELV0zUskV5ohbXQdTr5FTsELV0HU6+RU7BC1dB1OvkVKFq6DqdfIqULV0HU6+RU7BC1dB1OvkVKFtdskZ0LkUoPIOKUJzTCDyDAHEHEjEUaScUJgyjSjQNCMswsYWNCJjWNY1ltksXw4cRhhxAHQ3AggioIOYgg5iCMxCESdiaGKjKIyVuix9sm4lpYtWqQIJt5130eAvJOoUm3KWDo1WjuCwRGMwbC3a8BtYF4Wwpz2sV0ZiuLnRT6EyFYcGNjIxUyt2xmNL52z4QJyAaNemZVoqTBAFY8EVMHPEhjI3mwE3N3kLP7KOZYLUhC1IQv/SP4kIXms787UDzGTbxZOpOK9inPCkHulS815rTEoVi84sDWIXI5iFalGSvf77WNAlQpqQDVCk0AGNZbts8owLwOt/D/CeTwRwZgmNbE7Gaxgo66wE69FilrXFkGE2sSK+6bjGudQ0oQCuZBAWVFk9OBZZTuPidSPBFoWGlgdUKQoiUHqHPBsLJDDRu9xO4Z7ADUmXZwz1aloCxK1hxhtwWEQCi56cUeKrBvE9gbAwRwfBeQTEmJhwAiTMw4APivAqGigDIbKkQ4bWsvOIL3LAUUc2D1LNZLZ9NguVvdska8hau2YZc5+aIWrtmGXGfmiFqkZhkVPNELakwSM+xQtUmDPkddQtXbMOdIz7FC3u2YZc50LV2zUy415C3umanRrpFShb3TNSzWyKnYIW10zUs1sipQtmiYzDLihKEV5iUln2bP8AQqGYidt9JhzyQO7g5FnuqakRHTjQQ7khBZVu6VsNekaQ0WSZXqMgAlCAJaoVIYFYayIDRfaHZmLq19pBwNgOGBNoRdx4bbzhJTT3EnetIcrHJGSvOIZGLoQutMFhSc2mcaSzMS9H1itSEL//0z+JCEJ5iw9mQ2eKdllj9AT+MUTZTQLWlxOYhUEjdcWTogLMKeRzDCDBtWIoJIUCdpTDLi5eFdawIwUJjZftBXiUGBWB+0jYQS4bhVbMOsAPBykvIEgsFCBddNECO6lawcgCWuvsCjRQVWGJg2sw6uXvDmOms1ypMEjMhbUmoZozpGZC00xuoZm6GSMyFxpMLM6RmQtqW1yUzXyELVL0lnbKQhapekmZ36pCFvS4WZ0jMhb0jcq9IzIXKkwZ8hC3pGYZGfYoW7Bs1Muc6Fyt28prGyKlC1Li8UK85upxIummjqFZyYCfShwRhBb6RP5wvVK1jRELURl1QqSBWyVztXEtGnVpTmDTq0pphJoRlmDC3osJsGrHwwsCcwXwigNmbFnoDoUaG7eWuGm06bXsNHw3tIfDe1r2EOaCA0R2NjTP1CtkvMnAk8kJmFhSxU6QNfDqCIbT4cil3iahiaHFYDQgPYY6HwQaWWYIIQqU1EoLuijixir+40sXtrYrcO7QwJtgExpSNuHEzUjQH6/AjNpUUiQy0uAJLH3obqPY4BEihovdpa/XC//UNCs4rJAmxWsapw5107ShxUUiBDM3iQ0oB5aqPolYYgh848g0LSFKJxtpXoqJGIDD0iE0sIqQYGN3DiHxZvxs4z7NwRiVFkGIY844GhbKQKPjAEZw6LrsCG4A3YkVjiLrSRy0VNECeseCx4q1TweKpSuXrlJ6xcuWHmqlaxYqNGepVKlJ4jDlClQcMQzBjE0QxNa1rWtbKfiBBgy0BkvLMbDl4bQ1rWgNa1rRRrWtFAGgCgAAAAoEsviwxmpayStULVJhbnyELak1d/RqZFULi0zAxmrbLiqFtS4Q6M2RVC402FmsbIQtUuHOkVQtU2FmsbIzoW7DcLM29sJFULkwzBrJFULkwzC1kuaoX0YY3TNY3RrZFULlSYM+QhcmDDqbWjWS5zoXK2zUs1sualC1bwy4qULOZiI9k2ZBE7cRWNEQrDGwxO+WqiaCgDaIRDrnJhpzjUPMkDGXBKcuLoNdYwnGmCEISlzoiSw2zhNb6DaO7FWy3cDpbGjZzBrVsYtgTOxiSUeIAw7ySZeZeC1oAAZMR3uNGBYPGaqKXlEyk1//1cxWLzz6KF0azRWOrtVsE7Iccg52IqIIVFmEmxA/lD3hmFkiwgpYNpDycrldy89gTiADYne5YwCaExrGSjaj/wABIctYlsYyJllJuZjiQgEtIIgwhDjx3NJaKsixXwm1a4i/LuBALQlGDeUPgw3C1mbKRbuCUXKmwt1jJGZC4tN1eukVQuDTsLM1tuRVC4tO0MZIqhcWnYW6nTa2XFULi09mpz2M2MiqFtT4fIpFULkw63fttzLVrZyELkw7Q1mwkVQuTDWYNba18uaoX1YbhazPZIQvoE23qG5zZcoX0YZhazV5UhC+rDNU1kiq4XJg2aqXKFvdB1LNdIQvQppZyHxM/OhN9OnDwjGvib6MIei5EQUqMRsXCcTzTLzXWoUFANaFE9k5I0ygLQGAMINGEQBhE0LfG8MMGpHDPBS0cE7RpqlaMlGl3EtDrmVhuYIgBI16GSHsNQQ5rSCCAQEVTAaDoqdEdQjCsbw+dWXDGMNuOKnIopEp1O6IhdiV7u06lRKFaI2lRKwCuiTTShW7YBiDaa2uxbVkzlgWzN2FaLbtoSUzFgRRRwpEgvdDeKOa1wo5pFHNa4by0GoCC//W9KxSec5ZOjZxWRb5UjUhIhycB4TaO9IoaawpEkmtLJm/MYiIGueAE6Ze8IePWtYAYAGnKhnNKKEYIsM8mhnwZg4K4i8G5GEGl8zZ7J17hSrnTxM2LxDWEuYyM2HnBLWsay+8NDis0UaoOsPw57WS3tVZLVPh03N0iqFwafov6y/akVQvm0/DrG7CXCFwafm62RVC4NP0XmSKoW1Ph10uKhC1Ts1OukVQt6fDf1F6XNULmw/Dr2SKoX1Yc3U3tbb42RVC+oTtbq7Wc2XNUL7BNt6dmbebsJc1QvuE3DrdjIQvqwzMwslzVC+rDNQ23q9FuQhc2GYJc12CFvds1DZGfmiEbBiU05KucqwZmaPeTVI3nBSZ+zbqjT2mjKMRwY/FrvhsKMw9cvUDTJoRE7yGsE0oIDihgKKASEtkoNNFvgzBwYx9W3DlrolZ50KdaBSodMwmvjXgGMAc6Yyzs14lrmue5zy4pF27l//XjvHMXnRvG8YxooJMTKIwiqIYoPTnLBrzk50QPdY9jSDl4yU41ppQ1bQiOEADTGsumhZbtMshWFZjLDsSSsWGQ6HJykGACGhgIhQ2wwQwE3QQ2oaCaaVTSqcK16fDny7WqFxaovW7ee3ZSKoXzapZqWaNbIqhfNqnC3RrJcIXzaow67ZtkVqhcKxhz9lakVXK2rDdTr5cVQt6xhz2y5quFyYot6fXbKQhfVh+HXs1umkVQvqE9mpt3tXrr8uaoX3Cdh43Zy5qhVATsPG7NkiqF9wm6jO2EuUKoCbp9dsGy5qhfcJmbo08uaoX1YZh1ui1LlC5MM1TZcZkIjzEjbKt2zQ2M8VQg/XG/ojaGeiJ3k7DU70TgSOx2roOm+tu1KQraOrFY5kqVIglsCW01SMdq7ENrY1NGFimmcMsaEpbNnx5eWGsSAx4LCXPe2Zm9fcW0qbhYwE1N1gGkAAm4VK//9CGdPays63sZWVKpytqwxmjZy5qhcGqWW9GwbLiqF8mqsOHRfkEoXzaq09vW/qZLiqF82qtPb0ZjZFULhWcOjWSLyFtWcOjv2XFULkxTh0+Ve2UuaoX0Ypt6fWN/XIqhfUKjW6NU2XNUKoAoyr9/RqmyKoVQE/Drb+wbLmqFUgP09vjc/LZLmq4VSA7K43Yy5qhVQDrei03MtS5qhVATtbrG7OXKF92G4dbsZcoX0YZg1jZFULLdYFNtzQRI3qZL49VeDpeoeP7hMZbqGQ/O8wsHaa//9GH8buPIbGcXQjXscsisTv+G8cKsxJX8Y3qrdlcqlOqqtaqt3R0hlxdXN0K1bbY/sW0dbFjylrXMnq1LQo12t67lGNfdvUbeu3qVoK0rQaQcq1GqcOjOl2VUL5CUs1OjPkVQviJVl38/TaMEuKrlfESrDxmwkVQuFaw5WjU35cEoXFqrD+rWSKoWmKcOjWSKoXNirDo1siqF9WKcOjVtZLmqF9gqLen0Z7Jc1XCqQqMq/bt6NVLmqFVAUYdjsZAKFVgPyr+jV5csqoVWA7Dl6NU2XNUKqAdh2GsvWpc1XCqgHXsvjWbFkuUKoCbh41kiqF9WG6puballVCIzxI+xUPnssa4vjA2NjYTARPVEzkTojIVG+ALSUUEzdqhPEhYKIHQxpQlC8ZDQhLEwIyBbja22EMcWi7xsQ8CcZcnY7ZFs251iQYpcI+Tul0zONuFuSiZ6MDqkiocM1KEpvNCv//S6rFO4AUzW2e1k/D6kKoIX1Oe9pxUpqows5h6WdUlNOSEac4pMkKMSkmxSMoAWMEImiaUMYzCxjFPBobsIYeEuI3BqehltYNmMlCGgihkiZTOCXGpEEOJqA6t5oa1wAcNztCgSJTl39GdLd1VkvgJThvazRrZcVQviJTh43YyKoXxaqy7Tc+XFUL5tVX8vL1P6pcVQuFbvZbLeZoz5FULdiq3o/XIqhfRirDpmaNNLmqF9wqdS2/rNhIqhVAFNu/bv5mylzVCqwKMOjRgllVCqgKMq/o10uaoVcWfh01rRp2S5quFWFn5V/Do0zZc1QqwB+VqNGayWSFVAOw2r2ptZ+nlyChVQTsPGN2EuaoX2Ydobez2XpC4RyWJKzaLZs7A6ZQl6BUlvSOEr+nMVEnsNCUUijV+rnjDIkRahA71AEyqDwu49rRMOAM40wZRoyBFNlB1otcJoOE+Pi2okqWmVkXQpJpFKl0tCayNeIe8FzZjLNzXSGtaHsa8OCRfncv/08lWlFExA3FOTMpZIupIax3xzDi+ayMDyxEBSJ4jg885+wqpPAIIVQ3g/wBwPtaSwQWjLYS5QsawsVppsomgHw4E3g7bGL6aeMvJTDZyADW8YUcCHGA3rdhRYcN1DQ3pg53DM1aGc1ENYNThZh0X2ykHqlFTDU5d+3e0ZmbLGq5VMNTl39GjDIqhfASq3p72jV2pcVQvm1XhZrWbJsiqFxrWHRrZFULetYWa3Z2pFUL7BU4eM2EiqFUAUYb+jVNlzVCqgKcOjRglzVCqy1GVf0frlzVcKuLUYcGjZyyqhVpZ7NThlyhVxZ+HZ8Y2WVUKuLPyr+jjJcrhVgDsOjCyXNUKqAdhva1myllVC9CmugR/TszjwFNhCxVPEc4UYQ5BbkA25aWx5RI9kjoSmniGYUUUmTmq2GGjGMBZZQRCEIIWNazo8JsIJHBTByfwmtQ3bOs+TjTMTY3IMN0RwFASXENo0AEkkAAkgEOYVTGeCoSc0AwbCUCQ6TVofgqGXDCTiTUaUmruaHHUlc7sJoUKZGiKokSMAbkkkooNq0AAQ2gsrtW1a05b9sTdu2i69aE7MxY8U1caxIz3RHmrnOcaucTVznOO8uJqS2X/1DFMUbsW0Vl5YizqTVlu+uxs7nUdH005hYCRK0058HIly6G0qQagwBCbJUQapcSk4V1RIXseILLtgWs3JiDxkxsVmNGzcJXRLlkRIglp0Gt0ycdzWxS6gJORIZMsaNOJBYDmqDk00dVLqlbT0h56VSUanUpjTCFCdQWMk8g8kbSzSTiTGBGUcUMLQiC1jBBaxrGsY2U8LIjIjBEhkOhuAIINQQc4II0wRnBTldcNTh/Vo1UuaoVMNTl39GjDLiqFTCU6jNkVQvk1VqG5+s07ZcVXK2rTWWrbbzNRf0ZciqFyYqt5bc/Q2RVcL7BU4bWjMlyChVQFGVf0aMEuaoVWBRht6NZLmqFXFqMOjRqZc1Qq4tRlX9GjMlkChV5Z+VfvaNfLKq4VeWdo0aaXNUKvLO0aLzZc1Qq0s7Dn6LUsge4rhVgDsOo0ahsuaoWf3EFLGUM4U98W2SsRJzWw/MagxhgwIyzgJ3nOPG7reKBUrAbcjSKyoSg0xS08gdoZal7oTwNY0q/6I6OrGY6wMCZTFvZ7hq/bcTKzFCKslJZ7HNbTdzTHmAy64ZiyBHhnd2ZOIaCiLmlE4kl//9U/iQhBG4u5YMBsdp9CrI2b5zmpZorIV9L1T7IRpD2OmC54hJhPOIXU1UIw8tOTOCWSqfiIkQgW1AHkWQWBOmLAGXbQb45DhzgacA7cih2FFhwWthlzhfjyNbkJ9M1TLVZLxHUOumA55dEiOJXhuqKbyFgLMUZdvRxkvc0lKqjGow6/9cuKoVMJTp7dvRpstsuKoXwapY3Lbrf1yKoWqy3m7Kwy4vIXJim3p9GtbLmqFUAUYdGZezpc1qhVZajK02o1GZLkFCrSz72Xny5BXCryz8OflbCWVULsCj8OhujVS5qhdgWdoyv1NlkChdgUc3U6OMbLKqF2BZ2HRh1EuQVwq0s3Kv7HZslkhX/NzA0WTqRzCc28CudU/wCMI2fzuhyHXQjLGYaseTzUATkME0AR0CUm7aYecJlGQQAZg2sAETWdTb1vWXgxYs1hFbcZsCyZKA+LFe4gBrGCp2FXHSa0Z3OIaKkgHg5kwtsQrGWEbEWYKBZkoTaUsMcKAC6L4iAQNOZGEdvIhOZFUUmkGmqDUxTyXlXKVOI01qRCUQnuxsKYJsB+NnGTa2NfDudwztWrGx33YEKoIl5ZhIgQQQACWNNXuAGUiOfEoC6gbk1NVJiWt1wv/9Y/iQheJ2RcwE3dlDMxHcxs6brxzg+OnTUlAihmkrnQ9Eh5TwcMRulQSaSaQ9oefSUhWQ26oxjJozQjJGYWLy3AXDW3MXmFcnhfg7EydqScW8K0LXscC2JCeCCCyLDLmOzVAdeaQ4NI5BINQlyVmRYmzqWFk+MUzLTouxWAx2qlSyC4tqLUblnGggxaoIcUbQ80Kp4J2JHqnI3PTMUHHO5WE1Ie1hxI2MnQxX4zMHca2CMvhXg9EbSI0Njwb16JKzF0GJAiZmm8wnXXXWiKy7FZrjgnTSHCoUTDD8vR+uWwqrlUgz8OjXMlxVC+DVDdTrG7C0yXFVyuNO3U6/Yy5qhfQJ+HPt7ORVcKpAfh43ZslzVCrCz8rRsmy5qhV5Z+Vf0cbqpcgoXYFHZV/RgzJZAoXYlHZV/RsMEsgVwuxKOyr+m0ZksgULsSjcrR+tkskLsCjcP6uNZLIIVeWblX9GCXIK4Rj+IsYnKvmDhQNlFPW4KjPFOI4RI4BhF9u04h9TVQOvONrbweJCsbQu+M48RlkDGBhIFjsdTasMwBixelLiZ0YOiCg4c2ntGuB0e/glIR701HhvBhzsy0C6xpbu6XlnFwBvFkaPuIGlsGBFci91cw0ln3l6MpNakIX//XP4kIWpCFBXFBLA+bWz+mNUzXRmoyNxe4FZ8RzVzkI0RSt6QPFzURqS2cU0RJr1hJ+lCCS93ZSlgVlllGhEWqTJFBG3sS2OG3sTGFzcIbKGXsyM0QpuVc4hkxBvA5jnDI0M1dBi0JYS5pDocSIx+TXFpql89l7YlTy2Fk8j9mYnocdQeyG6Xw5EaBh50LR9Cxx5xLti6EXmaSTXnQuoRBGAQQKEagBiZSWUoKMLDNBi2xlYL41MF4OFOC0a/LP12LCdQRZeKAC6DGaCbr21BBBLXtLYjHOY4OLlrg4VCioM3DsMzUy8+qslTCNw61tpmYyXFULiw3VcbIqhfUJrbbL7c3Y5ciqFVgOyr9/P2cskKsLNz8/YNlzVcLsCjcq/s8DcMskLsSjdPo/WyXKF2JRuVf2ezZLIFC7Io3Kv6NTLKq4XYlG4dlhZglkChdiUZlX9lhZglyhFZ4kfiQD7h18QLZZWUzqKQLEJIIlmrmQfDqKPXo1ygoWMcazkpXmnMA7F7uLMYudjoCXW0qurqVJhB5AkjY1dFFoq5Sfk53Fhi1il8J5yM7aEN5DXNB3El5QsIL2vIycaOTcezKQ4bXseIoRe/eAig5RwpJakIWpCF//9A/iQhakIWpCFGCyusO5gLNKbc+bOfuCUkRu4umNhyJUQUyCOYFeKg1Ece9YIilqVSucCtWJ3EBVAAwaVcSWwlUUeTbLb5/i7xm4ZYrLcFvYHzboEc0EWE6roEw0BwDI8KobEAvOLCaPhk3obmuzrlri01CBpxQzEarJawiXRJHMPu1XPRY3obp4o51YYR3b1hJ0mnNLCknThUlo10OK3eK0Ex5J2KXKcWMoxqgg4waMiWTExon8Bca0GBZM69tl4cP110pFdrkZ4Fb0pFOuxQ7eITrsdpDm3HtaIr3LYgdm3lYcBCtZd9rZeyyzXC7v32Xs+XKF9gjtYWaNZIQqoseVnYJcg9xQq0sepzdiyWSFXlDw6vCzU5kuQuF2JQ9nxjZZIXZFD1Lf16ZsuULsih5Wi/s2SzBQvd5h7H2eyyWjdPN3MTNvEs5UWmlMVHoHAlLYic6BpxSbHWJX88DkUPQq5GKjyymrnkqSJAnGAA0xgxgY3xXDHDnBHF/ZDrdwytCXs+ywaB0Qm891CbkKG0OixolAXZOEx76Am7QEjEkDTRkGJxYi5NpYsMcs7E/4XBO5ZAEXK11pCwqXhNvNgpZjiQFsOIngnQhit/mIlRQxvF4o7lEpLC1CUUMutGxW4+9FthDjIy2DGBBj2XgQ7XXuzNmpsa6dxXNLsjDDmkCFCfWIwnLOcHZNqLnk5hpLOfL03Sa1IQtSELUhC//0T+JCFqQhakIWpCFqQhYU7MjEIrCqymyQRVBjlWWN88D7VrXsbHU2ZDVUKvV8Lb4z4smpXrk0LrkYjxmHmscxkPrlKkd2crGy2AXtLiy0XGNLF/kbPtSK23MGoTWsECaNIrGN3iDNtaYrXUo0ZcTENrRRsMaYUbEcOahDM2SmICWf0wqR6RBB8Kw5ZGwe7EY3gcvmZeahdF5KQJgyqEybV/pHNGD4e9sIRVRxEvsTQGBawTbRrC/evAbRh4nsL4sOTtOYjWJaUR10NnWhsEmla6swy+Cxm8X5h0AVBqBVpcqIjTzRYeI0m/j2bJ/qIUnIgiL5vonS01ahuN4bfMKP5NV1it3HtUOd/IkDwJoXggPTjui2XJxJgG7iAJjPZiy7Ysi3ZNto2HNy05IOpSLAisjQzUNcKPhuc01a5rhQ7tcDpEEqA10lbIG5bM2XZIVaWLKbqb0skKvLFatN1F7M2UuULsSm5WrtSyC4U7bHzE5LNmyWXICZrbHicI5yLaIzJxFznOgCACkYziSzlhcYxmxyuV61Mo5hpiZ3mrFwimWyiDGtYFupsM8euKbAGC9+EVtyIm2V3LwXiZmS6ho3IQMpEZeIoHRAyGDu57RUjEuaNMogOxQ0nBQOta7onsxZ1kkQlEMLUGTVzOHvJK61RgTjBATP+cV9O91vg5INMwAVBDudyM1hghMKXXIQmD9McY+jvjx4L7PxW2a6A85hOTwYXgU04crDc9gdWt10WK8UAvQakhqZi8iokeZeYaZyx2gxNN9MlN3DM28IpjTFLXVDqKhGtVnGGGGLnu8lA1D2fjwE0xoawsPPOYBgQMFcBCFnobhZhnhVh1arrbwunpiftNwAvxXVutAoGsYKMhtzbtY1ra1NKkkpEk5yvW5eMrhakIWpCFqQhakIX//0j+JCFqQhakIWpCFqQhakIWpCFa8XwPBU4Lpa4I9hCF43cQjmqGuWL4fdMSOlqhqZSiae12vlItRtOajWnFXVxdURow8FEJjX9m2taljTOrlkTMxKTdKX4MR8J9Kh1LzC11LzWmldMA6YFCtNJQwi7EtsTtjZQ1S+LDiYZEYJ2tdTQwhAzum/IqrRqTKViWAmQ0lC8bpWLdYwDFbAsAyltFlsDtGzdEBjqsplyVwmtdzb9/caO6YNc2asxlTdzDXK3NM3audXK+7YleEsxCzErmWrVi3ldTusjPouy8v2tvohOVg8UbN+M1zlH7FXjCuIy4mTB1fxosUISV441WsZKYunPjmjqlYoqjk2jmIMa7utCpatQ09oFJdUZdz1toaKPH3adzVnCOZbk60yUGVgbupW9kJeHf0hS/eu57tLxqZR+xUzJurGSxtmfepj8mkse5j5rX2dcUz4m6mngKCXqbRplyMukeEMuB2Kx3CR5qSmWxttFqDQ8FMGxur7cw+w7wmlxJ4SW1a1oSg0mTM5MR2DO12ZsWI9u7mNOlptadNopiSTple4S8SXC1IQtSELUhC1IQtSELUhC1IQv/Z",id:"g",width:156,height:155}),Z.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1pmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjUwOjEwWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTA6MTAtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xMjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFBd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FKUDVsL09mek12bVc0anRaVEZwOXRjUCYjeEE7QTFpaW9yR05DVUpMa0Z1UnBYcnQyenRkUDJKaDhBYlhNaTdhODBES0JBTkU5V1hYSDVqNjVvV2k2ZTFqcFg2Ykw2YkpyZDM2MTBMWiYjeEE7b3JRU0pHc2NaWkplYmd5VjNvS0RiT2IxZUtQaXlIS2pYeGF4SXdpQnpvSmZyZjU5NnRvNXVyVyswQzJnMVRTM3VEcVVNdW9va0xSMiYjeEE7Nlc4bkMwa2FJR2FaMHUxb25FZEQxekhqZ0I2b2xuSTZOWFAvQURrUUl0VHVJSTlFRTF1WmJ1MHNJaGRvTHczTnB4QSt0Vy9FL1Y0cCYjeEE7WGZpamxqOHQ4UnA5dWFuVWI4a3MxRDgrZk0yaytaOVFUVXRJZ2lnMDJ6UmIvVG52bzBYMTRMdVNPWTJUdEhXNGtraW1oWUo4TkFQRSYjeEE7NUlZQVJzV0p6a0hjSjFEK2ZOMWNhcGUyTnRvY2MwbEw5Tkx0bHZFK3R0THB6OFhXN3QrSEszOVFWWlB0TnRRQWtqSWVCdHpaK1B2eSYjeEE7VUxQOC9kU3VOYTByUzQ5Qmp2Skx4WW51MnRKNXl5ck5POEZJWTVyZUptYUgwejZnZmp2VlIwcmhPQVVUYUJuTmdVOWx6R2NsNW4rYyYjeEE7WDVnYXQ1YU5qWTZaSUxlVzdSNUpMa3FyTlJTRkNxR0JBNzFOTTZIc1BzN0ZuNHBaTjY2S3Bmazk1dDFYelBjWE05OUxJWnJLQ09PNCYjeEE7QklLU05JVHhjQmFCZnNIYW1SN1kwY05QRUNJSHFKcnljYkRobEdVcEUzZjJQVWMwRGt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdmt6enQrZjNtVzUvT0RWdks5NTVqbDhuZVZMRjczVFZ1N2EyV2FVVEpFOFVjOHBNY2twRFRVYjRPTkY2RUg0OFZaUCYjeEE7K1dYbmZ6VDVQL0xQU0dpYVh6clBxNzZ6cktYRjNjU1dvZzByU2pISE42YlhDeVNNWkhwSkdwVWZiM3AxeFZPZFYvNXlNMTNUbFMwdSYjeEE7UExOckJyRENTNTlPZlZJNHJRV2lXTWQrditrdkVsWjJTWUlJK05LZ210TVZVNS8rY280NHJ4cGY4UGY3aWhidElJMnZJMTFMMVYweiYjeEE7OUprdFpjU3l3OFAzZnFWcFhmMnhWRGVZZnorODVhRnI4bHZxZWgyVnBkNlpiWGcxUFM1ZFRqanQzZUdHenZZMmd1R2hySk9ZTHIwMSYjeEE7aUE2MU5TQmlxYVdmL09TUDF6ekFMRzIwRVNXdHcxM2JXRURYc1Nhazl6WjJndS8zdG95L3VvcGY3dEhMbmZjNHFsMDMvT1RXcjI5eCYjeEE7cHRuL0FJYml2cjY2VjVydTJ0TGk1RHhxbDBMUTI2TFBhd3NicFpBeFpIQ3JUalJqekdLcHI1dy81VVIvamFYOUxlcitsdlVINlErciYjeEE7ZXQ5WDlYbDhYcThOdVZmdDhQcDNyblM2UDgvNEk0UHByYTZ1dkw5RnBlcHYvaGIwbDlUNmw2WDFQNGVmcFUrbzFIai9BTHByeC95ZSYjeEE7bWM5TGlzM2QzOXJFMTFRK28vNEY5Y2ZwTDlGK3Y5YStINng5WDUvWE9DZE9lL3JjUFQveXFjZmJBT0xwYkU4UFdtcHY4Q2ZwSzg5YiYjeEE7OUYvcFBpbjZRNS9WL1g0ODA0ZXRYNDZjK0hIbDNwN1krcXVxK20ranIzL0FuMXVMNjkraS9yZjFsdlE5YjZ2Nm4xdjRPZkRsOFhxLyYjeEE7WXJUNHVudGlPTHpVOFBraHRRLzVWbDlldXYwaitoZnIxVDllK3NmVlBWclRmMWVmeGRQNXNSeGRMUWVIclNNai93QUZmV05MOVA4QSYjeEE7UnYxajAvOEFjSng5RG42VlArUFdtL0duOG0yRDFic3ZUc25lUlpNRC9Oei9BSlZ4K2liVC9HbGFlb2YwZjZQTDZ6eTI1K253MzQwcCYjeEE7eTVmRDA3MHphOWxmbWVNK0I4ZTVVVitWMytBLzBBLytENi9WZlUvMHIxT2ZyK3BUYjFPZS9UcFQ0ZkR2a2UxUHpIaUR4K2ZUdStDcyYjeEE7eXpXSzdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxK2NmenAvd0NoWHY4QUgzL081ZXQvaUtrZjZUL1IvcjhLVVhoOSYjeEE7YTlIYmx3L2srUGoxL1p4VjdacHYrQWYwTHB2MUg5SGZvbjlIeWZvdW5wZW4raitDZXQ2ZkwvZFBIaDZuYnB5eFZicWYvS3VQcTcvcCYjeEE7VDlEL0FGZjFJT2YxcjZydzlUMHY5SHJ6MjVlbC9kLzVQVGJGVlMrL3dCK2xMcjYvK2l2MHI5VGY2NTYvMWI2eDlSNGZ2UFY1L0g2UCYjeEE7RDdYTDRhWXF0MW4vQUpWNTZzbjZiL1JIcS9XVTlYNjc5VzVmVy9TWDArWHE3K3I2UEhqKzF4cDJ4VlExai9sVi93Q2xaLzB6K2hQMCYjeEE7dHdQMW42NTlVK3NjUFNhdlAxUGo0K2x5Ni9zMTdZcXFwL3lyajBOSTRmb2YwT1QvQUtBNC9WZUhMbDhmMU9tMWVYWDArK0t2LzlrPTwveG1wR0ltZzppbWFnZT4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC94bXA6VGh1bWJuYWlscz4KICAgICAgICAgPHhtcE1NOlJlbmRpdGlvbkNsYXNzPmRlZmF1bHQ8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo4NmU4MzJiZC01ZDM1LTRkYmItYjRiMS0yZDRlMjkwYmQxYmY8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ODZlODMyYmQtNWQzNS00ZGJiLWI0YjEtMmQ0ZTI5MGJkMWJmPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjhhMGUxMDU2LWIzZTAtNDE3My1iMWEzLTZhMzMyOGI1ZmJiMjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDo4YTBlMTA1Ni1iM2UwLTQxNzMtYjFhMy02YTMzMjhiNWZiYjI8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwvc3RSZWY6cmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5OWU2NGVkMy1hNTM0LTQ5MzYtOGEwNS1iMTUzNmY2YzllOWI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjItMDMtMjhUMTE6MzI6MDQtMDQ6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIElsbHVzdHJhdG9yIDI2LjEgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjg2ZTgzMmJkLTVkMzUtNGRiYi1iNGIxLTJkNGUyOTBiZDFiZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8aWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+V2ViPC9pbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT4KICAgICAgICAgPGlsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPkFkb2JlIElsbHVzdHJhdG9yPC9pbGx1c3RyYXRvcjpDcmVhdG9yU3ViVG9vbD4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BZG9iZSBQREYgbGlicmFyeSAxNy4wMDwvcGRmOlByb2R1Y2VyPgogICAgICAgICA8cGRmeDpDcmVhdG9yVmVyc2lvbj4yMS4wLjA8L3BkZng6Q3JlYXRvclZlcnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEAAQCWAAAAAQAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/3QAEAAr/7gAOQWRvYmUAZMAAAAAB/8AAEQgAVABQAwARAAERAQIRAf/EAaIAAQAABAcAAAAAAAAAAAAAAAoAAQIDBAUGBwgJCwEAAgEDBQEAAAAAAAAAAAAAAAkIBAYHAQIDBQoLEAAABAEBBgEGjwAAAAAAAAABAgMEBQYABxESEyEICTFBYdHwChQVFhcYGRoiIyQlJicoKSoyMzQ1Njc4OTpCQ0RFRkdISUpRUlNUVVZXWFlaYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAEBAQUFAwmJAAAAAAAAAAECAwAEBQYRBxIhMUETUWEIFCIycXKBgpEJChUWFxgZGiMkJSYnKCkqMzQ1Njc4OTpCQ0RFRkdISUpSU1RVVldYWVpiY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+v/aAAwDAAABEQIRAD8AfxMOHRMOHbEz07EJIKdbVWDtyaPSlKUaEnYMqgo4bHpCnTCMOhOKMIKcqhTAU4GXEhgMVIxRozXTAUUYVh0hozAZPOXDRYMhtwU13CRMtAqBdhyaJNwiVM8Wp4PloX7GADDqwUlSkGQEVuuWdYgggyKlaFJCks1Jou6yZ60/eeDPUVXbxqJXJ0nTqEMhJaEGVbQgpUTFOgZ4AnO4irgqiZVBO4OcpVbxJkTCgUudYuRVgeAQlb2Zz79qtVyFdGnO1ECQySJAlFBRVRJhJHOa/HCaC2UzhNtWEDlQKXqxlSxABBTP0SpqqUBUrQkBVFCUCRI2AXChRG3tE19sKLrYeZlkdkbg1ns1vuk3csEyuut5M5ZHcop0djLnhztTMoPKYysvZIIXk3FIo6MWUEObjTUoQuPKlXWWTbCYBK3dgsnUyAkmZAtAxbGjNMkgOMQU+oOkeUKqozyE35KOg2YkAJqqROmUzygsygyDiTNQjDAiWbyhEl+wWmhIs36oGgGhlJAqJXPCQTqSgSEdp86+fVO5nwsFXkh5QIvnLVJNWJQR0QzKOwoFBpSi+hq15lSql4QWSFVuY1YqhhmjbGWJ0YYpNwyhpgUMlkhDRNpM1yZdWKEslGdVOqAppDpNQHGOCIwsK2gxrPKAlUgidWm3km6SiVNcS7daa2Hd66Jhw7//0HpytldAJDwN3KGUr9OHw1rSkphAVF3LhSjUWbNuSio5driUaUhQrAAmNQIUxgq3k8XzCL4S9XomeaqugFUk1AK+4UyAbYjfHCL0RYCaxjjM+EveDGUglNFS1m1WbNAtJbRUhkSmoCpUiEqUOumenYpZXyvK4hMkQWkdJ5UtSUWQVAZRvyU1ERWiSQgENROAFvKa0qgXiKZY5DCUMrwJE14PEpfD+kfD6FGQi/NNsSbWNiqhSISCJXLvmlWVPG2OJaQVFILgeLyhOlSVSvtqJcdNk0GKSALQYyKFpBTZohRSOI7mmUMdRQxjnOYxznOImOc5homMc40RMYwjRERGuM2RWJAtEUA6PT3bLaLn1klZMpJMpJNMmWqa92SOAs9bnZu3YF1zPJRMjshcj2NvxE3ePZ15PASyO026PQo29ea4HqiWR18wcylkdpp2rQo22a4nqzpOvyDnvLI7LGMfi0nooyjcCiT2ERiGOCOofEoc5VZvWblPAqzdwiYiiZwARCsNcBEBrCITdyuDnrCD1W8n8yQ2ejVM6tCwFJUDUINAjmHX/BCGz3aobvdRQ2SZQpJkINgXdjs4iyhjtuvDpLT8mpHbRQ6TRGeHCUCou21UXIQi0qIIgQjd02SIqIqOmIJqETSKAtljmOoEf482Tyzas2kKxHUUtgCovRoZUqkEsjBoaKVEighrKklRv1QkBLs3QFGxutKXvConqlaASG5kigbamSgLVJlLu2CHxBhFmDKKQt60iUMiTRtEIdEYe5ReMIgweIkcM3rJ43Oo3dNHTdQqiaiZjEOQwGKIgIDNFB8Pdu9G63q+kLZPpksoWhYKVIUkyKSpJAKVJIIIIBBEhErsgpUlaQtBBSRKCKRFeHf/0VO2IWeQ7l9Ll+0SVUJJ6S7t7BoQ1A4GRVVbLmbv4vQKAAKkRWQASCNcqBSBWGmo5mixBSINg5KyBZ02SFKNWQiUJuUGjYy2DlGWUZNQfk0KP74eTFakxcgls1ez2RLKlSkLKGr4oUy2UmVMtEMks00DPS8fVArTXWzLsGsVUXZauHY1t1m7FiaTu/ehdkTmzDpg2+TTd093Xc8KjtNuzVht90muJ6plIdfcGolIdpR6pQo15rneiJXZEgtjLI7SjxWz17VNc70ZUnZGgt7yyO0s6WoUa+TzXI9mLsgQc9aVB2n117Pk83esGLr0eb0kAd2t2Ten7RJy9jE4uUDpw8ZJsHMp5CuFjOF7k0GyqRY/J4DGOqVFguVwV62IBUkklCOaJjGWTKEUrKViC9mL3Yx8g9KUNi0SwfQEgn54Gsm1SVYkLNZlUpSSykACFE39AbVaEl6rlKaabCvFsq3Wvd//0kTDWCaRIpuQSgOwqg2e3t7PNzsw6vYh2WL2nYbRN2TCo64XnTDsgdjZ5u8eopOvGDk0naVfHoUaE1zvNMsjsiQSzlkdo98pQpq/r87NdjyZ0nZPghhLJQdo18tZ69mmu15saTsnwS9ZZHaSdr2evk9uE10PVi7JEGvOWQyO08u4r2fTJu+YMHXq83nQFB3ImwbxV3D7E9OfWZLVFZWUjiHmPSJqUzSKwWKQx+lSqkUKFxhi8VTpqFMSmolEDAAhjybS8WL4mVwyhsmVAeoXTItJm1ZrQaElJSUmSkZJCCCQbher2LNoFio7/9NEBjW9tmkYEuQilmarsMoetsM1SzRUd2DBnRdla57ejN2TFLrgebM0Hafdns9ebvXqmiHXpBrKiHaQiClCjXDTJrseLOWR2TIGYSyO0REFqFGvk9vpk15PBlLI7LMCvaWR2iH69CjX4ma8nixlkdliBnpLJQdo964s9ejWt8nmut6MKVB2ToLeUslB2m3Dmz17fsZu/Yveg6+Xm8ZRSdyDsHq9NYnZzBcnlk2DTL0jubH02ljOzKYcVXPFXNku7dbznGJXXB3/1ELCpa5pLJQ5ESWLsIqpNVM2d1d2b3YOylwrWGbtGDJ1xvJ70Q7Trxaz18n+qbv3oxoh17wY9aIMjtHP1sDV7fiZrteLGk7KEDPWiKDtCxFfA1ea9XgxpOy7Aj0lkoO0LEF8DV5r1eLGk7L0CvSlQdot6vZ69v6813PNg7KcFPOlQdphy4oCNe3ybdZrhYMKDr9eTylAdyJsGq9NYo5ygUbPLRt0UeTY4m3sZ2ZJDx0Qq5sl1e/3pWcHtVSUkO//1UEGVrDNKNLOucjpmwouwKqtABmrWTJ3bPZ7UQ7JXK1nrzdu92NF10PB60RQdpp6vWGvZ7ejNcTzY0Q6/IKelEO0e/WwNXyevb15rseLKk7J8DPSiKFB2h4irgavzv1zXo8GVJ2XIEe0klB2hIgrgav2E16PBlSdl6BXsBI7RT5Ua9ea8HmyFB2VYJe4oO0q5VGiNea4mLOg7ILyewnRQdyOsF6lNYqJyIZPLVr0TebDNjGbomSZDD+qBXNku5oaYhMDt1VzPrQ7/9ZJE+WQj2drL+Oydco1NkdwrFICqUAKm6gD5w4GHqpAAjQqNTOgcLQqicLMACMlotQmyhqCWT8QZWgASsVQ0SBPA22UKFgQ5S006Ib6iHHd+QG2ROvMtC1exFJb3aKVWZFuyKZqrloUKQEuzyytYa811smVF1rvV7UaTskdLWcKM3cvZi67Xg9aIdph4tZ69vZ5rjejGk6/oLetKg7SD9bAwUcnt7XNdbyZUi7JkEPYCR2in6lnr2ia8Hiik7K0DMZJHaJiB6NNQmvF4pAkdleBmckjtGPRGiaa7XpIHZSgkCgHaXcUaM3fsqTr+eUk6HdoVksJy0WlLPaiM+p6yOnJadxDorB4RETi5SK9lvKKGXJqrJpSEK2eEhclIo6O7AxxFAzxqNINUA5ImWV3Ht5wVExlENg0BheFGrNq0QJ0zr1YtJ8KVjpJaPhmzDOQWkGbYTwnSlXTxwhBmyeCYPSb9mpBIrkJMsprpVASV8iq6j//13Lz5JzcAnwyfThsRUNDYzDTLOIFHW6KCjhk4UQUTFs6BRMVHEIcKCQ66BDpmOZMggcolAZrji3GR9xcflbsRPvZcgWzJMihLTFQLAlCVEGSU0CC7Gs0yZlA00uB0vJ/EsITYFSmDdKUlSFFJE4qUSqYqM6VoCkklKSFAgF3UfPPnQS/nVvFG8qoKqDAVATayhhxV3kn34mCiUG0RFBEE1TZVLkRXrURJQoCMj4uxigeMDMLg9qK2klLNUgaJtqZTKLFJKbF0DIzTM41RGfZYQ69jZtPSJbs5VsF260nRIdArCF6BpF2x7pWsNcJr7ezKi7hg97URQdpl2rZ69a3tM1xPVk6/YMe0kjtKvVLPXt7XNc7zRSdkaCmMkjtIPjWezW+6TXW8hJI7JcEJAIdo98GBh02a6nmaTsmwUqSQO0k8II0be3s01zvVbsjwY1AAdzQsOVgBnqz8HMLlFKlo5ndzsXCiTlWOxRNNKPx5gRwQHDeTEDWpnZTuEKNRfPEU2VAQOncYpRTHCk02yjooRAZNoMglaITjWkFIZMySxYrIM6W7UWjIk2syZqLXHKqzlCh3zaMDB4sylnfo+JKAqA2J6wUbZTcgqdZOukZOakNBJ3sg4ZcmSegaBip1U4Lv4i8XNVX0XizukIL2KRFwIqKqUpSAIgRMpEikTKt2N8bocjxGB8RljE1rWEnwqjIJEISKCGbNNGdZoFBIlJx0oqWVKNlvt9t38+FPl8GVqq6AVABUA+lGUn/0H8TDh2CiMNh0YYuYZF4eyisNepCi8h8RaoPmLtERARSctHKarddIRABpTFEK03Kwbt3q2S+HstbNugypUklKga8KEhBtjqd9PR6v57reb+ZM2z0aCRSFpC0KFcpKgQRYEF3AGfRYHoZF0n0enRuyQiKmMs6UkjFXI3Iru8Kipm8GfmTUXha6h6BU0lxO2ExgAVECBRDNsUZr7d6LQ8ozoLV7UBW6BfompK0TKAsCmSmRcglnVqdgSNMwyD2hW/4pKDB8ElRe6zfmasjNVEoNQJVKijJPISKHVtLaScqZCxlxJ+WEDiUnowgQqhmUSbmROogc6iabpqpeJB4zVOiYCLJGOkcSjSmGgNCTsBQlBkNPRL+glszbvRRknkGUA0CQRTSoSiVKgFCUSh2J7wR/wAEPovKEmK2L6TRnVCShXg0ikyGRQJBkoF227s9GjNeL1TI67IOZySO0y7CjR0ytps1xPWhI6/IOMkjtxp0th3npT94qLCQcAMpDUnAtYnKqK1dhJSDKgkRYxIhFitnBjuSpKkNcWbpuHQlOUwJCUaM3URrmkRUiA9LOIffEj5KZ5DBnItu0EskqGc8mhKCJ9akM5QRPS0HZDghLVtRZi0RTNR3cpYf7AZOmnOmYSilM2QnkTwG9xR0nF460TPAIC/QoK1STcn1ao1Ksi5Ap0njsHDpM6RFERbiJijDGaJZQccY6JaQZBS1QZF1U8ks2SiGrVBoSNmwkVIUyhTNnOMyFFK60EhF5IW0QicBNi7nRNgJ210TDh3/0X8TDh0TDh0TDh2jJcTvJETyYQaBy5kzC5SQ28wUU36A3GWSipQIovDIigZGIwl0chQKKzZVJWlrU1CiE3cQLD8NRdfdnsCPlq93xQlKTQUBSC0GVC01Z1aVCWjI7r4RgqDoWYWbwkxQ2ZVJ4UUmvSoSKSbFJBsXdec+2wSzn5KQlKUUAiEt2Bn0daw8ITctQt1C2bdWHP1zg1F7AXEVE4qsijRWdK4GNaKFLIKJM2mN0KPswc/mbyaBDArn6zWlaiFoFpTrUIpKNqoTSFjLYUKRIgaD2YfD1U3TKsCdnklIEhNCVJVUqqPga5nQ2BecMMFgcrI+ylNK91EGrZ6MMlDHCEgzZwkqqNFJpAGECXcoqCBadJ0q4SOBaAlpRMBuojdN0j6l+t4Jg9b2ebJmtSZ9kylaEECmpqpqEkUZFIShQllBlAI76CYsQWzYIfCw0aKIBkUqgLgkJ4WV3PWEweEwCGs4NAoXDoLCIeiDdhCoSybQ2GsUAETAgzYs0kWrZEDGEaUhSlojNgV9vx9wg+Vv1/tWjd+NDKto0Upa1GvUpRKlGxJJddqEIZpCGYCUCkAJALg7MZqZ250TDh0TDh3/2Q==",id:"h",width:80,height:84}))))}},88109:(A,I,C)=>{C.d(I,{Z:()=>U});var g=C(27378);function U(A){let{src:I,width:C="90%",alt:U="",title:Q,align:F="center",padding:B="1rem"}=A;return g.createElement("div",{style:{marginBottom:B,marginTop:B,textAlign:F}},g.createElement("img",{src:I.default,width:C,alt:U,title:Q,className:"inline-block"}))}},78708:(A,I,C)=>{C.r(I),C.d(I,{assets:()=>l,contentTitle:()=>V,default:()=>a,frontMatter:()=>E,metadata:()=>e,toc:()=>Z});var g=C(25773),U=(C(27378),C(35318)),Q=C(76911),F=C(88109),B=C(24516);const E={slug:"moonbase",title:"Remote caching is now publicly available through moonbase",authors:["milesj","jpoz"],tags:["moonbase","remote-cache"]},V=void 0,e={permalink:"/blog/moonbase",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-08_moonbase.mdx",source:"@site/blog/2023-02-08_moonbase.mdx",title:"Remote caching is now publicly available through moonbase",description:"We are proud to announce the launch of moonbase remote caching \u2013 a new solution that",date:"2023-02-08T00:00:00.000Z",formattedDate:"February 8, 2023",tags:[{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"}],readingTime:1.74,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"},{name:"James Pozdena",title:"Founder, developer",url:"https://github.com/jpoz",imageURL:"/img/authors/james.jpg",key:"jpoz"}],frontMatter:{slug:"moonbase",title:"Remote caching is now publicly available through moonbase",authors:["milesj","jpoz"],tags:["moonbase","remote-cache"]},prevItem:{title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",permalink:"/blog/v0.24"},nextItem:{title:"moon v0.23 - Scoped task inheritance, and project config updates",permalink:"/blog/v0.23"}},l={authorsImageUrls:[void 0,void 0]},Z=[{value:"What is moonbase?",id:"what-is-moonbase",level:2},{value:"New homepage and product pages",id:"new-homepage-and-product-pages",level:2}],R={toc:Z};function a(A){let{components:I,...E}=A;return(0,U.kt)("wrapper",(0,g.Z)({},R,E,{components:I,mdxType:"MDXLayout"}),(0,U.kt)("p",null,"We are proud to announce the launch of ",(0,U.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase")," remote caching \u2013 a new solution that\nhelps moon developers streamline their build processes and save time."),(0,U.kt)("div",{className:"flex justify-center mb-3"},(0,U.kt)(B.Z,{width:"65%",className:"block",mdxType:"Logo"})),(0,U.kt)("p",null,"Remote caching allows developers to cache artifacts across builds, improving the efficiency of their\nContinuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts\nwhen moon is run with moonbase ",(0,U.kt)("a",{parentName:"p",href:"/docs/guides/remote-cache"},"remote caching enabled"),". In the event\nthat a CI run is executed with identical code, the cached artifacts are automatically pulled down,\nreducing the time required to complete the build. In our tests, we have seen significant\nimprovements in CI times, upwards of 90%."),(0,U.kt)("h2",{id:"what-is-moonbase"},"What is moonbase?"),(0,U.kt)("p",null,"You may be asking yourself, what is moonbase? ",(0,U.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase")," is a new cloud service that\nwe've been working on to solve an array of problems in regards to repository and continous\nintegration health."),(0,U.kt)(F.Z,{src:C(53044),width:"80%",mdxType:"Image"}),(0,U.kt)("p",null,"The first problem on this list is ",(0,U.kt)("a",{parentName:"p",href:"/docs/guides/remote-cache"},"remote caching"),", which has been in a\nbeta program for the past few months. We want to thank all the beta participants for testing our\nsystems!"),(0,U.kt)("p",null,"We'll also be launching CI insights in the next few weeks. This is a system where we track all your\nCI runs (via ",(0,U.kt)("inlineCode",{parentName:"p"},"moon ci"),"), and all moon tasks (actions) that ran within each job. We use this\ninformation to track the health of your pipelines, catch regressions, alert on flakiness, and more!\nBut don't worry, this feature is opt-in."),(0,U.kt)("p",null,"We're very excited for moonbase! We have a massive roadmap ahead of us, but we're sure y'all will\nenjoy everything that it has to offer."),(0,U.kt)("div",{class:"flex justify-center"},(0,U.kt)(Q.Z,{label:"Try moonbase for free!",href:"https://moonrepo.app",size:"lg",mdxType:"Button"})),(0,U.kt)("h2",{id:"new-homepage-and-product-pages"},"New homepage and product pages"),(0,U.kt)("p",null,"As part of this release, we've updated our homepage, and added new product pages for both\n",(0,U.kt)("a",{parentName:"p",href:"/moon"},"moon")," and ",(0,U.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase"),". This includes new logos and typography, which we're very\nexcited for! This is only the beginning, as we're also working on additional behind the scenes\nproducts. Stay tuned!"))}a.isMDXComponent=!0},53044:(A,I,C)=>{C.r(I),C.d(I,{default:()=>g});const g=C.p+"assets/images/org-bc5ac0d2c9196fe2d565e9e715b7a205.png"}}]); \ No newline at end of file diff --git a/assets/js/61486960.aaef6a4c.js b/assets/js/61486960.aaef6a4c.js deleted file mode 100644 index 762f6013fd8..00000000000 --- a/assets/js/61486960.aaef6a4c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8869],{35318:(A,I,C)=>{C.d(I,{Zo:()=>e,kt:()=>R});var g=C(27378);function U(A,I,C){return I in A?Object.defineProperty(A,I,{value:C,enumerable:!0,configurable:!0,writable:!0}):A[I]=C,A}function Q(A,I){var C=Object.keys(A);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(A);I&&(g=g.filter((function(I){return Object.getOwnPropertyDescriptor(A,I).enumerable}))),C.push.apply(C,g)}return C}function F(A){for(var I=1;I<arguments.length;I++){var C=null!=arguments[I]?arguments[I]:{};I%2?Q(Object(C),!0).forEach((function(I){U(A,I,C[I])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(C)):Q(Object(C)).forEach((function(I){Object.defineProperty(A,I,Object.getOwnPropertyDescriptor(C,I))}))}return A}function B(A,I){if(null==A)return{};var C,g,U=function(A,I){if(null==A)return{};var C,g,U={},Q=Object.keys(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||(U[C]=A[C]);return U}(A,I);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||Object.prototype.propertyIsEnumerable.call(A,C)&&(U[C]=A[C])}return U}var E=g.createContext({}),V=function(A){var I=g.useContext(E),C=I;return A&&(C="function"==typeof A?A(I):F(F({},I),A)),C},e=function(A){var I=V(A.components);return g.createElement(E.Provider,{value:I},A.children)},l={inlineCode:"code",wrapper:function(A){var I=A.children;return g.createElement(g.Fragment,{},I)}},Z=g.forwardRef((function(A,I){var C=A.components,U=A.mdxType,Q=A.originalType,E=A.parentName,e=B(A,["components","mdxType","originalType","parentName"]),Z=V(C),R=U,a=Z["".concat(E,".").concat(R)]||Z[R]||l[R]||Q;return C?g.createElement(a,F(F({ref:I},e),{},{components:C})):g.createElement(a,F({ref:I},e))}));function R(A,I){var C=arguments,U=I&&I.mdxType;if("string"==typeof A||U){var Q=C.length,F=new Array(Q);F[0]=Z;var B={};for(var E in I)hasOwnProperty.call(I,E)&&(B[E]=I[E]);B.originalType=A,B.mdxType="string"==typeof A?A:U,F[1]=B;for(var V=2;V<Q;V++)F[V]=C[V];return g.createElement.apply(null,F)}return g.createElement.apply(null,C)}Z.displayName="MDXCreateElement"},24516:(A,I,C)=>{C.d(I,{Z:()=>a});var g,U,Q,F,B,E,V,e,l,Z=C(27378);function R(){return R=Object.assign?Object.assign.bind():function(A){for(var I=1;I<arguments.length;I++){var C=arguments[I];for(var g in C)Object.prototype.hasOwnProperty.call(C,g)&&(A[g]=C[g])}return A},R.apply(this,arguments)}const a=A=>{let{title:I,titleId:C,...a}=A;return Z.createElement("svg",R({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 413 74",role:"img","aria-labelledby":C},a),I?Z.createElement("title",{id:C},I):null,Z.createElement("mask",{id:"a",width:65,height:65,x:0,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},g||(g=Z.createElement("path",{fill:"#fff",d:"M32.64 73.698c17.828 0 32.28-14.453 32.28-32.28 0-17.828-14.452-32.28-32.28-32.28C14.812 9.137.36 23.59.36 41.417c0 17.827 14.452 32.28 32.28 32.28Z"}))),Z.createElement("g",{mask:"url(#a)"},Z.createElement("mask",{id:"b",width:75,height:75,x:-5,y:4,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=Z.createElement("path",{fill:"#fff",d:"M-4.64 4.138h74.56v74.56H-4.64V4.138Z"}))),Q||(Q=Z.createElement("g",{mask:"url(#b)"},Z.createElement("path",{fill:"url(#c)",d:"M-4.67 3.923h74.88v74.88H-4.67z"})))),F||(F=Z.createElement("path",{fill:"#5341D6",d:"M60.39 33.898v-11.01c0-1.55-.83-2.98-2.17-3.76l-9.54-5.51c-1.34-.77-3-.77-4.34 0l-9.54 5.51a4.342 4.342 0 0 0-2.17 3.76v11.01c0 1.55.83 2.98 2.17 3.76l9.54 5.51c1.34.77 3 .77 4.34 0l9.54-5.51a4.355 4.355 0 0 0 2.17-3.76Z"})),Z.createElement("mask",{id:"d",width:29,height:31,x:45,y:0,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},B||(B=Z.createElement("path",{fill:"#fff",d:"M73.07 20.867V9.848c0-1.55-.83-2.98-2.17-3.76L61.36.578c-1.34-.77-3-.77-4.34 0l-9.54 5.51a4.342 4.342 0 0 0-2.17 3.76v11.01c0 1.55.83 2.98 2.17 3.76l9.54 5.51c1.34.77 3 .77 4.34 0l9.54-5.51c1.34-.77 2.17-2.2 2.17-3.75Z"}))),Z.createElement("g",{mask:"url(#d)"},Z.createElement("mask",{id:"e",width:39,height:41,x:40,y:-5,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},E||(E=Z.createElement("path",{fill:"#fff",d:"M40.32-4.992h37.75v40.7H40.32v-40.7Z"}))),V||(V=Z.createElement("g",{mask:"url(#e)"},Z.createElement("path",{fill:"url(#f)",d:"M39.97-5.197h38.4v41.28h-38.4z"})))),e||(e=Z.createElement("path",{fill:"#000",fillRule:"evenodd",d:"M142.16 42.258c0-10.08 8.17-18.26 18.26-18.26 10.09 0 18.26 8.18 18.26 18.26 0 10.08-8.17 18.26-18.26 18.26-10.08 0-18.26-8.18-18.26-18.26Zm7.08 0c0 6.18 5.01 11.18 11.18 11.18s11.18-5 11.18-11.18-5-11.18-11.18-11.18-11.18 5.01-11.18 11.18Zm34.19 0c0-10.08 8.17-18.26 18.26-18.26 10.09 0 18.26 8.18 18.26 18.26 0 10.08-8.17 18.26-18.26 18.26-10.08 0-18.26-8.18-18.26-18.26Zm7.08 0c0 6.18 5.01 11.18 11.18 11.18s11.18-5 11.18-11.18-5-11.18-11.18-11.18-11.18 5.01-11.18 11.18Zm-80.33-12.71c2.82-3.39 7.07-5.55 11.83-5.55 8.5 0 15.4 6.9 15.42 15.41v21.12h-7.09v-21.12a8.321 8.321 0 0 0-8.32-8.32c-4.39 0-7.98 3.41-8.29 7.72l.012.2c.009.133.018.266.018.4v21.12h-7.15v-21.12c0-.134.009-.267.018-.4l.012-.2c-.31-4.31-3.9-7.72-8.29-7.72a8.32 8.32 0 0 0-8.32 8.32v21.12h-7.09v-21.12c0-8.51 6.9-15.41 15.41-15.41 4.75 0 9 2.16 11.83 5.55Zm114.51 9.86c0-8.51 6.9-15.41 15.41-15.41s15.41 6.9 15.41 15.41v21.12h-7.09v-21.12a8.321 8.321 0 0 0-14.203-5.884 8.317 8.317 0 0 0-2.437 5.883v21.12h-7.09v-21.12Zm169.61-15.4c10.08 0 18.26 8.17 18.26 18.26 0 1.2-.13 2.38-.34 3.52H383.7c1.48 4.44 5.66 7.65 10.6 7.65a11.152 11.152 0 0 0 7.9-3.27l5.01 5.01c-3.3 3.31-7.87 5.35-12.91 5.35-10.08 0-18.26-8.18-18.26-18.26 0-10.08 8.17-18.26 18.26-18.26Zm10.59 14.73c-1.48-4.44-5.66-7.65-10.6-7.65-4.94 0-9.12 3.21-10.6 7.65h21.2Zm-137.55-10.9c3.09-2.4 6.97-3.84 11.18-3.84 10.09 0 18.25 8.19 18.25 18.27s-8.17 18.26-18.26 18.26c-10.08 0-18.26-8.17-18.26-18.26V9.538h7.09v18.3Zm0 14.42c0 6.18 5.01 11.18 11.18 11.18s11.17-5 11.18-11.18c0-6.18-5-11.18-11.18-11.18s-11.18 5.01-11.18 11.18Zm52.45-18.25c10.08 0 18.26 8.17 18.26 18.26l.01 18.26h-7.09v-3.84c-3.1 2.4-6.97 3.84-11.18 3.84-10.08 0-18.26-8.18-18.26-18.26 0-10.08 8.17-18.26 18.26-18.26Zm-11.18 18.25c0 6.18 5.01 11.18 11.18 11.18s11.18-5 11.18-11.18-5-11.18-11.18-11.18-11.18 5.01-11.18 11.18Zm63.3-18.26v6.84h-18.23a2.96 2.96 0 0 0-.8 5.81l11.3 3.15c4.57 1.27 7.73 5.43 7.73 10.17 0 5.83-4.73 10.56-10.56 10.56h-17.72v-6.87h17.69c1.93 0 3.5-1.57 3.5-3.5 0-1.57-1.05-2.95-2.56-3.37l-11.31-3.15a10.01 10.01 0 0 1-7.32-9.64c0-5.52 4.47-10 10-10h18.28Z",clipRule:"evenodd"})),l||(l=Z.createElement("defs",null,Z.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},Z.createElement("use",{xlinkHref:"#g",transform:"scale(.00641 .00645)"})),Z.createElement("pattern",{id:"f",width:1,height:1,patternContentUnits:"objectBoundingBox"},Z.createElement("use",{xlinkHref:"#h",transform:"scale(.0125 .0119)"})),Z.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1pmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjUwOjEwWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTA6MTAtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xMjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFBd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FKUDVsL09mek12bVc0anRaVEZwOXRjUCYjeEE7QTFpaW9yR05DVUpMa0Z1UnBYcnQyenRkUDJKaDhBYlhNaTdhODBES0JBTkU5V1hYSDVqNjVvV2k2ZTFqcFg2Ykw2YkpyZDM2MTBMWiYjeEE7b3JRU0pHc2NaWkplYmd5VjNvS0RiT2IxZUtQaXlIS2pYeGF4SXdpQnpvSmZyZjU5NnRvNXVyVyswQzJnMVRTM3VEcVVNdW9va0xSMiYjeEE7Nlc4bkMwa2FJR2FaMHUxb25FZEQxekhqZ0I2b2xuSTZOWFAvQURrUUl0VHVJSTlFRTF1WmJ1MHNJaGRvTHczTnB4QSt0Vy9FL1Y0cCYjeEE7WGZpamxqOHQ4UnA5dWFuVWI4a3MxRDgrZk0yaytaOVFUVXRJZ2lnMDJ6UmIvVG52bzBYMTRMdVNPWTJUdEhXNGtraW1oWUo4TkFQRSYjeEE7NUlZQVJzV0p6a0hjSjFEK2ZOMWNhcGUyTnRvY2MwbEw5Tkx0bHZFK3R0THB6OFhXN3QrSEszOVFWWlB0TnRRQWtqSWVCdHpaK1B2eSYjeEE7VUxQOC9kU3VOYTByUzQ5Qmp2Skx4WW51MnRKNXl5ck5POEZJWTVyZUptYUgwejZnZmp2VlIwcmhPQVVUYUJuTmdVOWx6R2NsNW4rYyYjeEE7WDVnYXQ1YU5qWTZaSUxlVzdSNUpMa3FyTlJTRkNxR0JBNzFOTTZIc1BzN0ZuNHBaTjY2S3Bmazk1dDFYelBjWE05OUxJWnJLQ09PNCYjeEE7QklLU05JVHhjQmFCZnNIYW1SN1kwY05QRUNJSHFKcnljYkRobEdVcEUzZjJQVWMwRGt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdmt6enQrZjNtVzUvT0RWdks5NTVqbDhuZVZMRjczVFZ1N2EyV2FVVEpFOFVjOHBNY2twRFRVYjRPTkY2RUg0OFZaUCYjeEE7K1dYbmZ6VDVQL0xQU0dpYVh6clBxNzZ6cktYRjNjU1dvZzByU2pISE42YlhDeVNNWkhwSkdwVWZiM3AxeFZPZFYvNXlNMTNUbFMwdSYjeEE7UExOckJyRENTNTlPZlZJNHJRV2lXTWQrditrdkVsWjJTWUlJK05LZ210TVZVNS8rY280NHJ4cGY4UGY3aWhidElJMnZJMTFMMVYweiYjeEE7OUprdFpjU3l3OFAzZnFWcFhmMnhWRGVZZnorODVhRnI4bHZxZWgyVnBkNlpiWGcxUFM1ZFRqanQzZUdHenZZMmd1R2hySk9ZTHIwMSYjeEE7aUE2MU5TQmlxYVdmL09TUDF6ekFMRzIwRVNXdHcxM2JXRURYc1Nhazl6WjJndS8zdG95L3VvcGY3dEhMbmZjNHFsMDMvT1RXcjI5eCYjeEE7cHRuL0FJYml2cjY2VjVydTJ0TGk1RHhxbDBMUTI2TFBhd3NicFpBeFpIQ3JUalJqekdLcHI1dy81VVIvamFYOUxlcitsdlVINlErciYjeEE7ZXQ5WDlYbDhYcThOdVZmdDhQcDNyblM2UDgvNEk0UHByYTZ1dkw5RnBlcHYvaGIwbDlUNmw2WDFQNGVmcFUrbzFIai9BTHByeC95ZSYjeEE7bWM5TGlzM2QzOXJFMTFRK28vNEY5Y2ZwTDlGK3Y5YStINng5WDUvWE9DZE9lL3JjUFQveXFjZmJBT0xwYkU4UFdtcHY4Q2ZwSzg5YiYjeEE7OUYvcFBpbjZRNS9WL1g0ODA0ZXRYNDZjK0hIbDNwN1krcXVxK20ranIzL0FuMXVMNjkraS9yZjFsdlE5YjZ2Nm4xdjRPZkRsOFhxLyYjeEE7WXJUNHVudGlPTHpVOFBraHRRLzVWbDlldXYwaitoZnIxVDllK3NmVlBWclRmMWVmeGRQNXNSeGRMUWVIclNNai93QUZmV05MOVA4QSYjeEE7UnYxajAvOEFjSng5RG42VlArUFdtL0duOG0yRDFic3ZUc25lUlpNRC9Oei9BSlZ4K2liVC9HbGFlb2YwZjZQTDZ6eTI1K253MzQwcCYjeEE7eTVmRDA3MHphOWxmbWVNK0I4ZTVVVitWMytBLzBBLytENi9WZlUvMHIxT2ZyK3BUYjFPZS9UcFQ0ZkR2a2UxUHpIaUR4K2ZUdStDcyYjeEE7eXpXSzdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxK2NmenAvd0NoWHY4QUgzL081ZXQvaUtrZjZUL1IvcjhLVVhoOSYjeEE7YTlIYmx3L2srUGoxL1p4VjdacHYrQWYwTHB2MUg5SGZvbjlIeWZvdW5wZW4raitDZXQ2ZkwvZFBIaDZuYnB5eFZicWYvS3VQcTcvcCYjeEE7VDlEL0FGZjFJT2YxcjZydzlUMHY5SHJ6MjVlbC9kLzVQVGJGVlMrL3dCK2xMcjYvK2l2MHI5VGY2NTYvMWI2eDlSNGZ2UFY1L0g2UCYjeEE7RDdYTDRhWXF0MW4vQUpWNTZzbjZiL1JIcS9XVTlYNjc5VzVmVy9TWDArWHE3K3I2UEhqKzF4cDJ4VlExai9sVi93Q2xaLzB6K2hQMCYjeEE7dHdQMW42NTlVK3NjUFNhdlAxUGo0K2x5Ni9zMTdZcXFwL3lyajBOSTRmb2YwT1QvQUtBNC9WZUhMbDhmMU9tMWVYWDArK0t2LzlrPTwveG1wR0ltZzppbWFnZT4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC94bXA6VGh1bWJuYWlscz4KICAgICAgICAgPHhtcE1NOlJlbmRpdGlvbkNsYXNzPmRlZmF1bHQ8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo4YTBlMTA1Ni1iM2UwLTQxNzMtYjFhMy02YTMzMjhiNWZiYjI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6OGEwZTEwNTYtYjNlMC00MTczLWIxYTMtNmEzMzI4YjVmYmIyPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjQ0ZDEwYTViLWE1MGUtNDNiZC04NTFhLWNlMDk2ZWMxYTM5MTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDo0NGQxMGE1Yi1hNTBlLTQzYmQtODUxYS1jZTA5NmVjMWEzOTE8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwvc3RSZWY6cmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5OWU2NGVkMy1hNTM0LTQ5MzYtOGEwNS1iMTUzNmY2YzllOWI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjItMDMtMjhUMTE6MzI6MDQtMDQ6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIElsbHVzdHJhdG9yIDI2LjEgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjhhMGUxMDU2LWIzZTAtNDE3My1iMWEzLTZhMzMyOGI1ZmJiMjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8aWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+V2ViPC9pbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT4KICAgICAgICAgPGlsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPkFkb2JlIElsbHVzdHJhdG9yPC9pbGx1c3RyYXRvcjpDcmVhdG9yU3ViVG9vbD4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BZG9iZSBQREYgbGlicmFyeSAxNy4wMDwvcGRmOlByb2R1Y2VyPgogICAgICAgICA8cGRmeDpDcmVhdG9yVmVyc2lvbj4yMS4wLjA8L3BkZng6Q3JlYXRvclZlcnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEAAQCWAAAAAQAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/3QAEABT/7gAOQWRvYmUAZMAAAAAB/8AAEQgAmwCcAwARAAERAQIRAf/EAaIAAAIBAwUBAAAAAAAAAAAAAAoLCAQGCQABAgUHAwEAAQQCAgMAAAAAAAAAAAAAAAMECQoCBwEFBggLEAAAAwMEBQcIE3EAAAAAAAACAwQBBQYABxMUCBESIWEJFRYxgaHwCkFRcZGx0eEXGBkaIiMkJSYnKCkqMjM0NTbBNzg5OkJDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanJzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vHy8/T19vf4+foRAAECAwIEAgUMgwAAAAAAAAEAAgMEEQUSBgcTIQgxCRQVIlEKFhcYGRojJCUyQUImJygpKjM0NTY3ODk6Q0RFRkdISUpSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+v/aAAwDAAABEQIRAD8AP4kIWpCFqQhakIWpCFjhskcVHsXLHo59w4miQydechzmGoz4Jm+aFclQvMoRpJqN/wAaDAKFnSaiVECJWEEnLHijMC0JiS6vS9n8V2hJxt4ymQLUiyosfBeOA4TU5rjnsNCHQZUHViIHNIdDe5sKDEaatjUzrINJWD2efFjbLKckSpDAimGZlIfNMDRFQg7CnzFBiWhaEadfFUTlvFjDBHiu2HO5E7DAhAANu1dtM9/cBtBDibwWDJjCFk3b1pAZzMxDCgB1cxZLwCzNTNdjRY7SSTyKG5hgWNGNZx5w5yXgB7Tix5GcfPQq6o3lGsUPyKXgXdkpUw7hY/Fy9QC7ToCC22hXwEgDlACxntTYWC+DWC0sZPBizpGzpQ6bJWBCl2Ghc4VbCYxu7nvOlpucdNxrkrLl3qFqQhakIX1JOOTnFKE5phB5BgDiDyRiKOJOKEwZZpRgGhGWYWMLGhExrGsay2yWL2MisMOIA6G4EEEVBBzEEHMQRmIKFMOaTFAbL2ZY0lkJz3Rc83SSWwjI3HazJ/DzErBFjqqRDFrHqNyl3ZbG3TvMSGMtiYwTGDGwWkcNNDhiVw7Y42zYElCnHGuXlG6pxr2cXnPl8nlTQ6UZsRulmq1pHBaCswtjpi4UKP5cQ4LJuAi4FEoMLAXOFNwS9n1C6Zo2BYYJ+QatUPSK3aiIuBCYchUvg8xowgqwWBEYL0kxm6AW2LOl3WjiptE2gGgkyc6YcKO6mlkplrYcu9xqBdislmChdlSSGDAs2CzczcToTdTvwyTGU18aQ7HcLnqDkQXzDTzTPNIUuTgKMUO9W0gYjELxTlqCxGJzglnACYFogsYILW+hOFGCWE2BVqusPCyRmrPtZrQ7JR4bobix1Q17aij2EhwD2ktJBANQaYaSvyXjyFqQhakIWpCFqQhf/9A/iQhakIWpCF4xPvZATV2N0BLpxJ2omTQ8409MndqQNyofcTPgCNStTw9DLrpCzHo+lxaUdGC6AUBjGjOMKKCMwPnOL3FxhfjQwih4M4GyjpmfdQvdpQoEMua0xo8ShEOEwuFTQuO7WNe8hp5AJ0kK9ZlYqPPVZLLXrCkCrXrNDMsMwaciFnK8AkxTFSQthxIVkcRKgAQsMLeBRwhGOdIaF2FhEEs2ujJApFLviP0JWAmKuXg2xhBDg21h0AHGYisrLy7jQ3ZWA+rQWEACZiNMdxBczINe6EFA0DpKxfS9slyuTBtZhkUXK3pMGfIQt6TBIQtUmDPkIW1Jgz5GdC2u24JCFxa1rctsiiFtIXC9jmTn/nfsdosZGkzsbvWDX0YWUmeIUbSFTqfiEo2mC73+5F5Sp0vlEwy20IFBI6MTbotoR2hM8Jw8xcYFYzLH1hYbSEGekAS5l6rYkJxFL8GKwtiQnUzEscLwzOqMyCAdNFD2DeKkzbWSoHFNxOe13TaT5qau7UqE1QMEIzhLwp0hVZhV4qQlhdT6eq8wxhbkUGGHcFCnPVCE0IIlsf8AoScKMVjpjCfBPK2rgA289zwKzMmyrjdmGNrlIUNgbemmNa3TMWHCABcmW06QssEvTxYrUhC1IQtSEL//0T+JCFqQhRjsrbK2bKxGmyVzgzgq628VdZQwRBCFSSVEEcRAUSEYXa7QjCbVHckpQDeDwGARCEgTGtYYcYQQdtXFBigwqxzYVMwbwcZclWXXzU09pMGVgk0vvpS891CIMEEOiuBztY2JEZyBVBmWR9k1OzZSzhL5wJ0ogUrhiUq8jcLJlCoEKQQ6lTU4WOWFXQceaS7kzSUZLDzr6laYUw1QYaa1o2zi4sMVWB2KTBqHg5glLNhtuty8dwaZiaiNruLMRAAXuq51xuZkJriyE1jKBKgUXgLB6lktj0I0lyt7oOp18ipQt7pmpZrZFTsELV0zUskV5ohbXQdTr5FTsELV0HU6+RU7BC1dB1OvkVKFq6DqdfIqULV0HU6+RU7BC1dB1OvkVKFtdskZ0LkUoPIOKUJzTCDyDAHEHEjEUaScUJgyjSjQNCMswsYWNCJjWNY1ltksXw4cRhhxAHQ3AggioIOYgg5iCMxCESdiaGKjKIyVuix9sm4lpYtWqQIJt5130eAvJOoUm3KWDo1WjuCwRGMwbC3a8BtYF4Wwpz2sV0ZiuLnRT6EyFYcGNjIxUyt2xmNL52z4QJyAaNemZVoqTBAFY8EVMHPEhjI3mwE3N3kLP7KOZYLUhC1IQv/SP4kIXms787UDzGTbxZOpOK9inPCkHulS815rTEoVi84sDWIXI5iFalGSvf77WNAlQpqQDVCk0AGNZbts8owLwOt/D/CeTwRwZgmNbE7Gaxgo66wE69FilrXFkGE2sSK+6bjGudQ0oQCuZBAWVFk9OBZZTuPidSPBFoWGlgdUKQoiUHqHPBsLJDDRu9xO4Z7ADUmXZwz1aloCxK1hxhtwWEQCi56cUeKrBvE9gbAwRwfBeQTEmJhwAiTMw4APivAqGigDIbKkQ4bWsvOIL3LAUUc2D1LNZLZ9NguVvdska8hau2YZc5+aIWrtmGXGfmiFqkZhkVPNELakwSM+xQtUmDPkddQtXbMOdIz7FC3u2YZc50LV2zUy415C3umanRrpFShb3TNSzWyKnYIW10zUs1sipQtmiYzDLihKEV5iUln2bP8AQqGYidt9JhzyQO7g5FnuqakRHTjQQ7khBZVu6VsNekaQ0WSZXqMgAlCAJaoVIYFYayIDRfaHZmLq19pBwNgOGBNoRdx4bbzhJTT3EnetIcrHJGSvOIZGLoQutMFhSc2mcaSzMS9H1itSEL//0z+JCEJ5iw9mQ2eKdllj9AT+MUTZTQLWlxOYhUEjdcWTogLMKeRzDCDBtWIoJIUCdpTDLi5eFdawIwUJjZftBXiUGBWB+0jYQS4bhVbMOsAPBykvIEgsFCBddNECO6lawcgCWuvsCjRQVWGJg2sw6uXvDmOms1ypMEjMhbUmoZozpGZC00xuoZm6GSMyFxpMLM6RmQtqW1yUzXyELVL0lnbKQhapekmZ36pCFvS4WZ0jMhb0jcq9IzIXKkwZ8hC3pGYZGfYoW7Bs1Muc6Fyt28prGyKlC1Li8UK85upxIummjqFZyYCfShwRhBb6RP5wvVK1jRELURl1QqSBWyVztXEtGnVpTmDTq0pphJoRlmDC3osJsGrHwwsCcwXwigNmbFnoDoUaG7eWuGm06bXsNHw3tIfDe1r2EOaCA0R2NjTP1CtkvMnAk8kJmFhSxU6QNfDqCIbT4cil3iahiaHFYDQgPYY6HwQaWWYIIQqU1EoLuijixir+40sXtrYrcO7QwJtgExpSNuHEzUjQH6/AjNpUUiQy0uAJLH3obqPY4BEihovdpa/XC//UNCs4rJAmxWsapw5107ShxUUiBDM3iQ0oB5aqPolYYgh848g0LSFKJxtpXoqJGIDD0iE0sIqQYGN3DiHxZvxs4z7NwRiVFkGIY844GhbKQKPjAEZw6LrsCG4A3YkVjiLrSRy0VNECeseCx4q1TweKpSuXrlJ6xcuWHmqlaxYqNGepVKlJ4jDlClQcMQzBjE0QxNa1rWtbKfiBBgy0BkvLMbDl4bQ1rWgNa1rRRrWtFAGgCgAAAAoEsviwxmpayStULVJhbnyELak1d/RqZFULi0zAxmrbLiqFtS4Q6M2RVC402FmsbIQtUuHOkVQtU2FmsbIzoW7DcLM29sJFULkwzBrJFULkwzC1kuaoX0YY3TNY3RrZFULlSYM+QhcmDDqbWjWS5zoXK2zUs1sualC1bwy4qULOZiI9k2ZBE7cRWNEQrDGwxO+WqiaCgDaIRDrnJhpzjUPMkDGXBKcuLoNdYwnGmCEISlzoiSw2zhNb6DaO7FWy3cDpbGjZzBrVsYtgTOxiSUeIAw7ySZeZeC1oAAZMR3uNGBYPGaqKXlEyk1//1cxWLzz6KF0azRWOrtVsE7Iccg52IqIIVFmEmxA/lD3hmFkiwgpYNpDycrldy89gTiADYne5YwCaExrGSjaj/wABIctYlsYyJllJuZjiQgEtIIgwhDjx3NJaKsixXwm1a4i/LuBALQlGDeUPgw3C1mbKRbuCUXKmwt1jJGZC4tN1eukVQuDTsLM1tuRVC4tO0MZIqhcWnYW6nTa2XFULi09mpz2M2MiqFtT4fIpFULkw63fttzLVrZyELkw7Q1mwkVQuTDWYNba18uaoX1YbhazPZIQvoE23qG5zZcoX0YZhazV5UhC+rDNU1kiq4XJg2aqXKFvdB1LNdIQvQppZyHxM/OhN9OnDwjGvib6MIei5EQUqMRsXCcTzTLzXWoUFANaFE9k5I0ygLQGAMINGEQBhE0LfG8MMGpHDPBS0cE7RpqlaMlGl3EtDrmVhuYIgBI16GSHsNQQ5rSCCAQEVTAaDoqdEdQjCsbw+dWXDGMNuOKnIopEp1O6IhdiV7u06lRKFaI2lRKwCuiTTShW7YBiDaa2uxbVkzlgWzN2FaLbtoSUzFgRRRwpEgvdDeKOa1wo5pFHNa4by0GoCC//W9KxSec5ZOjZxWRb5UjUhIhycB4TaO9IoaawpEkmtLJm/MYiIGueAE6Ze8IePWtYAYAGnKhnNKKEYIsM8mhnwZg4K4i8G5GEGl8zZ7J17hSrnTxM2LxDWEuYyM2HnBLWsay+8NDis0UaoOsPw57WS3tVZLVPh03N0iqFwafov6y/akVQvm0/DrG7CXCFwafm62RVC4NP0XmSKoW1Ph10uKhC1Ts1OukVQt6fDf1F6XNULmw/Dr2SKoX1Yc3U3tbb42RVC+oTtbq7Wc2XNUL7BNt6dmbebsJc1QvuE3DrdjIQvqwzMwslzVC+rDNQ23q9FuQhc2GYJc12CFvds1DZGfmiEbBiU05KucqwZmaPeTVI3nBSZ+zbqjT2mjKMRwY/FrvhsKMw9cvUDTJoRE7yGsE0oIDihgKKASEtkoNNFvgzBwYx9W3DlrolZ50KdaBSodMwmvjXgGMAc6Yyzs14lrmue5zy4pF27l//XjvHMXnRvG8YxooJMTKIwiqIYoPTnLBrzk50QPdY9jSDl4yU41ppQ1bQiOEADTGsumhZbtMshWFZjLDsSSsWGQ6HJykGACGhgIhQ2wwQwE3QQ2oaCaaVTSqcK16fDny7WqFxaovW7ee3ZSKoXzapZqWaNbIqhfNqnC3RrJcIXzaow67ZtkVqhcKxhz9lakVXK2rDdTr5cVQt6xhz2y5quFyYot6fXbKQhfVh+HXs1umkVQvqE9mpt3tXrr8uaoX3Cdh43Zy5qhVATsPG7NkiqF9wm6jO2EuUKoCbp9dsGy5qhfcJmbo08uaoX1YZh1ui1LlC5MM1TZcZkIjzEjbKt2zQ2M8VQg/XG/ojaGeiJ3k7DU70TgSOx2roOm+tu1KQraOrFY5kqVIglsCW01SMdq7ENrY1NGFimmcMsaEpbNnx5eWGsSAx4LCXPe2Zm9fcW0qbhYwE1N1gGkAAm4VK//9CGdPays63sZWVKpytqwxmjZy5qhcGqWW9GwbLiqF8mqsOHRfkEoXzaq09vW/qZLiqF82qtPb0ZjZFULhWcOjWSLyFtWcOjv2XFULkxTh0+Ve2UuaoX0Ypt6fWN/XIqhfUKjW6NU2XNUKoAoyr9/RqmyKoVQE/Drb+wbLmqFUgP09vjc/LZLmq4VSA7K43Yy5qhVQDrei03MtS5qhVATtbrG7OXKF92G4dbsZcoX0YZg1jZFULLdYFNtzQRI3qZL49VeDpeoeP7hMZbqGQ/O8wsHaa//9GH8buPIbGcXQjXscsisTv+G8cKsxJX8Y3qrdlcqlOqqtaqt3R0hlxdXN0K1bbY/sW0dbFjylrXMnq1LQo12t67lGNfdvUbeu3qVoK0rQaQcq1GqcOjOl2VUL5CUs1OjPkVQviJVl38/TaMEuKrlfESrDxmwkVQuFaw5WjU35cEoXFqrD+rWSKoWmKcOjWSKoXNirDo1siqF9WKcOjVtZLmqF9gqLen0Z7Jc1XCqQqMq/bt6NVLmqFVAUYdjsZAKFVgPyr+jV5csqoVWA7Dl6NU2XNUKqAdh2GsvWpc1XCqgHXsvjWbFkuUKoCbh41kiqF9WG6puballVCIzxI+xUPnssa4vjA2NjYTARPVEzkTojIVG+ALSUUEzdqhPEhYKIHQxpQlC8ZDQhLEwIyBbja22EMcWi7xsQ8CcZcnY7ZFs251iQYpcI+Tul0zONuFuSiZ6MDqkiocM1KEpvNCv//S6rFO4AUzW2e1k/D6kKoIX1Oe9pxUpqows5h6WdUlNOSEac4pMkKMSkmxSMoAWMEImiaUMYzCxjFPBobsIYeEuI3BqehltYNmMlCGgihkiZTOCXGpEEOJqA6t5oa1wAcNztCgSJTl39GdLd1VkvgJThvazRrZcVQviJTh43YyKoXxaqy7Tc+XFUL5tVX8vL1P6pcVQuFbvZbLeZoz5FULdiq3o/XIqhfRirDpmaNNLmqF9wqdS2/rNhIqhVAFNu/bv5mylzVCqwKMOjRgllVCqgKMq/o10uaoVcWfh01rRp2S5quFWFn5V/Do0zZc1QqwB+VqNGayWSFVAOw2r2ptZ+nlyChVQTsPGN2EuaoX2Ydobez2XpC4RyWJKzaLZs7A6ZQl6BUlvSOEr+nMVEnsNCUUijV+rnjDIkRahA71AEyqDwu49rRMOAM40wZRoyBFNlB1otcJoOE+Pi2okqWmVkXQpJpFKl0tCayNeIe8FzZjLNzXSGtaHsa8OCRfncv/08lWlFExA3FOTMpZIupIax3xzDi+ayMDyxEBSJ4jg885+wqpPAIIVQ3g/wBwPtaSwQWjLYS5QsawsVppsomgHw4E3g7bGL6aeMvJTDZyADW8YUcCHGA3rdhRYcN1DQ3pg53DM1aGc1ENYNThZh0X2ykHqlFTDU5d+3e0ZmbLGq5VMNTl39GjDIqhfASq3p72jV2pcVQvm1XhZrWbJsiqFxrWHRrZFULetYWa3Z2pFUL7BU4eM2EiqFUAUYb+jVNlzVCqgKcOjRglzVCqy1GVf0frlzVcKuLUYcGjZyyqhVpZ7NThlyhVxZ+HZ8Y2WVUKuLPyr+jjJcrhVgDsOjCyXNUKqAdhva1myllVC9CmugR/TszjwFNhCxVPEc4UYQ5BbkA25aWx5RI9kjoSmniGYUUUmTmq2GGjGMBZZQRCEIIWNazo8JsIJHBTByfwmtQ3bOs+TjTMTY3IMN0RwFASXENo0AEkkAAkgEOYVTGeCoSc0AwbCUCQ6TVofgqGXDCTiTUaUmruaHHUlc7sJoUKZGiKokSMAbkkkooNq0AAQ2gsrtW1a05b9sTdu2i69aE7MxY8U1caxIz3RHmrnOcaucTVznOO8uJqS2X/1DFMUbsW0Vl5YizqTVlu+uxs7nUdH005hYCRK0058HIly6G0qQagwBCbJUQapcSk4V1RIXseILLtgWs3JiDxkxsVmNGzcJXRLlkRIglp0Gt0ycdzWxS6gJORIZMsaNOJBYDmqDk00dVLqlbT0h56VSUanUpjTCFCdQWMk8g8kbSzSTiTGBGUcUMLQiC1jBBaxrGsY2U8LIjIjBEhkOhuAIINQQc4II0wRnBTldcNTh/Vo1UuaoVMNTl39GjDLiqFTCU6jNkVQvk1VqG5+s07ZcVXK2rTWWrbbzNRf0ZciqFyYqt5bc/Q2RVcL7BU4bWjMlyChVQFGVf0aMEuaoVWBRht6NZLmqFXFqMOjRqZc1Qq4tRlX9GjMlkChV5Z+VfvaNfLKq4VeWdo0aaXNUKvLO0aLzZc1Qq0s7Dn6LUsge4rhVgDsOo0ahsuaoWf3EFLGUM4U98W2SsRJzWw/MagxhgwIyzgJ3nOPG7reKBUrAbcjSKyoSg0xS08gdoZal7oTwNY0q/6I6OrGY6wMCZTFvZ7hq/bcTKzFCKslJZ7HNbTdzTHmAy64ZiyBHhnd2ZOIaCiLmlE4kl//9U/iQhBG4u5YMBsdp9CrI2b5zmpZorIV9L1T7IRpD2OmC54hJhPOIXU1UIw8tOTOCWSqfiIkQgW1AHkWQWBOmLAGXbQb45DhzgacA7cih2FFhwWthlzhfjyNbkJ9M1TLVZLxHUOumA55dEiOJXhuqKbyFgLMUZdvRxkvc0lKqjGow6/9cuKoVMJTp7dvRpstsuKoXwapY3Lbrf1yKoWqy3m7Kwy4vIXJim3p9GtbLmqFUAUYdGZezpc1qhVZajK02o1GZLkFCrSz72Xny5BXCryz8OflbCWVULsCj8OhujVS5qhdgWdoyv1NlkChdgUc3U6OMbLKqF2BZ2HRh1EuQVwq0s3Kv7HZslkhX/NzA0WTqRzCc28CudU/wCMI2fzuhyHXQjLGYaseTzUATkME0AR0CUm7aYecJlGQQAZg2sAETWdTb1vWXgxYs1hFbcZsCyZKA+LFe4gBrGCp2FXHSa0Z3OIaKkgHg5kwtsQrGWEbEWYKBZkoTaUsMcKAC6L4iAQNOZGEdvIhOZFUUmkGmqDUxTyXlXKVOI01qRCUQnuxsKYJsB+NnGTa2NfDudwztWrGx33YEKoIl5ZhIgQQQACWNNXuAGUiOfEoC6gbk1NVJiWt1wv/9Y/iQheJ2RcwE3dlDMxHcxs6brxzg+OnTUlAihmkrnQ9Eh5TwcMRulQSaSaQ9oefSUhWQ26oxjJozQjJGYWLy3AXDW3MXmFcnhfg7EydqScW8K0LXscC2JCeCCCyLDLmOzVAdeaQ4NI5BINQlyVmRYmzqWFk+MUzLTouxWAx2qlSyC4tqLUblnGggxaoIcUbQ80Kp4J2JHqnI3PTMUHHO5WE1Ie1hxI2MnQxX4zMHca2CMvhXg9EbSI0Njwb16JKzF0GJAiZmm8wnXXXWiKy7FZrjgnTSHCoUTDD8vR+uWwqrlUgz8OjXMlxVC+DVDdTrG7C0yXFVyuNO3U6/Yy5qhfQJ+HPt7ORVcKpAfh43ZslzVCrCz8rRsmy5qhV5Z+Vf0cbqpcgoXYFHZV/RgzJZAoXYlHZV/RsMEsgVwuxKOyr+m0ZksgULsSjcrR+tkskLsCjcP6uNZLIIVeWblX9GCXIK4Rj+IsYnKvmDhQNlFPW4KjPFOI4RI4BhF9u04h9TVQOvONrbweJCsbQu+M48RlkDGBhIFjsdTasMwBixelLiZ0YOiCg4c2ntGuB0e/glIR701HhvBhzsy0C6xpbu6XlnFwBvFkaPuIGlsGBFci91cw0ln3l6MpNakIX//XP4kIWpCFBXFBLA+bWz+mNUzXRmoyNxe4FZ8RzVzkI0RSt6QPFzURqS2cU0RJr1hJ+lCCS93ZSlgVlllGhEWqTJFBG3sS2OG3sTGFzcIbKGXsyM0QpuVc4hkxBvA5jnDI0M1dBi0JYS5pDocSIx+TXFpql89l7YlTy2Fk8j9mYnocdQeyG6Xw5EaBh50LR9Cxx5xLti6EXmaSTXnQuoRBGAQQKEagBiZSWUoKMLDNBi2xlYL41MF4OFOC0a/LP12LCdQRZeKAC6DGaCbr21BBBLXtLYjHOY4OLlrg4VCioM3DsMzUy8+qslTCNw61tpmYyXFULiw3VcbIqhfUJrbbL7c3Y5ciqFVgOyr9/P2cskKsLNz8/YNlzVcLsCjcq/s8DcMskLsSjdPo/WyXKF2JRuVf2ezZLIFC7Io3Kv6NTLKq4XYlG4dlhZglkChdiUZlX9lhZglyhFZ4kfiQD7h18QLZZWUzqKQLEJIIlmrmQfDqKPXo1ygoWMcazkpXmnMA7F7uLMYudjoCXW0qurqVJhB5AkjY1dFFoq5Sfk53Fhi1il8J5yM7aEN5DXNB3El5QsIL2vIycaOTcezKQ4bXseIoRe/eAig5RwpJakIWpCF//9A/iQhakIWpCFGCyusO5gLNKbc+bOfuCUkRu4umNhyJUQUyCOYFeKg1Ece9YIilqVSucCtWJ3EBVAAwaVcSWwlUUeTbLb5/i7xm4ZYrLcFvYHzboEc0EWE6roEw0BwDI8KobEAvOLCaPhk3obmuzrlri01CBpxQzEarJawiXRJHMPu1XPRY3obp4o51YYR3b1hJ0mnNLCknThUlo10OK3eK0Ex5J2KXKcWMoxqgg4waMiWTExon8Bca0GBZM69tl4cP110pFdrkZ4Fb0pFOuxQ7eITrsdpDm3HtaIr3LYgdm3lYcBCtZd9rZeyyzXC7v32Xs+XKF9gjtYWaNZIQqoseVnYJcg9xQq0sepzdiyWSFXlDw6vCzU5kuQuF2JQ9nxjZZIXZFD1Lf16ZsuULsih5Wi/s2SzBQvd5h7H2eyyWjdPN3MTNvEs5UWmlMVHoHAlLYic6BpxSbHWJX88DkUPQq5GKjyymrnkqSJAnGAA0xgxgY3xXDHDnBHF/ZDrdwytCXs+ywaB0Qm891CbkKG0OixolAXZOEx76Am7QEjEkDTRkGJxYi5NpYsMcs7E/4XBO5ZAEXK11pCwqXhNvNgpZjiQFsOIngnQhit/mIlRQxvF4o7lEpLC1CUUMutGxW4+9FthDjIy2DGBBj2XgQ7XXuzNmpsa6dxXNLsjDDmkCFCfWIwnLOcHZNqLnk5hpLOfL03Sa1IQtSELUhC//0T+JCFqQhakIWpCFqQhYU7MjEIrCqymyQRVBjlWWN88D7VrXsbHU2ZDVUKvV8Lb4z4smpXrk0LrkYjxmHmscxkPrlKkd2crGy2AXtLiy0XGNLF/kbPtSK23MGoTWsECaNIrGN3iDNtaYrXUo0ZcTENrRRsMaYUbEcOahDM2SmICWf0wqR6RBB8Kw5ZGwe7EY3gcvmZeahdF5KQJgyqEybV/pHNGD4e9sIRVRxEvsTQGBawTbRrC/evAbRh4nsL4sOTtOYjWJaUR10NnWhsEmla6swy+Cxm8X5h0AVBqBVpcqIjTzRYeI0m/j2bJ/qIUnIgiL5vonS01ahuN4bfMKP5NV1it3HtUOd/IkDwJoXggPTjui2XJxJgG7iAJjPZiy7Ysi3ZNto2HNy05IOpSLAisjQzUNcKPhuc01a5rhQ7tcDpEEqA10lbIG5bM2XZIVaWLKbqb0skKvLFatN1F7M2UuULsSm5WrtSyC4U7bHzE5LNmyWXICZrbHicI5yLaIzJxFznOgCACkYziSzlhcYxmxyuV61Mo5hpiZ3mrFwimWyiDGtYFupsM8euKbAGC9+EVtyIm2V3LwXiZmS6ho3IQMpEZeIoHRAyGDu57RUjEuaNMogOxQ0nBQOta7onsxZ1kkQlEMLUGTVzOHvJK61RgTjBATP+cV9O91vg5INMwAVBDudyM1hghMKXXIQmD9McY+jvjx4L7PxW2a6A85hOTwYXgU04crDc9gdWt10WK8UAvQakhqZi8iokeZeYaZyx2gxNN9MlN3DM28IpjTFLXVDqKhGtVnGGGGLnu8lA1D2fjwE0xoawsPPOYBgQMFcBCFnobhZhnhVh1arrbwunpiftNwAvxXVutAoGsYKMhtzbtY1ra1NKkkpEk5yvW5eMrhakIWpCFqQhakIX//0j+JCFqQhakIWpCFqQhakIWpCFa8XwPBU4Lpa4I9hCF43cQjmqGuWL4fdMSOlqhqZSiae12vlItRtOajWnFXVxdURow8FEJjX9m2taljTOrlkTMxKTdKX4MR8J9Kh1LzC11LzWmldMA6YFCtNJQwi7EtsTtjZQ1S+LDiYZEYJ2tdTQwhAzum/IqrRqTKViWAmQ0lC8bpWLdYwDFbAsAyltFlsDtGzdEBjqsplyVwmtdzb9/caO6YNc2asxlTdzDXK3NM3audXK+7YleEsxCzErmWrVi3ldTusjPouy8v2tvohOVg8UbN+M1zlH7FXjCuIy4mTB1fxosUISV441WsZKYunPjmjqlYoqjk2jmIMa7utCpatQ09oFJdUZdz1toaKPH3adzVnCOZbk60yUGVgbupW9kJeHf0hS/eu57tLxqZR+xUzJurGSxtmfepj8mkse5j5rX2dcUz4m6mngKCXqbRplyMukeEMuB2Kx3CR5qSmWxttFqDQ8FMGxur7cw+w7wmlxJ4SW1a1oSg0mTM5MR2DO12ZsWI9u7mNOlptadNopiSTple4S8SXC1IQtSELUhC1IQtSELUhC1IQv/Z",id:"g",width:156,height:155}),Z.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1pmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjUwOjEwWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTA6MTAtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xMjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFBd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FKUDVsL09mek12bVc0anRaVEZwOXRjUCYjeEE7QTFpaW9yR05DVUpMa0Z1UnBYcnQyenRkUDJKaDhBYlhNaTdhODBES0JBTkU5V1hYSDVqNjVvV2k2ZTFqcFg2Ykw2YkpyZDM2MTBMWiYjeEE7b3JRU0pHc2NaWkplYmd5VjNvS0RiT2IxZUtQaXlIS2pYeGF4SXdpQnpvSmZyZjU5NnRvNXVyVyswQzJnMVRTM3VEcVVNdW9va0xSMiYjeEE7Nlc4bkMwa2FJR2FaMHUxb25FZEQxekhqZ0I2b2xuSTZOWFAvQURrUUl0VHVJSTlFRTF1WmJ1MHNJaGRvTHczTnB4QSt0Vy9FL1Y0cCYjeEE7WGZpamxqOHQ4UnA5dWFuVWI4a3MxRDgrZk0yaytaOVFUVXRJZ2lnMDJ6UmIvVG52bzBYMTRMdVNPWTJUdEhXNGtraW1oWUo4TkFQRSYjeEE7NUlZQVJzV0p6a0hjSjFEK2ZOMWNhcGUyTnRvY2MwbEw5Tkx0bHZFK3R0THB6OFhXN3QrSEszOVFWWlB0TnRRQWtqSWVCdHpaK1B2eSYjeEE7VUxQOC9kU3VOYTByUzQ5Qmp2Skx4WW51MnRKNXl5ck5POEZJWTVyZUptYUgwejZnZmp2VlIwcmhPQVVUYUJuTmdVOWx6R2NsNW4rYyYjeEE7WDVnYXQ1YU5qWTZaSUxlVzdSNUpMa3FyTlJTRkNxR0JBNzFOTTZIc1BzN0ZuNHBaTjY2S3Bmazk1dDFYelBjWE05OUxJWnJLQ09PNCYjeEE7QklLU05JVHhjQmFCZnNIYW1SN1kwY05QRUNJSHFKcnljYkRobEdVcEUzZjJQVWMwRGt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdmt6enQrZjNtVzUvT0RWdks5NTVqbDhuZVZMRjczVFZ1N2EyV2FVVEpFOFVjOHBNY2twRFRVYjRPTkY2RUg0OFZaUCYjeEE7K1dYbmZ6VDVQL0xQU0dpYVh6clBxNzZ6cktYRjNjU1dvZzByU2pISE42YlhDeVNNWkhwSkdwVWZiM3AxeFZPZFYvNXlNMTNUbFMwdSYjeEE7UExOckJyRENTNTlPZlZJNHJRV2lXTWQrditrdkVsWjJTWUlJK05LZ210TVZVNS8rY280NHJ4cGY4UGY3aWhidElJMnZJMTFMMVYweiYjeEE7OUprdFpjU3l3OFAzZnFWcFhmMnhWRGVZZnorODVhRnI4bHZxZWgyVnBkNlpiWGcxUFM1ZFRqanQzZUdHenZZMmd1R2hySk9ZTHIwMSYjeEE7aUE2MU5TQmlxYVdmL09TUDF6ekFMRzIwRVNXdHcxM2JXRURYc1Nhazl6WjJndS8zdG95L3VvcGY3dEhMbmZjNHFsMDMvT1RXcjI5eCYjeEE7cHRuL0FJYml2cjY2VjVydTJ0TGk1RHhxbDBMUTI2TFBhd3NicFpBeFpIQ3JUalJqekdLcHI1dy81VVIvamFYOUxlcitsdlVINlErciYjeEE7ZXQ5WDlYbDhYcThOdVZmdDhQcDNyblM2UDgvNEk0UHByYTZ1dkw5RnBlcHYvaGIwbDlUNmw2WDFQNGVmcFUrbzFIai9BTHByeC95ZSYjeEE7bWM5TGlzM2QzOXJFMTFRK28vNEY5Y2ZwTDlGK3Y5YStINng5WDUvWE9DZE9lL3JjUFQveXFjZmJBT0xwYkU4UFdtcHY4Q2ZwSzg5YiYjeEE7OUYvcFBpbjZRNS9WL1g0ODA0ZXRYNDZjK0hIbDNwN1krcXVxK20ranIzL0FuMXVMNjkraS9yZjFsdlE5YjZ2Nm4xdjRPZkRsOFhxLyYjeEE7WXJUNHVudGlPTHpVOFBraHRRLzVWbDlldXYwaitoZnIxVDllK3NmVlBWclRmMWVmeGRQNXNSeGRMUWVIclNNai93QUZmV05MOVA4QSYjeEE7UnYxajAvOEFjSng5RG42VlArUFdtL0duOG0yRDFic3ZUc25lUlpNRC9Oei9BSlZ4K2liVC9HbGFlb2YwZjZQTDZ6eTI1K253MzQwcCYjeEE7eTVmRDA3MHphOWxmbWVNK0I4ZTVVVitWMytBLzBBLytENi9WZlUvMHIxT2ZyK3BUYjFPZS9UcFQ0ZkR2a2UxUHpIaUR4K2ZUdStDcyYjeEE7eXpXSzdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxK2NmenAvd0NoWHY4QUgzL081ZXQvaUtrZjZUL1IvcjhLVVhoOSYjeEE7YTlIYmx3L2srUGoxL1p4VjdacHYrQWYwTHB2MUg5SGZvbjlIeWZvdW5wZW4raitDZXQ2ZkwvZFBIaDZuYnB5eFZicWYvS3VQcTcvcCYjeEE7VDlEL0FGZjFJT2YxcjZydzlUMHY5SHJ6MjVlbC9kLzVQVGJGVlMrL3dCK2xMcjYvK2l2MHI5VGY2NTYvMWI2eDlSNGZ2UFY1L0g2UCYjeEE7RDdYTDRhWXF0MW4vQUpWNTZzbjZiL1JIcS9XVTlYNjc5VzVmVy9TWDArWHE3K3I2UEhqKzF4cDJ4VlExai9sVi93Q2xaLzB6K2hQMCYjeEE7dHdQMW42NTlVK3NjUFNhdlAxUGo0K2x5Ni9zMTdZcXFwL3lyajBOSTRmb2YwT1QvQUtBNC9WZUhMbDhmMU9tMWVYWDArK0t2LzlrPTwveG1wR0ltZzppbWFnZT4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC94bXA6VGh1bWJuYWlscz4KICAgICAgICAgPHhtcE1NOlJlbmRpdGlvbkNsYXNzPmRlZmF1bHQ8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo4NmU4MzJiZC01ZDM1LTRkYmItYjRiMS0yZDRlMjkwYmQxYmY8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ODZlODMyYmQtNWQzNS00ZGJiLWI0YjEtMmQ0ZTI5MGJkMWJmPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjhhMGUxMDU2LWIzZTAtNDE3My1iMWEzLTZhMzMyOGI1ZmJiMjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDo4YTBlMTA1Ni1iM2UwLTQxNzMtYjFhMy02YTMzMjhiNWZiYjI8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwvc3RSZWY6cmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5OWU2NGVkMy1hNTM0LTQ5MzYtOGEwNS1iMTUzNmY2YzllOWI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMjItMDMtMjhUMTE6MzI6MDQtMDQ6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIElsbHVzdHJhdG9yIDI2LjEgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjg2ZTgzMmJkLTVkMzUtNGRiYi1iNGIxLTJkNGUyOTBiZDFiZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wMi0wOFQxMjo1MDoxMC0wNTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8aWxsdXN0cmF0b3I6U3RhcnR1cFByb2ZpbGU+V2ViPC9pbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT4KICAgICAgICAgPGlsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPkFkb2JlIElsbHVzdHJhdG9yPC9pbGx1c3RyYXRvcjpDcmVhdG9yU3ViVG9vbD4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BZG9iZSBQREYgbGlicmFyeSAxNy4wMDwvcGRmOlByb2R1Y2VyPgogICAgICAgICA8cGRmeDpDcmVhdG9yVmVyc2lvbj4yMS4wLjA8L3BkZng6Q3JlYXRvclZlcnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7/4AAQSkZJRgABAgEAlgCWAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAlgAAAAEAAQCWAAAAAQAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/3QAEAAr/7gAOQWRvYmUAZMAAAAAB/8AAEQgAVABQAwARAAERAQIRAf/EAaIAAQAABAcAAAAAAAAAAAAAAAoAAQIDBAUGBwgJCwEAAgEDBQEAAAAAAAAAAAAAAAkIBAYHAQIDBQoLEAAABAEBBgEGjwAAAAAAAAABAgMEBQYABxESEyEICTFBYdHwChQVFhcYGRoiIyQlJicoKSoyMzQ1Njc4OTpCQ0RFRkdISUpRUlNUVVZXWFlaYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAEBAQUFAwmJAAAAAAAAAAECAwAEBQYRBxIhMUETUWEIFCIycXKBgpEJChUWFxgZGiMkJSYnKCkqMzQ1Njc4OTpCQ0RFRkdISUpSU1RVVldYWVpiY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+v/aAAwDAAABEQIRAD8AfxMOHRMOHbEz07EJIKdbVWDtyaPSlKUaEnYMqgo4bHpCnTCMOhOKMIKcqhTAU4GXEhgMVIxRozXTAUUYVh0hozAZPOXDRYMhtwU13CRMtAqBdhyaJNwiVM8Wp4PloX7GADDqwUlSkGQEVuuWdYgggyKlaFJCks1Jou6yZ60/eeDPUVXbxqJXJ0nTqEMhJaEGVbQgpUTFOgZ4AnO4irgqiZVBO4OcpVbxJkTCgUudYuRVgeAQlb2Zz79qtVyFdGnO1ECQySJAlFBRVRJhJHOa/HCaC2UzhNtWEDlQKXqxlSxABBTP0SpqqUBUrQkBVFCUCRI2AXChRG3tE19sKLrYeZlkdkbg1ns1vuk3csEyuut5M5ZHcop0djLnhztTMoPKYysvZIIXk3FIo6MWUEObjTUoQuPKlXWWTbCYBK3dgsnUyAkmZAtAxbGjNMkgOMQU+oOkeUKqozyE35KOg2YkAJqqROmUzygsygyDiTNQjDAiWbyhEl+wWmhIs36oGgGhlJAqJXPCQTqSgSEdp86+fVO5nwsFXkh5QIvnLVJNWJQR0QzKOwoFBpSi+hq15lSql4QWSFVuY1YqhhmjbGWJ0YYpNwyhpgUMlkhDRNpM1yZdWKEslGdVOqAppDpNQHGOCIwsK2gxrPKAlUgidWm3km6SiVNcS7daa2Hd66Jhw7//0HpytldAJDwN3KGUr9OHw1rSkphAVF3LhSjUWbNuSio5driUaUhQrAAmNQIUxgq3k8XzCL4S9XomeaqugFUk1AK+4UyAbYjfHCL0RYCaxjjM+EveDGUglNFS1m1WbNAtJbRUhkSmoCpUiEqUOumenYpZXyvK4hMkQWkdJ5UtSUWQVAZRvyU1ERWiSQgENROAFvKa0qgXiKZY5DCUMrwJE14PEpfD+kfD6FGQi/NNsSbWNiqhSISCJXLvmlWVPG2OJaQVFILgeLyhOlSVSvtqJcdNk0GKSALQYyKFpBTZohRSOI7mmUMdRQxjnOYxznOImOc5homMc40RMYwjRERGuM2RWJAtEUA6PT3bLaLn1klZMpJMpJNMmWqa92SOAs9bnZu3YF1zPJRMjshcj2NvxE3ePZ15PASyO026PQo29ea4HqiWR18wcylkdpp2rQo22a4nqzpOvyDnvLI7LGMfi0nooyjcCiT2ERiGOCOofEoc5VZvWblPAqzdwiYiiZwARCsNcBEBrCITdyuDnrCD1W8n8yQ2ejVM6tCwFJUDUINAjmHX/BCGz3aobvdRQ2SZQpJkINgXdjs4iyhjtuvDpLT8mpHbRQ6TRGeHCUCou21UXIQi0qIIgQjd02SIqIqOmIJqETSKAtljmOoEf482Tyzas2kKxHUUtgCovRoZUqkEsjBoaKVEighrKklRv1QkBLs3QFGxutKXvConqlaASG5kigbamSgLVJlLu2CHxBhFmDKKQt60iUMiTRtEIdEYe5ReMIgweIkcM3rJ43Oo3dNHTdQqiaiZjEOQwGKIgIDNFB8Pdu9G63q+kLZPpksoWhYKVIUkyKSpJAKVJIIIIBBEhErsgpUlaQtBBSRKCKRFeHf/0VO2IWeQ7l9Ll+0SVUJJ6S7t7BoQ1A4GRVVbLmbv4vQKAAKkRWQASCNcqBSBWGmo5mixBSINg5KyBZ02SFKNWQiUJuUGjYy2DlGWUZNQfk0KP74eTFakxcgls1ez2RLKlSkLKGr4oUy2UmVMtEMks00DPS8fVArTXWzLsGsVUXZauHY1t1m7FiaTu/ehdkTmzDpg2+TTd093Xc8KjtNuzVht90muJ6plIdfcGolIdpR6pQo15rneiJXZEgtjLI7SjxWz17VNc70ZUnZGgt7yyO0s6WoUa+TzXI9mLsgQc9aVB2n117Pk83esGLr0eb0kAd2t2Ten7RJy9jE4uUDpw8ZJsHMp5CuFjOF7k0GyqRY/J4DGOqVFguVwV62IBUkklCOaJjGWTKEUrKViC9mL3Yx8g9KUNi0SwfQEgn54Gsm1SVYkLNZlUpSSykACFE39AbVaEl6rlKaabCvFsq3Wvd//0kTDWCaRIpuQSgOwqg2e3t7PNzsw6vYh2WL2nYbRN2TCo64XnTDsgdjZ5u8eopOvGDk0naVfHoUaE1zvNMsjsiQSzlkdo98pQpq/r87NdjyZ0nZPghhLJQdo18tZ69mmu15saTsnwS9ZZHaSdr2evk9uE10PVi7JEGvOWQyO08u4r2fTJu+YMHXq83nQFB3ImwbxV3D7E9OfWZLVFZWUjiHmPSJqUzSKwWKQx+lSqkUKFxhi8VTpqFMSmolEDAAhjybS8WL4mVwyhsmVAeoXTItJm1ZrQaElJSUmSkZJCCCQbher2LNoFio7/9NEBjW9tmkYEuQilmarsMoetsM1SzRUd2DBnRdla57ejN2TFLrgebM0Hafdns9ebvXqmiHXpBrKiHaQiClCjXDTJrseLOWR2TIGYSyO0REFqFGvk9vpk15PBlLI7LMCvaWR2iH69CjX4ma8nixlkdliBnpLJQdo964s9ejWt8nmut6MKVB2ToLeUslB2m3Dmz17fsZu/Yveg6+Xm8ZRSdyDsHq9NYnZzBcnlk2DTL0jubH02ljOzKYcVXPFXNku7dbznGJXXB3/1ELCpa5pLJQ5ESWLsIqpNVM2d1d2b3YOylwrWGbtGDJ1xvJ70Q7Trxaz18n+qbv3oxoh17wY9aIMjtHP1sDV7fiZrteLGk7KEDPWiKDtCxFfA1ea9XgxpOy7Aj0lkoO0LEF8DV5r1eLGk7L0CvSlQdot6vZ69v6813PNg7KcFPOlQdphy4oCNe3ybdZrhYMKDr9eTylAdyJsGq9NYo5ygUbPLRt0UeTY4m3sZ2ZJDx0Qq5sl1e/3pWcHtVSUkO//1UEGVrDNKNLOucjpmwouwKqtABmrWTJ3bPZ7UQ7JXK1nrzdu92NF10PB60RQdpp6vWGvZ7ejNcTzY0Q6/IKelEO0e/WwNXyevb15rseLKk7J8DPSiKFB2h4irgavzv1zXo8GVJ2XIEe0klB2hIgrgav2E16PBlSdl6BXsBI7RT5Ua9ea8HmyFB2VYJe4oO0q5VGiNea4mLOg7ILyewnRQdyOsF6lNYqJyIZPLVr0TebDNjGbomSZDD+qBXNku5oaYhMDt1VzPrQ7/9ZJE+WQj2drL+Oydco1NkdwrFICqUAKm6gD5w4GHqpAAjQqNTOgcLQqicLMACMlotQmyhqCWT8QZWgASsVQ0SBPA22UKFgQ5S006Ib6iHHd+QG2ROvMtC1exFJb3aKVWZFuyKZqrloUKQEuzyytYa811smVF1rvV7UaTskdLWcKM3cvZi67Xg9aIdph4tZ69vZ5rjejGk6/oLetKg7SD9bAwUcnt7XNdbyZUi7JkEPYCR2in6lnr2ia8Hiik7K0DMZJHaJiB6NNQmvF4pAkdleBmckjtGPRGiaa7XpIHZSgkCgHaXcUaM3fsqTr+eUk6HdoVksJy0WlLPaiM+p6yOnJadxDorB4RETi5SK9lvKKGXJqrJpSEK2eEhclIo6O7AxxFAzxqNINUA5ImWV3Ht5wVExlENg0BheFGrNq0QJ0zr1YtJ8KVjpJaPhmzDOQWkGbYTwnSlXTxwhBmyeCYPSb9mpBIrkJMsprpVASV8iq6j//13Lz5JzcAnwyfThsRUNDYzDTLOIFHW6KCjhk4UQUTFs6BRMVHEIcKCQ66BDpmOZMggcolAZrji3GR9xcflbsRPvZcgWzJMihLTFQLAlCVEGSU0CC7Gs0yZlA00uB0vJ/EsITYFSmDdKUlSFFJE4qUSqYqM6VoCkklKSFAgF3UfPPnQS/nVvFG8qoKqDAVATayhhxV3kn34mCiUG0RFBEE1TZVLkRXrURJQoCMj4uxigeMDMLg9qK2klLNUgaJtqZTKLFJKbF0DIzTM41RGfZYQ69jZtPSJbs5VsF260nRIdArCF6BpF2x7pWsNcJr7ezKi7hg97URQdpl2rZ69a3tM1xPVk6/YMe0kjtKvVLPXt7XNc7zRSdkaCmMkjtIPjWezW+6TXW8hJI7JcEJAIdo98GBh02a6nmaTsmwUqSQO0k8II0be3s01zvVbsjwY1AAdzQsOVgBnqz8HMLlFKlo5ndzsXCiTlWOxRNNKPx5gRwQHDeTEDWpnZTuEKNRfPEU2VAQOncYpRTHCk02yjooRAZNoMglaITjWkFIZMySxYrIM6W7UWjIk2syZqLXHKqzlCh3zaMDB4sylnfo+JKAqA2J6wUbZTcgqdZOukZOakNBJ3sg4ZcmSegaBip1U4Lv4i8XNVX0XizukIL2KRFwIqKqUpSAIgRMpEikTKt2N8bocjxGB8RljE1rWEnwqjIJEISKCGbNNGdZoFBIlJx0oqWVKNlvt9t38+FPl8GVqq6AVABUA+lGUn/0H8TDh2CiMNh0YYuYZF4eyisNepCi8h8RaoPmLtERARSctHKarddIRABpTFEK03Kwbt3q2S+HstbNugypUklKga8KEhBtjqd9PR6v57reb+ZM2z0aCRSFpC0KFcpKgQRYEF3AGfRYHoZF0n0enRuyQiKmMs6UkjFXI3Iru8Kipm8GfmTUXha6h6BU0lxO2ExgAVECBRDNsUZr7d6LQ8ozoLV7UBW6BfompK0TKAsCmSmRcglnVqdgSNMwyD2hW/4pKDB8ElRe6zfmasjNVEoNQJVKijJPISKHVtLaScqZCxlxJ+WEDiUnowgQqhmUSbmROogc6iabpqpeJB4zVOiYCLJGOkcSjSmGgNCTsBQlBkNPRL+glszbvRRknkGUA0CQRTSoSiVKgFCUSh2J7wR/wAEPovKEmK2L6TRnVCShXg0ikyGRQJBkoF227s9GjNeL1TI67IOZySO0y7CjR0ytps1xPWhI6/IOMkjtxp0th3npT94qLCQcAMpDUnAtYnKqK1dhJSDKgkRYxIhFitnBjuSpKkNcWbpuHQlOUwJCUaM3URrmkRUiA9LOIffEj5KZ5DBnItu0EskqGc8mhKCJ9akM5QRPS0HZDghLVtRZi0RTNR3cpYf7AZOmnOmYSilM2QnkTwG9xR0nF460TPAIC/QoK1STcn1ao1Ksi5Ap0njsHDpM6RFERbiJijDGaJZQccY6JaQZBS1QZF1U8ks2SiGrVBoSNmwkVIUyhTNnOMyFFK60EhF5IW0QicBNi7nRNgJ210TDh3/0X8TDh0TDh0TDh2jJcTvJETyYQaBy5kzC5SQ28wUU36A3GWSipQIovDIigZGIwl0chQKKzZVJWlrU1CiE3cQLD8NRdfdnsCPlq93xQlKTQUBSC0GVC01Z1aVCWjI7r4RgqDoWYWbwkxQ2ZVJ4UUmvSoSKSbFJBsXdec+2wSzn5KQlKUUAiEt2Bn0daw8ITctQt1C2bdWHP1zg1F7AXEVE4qsijRWdK4GNaKFLIKJM2mN0KPswc/mbyaBDArn6zWlaiFoFpTrUIpKNqoTSFjLYUKRIgaD2YfD1U3TKsCdnklIEhNCVJVUqqPga5nQ2BecMMFgcrI+ylNK91EGrZ6MMlDHCEgzZwkqqNFJpAGECXcoqCBadJ0q4SOBaAlpRMBuojdN0j6l+t4Jg9b2ebJmtSZ9kylaEECmpqpqEkUZFIShQllBlAI76CYsQWzYIfCw0aKIBkUqgLgkJ4WV3PWEweEwCGs4NAoXDoLCIeiDdhCoSybQ2GsUAETAgzYs0kWrZEDGEaUhSlojNgV9vx9wg+Vv1/tWjd+NDKto0Upa1GvUpRKlGxJJddqEIZpCGYCUCkAJALg7MZqZ250TDh0TDh3/2Q==",id:"h",width:80,height:84}))))}},88109:(A,I,C)=>{C.d(I,{Z:()=>U});var g=C(27378);function U(A){let{src:I,width:C="90%",alt:U="",title:Q,align:F="center",padding:B="1rem"}=A;return g.createElement("div",{style:{marginBottom:B,marginTop:B,textAlign:F}},g.createElement("img",{src:I.default,width:C,alt:U,title:Q,className:"inline-block"}))}},78708:(A,I,C)=>{C.r(I),C.d(I,{assets:()=>l,contentTitle:()=>V,default:()=>a,frontMatter:()=>E,metadata:()=>e,toc:()=>Z});var g=C(25773),U=(C(27378),C(35318)),Q=C(76911),F=C(88109),B=C(24516);const E={slug:"moonbase",title:"Remote caching is now publicly available through moonbase",authors:["milesj","jpoz"],tags:["moonbase","remote-cache"]},V=void 0,e={permalink:"/blog/moonbase",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-08_moonbase.mdx",source:"@site/blog/2023-02-08_moonbase.mdx",title:"Remote caching is now publicly available through moonbase",description:"We are proud to announce the launch of moonbase remote caching \u2013 a new solution that",date:"2023-02-08T00:00:00.000Z",formattedDate:"February 8, 2023",tags:[{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"}],readingTime:1.74,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"},{name:"James Pozdena",title:"Founder, developer",url:"https://github.com/jpoz",imageURL:"/img/authors/james.jpg",key:"jpoz"}],frontMatter:{slug:"moonbase",title:"Remote caching is now publicly available through moonbase",authors:["milesj","jpoz"],tags:["moonbase","remote-cache"]},prevItem:{title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",permalink:"/blog/v0.24"},nextItem:{title:"moon v0.23 - Scoped task inheritance, and project config updates",permalink:"/blog/v0.23"}},l={authorsImageUrls:[void 0,void 0]},Z=[{value:"What is moonbase?",id:"what-is-moonbase",level:2},{value:"New homepage and product pages",id:"new-homepage-and-product-pages",level:2}],R={toc:Z};function a(A){let{components:I,...E}=A;return(0,U.kt)("wrapper",(0,g.Z)({},R,E,{components:I,mdxType:"MDXLayout"}),(0,U.kt)("p",null,"We are proud to announce the launch of ",(0,U.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase")," remote caching \u2013 a new solution that\nhelps moon developers streamline their build processes and save time."),(0,U.kt)("div",{className:"flex justify-center mb-3"},(0,U.kt)(B.Z,{width:"65%",className:"block",mdxType:"Logo"})),(0,U.kt)("p",null,"Remote caching allows developers to cache artifacts across builds, improving the efficiency of their\nContinuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts\nwhen moon is run with moonbase ",(0,U.kt)("a",{parentName:"p",href:"/docs/guides/remote-cache"},"remote caching enabled"),". In the event\nthat a CI run is executed with identical code, the cached artifacts are automatically pulled down,\nreducing the time required to complete the build. In our tests, we have seen significant\nimprovements in CI times, upwards of 90%."),(0,U.kt)("h2",{id:"what-is-moonbase"},"What is moonbase?"),(0,U.kt)("p",null,"You may be asking yourself, what is moonbase? ",(0,U.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase")," is a new cloud service that\nwe've been working on to solve an array of problems in regards to repository and continous\nintegration health."),(0,U.kt)(F.Z,{src:C(53044),width:"80%",mdxType:"Image"}),(0,U.kt)("p",null,"The first problem on this list is ",(0,U.kt)("a",{parentName:"p",href:"/docs/guides/remote-cache"},"remote caching"),", which has been in a\nbeta program for the past few months. We want to thank all the beta participants for testing our\nsystems!"),(0,U.kt)("p",null,"We'll also be launching CI insights in the next few weeks. This is a system where we track all your\nCI runs (via ",(0,U.kt)("inlineCode",{parentName:"p"},"moon ci"),"), and all moon tasks (actions) that ran within each job. We use this\ninformation to track the health of your pipelines, catch regressions, alert on flakiness, and more!\nBut don't worry, this feature is opt-in."),(0,U.kt)("p",null,"We're very excited for moonbase! We have a massive roadmap ahead of us, but we're sure y'all will\nenjoy everything that it has to offer."),(0,U.kt)("div",{class:"flex justify-center"},(0,U.kt)(Q.Z,{label:"Try moonbase for free!",href:"https://moonrepo.app",size:"lg",mdxType:"Button"})),(0,U.kt)("h2",{id:"new-homepage-and-product-pages"},"New homepage and product pages"),(0,U.kt)("p",null,"As part of this release, we've updated our homepage, and added new product pages for both\n",(0,U.kt)("a",{parentName:"p",href:"/moon"},"moon")," and ",(0,U.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase"),". This includes new logos and typography, which we're very\nexcited for! This is only the beginning, as we're also working on additional behind the scenes\nproducts. Stay tuned!"))}a.isMDXComponent=!0},53044:(A,I,C)=>{C.r(I),C.d(I,{default:()=>g});const g=C.p+"assets/images/org-bc5ac0d2c9196fe2d565e9e715b7a205.png"}}]); \ No newline at end of file diff --git a/assets/js/6196de5a.d0ad612d.js b/assets/js/6196de5a.d0ad612d.js new file mode 100644 index 00000000000..3b1005d6e6c --- /dev/null +++ b/assets/js/6196de5a.d0ad612d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58696],{87428:e=>{e.exports=JSON.parse('{"label":"migrate","permalink":"/blog/tags/migrate","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/6196de5a.f61ac44c.js b/assets/js/6196de5a.f61ac44c.js deleted file mode 100644 index b7507eff91c..00000000000 --- a/assets/js/6196de5a.f61ac44c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8696],{87428:e=>{e.exports=JSON.parse('{"label":"migrate","permalink":"/blog/tags/migrate","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/620e72fa.1c042a70.js b/assets/js/620e72fa.1c042a70.js new file mode 100644 index 00000000000..1f8a23e6482 --- /dev/null +++ b/assets/js/620e72fa.1c042a70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80368],{16067:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/moonbase","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/620e72fa.dc8d3c75.js b/assets/js/620e72fa.dc8d3c75.js deleted file mode 100644 index bdd93fca0e0..00000000000 --- a/assets/js/620e72fa.dc8d3c75.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[368],{16067:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/moonbase","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/626ef9ce.c9a27d35.js b/assets/js/626ef9ce.c9a27d35.js deleted file mode 100644 index 9036ca0754e..00000000000 --- a/assets/js/626ef9ce.c9a27d35.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2080],{35318:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>d});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},s=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(t),d=o,f=u["".concat(l,".").concat(d)]||u[d]||m[d]||a;return t?r.createElement(f,c(c({ref:n},s),{},{components:t})):r.createElement(f,c({ref:n},s))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=u;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p<a;p++)c[p]=t[p];return r.createElement.apply(null,c)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},42729:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=t(25773),o=(t(27378),t(35318));const a={title:"check"},c=void 0,i={unversionedId:"commands/check",id:"commands/check",title:"check",description:"The moon check [...projects] (or moon c) command will run all",source:"@site/docs/commands/check.mdx",sourceDirName:"commands",slug:"/commands/check",permalink:"/docs/commands/check",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/check.mdx",tags:[],version:"current",frontMatter:{title:"check"},sidebar:"docs",previous:{title:"ci",permalink:"/docs/commands/ci"},next:{title:"clean",permalink:"/docs/commands/clean"}},l={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],s={toc:p};function m(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon check [...projects]")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon c"),") command will run ",(0,o.kt)("em",{parentName:"p"},"all"),"\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/task#types"},"build and test tasks")," for one or many projects. This is a convenience\ncommand for verifying the current state of a project, instead of running multiple\n",(0,o.kt)("a",{parentName:"p",href:"./run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run"))," commands."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Check project at current working directory\n$ moon check\n\n# Check project by name\n$ moon check app\n\n# Check multiple projects by name\n$ moon check client server\n\n# Check ALL projects (may be costly)\n$ moon check --all\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[...names]")," - List of project names or aliases to explicitly check, as defined in\n",(0,o.kt)("a",{parentName:"li",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--all")," - Run check for all projects in the workspace."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-u"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"--updateCache")," - Bypass cache and force update any existing items.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/626ef9ce.ee311e9e.js b/assets/js/626ef9ce.ee311e9e.js new file mode 100644 index 00000000000..98722110d68 --- /dev/null +++ b/assets/js/626ef9ce.ee311e9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52080],{35318:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>d});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},s=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(t),d=o,f=u["".concat(l,".").concat(d)]||u[d]||m[d]||a;return t?r.createElement(f,c(c({ref:n},s),{},{components:t})):r.createElement(f,c({ref:n},s))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=u;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p<a;p++)c[p]=t[p];return r.createElement.apply(null,c)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},42729:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=t(25773),o=(t(27378),t(35318));const a={title:"check"},c=void 0,i={unversionedId:"commands/check",id:"commands/check",title:"check",description:"The moon check [...projects] (or moon c) command will run all",source:"@site/docs/commands/check.mdx",sourceDirName:"commands",slug:"/commands/check",permalink:"/docs/commands/check",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/check.mdx",tags:[],version:"current",frontMatter:{title:"check"},sidebar:"docs",previous:{title:"ci",permalink:"/docs/commands/ci"},next:{title:"clean",permalink:"/docs/commands/clean"}},l={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],s={toc:p};function m(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon check [...projects]")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon c"),") command will run ",(0,o.kt)("em",{parentName:"p"},"all"),"\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/task#types"},"build and test tasks")," for one or many projects. This is a convenience\ncommand for verifying the current state of a project, instead of running multiple\n",(0,o.kt)("a",{parentName:"p",href:"./run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run"))," commands."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Check project at current working directory\n$ moon check\n\n# Check project by name\n$ moon check app\n\n# Check multiple projects by name\n$ moon check client server\n\n# Check ALL projects (may be costly)\n$ moon check --all\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[...names]")," - List of project names or aliases to explicitly check, as defined in\n",(0,o.kt)("a",{parentName:"li",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--all")," - Run check for all projects in the workspace."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-u"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"--updateCache")," - Bypass cache and force update any existing items.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/63243ad1.cde04bbe.js b/assets/js/63243ad1.cde04bbe.js new file mode 100644 index 00000000000..014883882ff --- /dev/null +++ b/assets/js/63243ad1.cde04bbe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27594],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function a(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):p(p({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),m=l(r),f=o,y=m["".concat(c,".").concat(f)]||m[f]||s[f]||i;return r?n.createElement(y,p(p({ref:t},u),{},{components:r})):n.createElement(y,p({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,p=new Array(i);p[0]=m;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,p[1]=a;for(var l=2;l<i;l++)p[l]=r[l];return n.createElement.apply(null,p)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},79835:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>p,default:()=>l,frontMatter:()=>i,toc:()=>a});var n=r(25773),o=(r(27378),r(35318));const i={},p=void 0,a=[],c={toc:a};function l(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/github/workflow/status/moonrepo/moon/Moon",alt:"build status"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/v/@moonrepo/report",alt:"npm version"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/l/@moonrepo/report",alt:"npm license"})),(0,o.kt)("p",null,"Utilities for working with moon run reports."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/63243ad1.d8eb69c0.js b/assets/js/63243ad1.d8eb69c0.js deleted file mode 100644 index 2758060a76d..00000000000 --- a/assets/js/63243ad1.d8eb69c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7594],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function a(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):p(p({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),m=l(r),f=o,y=m["".concat(c,".").concat(f)]||m[f]||s[f]||i;return r?n.createElement(y,p(p({ref:t},u),{},{components:r})):n.createElement(y,p({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,p=new Array(i);p[0]=m;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,p[1]=a;for(var l=2;l<i;l++)p[l]=r[l];return n.createElement.apply(null,p)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},79835:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>p,default:()=>l,frontMatter:()=>i,toc:()=>a});var n=r(25773),o=(r(27378),r(35318));const i={},p=void 0,a=[],c={toc:a};function l(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/github/workflow/status/moonrepo/moon/Moon",alt:"build status"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/v/@moonrepo/report",alt:"npm version"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/l/@moonrepo/report",alt:"npm license"})),(0,o.kt)("p",null,"Utilities for working with moon run reports."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/63aeb80b.b2c7c976.js b/assets/js/63aeb80b.b2c7c976.js deleted file mode 100644 index 7c22d1ea8e4..00000000000 --- a/assets/js/63aeb80b.b2c7c976.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7418],{91015:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/language","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/63aeb80b.dd95895d.js b/assets/js/63aeb80b.dd95895d.js new file mode 100644 index 00000000000..2926a01c3ca --- /dev/null +++ b/assets/js/63aeb80b.dd95895d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27418],{91015:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/language","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6432.f516e3d1.js b/assets/js/6432.f516e3d1.js deleted file mode 100644 index ed1727e6947..00000000000 --- a/assets/js/6432.f516e3d1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6432],{55228:(e,t,a)=>{a.d(t,{Z:()=>N});var l=a(27378),n=a(37140),r=a(64654),o=a(58357),s=a(81884),c=a(99213);const i="sidebar_CLW8",m="sidebarItemTitle_DQfJ",u="sidebarItemList_rvuc",d="sidebarItem__RMN",g="sidebarItemLink_Ony9",p="sidebarItemLinkActive_MJ75";function h(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(i,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(m,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(u,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:d},l.createElement(s.default,{isNavLink:!0,to:e.permalink,className:g,activeClassName:p},e.title)))))))}var E=a(63471);function f(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.default,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function b(e){return l.createElement(E.Zo,{component:f,props:e})}function v(e){let{sidebar:t}=e;const a=(0,o.i)();return t?.items.length?"mobile"===a?l.createElement(b,{sidebar:t}):l.createElement(h,{sidebar:t}):null}function N(e){const{sidebar:t,toc:a,children:o,...s}=e,c=t&&t.items.length>0;return l.createElement(r.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(v,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),itemScope:!0,itemType:"http://schema.org/Blog"},o),a&&l.createElement("div",{className:"col col--2"},a))))}},25532:(e,t,a)=>{a.d(t,{Z:()=>R});var l=a(27378),n=a(37140),r=a(70412),o=a(98948);function s(e){let{children:t,className:a}=e;const{frontMatter:n,assets:s,metadata:{description:c}}=(0,r.C)(),{withBaseUrl:i}=(0,o.C)(),m=s.image??n.image,u=n.keywords??[];return l.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},c&&l.createElement("meta",{itemProp:"description",content:c}),m&&l.createElement("link",{itemProp:"image",href:i(m,{absolute:!0})}),u.length>0&&l.createElement("meta",{itemProp:"keywords",content:u.join(",")}),t)}var c=a(81884);const i="title_Kdtz";function m(e){let{className:t}=e;const{metadata:a,isBlogPostPage:o}=(0,r.C)(),{permalink:s,title:m}=a,u=o?"h1":"h2";return l.createElement(u,{className:(0,n.Z)(i,t),itemProp:"headline"},o?m:l.createElement(c.default,{itemProp:"url",to:s},m))}var u=a(99213),d=a(40689);const g="container_iZB2";function p(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,d.c)();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return l.createElement(l.Fragment,null,a(t))}function h(e){let{date:t,formattedDate:a}=e;return l.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function E(){return l.createElement(l.Fragment,null," \xb7 ")}function f(e){let{className:t}=e;const{metadata:a}=(0,r.C)(),{date:o,formattedDate:s,readingTime:c}=a;return l.createElement("div",{className:(0,n.Z)(g,"margin-vert--md",t)},l.createElement(h,{date:o,formattedDate:s}),void 0!==c&&l.createElement(l.Fragment,null,l.createElement(E,null),l.createElement(p,{readingTime:c})))}function b(e){return e.href?l.createElement(c.default,e):l.createElement(l.Fragment,null,e.children)}function v(e){let{author:t,className:a}=e;const{name:r,title:o,url:s,imageURL:c,email:i}=t,m=s||i&&`mailto:${i}`||void 0;return l.createElement("div",{className:(0,n.Z)("avatar margin-bottom--sm",a)},c&&l.createElement(b,{href:m,className:"avatar__photo-link"},l.createElement("img",{className:"avatar__photo",src:c,alt:r,itemProp:"image"})),r&&l.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},l.createElement("div",{className:"avatar__name"},l.createElement(b,{href:m,itemProp:"url"},l.createElement("span",{itemProp:"name"},r))),o&&l.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const N="authorCol_v1VX",P="imageOnlyAuthorRow_RxZ1",_="imageOnlyAuthorCol_iWtj";function k(e){let{className:t}=e;const{metadata:{authors:a},assets:o}=(0,r.C)();if(0===a.length)return null;const s=a.every((e=>{let{name:t}=e;return!t}));return l.createElement("div",{className:(0,n.Z)("margin-top--md margin-bottom--sm",s?P:"row",t)},a.map(((e,t)=>l.createElement("div",{className:(0,n.Z)(!s&&"col col--6",s?_:N),key:t},l.createElement(v,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})))))}function Z(){return l.createElement("header",null,l.createElement(m,null),l.createElement(f,null),l.createElement(k,null))}var w=a(51721),T=a(40450);function C(e){let{children:t,className:a}=e;const{isBlogPostPage:o}=(0,r.C)();return l.createElement("div",{id:o?w.blogPostContainerID:void 0,className:(0,n.Z)("markdown",a),itemProp:"articleBody"},l.createElement(T.default,null,t))}var y=a(34565),B=a(28349),F=a(25773);function M(){return l.createElement("b",null,l.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function I(e){const{blogPostTitle:t,...a}=e;return l.createElement(c.default,(0,F.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),l.createElement(M,null))}const L="blogPostFooterDetailsFull_JgJa";function x(){const{metadata:e,isBlogPostPage:t}=(0,r.C)(),{tags:a,title:o,editUrl:s,hasTruncateMarker:c}=e,i=!t&&c,m=a.length>0;return m||i||s?l.createElement("footer",{className:(0,n.Z)("row docusaurus-mt-lg",t&&L)},m&&l.createElement("div",{className:(0,n.Z)("col",{"col--9":i})},l.createElement(B.Z,{tags:a})),t&&s&&l.createElement("div",{className:"col margin-top--sm"},l.createElement(y.Z,{editUrl:s})),i&&l.createElement("div",{className:(0,n.Z)("col text--right",{"col--3":m})},l.createElement(I,{blogPostTitle:o,to:e.permalink}))):null}function R(e){let{children:t,className:a}=e;const o=function(){const{isBlogPostPage:e}=(0,r.C)();return e?void 0:"margin-bottom--xl"}();return l.createElement(s,{className:(0,n.Z)(o,a)},l.createElement(Z,null),l.createElement(C,null,t),l.createElement(x,null))}},34565:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(27378),n=a(99213),r=a(75484),o=a(25773),s=a(37140);const c="iconEdit_bHB7";function i(e){let{className:t,...a}=e;return l.createElement("svg",(0,o.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(c,t),"aria-hidden":"true"},a),l.createElement("g",null,l.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function m(e){let{editUrl:t}=e;return l.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},l.createElement(i,null),l.createElement(n.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},40450:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var l=a(27378),n=a(35318),r=a(36256);function o(e){let{children:t}=e;return l.createElement(n.Zo,{components:r.default},t)}},51478:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(27378),n=a(37140),r=a(81884);const o="tag_otG2",s="tagRegular_s0E1",c="tagWithCount_PGyn";function i(e){let{permalink:t,label:a,count:i}=e;return l.createElement(r.default,{href:t,className:(0,n.Z)(o,i?c:s)},a,i&&l.createElement("span",null,i))}},28349:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(27378),n=a(37140),r=a(99213),o=a(51478);const s="tags_Ow0B",c="tag_DFxh";function i(e){let{tags:t}=e;return l.createElement(l.Fragment,null,l.createElement("b",null,l.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),l.createElement("ul",{className:(0,n.Z)(s,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:a}=e;return l.createElement("li",{key:a,className:c},l.createElement(o.Z,{label:t,permalink:a}))}))))}},70412:(e,t,a)=>{a.d(t,{C:()=>s,n:()=>o});var l=a(27378),n=a(41763);const r=l.createContext(null);function o(e){let{children:t,content:a,isBlogPostPage:n=!1}=e;const o=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:n});return l.createElement(r.Provider,{value:o},t)}function s(){const e=(0,l.useContext)(r);if(null===e)throw new n.i6("BlogPostProvider");return e}},40689:(e,t,a)=>{a.d(t,{c:()=>i});var l=a(27378),n=a(50353);const r=["zero","one","two","few","many","other"];function o(e){return r.filter((t=>e.includes(t)))}const s={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,n.default)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),s}}),[e])}function i(){const e=c();return{selectMessage:(t,a)=>function(e,t,a){const l=e.split("|");if(1===l.length)return l[0];l.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);const n=a.select(t),r=a.pluralForms.indexOf(n);return l[Math.min(r,l.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/66222453.4dcd0483.js b/assets/js/66222453.4dcd0483.js deleted file mode 100644 index 1def479b155..00000000000 --- a/assets/js/66222453.4dcd0483.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6500],{69376:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/canary","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/66222453.f247ff59.js b/assets/js/66222453.f247ff59.js new file mode 100644 index 00000000000..9f46d74df23 --- /dev/null +++ b/assets/js/66222453.f247ff59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46500],{69376:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/canary","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/66926af2.8a6aef24.js b/assets/js/66926af2.8a6aef24.js new file mode 100644 index 00000000000..2504fbe0330 --- /dev/null +++ b/assets/js/66926af2.8a6aef24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52287],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>u});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),g=s(r),u=o,b=g["".concat(p,".").concat(u)]||g[u]||m[u]||a;return r?n.createElement(b,l(l({ref:t},c),{},{components:r})):n.createElement(b,l({ref:t},c))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=g;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:a,align:l="center",padding:i="1rem"}=e;return n.createElement("div",{style:{marginBottom:i,marginTop:i,textAlign:l}},n.createElement("img",{src:t.default,width:r,alt:o,title:a,className:"inline-block"}))}},71798:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));r(76911),r(88109);const a={slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},l=void 0,i={permalink:"/blog/proto-v0.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx",source:"@site/blog/2023-04-13_proto-v0.6.mdx",title:"proto v0.6 - Unused cleaning and improved global binaries",description:"With this release, we're expanding on our global binary support and providing quality of life",date:"2023-04-13T00:00:00.000Z",formattedDate:"April 13, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"globals",permalink:"/blog/tags/globals"},{label:"clean",permalink:"/blog/tags/clean"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},prevItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"},nextItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"}},p={image:r(32488).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're expanding on our global binary support and providing quality of life\nimprovements."))}m.isMDXComponent=!0},32488:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.6-54cd6a41ee17e956623325a956645c66.png"}}]); \ No newline at end of file diff --git a/assets/js/66926af2.b860e825.js b/assets/js/66926af2.b860e825.js deleted file mode 100644 index 4ae90ad4e2d..00000000000 --- a/assets/js/66926af2.b860e825.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2287],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>u});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),g=s(r),u=o,b=g["".concat(p,".").concat(u)]||g[u]||m[u]||a;return r?n.createElement(b,l(l({ref:t},c),{},{components:r})):n.createElement(b,l({ref:t},c))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=g;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:a,align:l="center",padding:i="1rem"}=e;return n.createElement("div",{style:{marginBottom:i,marginTop:i,textAlign:l}},n.createElement("img",{src:t.default,width:r,alt:o,title:a,className:"inline-block"}))}},71798:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));r(76911),r(88109);const a={slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},l=void 0,i={permalink:"/blog/proto-v0.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx",source:"@site/blog/2023-04-13_proto-v0.6.mdx",title:"proto v0.6 - Unused cleaning and improved global binaries",description:"With this release, we're expanding on our global binary support and providing quality of life",date:"2023-04-13T00:00:00.000Z",formattedDate:"April 13, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"globals",permalink:"/blog/tags/globals"},{label:"clean",permalink:"/blog/tags/clean"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},prevItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"},nextItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"}},p={image:r(32488).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're expanding on our global binary support and providing quality of life\nimprovements."))}m.isMDXComponent=!0},32488:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.6-54cd6a41ee17e956623325a956645c66.png"}}]); \ No newline at end of file diff --git a/assets/js/66a08410.899053d6.js b/assets/js/66a08410.899053d6.js new file mode 100644 index 00000000000..3a5b8a5b5aa --- /dev/null +++ b/assets/js/66a08410.899053d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33062],{59929:e=>{e.exports=JSON.parse('{"label":"lang","permalink":"/docs/tags/lang","allTagsPath":"/docs/tags","count":1,"items":[{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","permalink":"/docs/concepts/query-lang"}]}')}}]); \ No newline at end of file diff --git a/assets/js/66a08410.97667856.js b/assets/js/66a08410.97667856.js deleted file mode 100644 index e2ad700ba41..00000000000 --- a/assets/js/66a08410.97667856.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3062],{59929:e=>{e.exports=JSON.parse('{"label":"lang","permalink":"/docs/tags/lang","allTagsPath":"/docs/tags","count":1,"items":[{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","permalink":"/docs/concepts/query-lang"}]}')}}]); \ No newline at end of file diff --git a/assets/js/676566fe.066ca5ad.js b/assets/js/676566fe.066ca5ad.js new file mode 100644 index 00000000000..58def0aa240 --- /dev/null +++ b/assets/js/676566fe.066ca5ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68876],{7133:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hooks","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/676566fe.a8142acc.js b/assets/js/676566fe.a8142acc.js deleted file mode 100644 index 71a0e2d1cde..00000000000 --- a/assets/js/676566fe.a8142acc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8876],{7133:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hooks","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/679bd524.b17d1ec7.js b/assets/js/679bd524.b17d1ec7.js deleted file mode 100644 index 8cbd819078d..00000000000 --- a/assets/js/679bd524.b17d1ec7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4252],{60604:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/qol","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/679bd524.ce78743c.js b/assets/js/679bd524.ce78743c.js new file mode 100644 index 00000000000..22c32a763d2 --- /dev/null +++ b/assets/js/679bd524.ce78743c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54252],{60604:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/qol","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6875c492.9d5863f4.js b/assets/js/6875c492.9d5863f4.js deleted file mode 100644 index b9390775daf..00000000000 --- a/assets/js/6875c492.9d5863f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8610],{20013:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),l=a(99213),r=a(44022);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},2134:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),l=a(70412),r=a(25532);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},41071:(e,t,a)=>{a.r(t),a.d(t,{default:()=>b});var n=a(27378),l=a(37140),r=a(99213),s=a(40689),i=a(1123),o=a(75484),c=a(81884),g=a(55228),m=a(20013),u=a(60505),p=a(2134);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(i.d,{title:a}),n.createElement(u.Z,{tag:"blog_tags_posts"}))}function E(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const i=d(t);return n.createElement(g.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,i),n.createElement(c.default,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(p.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function b(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(E,e))}},44022:(e,t,a)=>{a.d(t,{Z:()=>o});var n=a(27378),l=a(40624),r=a(83469),s=a(31792),i=a(90728);function o(e){let{permalink:t,title:a,isNext:o}=e;return n.createElement("div",{className:(0,l.Z)("flex-1",o?"text-right":"text-left")},n.createElement(i.Z,{weight:"bold",to:t},!o&&n.createElement(s.Z,{className:"mr-1 icon-previous",icon:r.A35}),a,o&&n.createElement(s.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.a33b77a6.js b/assets/js/6875c492.a33b77a6.js new file mode 100644 index 00000000000..c7cee25ee81 --- /dev/null +++ b/assets/js/6875c492.a33b77a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48610],{20013:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),l=a(99213),r=a(44022);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},2134:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),l=a(70412),r=a(25532);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},41071:(e,t,a)=>{a.r(t),a.d(t,{default:()=>b});var n=a(27378),l=a(37140),r=a(99213),s=a(40689),i=a(1123),o=a(75484),c=a(81884),g=a(55228),m=a(20013),u=a(60505),p=a(2134);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(i.d,{title:a}),n.createElement(u.Z,{tag:"blog_tags_posts"}))}function E(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const i=d(t);return n.createElement(g.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,i),n.createElement(c.default,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(p.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function b(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(E,e))}},44022:(e,t,a)=>{a.d(t,{Z:()=>o});var n=a(27378),l=a(40624),r=a(83469),s=a(31792),i=a(90728);function o(e){let{permalink:t,title:a,isNext:o}=e;return n.createElement("div",{className:(0,l.Z)("flex-1",o?"text-right":"text-left")},n.createElement(i.Z,{weight:"bold",to:t},!o&&n.createElement(s.Z,{className:"mr-1 icon-previous",icon:r.A35}),a,o&&n.createElement(s.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/688193a4.40afe3f6.js b/assets/js/688193a4.40afe3f6.js new file mode 100644 index 00000000000..ad80df4dbe0 --- /dev/null +++ b/assets/js/688193a4.40afe3f6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69201],{67575:e=>{e.exports=JSON.parse('{"label":"registry","permalink":"/blog/tags/registry","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/688193a4.4b40503a.js b/assets/js/688193a4.4b40503a.js deleted file mode 100644 index a7d26e4170e..00000000000 --- a/assets/js/688193a4.4b40503a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9201],{67575:e=>{e.exports=JSON.parse('{"label":"registry","permalink":"/blog/tags/registry","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/68d17c71.ad6c1438.js b/assets/js/68d17c71.ad6c1438.js deleted file mode 100644 index 759dee1a6c6..00000000000 --- a/assets/js/68d17c71.ad6c1438.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5425],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>u});var a=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,o=function(e,n){if(null==e)return{};var t,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var p=a.createContext({}),s=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},c=function(e){var n=s(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},h=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),h=s(t),u=o,m=h["".concat(p,".").concat(u)]||h[u]||d[u]||r;return t?a.createElement(m,i(i({ref:n},c),{},{components:t})):a.createElement(m,i({ref:n},c))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=h;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<r;s++)i[s]=t[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}h.displayName="MDXCreateElement"},67107:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var a=t(25773),o=(t(27378),t(35318));const r={slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},i=void 0,l={permalink:"/blog/moon-v1.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx",source:"@site/blog/2023-10-09_moon-v1.15.mdx",title:"moon v1.15 - Next-generation action graph",description:"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the",date:"2023-10-09T00:00:00.000Z",formattedDate:"October 9, 2023",tags:[{label:"action",permalink:"/blog/tags/action"},{label:"dependency",permalink:"/blog/tags/dependency"},{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"railway",permalink:"/blog/tags/railway"}],readingTime:4.62,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},nextItem:{title:"proto v0.19 - Version pinning and outdated checks",permalink:"/blog/proto-v0.19"}},p={image:t(2985).Z,authorsImageUrls:[void 0]},s=[{value:"Hello action graph, goodbye dependency graph",id:"hello-action-graph-goodbye-dependency-graph",level:2},{value:"A new performant thread pool",id:"a-new-performant-thread-pool",level:3},{value:"Automatic dependency linking (breaking)",id:"automatic-dependency-linking-breaking",level:3},{value:"New <code>moonrepo/setup-toolchain</code> GitHub action",id:"new-moonreposetup-toolchain-github-action",level:2},{value:"Now supported in Railway",id:"now-supported-in-railway",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:s};function d(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the\ndependency graph."),(0,o.kt)("h2",{id:"hello-action-graph-goodbye-dependency-graph"},"Hello action graph, goodbye dependency graph"),(0,o.kt)("p",null,"For the past few months, we've been working on a rewrite of our action pipeline, which consists of\nthe project graph, dependency graph, task executor, process pipeline, and more. It's a slow process,\nwith many different pieces that must land in sequence, but we're almost done. The next step in this\nprocess is the ",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/action-graph"},"introduction of the new action graph"),", which\nreplaces the previous dependency graph."),(0,o.kt)("p",null,"For the most part, the graphs work in a similar fashion, but since we rewrote it from the ground up,\nwe were able to resolve any discrepancies and performance issues. The biggest changes between the\nnew and old graphs are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"All actions now depend on the ",(0,o.kt)("inlineCode",{parentName:"li"},"SyncWorkspace")," action, instead of this action running arbitrarily."),(0,o.kt)("li",{parentName:"ul"},"Cleaned up dependency chains between actions, greatly reducing the number of nodes in the graph."),(0,o.kt)("li",{parentName:"ul"},"Renamed ",(0,o.kt)("inlineCode",{parentName:"li"},"RunTarget")," to ",(0,o.kt)("inlineCode",{parentName:"li"},"RunTask"),", including interactive and persistent variants."),(0,o.kt)("li",{parentName:"ul"},"And lastly, we ditched our batched task approach for a ready queue. Continue reading for more\ninformation!")),(0,o.kt)("h3",{id:"a-new-performant-thread-pool"},"A new performant thread pool"),(0,o.kt)("p",null,"In the old dependency graph, when we'd execute a task, we'd order the graph topologically and then\ngroup actions into batches (or buckets) based on their dependency chains. Batches would then be\nexecuted in order within the thread pool. This approach worked well, but had one major flaw: it\nwasn't as performant as could be. For example, if our thread pool size was 12, and a batch only had\n2 tasks in it, what were the other 10 threads doing? Absolutely nothing. They were sitting idly,\nwaiting for a task."),(0,o.kt)("p",null,"And now with the new action graph, we take full advantage of all threads in the pool. Instead of the\nbatched approach above, we now use a topological task-ready queue, where a thread without work (or\nis waiting for work) can poll the graph for a new task to run. A task is considered ready to run if\nit either has no dependencies, or all of its dependencies (in the chain) have been ran."),(0,o.kt)("p",null,"For large graphs, this should result in a significant performance improvement!"),(0,o.kt)("h3",{id:"automatic-dependency-linking-breaking"},"Automatic dependency linking (breaking)"),(0,o.kt)("p",null,'Because of these graph changes, we do have a minor "breaking change". Tasks that depend (via ',(0,o.kt)("inlineCode",{parentName:"p"},"deps"),')\non other tasks from arbitrary projects (the parent project doesn\'t implicitly or explicitly depend\non the other project), not including the root-level project, will now automatically mark that other\nproject as a "peer" dependency (if not already configured with ',(0,o.kt)("inlineCode",{parentName:"p"},"dependsOn"),'). For example, "b"\nbecomes a peer dependency for "a".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="a/moon.yml"',title:'"a/moon.yml"'},"tasks:\n build:\n deps: ['b:build']\n")),(0,o.kt)("p",null,"Now internally becomes:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="a/moon.yml"',title:'"a/moon.yml"'},"dependsOn:\n - id: 'b'\n scope: 'peer'\n\ntasks:\n build:\n deps: ['b:build']\n")),(0,o.kt)("p",null,"If you'd prefer this dependency to ",(0,o.kt)("em",{parentName:"p"},"not be"),' a peer, you can explicitly configure it with a different\nscope. For Node.js projects, the "build" scope can be used as a no-op replacement.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="a/moon.yml"',title:'"a/moon.yml"'},"dependsOn:\n - id: 'b'\n scope: 'build' # production, development\n\ntasks:\n build:\n deps: ['b:build']\n")),(0,o.kt)("p",null,"We're marking this as a breaking change as this could subtly introduce cycles in the project graph\nthat weren't present before, and for Node.js projects, this may inject ",(0,o.kt)("inlineCode",{parentName:"p"},"peerDependencies"),". However,\nthis change was necessary to ensure accurate dependency chains in the graph."),(0,o.kt)("h2",{id:"new-moonreposetup-toolchain-github-action"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"moonrepo/setup-toolchain")," GitHub action"),(0,o.kt)("p",null,"We've begun a process to deprecate the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},"moonrepo/setup-moon-action")," and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-proto"},"moonrepo/setup-proto")," GitHub actions, and instead, combine\nand replace them with a new ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-toolchain"},"moonrepo/setup-toolchain"),"\naction. Why a new action instead of fixing the others?"),(0,o.kt)("p",null,"The biggest problem was that both previous actions shared about 90% of the same code, but were\nslightly different in how they installed the binaries and cached the toolchain. It was was also\nconfusing for consumers to understand and know which action to use (because they shouldn't be used\ntogether)."),(0,o.kt)("p",null,"To remedy this, we're prototyping the new\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-toolchain"},"moonrepo/setup-toolchain")," action, which has been\nworking quite well. It aims to solve the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Installs ",(0,o.kt)("inlineCode",{parentName:"li"},"proto")," globally so that installed tools can also be executed globally."),(0,o.kt)("li",{parentName:"ul"},"Conditionally installs ",(0,o.kt)("inlineCode",{parentName:"li"},"moon")," globally if the repository is using moon (attempts to detect a\n",(0,o.kt)("inlineCode",{parentName:"li"},".moon")," directory)."),(0,o.kt)("li",{parentName:"ul"},"Caches the toolchain (",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto"),") so subsequent runs are faster."),(0,o.kt)("li",{parentName:"ul"},"Hashes ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools")," and ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/toolchain.yml")," files to generate a unique cache key."),(0,o.kt)("li",{parentName:"ul"},"Cleans the toolchain before caching to remove unused or stale tools."),(0,o.kt)("li",{parentName:"ul"},"Can auto-install tools when used.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff"},"# ...\njobs:\n ci:\n name: CI\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n- - uses: moonrepo/setup-moon-action@v1\n+ - uses: moonrepo/setup-toolchain@v0\n")),(0,o.kt)("h2",{id:"now-supported-in-railway"},"Now supported in Railway"),(0,o.kt)("p",null,"If you're a big fan of ",(0,o.kt)("a",{parentName:"p",href:"https://railway.app/"},"Railway")," (like we are), and you're deploying a Node.js\nbacked application, then you'll be happy to hear that Railway now officially and natively supports\nmoon! We spent some time over the past month\n",(0,o.kt)("a",{parentName:"p",href:"https://nixpacks.com/docs/providers/node"},"integrating moon support into their Nixpacks architecture"),"."),(0,o.kt)("p",null,"To make use of this, set the ",(0,o.kt)("inlineCode",{parentName:"p"},"NIXPACKS_MOON_APP_NAME")," environment variable to the name of your moon\nproject that you want to be deployed. This will then automatically run ",(0,o.kt)("inlineCode",{parentName:"p"},"moon run <app>:build")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon run <app>:start")," respectively. To customize the task names, you can set the\n",(0,o.kt)("inlineCode",{parentName:"p"},"NIXPACKS_MOON_BUILD_TASK")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"NIXPACKS_MOON_START_TASK")," environment variables."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This is currently only supported for Node.js projects, but will be expanded to other languages in\nthe future!")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.15.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"moon action-graph")," command."),(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"--dependents")," argument to ",(0,o.kt)("inlineCode",{parentName:"li"},"moon action-graph"),"."),(0,o.kt)("li",{parentName:"ul"},"Added the ability to skip non-",(0,o.kt)("inlineCode",{parentName:"li"},"RunTask")," actions using environment variables."),(0,o.kt)("li",{parentName:"ul"},"Deprecated the ",(0,o.kt)("inlineCode",{parentName:"li"},"moon dep-graph")," command.")))}d.isMDXComponent=!0},2985:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/v1.15-24f6509aa7bcbfaf9ac48f4d63883483.png"}}]); \ No newline at end of file diff --git a/assets/js/68d17c71.e9f3591f.js b/assets/js/68d17c71.e9f3591f.js new file mode 100644 index 00000000000..155cffa9ec9 --- /dev/null +++ b/assets/js/68d17c71.e9f3591f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[25425],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>u});var a=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,o=function(e,n){if(null==e)return{};var t,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var p=a.createContext({}),s=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},c=function(e){var n=s(e.components);return a.createElement(p.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},h=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),h=s(t),u=o,m=h["".concat(p,".").concat(u)]||h[u]||d[u]||r;return t?a.createElement(m,i(i({ref:n},c),{},{components:t})):a.createElement(m,i({ref:n},c))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=h;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<r;s++)i[s]=t[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}h.displayName="MDXCreateElement"},67107:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>s});var a=t(25773),o=(t(27378),t(35318));const r={slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},i=void 0,l={permalink:"/blog/moon-v1.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx",source:"@site/blog/2023-10-09_moon-v1.15.mdx",title:"moon v1.15 - Next-generation action graph",description:"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the",date:"2023-10-09T00:00:00.000Z",formattedDate:"October 9, 2023",tags:[{label:"action",permalink:"/blog/tags/action"},{label:"dependency",permalink:"/blog/tags/dependency"},{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"railway",permalink:"/blog/tags/railway"}],readingTime:4.62,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.15",title:"moon v1.15 - Next-generation action graph",authors:["milesj"],tags:["action","dependency","graph","pipeline","railway"],image:"./img/moon/v1.15.png"},prevItem:{title:"proto v0.20 - New shims and binaries management",permalink:"/blog/proto-v0.20"},nextItem:{title:"proto v0.19 - Version pinning and outdated checks",permalink:"/blog/proto-v0.19"}},p={image:t(2985).Z,authorsImageUrls:[void 0]},s=[{value:"Hello action graph, goodbye dependency graph",id:"hello-action-graph-goodbye-dependency-graph",level:2},{value:"A new performant thread pool",id:"a-new-performant-thread-pool",level:3},{value:"Automatic dependency linking (breaking)",id:"automatic-dependency-linking-breaking",level:3},{value:"New <code>moonrepo/setup-toolchain</code> GitHub action",id:"new-moonreposetup-toolchain-github-action",level:2},{value:"Now supported in Railway",id:"now-supported-in-railway",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:s};function d(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we've taken the next step in modernizing our action pipeline, by rewriting the\ndependency graph."),(0,o.kt)("h2",{id:"hello-action-graph-goodbye-dependency-graph"},"Hello action graph, goodbye dependency graph"),(0,o.kt)("p",null,"For the past few months, we've been working on a rewrite of our action pipeline, which consists of\nthe project graph, dependency graph, task executor, process pipeline, and more. It's a slow process,\nwith many different pieces that must land in sequence, but we're almost done. The next step in this\nprocess is the ",(0,o.kt)("a",{parentName:"p",href:"/docs/how-it-works/action-graph"},"introduction of the new action graph"),", which\nreplaces the previous dependency graph."),(0,o.kt)("p",null,"For the most part, the graphs work in a similar fashion, but since we rewrote it from the ground up,\nwe were able to resolve any discrepancies and performance issues. The biggest changes between the\nnew and old graphs are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"All actions now depend on the ",(0,o.kt)("inlineCode",{parentName:"li"},"SyncWorkspace")," action, instead of this action running arbitrarily."),(0,o.kt)("li",{parentName:"ul"},"Cleaned up dependency chains between actions, greatly reducing the number of nodes in the graph."),(0,o.kt)("li",{parentName:"ul"},"Renamed ",(0,o.kt)("inlineCode",{parentName:"li"},"RunTarget")," to ",(0,o.kt)("inlineCode",{parentName:"li"},"RunTask"),", including interactive and persistent variants."),(0,o.kt)("li",{parentName:"ul"},"And lastly, we ditched our batched task approach for a ready queue. Continue reading for more\ninformation!")),(0,o.kt)("h3",{id:"a-new-performant-thread-pool"},"A new performant thread pool"),(0,o.kt)("p",null,"In the old dependency graph, when we'd execute a task, we'd order the graph topologically and then\ngroup actions into batches (or buckets) based on their dependency chains. Batches would then be\nexecuted in order within the thread pool. This approach worked well, but had one major flaw: it\nwasn't as performant as could be. For example, if our thread pool size was 12, and a batch only had\n2 tasks in it, what were the other 10 threads doing? Absolutely nothing. They were sitting idly,\nwaiting for a task."),(0,o.kt)("p",null,"And now with the new action graph, we take full advantage of all threads in the pool. Instead of the\nbatched approach above, we now use a topological task-ready queue, where a thread without work (or\nis waiting for work) can poll the graph for a new task to run. A task is considered ready to run if\nit either has no dependencies, or all of its dependencies (in the chain) have been ran."),(0,o.kt)("p",null,"For large graphs, this should result in a significant performance improvement!"),(0,o.kt)("h3",{id:"automatic-dependency-linking-breaking"},"Automatic dependency linking (breaking)"),(0,o.kt)("p",null,'Because of these graph changes, we do have a minor "breaking change". Tasks that depend (via ',(0,o.kt)("inlineCode",{parentName:"p"},"deps"),')\non other tasks from arbitrary projects (the parent project doesn\'t implicitly or explicitly depend\non the other project), not including the root-level project, will now automatically mark that other\nproject as a "peer" dependency (if not already configured with ',(0,o.kt)("inlineCode",{parentName:"p"},"dependsOn"),'). For example, "b"\nbecomes a peer dependency for "a".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="a/moon.yml"',title:'"a/moon.yml"'},"tasks:\n build:\n deps: ['b:build']\n")),(0,o.kt)("p",null,"Now internally becomes:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="a/moon.yml"',title:'"a/moon.yml"'},"dependsOn:\n - id: 'b'\n scope: 'peer'\n\ntasks:\n build:\n deps: ['b:build']\n")),(0,o.kt)("p",null,"If you'd prefer this dependency to ",(0,o.kt)("em",{parentName:"p"},"not be"),' a peer, you can explicitly configure it with a different\nscope. For Node.js projects, the "build" scope can be used as a no-op replacement.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="a/moon.yml"',title:'"a/moon.yml"'},"dependsOn:\n - id: 'b'\n scope: 'build' # production, development\n\ntasks:\n build:\n deps: ['b:build']\n")),(0,o.kt)("p",null,"We're marking this as a breaking change as this could subtly introduce cycles in the project graph\nthat weren't present before, and for Node.js projects, this may inject ",(0,o.kt)("inlineCode",{parentName:"p"},"peerDependencies"),". However,\nthis change was necessary to ensure accurate dependency chains in the graph."),(0,o.kt)("h2",{id:"new-moonreposetup-toolchain-github-action"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"moonrepo/setup-toolchain")," GitHub action"),(0,o.kt)("p",null,"We've begun a process to deprecate the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},"moonrepo/setup-moon-action")," and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-proto"},"moonrepo/setup-proto")," GitHub actions, and instead, combine\nand replace them with a new ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-toolchain"},"moonrepo/setup-toolchain"),"\naction. Why a new action instead of fixing the others?"),(0,o.kt)("p",null,"The biggest problem was that both previous actions shared about 90% of the same code, but were\nslightly different in how they installed the binaries and cached the toolchain. It was was also\nconfusing for consumers to understand and know which action to use (because they shouldn't be used\ntogether)."),(0,o.kt)("p",null,"To remedy this, we're prototyping the new\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-toolchain"},"moonrepo/setup-toolchain")," action, which has been\nworking quite well. It aims to solve the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Installs ",(0,o.kt)("inlineCode",{parentName:"li"},"proto")," globally so that installed tools can also be executed globally."),(0,o.kt)("li",{parentName:"ul"},"Conditionally installs ",(0,o.kt)("inlineCode",{parentName:"li"},"moon")," globally if the repository is using moon (attempts to detect a\n",(0,o.kt)("inlineCode",{parentName:"li"},".moon")," directory)."),(0,o.kt)("li",{parentName:"ul"},"Caches the toolchain (",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto"),") so subsequent runs are faster."),(0,o.kt)("li",{parentName:"ul"},"Hashes ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools")," and ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/toolchain.yml")," files to generate a unique cache key."),(0,o.kt)("li",{parentName:"ul"},"Cleans the toolchain before caching to remove unused or stale tools."),(0,o.kt)("li",{parentName:"ul"},"Can auto-install tools when used.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff"},"# ...\njobs:\n ci:\n name: CI\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n- - uses: moonrepo/setup-moon-action@v1\n+ - uses: moonrepo/setup-toolchain@v0\n")),(0,o.kt)("h2",{id:"now-supported-in-railway"},"Now supported in Railway"),(0,o.kt)("p",null,"If you're a big fan of ",(0,o.kt)("a",{parentName:"p",href:"https://railway.app/"},"Railway")," (like we are), and you're deploying a Node.js\nbacked application, then you'll be happy to hear that Railway now officially and natively supports\nmoon! We spent some time over the past month\n",(0,o.kt)("a",{parentName:"p",href:"https://nixpacks.com/docs/providers/node"},"integrating moon support into their Nixpacks architecture"),"."),(0,o.kt)("p",null,"To make use of this, set the ",(0,o.kt)("inlineCode",{parentName:"p"},"NIXPACKS_MOON_APP_NAME")," environment variable to the name of your moon\nproject that you want to be deployed. This will then automatically run ",(0,o.kt)("inlineCode",{parentName:"p"},"moon run <app>:build")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon run <app>:start")," respectively. To customize the task names, you can set the\n",(0,o.kt)("inlineCode",{parentName:"p"},"NIXPACKS_MOON_BUILD_TASK")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"NIXPACKS_MOON_START_TASK")," environment variables."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This is currently only supported for Node.js projects, but will be expanded to other languages in\nthe future!")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.15.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"moon action-graph")," command."),(0,o.kt)("li",{parentName:"ul"},"Added a ",(0,o.kt)("inlineCode",{parentName:"li"},"--dependents")," argument to ",(0,o.kt)("inlineCode",{parentName:"li"},"moon action-graph"),"."),(0,o.kt)("li",{parentName:"ul"},"Added the ability to skip non-",(0,o.kt)("inlineCode",{parentName:"li"},"RunTask")," actions using environment variables."),(0,o.kt)("li",{parentName:"ul"},"Deprecated the ",(0,o.kt)("inlineCode",{parentName:"li"},"moon dep-graph")," command.")))}d.isMDXComponent=!0},2985:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/v1.15-24f6509aa7bcbfaf9ac48f4d63883483.png"}}]); \ No newline at end of file diff --git a/assets/js/69bc0e2c.73b67ea3.js b/assets/js/69bc0e2c.73b67ea3.js new file mode 100644 index 00000000000..d011f970fff --- /dev/null +++ b/assets/js/69bc0e2c.73b67ea3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44752],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=o,g=u["".concat(p,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(g,l(l({ref:t},s),{},{components:n})):r.createElement(g,l({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=n[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:l}=e;return r.createElement(o.Z,{text:`v${l}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(40624),a=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?l[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),i)}},50455:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const l={title:"add-plugin"},i=void 0,p={unversionedId:"proto/commands/add-plugin",id:"proto/commands/add-plugin",title:"add-plugin",description:"The proto add-plugin (or proto ap) command will add the provided plugin ID and",source:"@site/docs/proto/commands/add-plugin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/add-plugin",permalink:"/docs/proto/commands/add-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/add-plugin.mdx",tags:[],version:"current",frontMatter:{title:"add-plugin"},sidebar:"proto",previous:{title:"WASM",permalink:"/docs/proto/wasm-plugin"},next:{title:"alias",permalink:"/docs/proto/commands/alias"}},c={},s=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],d={toc:s};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.16.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto add-plugin <id> <locator>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ap"),") command will add the provided plugin ID and\nlocator string to the ",(0,o.kt)("inlineCode",{parentName:"p"},"[plugins]")," section of the local (",(0,o.kt)("inlineCode",{parentName:"p"},".prototools"),") or global\n(",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),") config file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Learn more about ",(0,o.kt)("a",{parentName:"p",href:"../plugins#enabling-plugins"},"plugin locator strings"),".")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<id>")," - ID of the plugin."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<locator>")," - How to locate the plugin.")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--global")," - Add to the global config instead of local.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/69bc0e2c.e7f9cf7d.js b/assets/js/69bc0e2c.e7f9cf7d.js deleted file mode 100644 index 7c2862df2cc..00000000000 --- a/assets/js/69bc0e2c.e7f9cf7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4752],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=o,g=u["".concat(p,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(g,l(l({ref:t},s),{},{components:n})):r.createElement(g,l({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=n[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:l}=e;return r.createElement(o.Z,{text:`v${l}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(40624),a=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?l[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),i)}},50455:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const l={title:"add-plugin"},i=void 0,p={unversionedId:"proto/commands/add-plugin",id:"proto/commands/add-plugin",title:"add-plugin",description:"The proto add-plugin (or proto ap) command will add the provided plugin ID and",source:"@site/docs/proto/commands/add-plugin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/add-plugin",permalink:"/docs/proto/commands/add-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/add-plugin.mdx",tags:[],version:"current",frontMatter:{title:"add-plugin"},sidebar:"proto",previous:{title:"WASM",permalink:"/docs/proto/wasm-plugin"},next:{title:"alias",permalink:"/docs/proto/commands/alias"}},c={},s=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],d={toc:s};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.16.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto add-plugin <id> <locator>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ap"),") command will add the provided plugin ID and\nlocator string to the ",(0,o.kt)("inlineCode",{parentName:"p"},"[plugins]")," section of the local (",(0,o.kt)("inlineCode",{parentName:"p"},".prototools"),") or global\n(",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml"),") config file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Learn more about ",(0,o.kt)("a",{parentName:"p",href:"../plugins#enabling-plugins"},"plugin locator strings"),".")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<id>")," - ID of the plugin."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<locator>")," - How to locate the plugin.")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--global")," - Add to the global config instead of local.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/69c95af3.325898c3.js b/assets/js/69c95af3.325898c3.js deleted file mode 100644 index 27bf25e4b60..00000000000 --- a/assets/js/69c95af3.325898c3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7363],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},c=Object.keys(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},m=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,i=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=r,f=u["".concat(i,".").concat(d)]||u[d]||p[d]||c;return n?o.createElement(f,a(a({ref:t},m),{},{components:n})):o.createElement(f,a({ref:t},m))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,a=new Array(c);a[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var s=2;s<c;s++)a[s]=n[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},88819:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const c={title:"completions"},a=void 0,l={unversionedId:"commands/completions",id:"commands/completions",title:"completions",description:"The moon completions command will generate moon command and argument completions for your current",source:"@site/docs/commands/completions.mdx",sourceDirName:"commands",slug:"/commands/completions",permalink:"/docs/commands/completions",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/completions.mdx",tags:[],version:"current",frontMatter:{title:"completions"},sidebar:"docs",previous:{title:"clean",permalink:"/docs/commands/clean"},next:{title:"docker",permalink:"/docs/commands/docker"}},i={},s=[{value:"Options",id:"options",level:3}],m={toc:s};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon completions")," command will generate moon command and argument completions for your current\nshell. This command will write to stdout, which can then be redirected to a file of your choice."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon completions > ~/.bash_completion.d/moon.sh\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--shell"),' - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or\n"zsh".')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/69c95af3.c8d6dea2.js b/assets/js/69c95af3.c8d6dea2.js new file mode 100644 index 00000000000..bdd32d08deb --- /dev/null +++ b/assets/js/69c95af3.c8d6dea2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77363],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},c=Object.keys(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(o=0;o<c.length;o++)n=c[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},m=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,i=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=r,f=u["".concat(i,".").concat(d)]||u[d]||p[d]||c;return n?o.createElement(f,a(a({ref:t},m),{},{components:n})):o.createElement(f,a({ref:t},m))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,a=new Array(c);a[0]=u;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var s=2;s<c;s++)a[s]=n[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},88819:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const c={title:"completions"},a=void 0,l={unversionedId:"commands/completions",id:"commands/completions",title:"completions",description:"The moon completions command will generate moon command and argument completions for your current",source:"@site/docs/commands/completions.mdx",sourceDirName:"commands",slug:"/commands/completions",permalink:"/docs/commands/completions",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/completions.mdx",tags:[],version:"current",frontMatter:{title:"completions"},sidebar:"docs",previous:{title:"clean",permalink:"/docs/commands/clean"},next:{title:"docker",permalink:"/docs/commands/docker"}},i={},s=[{value:"Options",id:"options",level:3}],m={toc:s};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon completions")," command will generate moon command and argument completions for your current\nshell. This command will write to stdout, which can then be redirected to a file of your choice."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon completions > ~/.bash_completion.d/moon.sh\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--shell"),' - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or\n"zsh".')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/69e0bfe1.c5549ed4.js b/assets/js/69e0bfe1.c5549ed4.js deleted file mode 100644 index 5462f4c48b3..00000000000 --- a/assets/js/69e0bfe1.c5549ed4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5029],{30076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":21,"previousPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/69e0bfe1.ff27b86f.js b/assets/js/69e0bfe1.ff27b86f.js new file mode 100644 index 00000000000..ec40dbeed8c --- /dev/null +++ b/assets/js/69e0bfe1.ff27b86f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85029],{30076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":22,"previousPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/69ea3d78.56dc71d2.js b/assets/js/69ea3d78.56dc71d2.js deleted file mode 100644 index 4089117788d..00000000000 --- a/assets/js/69ea3d78.56dc71d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6095],{73762:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/code","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/69ea3d78.79abe347.js b/assets/js/69ea3d78.79abe347.js new file mode 100644 index 00000000000..3ccb72e7f17 --- /dev/null +++ b/assets/js/69ea3d78.79abe347.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36095],{73762:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/code","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6b50e60a.7477a56a.js b/assets/js/6b50e60a.7477a56a.js new file mode 100644 index 00000000000..1ab32def1f6 --- /dev/null +++ b/assets/js/6b50e60a.7477a56a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94268],{35318:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>f});var n=a(27378);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?o(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},o=Object.keys(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},c={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,p=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),s=d(a),f=r,g=s["".concat(p,".").concat(f)]||s[f]||c[f]||o;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function f(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=s;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l.mdxType="string"==typeof t?t:r,i[1]=l;for(var d=2;d<o;d++)i[d]=a[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},37404:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var n=a(25773),r=(a(27378),a(35318));const o={title:"Terminology"},i=void 0,l={unversionedId:"terminology",id:"terminology",title:"Terminology",description:"| Term | Description |",source:"@site/docs/terminology.md",sourceDirName:".",slug:"/terminology",permalink:"/docs/terminology",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/terminology.md",tags:[],version:"current",frontMatter:{title:"Terminology"},sidebar:"docs",previous:{title:"Feature comparison",permalink:"/docs/comparison"},next:{title:"FAQ",permalink:"/docs/faq"}},p={},d=[],m={toc:d};function c(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Term"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Action"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A node within the dependency graph that gets executed by the action pipeline.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Action pipeline"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Executes actions from our dependency graph in topological order using a thread pool.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Affected"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Touched by an explicit set of inputs or sources.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Cache"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Files and outputs that are stored on the file system to provide incremental builds and increased performance.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"CI"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Continuous integration. An environment where tests, builds, lints, etc, are continuously ran on every pull/merge request.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependency graph"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A directed acyclic graph (DAG) of targets to run and their dependencies.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Downstream"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependents or consumers of the item in question.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./guides/codegen"},"Generator")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Generates code from pre-defined templates.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Hash"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A unique SHA256 identifier that represents the result of a ran task.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Hashing"),(0,r.kt)("td",{parentName:"tr",align:"left"},"The mechanism of generating a hash based on multiple sources: inputs, dependencies, configs, etc.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"LTS"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long-term support.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependency manager"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Installs and manages dependencies for a specific tool (",(0,r.kt)("inlineCode",{parentName:"td"},"npm"),"), using a manifest file (",(0,r.kt)("inlineCode",{parentName:"td"},"package.json"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Platform"),(0,r.kt)("td",{parentName:"tr",align:"left"},"An internal concept representing the integration of a programming language (tool) within moon, and also the environment + language that a task runs in.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Primary target"),(0,r.kt)("td",{parentName:"tr",align:"left"},"The target that was explicitly ran, and is the dependee of transitive targets.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/project"},"Project")),(0,r.kt)("td",{parentName:"tr",align:"left"},"An collection of source and test files, configurations, a manifest and dependencies, and much more. Exists within a ",(0,r.kt)("a",{parentName:"td",href:"./concepts/workspace"},"workspace"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Revision"),(0,r.kt)("td",{parentName:"tr",align:"left"},"In the context of a VCS: a branch, revision, commit, hash, or point in history.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Runtime"),(0,r.kt)("td",{parentName:"tr",align:"left"},"An internal concept representing the platform + version of a tool.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/target"},"Target")),(0,r.kt)("td",{parentName:"tr",align:"left"},"A label and reference to a task within the project, in the format of ",(0,r.kt)("inlineCode",{parentName:"td"},"project:task"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/task"},"Task")),(0,r.kt)("td",{parentName:"tr",align:"left"},"A command to run within the context of and configured in a ",(0,r.kt)("a",{parentName:"td",href:"./concepts/project"},"project"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Template"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A collection of files that get scaffolded by a generator.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Template file"),(0,r.kt)("td",{parentName:"tr",align:"left"},"An individual file within a template.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Template variable"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A value that is interpolated within a template file and its file system path.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/token"},"Token")),(0,r.kt)("td",{parentName:"tr",align:"left"},"A value within task configuration that is substituted at runtime.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Tool"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A programming language or dependency manager within the ",(0,r.kt)("a",{parentName:"td",href:"./concepts/toolchain"},"toolchain"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/toolchain"},"Toolchain")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Installs and manages tools within the ",(0,r.kt)("a",{parentName:"td",href:"./concepts/workspace"},"workspace"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Transitive target"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A target that is the dependency of the primary target, and must be ran before the primary.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Touched"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A file that has been created, modified, deleted, or changed in any way.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Upstream"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependencies or producers of the item in question.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"VCS"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Version control system (like Git or SVN).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/workspace"},"Workspace")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Root of the moon installation, and houses one or many ",(0,r.kt)("a",{parentName:"td",href:"./concepts/project"},"projects"),". ",(0,r.kt)("em",{parentName:"td"},"Also refers to package manager workspaces (like Yarn)."))))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6b50e60a.8e4b308a.js b/assets/js/6b50e60a.8e4b308a.js deleted file mode 100644 index e242515a480..00000000000 --- a/assets/js/6b50e60a.8e4b308a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4268],{35318:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>f});var n=a(27378);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?o(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},o=Object.keys(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},c={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,p=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),s=d(a),f=r,g=s["".concat(p,".").concat(f)]||s[f]||c[f]||o;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function f(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=s;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l.mdxType="string"==typeof t?t:r,i[1]=l;for(var d=2;d<o;d++)i[d]=a[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},37404:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var n=a(25773),r=(a(27378),a(35318));const o={title:"Terminology"},i=void 0,l={unversionedId:"terminology",id:"terminology",title:"Terminology",description:"| Term | Description |",source:"@site/docs/terminology.md",sourceDirName:".",slug:"/terminology",permalink:"/docs/terminology",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/terminology.md",tags:[],version:"current",frontMatter:{title:"Terminology"},sidebar:"docs",previous:{title:"Feature comparison",permalink:"/docs/comparison"},next:{title:"FAQ",permalink:"/docs/faq"}},p={},d=[],m={toc:d};function c(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Term"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Action"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A node within the dependency graph that gets executed by the action pipeline.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Action pipeline"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Executes actions from our dependency graph in topological order using a thread pool.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Affected"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Touched by an explicit set of inputs or sources.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Cache"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Files and outputs that are stored on the file system to provide incremental builds and increased performance.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"CI"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Continuous integration. An environment where tests, builds, lints, etc, are continuously ran on every pull/merge request.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependency graph"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A directed acyclic graph (DAG) of targets to run and their dependencies.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Downstream"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependents or consumers of the item in question.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./guides/codegen"},"Generator")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Generates code from pre-defined templates.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Hash"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A unique SHA256 identifier that represents the result of a ran task.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Hashing"),(0,r.kt)("td",{parentName:"tr",align:"left"},"The mechanism of generating a hash based on multiple sources: inputs, dependencies, configs, etc.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"LTS"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long-term support.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependency manager"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Installs and manages dependencies for a specific tool (",(0,r.kt)("inlineCode",{parentName:"td"},"npm"),"), using a manifest file (",(0,r.kt)("inlineCode",{parentName:"td"},"package.json"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Platform"),(0,r.kt)("td",{parentName:"tr",align:"left"},"An internal concept representing the integration of a programming language (tool) within moon, and also the environment + language that a task runs in.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Primary target"),(0,r.kt)("td",{parentName:"tr",align:"left"},"The target that was explicitly ran, and is the dependee of transitive targets.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/project"},"Project")),(0,r.kt)("td",{parentName:"tr",align:"left"},"An collection of source and test files, configurations, a manifest and dependencies, and much more. Exists within a ",(0,r.kt)("a",{parentName:"td",href:"./concepts/workspace"},"workspace"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Revision"),(0,r.kt)("td",{parentName:"tr",align:"left"},"In the context of a VCS: a branch, revision, commit, hash, or point in history.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Runtime"),(0,r.kt)("td",{parentName:"tr",align:"left"},"An internal concept representing the platform + version of a tool.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/target"},"Target")),(0,r.kt)("td",{parentName:"tr",align:"left"},"A label and reference to a task within the project, in the format of ",(0,r.kt)("inlineCode",{parentName:"td"},"project:task"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/task"},"Task")),(0,r.kt)("td",{parentName:"tr",align:"left"},"A command to run within the context of and configured in a ",(0,r.kt)("a",{parentName:"td",href:"./concepts/project"},"project"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Template"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A collection of files that get scaffolded by a generator.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Template file"),(0,r.kt)("td",{parentName:"tr",align:"left"},"An individual file within a template.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Template variable"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A value that is interpolated within a template file and its file system path.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/token"},"Token")),(0,r.kt)("td",{parentName:"tr",align:"left"},"A value within task configuration that is substituted at runtime.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Tool"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A programming language or dependency manager within the ",(0,r.kt)("a",{parentName:"td",href:"./concepts/toolchain"},"toolchain"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/toolchain"},"Toolchain")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Installs and manages tools within the ",(0,r.kt)("a",{parentName:"td",href:"./concepts/workspace"},"workspace"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Transitive target"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A target that is the dependency of the primary target, and must be ran before the primary.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Touched"),(0,r.kt)("td",{parentName:"tr",align:"left"},"A file that has been created, modified, deleted, or changed in any way.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Upstream"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Dependencies or producers of the item in question.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"VCS"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Version control system (like Git or SVN).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"./concepts/workspace"},"Workspace")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Root of the moon installation, and houses one or many ",(0,r.kt)("a",{parentName:"td",href:"./concepts/project"},"projects"),". ",(0,r.kt)("em",{parentName:"td"},"Also refers to package manager workspaces (like Yarn)."))))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6c24c6c6.715e11ae.js b/assets/js/6c24c6c6.715e11ae.js deleted file mode 100644 index 2a64dbc8925..00000000000 --- a/assets/js/6c24c6c6.715e11ae.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8026],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return n?a.createElement(h,r(r({ref:t},c),{},{components:n})):a.createElement(h,r({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378),o=n(37140);const i="tabItem_wHwb";function r(e){let{children:t,hidden:n,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i,r),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),o=n(27378),i=n(37140),r=n(83457),s=n(35595),l=n(76457);const p="tabList_J5MA",c="tabItem_l0OV";function d(e){let{className:t,block:n,selectedValue:s,selectValue:l,tabValues:p}=e;const d=[],{blockElementScrollPositionUntilNextRender:u}=(0,r.o5)(),m=e=>{const t=e.currentTarget,n=d.indexOf(t),a=p[n].value;a!==s&&(u(t),l(a))},h=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;t=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;t=d[n]??d[d.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:r}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>d.push(e),onKeyDown:h,onClick:m},r,{className:(0,i.Z)("tabs__item",c,r?.className,{"tabs__item--active":s===t})}),n??t)})))}function u(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,s.Y)(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",p)},o.createElement(d,(0,a.Z)({},e,t)),o.createElement(u,(0,a.Z)({},e,t)))}function h(e){const t=(0,l.Z)();return o.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>u});var a=n(27378),o=n(35331),i=n(30654),r=n(70784),s=n(71819);function l(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??l(n);return function(e){const t=(0,r.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function d(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function u(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=p(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[u,m]=d({queryString:n,groupId:o}),[h,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,s.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),g=(()=>{const e=u??h;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{g&&l(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),m(e),f(e)}),[m,f,i]),tabValues:i}}},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:i,align:r="center",padding:s="1rem"}=e;return a.createElement("div",{style:{marginBottom:s,marginTop:s,textAlign:r}},a.createElement("img",{src:t.default,width:n,alt:o,title:i,className:"inline-block"}))}},8e3:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>c,toc:()=>u});var a=n(25773),o=(n(27378),n(35318)),i=n(33337),r=n(39798),s=n(88109);const l={title:"TypeScript project references",toc_max_heading_level:6},p=void 0,c={unversionedId:"guides/javascript/typescript-project-refs",id:"guides/javascript/typescript-project-refs",title:"TypeScript project references",description:"The ultimate in-depth guide for using TypeScript in a monorepo effectively!",source:"@site/docs/guides/javascript/typescript-project-refs.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/typescript-project-refs",permalink:"/docs/guides/javascript/typescript-project-refs",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/typescript-project-refs.mdx",tags:[],version:"current",frontMatter:{title:"TypeScript project references",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Task profiling",permalink:"/docs/guides/profile"},next:{title:"Examples",permalink:"/docs/guides/node/examples"}},d={},u=[{value:"Preface",id:"preface",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"<code>tsconfig.json</code>",id:"tsconfigjson",level:4},{value:"<code>tsconfig.options.json</code>",id:"tsconfigoptionsjson",level:4},{value:"ECMAScript interoperability",id:"ecmascript-interoperability",level:5},{value:"<code>.gitignore</code>",id:"gitignore",level:4},{value:"Project-level",id:"project-level",level:3},{value:"<code>tsconfig.json</code>",id:"tsconfigjson-1",level:4},{value:"Includes and excludes",id:"includes-and-excludes",level:5},{value:"Depending on other projects",id:"depending-on-other-projects",level:5},{value:"<code>tsconfig.*.json</code>",id:"tsconfigjson-2",level:4},{value:"Package publishing",id:"package-publishing",level:5},{value:"Vendor specific",id:"vendor-specific",level:5},{value:"Running the typechecker",id:"running-the-typechecker",level:2},{value:"On all projects",id:"on-all-projects",level:3},{value:"On an individual project",id:"on-an-individual-project",level:3},{value:"On affected projects",id:"on-affected-projects",level:3},{value:"Using <code>paths</code> aliases",id:"using-paths-aliases",level:2},{value:"Importing source files from local packages",id:"importing-source-files-from-local-packages",level:3},{value:"Sharing and augmenting types",id:"sharing-and-augmenting-types",level:2},{value:"Supporting <code>package.json</code> exports",id:"supporting-packagejson-exports",level:2},{value:"State of the npm ecosystem",id:"state-of-the-npm-ecosystem",level:3},{value:"Enabling imports/exports resolution",id:"enabling-importsexports-resolution",level:3},{value:"Resolving issues",id:"resolving-issues",level:3},{value:"Editor integration",id:"editor-integration",level:2},{value:"VS Code",id:"vs-code",level:3},{value:"FAQ",id:"faq",level:2},{value:"I still have questions, where can I ask them?",id:"i-still-have-questions-where-can-i-ask-them",level:3},{value:"Do I have to use project references?",id:"do-i-have-to-use-project-references",level:3},{value:"What about not using project references and only using source files?",id:"what-about-not-using-project-references-and-only-using-source-files",level:3},{value:"How to integrate with ESLint?",id:"how-to-integrate-with-eslint",level:3},{value:"How to handle circular references?",id:"how-to-handle-circular-references",level:3}],m={toc:u};function h(e){let{components:t,...l}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The ultimate in-depth guide for using TypeScript in a monorepo effectively!")),(0,o.kt)("p",null,"How to use TypeScript in a monorepo? What are project references? Why use project references? What\nis the best way to use project references? These are just a handful of questions that are\n",(0,o.kt)("em",{parentName:"p"},"constantly")," asked on Twitter, forums, Stack Overflow, and even your workplace."),(0,o.kt)("p",null,"Based on years of experience managing large-scale frontend repositories, we firmly believe that\nTypeScript project references are the proper solution for effectively scaling TypeScript in a\nmonorepo. The official\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/project-references.html"},"TypeScript documentation on project references"),"\nanswers many of these questions, but it basically boils down to the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Project references ",(0,o.kt)("em",{parentName:"li"},"enforce project boundaries, disallowing imports")," to arbitrary projects unless\nthey have been referenced explicitly in configuration. This avoids circular references / cycles."),(0,o.kt)("li",{parentName:"ul"},"It enables TypeScript to ",(0,o.kt)("em",{parentName:"li"},"process individual units"),", instead of the entire repository as a whole.\nPerfect for reducing CI and local development times."),(0,o.kt)("li",{parentName:"ul"},"It supports ",(0,o.kt)("em",{parentName:"li"},"incremental compilation"),", so only out-of-date or affected projects are processed. The\nmore TypeScript's cache is warmed, the faster it will be."),(0,o.kt)("li",{parentName:"ul"},"It simulates how types work in the Node.js package ecosystem.")),(0,o.kt)("p",null,"This all sounds amazing but there's got to be some downsides right? Unfortunately, there is:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Project references require generating declarations to resolve type information correctly. This\nresults in a lot of compilation artifacts littered throughout the repository. There\n",(0,o.kt)("a",{parentName:"li",href:"#gitignore"},"are ways")," ",(0,o.kt)("a",{parentName:"li",href:"../../config/toolchain#routeoutdirtocache"},"around this"),"."),(0,o.kt)("li",{parentName:"ul"},"This approach is a bit involved and may require some cognitive overhead based on your current\nlevel of TypeScript tooling knowledge.")),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"If you'd like a real-world repository to reference, our\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon"},"moonrepo/moon"),", ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/dev"},"moonrepo/dev"),",\nand ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/examples"},"moonrepo/examples")," repositories utilizes this\narchitecture!")),(0,o.kt)("h2",{id:"preface"},"Preface"),(0,o.kt)("p",null,"Before you dive into this questionably long guide, we'd like to preface with:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"This guide is a living document and will continually be updated with best practices and frequently\nasked questions. Keep returning to learn more!"),(0,o.kt)("li",{parentName:"ul"},"This guide assumes a basic level knowledge of TypeScript and how it works."),(0,o.kt)("li",{parentName:"ul"},"The architecture outlined in this guide assumes that TypeScript is ",(0,o.kt)("em",{parentName:"li"},"only")," used for typechecking\nand ",(0,o.kt)("em",{parentName:"li"},"not")," compiling. However, supporting compilation should be as easy as modifying a handful of\ncompiler options."),(0,o.kt)("li",{parentName:"ul"},"Although this guide exists within moon's documentation, it ",(0,o.kt)("em",{parentName:"li"},"does not")," require moon. We've kept all\nimplementation details generic enough for it be used in any repository, but have also included\nmany notes on how moon would improve this experience.")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"The most complicated part of integrating TypeScript in a monorepo is a proper configuration setup.\nBased on our extensive experience, we suggest the following architecture as a base! This ",(0,o.kt)("em",{parentName:"p"},"is not"),"\nperfect and can most definitely be expanded upon or modified to fit your needs."),(0,o.kt)("h3",{id:"root-level"},"Root-level"),(0,o.kt)("p",null,"In a polyrepo, the root ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," is typically the only configuration file, as it defines\ncommon compiler options, and includes files to typecheck. In a monorepo, these responsibilites are\nnow split across multiple configuration files."),(0,o.kt)("h4",{id:"tsconfigjson"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.json")),(0,o.kt)("p",null,"To start, the root ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," file is nothing more than a list of ",(0,o.kt)("em",{parentName:"p"},"all")," projects in the\nmonorepo, with each project being an individual entry in the ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," field. Each entry must\ncontain a ",(0,o.kt)("inlineCode",{parentName:"p"},"path")," field with a relative file system path to the project root (that contains their\nconfig)."),(0,o.kt)("p",null,"We also ",(0,o.kt)("em",{parentName:"p"},"do not")," define compiler options in this file, as project-level configuration files would\n",(0,o.kt)("em",{parentName:"p"},"not")," be able to extend this file, as it would trigger a circular reference. Instead, we define\ncommon compiler options in a root ",(0,o.kt)("a",{parentName:"p",href:"#tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json"))," file, that this\nfile also ",(0,o.kt)("inlineCode",{parentName:"p"},"extends")," from."),(0,o.kt)("p",null,"In the end, this file should only contain 3 fields: ",(0,o.kt)("inlineCode",{parentName:"p"},"extends"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"files")," (an empty list), and\n",(0,o.kt)("inlineCode",{parentName:"p"},"references"),". This abides the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/project-references.html#overall-structure"},"official guidance around structure"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.json"',file:'"tsconfig.json"'},'{\n "extends": "./tsconfig.options.json",\n "files": [],\n "references": [\n {\n "path": "apps/foo"\n },\n {\n "path": "packages/bar"\n }\n // ... more\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting will\nkeep this ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," list automatically in sync, and the name of the file can be customized with\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#rootconfigfilename"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.rootConfigFileName")),".")),(0,o.kt)("h4",{id:"tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.options.json")),(0,o.kt)("p",null,"This file will contain common compiler options that will be inherited by ",(0,o.kt)("em",{parentName:"p"},"all")," projects in the\nmonorepo. For project references to work correctly, the following settings ",(0,o.kt)("em",{parentName:"p"},"must")," be enabled at the\nroot, and typically should not be disabled in each project."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"composite")," - Enables project references and informs the TypeScript program where to find\nreferenced outputs."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"declaration")," - Project references rely on the compiled declarations (",(0,o.kt)("inlineCode",{parentName:"li"},".d.ts"),") of external\nprojects. If declarations do not exist, TypeScript will generate them on demand."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"declarationMap"),' - Generate sourcemaps for declarations, so that language server integrations in\neditors like "Go to" resolve correctly.'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"emitDeclarationOnly")," - Project references only require declarations, so avoid compiling to\nJavaScript."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"incremental")," - Enables incremental compilation, greatly improving performance."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"noEmitOnError")," - If the typechecker fails, avoid generating invalid or partial declarations."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"skipLibCheck")," - Avoids eager loading and analyzing all declarations, greatly improving\nperformance.")),(0,o.kt)("p",null,"For convenience, we provide the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/dev/tree/master/packages/tsconfig"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig-moon"))," package, which\ndefines common compiler options and may be used here."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.options.json"',file:'"tsconfig.options.json"'},'{\n "compilerOptions": {\n "composite": true,\n "declaration": true,\n "declarationMap": true,\n "emitDeclarationOnly": true,\n "incremental": true,\n "noEmitOnError": true,\n "skipLibCheck": true\n // ... others\n }\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the name of the file can be customized with\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#rootoptionsconfigfilename"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.rootOptionsConfigFileName")),".")),(0,o.kt)("h5",{id:"ecmascript-interoperability"},"ECMAScript interoperability"),(0,o.kt)("p",null,"ECMAScript modules (ESM) have been around for quite a while now, but the default TypeScript settings\nare not configured for them. We suggest the following compiler options if you want proper ESM\nsupport with interoperability with the ecosystem."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.options.json"',file:'"tsconfig.options.json"'},'{\n "compilerOptions": {\n "allowSyntheticDefaultImports": true,\n "esModuleInterop": true,\n "isolatedModules": true,\n "module": "esnext",\n "moduleResolution": "node",\n "strict": true,\n "target": "esnext"\n // ... others\n }\n}\n')),(0,o.kt)("h4",{id:"gitignore"},(0,o.kt)("inlineCode",{parentName:"h4"},".gitignore")),(0,o.kt)("p",null,"Project references unfortunately generate ",(0,o.kt)("em",{parentName:"p"},"a ton")," of artifacts that typically shouldn't be committed\nto the repository (but could be if you so choose). We suggest ignoring the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".gitignore"',title:'".gitignore"'},"# The `outDir` for declarations\nlib/\n# Build cache manifests\n*.tsbuildinfo\n")),(0,o.kt)("h3",{id:"project-level"},"Project-level"),(0,o.kt)("p",null,"Each project that contains TypeScript files and will utilize the typechecker ",(0,o.kt)("em",{parentName:"p"},"must")," contain a\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," in the project root, typically as a sibling to ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,o.kt)("h4",{id:"tsconfigjson-1"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.json")),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," in the root of a project (application or package) is required, as it informs\nTypeScript that this is a project, and that it can be referenced by other projects. In its simplest\nform, this file should extend the root ",(0,o.kt)("a",{parentName:"p",href:"#tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json"))," to inherit\ncommon compiler options, define its own compiler options (below), define includes/excludes, and any\nnecessary references."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the name of the file can be customized with\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#projectconfigfilename"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.projectConfigFileName")),".")),(0,o.kt)(i.Z,{groupId:"project-type",defaultValue:"app",values:[{label:"Applications",value:"app"},{label:"Packages",value:"package"}],mdxType:"Tabs"},(0,o.kt)(r.Z,{value:"app",mdxType:"TabItem"},(0,o.kt)("p",null,"For applications, declaration emitting can be disabled, since external projects ",(0,o.kt)("em",{parentName:"p"},"should not")," be\nimporting files from an application. If this use case ever arises, move those files into a package."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="apps/foo/tsconfig.json"',title:'"apps/foo/tsconfig.json"'},'{\n "extends": "../../../../tsconfig.options.json",\n "compilerOptions": {\n "emitDeclarationOnly": false,\n "noEmit": true\n },\n "include": [],\n "references": []\n}\n'))),(0,o.kt)(r.Z,{value:"package",mdxType:"TabItem"},(0,o.kt)("p",null,"For packages, we must define the location in which to generate declarations. These are the\ndeclarations that external projects would reference. This location is typically\n",(0,o.kt)("a",{parentName:"p",href:"#gitignore"},"gitignored"),"!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="packages/bar/tsconfig.json"',title:'"packages/bar/tsconfig.json"'},'{\n "extends": "../../../../tsconfig.options.json",\n "compilerOptions": {\n "outDir": "./lib"\n },\n "include": [],\n "references": []\n}\n')))),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," can automatically be re-routed to a shared cache using\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#routeoutdirtocache"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.routeOutDirToCache")),", to avoid littering\nthe repository with compilation artifacts.")),(0,o.kt)("h5",{id:"includes-and-excludes"},"Includes and excludes"),(0,o.kt)("p",null,"Based on experience, we suggest defining ",(0,o.kt)("inlineCode",{parentName:"p"},"include")," instead of ",(0,o.kt)("inlineCode",{parentName:"p"},"exclude"),", as managing a whitelist of\ntypecheckable files is much easier. When dealing with excludes, there are far too many\npossibilities. To start, you have ",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),", and for applications maybe ",(0,o.kt)("inlineCode",{parentName:"p"},"dist"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"build"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},".next"),", or another application specific folder, and then for packages you may have ",(0,o.kt)("inlineCode",{parentName:"p"},"lib"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"cjs"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"esm"),", etc. It becomes very... tedious."),(0,o.kt)("p",null,"The other benefit of using ",(0,o.kt)("inlineCode",{parentName:"p"},"include")," is that it forces TypeScript to only load ",(0,o.kt)("em",{parentName:"p"},"what's necessary"),",\ninstead of eager loading everything into memory, and for typechecking files that aren't part of\nsource, like configuration."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "include": ["src/**/*", "tests/**/*", "*.js", "*.ts"]\n}\n')),(0,o.kt)("h5",{id:"depending-on-other-projects"},"Depending on other projects"),(0,o.kt)("p",null,"When a project depends on another project (by importing code from it), either using relative paths,\n",(0,o.kt)("a",{parentName:"p",href:"#using-paths-aliases"},"path aliases"),", or its ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name, it must be declared as a\nreference. If not declared, TypeScript will error with a message about importing outside the project\nboundary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "references": [\n {\n "path": "../../foo"\n },\n {\n "path": "../../bar"\n },\n {\n "path": "../../../../baz"\n }\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting will\nkeep this ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," list automatically in sync.")),(0,o.kt)("h4",{id:"tsconfigjson-2"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.*.json")),(0,o.kt)("p",null,"Additional configurations may exist in a project that serve a role outside of typechecking, with one\nsuch role being ",(0,o.kt)("em",{parentName:"p"},"npm package publishing"),". These configs are sometimes named ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.types.json"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.lib.json"),". Regardless of what they're called, these configs are\n",(0,o.kt)("em",{parentName:"p"},"optional"),", so unless you have a business need for them, you may skip this section."),(0,o.kt)("h5",{id:"package-publishing"},"Package publishing"),(0,o.kt)("p",null,"As mentioned previously, these configs may be used for npm packages, primarily for generating\nTypeScript declarations that are mapped through the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html"},(0,o.kt)("inlineCode",{parentName:"a"},"types")," (or ",(0,o.kt)("inlineCode",{parentName:"a"},"typings"),") field"),"."),(0,o.kt)("p",null,"Given this ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"..."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/package.json"',title:'"<project>/package.json"'},'{\n // ...\n "types": "./lib/index.d.ts"\n}\n')),(0,o.kt)("p",null,"Our ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json")," may look like..."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.build.json"',title:'"<project>/tsconfig.build.json"'},'{\n "extends": "../../../../tsconfig.options.json",\n "compilerOptions": {\n "outDir": "lib",\n "rootDir": "src"\n },\n "include": ["src/**/*"]\n}\n')),(0,o.kt)("p",null,"Simple right? But why do we need an additional configuration? Why not use the other ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"?\nGreat questions! The major reason is that we ",(0,o.kt)("em",{parentName:"p"},"only want to publish declarations for source files"),",\nand the declarations file structure should match 1:1 with the sources structure. The ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"\n",(0,o.kt)("em",{parentName:"p"},"does not")," guarantee this, as it may include test, config, or arbitrary files, all of which may not\nexist in the sources directory (",(0,o.kt)("inlineCode",{parentName:"p"},"src"),"), and will alter the output to an incorrect directory\nstructure. Our ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json")," solves this problem by only including source files, and by\nforcing the source root to ",(0,o.kt)("inlineCode",{parentName:"p"},"src")," using the ",(0,o.kt)("inlineCode",{parentName:"p"},"rootDir")," compiler option."),(0,o.kt)("p",null,"However, there is a giant caveat with this approach! Because TypeScript utilizes Node.js's module\nresolution, it will reference the declarations defined by the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," or\n",(0,o.kt)("a",{parentName:"p",href:"#supporting-packagejson-exports"},(0,o.kt)("inlineCode",{parentName:"a"},"exports"))," fields, instead of the ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," compiler option, and\nthe other ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," ",(0,o.kt)("em",{parentName:"p"},"does not guarantee")," these files will exist. This results in TypeScript\nfailing to find the appropriate types! To solve this, add the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json")," as a project\nreference to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "references": [\n {\n "path": "./tsconfig.build.json"\n }\n // ... others\n ]\n}\n')),(0,o.kt)("h5",{id:"vendor-specific"},"Vendor specific"),(0,o.kt)("p",null,"Some vendors, like ",(0,o.kt)("a",{parentName:"p",href:"../examples/vite"},"Vite"),", ",(0,o.kt)("a",{parentName:"p",href:"../examples/vite"},"Vitest"),", and\n",(0,o.kt)("a",{parentName:"p",href:"../examples/astro"},"Astro")," may include additional ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.*.json")," files unique to their ecosystem.\nWe suggest following their guidelines and implementation when applicable."),(0,o.kt)("h2",{id:"running-the-typechecker"},"Running the typechecker"),(0,o.kt)("p",null,"Now that our configuration is place, we can run the typechecker, or attempt to at least! This can be\ndone with the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsc --build")," command, which acts as a\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/project-references.html#build-mode-for-typescript"},"build orchestrator"),".\nWe also suggest passing ",(0,o.kt)("inlineCode",{parentName:"p"},"--verbose")," for insights into what projects are compiling, and which are\nout-of-date."),(0,o.kt)("h3",{id:"on-all-projects"},"On all projects"),(0,o.kt)("p",null,"From the root of the repository, run ",(0,o.kt)("inlineCode",{parentName:"p"},"tsc --build --verbose")," to typecheck ",(0,o.kt)("em",{parentName:"p"},"all")," projects, as defined\nin ",(0,o.kt)("a",{parentName:"p",href:"#tsconfigjson"},"tsconfig.json"),". TypeScript will generate a directed acyclic graph (DAG) and\ncompile projects ",(0,o.kt)("em",{parentName:"p"},"in order")," so that dependencies and references are resolved correctly."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Why run TypeScript in the root? Typically you would only want to run against projects, but for\nsituations where you need to verify that all projects still work, running in the root is the best\napproach. Some such situations are upgrading TypeScript itself, upgrading global ",(0,o.kt)("inlineCode",{parentName:"p"},"@types")," packages,\nupdating shared types, reworking build processes, and more.")),(0,o.kt)("h3",{id:"on-an-individual-project"},"On an individual project"),(0,o.kt)("p",null,"To only typecheck a single project (and its dependencies), there are 2 approaches. The first is to\nrun from the root, and pass a relative path to the project, such as\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsc --build --verbose packages/foo"),". The second is to change the working directory to the project,\nand run from there, such as ",(0,o.kt)("inlineCode",{parentName:"p"},"cd packages/foo && tsc --build --verbose"),"."),(0,o.kt)("p",null,"Both approaches are viable, and either may be used based on your tooling, build system, task runner,\nso on and so forth. This is the approach moon suggests with its\n",(0,o.kt)("a",{parentName:"p",href:"../examples/typescript"},(0,o.kt)("inlineCode",{parentName:"a"},"typecheck")," task"),"."),(0,o.kt)("h3",{id:"on-affected-projects"},"On affected projects"),(0,o.kt)("p",null,"In CI environments, it's nice to ",(0,o.kt)("em",{parentName:"p"},"only run")," the typechecker on affected projects \u2014 projects that\nhave changed files. While this isn't entirely possible with ",(0,o.kt)("inlineCode",{parentName:"p"},"tsc"),", it is possible with moon! Head\nover to the\n",(0,o.kt)("a",{parentName:"p",href:"../../run-task#running-based-on-affected-files-only"},"official docs for more information"),"."),(0,o.kt)("h2",{id:"using-paths-aliases"},"Using ",(0,o.kt)("inlineCode",{parentName:"h2"},"paths")," aliases"),(0,o.kt)("p",null,"Path aliases, also known as path mapping or magic imports, is the concept of defining an import\nalias that re-maps its underlying location on the file system. In TypeScript, this is achieved with\nthe\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping"},(0,o.kt)("inlineCode",{parentName:"a"},"paths")," compiler option"),"."),(0,o.kt)("p",null,'In a monorepo world, we suggest using path aliases on a per-project basis, instead of defining them\n"globally" in the root. This gives projects full control of what\'s available and what they want to\nimport, and also plays nice with the mandatory ',(0,o.kt)("inlineCode",{parentName:"p"},"baseUrl")," compiler option."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "baseUrl": ".",\n "paths": {\n // Within the project\n ":components/*": ["./src/components/*"],\n // To a referenced project\n ":shared/*": ["../../shared/code/*"]\n }\n },\n "references": [\n {\n "path": "../../shared/code"\n }\n ]\n}\n')),(0,o.kt)("p",null,"The above aliases would be imported like the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"// Before\nimport { Button } from '../../../../components/Button';\nimport utils from '../../shared/code/utils';\n\n// After\nimport { Button } from ':components/Button';\nimport utils from ':shared/utils';\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"When using path aliases, we suggest prefixing or suffixing the alias with ",(0,o.kt)("inlineCode",{parentName:"p"},":")," so that it's apparent\nthat it's an alias (this also matches the new ",(0,o.kt)("inlineCode",{parentName:"p"},"node:")," import syntax). Using no special character or\n",(0,o.kt)("inlineCode",{parentName:"p"},"@")," is problematic as it risks a chance of collision with a public npm package and may accidentally\nopen your repository to a\n",(0,o.kt)("a",{parentName:"p",href:"https://snyk.io/blog/npm-security-preventing-supply-chain-attacks/"},"supply chain attack"),". Other\ncharacters like ",(0,o.kt)("inlineCode",{parentName:"p"},"~")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"$")," have an existing meaning in the ecosystem, so it's best to avoid them\naswell.")),(0,o.kt)("h3",{id:"importing-source-files-from-local-packages"},"Importing source files from local packages"),(0,o.kt)("p",null,"If you are importing from a project reference using a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name, then TypeScript will\nabide by Node.js module resolution logic, and will import using the\n",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/api/packages.html#package-entry-points"},(0,o.kt)("inlineCode",{parentName:"a"},"main"),"/",(0,o.kt)("inlineCode",{parentName:"a"},"types")," or ",(0,o.kt)("inlineCode",{parentName:"a"},"exports")," entry points"),".\nThis means that you're importing ",(0,o.kt)("em",{parentName:"p"},"compiled code")," instead of source code, and will require the\npackage to be constantly rebuilt if changes are made to it."),(0,o.kt)("p",null,"However, why not simply import source files instead? With path aliases, you can do just that, by\ndefining a ",(0,o.kt)("inlineCode",{parentName:"p"},"paths")," alias that maps the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name to its source files, like so."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "paths": {\n // Index import\n "@scope/name": ["../../shared/package/src/index.ts"],\n // Deep imports\n "@scope/name/*": ["../../shared/package/src/*"]\n }\n },\n "references": [\n {\n "path": "../../shared/package"\n }\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferencestopaths"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferencesToPaths")),"\nsetting will automatically create ",(0,o.kt)("inlineCode",{parentName:"p"},"paths")," based on the local references.")),(0,o.kt)("h2",{id:"sharing-and-augmenting-types"},"Sharing and augmenting types"),(0,o.kt)("p",null,"Declaring global types, augmenting node modules, and sharing reusable types is a common practice.\nThere are many ways to achieve this, so choose what works best for your repository. We use the\nfollowing pattern with great success."),(0,o.kt)("p",null,"At the root of the repository, create a ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," folder as a sibling to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),". This folder\n",(0,o.kt)("em",{parentName:"p"},"must only")," contain declarations (",(0,o.kt)("inlineCode",{parentName:"p"},".d.ts"),") files for the following reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Declarations can be ",(0,o.kt)("inlineCode",{parentName:"li"},"include"),"ed in a project without having to be a project reference."),(0,o.kt)("li",{parentName:"ul"},"Hard-coded declarations ",(0,o.kt)("em",{parentName:"li"},"do not")," need to be compiled from TypeScript files.")),(0,o.kt)("p",null,"Based on the above, update your project's ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," to include all of these types, or just\nsome of these types."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "include": ["src/**/*", "../../../../types/**/*"]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"In the future, moon will provide a setting to automate this workflow!")),(0,o.kt)("h2",{id:"supporting-packagejson-exports"},"Supporting ",(0,o.kt)("inlineCode",{parentName:"h2"},"package.json")," exports"),(0,o.kt)("p",null,"In Node.js v12, they introduced a new field to ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," called ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," that aims to solve\nthe shortcomings of the ",(0,o.kt)("inlineCode",{parentName:"p"},"main")," field. The ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," field is very complicated, and instead of\nrepeating all of its implementation details, we suggest reading\n",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/api/packages.html#package-entry-points"},"the official Node.js docs on this topic"),"."),(0,o.kt)("p",null,"With that being said, TypeScript completely ignored the ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," field until\n",(0,o.kt)("a",{parentName:"p",href:"https://devblogs.microsoft.com/typescript/announcing-typescript-4-7/#esm-nodejs"},"v4.7"),", and\nrespecting ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," is ",(0,o.kt)("em",{parentName:"p"},"still ignored unless")," the ",(0,o.kt)("inlineCode",{parentName:"p"},"moduleResolution"),' compiler option is set to\n"nodenext" or "node16". If ',(0,o.kt)("inlineCode",{parentName:"p"},"moduleResolution"),' is set to "node", then your integration is resolving\nbased on the ',(0,o.kt)("inlineCode",{parentName:"p"},"main")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"types"),' field, which are basically "legacy".'),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Enabling ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," imports/exports resolution is very complicated, and may be very tedious,\nespecially considering the state of the npm ecosystem. Proceed with caution!")),(0,o.kt)("h3",{id:"state-of-the-npm-ecosystem"},"State of the npm ecosystem"),(0,o.kt)("p",null,"As mentioned above, the npm ecosystem (as of November 2022) is in a very fragile state in regards to\nimports/exports. Based on our experience attempting to utilize them in a monorepo, we ran into an\narray of problems, some of which are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Published packages are simply utilizing imports/exports incorrectly. The semantics around CJS/ESM\nare very strict, and they may be configured wrong. This is exacerbated by the new ",(0,o.kt)("inlineCode",{parentName:"li"},"type")," field."),(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("inlineCode",{parentName:"li"},"exports")," field ",(0,o.kt)("em",{parentName:"li"},"overrides")," the ",(0,o.kt)("inlineCode",{parentName:"li"},"main")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," fields. If ",(0,o.kt)("inlineCode",{parentName:"li"},"exports")," exists without type\nconditions, but the ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," field exists, the ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," entry point is completely ignored, resulting\nin TypeScript failures.")),(0,o.kt)("p",null,"With that being said, there are ",(0,o.kt)("a",{parentName:"p",href:"#resolving-issues"},"ways around this")," and moving forward is\npossible, if you dare!"),(0,o.kt)("h3",{id:"enabling-importsexports-resolution"},"Enabling imports/exports resolution"),(0,o.kt)("p",null,"To start, set the ",(0,o.kt)("inlineCode",{parentName:"p"},"moduleResolution"),' compiler option to "nodenext" in the\n',(0,o.kt)("a",{parentName:"p",href:"#tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json"))," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.options.json"',file:'"tsconfig.options.json"'},'{\n "compilerOptions": {\n // ...\n "moduleResolution": "nodenext"\n }\n}\n')),(0,o.kt)("p",null,"Next, ",(0,o.kt)("a",{parentName:"p",href:"#on-all-projects"},"run the typechecker from the root")," against all projects. This will help\nuncover all potential issues with the dependencies you're using or the current configuration\narchitecture. If no errors are found, well ",(0,o.kt)("em",{parentName:"p"},"congratulations"),", otherwise jump to the next section for\nmore information on ",(0,o.kt)("a",{parentName:"p",href:"#resolving-issues"},"resolving them"),"."),(0,o.kt)("p",null,"If you're trying to use ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," in your own packages, ensure that the ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," condition is set,\nand it's the first condition in the mapping! We also suggest including ",(0,o.kt)("inlineCode",{parentName:"p"},"main")," and the top-level\n",(0,o.kt)("inlineCode",{parentName:"p"},"types")," for tooling that do not support ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," yet."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "main": "./lib/index.js",\n "types": "./lib/index.d.ts",\n "exports": {\n "./package.json": "./package.json",\n ".": {\n "types": "./lib/index.d.ts",\n "node": "./lib/index.js"\n }\n }\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Managing ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," is non-trivial. If you'd prefer them to be automatically generated based on a set\nof inputs, we suggest using ",(0,o.kt)("a",{parentName:"p",href:"https://packemon.dev/"},"Packemon"),"!")),(0,o.kt)("h3",{id:"resolving-issues"},"Resolving issues"),(0,o.kt)("p",null,"There's only one way to resolve issues around incorrectly published ",(0,o.kt)("inlineCode",{parentName:"p"},"exports"),", and that is package\npatching, either with ",(0,o.kt)("a",{parentName:"p",href:"https://yarnpkg.com/features/protocols/#patch"},"Yarn's patching feature"),",\n",(0,o.kt)("a",{parentName:"p",href:"https://pnpm.io/cli/patch"},"pnpm's patching feature"),", or the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/patch-package"},(0,o.kt)("inlineCode",{parentName:"a"},"patch-package")," package"),". With patching, you can:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Inject the ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," condition/field if it's missing."),(0,o.kt)("li",{parentName:"ul"},"Re-structure the ",(0,o.kt)("inlineCode",{parentName:"li"},"exports")," mapping if it's incorrect."),(0,o.kt)("li",{parentName:"ul"},"Fix incorrect entry point paths."),(0,o.kt)("li",{parentName:"ul"},"And even fix invalid TypeScript declarations or JavaScript code!")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="package.json"',title:'"package.json"'},'{\n "main": "./lib/index.js",\n "types": "./lib/index.d.ts",\n "exports": {\n "./package.json": "./package.json",\n- ".": "./lib/index.js"\n+ ".": {\n+ "types": "./lib/index.d.ts",\n+ "node": "./lib/index.js"\n+ }\n }\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"More often than not, the owners of these packages may be unaware that their ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," mapping is\nincorrect. Why not be a good member of the community and report an issue or even submit a pull\nrequest?")),(0,o.kt)("h2",{id:"editor-integration"},"Editor integration"),(0,o.kt)("p",null,"Unfortunately, we only have experience with VS Code. If you prefer another editor and have guidance\nyou'd like to share with the community, feel free to submit a pull request and we'll include it\nbelow!"),(0,o.kt)("h3",{id:"vs-code"},"VS Code"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://code.visualstudio.com/"},"VS Code"),' has first-class support for TypeScript and project\nreferences, and should "just work" without any configuration. You can verify this by restarting the\nTypeScript server in VS Code (with the ',(0,o.kt)("kbd",null,"cmd + shift + p")," command palette) and navigating to\neach project. Pay attention to the status bar at the bottom, as you'll see this:"),(0,o.kt)(s.Z,{src:n(56386),width:"350px",mdxType:"Image"}),(0,o.kt)("p",null,"When this status appears, it means that VS Code is ",(0,o.kt)("em",{parentName:"p"},"compiling a project"),". It will re-appear multiple\ntimes, basically for each project, instead of once for the entire repository."),(0,o.kt)("p",null,"Furthermore, ensure that VS Code is using the version of TypeScript from the ",(0,o.kt)("inlineCode",{parentName:"p"},"typescript")," package in\n",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),". Relying on the version that ships with VS Code may result in unexpected TypeScript\nfailures."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title=".vscode/settings.json"',title:'".vscode/settings.json"'},'{\n "typescript.tsdk": "node_modules/typescript/lib"\n // Or "Select TypeScript version" from the command palette\n}\n')),(0,o.kt)("h2",{id:"faq"},"FAQ"),(0,o.kt)("h3",{id:"i-still-have-questions-where-can-i-ask-them"},"I still have questions, where can I ask them?"),(0,o.kt)("p",null,"We'd love to answer your questions and help anyway that we can. Feel free to..."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Join the ",(0,o.kt)("a",{parentName:"li",href:"https://discord.gg/qCh9MEynv2"},"moonrepo discord")," and post your question in the\n",(0,o.kt)("inlineCode",{parentName:"li"},"#typescript")," channel."),(0,o.kt)("li",{parentName:"ul"},"Ping me, ",(0,o.kt)("a",{parentName:"li",href:"https://twitter.com/mileswjohnson"},"Miles Johnson"),", on Twitter. I'll try my best to\nrespond to every tweet.")),(0,o.kt)("h3",{id:"do-i-have-to-use-project-references"},"Do I have to use project references?"),(0,o.kt)("p",null,"Short answer, no. If you have less than say 10 projects, references may be overkill. If your\nrepository is primarily an application, but then has a handful of shared npm packages, references\nmay also be unncessary here. In the end, it really depends on how many projects exist in the\nmonorepo, and what your team/company is comfortable with."),(0,o.kt)("p",null,"However, we do suggest using project references for very large monorepos (think 100s of projects),\nor repositories with a large number of contributors, or if you merely want to reduce CI typechecking\ntimes."),(0,o.kt)("h3",{id:"what-about-not-using-project-references-and-only-using-source-files"},"What about not using project references and only using source files?"),(0,o.kt)("p",null,"A popular alternative to project references is to simply use the source files as-is, by updating the\n",(0,o.kt)("inlineCode",{parentName:"p"},"main")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," entry fields within each ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),' to point to the original TypeScript\nfiles. This approach is also known as "internal packages".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "main": "./src/index.tsx",\n "types": "./src/index.tsx"\n}\n')),(0,o.kt)("p",null,"While this ",(0,o.kt)("em",{parentName:"p"},"works"),", there are some downsides to this approach."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Loading declaration files are much faster than source files."),(0,o.kt)("li",{parentName:"ul"},"You'll lose all the benefits of TypeScript's incremental caching and compilation. TypeScript will\nconsistently load, parse, and evaluate these source files every time. This is especially true for\nCI environments."),(0,o.kt)("li",{parentName:"ul"},"When using ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),' workspaces, bundlers and other tools may consider these source files\n"external" as they\'re found in ',(0,o.kt)("inlineCode",{parentName:"li"},"node_modules"),". This will require custom configuration to allow it."),(0,o.kt)("li",{parentName:"ul"},'It breaks consistency. Consistency with the npm ecosystem, and consistency with how packaging and\nTypeScript was designed to work. If all packages are internal, then great, but if you have some\npackages that are published, you now have 2 distinct patterns for "using packages" instead of 1.')),(0,o.kt)("p",null,"With that being said, theres a 3rd alternative that may be the best of both worlds, using project\nreferences ",(0,o.kt)("em",{parentName:"p"},"and")," source files,\n",(0,o.kt)("a",{parentName:"p",href:"#importing-source-files-from-local-packages"},"by using ",(0,o.kt)("inlineCode",{parentName:"a"},"paths")," aliases"),"."),(0,o.kt)("p",null,"All in all, this is a viable approach if you're comfortable with the downsides listed above. Use the\npattern that works best for your repository, team, or company!"),(0,o.kt)("h3",{id:"how-to-integrate-with-eslint"},"How to integrate with ESLint?"),(0,o.kt)("p",null,"We initially included ESLint integration in this guide, but it was very complex and in-depth on its\nown, so we've opted to push it to another guide. Unfortunately, that guide is not yet available, so\nplease come back soon! We'll announce when it's ready."),(0,o.kt)("h3",{id:"how-to-handle-circular-references"},"How to handle circular references?"),(0,o.kt)("p",null,"Project references ",(0,o.kt)("em",{parentName:"p"},"do ",(0,o.kt)("strong",{parentName:"em"},"not")," support\n",(0,o.kt)("a",{parentName:"em",href:"https://github.com/microsoft/TypeScript/issues/33685"},"circular references"))," (cycles), which is\ngreat, as they are a ",(0,o.kt)("em",{parentName:"p"},"code smell"),'! If you find yourself arbitrarily importing code from random\nsources, or between 2 projects that depend on each other, then this highlights a problem with your\narchitecture. Projects should be encapsulated and isolated from outside sources, unless explicitly\nallowed through a dependency. Dependencies are "upstream", so having them depend on the current\nproject (the "downstream"), makes little to no sense.'),(0,o.kt)("p",null,"If you're trying to adopt project references and are unfortunately hitting the circular reference\nproblem, don't fret, untangling is possible, although non-trivial depending on the size of your\nrepository. It basically boils down to creating an additional project to move coupled code to."),(0,o.kt)("p",null,"For example, if project A was importing from project B, and B from A, then the solution would be to\ncreate another project, C (typically a shared npm package), and move both pieces of code into C. A\nand B would then import from C, instead of from each other. We're not aware of any tools that would\nautomate this, or detect cycles, so you'll need to do it manually."))}h.isMDXComponent=!0},56386:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/vscode-status-1c68ec4790b8766b34a5e91cba1231d7.png"}}]); \ No newline at end of file diff --git a/assets/js/6c24c6c6.8a06e822.js b/assets/js/6c24c6c6.8a06e822.js new file mode 100644 index 00000000000..74c9853141f --- /dev/null +++ b/assets/js/6c24c6c6.8a06e822.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68026],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return n?a.createElement(h,r(r({ref:t},c),{},{components:n})):a.createElement(h,r({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378),o=n(37140);const i="tabItem_wHwb";function r(e){let{children:t,hidden:n,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i,r),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),o=n(27378),i=n(37140),r=n(83457),s=n(35595),l=n(76457);const p="tabList_J5MA",c="tabItem_l0OV";function d(e){let{className:t,block:n,selectedValue:s,selectValue:l,tabValues:p}=e;const d=[],{blockElementScrollPositionUntilNextRender:u}=(0,r.o5)(),m=e=>{const t=e.currentTarget,n=d.indexOf(t),a=p[n].value;a!==s&&(u(t),l(a))},h=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;t=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;t=d[n]??d[d.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:r}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>d.push(e),onKeyDown:h,onClick:m},r,{className:(0,i.Z)("tabs__item",c,r?.className,{"tabs__item--active":s===t})}),n??t)})))}function u(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,s.Y)(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",p)},o.createElement(d,(0,a.Z)({},e,t)),o.createElement(u,(0,a.Z)({},e,t)))}function h(e){const t=(0,l.Z)();return o.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>u});var a=n(27378),o=n(35331),i=n(30654),r=n(70784),s=n(71819);function l(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??l(n);return function(e){const t=(0,r.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function d(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function u(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=p(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[u,m]=d({queryString:n,groupId:o}),[h,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,s.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),g=(()=>{const e=u??h;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{g&&l(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),m(e),f(e)}),[m,f,i]),tabValues:i}}},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:i,align:r="center",padding:s="1rem"}=e;return a.createElement("div",{style:{marginBottom:s,marginTop:s,textAlign:r}},a.createElement("img",{src:t.default,width:n,alt:o,title:i,className:"inline-block"}))}},8e3:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>c,toc:()=>u});var a=n(25773),o=(n(27378),n(35318)),i=n(33337),r=n(39798),s=n(88109);const l={title:"TypeScript project references",toc_max_heading_level:6},p=void 0,c={unversionedId:"guides/javascript/typescript-project-refs",id:"guides/javascript/typescript-project-refs",title:"TypeScript project references",description:"The ultimate in-depth guide for using TypeScript in a monorepo effectively!",source:"@site/docs/guides/javascript/typescript-project-refs.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/typescript-project-refs",permalink:"/docs/guides/javascript/typescript-project-refs",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/typescript-project-refs.mdx",tags:[],version:"current",frontMatter:{title:"TypeScript project references",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Task profiling",permalink:"/docs/guides/profile"},next:{title:"Examples",permalink:"/docs/guides/node/examples"}},d={},u=[{value:"Preface",id:"preface",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"<code>tsconfig.json</code>",id:"tsconfigjson",level:4},{value:"<code>tsconfig.options.json</code>",id:"tsconfigoptionsjson",level:4},{value:"ECMAScript interoperability",id:"ecmascript-interoperability",level:5},{value:"<code>.gitignore</code>",id:"gitignore",level:4},{value:"Project-level",id:"project-level",level:3},{value:"<code>tsconfig.json</code>",id:"tsconfigjson-1",level:4},{value:"Includes and excludes",id:"includes-and-excludes",level:5},{value:"Depending on other projects",id:"depending-on-other-projects",level:5},{value:"<code>tsconfig.*.json</code>",id:"tsconfigjson-2",level:4},{value:"Package publishing",id:"package-publishing",level:5},{value:"Vendor specific",id:"vendor-specific",level:5},{value:"Running the typechecker",id:"running-the-typechecker",level:2},{value:"On all projects",id:"on-all-projects",level:3},{value:"On an individual project",id:"on-an-individual-project",level:3},{value:"On affected projects",id:"on-affected-projects",level:3},{value:"Using <code>paths</code> aliases",id:"using-paths-aliases",level:2},{value:"Importing source files from local packages",id:"importing-source-files-from-local-packages",level:3},{value:"Sharing and augmenting types",id:"sharing-and-augmenting-types",level:2},{value:"Supporting <code>package.json</code> exports",id:"supporting-packagejson-exports",level:2},{value:"State of the npm ecosystem",id:"state-of-the-npm-ecosystem",level:3},{value:"Enabling imports/exports resolution",id:"enabling-importsexports-resolution",level:3},{value:"Resolving issues",id:"resolving-issues",level:3},{value:"Editor integration",id:"editor-integration",level:2},{value:"VS Code",id:"vs-code",level:3},{value:"FAQ",id:"faq",level:2},{value:"I still have questions, where can I ask them?",id:"i-still-have-questions-where-can-i-ask-them",level:3},{value:"Do I have to use project references?",id:"do-i-have-to-use-project-references",level:3},{value:"What about not using project references and only using source files?",id:"what-about-not-using-project-references-and-only-using-source-files",level:3},{value:"How to integrate with ESLint?",id:"how-to-integrate-with-eslint",level:3},{value:"How to handle circular references?",id:"how-to-handle-circular-references",level:3}],m={toc:u};function h(e){let{components:t,...l}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The ultimate in-depth guide for using TypeScript in a monorepo effectively!")),(0,o.kt)("p",null,"How to use TypeScript in a monorepo? What are project references? Why use project references? What\nis the best way to use project references? These are just a handful of questions that are\n",(0,o.kt)("em",{parentName:"p"},"constantly")," asked on Twitter, forums, Stack Overflow, and even your workplace."),(0,o.kt)("p",null,"Based on years of experience managing large-scale frontend repositories, we firmly believe that\nTypeScript project references are the proper solution for effectively scaling TypeScript in a\nmonorepo. The official\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/project-references.html"},"TypeScript documentation on project references"),"\nanswers many of these questions, but it basically boils down to the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Project references ",(0,o.kt)("em",{parentName:"li"},"enforce project boundaries, disallowing imports")," to arbitrary projects unless\nthey have been referenced explicitly in configuration. This avoids circular references / cycles."),(0,o.kt)("li",{parentName:"ul"},"It enables TypeScript to ",(0,o.kt)("em",{parentName:"li"},"process individual units"),", instead of the entire repository as a whole.\nPerfect for reducing CI and local development times."),(0,o.kt)("li",{parentName:"ul"},"It supports ",(0,o.kt)("em",{parentName:"li"},"incremental compilation"),", so only out-of-date or affected projects are processed. The\nmore TypeScript's cache is warmed, the faster it will be."),(0,o.kt)("li",{parentName:"ul"},"It simulates how types work in the Node.js package ecosystem.")),(0,o.kt)("p",null,"This all sounds amazing but there's got to be some downsides right? Unfortunately, there is:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Project references require generating declarations to resolve type information correctly. This\nresults in a lot of compilation artifacts littered throughout the repository. There\n",(0,o.kt)("a",{parentName:"li",href:"#gitignore"},"are ways")," ",(0,o.kt)("a",{parentName:"li",href:"../../config/toolchain#routeoutdirtocache"},"around this"),"."),(0,o.kt)("li",{parentName:"ul"},"This approach is a bit involved and may require some cognitive overhead based on your current\nlevel of TypeScript tooling knowledge.")),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"If you'd like a real-world repository to reference, our\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon"},"moonrepo/moon"),", ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/dev"},"moonrepo/dev"),",\nand ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/examples"},"moonrepo/examples")," repositories utilizes this\narchitecture!")),(0,o.kt)("h2",{id:"preface"},"Preface"),(0,o.kt)("p",null,"Before you dive into this questionably long guide, we'd like to preface with:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"This guide is a living document and will continually be updated with best practices and frequently\nasked questions. Keep returning to learn more!"),(0,o.kt)("li",{parentName:"ul"},"This guide assumes a basic level knowledge of TypeScript and how it works."),(0,o.kt)("li",{parentName:"ul"},"The architecture outlined in this guide assumes that TypeScript is ",(0,o.kt)("em",{parentName:"li"},"only")," used for typechecking\nand ",(0,o.kt)("em",{parentName:"li"},"not")," compiling. However, supporting compilation should be as easy as modifying a handful of\ncompiler options."),(0,o.kt)("li",{parentName:"ul"},"Although this guide exists within moon's documentation, it ",(0,o.kt)("em",{parentName:"li"},"does not")," require moon. We've kept all\nimplementation details generic enough for it be used in any repository, but have also included\nmany notes on how moon would improve this experience.")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"The most complicated part of integrating TypeScript in a monorepo is a proper configuration setup.\nBased on our extensive experience, we suggest the following architecture as a base! This ",(0,o.kt)("em",{parentName:"p"},"is not"),"\nperfect and can most definitely be expanded upon or modified to fit your needs."),(0,o.kt)("h3",{id:"root-level"},"Root-level"),(0,o.kt)("p",null,"In a polyrepo, the root ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," is typically the only configuration file, as it defines\ncommon compiler options, and includes files to typecheck. In a monorepo, these responsibilites are\nnow split across multiple configuration files."),(0,o.kt)("h4",{id:"tsconfigjson"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.json")),(0,o.kt)("p",null,"To start, the root ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," file is nothing more than a list of ",(0,o.kt)("em",{parentName:"p"},"all")," projects in the\nmonorepo, with each project being an individual entry in the ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," field. Each entry must\ncontain a ",(0,o.kt)("inlineCode",{parentName:"p"},"path")," field with a relative file system path to the project root (that contains their\nconfig)."),(0,o.kt)("p",null,"We also ",(0,o.kt)("em",{parentName:"p"},"do not")," define compiler options in this file, as project-level configuration files would\n",(0,o.kt)("em",{parentName:"p"},"not")," be able to extend this file, as it would trigger a circular reference. Instead, we define\ncommon compiler options in a root ",(0,o.kt)("a",{parentName:"p",href:"#tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json"))," file, that this\nfile also ",(0,o.kt)("inlineCode",{parentName:"p"},"extends")," from."),(0,o.kt)("p",null,"In the end, this file should only contain 3 fields: ",(0,o.kt)("inlineCode",{parentName:"p"},"extends"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"files")," (an empty list), and\n",(0,o.kt)("inlineCode",{parentName:"p"},"references"),". This abides the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/project-references.html#overall-structure"},"official guidance around structure"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.json"',file:'"tsconfig.json"'},'{\n "extends": "./tsconfig.options.json",\n "files": [],\n "references": [\n {\n "path": "apps/foo"\n },\n {\n "path": "packages/bar"\n }\n // ... more\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting will\nkeep this ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," list automatically in sync, and the name of the file can be customized with\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#rootconfigfilename"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.rootConfigFileName")),".")),(0,o.kt)("h4",{id:"tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.options.json")),(0,o.kt)("p",null,"This file will contain common compiler options that will be inherited by ",(0,o.kt)("em",{parentName:"p"},"all")," projects in the\nmonorepo. For project references to work correctly, the following settings ",(0,o.kt)("em",{parentName:"p"},"must")," be enabled at the\nroot, and typically should not be disabled in each project."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"composite")," - Enables project references and informs the TypeScript program where to find\nreferenced outputs."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"declaration")," - Project references rely on the compiled declarations (",(0,o.kt)("inlineCode",{parentName:"li"},".d.ts"),") of external\nprojects. If declarations do not exist, TypeScript will generate them on demand."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"declarationMap"),' - Generate sourcemaps for declarations, so that language server integrations in\neditors like "Go to" resolve correctly.'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"emitDeclarationOnly")," - Project references only require declarations, so avoid compiling to\nJavaScript."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"incremental")," - Enables incremental compilation, greatly improving performance."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"noEmitOnError")," - If the typechecker fails, avoid generating invalid or partial declarations."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"skipLibCheck")," - Avoids eager loading and analyzing all declarations, greatly improving\nperformance.")),(0,o.kt)("p",null,"For convenience, we provide the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/dev/tree/master/packages/tsconfig"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig-moon"))," package, which\ndefines common compiler options and may be used here."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.options.json"',file:'"tsconfig.options.json"'},'{\n "compilerOptions": {\n "composite": true,\n "declaration": true,\n "declarationMap": true,\n "emitDeclarationOnly": true,\n "incremental": true,\n "noEmitOnError": true,\n "skipLibCheck": true\n // ... others\n }\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the name of the file can be customized with\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#rootoptionsconfigfilename"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.rootOptionsConfigFileName")),".")),(0,o.kt)("h5",{id:"ecmascript-interoperability"},"ECMAScript interoperability"),(0,o.kt)("p",null,"ECMAScript modules (ESM) have been around for quite a while now, but the default TypeScript settings\nare not configured for them. We suggest the following compiler options if you want proper ESM\nsupport with interoperability with the ecosystem."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.options.json"',file:'"tsconfig.options.json"'},'{\n "compilerOptions": {\n "allowSyntheticDefaultImports": true,\n "esModuleInterop": true,\n "isolatedModules": true,\n "module": "esnext",\n "moduleResolution": "node",\n "strict": true,\n "target": "esnext"\n // ... others\n }\n}\n')),(0,o.kt)("h4",{id:"gitignore"},(0,o.kt)("inlineCode",{parentName:"h4"},".gitignore")),(0,o.kt)("p",null,"Project references unfortunately generate ",(0,o.kt)("em",{parentName:"p"},"a ton")," of artifacts that typically shouldn't be committed\nto the repository (but could be if you so choose). We suggest ignoring the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".gitignore"',title:'".gitignore"'},"# The `outDir` for declarations\nlib/\n# Build cache manifests\n*.tsbuildinfo\n")),(0,o.kt)("h3",{id:"project-level"},"Project-level"),(0,o.kt)("p",null,"Each project that contains TypeScript files and will utilize the typechecker ",(0,o.kt)("em",{parentName:"p"},"must")," contain a\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," in the project root, typically as a sibling to ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,o.kt)("h4",{id:"tsconfigjson-1"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.json")),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," in the root of a project (application or package) is required, as it informs\nTypeScript that this is a project, and that it can be referenced by other projects. In its simplest\nform, this file should extend the root ",(0,o.kt)("a",{parentName:"p",href:"#tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json"))," to inherit\ncommon compiler options, define its own compiler options (below), define includes/excludes, and any\nnecessary references."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the name of the file can be customized with\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#projectconfigfilename"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.projectConfigFileName")),".")),(0,o.kt)(i.Z,{groupId:"project-type",defaultValue:"app",values:[{label:"Applications",value:"app"},{label:"Packages",value:"package"}],mdxType:"Tabs"},(0,o.kt)(r.Z,{value:"app",mdxType:"TabItem"},(0,o.kt)("p",null,"For applications, declaration emitting can be disabled, since external projects ",(0,o.kt)("em",{parentName:"p"},"should not")," be\nimporting files from an application. If this use case ever arises, move those files into a package."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="apps/foo/tsconfig.json"',title:'"apps/foo/tsconfig.json"'},'{\n "extends": "../../../../tsconfig.options.json",\n "compilerOptions": {\n "emitDeclarationOnly": false,\n "noEmit": true\n },\n "include": [],\n "references": []\n}\n'))),(0,o.kt)(r.Z,{value:"package",mdxType:"TabItem"},(0,o.kt)("p",null,"For packages, we must define the location in which to generate declarations. These are the\ndeclarations that external projects would reference. This location is typically\n",(0,o.kt)("a",{parentName:"p",href:"#gitignore"},"gitignored"),"!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="packages/bar/tsconfig.json"',title:'"packages/bar/tsconfig.json"'},'{\n "extends": "../../../../tsconfig.options.json",\n "compilerOptions": {\n "outDir": "./lib"\n },\n "include": [],\n "references": []\n}\n')))),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," can automatically be re-routed to a shared cache using\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#routeoutdirtocache"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.routeOutDirToCache")),", to avoid littering\nthe repository with compilation artifacts.")),(0,o.kt)("h5",{id:"includes-and-excludes"},"Includes and excludes"),(0,o.kt)("p",null,"Based on experience, we suggest defining ",(0,o.kt)("inlineCode",{parentName:"p"},"include")," instead of ",(0,o.kt)("inlineCode",{parentName:"p"},"exclude"),", as managing a whitelist of\ntypecheckable files is much easier. When dealing with excludes, there are far too many\npossibilities. To start, you have ",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),", and for applications maybe ",(0,o.kt)("inlineCode",{parentName:"p"},"dist"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"build"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},".next"),", or another application specific folder, and then for packages you may have ",(0,o.kt)("inlineCode",{parentName:"p"},"lib"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"cjs"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"esm"),", etc. It becomes very... tedious."),(0,o.kt)("p",null,"The other benefit of using ",(0,o.kt)("inlineCode",{parentName:"p"},"include")," is that it forces TypeScript to only load ",(0,o.kt)("em",{parentName:"p"},"what's necessary"),",\ninstead of eager loading everything into memory, and for typechecking files that aren't part of\nsource, like configuration."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "include": ["src/**/*", "tests/**/*", "*.js", "*.ts"]\n}\n')),(0,o.kt)("h5",{id:"depending-on-other-projects"},"Depending on other projects"),(0,o.kt)("p",null,"When a project depends on another project (by importing code from it), either using relative paths,\n",(0,o.kt)("a",{parentName:"p",href:"#using-paths-aliases"},"path aliases"),", or its ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name, it must be declared as a\nreference. If not declared, TypeScript will error with a message about importing outside the project\nboundary."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "references": [\n {\n "path": "../../foo"\n },\n {\n "path": "../../bar"\n },\n {\n "path": "../../../../baz"\n }\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting will\nkeep this ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," list automatically in sync.")),(0,o.kt)("h4",{id:"tsconfigjson-2"},(0,o.kt)("inlineCode",{parentName:"h4"},"tsconfig.*.json")),(0,o.kt)("p",null,"Additional configurations may exist in a project that serve a role outside of typechecking, with one\nsuch role being ",(0,o.kt)("em",{parentName:"p"},"npm package publishing"),". These configs are sometimes named ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.types.json"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.lib.json"),". Regardless of what they're called, these configs are\n",(0,o.kt)("em",{parentName:"p"},"optional"),", so unless you have a business need for them, you may skip this section."),(0,o.kt)("h5",{id:"package-publishing"},"Package publishing"),(0,o.kt)("p",null,"As mentioned previously, these configs may be used for npm packages, primarily for generating\nTypeScript declarations that are mapped through the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html"},(0,o.kt)("inlineCode",{parentName:"a"},"types")," (or ",(0,o.kt)("inlineCode",{parentName:"a"},"typings"),") field"),"."),(0,o.kt)("p",null,"Given this ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"..."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/package.json"',title:'"<project>/package.json"'},'{\n // ...\n "types": "./lib/index.d.ts"\n}\n')),(0,o.kt)("p",null,"Our ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json")," may look like..."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.build.json"',title:'"<project>/tsconfig.build.json"'},'{\n "extends": "../../../../tsconfig.options.json",\n "compilerOptions": {\n "outDir": "lib",\n "rootDir": "src"\n },\n "include": ["src/**/*"]\n}\n')),(0,o.kt)("p",null,"Simple right? But why do we need an additional configuration? Why not use the other ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"?\nGreat questions! The major reason is that we ",(0,o.kt)("em",{parentName:"p"},"only want to publish declarations for source files"),",\nand the declarations file structure should match 1:1 with the sources structure. The ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"\n",(0,o.kt)("em",{parentName:"p"},"does not")," guarantee this, as it may include test, config, or arbitrary files, all of which may not\nexist in the sources directory (",(0,o.kt)("inlineCode",{parentName:"p"},"src"),"), and will alter the output to an incorrect directory\nstructure. Our ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json")," solves this problem by only including source files, and by\nforcing the source root to ",(0,o.kt)("inlineCode",{parentName:"p"},"src")," using the ",(0,o.kt)("inlineCode",{parentName:"p"},"rootDir")," compiler option."),(0,o.kt)("p",null,"However, there is a giant caveat with this approach! Because TypeScript utilizes Node.js's module\nresolution, it will reference the declarations defined by the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," or\n",(0,o.kt)("a",{parentName:"p",href:"#supporting-packagejson-exports"},(0,o.kt)("inlineCode",{parentName:"a"},"exports"))," fields, instead of the ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," compiler option, and\nthe other ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," ",(0,o.kt)("em",{parentName:"p"},"does not guarantee")," these files will exist. This results in TypeScript\nfailing to find the appropriate types! To solve this, add the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json")," as a project\nreference to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "references": [\n {\n "path": "./tsconfig.build.json"\n }\n // ... others\n ]\n}\n')),(0,o.kt)("h5",{id:"vendor-specific"},"Vendor specific"),(0,o.kt)("p",null,"Some vendors, like ",(0,o.kt)("a",{parentName:"p",href:"../examples/vite"},"Vite"),", ",(0,o.kt)("a",{parentName:"p",href:"../examples/vite"},"Vitest"),", and\n",(0,o.kt)("a",{parentName:"p",href:"../examples/astro"},"Astro")," may include additional ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.*.json")," files unique to their ecosystem.\nWe suggest following their guidelines and implementation when applicable."),(0,o.kt)("h2",{id:"running-the-typechecker"},"Running the typechecker"),(0,o.kt)("p",null,"Now that our configuration is place, we can run the typechecker, or attempt to at least! This can be\ndone with the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsc --build")," command, which acts as a\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/project-references.html#build-mode-for-typescript"},"build orchestrator"),".\nWe also suggest passing ",(0,o.kt)("inlineCode",{parentName:"p"},"--verbose")," for insights into what projects are compiling, and which are\nout-of-date."),(0,o.kt)("h3",{id:"on-all-projects"},"On all projects"),(0,o.kt)("p",null,"From the root of the repository, run ",(0,o.kt)("inlineCode",{parentName:"p"},"tsc --build --verbose")," to typecheck ",(0,o.kt)("em",{parentName:"p"},"all")," projects, as defined\nin ",(0,o.kt)("a",{parentName:"p",href:"#tsconfigjson"},"tsconfig.json"),". TypeScript will generate a directed acyclic graph (DAG) and\ncompile projects ",(0,o.kt)("em",{parentName:"p"},"in order")," so that dependencies and references are resolved correctly."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Why run TypeScript in the root? Typically you would only want to run against projects, but for\nsituations where you need to verify that all projects still work, running in the root is the best\napproach. Some such situations are upgrading TypeScript itself, upgrading global ",(0,o.kt)("inlineCode",{parentName:"p"},"@types")," packages,\nupdating shared types, reworking build processes, and more.")),(0,o.kt)("h3",{id:"on-an-individual-project"},"On an individual project"),(0,o.kt)("p",null,"To only typecheck a single project (and its dependencies), there are 2 approaches. The first is to\nrun from the root, and pass a relative path to the project, such as\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsc --build --verbose packages/foo"),". The second is to change the working directory to the project,\nand run from there, such as ",(0,o.kt)("inlineCode",{parentName:"p"},"cd packages/foo && tsc --build --verbose"),"."),(0,o.kt)("p",null,"Both approaches are viable, and either may be used based on your tooling, build system, task runner,\nso on and so forth. This is the approach moon suggests with its\n",(0,o.kt)("a",{parentName:"p",href:"../examples/typescript"},(0,o.kt)("inlineCode",{parentName:"a"},"typecheck")," task"),"."),(0,o.kt)("h3",{id:"on-affected-projects"},"On affected projects"),(0,o.kt)("p",null,"In CI environments, it's nice to ",(0,o.kt)("em",{parentName:"p"},"only run")," the typechecker on affected projects \u2014 projects that\nhave changed files. While this isn't entirely possible with ",(0,o.kt)("inlineCode",{parentName:"p"},"tsc"),", it is possible with moon! Head\nover to the\n",(0,o.kt)("a",{parentName:"p",href:"../../run-task#running-based-on-affected-files-only"},"official docs for more information"),"."),(0,o.kt)("h2",{id:"using-paths-aliases"},"Using ",(0,o.kt)("inlineCode",{parentName:"h2"},"paths")," aliases"),(0,o.kt)("p",null,"Path aliases, also known as path mapping or magic imports, is the concept of defining an import\nalias that re-maps its underlying location on the file system. In TypeScript, this is achieved with\nthe\n",(0,o.kt)("a",{parentName:"p",href:"https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping"},(0,o.kt)("inlineCode",{parentName:"a"},"paths")," compiler option"),"."),(0,o.kt)("p",null,'In a monorepo world, we suggest using path aliases on a per-project basis, instead of defining them\n"globally" in the root. This gives projects full control of what\'s available and what they want to\nimport, and also plays nice with the mandatory ',(0,o.kt)("inlineCode",{parentName:"p"},"baseUrl")," compiler option."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "baseUrl": ".",\n "paths": {\n // Within the project\n ":components/*": ["./src/components/*"],\n // To a referenced project\n ":shared/*": ["../../shared/code/*"]\n }\n },\n "references": [\n {\n "path": "../../shared/code"\n }\n ]\n}\n')),(0,o.kt)("p",null,"The above aliases would be imported like the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"// Before\nimport { Button } from '../../../../components/Button';\nimport utils from '../../shared/code/utils';\n\n// After\nimport { Button } from ':components/Button';\nimport utils from ':shared/utils';\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"When using path aliases, we suggest prefixing or suffixing the alias with ",(0,o.kt)("inlineCode",{parentName:"p"},":")," so that it's apparent\nthat it's an alias (this also matches the new ",(0,o.kt)("inlineCode",{parentName:"p"},"node:")," import syntax). Using no special character or\n",(0,o.kt)("inlineCode",{parentName:"p"},"@")," is problematic as it risks a chance of collision with a public npm package and may accidentally\nopen your repository to a\n",(0,o.kt)("a",{parentName:"p",href:"https://snyk.io/blog/npm-security-preventing-supply-chain-attacks/"},"supply chain attack"),". Other\ncharacters like ",(0,o.kt)("inlineCode",{parentName:"p"},"~")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"$")," have an existing meaning in the ecosystem, so it's best to avoid them\naswell.")),(0,o.kt)("h3",{id:"importing-source-files-from-local-packages"},"Importing source files from local packages"),(0,o.kt)("p",null,"If you are importing from a project reference using a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name, then TypeScript will\nabide by Node.js module resolution logic, and will import using the\n",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/api/packages.html#package-entry-points"},(0,o.kt)("inlineCode",{parentName:"a"},"main"),"/",(0,o.kt)("inlineCode",{parentName:"a"},"types")," or ",(0,o.kt)("inlineCode",{parentName:"a"},"exports")," entry points"),".\nThis means that you're importing ",(0,o.kt)("em",{parentName:"p"},"compiled code")," instead of source code, and will require the\npackage to be constantly rebuilt if changes are made to it."),(0,o.kt)("p",null,"However, why not simply import source files instead? With path aliases, you can do just that, by\ndefining a ",(0,o.kt)("inlineCode",{parentName:"p"},"paths")," alias that maps the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name to its source files, like so."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "paths": {\n // Index import\n "@scope/name": ["../../shared/package/src/index.ts"],\n // Deep imports\n "@scope/name/*": ["../../shared/package/src/*"]\n }\n },\n "references": [\n {\n "path": "../../shared/package"\n }\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When using moon, the\n",(0,o.kt)("a",{parentName:"p",href:"../../config/toolchain#syncprojectreferencestopaths"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferencesToPaths")),"\nsetting will automatically create ",(0,o.kt)("inlineCode",{parentName:"p"},"paths")," based on the local references.")),(0,o.kt)("h2",{id:"sharing-and-augmenting-types"},"Sharing and augmenting types"),(0,o.kt)("p",null,"Declaring global types, augmenting node modules, and sharing reusable types is a common practice.\nThere are many ways to achieve this, so choose what works best for your repository. We use the\nfollowing pattern with great success."),(0,o.kt)("p",null,"At the root of the repository, create a ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," folder as a sibling to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),". This folder\n",(0,o.kt)("em",{parentName:"p"},"must only")," contain declarations (",(0,o.kt)("inlineCode",{parentName:"p"},".d.ts"),") files for the following reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Declarations can be ",(0,o.kt)("inlineCode",{parentName:"li"},"include"),"ed in a project without having to be a project reference."),(0,o.kt)("li",{parentName:"ul"},"Hard-coded declarations ",(0,o.kt)("em",{parentName:"li"},"do not")," need to be compiled from TypeScript files.")),(0,o.kt)("p",null,"Based on the above, update your project's ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," to include all of these types, or just\nsome of these types."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "include": ["src/**/*", "../../../../types/**/*"]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"In the future, moon will provide a setting to automate this workflow!")),(0,o.kt)("h2",{id:"supporting-packagejson-exports"},"Supporting ",(0,o.kt)("inlineCode",{parentName:"h2"},"package.json")," exports"),(0,o.kt)("p",null,"In Node.js v12, they introduced a new field to ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," called ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," that aims to solve\nthe shortcomings of the ",(0,o.kt)("inlineCode",{parentName:"p"},"main")," field. The ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," field is very complicated, and instead of\nrepeating all of its implementation details, we suggest reading\n",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/api/packages.html#package-entry-points"},"the official Node.js docs on this topic"),"."),(0,o.kt)("p",null,"With that being said, TypeScript completely ignored the ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," field until\n",(0,o.kt)("a",{parentName:"p",href:"https://devblogs.microsoft.com/typescript/announcing-typescript-4-7/#esm-nodejs"},"v4.7"),", and\nrespecting ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," is ",(0,o.kt)("em",{parentName:"p"},"still ignored unless")," the ",(0,o.kt)("inlineCode",{parentName:"p"},"moduleResolution"),' compiler option is set to\n"nodenext" or "node16". If ',(0,o.kt)("inlineCode",{parentName:"p"},"moduleResolution"),' is set to "node", then your integration is resolving\nbased on the ',(0,o.kt)("inlineCode",{parentName:"p"},"main")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"types"),' field, which are basically "legacy".'),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Enabling ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," imports/exports resolution is very complicated, and may be very tedious,\nespecially considering the state of the npm ecosystem. Proceed with caution!")),(0,o.kt)("h3",{id:"state-of-the-npm-ecosystem"},"State of the npm ecosystem"),(0,o.kt)("p",null,"As mentioned above, the npm ecosystem (as of November 2022) is in a very fragile state in regards to\nimports/exports. Based on our experience attempting to utilize them in a monorepo, we ran into an\narray of problems, some of which are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Published packages are simply utilizing imports/exports incorrectly. The semantics around CJS/ESM\nare very strict, and they may be configured wrong. This is exacerbated by the new ",(0,o.kt)("inlineCode",{parentName:"li"},"type")," field."),(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("inlineCode",{parentName:"li"},"exports")," field ",(0,o.kt)("em",{parentName:"li"},"overrides")," the ",(0,o.kt)("inlineCode",{parentName:"li"},"main")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," fields. If ",(0,o.kt)("inlineCode",{parentName:"li"},"exports")," exists without type\nconditions, but the ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," field exists, the ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," entry point is completely ignored, resulting\nin TypeScript failures.")),(0,o.kt)("p",null,"With that being said, there are ",(0,o.kt)("a",{parentName:"p",href:"#resolving-issues"},"ways around this")," and moving forward is\npossible, if you dare!"),(0,o.kt)("h3",{id:"enabling-importsexports-resolution"},"Enabling imports/exports resolution"),(0,o.kt)("p",null,"To start, set the ",(0,o.kt)("inlineCode",{parentName:"p"},"moduleResolution"),' compiler option to "nodenext" in the\n',(0,o.kt)("a",{parentName:"p",href:"#tsconfigoptionsjson"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json"))," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'file="tsconfig.options.json"',file:'"tsconfig.options.json"'},'{\n "compilerOptions": {\n // ...\n "moduleResolution": "nodenext"\n }\n}\n')),(0,o.kt)("p",null,"Next, ",(0,o.kt)("a",{parentName:"p",href:"#on-all-projects"},"run the typechecker from the root")," against all projects. This will help\nuncover all potential issues with the dependencies you're using or the current configuration\narchitecture. If no errors are found, well ",(0,o.kt)("em",{parentName:"p"},"congratulations"),", otherwise jump to the next section for\nmore information on ",(0,o.kt)("a",{parentName:"p",href:"#resolving-issues"},"resolving them"),"."),(0,o.kt)("p",null,"If you're trying to use ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," in your own packages, ensure that the ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," condition is set,\nand it's the first condition in the mapping! We also suggest including ",(0,o.kt)("inlineCode",{parentName:"p"},"main")," and the top-level\n",(0,o.kt)("inlineCode",{parentName:"p"},"types")," for tooling that do not support ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," yet."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "main": "./lib/index.js",\n "types": "./lib/index.d.ts",\n "exports": {\n "./package.json": "./package.json",\n ".": {\n "types": "./lib/index.d.ts",\n "node": "./lib/index.js"\n }\n }\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Managing ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," is non-trivial. If you'd prefer them to be automatically generated based on a set\nof inputs, we suggest using ",(0,o.kt)("a",{parentName:"p",href:"https://packemon.dev/"},"Packemon"),"!")),(0,o.kt)("h3",{id:"resolving-issues"},"Resolving issues"),(0,o.kt)("p",null,"There's only one way to resolve issues around incorrectly published ",(0,o.kt)("inlineCode",{parentName:"p"},"exports"),", and that is package\npatching, either with ",(0,o.kt)("a",{parentName:"p",href:"https://yarnpkg.com/features/protocols/#patch"},"Yarn's patching feature"),",\n",(0,o.kt)("a",{parentName:"p",href:"https://pnpm.io/cli/patch"},"pnpm's patching feature"),", or the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/patch-package"},(0,o.kt)("inlineCode",{parentName:"a"},"patch-package")," package"),". With patching, you can:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Inject the ",(0,o.kt)("inlineCode",{parentName:"li"},"types")," condition/field if it's missing."),(0,o.kt)("li",{parentName:"ul"},"Re-structure the ",(0,o.kt)("inlineCode",{parentName:"li"},"exports")," mapping if it's incorrect."),(0,o.kt)("li",{parentName:"ul"},"Fix incorrect entry point paths."),(0,o.kt)("li",{parentName:"ul"},"And even fix invalid TypeScript declarations or JavaScript code!")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="package.json"',title:'"package.json"'},'{\n "main": "./lib/index.js",\n "types": "./lib/index.d.ts",\n "exports": {\n "./package.json": "./package.json",\n- ".": "./lib/index.js"\n+ ".": {\n+ "types": "./lib/index.d.ts",\n+ "node": "./lib/index.js"\n+ }\n }\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"More often than not, the owners of these packages may be unaware that their ",(0,o.kt)("inlineCode",{parentName:"p"},"exports")," mapping is\nincorrect. Why not be a good member of the community and report an issue or even submit a pull\nrequest?")),(0,o.kt)("h2",{id:"editor-integration"},"Editor integration"),(0,o.kt)("p",null,"Unfortunately, we only have experience with VS Code. If you prefer another editor and have guidance\nyou'd like to share with the community, feel free to submit a pull request and we'll include it\nbelow!"),(0,o.kt)("h3",{id:"vs-code"},"VS Code"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://code.visualstudio.com/"},"VS Code"),' has first-class support for TypeScript and project\nreferences, and should "just work" without any configuration. You can verify this by restarting the\nTypeScript server in VS Code (with the ',(0,o.kt)("kbd",null,"cmd + shift + p")," command palette) and navigating to\neach project. Pay attention to the status bar at the bottom, as you'll see this:"),(0,o.kt)(s.Z,{src:n(56386),width:"350px",mdxType:"Image"}),(0,o.kt)("p",null,"When this status appears, it means that VS Code is ",(0,o.kt)("em",{parentName:"p"},"compiling a project"),". It will re-appear multiple\ntimes, basically for each project, instead of once for the entire repository."),(0,o.kt)("p",null,"Furthermore, ensure that VS Code is using the version of TypeScript from the ",(0,o.kt)("inlineCode",{parentName:"p"},"typescript")," package in\n",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),". Relying on the version that ships with VS Code may result in unexpected TypeScript\nfailures."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title=".vscode/settings.json"',title:'".vscode/settings.json"'},'{\n "typescript.tsdk": "node_modules/typescript/lib"\n // Or "Select TypeScript version" from the command palette\n}\n')),(0,o.kt)("h2",{id:"faq"},"FAQ"),(0,o.kt)("h3",{id:"i-still-have-questions-where-can-i-ask-them"},"I still have questions, where can I ask them?"),(0,o.kt)("p",null,"We'd love to answer your questions and help anyway that we can. Feel free to..."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Join the ",(0,o.kt)("a",{parentName:"li",href:"https://discord.gg/qCh9MEynv2"},"moonrepo discord")," and post your question in the\n",(0,o.kt)("inlineCode",{parentName:"li"},"#typescript")," channel."),(0,o.kt)("li",{parentName:"ul"},"Ping me, ",(0,o.kt)("a",{parentName:"li",href:"https://twitter.com/mileswjohnson"},"Miles Johnson"),", on Twitter. I'll try my best to\nrespond to every tweet.")),(0,o.kt)("h3",{id:"do-i-have-to-use-project-references"},"Do I have to use project references?"),(0,o.kt)("p",null,"Short answer, no. If you have less than say 10 projects, references may be overkill. If your\nrepository is primarily an application, but then has a handful of shared npm packages, references\nmay also be unncessary here. In the end, it really depends on how many projects exist in the\nmonorepo, and what your team/company is comfortable with."),(0,o.kt)("p",null,"However, we do suggest using project references for very large monorepos (think 100s of projects),\nor repositories with a large number of contributors, or if you merely want to reduce CI typechecking\ntimes."),(0,o.kt)("h3",{id:"what-about-not-using-project-references-and-only-using-source-files"},"What about not using project references and only using source files?"),(0,o.kt)("p",null,"A popular alternative to project references is to simply use the source files as-is, by updating the\n",(0,o.kt)("inlineCode",{parentName:"p"},"main")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"types")," entry fields within each ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),' to point to the original TypeScript\nfiles. This approach is also known as "internal packages".'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "main": "./src/index.tsx",\n "types": "./src/index.tsx"\n}\n')),(0,o.kt)("p",null,"While this ",(0,o.kt)("em",{parentName:"p"},"works"),", there are some downsides to this approach."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Loading declaration files are much faster than source files."),(0,o.kt)("li",{parentName:"ul"},"You'll lose all the benefits of TypeScript's incremental caching and compilation. TypeScript will\nconsistently load, parse, and evaluate these source files every time. This is especially true for\nCI environments."),(0,o.kt)("li",{parentName:"ul"},"When using ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),' workspaces, bundlers and other tools may consider these source files\n"external" as they\'re found in ',(0,o.kt)("inlineCode",{parentName:"li"},"node_modules"),". This will require custom configuration to allow it."),(0,o.kt)("li",{parentName:"ul"},'It breaks consistency. Consistency with the npm ecosystem, and consistency with how packaging and\nTypeScript was designed to work. If all packages are internal, then great, but if you have some\npackages that are published, you now have 2 distinct patterns for "using packages" instead of 1.')),(0,o.kt)("p",null,"With that being said, theres a 3rd alternative that may be the best of both worlds, using project\nreferences ",(0,o.kt)("em",{parentName:"p"},"and")," source files,\n",(0,o.kt)("a",{parentName:"p",href:"#importing-source-files-from-local-packages"},"by using ",(0,o.kt)("inlineCode",{parentName:"a"},"paths")," aliases"),"."),(0,o.kt)("p",null,"All in all, this is a viable approach if you're comfortable with the downsides listed above. Use the\npattern that works best for your repository, team, or company!"),(0,o.kt)("h3",{id:"how-to-integrate-with-eslint"},"How to integrate with ESLint?"),(0,o.kt)("p",null,"We initially included ESLint integration in this guide, but it was very complex and in-depth on its\nown, so we've opted to push it to another guide. Unfortunately, that guide is not yet available, so\nplease come back soon! We'll announce when it's ready."),(0,o.kt)("h3",{id:"how-to-handle-circular-references"},"How to handle circular references?"),(0,o.kt)("p",null,"Project references ",(0,o.kt)("em",{parentName:"p"},"do ",(0,o.kt)("strong",{parentName:"em"},"not")," support\n",(0,o.kt)("a",{parentName:"em",href:"https://github.com/microsoft/TypeScript/issues/33685"},"circular references"))," (cycles), which is\ngreat, as they are a ",(0,o.kt)("em",{parentName:"p"},"code smell"),'! If you find yourself arbitrarily importing code from random\nsources, or between 2 projects that depend on each other, then this highlights a problem with your\narchitecture. Projects should be encapsulated and isolated from outside sources, unless explicitly\nallowed through a dependency. Dependencies are "upstream", so having them depend on the current\nproject (the "downstream"), makes little to no sense.'),(0,o.kt)("p",null,"If you're trying to adopt project references and are unfortunately hitting the circular reference\nproblem, don't fret, untangling is possible, although non-trivial depending on the size of your\nrepository. It basically boils down to creating an additional project to move coupled code to."),(0,o.kt)("p",null,"For example, if project A was importing from project B, and B from A, then the solution would be to\ncreate another project, C (typically a shared npm package), and move both pieces of code into C. A\nand B would then import from C, instead of from each other. We're not aware of any tools that would\nautomate this, or detect cycles, so you'll need to do it manually."))}h.isMDXComponent=!0},56386:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/vscode-status-1c68ec4790b8766b34a5e91cba1231d7.png"}}]); \ No newline at end of file diff --git a/assets/js/6dd55018.14633250.js b/assets/js/6dd55018.14633250.js new file mode 100644 index 00000000000..01027993216 --- /dev/null +++ b/assets/js/6dd55018.14633250.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85390],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),d=i,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var p=2;p<o;p++)a[p]=n[p];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},37116:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=n(25773),i=(n(27378),n(35318));const o={},a=void 0,s={unversionedId:"guides/javascript/typescript-eslint",id:"guides/javascript/typescript-eslint",title:"typescript-eslint",description:"ESLint integration",source:"@site/docs/guides/javascript/typescript-eslint.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/typescript-eslint",permalink:"/docs/guides/javascript/typescript-eslint",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/typescript-eslint.mdx",tags:[],version:"current",frontMatter:{}},l={},p=[{value:"ESLint integration",id:"eslint-integration",level:2},{value:"Disabling problematic rules",id:"disabling-problematic-rules",level:3},{value:"Running from the command line",id:"running-from-the-command-line",level:3},{value:"Running within editors",id:"running-within-editors",level:3},{value:"ESLint",id:"eslint",level:4},{value:"Prettier",id:"prettier",level:4}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"eslint-integration"},"ESLint integration"),(0,i.kt)("h3",{id:"disabling-problematic-rules"},"Disabling problematic rules"),(0,i.kt)("p",null,"A handful of ESLint rules are not compatible with the TypeScript plugin, or they cause serious\nperformance degradation, and should be disabled entirely. According to the\n",(0,i.kt)("a",{parentName:"p",href:"https://typescript-eslint.io/docs/linting/troubleshooting#eslint-plugin-import"},"official typescript-eslint.io documentation"),",\nmost of these rules come from the ",(0,i.kt)("inlineCode",{parentName:"p"},"eslint-plugin-import")," plugin."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n // ...\n rules: {\n 'import/default': 'off',\n 'import/named': 'off',\n 'import/namespace': 'off',\n 'import/no-cycle': 'off',\n 'import/no-deprecated': 'off',\n 'import/no-named-as-default': 'off',\n 'import/no-named-as-default-member': 'off',\n 'import/no-unused-modules': 'off',\n },\n};\n")),(0,i.kt)("h3",{id:"running-from-the-command-line"},"Running from the command line"),(0,i.kt)("h3",{id:"running-within-editors"},"Running within editors"),(0,i.kt)("h4",{id:"eslint"},"ESLint"),(0,i.kt)("p",null,"Use the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"},"dbaeumer.vscode-eslint"),"\nextension. Too avoid poor performance, ",(0,i.kt)("em",{parentName:"p"},"do not")," use ESLint for formatting code (via the\n",(0,i.kt)("inlineCode",{parentName:"p"},"eslint-plugin-prettier")," plugin or something similar), and ",(0,i.kt)("em",{parentName:"p"},"only")," use it for linting. The difference\nin speed is comparable to 100ms vs 2000ms."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title=".vscode/settings.json"',title:'".vscode/settings.json"'},'{\n // Automatically run all linting fixes on save as a concurrent code action,\n // and avoid formatting with ESLint. Use another formatter, like Prettier.\n "editor.codeActionsOnSave": ["source.fixAll.eslint"],\n "eslint.format.enable": false,\n\n // If linting is *too slow* while typing, uncomment the following line to\n // only run the linter on save only.\n // "editor.run": "onSave",\n\n // Your package manager of choice.\n "eslint.packageManager": "yarn",\n\n // Use the newer and more performant `ESLint` class implementation.\n "eslint.useESLintClass": true,\n\n // List of directories that that linter should operate on.\n "eslint.workingDirectories": [{ "pattern": "apps/*" }, { "pattern": "packages/*" }]\n}\n')),(0,i.kt)("h4",{id:"prettier"},"Prettier"),(0,i.kt)("p",null,"Use the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"},"esbenp.prettier-vscode"),"\nextension."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title=".vscode/settings.json"',title:'".vscode/settings.json"'},'{\n // Use Prettier as the default formatter for all file types. Types not\n // supported by Prettier can be overriden using bracket syntax, or ignore files.\n "editor.defaultFormatter": "esbenp.prettier-vscode",\n "editor.formatOnSave": true\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6dd55018.cceda539.js b/assets/js/6dd55018.cceda539.js deleted file mode 100644 index ba4b4cb2fc2..00000000000 --- a/assets/js/6dd55018.cceda539.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5390],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),d=i,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var p=2;p<o;p++)a[p]=n[p];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},37116:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=n(25773),i=(n(27378),n(35318));const o={},a=void 0,s={unversionedId:"guides/javascript/typescript-eslint",id:"guides/javascript/typescript-eslint",title:"typescript-eslint",description:"ESLint integration",source:"@site/docs/guides/javascript/typescript-eslint.mdx",sourceDirName:"guides/javascript",slug:"/guides/javascript/typescript-eslint",permalink:"/docs/guides/javascript/typescript-eslint",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/javascript/typescript-eslint.mdx",tags:[],version:"current",frontMatter:{}},l={},p=[{value:"ESLint integration",id:"eslint-integration",level:2},{value:"Disabling problematic rules",id:"disabling-problematic-rules",level:3},{value:"Running from the command line",id:"running-from-the-command-line",level:3},{value:"Running within editors",id:"running-within-editors",level:3},{value:"ESLint",id:"eslint",level:4},{value:"Prettier",id:"prettier",level:4}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"eslint-integration"},"ESLint integration"),(0,i.kt)("h3",{id:"disabling-problematic-rules"},"Disabling problematic rules"),(0,i.kt)("p",null,"A handful of ESLint rules are not compatible with the TypeScript plugin, or they cause serious\nperformance degradation, and should be disabled entirely. According to the\n",(0,i.kt)("a",{parentName:"p",href:"https://typescript-eslint.io/docs/linting/troubleshooting#eslint-plugin-import"},"official typescript-eslint.io documentation"),",\nmost of these rules come from the ",(0,i.kt)("inlineCode",{parentName:"p"},"eslint-plugin-import")," plugin."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n // ...\n rules: {\n 'import/default': 'off',\n 'import/named': 'off',\n 'import/namespace': 'off',\n 'import/no-cycle': 'off',\n 'import/no-deprecated': 'off',\n 'import/no-named-as-default': 'off',\n 'import/no-named-as-default-member': 'off',\n 'import/no-unused-modules': 'off',\n },\n};\n")),(0,i.kt)("h3",{id:"running-from-the-command-line"},"Running from the command line"),(0,i.kt)("h3",{id:"running-within-editors"},"Running within editors"),(0,i.kt)("h4",{id:"eslint"},"ESLint"),(0,i.kt)("p",null,"Use the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"},"dbaeumer.vscode-eslint"),"\nextension. Too avoid poor performance, ",(0,i.kt)("em",{parentName:"p"},"do not")," use ESLint for formatting code (via the\n",(0,i.kt)("inlineCode",{parentName:"p"},"eslint-plugin-prettier")," plugin or something similar), and ",(0,i.kt)("em",{parentName:"p"},"only")," use it for linting. The difference\nin speed is comparable to 100ms vs 2000ms."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title=".vscode/settings.json"',title:'".vscode/settings.json"'},'{\n // Automatically run all linting fixes on save as a concurrent code action,\n // and avoid formatting with ESLint. Use another formatter, like Prettier.\n "editor.codeActionsOnSave": ["source.fixAll.eslint"],\n "eslint.format.enable": false,\n\n // If linting is *too slow* while typing, uncomment the following line to\n // only run the linter on save only.\n // "editor.run": "onSave",\n\n // Your package manager of choice.\n "eslint.packageManager": "yarn",\n\n // Use the newer and more performant `ESLint` class implementation.\n "eslint.useESLintClass": true,\n\n // List of directories that that linter should operate on.\n "eslint.workingDirectories": [{ "pattern": "apps/*" }, { "pattern": "packages/*" }]\n}\n')),(0,i.kt)("h4",{id:"prettier"},"Prettier"),(0,i.kt)("p",null,"Use the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"},"esbenp.prettier-vscode"),"\nextension."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title=".vscode/settings.json"',title:'".vscode/settings.json"'},'{\n // Use Prettier as the default formatter for all file types. Types not\n // supported by Prettier can be overriden using bracket syntax, or ignore files.\n "editor.defaultFormatter": "esbenp.prettier-vscode",\n "editor.formatOnSave": true\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6e15e01b.72c9a56e.js b/assets/js/6e15e01b.72c9a56e.js deleted file mode 100644 index 56e4ef43e3f..00000000000 --- a/assets/js/6e15e01b.72c9a56e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[216],{39073:e=>{e.exports=JSON.parse('{"label":"env-vars","permalink":"/blog/tags/env-vars","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/6e15e01b.e12cc10a.js b/assets/js/6e15e01b.e12cc10a.js new file mode 100644 index 00000000000..697f3478d6b --- /dev/null +++ b/assets/js/6e15e01b.e12cc10a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40216],{39073:e=>{e.exports=JSON.parse('{"label":"env-vars","permalink":"/blog/tags/env-vars","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/6ea8a316.1ada08b4.js b/assets/js/6ea8a316.1ada08b4.js new file mode 100644 index 00000000000..7c2a02fda0a --- /dev/null +++ b/assets/js/6ea8a316.1ada08b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85723],{18537:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/offline","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6ea8a316.f10b7939.js b/assets/js/6ea8a316.f10b7939.js deleted file mode 100644 index 72ad7b5ff1b..00000000000 --- a/assets/js/6ea8a316.f10b7939.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5723],{18537:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/offline","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6eae5b23.3d9df4f2.js b/assets/js/6eae5b23.3d9df4f2.js new file mode 100644 index 00000000000..6caf2479d6b --- /dev/null +++ b/assets/js/6eae5b23.3d9df4f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82687],{35318:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>d});var n=o(27378);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function l(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function c(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?l(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):l(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function a(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)o=l[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)o=l[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),o=t;return e&&(o="function"==typeof e?e(t):c(c({},t),e)),o},s=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=p(o),d=r,f=u["".concat(i,".").concat(d)]||u[d]||m[d]||l;return o?n.createElement(f,c(c({ref:t},s),{},{components:o})):n.createElement(f,c({ref:t},s))}));function d(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=o.length,c=new Array(l);c[0]=u;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:r,c[1]=a;for(var p=2;p<l;p++)c[p]=o[p];return n.createElement.apply(null,c)}return n.createElement.apply(null,o)}u.displayName="MDXCreateElement"},48387:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var n=o(25773),r=(o(27378),o(35318));const l={title:"completions"},c=void 0,a={unversionedId:"proto/commands/completions",id:"proto/commands/completions",title:"completions",description:"The proto completions command will generate proto command and argument completions for your",source:"@site/docs/proto/commands/completions.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/completions",permalink:"/docs/proto/commands/completions",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/completions.mdx",tags:[],version:"current",frontMatter:{title:"completions"},sidebar:"proto",previous:{title:"clean",permalink:"/docs/proto/commands/clean"},next:{title:"install",permalink:"/docs/proto/commands/install"}},i={},p=[{value:"Options",id:"options",level:3}],s={toc:p};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto completions")," command will generate proto command and argument completions for your\ncurrent shell. This command will write to stdout, which can then be redirected to a file of your\nchoice."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto completions > ~/.bash_completion.d/proto.sh\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--shell"),' - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or\n"zsh".')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6eae5b23.a2690693.js b/assets/js/6eae5b23.a2690693.js deleted file mode 100644 index b86cfa7d77a..00000000000 --- a/assets/js/6eae5b23.a2690693.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2687],{35318:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>d});var n=o(27378);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function l(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function c(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?l(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):l(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function a(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)o=l[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)o=l[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),o=t;return e&&(o="function"==typeof e?e(t):c(c({},t),e)),o},s=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=p(o),d=r,f=u["".concat(i,".").concat(d)]||u[d]||m[d]||l;return o?n.createElement(f,c(c({ref:t},s),{},{components:o})):n.createElement(f,c({ref:t},s))}));function d(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=o.length,c=new Array(l);c[0]=u;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:r,c[1]=a;for(var p=2;p<l;p++)c[p]=o[p];return n.createElement.apply(null,c)}return n.createElement.apply(null,o)}u.displayName="MDXCreateElement"},48387:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var n=o(25773),r=(o(27378),o(35318));const l={title:"completions"},c=void 0,a={unversionedId:"proto/commands/completions",id:"proto/commands/completions",title:"completions",description:"The proto completions command will generate proto command and argument completions for your",source:"@site/docs/proto/commands/completions.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/completions",permalink:"/docs/proto/commands/completions",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/completions.mdx",tags:[],version:"current",frontMatter:{title:"completions"},sidebar:"proto",previous:{title:"clean",permalink:"/docs/proto/commands/clean"},next:{title:"install",permalink:"/docs/proto/commands/install"}},i={},p=[{value:"Options",id:"options",level:3}],s={toc:p};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto completions")," command will generate proto command and argument completions for your\ncurrent shell. This command will write to stdout, which can then be redirected to a file of your\nchoice."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto completions > ~/.bash_completion.d/proto.sh\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--shell"),' - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or\n"zsh".')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6fe6957f.8e85147c.js b/assets/js/6fe6957f.8e85147c.js deleted file mode 100644 index 737e0f634dc..00000000000 --- a/assets/js/6fe6957f.8e85147c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7465],{88057:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/editors","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6fe6957f.bdb02167.js b/assets/js/6fe6957f.bdb02167.js new file mode 100644 index 00000000000..51893028bc2 --- /dev/null +++ b/assets/js/6fe6957f.bdb02167.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77465],{88057:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/editors","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/71947.12a59fad.js b/assets/js/71947.12a59fad.js new file mode 100644 index 00000000000..d63e38d68a7 --- /dev/null +++ b/assets/js/71947.12a59fad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[71947],{55228:(e,t,a)=>{a.d(t,{Z:()=>N});var l=a(27378),n=a(37140),r=a(64654),o=a(58357),s=a(81884),c=a(99213);const i="sidebar_CLW8",m="sidebarItemTitle_DQfJ",u="sidebarItemList_rvuc",d="sidebarItem__RMN",g="sidebarItemLink_Ony9",p="sidebarItemLinkActive_MJ75";function h(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(i,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(m,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(u,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:d},l.createElement(s.default,{isNavLink:!0,to:e.permalink,className:g,activeClassName:p},e.title)))))))}var E=a(63471);function f(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.default,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function b(e){return l.createElement(E.Zo,{component:f,props:e})}function v(e){let{sidebar:t}=e;const a=(0,o.i)();return t?.items.length?"mobile"===a?l.createElement(b,{sidebar:t}):l.createElement(h,{sidebar:t}):null}function N(e){const{sidebar:t,toc:a,children:o,...s}=e,c=t&&t.items.length>0;return l.createElement(r.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(v,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),itemScope:!0,itemType:"http://schema.org/Blog"},o),a&&l.createElement("div",{className:"col col--2"},a))))}},25532:(e,t,a)=>{a.d(t,{Z:()=>R});var l=a(27378),n=a(37140),r=a(70412),o=a(98948);function s(e){let{children:t,className:a}=e;const{frontMatter:n,assets:s,metadata:{description:c}}=(0,r.C)(),{withBaseUrl:i}=(0,o.C)(),m=s.image??n.image,u=n.keywords??[];return l.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},c&&l.createElement("meta",{itemProp:"description",content:c}),m&&l.createElement("link",{itemProp:"image",href:i(m,{absolute:!0})}),u.length>0&&l.createElement("meta",{itemProp:"keywords",content:u.join(",")}),t)}var c=a(81884);const i="title_Kdtz";function m(e){let{className:t}=e;const{metadata:a,isBlogPostPage:o}=(0,r.C)(),{permalink:s,title:m}=a,u=o?"h1":"h2";return l.createElement(u,{className:(0,n.Z)(i,t),itemProp:"headline"},o?m:l.createElement(c.default,{itemProp:"url",to:s},m))}var u=a(99213),d=a(40689);const g="container_iZB2";function p(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,d.c)();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return l.createElement(l.Fragment,null,a(t))}function h(e){let{date:t,formattedDate:a}=e;return l.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function E(){return l.createElement(l.Fragment,null," \xb7 ")}function f(e){let{className:t}=e;const{metadata:a}=(0,r.C)(),{date:o,formattedDate:s,readingTime:c}=a;return l.createElement("div",{className:(0,n.Z)(g,"margin-vert--md",t)},l.createElement(h,{date:o,formattedDate:s}),void 0!==c&&l.createElement(l.Fragment,null,l.createElement(E,null),l.createElement(p,{readingTime:c})))}function b(e){return e.href?l.createElement(c.default,e):l.createElement(l.Fragment,null,e.children)}function v(e){let{author:t,className:a}=e;const{name:r,title:o,url:s,imageURL:c,email:i}=t,m=s||i&&`mailto:${i}`||void 0;return l.createElement("div",{className:(0,n.Z)("avatar margin-bottom--sm",a)},c&&l.createElement(b,{href:m,className:"avatar__photo-link"},l.createElement("img",{className:"avatar__photo",src:c,alt:r,itemProp:"image"})),r&&l.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},l.createElement("div",{className:"avatar__name"},l.createElement(b,{href:m,itemProp:"url"},l.createElement("span",{itemProp:"name"},r))),o&&l.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const N="authorCol_v1VX",P="imageOnlyAuthorRow_RxZ1",_="imageOnlyAuthorCol_iWtj";function k(e){let{className:t}=e;const{metadata:{authors:a},assets:o}=(0,r.C)();if(0===a.length)return null;const s=a.every((e=>{let{name:t}=e;return!t}));return l.createElement("div",{className:(0,n.Z)("margin-top--md margin-bottom--sm",s?P:"row",t)},a.map(((e,t)=>l.createElement("div",{className:(0,n.Z)(!s&&"col col--6",s?_:N),key:t},l.createElement(v,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})))))}function Z(){return l.createElement("header",null,l.createElement(m,null),l.createElement(f,null),l.createElement(k,null))}var w=a(51721),T=a(40450);function C(e){let{children:t,className:a}=e;const{isBlogPostPage:o}=(0,r.C)();return l.createElement("div",{id:o?w.blogPostContainerID:void 0,className:(0,n.Z)("markdown",a),itemProp:"articleBody"},l.createElement(T.default,null,t))}var y=a(34565),B=a(28349),F=a(25773);function M(){return l.createElement("b",null,l.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function I(e){const{blogPostTitle:t,...a}=e;return l.createElement(c.default,(0,F.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),l.createElement(M,null))}const L="blogPostFooterDetailsFull_JgJa";function x(){const{metadata:e,isBlogPostPage:t}=(0,r.C)(),{tags:a,title:o,editUrl:s,hasTruncateMarker:c}=e,i=!t&&c,m=a.length>0;return m||i||s?l.createElement("footer",{className:(0,n.Z)("row docusaurus-mt-lg",t&&L)},m&&l.createElement("div",{className:(0,n.Z)("col",{"col--9":i})},l.createElement(B.Z,{tags:a})),t&&s&&l.createElement("div",{className:"col margin-top--sm"},l.createElement(y.Z,{editUrl:s})),i&&l.createElement("div",{className:(0,n.Z)("col text--right",{"col--3":m})},l.createElement(I,{blogPostTitle:o,to:e.permalink}))):null}function R(e){let{children:t,className:a}=e;const o=function(){const{isBlogPostPage:e}=(0,r.C)();return e?void 0:"margin-bottom--xl"}();return l.createElement(s,{className:(0,n.Z)(o,a)},l.createElement(Z,null),l.createElement(C,null,t),l.createElement(x,null))}},34565:(e,t,a)=>{a.d(t,{Z:()=>m});var l=a(27378),n=a(99213),r=a(75484),o=a(25773),s=a(37140);const c="iconEdit_bHB7";function i(e){let{className:t,...a}=e;return l.createElement("svg",(0,o.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(c,t),"aria-hidden":"true"},a),l.createElement("g",null,l.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function m(e){let{editUrl:t}=e;return l.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},l.createElement(i,null),l.createElement(n.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},40450:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var l=a(27378),n=a(35318),r=a(36256);function o(e){let{children:t}=e;return l.createElement(n.Zo,{components:r.default},t)}},51478:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(27378),n=a(37140),r=a(81884);const o="tag_otG2",s="tagRegular_s0E1",c="tagWithCount_PGyn";function i(e){let{permalink:t,label:a,count:i}=e;return l.createElement(r.default,{href:t,className:(0,n.Z)(o,i?c:s)},a,i&&l.createElement("span",null,i))}},28349:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(27378),n=a(37140),r=a(99213),o=a(51478);const s="tags_Ow0B",c="tag_DFxh";function i(e){let{tags:t}=e;return l.createElement(l.Fragment,null,l.createElement("b",null,l.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),l.createElement("ul",{className:(0,n.Z)(s,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:a}=e;return l.createElement("li",{key:a,className:c},l.createElement(o.Z,{label:t,permalink:a}))}))))}},70412:(e,t,a)=>{a.d(t,{C:()=>s,n:()=>o});var l=a(27378),n=a(41763);const r=l.createContext(null);function o(e){let{children:t,content:a,isBlogPostPage:n=!1}=e;const o=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:n});return l.createElement(r.Provider,{value:o},t)}function s(){const e=(0,l.useContext)(r);if(null===e)throw new n.i6("BlogPostProvider");return e}},40689:(e,t,a)=>{a.d(t,{c:()=>i});var l=a(27378),n=a(50353);const r=["zero","one","two","few","many","other"];function o(e){return r.filter((t=>e.includes(t)))}const s={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,n.default)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),s}}),[e])}function i(){const e=c();return{selectMessage:(t,a)=>function(e,t,a){const l=e.split("|");if(1===l.length)return l[0];l.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);const n=a.select(t),r=a.pluralForms.indexOf(n);return l[Math.min(r,l.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/71dfd0a8.ae8ea995.js b/assets/js/71dfd0a8.ae8ea995.js new file mode 100644 index 00000000000..f8a2b0d9fd5 --- /dev/null +++ b/assets/js/71dfd0a8.ae8ea995.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23615],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,u=d["".concat(s,".").concat(m)]||d[m]||h[m]||r;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},19634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},i=void 0,l={permalink:"/blog/moon-v1.11",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx",source:"@site/blog/2023-07-31_moon-v1.11.mdx",title:"moon v1.11 - Next-generation project graph",description:"With this release, we've focused heavily on rewriting our project graph for the next-generation of",date:"2023-07-31T00:00:00.000Z",formattedDate:"July 31, 2023",tags:[{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"project",permalink:"/blog/tags/project"}],readingTime:4.095,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},prevItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"},nextItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"}},s={image:n(21984).Z,authorsImageUrls:[void 0]},p=[{value:"New project graph",id:"new-project-graph",level:2},{value:"Old implementation",id:"old-implementation",level:3},{value:"New implementation",id:"new-implementation",level:3},{value:"Unlocked features",id:"unlocked-features",level:3},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function h(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've focused heavily on rewriting our project graph for the next-generation of\nmoon."),(0,o.kt)("h2",{id:"new-project-graph"},"New project graph"),(0,o.kt)("p",null,"One of the first features that was built for moon was the project graph, as this was required to\ndetermine relationships between tasks and projects. Its initial implementation was rather simple, as\nit was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project\ngraph, and overtime, it has accrued a lot of cruft and technical debt."),(0,o.kt)("p",null,"One of the biggest pain points has been the project graph cache, and correctly invalidating the\ncache for all necessary scenarios. If you've been using moon for a long time, you're probably aware\nof all the hot fixes and patches that have been released. Another problem with the cache, is that it\nincluded hard-coded ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/937"},"file system paths")," and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/896"},"environment variables"),", both of which would not\ninvalidate the cache when changed."),(0,o.kt)("p",null,"We felt it was time to rebuild the project graph from the ground up. Some of this work has already\nlanded in ",(0,o.kt)("a",{parentName:"p",href:"./moon-v1.9#rewritten-task-inheritance"},"previous releases"),"."),(0,o.kt)("h3",{id:"old-implementation"},"Old implementation"),(0,o.kt)("p",null,"For those of you who are interested in the technical details, here's a quick overview of how the old\nproject graph worked. To start, the graph was composed around the following phases:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Build")," - Projects are loaded into the graph (nodes), relationships are linked (edges),\nconfigurations are read, tasks are inherited, and platform/language rules are applied."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Expand")," - In all tasks, token variables and functions are expanded/substituted, dependencies\nare expanded (",(0,o.kt)("inlineCode",{parentName:"li"},"^:deps"),", etc), ",(0,o.kt)("inlineCode",{parentName:"li"},".env")," files are read (when applicable), so on and so forth."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Validate")," - Enforces project and task boundaries and constraints.")),(0,o.kt)("p",null,"This is quite a lot of work, and it was all done in ",(0,o.kt)("em",{parentName:"p"},"a single pass"),". What this means is that for\neach project loaded into the graph, we would recursively build -> expand -> validate, until all\nprojects have been loaded, synchronously at once in the same thread. Because this is a rather\nexpensive operation, the project graph cache was introduced to avoid having to do this work on every\nrun."),(0,o.kt)("p",null,"Makes sense, right? For the most part yes, but there is a core problem with the solution above, and\nif you've noticed it already, amazing! The problem is that out of these 3 phases, only the build\nphase is truly cacheable, as the expand and validate phases are far too dynamic and dependent on the\nenvironment. This means that the cache is only partially effective, and in some cases, entirely\nbroken."),(0,o.kt)("p",null,"Another unrelated problem with this solution, is that because everything is built in a single pass,\nadvanced functionality that requires multiple passes is not possible and has been stuck on the\nbacklog."),(0,o.kt)("h3",{id:"new-implementation"},"New implementation"),(0,o.kt)("p",null,"For backwards compatibility, the new project graph works in a similar manner, but has none of the\nshortcomings of the old implementation (hopefully). To start, the new project graph still has the\nsame 3 phases, but they are ",(0,o.kt)("em",{parentName:"p"},"no longer processed in a single pass"),", instead..."),(0,o.kt)("p",null,"The build phase is now asynchronous, enabling deeper interoperability with the rest of the\nasync-aware codebase. However, the critical change is that the project graph cache is now written\n",(0,o.kt)("em",{parentName:"p"},"after")," the build phase (and read ",(0,o.kt)("em",{parentName:"p"},"before"),"), instead of after the entire graph being generated."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The new cache file is ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/cache/states/partialProjectGraph.json"),", and is named partial because\ntasks have not been expanded. Use ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project-graph --json")," for a fully expanded graph.")),(0,o.kt)("p",null,"The expand phase has changed quite a bit. Instead of expanding everything at once, projects and\ntasks are only expanded when they are needed. For example, if only running a single target, we'll\nnow only expand that project and task, instead of ",(0,o.kt)("em",{parentName:"p"},"everything")," in the graph. With this change, you\nshould potentially see performance increases, unless you're using ",(0,o.kt)("inlineCode",{parentName:"p"},"moon ci")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon check --all"),"."),(0,o.kt)("p",null,"And lastly, validation is still the same, but has been reworked so that we can easily extend it with\nmore validation rules in the future."),(0,o.kt)("h3",{id:"unlocked-features"},"Unlocked features"),(0,o.kt)("p",null,"With these changes to building and expanding, we've unlocked a few new features that were not\npossible before."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Task dependencies can now reference tag based targets. For example, say we want to build all React\nprojects before starting our application.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'next dev'\n deps:\n - '#react:build'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Task commands and arguments will now substitute environment variables, by first checking ",(0,o.kt)("inlineCode",{parentName:"li"},"env"),",\nthen those from the system.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n command: 'docker build --build-arg pkg=$PKG_NAME'\n env:\n PKG_NAME: 'foo-bar'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Project dependencies can now mark relationships as ",(0,o.kt)("inlineCode",{parentName:"li"},"build"),". This is only applicable for languages\nthat support build dependencies, like Rust.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - id: 'foo'\n scope: 'build'\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.11.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Identifiers (project names, file groups, etc) can now be prefixed with underscores (",(0,o.kt)("inlineCode",{parentName:"li"},"_"),")."),(0,o.kt)("li",{parentName:"ul"},"Added Poetry detection support for Python projects."),(0,o.kt)("li",{parentName:"ul"},"Added an ",(0,o.kt)("inlineCode",{parentName:"li"},"experiments")," setting to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),".")))}h.isMDXComponent=!0},21984:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.11-8730d5c4531586c014cef4253f41baa2.png"}}]); \ No newline at end of file diff --git a/assets/js/71dfd0a8.e7e3fae3.js b/assets/js/71dfd0a8.e7e3fae3.js deleted file mode 100644 index a6545387fbf..00000000000 --- a/assets/js/71dfd0a8.e7e3fae3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3615],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,u=d["".concat(s,".").concat(m)]||d[m]||h[m]||r;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},19634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},i=void 0,l={permalink:"/blog/moon-v1.11",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx",source:"@site/blog/2023-07-31_moon-v1.11.mdx",title:"moon v1.11 - Next-generation project graph",description:"With this release, we've focused heavily on rewriting our project graph for the next-generation of",date:"2023-07-31T00:00:00.000Z",formattedDate:"July 31, 2023",tags:[{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"project",permalink:"/blog/tags/project"}],readingTime:4.095,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.11",title:"moon v1.11 - Next-generation project graph",authors:["milesj"],tags:["project-graph","project"],image:"./img/moon/v1.11.png"},prevItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"},nextItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"}},s={image:n(21984).Z,authorsImageUrls:[void 0]},p=[{value:"New project graph",id:"new-project-graph",level:2},{value:"Old implementation",id:"old-implementation",level:3},{value:"New implementation",id:"new-implementation",level:3},{value:"Unlocked features",id:"unlocked-features",level:3},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function h(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've focused heavily on rewriting our project graph for the next-generation of\nmoon."),(0,o.kt)("h2",{id:"new-project-graph"},"New project graph"),(0,o.kt)("p",null,"One of the first features that was built for moon was the project graph, as this was required to\ndetermine relationships between tasks and projects. Its initial implementation was rather simple, as\nit was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project\ngraph, and overtime, it has accrued a lot of cruft and technical debt."),(0,o.kt)("p",null,"One of the biggest pain points has been the project graph cache, and correctly invalidating the\ncache for all necessary scenarios. If you've been using moon for a long time, you're probably aware\nof all the hot fixes and patches that have been released. Another problem with the cache, is that it\nincluded hard-coded ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/937"},"file system paths")," and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/896"},"environment variables"),", both of which would not\ninvalidate the cache when changed."),(0,o.kt)("p",null,"We felt it was time to rebuild the project graph from the ground up. Some of this work has already\nlanded in ",(0,o.kt)("a",{parentName:"p",href:"./moon-v1.9#rewritten-task-inheritance"},"previous releases"),"."),(0,o.kt)("h3",{id:"old-implementation"},"Old implementation"),(0,o.kt)("p",null,"For those of you who are interested in the technical details, here's a quick overview of how the old\nproject graph worked. To start, the graph was composed around the following phases:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Build")," - Projects are loaded into the graph (nodes), relationships are linked (edges),\nconfigurations are read, tasks are inherited, and platform/language rules are applied."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Expand")," - In all tasks, token variables and functions are expanded/substituted, dependencies\nare expanded (",(0,o.kt)("inlineCode",{parentName:"li"},"^:deps"),", etc), ",(0,o.kt)("inlineCode",{parentName:"li"},".env")," files are read (when applicable), so on and so forth."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Validate")," - Enforces project and task boundaries and constraints.")),(0,o.kt)("p",null,"This is quite a lot of work, and it was all done in ",(0,o.kt)("em",{parentName:"p"},"a single pass"),". What this means is that for\neach project loaded into the graph, we would recursively build -> expand -> validate, until all\nprojects have been loaded, synchronously at once in the same thread. Because this is a rather\nexpensive operation, the project graph cache was introduced to avoid having to do this work on every\nrun."),(0,o.kt)("p",null,"Makes sense, right? For the most part yes, but there is a core problem with the solution above, and\nif you've noticed it already, amazing! The problem is that out of these 3 phases, only the build\nphase is truly cacheable, as the expand and validate phases are far too dynamic and dependent on the\nenvironment. This means that the cache is only partially effective, and in some cases, entirely\nbroken."),(0,o.kt)("p",null,"Another unrelated problem with this solution, is that because everything is built in a single pass,\nadvanced functionality that requires multiple passes is not possible and has been stuck on the\nbacklog."),(0,o.kt)("h3",{id:"new-implementation"},"New implementation"),(0,o.kt)("p",null,"For backwards compatibility, the new project graph works in a similar manner, but has none of the\nshortcomings of the old implementation (hopefully). To start, the new project graph still has the\nsame 3 phases, but they are ",(0,o.kt)("em",{parentName:"p"},"no longer processed in a single pass"),", instead..."),(0,o.kt)("p",null,"The build phase is now asynchronous, enabling deeper interoperability with the rest of the\nasync-aware codebase. However, the critical change is that the project graph cache is now written\n",(0,o.kt)("em",{parentName:"p"},"after")," the build phase (and read ",(0,o.kt)("em",{parentName:"p"},"before"),"), instead of after the entire graph being generated."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The new cache file is ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/cache/states/partialProjectGraph.json"),", and is named partial because\ntasks have not been expanded. Use ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project-graph --json")," for a fully expanded graph.")),(0,o.kt)("p",null,"The expand phase has changed quite a bit. Instead of expanding everything at once, projects and\ntasks are only expanded when they are needed. For example, if only running a single target, we'll\nnow only expand that project and task, instead of ",(0,o.kt)("em",{parentName:"p"},"everything")," in the graph. With this change, you\nshould potentially see performance increases, unless you're using ",(0,o.kt)("inlineCode",{parentName:"p"},"moon ci")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon check --all"),"."),(0,o.kt)("p",null,"And lastly, validation is still the same, but has been reworked so that we can easily extend it with\nmore validation rules in the future."),(0,o.kt)("h3",{id:"unlocked-features"},"Unlocked features"),(0,o.kt)("p",null,"With these changes to building and expanding, we've unlocked a few new features that were not\npossible before."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Task dependencies can now reference tag based targets. For example, say we want to build all React\nprojects before starting our application.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'next dev'\n deps:\n - '#react:build'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Task commands and arguments will now substitute environment variables, by first checking ",(0,o.kt)("inlineCode",{parentName:"li"},"env"),",\nthen those from the system.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n command: 'docker build --build-arg pkg=$PKG_NAME'\n env:\n PKG_NAME: 'foo-bar'\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Project dependencies can now mark relationships as ",(0,o.kt)("inlineCode",{parentName:"li"},"build"),". This is only applicable for languages\nthat support build dependencies, like Rust.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - id: 'foo'\n scope: 'build'\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.11.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Identifiers (project names, file groups, etc) can now be prefixed with underscores (",(0,o.kt)("inlineCode",{parentName:"li"},"_"),")."),(0,o.kt)("li",{parentName:"ul"},"Added Poetry detection support for Python projects."),(0,o.kt)("li",{parentName:"ul"},"Added an ",(0,o.kt)("inlineCode",{parentName:"li"},"experiments")," setting to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml"),".")))}h.isMDXComponent=!0},21984:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.11-8730d5c4531586c014cef4253f41baa2.png"}}]); \ No newline at end of file diff --git a/assets/js/722146fe.4d803d8f.js b/assets/js/722146fe.4d803d8f.js deleted file mode 100644 index ef4387897d5..00000000000 --- a/assets/js/722146fe.4d803d8f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[722],{97160:s=>{s.exports=JSON.parse('{"label":"solid","permalink":"/docs/tags/solid","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","permalink":"/docs/guides/examples/solid"}]}')}}]); \ No newline at end of file diff --git a/assets/js/722146fe.aeee5532.js b/assets/js/722146fe.aeee5532.js new file mode 100644 index 00000000000..3de47bb80c9 --- /dev/null +++ b/assets/js/722146fe.aeee5532.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10722],{97160:s=>{s.exports=JSON.parse('{"label":"solid","permalink":"/docs/tags/solid","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","permalink":"/docs/guides/examples/solid"}]}')}}]); \ No newline at end of file diff --git a/assets/js/7279.22e8b3f8.js b/assets/js/7279.22e8b3f8.js deleted file mode 100644 index 3e53965eaf0..00000000000 --- a/assets/js/7279.22e8b3f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7279],{99746:(e,t,u)=>{const n=u(27378).createContext({options:{banner:"",breadcrumbs:!0,gitRefName:"master",minimal:!1,pluginId:"default",scopes:[]},reflections:{}});t.ApiDataContext=n},97279:(e,t,u)=>{function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var u=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=u){var n,r,i,s,a=[],l=!0,o=!1;try{if(i=(u=u.call(e)).next,0===t){if(Object(u)!==u)return;l=!1}else for(;!(l=(n=i.call(u)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(D){o=!0,r=D}finally{try{if(!l&&null!=u.return&&(s=u.return(),Object(s)!==s))return}finally{if(o)throw r}}return a}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var u=Object.prototype.toString.call(e).slice(8,-1);"Object"===u&&e.constructor&&(u=e.constructor.name);if("Map"===u||"Set"===u)return Array.from(e);if("Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return r(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}const i=u(27378),s=u(18335),a=u(12700),l=u(36256),o=u(51165),D=u(603),c=e=>e&&e.__esModule?e:{default:e},h=c(i),p=c(l);s.marked.setOptions({gfm:!0,headerIds:!1,mangle:!1,smartLists:!0,smartypants:!0});const f=/^:{3}([a-z]+)? *(.*)\n/;s.marked.use({extensions:[{name:"admonition",level:"block",start:e=>e.match(f)?.index,tokenizer(e,t){const u=f.exec(e);if(u){const t=u[1]??"info",n=u[2]?u[2].trim():void 0,r=u.index,i=r+u[0].length,s=e.indexOf("\n:::",i),a=s+4,l={type:"admonition",raw:e.slice(r,a),text:e.slice(i,s),title:n,keyword:t,tokens:[]};return this.lexer.blockTokens(l.text,l.tokens),l}}}]});const g={blockquote:"blockquote",br:"br",code:"pre",codespan:"code",def:"span",del:"del",em:"em",escape:"span",hr:"hr",html:"div",paragraph:"p",strong:"strong",table:"table",tablecell:"td",tablerow:"tr"};function d(e){const t=[];let u=0;if(e.forEach((e=>{const n=e.tokens??[];switch(e.type){case"code":t.push(h.default.createElement(p.default.pre,{key:u,className:e.lang&&`language-${e.lang}`},e.text));break;case"codespan":t.push(h.default.createElement(p.default.code,{key:u},e.raw.slice(1,-1)));break;case"heading":{const r=p.default[`h${e.depth}`];t.push(h.default.createElement(r,{key:u},d(n)??e.text));break}case"image":t.push(h.default.createElement(p.default.img,{key:u,alt:e.title,src:e.href}));break;case"link":t.push(h.default.createElement(p.default.a,{key:u,href:e.href,title:e.title},d(n)??e.text));break;case"list":{const r=e.ordered?"ol":"ul";t.push(h.default.createElement(r,{key:u},d(e.items??n)));break}case"list_item":t.push(h.default.createElement("li",{key:u},e.task&&h.default.createElement(h.default.Fragment,null,h.default.createElement("input",{checked:e.checked,type:"checkbox"})," "),d(n)??e.text));break;case"space":t.push(e.raw||" ");break;case"table":t.push(h.default.createElement("table",{key:u},h.default.createElement("thead",null,h.default.createElement("tr",null,e.header.map(((t,u)=>h.default.createElement("th",{key:u,align:e.align[u]},d(t.tokens)))))),h.default.createElement("tbody",null,e.rows.map(((t,u)=>h.default.createElement("tr",{key:u},t.map(((t,n)=>h.default.createElement("td",{key:n,align:e.align[u]},d(t.tokens))))))))));break;case"text":t.push(0===n.length?e.text:h.default.createElement(h.default.Fragment,{key:u},d(n)));break;case"admonition":t.push(h.default.createElement(p.default.admonition,{key:u,title:e.title,type:e.keyword},d(n)??e.text));break;default:{const r=g[e.type]||e.type,i="text"in e?e.text:"";t.push(h.default.createElement(r,{key:u},d(n)??i));break}}u+=1})),0!==t.length)return t}t.Markdown=function(e){let{content:t}=e;const u=o.useReflectionMap(),r=a.useDocsVersion(),l=n(i.useState((()=>s.marked.lexer(D.replaceLinkTokens(t,u,r)))),1)[0];return t?h.default.createElement("div",{className:"tsd-markdown markdown"},d(l)):null}},51165:(e,t,u)=>{const n=u(27378),r=u(99746);t.useReflectionMap=function(){return n.useContext(r.ApiDataContext).reflections}},603:(e,t)=>{function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var u=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=u){var n,r,i,s,a=[],l=!0,o=!1;try{if(i=(u=u.call(e)).next,0===t){if(Object(u)!==u)return;l=!1}else for(;!(l=(n=i.call(u)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(D){o=!0,r=D}finally{try{if(!l&&null!=u.return&&(s=u.return(),Object(s)!==s))return}finally{if(o)throw r}}return a}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var u=Object.prototype.toString.call(e).slice(8,-1);"Object"===u&&e.constructor&&(u=e.constructor.name);if("Map"===u||"Set"===u)return Array.from(e);if("Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}function r(e){let t=e.indexOf("|");return-1===t&&(t=e.search(/\s/)),-1!==t?{caption:e.slice(t+1).replace(/\n+/," ").trim(),target:e.slice(0,Math.max(0,t)).trim()}:{caption:e,target:e}}function i(e){return(t,n,i)=>{const s=r(i),a=s.caption,l=u(s.target.split("."),2),o=l[0],D=l[1],c=function(e,t,u){return Object.values(e).find((e=>e.name===t&&(!u||e.children?.some((e=>e.name===u)))))}(e,o,D),h="linkcode"===n?`\`${a}\``:a;return c?.permalink?`[${h}](${c.permalink}${D?`#${D}`:""})`:h}}t.replaceLinkTokens=function(e,t,u){return e.replace(/{@(link|linkcode|linkplain|apilink)\s+([^}]+?)}/gi,i(t)).replace(/{@doclink\s+([^}]+?)}/gi,function(e){return(t,u)=>{const n=r(u),i=n.caption,s=n.target,a="current"===e.version?"next":e.version;return`[${i}](${e.isLast?`/docs/${s}`:`/docs/${a}/${s}`})`}}(u))}},18335:(e,t)=>{function u(e,t){for(var u=0;u<t.length;u++){var n=t[u];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,(r=n.key,i=void 0,"symbol"==typeof(i=function(e,t){if("object"!=typeof e||null===e)return e;var u=e[Symbol.toPrimitive];if(void 0!==u){var n=u.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(r,"string"))?i:String(i)),n)}var r,i}function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var u=arguments[t];for(var n in u)Object.prototype.hasOwnProperty.call(u,n)&&(e[n]=u[n])}return e},n.apply(this,arguments)}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}function i(e,t){var u="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(u)return(u=u.call(e)).next.bind(u);if(Array.isArray(e)||(u=function(e,t){if(e){if("string"==typeof e)return r(e,t);var u=Object.prototype.toString.call(e).slice(8,-1);return"Object"===u&&e.constructor&&(u=e.constructor.name),"Map"===u||"Set"===u?Array.from(e):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?r(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){u&&(e=u);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}t.defaults={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};var a=/[&<>"']/,l=new RegExp(a.source,"g"),o=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,D=new RegExp(o.source,"g"),c={"&":"&","<":"<",">":">",'"':""","'":"'"},h=function(e){return c[e]};function p(e,t){if(t){if(a.test(e))return e.replace(l,h)}else if(o.test(e))return e.replace(D,h);return e}var f=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function g(e){return e.replace(f,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var d=/(^|[^\[])\^/g;function F(e,t){e="string"==typeof e?e:e.source,t=t||"";var u={replace:function(t,n){return n=(n=n.source||n).replace(d,"$1"),e=e.replace(t,n),u},getRegex:function(){return new RegExp(e,t)}};return u}var k=/[^\w:]/g,A=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function E(e,t,u){if(e){var n;try{n=decodeURIComponent(g(u)).replace(k,"").toLowerCase()}catch(r){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}t&&!A.test(u)&&(u=function(e,t){C[" "+e]||(m.test(e)?C[" "+e]=e+"/":C[" "+e]=v(e,"/",!0));var u=-1===(e=C[" "+e]).indexOf(":");return"//"===t.substring(0,2)?u?t:e.replace(x,"$1")+t:"/"===t.charAt(0)?u?t:e.replace(b,"$1")+t:e+t}(t,u));try{u=encodeURI(u).replace(/%25/g,"%")}catch(r){return null}return u}var C={},m=/^[^:]+:\/*[^/]*$/,x=/^([^:]+:)[\s\S]*$/,b=/^([^:]+:\/*[^/]*)[\s\S]*$/;var B={exec:function(){}};function w(e,t){var u=e.replace(/\|/g,(function(e,t,u){for(var n=!1,r=t;--r>=0&&"\\"===u[r];)n=!n;return n?"|":" |"})).split(/ \|/),n=0;if(u[0].trim()||u.shift(),u.length>0&&!u[u.length-1].trim()&&u.pop(),u.length>t)u.splice(t);else for(;u.length<t;)u.push("");for(;n<u.length;n++)u[n]=u[n].trim().replace(/\\\|/g,"|");return u}function v(e,t,u){var n=e.length;if(0===n)return"";for(var r=0;r<n;){var i=e.charAt(n-r-1);if(i!==t||u){if(i===t||!u)break;r++}else r++}return e.slice(0,n-r)}function y(e,t){if(t<1)return"";for(var u="";t>1;)1&t&&(u+=e),t>>=1,e+=e;return u+e}function _(e,t,u,n){var r=t.href,i=t.title?p(t.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){n.state.inLink=!0;var a={type:"link",raw:u,href:r,title:i,text:s,tokens:n.inlineTokens(s)};return n.state.inLink=!1,a}return{type:"image",raw:u,href:r,title:i,text:p(s)}}var z=function(){function e(e){this.options=e||t.defaults}var u=e.prototype;return u.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}},u.code=function(e){var t=this.rules.block.code.exec(e);if(t){var u=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?u:v(u,"\n")}}},u.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var u=t[0],n=function(e,t){var u=e.match(/^(\s+)(?:```)/);if(null===u)return t;var n=u[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=n.length?e.slice(n.length):e})).join("\n")}(u,t[3]||"");return{type:"code",raw:u,lang:t[2]?t[2].trim().replace(this.rules.inline._escapes,"$1"):t[2],text:n}}},u.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var u=t[2].trim();if(/#$/.test(u)){var n=v(u,"#");this.options.pedantic?u=n.trim():n&&!/ $/.test(n)||(u=n.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:u,tokens:this.lexer.inline(u)}}},u.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},u.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var u=t[0].replace(/^ *>[ \t]?/gm,""),n=this.lexer.state.top;this.lexer.state.top=!0;var r=this.lexer.blockTokens(u);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:r,text:u}}},u.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,a,l,o,D,c,h,p,f=t[1].trim(),g=f.length>1,d={type:"list",raw:"",ordered:g,start:g?+f.slice(0,-1):"",loose:!1,items:[]};f=g?"\\d{1,9}\\"+f.slice(-1):"\\"+f,this.options.pedantic&&(f=g?f:"[*+-]");for(var F=new RegExp("^( {0,3}"+f+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(p=!1,t=F.exec(e))&&!this.rules.block.hr.test(e);){if(u=t[0],e=e.substring(u.length),o=t[2].split("\n",1)[0].replace(/^\t+/,(function(e){return" ".repeat(3*e.length)})),D=e.split("\n",1)[0],this.options.pedantic?(i=2,h=o.trimLeft()):(i=(i=t[2].search(/[^ ]/))>4?1:i,h=o.slice(i),i+=t[1].length),a=!1,!o&&/^ *$/.test(D)&&(u+=D+"\n",e=e.substring(D.length+1),p=!0),!p)for(var k=new RegExp("^ {0,"+Math.min(3,i-1)+"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))"),A=new RegExp("^ {0,"+Math.min(3,i-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),E=new RegExp("^ {0,"+Math.min(3,i-1)+"}(?:```|~~~)"),C=new RegExp("^ {0,"+Math.min(3,i-1)+"}#");e&&(D=c=e.split("\n",1)[0],this.options.pedantic&&(D=D.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!E.test(D))&&!C.test(D)&&!k.test(D)&&!A.test(e);){if(D.search(/[^ ]/)>=i||!D.trim())h+="\n"+D.slice(i);else{if(a)break;if(o.search(/[^ ]/)>=4)break;if(E.test(o))break;if(C.test(o))break;if(A.test(o))break;h+="\n"+D}a||D.trim()||(a=!0),u+=c+"\n",e=e.substring(c.length+1),o=D.slice(i)}d.loose||(l?d.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(h))&&(r="[ ] "!==n[0],h=h.replace(/^\[[ xX]\] +/,"")),d.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:h}),d.raw+=u}d.items[d.items.length-1].raw=u.trimRight(),d.items[d.items.length-1].text=h.trimRight(),d.raw=d.raw.trimRight();var m=d.items.length;for(s=0;s<m;s++)if(this.lexer.state.top=!1,d.items[s].tokens=this.lexer.blockTokens(d.items[s].text,[]),!d.loose){var x=d.items[s].tokens.filter((function(e){return"space"===e.type})),b=x.length>0&&x.some((function(e){return/\n.*\n/.test(e.raw)}));d.loose=b}if(d.loose)for(s=0;s<m;s++)d.items[s].loose=!0;return d}},u.html=function(e){var t=this.rules.block.html.exec(e);if(t){var u={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};if(this.options.sanitize){var n=this.options.sanitizer?this.options.sanitizer(t[0]):p(t[0]);u.type="paragraph",u.text=n,u.tokens=this.lexer.inline(n)}return u}},u.def=function(e){var t=this.rules.block.def.exec(e);if(t){var u=t[1].toLowerCase().replace(/\s+/g," "),n=t[2]?t[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline._escapes,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline._escapes,"$1"):t[3];return{type:"def",tag:u,raw:t[0],href:n,title:r}}},u.table=function(e){var t=this.rules.block.table.exec(e);if(t){var u={type:"table",header:w(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(u.header.length===u.align.length){u.raw=t[0];var n,r,i,s,a=u.align.length;for(n=0;n<a;n++)/^ *-+: *$/.test(u.align[n])?u.align[n]="right":/^ *:-+: *$/.test(u.align[n])?u.align[n]="center":/^ *:-+ *$/.test(u.align[n])?u.align[n]="left":u.align[n]=null;for(a=u.rows.length,n=0;n<a;n++)u.rows[n]=w(u.rows[n],u.header.length).map((function(e){return{text:e}}));for(a=u.header.length,r=0;r<a;r++)u.header[r].tokens=this.lexer.inline(u.header[r].text);for(a=u.rows.length,r=0;r<a;r++)for(s=u.rows[r],i=0;i<s.length;i++)s[i].tokens=this.lexer.inline(s[i].text);return u}}},u.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}},u.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t){var u="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:u,tokens:this.lexer.inline(u)}}},u.text=function(e){var t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}},u.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:p(t[1])}},u.tag=function(e){var t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^<a /i.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):p(t[0]):t[0]}},u.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var u=t[2].trim();if(!this.options.pedantic&&/^</.test(u)){if(!/>$/.test(u))return;var n=v(u.slice(0,-1),"\\");if((u.length-n.length)%2==0)return}else{var r=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var u=e.length,n=0,r=0;r<u;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&--n<0)return r;return-1}(t[2],"()");if(r>-1){var i=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,i).trim(),t[3]=""}}var s=t[2],a="";if(this.options.pedantic){var l=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(s);l&&(s=l[1],a=l[3])}else a=t[3]?t[3].slice(1,-1):"";return s=s.trim(),/^</.test(s)&&(s=this.options.pedantic&&!/>$/.test(u)?s.slice(1):s.slice(1,-1)),_(t,{href:s?s.replace(this.rules.inline._escapes,"$1"):s,title:a?a.replace(this.rules.inline._escapes,"$1"):a},t[0],this.lexer)}},u.reflink=function(e,t){var u;if((u=this.rules.inline.reflink.exec(e))||(u=this.rules.inline.nolink.exec(e))){var n=(u[2]||u[1]).replace(/\s+/g," ");if(!(n=t[n.toLowerCase()])){var r=u[0].charAt(0);return{type:"text",raw:r,text:r}}return _(u,n,u[0],this.lexer)}},u.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||r&&(""===u||this.rules.inline.punctuation.exec(u))){var i,s,a=n[0].length-1,l=a,o=0,D="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(D.lastIndex=0,t=t.slice(-1*e.length+a);null!=(n=D.exec(t));)if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6])if(s=i.length,n[3]||n[4])l+=s;else if(!((n[5]||n[6])&&a%3)||(a+s)%3){if(!((l-=s)>0)){s=Math.min(s,s+l+o);var c=e.slice(0,a+n.index+(n[0].length-i.length)+s);if(Math.min(a,s)%2){var h=c.slice(1,-1);return{type:"em",raw:c,text:h,tokens:this.lexer.inlineTokens(h)}}var p=c.slice(2,-2);return{type:"strong",raw:c,text:p,tokens:this.lexer.inlineTokens(p)}}}else o+=s}}},u.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var u=t[2].replace(/\n/g," "),n=/[^ ]/.test(u),r=/^ /.test(u)&&/ $/.test(u);return n&&r&&(u=u.substring(1,u.length-1)),u=p(u,!0),{type:"codespan",raw:t[0],text:u}}},u.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},u.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},u.autolink=function(e,t){var u,n,r=this.rules.inline.autolink.exec(e);if(r)return n="@"===r[2]?"mailto:"+(u=p(this.options.mangle?t(r[1]):r[1])):u=p(r[1]),{type:"link",raw:r[0],text:u,href:n,tokens:[{type:"text",raw:u,text:u}]}},u.url=function(e,t){var u;if(u=this.rules.inline.url.exec(e)){var n,r;if("@"===u[2])r="mailto:"+(n=p(this.options.mangle?t(u[0]):u[0]));else{var i;do{i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0]}while(i!==u[0]);n=p(u[0]),r="www."===u[1]?"http://"+u[0]:u[0]}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},u.inlineText=function(e,t){var u,n=this.rules.inline.text.exec(e);if(n)return u=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):p(n[0]):n[0]:p(this.options.smartypants?t(n[0]):n[0]),{type:"text",raw:n[0],text:u}},e}(),$={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:B,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};$.def=F($.def).replace("label",$._label).replace("title",$._title).getRegex(),$.bullet=/(?:[*+-]|\d{1,9}[.)])/,$.listItemStart=F(/^( *)(bull) */).replace("bull",$.bullet).getRegex(),$.list=F($.list).replace(/bull/g,$.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+$.def.source+")").getRegex(),$._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",$._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,$.html=F($.html,"i").replace("comment",$._comment).replace("tag",$._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),$.paragraph=F($._paragraph).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.blockquote=F($.blockquote).replace("paragraph",$.paragraph).getRegex(),$.normal=n({},$),$.gfm=n({},$.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),$.gfm.table=F($.gfm.table).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.gfm.paragraph=F($._paragraph).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",$.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.pedantic=n({},$.normal,{html:F("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",$._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:B,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:F($.normal._paragraph).replace("hr",$.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var S={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:B,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:B,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/};function T(e){return e.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201c").replace(/"/g,"\u201d").replace(/\.{3}/g,"\u2026")}function R(e){var t,u,n="",r=e.length;for(t=0;t<r;t++)u=e.charCodeAt(t),Math.random()>.5&&(u="x"+u.toString(16)),n+="&#"+u+";";return n}S._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",S.punctuation=F(S.punctuation).replace(/punctuation/g,S._punctuation).getRegex(),S.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,S.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g,S._comment=F($._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),S.emStrong.lDelim=F(S.emStrong.lDelim).replace(/punct/g,S._punctuation).getRegex(),S.emStrong.rDelimAst=F(S.emStrong.rDelimAst,"g").replace(/punct/g,S._punctuation).getRegex(),S.emStrong.rDelimUnd=F(S.emStrong.rDelimUnd,"g").replace(/punct/g,S._punctuation).getRegex(),S._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,S._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,S._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,S.autolink=F(S.autolink).replace("scheme",S._scheme).replace("email",S._email).getRegex(),S._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,S.tag=F(S.tag).replace("comment",S._comment).replace("attribute",S._attribute).getRegex(),S._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,S._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,S._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,S.link=F(S.link).replace("label",S._label).replace("href",S._href).replace("title",S._title).getRegex(),S.reflink=F(S.reflink).replace("label",S._label).replace("ref",$._label).getRegex(),S.nolink=F(S.nolink).replace("ref",$._label).getRegex(),S.reflinkSearch=F(S.reflinkSearch,"g").replace("reflink",S.reflink).replace("nolink",S.nolink).getRegex(),S.normal=n({},S),S.pedantic=n({},S.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:F(/^!?\[(label)\]\((.*?)\)/).replace("label",S._label).getRegex(),reflink:F(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",S._label).getRegex()}),S.gfm=n({},S.normal,{escape:F(S.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),S.gfm.url=F(S.gfm.url,"i").replace("email",S.gfm._extended_email).getRegex(),S.breaks=n({},S.gfm,{br:F(S.br).replace("{2,}","*").getRegex(),text:F(S.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var I=function(){function e(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||t.defaults,this.options.tokenizer=this.options.tokenizer||new z,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var u={block:$.normal,inline:S.normal};this.options.pedantic?(u.block=$.pedantic,u.inline=S.pedantic):this.options.gfm&&(u.block=$.gfm,this.options.breaks?u.inline=S.breaks:u.inline=S.gfm),this.tokenizer.rules=u}e.lex=function(t,u){return new e(u).lex(t)},e.lexInline=function(t,u){return new e(u).inlineTokens(t)};var n,r,i,s=e.prototype;return s.lex=function(e){var t;for(e=e.replace(/\r\n|\r/g,"\n"),this.blockTokens(e,this.tokens);t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens},s.blockTokens=function(e,t){var u,n,r,i,s=this;for(void 0===t&&(t=[]),e=this.options.pedantic?e.replace(/\t/g," ").replace(/^ +$/gm,""):e.replace(/^( *)(\t+)/gm,(function(e,t,u){return t+" ".repeat(u.length)}));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(n){return!!(u=n.call({lexer:s},e,t))&&(e=e.substring(u.raw.length),t.push(u),!0)}))))if(u=this.tokenizer.space(e))e=e.substring(u.raw.length),1===u.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(u);else if(u=this.tokenizer.code(e))e=e.substring(u.raw.length),!(n=t[t.length-1])||"paragraph"!==n.type&&"text"!==n.type?t.push(u):(n.raw+="\n"+u.raw,n.text+="\n"+u.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(u=this.tokenizer.fences(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.heading(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.hr(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.blockquote(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.list(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.html(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.def(e))e=e.substring(u.raw.length),!(n=t[t.length-1])||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[u.tag]||(this.tokens.links[u.tag]={href:u.href,title:u.title}):(n.raw+="\n"+u.raw,n.text+="\n"+u.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(u=this.tokenizer.table(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.lheading(e))e=e.substring(u.raw.length),t.push(u);else if(r=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,u=e.slice(1),n=void 0;s.options.extensions.startBlock.forEach((function(e){"number"==typeof(n=e.call({lexer:this},u))&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),this.state.top&&(u=this.tokenizer.paragraph(r)))n=t[t.length-1],i&&"paragraph"===n.type?(n.raw+="\n"+u.raw,n.text+="\n"+u.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(u),i=r.length!==e.length,e=e.substring(u.raw.length);else if(u=this.tokenizer.text(e))e=e.substring(u.raw.length),(n=t[t.length-1])&&"text"===n.type?(n.raw+="\n"+u.raw,n.text+="\n"+u.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(u);else if(e){var a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}throw new Error(a)}return this.state.top=!0,t},s.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},s.inlineTokens=function(e,t){var u,n,r,i=this;void 0===t&&(t=[]);var s,a,l,o=e;if(this.tokens.links){var D=Object.keys(this.tokens.links);if(D.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(o));)D.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,s.index)+"["+y("a",s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(o));)o=o.slice(0,s.index)+"["+y("a",s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(o));)o=o.slice(0,s.index+s[0].length-2)+"++"+o.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex),this.tokenizer.rules.inline.escapedEmSt.lastIndex--;for(;e;)if(a||(l=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(n){return!!(u=n.call({lexer:i},e,t))&&(e=e.substring(u.raw.length),t.push(u),!0)}))))if(u=this.tokenizer.escape(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.tag(e))e=e.substring(u.raw.length),(n=t[t.length-1])&&"text"===u.type&&"text"===n.type?(n.raw+=u.raw,n.text+=u.text):t.push(u);else if(u=this.tokenizer.link(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(u.raw.length),(n=t[t.length-1])&&"text"===u.type&&"text"===n.type?(n.raw+=u.raw,n.text+=u.text):t.push(u);else if(u=this.tokenizer.emStrong(e,o,l))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.codespan(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.br(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.del(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.autolink(e,R))e=e.substring(u.raw.length),t.push(u);else if(this.state.inLink||!(u=this.tokenizer.url(e,R))){if(r=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,u=e.slice(1),n=void 0;i.options.extensions.startInline.forEach((function(e){"number"==typeof(n=e.call({lexer:this},u))&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),u=this.tokenizer.inlineText(r,T))e=e.substring(u.raw.length),"_"!==u.raw.slice(-1)&&(l=u.raw.slice(-1)),a=!0,(n=t[t.length-1])&&"text"===n.type?(n.raw+=u.raw,n.text+=u.text):t.push(u);else if(e){var c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}throw new Error(c)}}else e=e.substring(u.raw.length),t.push(u);return t},n=e,i=[{key:"rules",get:function(){return{block:$,inline:S}}}],(r=null)&&u(n.prototype,r),i&&u(n,i),Object.defineProperty(n,"prototype",{writable:!1}),e}(),O=function(){function e(e){this.options=e||t.defaults}var u=e.prototype;return u.code=function(e,t,u){var n=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,n);null!=r&&r!==e&&(u=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",n?'<pre><code class="'+this.options.langPrefix+p(n)+'">'+(u?e:p(e,!0))+"</code></pre>\n":"<pre><code>"+(u?e:p(e,!0))+"</code></pre>\n"},u.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},u.html=function(e){return e},u.heading=function(e,t,u,n){return this.options.headerIds?"<h"+t+' id="'+(this.options.headerPrefix+n.slug(u))+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},u.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},u.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+"</"+n+">\n"},u.listitem=function(e){return"<li>"+e+"</li>\n"},u.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},u.paragraph=function(e){return"<p>"+e+"</p>\n"},u.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},u.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},u.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+"</"+u+">\n"},u.strong=function(e){return"<strong>"+e+"</strong>"},u.em=function(e){return"<em>"+e+"</em>"},u.codespan=function(e){return"<code>"+e+"</code>"},u.br=function(){return this.options.xhtml?"<br/>":"<br>"},u.del=function(e){return"<del>"+e+"</del>"},u.link=function(e,t,u){if(null===(e=E(this.options.sanitize,this.options.baseUrl,e)))return u;var n='<a href="'+e+'"';return t&&(n+=' title="'+t+'"'),n+=">"+u+"</a>"},u.image=function(e,t,u){if(null===(e=E(this.options.sanitize,this.options.baseUrl,e)))return u;var n='<img src="'+e+'" alt="'+u+'"';return t&&(n+=' title="'+t+'"'),n+=this.options.xhtml?"/>":">"},u.text=function(e){return e},e}(),j=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),q=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u)){n=this.seen[e];do{u=e+"-"+ ++n}while(this.seen.hasOwnProperty(u))}return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});var u=this.serialize(e);return this.getNextSafeSlug(u,t.dryrun)},e}(),Z=function(){function e(e){this.options=e||t.defaults,this.options.renderer=this.options.renderer||new O,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new j,this.slugger=new q}e.parse=function(t,u){return new e(u).parse(t)},e.parseInline=function(t,u){return new e(u).parseInline(t)};var u=e.prototype;return u.parse=function(e,t){void 0===t&&(t=!0);var u,n,r,i,s,a,l,o,D,c,h,p,f,d,F,k,A,E,C,m="",x=e.length;for(u=0;u<x;u++)if(c=e[u],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[c.type])||!1===(C=this.options.extensions.renderers[c.type].call({parser:this},c))&&["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(c.type))switch(c.type){case"space":continue;case"hr":m+=this.renderer.hr();continue;case"heading":m+=this.renderer.heading(this.parseInline(c.tokens),c.depth,g(this.parseInline(c.tokens,this.textRenderer)),this.slugger);continue;case"code":m+=this.renderer.code(c.text,c.lang,c.escaped);continue;case"table":for(o="",l="",i=c.header.length,n=0;n<i;n++)l+=this.renderer.tablecell(this.parseInline(c.header[n].tokens),{header:!0,align:c.align[n]});for(o+=this.renderer.tablerow(l),D="",i=c.rows.length,n=0;n<i;n++){for(l="",s=(a=c.rows[n]).length,r=0;r<s;r++)l+=this.renderer.tablecell(this.parseInline(a[r].tokens),{header:!1,align:c.align[r]});D+=this.renderer.tablerow(l)}m+=this.renderer.table(o,D);continue;case"blockquote":D=this.parse(c.tokens),m+=this.renderer.blockquote(D);continue;case"list":for(h=c.ordered,p=c.start,f=c.loose,i=c.items.length,D="",n=0;n<i;n++)k=(F=c.items[n]).checked,A=F.task,d="",F.task&&(E=this.renderer.checkbox(k),f?F.tokens.length>0&&"paragraph"===F.tokens[0].type?(F.tokens[0].text=E+" "+F.tokens[0].text,F.tokens[0].tokens&&F.tokens[0].tokens.length>0&&"text"===F.tokens[0].tokens[0].type&&(F.tokens[0].tokens[0].text=E+" "+F.tokens[0].tokens[0].text)):F.tokens.unshift({type:"text",text:E}):d+=E),d+=this.parse(F.tokens,f),D+=this.renderer.listitem(d,A,k);m+=this.renderer.list(D,h,p);continue;case"html":m+=this.renderer.html(c.text);continue;case"paragraph":m+=this.renderer.paragraph(this.parseInline(c.tokens));continue;case"text":for(D=c.tokens?this.parseInline(c.tokens):c.text;u+1<x&&"text"===e[u+1].type;)D+="\n"+((c=e[++u]).tokens?this.parseInline(c.tokens):c.text);m+=t?this.renderer.paragraph(D):D;continue;default:var b='Token with "'+c.type+'" type was not found.';if(this.options.silent)return void console.error(b);throw new Error(b)}else m+=C||"";return m},u.parseInline=function(e,t){t=t||this.renderer;var u,n,r,i="",s=e.length;for(u=0;u<s;u++)if(n=e[u],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[n.type])||!1===(r=this.options.extensions.renderers[n.type].call({parser:this},n))&&["escape","html","link","image","strong","em","codespan","br","del","text"].includes(n.type))switch(n.type){case"escape":case"text":i+=t.text(n.text);break;case"html":i+=t.html(n.text);break;case"link":i+=t.link(n.href,n.title,this.parseInline(n.tokens,t));break;case"image":i+=t.image(n.href,n.title,n.text);break;case"strong":i+=t.strong(this.parseInline(n.tokens,t));break;case"em":i+=t.em(this.parseInline(n.tokens,t));break;case"codespan":i+=t.codespan(n.text);break;case"br":i+=t.br();break;case"del":i+=t.del(this.parseInline(n.tokens,t));break;default:var a='Token with "'+n.type+'" type was not found.';if(this.options.silent)return void console.error(a);throw new Error(a)}else i+=r||"";return i},e}(),L=function(){function e(e){this.options=e||t.defaults}var u=e.prototype;return u.preprocess=function(e){return e},u.postprocess=function(e){return e},e}();function P(e,t){return function(u,r,i){"function"==typeof r&&(i=r,r=null);var s=n({},r),a=function(e,t,u){return function(n){if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){var r="<p>An error occurred:</p><pre>"+p(n.message+"",!0)+"</pre>";return t?Promise.resolve(r):u?void u(null,r):r}if(t)return Promise.reject(n);if(!u)throw n;u(n)}}((r=n({},M.defaults,s)).silent,r.async,i);if(null==u)return a(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof u)return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(u)+", string expected"));if(function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}(r),r.hooks&&(r.hooks.options=r),i){var l,o=r.highlight;try{r.hooks&&(u=r.hooks.preprocess(u)),l=e(u,r)}catch(g){return a(g)}var D=function(e){var u;if(!e)try{r.walkTokens&&M.walkTokens(l,r.walkTokens),u=t(l,r),r.hooks&&(u=r.hooks.postprocess(u))}catch(g){e=g}return r.highlight=o,e?a(e):i(null,u)};if(!o||o.length<3)return D();if(delete r.highlight,!l.length)return D();var c=0;return M.walkTokens(l,(function(e){"code"===e.type&&(c++,setTimeout((function(){o(e.text,e.lang,(function(t,u){if(t)return D(t);null!=u&&u!==e.text&&(e.text=u,e.escaped=!0),0===--c&&D()}))}),0))})),void(0===c&&D())}if(r.async)return Promise.resolve(r.hooks?r.hooks.preprocess(u):u).then((function(t){return e(t,r)})).then((function(e){return r.walkTokens?Promise.all(M.walkTokens(e,r.walkTokens)).then((function(){return e})):e})).then((function(e){return t(e,r)})).then((function(e){return r.hooks?r.hooks.postprocess(e):e})).catch(a);try{r.hooks&&(u=r.hooks.preprocess(u));var h=e(u,r);r.walkTokens&&M.walkTokens(h,r.walkTokens);var f=t(h,r);return r.hooks&&(f=r.hooks.postprocess(f)),f}catch(g){return a(g)}}}function M(e,t,u){return P(I.lex,Z.parse)(e,t,u)}L.passThroughHooks=new Set(["preprocess","postprocess"]),M.options=M.setOptions=function(e){var u;return M.defaults=n({},M.defaults,e),u=M.defaults,t.defaults=u,M},M.getDefaults=s,M.defaults=t.defaults,M.use=function(){for(var e=M.defaults.extensions||{renderers:{},childTokens:{}},t=arguments.length,u=new Array(t),r=0;r<t;r++)u[r]=arguments[r];u.forEach((function(t){var u=n({},t);if(u.async=M.defaults.async||u.async||!1,t.extensions&&(t.extensions.forEach((function(t){if(!t.name)throw new Error("extension name required");if(t.renderer){var u=e.renderers[t.name];e.renderers[t.name]=u?function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var i=t.renderer.apply(this,n);return!1===i&&(i=u.apply(this,n)),i}:t.renderer}if(t.tokenizer){if(!t.level||"block"!==t.level&&"inline"!==t.level)throw new Error("extension level must be 'block' or 'inline'");e[t.level]?e[t.level].unshift(t.tokenizer):e[t.level]=[t.tokenizer],t.start&&("block"===t.level?e.startBlock?e.startBlock.push(t.start):e.startBlock=[t.start]:"inline"===t.level&&(e.startInline?e.startInline.push(t.start):e.startInline=[t.start]))}t.childTokens&&(e.childTokens[t.name]=t.childTokens)})),u.extensions=e),t.renderer&&function(){var e=M.defaults.renderer||new O,n=function(u){var n=e[u];e[u]=function(){for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];var a=t.renderer[u].apply(e,i);return!1===a&&(a=n.apply(e,i)),a}};for(var r in t.renderer)n(r);u.renderer=e}(),t.tokenizer&&function(){var e=M.defaults.tokenizer||new z,n=function(u){var n=e[u];e[u]=function(){for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];var a=t.tokenizer[u].apply(e,i);return!1===a&&(a=n.apply(e,i)),a}};for(var r in t.tokenizer)n(r);u.tokenizer=e}(),t.hooks&&function(){var e=M.defaults.hooks||new L,n=function(u){var n=e[u];L.passThroughHooks.has(u)?e[u]=function(r){if(M.defaults.async)return Promise.resolve(t.hooks[u].call(e,r)).then((function(t){return n.call(e,t)}));var i=t.hooks[u].call(e,r);return n.call(e,i)}:e[u]=function(){for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];var a=t.hooks[u].apply(e,i);return!1===a&&(a=n.apply(e,i)),a}};for(var r in t.hooks)n(r);u.hooks=e}(),t.walkTokens){var r=M.defaults.walkTokens;u.walkTokens=function(e){var u=[];return u.push(t.walkTokens.call(this,e)),r&&(u=u.concat(r.call(this,e))),u}}M.setOptions(u)}))},M.walkTokens=function(e,t){for(var u,n=[],r=function(){var e=u.value;switch(n=n.concat(t.call(M,e)),e.type){case"table":for(var r,s=i(e.header);!(r=s()).done;){var a=r.value;n=n.concat(M.walkTokens(a.tokens,t))}for(var l,o=i(e.rows);!(l=o()).done;)for(var D,c=i(l.value);!(D=c()).done;){var h=D.value;n=n.concat(M.walkTokens(h.tokens,t))}break;case"list":n=n.concat(M.walkTokens(e.items,t));break;default:M.defaults.extensions&&M.defaults.extensions.childTokens&&M.defaults.extensions.childTokens[e.type]?M.defaults.extensions.childTokens[e.type].forEach((function(u){n=n.concat(M.walkTokens(e[u],t))})):e.tokens&&(n=n.concat(M.walkTokens(e.tokens,t)))}},s=i(e);!(u=s()).done;)r();return n},M.parseInline=P(I.lexInline,Z.parseInline),M.Parser=Z,M.parser=Z.parse,M.Renderer=O,M.TextRenderer=j,M.Lexer=I,M.lexer=I.lex,M.Tokenizer=z,M.Slugger=q,M.Hooks=L,M.parse=M;var U=M.options,Q=M.setOptions,N=M.use,H=M.walkTokens,X=M.parseInline,V=M,G=Z.parse,J=I.lex;t.Hooks=L,t.Lexer=I,t.Parser=Z,t.Renderer=O,t.Slugger=q,t.TextRenderer=j,t.Tokenizer=z,t.getDefaults=s,t.lexer=J,t.marked=M,t.options=U,t.parse=V,t.parseInline=X,t.parser=G,t.setOptions=Q,t.use=N,t.walkTokens=H}}]); \ No newline at end of file diff --git a/assets/js/750b9005.2bc72397.js b/assets/js/750b9005.2bc72397.js new file mode 100644 index 00000000000..0bffb0a81a9 --- /dev/null +++ b/assets/js/750b9005.2bc72397.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62814],{48597:e=>{e.exports=JSON.parse('{"label":"quality","permalink":"/blog/tags/quality","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/750b9005.56dfdc31.js b/assets/js/750b9005.56dfdc31.js deleted file mode 100644 index c3a060d5db2..00000000000 --- a/assets/js/750b9005.56dfdc31.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2814],{48597:e=>{e.exports=JSON.parse('{"label":"quality","permalink":"/blog/tags/quality","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/752283db.174f5159.js b/assets/js/752283db.174f5159.js deleted file mode 100644 index 374d0592ac2..00000000000 --- a/assets/js/752283db.174f5159.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6947],{90363:e=>{e.exports=JSON.parse('{"label":"plugin","permalink":"/blog/tags/plugin","allTagsPath":"/blog/tags","count":6}')}}]); \ No newline at end of file diff --git a/assets/js/752283db.459ab70f.js b/assets/js/752283db.459ab70f.js new file mode 100644 index 00000000000..683614dd651 --- /dev/null +++ b/assets/js/752283db.459ab70f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46947],{90363:e=>{e.exports=JSON.parse('{"label":"plugin","permalink":"/blog/tags/plugin","allTagsPath":"/blog/tags","count":6}')}}]); \ No newline at end of file diff --git a/assets/js/752c6bfa.8ffd2dc5.js b/assets/js/752c6bfa.8ffd2dc5.js new file mode 100644 index 00000000000..ee521ab4b03 --- /dev/null +++ b/assets/js/752c6bfa.8ffd2dc5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20384],{20891:s=>{s.exports=JSON.parse('{"label":"plugins","permalink":"/blog/tags/plugins","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/752c6bfa.962a0ef6.js b/assets/js/752c6bfa.962a0ef6.js deleted file mode 100644 index 757a8f54167..00000000000 --- a/assets/js/752c6bfa.962a0ef6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[384],{20891:s=>{s.exports=JSON.parse('{"label":"plugins","permalink":"/blog/tags/plugins","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/75408299.3abe38b4.js b/assets/js/75408299.3abe38b4.js new file mode 100644 index 00000000000..4a4a2f18a28 --- /dev/null +++ b/assets/js/75408299.3abe38b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56630],{31796:e=>{e.exports=JSON.parse('{"label":"run","permalink":"/blog/tags/run","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/75408299.f8332bfc.js b/assets/js/75408299.f8332bfc.js deleted file mode 100644 index 608139282b3..00000000000 --- a/assets/js/75408299.f8332bfc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6630],{31796:e=>{e.exports=JSON.parse('{"label":"run","permalink":"/blog/tags/run","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/7599f4f1.59c6369a.js b/assets/js/7599f4f1.59c6369a.js new file mode 100644 index 00000000000..07b0d536422 --- /dev/null +++ b/assets/js/7599f4f1.59c6369a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65217],{67049:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto","page":1,"postsPerPage":10,"totalPages":3,"totalCount":22,"nextPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7599f4f1.5dd577d2.js b/assets/js/7599f4f1.5dd577d2.js deleted file mode 100644 index a72ab3e2c29..00000000000 --- a/assets/js/7599f4f1.5dd577d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5217],{67049:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto","page":1,"postsPerPage":10,"totalPages":3,"totalCount":21,"nextPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/759c01e9.d1824a12.js b/assets/js/759c01e9.d1824a12.js deleted file mode 100644 index e4690446133..00000000000 --- a/assets/js/759c01e9.d1824a12.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8488],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var a=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},l=Object.keys(e);for(a=0;a<l.length;a++)r=l[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)r=l[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=a.createContext({}),c=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),d=c(r),m=n,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||l;return r?a.createElement(f,o(o({ref:t},s),{},{components:r})):a.createElement(f,o({ref:t},s))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,o=new Array(l);o[0]=d;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u.mdxType="string"==typeof e?e:n,o[1]=u;for(var c=2;c<l;c++)o[c]=r[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>o});var a=r(27378),n=r(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:r,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,n.Z)(l,o),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var a=r(25773),n=r(27378),l=r(37140),o=r(83457),u=r(35595),i=r(76457);const c="tabList_J5MA",s="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:u,selectValue:i,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,r=p.indexOf(t),a=c[r].value;a!==u&&(d(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return n.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":r},t)},c.map((e=>{let{value:t,label:r,attributes:o}=e;return n.createElement("li",(0,a.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",s,o?.className,{"tabs__item--active":u===t})}),r??t)})))}function d(e){let{lazy:t,children:r,selectedValue:a}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return n.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,u.Y)(e);return n.createElement("div",{className:(0,l.Z)("tabs-container",c)},n.createElement(p,(0,a.Z)({},e,t)),n.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return n.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>d});var a=r(27378),n=r(35331),l=r(30654),o=r(70784),u=r(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}function c(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??i(r);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function s(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const o=(0,n.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(u),(0,a.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(o.location.search);t.set(u,e),o.replace({...o.location,search:t.toString()})}),[u,o])]}function d(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,l=c(e),[o,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!s({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:r,groupId:n}),[f,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,l]=(0,u.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&l.set(e)}),[r,l])]}({groupId:n}),g=(()=>{const e=d??f;return s({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!s({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),m(e),b(e)}),[m,b,l]),tabValues:l}}},36642:(e,t,r)=>{r.d(t,{Z:()=>c});var a=r(27378),n=r(30780),l=r(39798),o=r(33337);function u(e,t,r){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),r&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function i(e,t){let r="pnpm add ";return e.dev?r+="--save-dev ":e.peer&&(r+="--save-peer "),e.package?r+=`--filter ${e.package} `:t&&(r+="-w "),r+=e.dep,r}function c(e){let t=u(e,!1,!0),r=i(e,!1);return e.package||(t+="\n\n# If using workspaces\n",r+="\n\n# If using workspaces\n",t+=u(e,!0,!0),r+=i(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(n.Z,{language:"shell"},u(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(n.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(n.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(n.Z,{language:"shell"},r)))}},74273:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=r(25773),n=(r(27378),r(35318)),l=r(36642);const o={title:"React example",sidebar_label:"React"},u=void 0,i={unversionedId:"guides/examples/react",id:"guides/examples/react",title:"React example",description:"React is an application or library concern, and not a build system one, since the bundling of React",source:"@site/docs/guides/examples/react.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/react",permalink:"/docs/guides/examples/react",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/react.mdx",tags:[],version:"current",frontMatter:{title:"React example",sidebar_label:"React"},sidebar:"guides",previous:{title:"Prettier",permalink:"/docs/guides/examples/prettier"},next:{title:"Remix",permalink:"/docs/guides/examples/remix"}},c={},s=[],p={toc:s};function d(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"React is an application or library concern, and not a build system one, since the bundling of React\nis abstracted away through another tool like webpack. Because of this, moon has no guidelines around\nutilizing React directly. You can use React however you wish!"),(0,n.kt)("p",null,"However, with that being said, we do suggest the following:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Add ",(0,n.kt)("inlineCode",{parentName:"li"},"react")," and related dependencies to each project, not the root. This includes ",(0,n.kt)("inlineCode",{parentName:"li"},"@types/react"),"\nas well. This will ensure accurate ",(0,n.kt)("a",{parentName:"li",href:"../../concepts/cache#hashing"},"hashing"),".")),(0,n.kt)(l.Z,{dep:"react",package:"<project>",mdxType:"AddDepsTabs"}),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Configure Babel with the ",(0,n.kt)("inlineCode",{parentName:"li"},"@babel/preset-react")," preset."),(0,n.kt)("li",{parentName:"ul"},"Configure ",(0,n.kt)("a",{parentName:"li",href:"./typescript"},"TypeScript")," compiler options with ",(0,n.kt)("inlineCode",{parentName:"li"},'"jsx": "react-jsx"'),".")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/759c01e9.fed1259e.js b/assets/js/759c01e9.fed1259e.js new file mode 100644 index 00000000000..4256f27c4d8 --- /dev/null +++ b/assets/js/759c01e9.fed1259e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38488],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var a=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},l=Object.keys(e);for(a=0;a<l.length;a++)r=l[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)r=l[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=a.createContext({}),c=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),d=c(r),m=n,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||l;return r?a.createElement(f,o(o({ref:t},s),{},{components:r})):a.createElement(f,o({ref:t},s))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,o=new Array(l);o[0]=d;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u.mdxType="string"==typeof e?e:n,o[1]=u;for(var c=2;c<l;c++)o[c]=r[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>o});var a=r(27378),n=r(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:r,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,n.Z)(l,o),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var a=r(25773),n=r(27378),l=r(37140),o=r(83457),u=r(35595),i=r(76457);const c="tabList_J5MA",s="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:u,selectValue:i,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,r=p.indexOf(t),a=c[r].value;a!==u&&(d(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return n.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":r},t)},c.map((e=>{let{value:t,label:r,attributes:o}=e;return n.createElement("li",(0,a.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",s,o?.className,{"tabs__item--active":u===t})}),r??t)})))}function d(e){let{lazy:t,children:r,selectedValue:a}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return n.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,u.Y)(e);return n.createElement("div",{className:(0,l.Z)("tabs-container",c)},n.createElement(p,(0,a.Z)({},e,t)),n.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return n.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>d});var a=r(27378),n=r(35331),l=r(30654),o=r(70784),u=r(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}function c(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??i(r);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function s(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const o=(0,n.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(u),(0,a.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(o.location.search);t.set(u,e),o.replace({...o.location,search:t.toString()})}),[u,o])]}function d(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,l=c(e),[o,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!s({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:r,groupId:n}),[f,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,l]=(0,u.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&l.set(e)}),[r,l])]}({groupId:n}),g=(()=>{const e=d??f;return s({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!s({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),m(e),b(e)}),[m,b,l]),tabValues:l}}},36642:(e,t,r)=>{r.d(t,{Z:()=>c});var a=r(27378),n=r(30780),l=r(39798),o=r(33337);function u(e,t,r){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),r&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function i(e,t){let r="pnpm add ";return e.dev?r+="--save-dev ":e.peer&&(r+="--save-peer "),e.package?r+=`--filter ${e.package} `:t&&(r+="-w "),r+=e.dep,r}function c(e){let t=u(e,!1,!0),r=i(e,!1);return e.package||(t+="\n\n# If using workspaces\n",r+="\n\n# If using workspaces\n",t+=u(e,!0,!0),r+=i(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(n.Z,{language:"shell"},u(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(n.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(n.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(n.Z,{language:"shell"},r)))}},74273:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=r(25773),n=(r(27378),r(35318)),l=r(36642);const o={title:"React example",sidebar_label:"React"},u=void 0,i={unversionedId:"guides/examples/react",id:"guides/examples/react",title:"React example",description:"React is an application or library concern, and not a build system one, since the bundling of React",source:"@site/docs/guides/examples/react.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/react",permalink:"/docs/guides/examples/react",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/react.mdx",tags:[],version:"current",frontMatter:{title:"React example",sidebar_label:"React"},sidebar:"guides",previous:{title:"Prettier",permalink:"/docs/guides/examples/prettier"},next:{title:"Remix",permalink:"/docs/guides/examples/remix"}},c={},s=[],p={toc:s};function d(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"React is an application or library concern, and not a build system one, since the bundling of React\nis abstracted away through another tool like webpack. Because of this, moon has no guidelines around\nutilizing React directly. You can use React however you wish!"),(0,n.kt)("p",null,"However, with that being said, we do suggest the following:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Add ",(0,n.kt)("inlineCode",{parentName:"li"},"react")," and related dependencies to each project, not the root. This includes ",(0,n.kt)("inlineCode",{parentName:"li"},"@types/react"),"\nas well. This will ensure accurate ",(0,n.kt)("a",{parentName:"li",href:"../../concepts/cache#hashing"},"hashing"),".")),(0,n.kt)(l.Z,{dep:"react",package:"<project>",mdxType:"AddDepsTabs"}),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Configure Babel with the ",(0,n.kt)("inlineCode",{parentName:"li"},"@babel/preset-react")," preset."),(0,n.kt)("li",{parentName:"ul"},"Configure ",(0,n.kt)("a",{parentName:"li",href:"./typescript"},"TypeScript")," compiler options with ",(0,n.kt)("inlineCode",{parentName:"li"},'"jsx": "react-jsx"'),".")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/766b2171.872855c8.js b/assets/js/766b2171.872855c8.js deleted file mode 100644 index ffafbd334fe..00000000000 --- a/assets/js/766b2171.872855c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3358],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=r,f=m["".concat(l,".").concat(d)]||m[d]||p[d]||i;return n?o.createElement(f,a(a({ref:t},u),{},{components:n})):o.createElement(f,a({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var c=2;c<i;c++)a[c]=n[c];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:i,align:a="center",padding:s="1rem"}=e;return o.createElement("div",{style:{marginBottom:s,marginTop:s,textAlign:a}},o.createElement("img",{src:t.default,width:n,alt:r,title:i,className:"inline-block"}))}},4722:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=n(25773),r=(n(27378),n(35318)),i=n(88109);const a={title:"Open source usage"},s=void 0,l={unversionedId:"guides/open-source",id:"guides/open-source",title:"Open source usage",description:"Although moon was designed for large monorepos, it can also be used for open source projects,",source:"@site/docs/guides/open-source.mdx",sourceDirName:"guides",slug:"/guides/open-source",permalink:"/docs/guides/open-source",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/open-source.mdx",tags:[],version:"current",frontMatter:{title:"Open source usage"},sidebar:"guides",previous:{title:"Offline mode",permalink:"/docs/guides/offline-mode"},next:{title:"Remote caching",permalink:"/docs/guides/remote-cache"}},c={},u=[{value:"Reporting run results",id:"reporting-run-results",level:2}],p={toc:u};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Although moon was designed for large monorepos, it can also be used for open source projects,\nespecially when coupled with our ",(0,r.kt)("a",{parentName:"p",href:"./ci"},"built-in continuous integration support"),"."),(0,r.kt)("p",null,"However, a pain point with moon is that it only supports a single Node.js version within its\n",(0,r.kt)("a",{parentName:"p",href:"../concepts/toolchain"},"toolchain"),", but open source projects typically need to run checks against\nmultiple Node.js versions! To mitigate this problem, we built the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/tool-version-action"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/tool-version-action"))," GitHub Action,\nwhich will override the Node.js version configured in the workspace."),(0,r.kt)("p",null,"This action works best when paired with a matrix, as demonstrated below!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"name: 'Pipeline'\non:\n push:\n branches:\n - 'master'\n pull_request:\njobs:\n ci:\n name: 'CI'\n runs-on: ${{ matrix.os }}\n strategy:\n matrix:\n os: ['ubuntu-latest', 'windows-latest']\n node-version: [14, 16, 18]\n steps:\n # Checkout repository\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n # Install Node.js so we can install dependencies\n - uses: 'actions/setup-node@v3'\n with:\n cache: 'yarn'\n # Set Node.js version to use in moon\n - uses: 'moonrepo/tool-version-action@v1'\n with:\n node: ${{ matrix.node-version }}\n # Install dependencies\n - run: 'yarn install --immutable'\n # Run moon and affected tasks\n - run: 'yarn moon ci'\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Currently, we only have a solution for GitHub actions, but the same mechanism can be applied to\nother CI environments by setting the ",(0,r.kt)("inlineCode",{parentName:"p"},"MOON_NODE_VERSION")," environment variable.")),(0,r.kt)("h2",{id:"reporting-run-results"},"Reporting run results"),(0,r.kt)("p",null,"We also suggest using our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/run-report-action"))," GitHub\naction. This action will report the results of a ",(0,r.kt)("a",{parentName:"p",href:"../commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," run to a pull request\nas a comment and workflow summary."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n # ...\n - run: 'yarn moon ci'\n - uses: 'moonrepo/run-report-action@v1'\n if: success() || failure()\n with:\n access-token: ${{ secrets.GITHUB_TOKEN }}\n")),(0,r.kt)("p",null,"The report looks something like the following:"),(0,r.kt)(i.Z,{src:n(53432),width:"60%",mdxType:"Image"}))}m.isMDXComponent=!0},53432:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/run-report-41cffa17cd530ab8cca5cef47b38dcfd.png"}}]); \ No newline at end of file diff --git a/assets/js/766b2171.aef362a6.js b/assets/js/766b2171.aef362a6.js new file mode 100644 index 00000000000..b27d1f021d5 --- /dev/null +++ b/assets/js/766b2171.aef362a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23358],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=r,f=m["".concat(l,".").concat(d)]||m[d]||p[d]||i;return n?o.createElement(f,a(a({ref:t},u),{},{components:n})):o.createElement(f,a({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var c=2;c<i;c++)a[c]=n[c];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:i,align:a="center",padding:s="1rem"}=e;return o.createElement("div",{style:{marginBottom:s,marginTop:s,textAlign:a}},o.createElement("img",{src:t.default,width:n,alt:r,title:i,className:"inline-block"}))}},4722:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=n(25773),r=(n(27378),n(35318)),i=n(88109);const a={title:"Open source usage"},s=void 0,l={unversionedId:"guides/open-source",id:"guides/open-source",title:"Open source usage",description:"Although moon was designed for large monorepos, it can also be used for open source projects,",source:"@site/docs/guides/open-source.mdx",sourceDirName:"guides",slug:"/guides/open-source",permalink:"/docs/guides/open-source",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/open-source.mdx",tags:[],version:"current",frontMatter:{title:"Open source usage"},sidebar:"guides",previous:{title:"Offline mode",permalink:"/docs/guides/offline-mode"},next:{title:"Remote caching",permalink:"/docs/guides/remote-cache"}},c={},u=[{value:"Reporting run results",id:"reporting-run-results",level:2}],p={toc:u};function m(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Although moon was designed for large monorepos, it can also be used for open source projects,\nespecially when coupled with our ",(0,r.kt)("a",{parentName:"p",href:"./ci"},"built-in continuous integration support"),"."),(0,r.kt)("p",null,"However, a pain point with moon is that it only supports a single Node.js version within its\n",(0,r.kt)("a",{parentName:"p",href:"../concepts/toolchain"},"toolchain"),", but open source projects typically need to run checks against\nmultiple Node.js versions! To mitigate this problem, we built the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/tool-version-action"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/tool-version-action"))," GitHub Action,\nwhich will override the Node.js version configured in the workspace."),(0,r.kt)("p",null,"This action works best when paired with a matrix, as demonstrated below!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"name: 'Pipeline'\non:\n push:\n branches:\n - 'master'\n pull_request:\njobs:\n ci:\n name: 'CI'\n runs-on: ${{ matrix.os }}\n strategy:\n matrix:\n os: ['ubuntu-latest', 'windows-latest']\n node-version: [14, 16, 18]\n steps:\n # Checkout repository\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n # Install Node.js so we can install dependencies\n - uses: 'actions/setup-node@v3'\n with:\n cache: 'yarn'\n # Set Node.js version to use in moon\n - uses: 'moonrepo/tool-version-action@v1'\n with:\n node: ${{ matrix.node-version }}\n # Install dependencies\n - run: 'yarn install --immutable'\n # Run moon and affected tasks\n - run: 'yarn moon ci'\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Currently, we only have a solution for GitHub actions, but the same mechanism can be applied to\nother CI environments by setting the ",(0,r.kt)("inlineCode",{parentName:"p"},"MOON_NODE_VERSION")," environment variable.")),(0,r.kt)("h2",{id:"reporting-run-results"},"Reporting run results"),(0,r.kt)("p",null,"We also suggest using our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/run-report-action"))," GitHub\naction. This action will report the results of a ",(0,r.kt)("a",{parentName:"p",href:"../commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," run to a pull request\nas a comment and workflow summary."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n # ...\n - run: 'yarn moon ci'\n - uses: 'moonrepo/run-report-action@v1'\n if: success() || failure()\n with:\n access-token: ${{ secrets.GITHUB_TOKEN }}\n")),(0,r.kt)("p",null,"The report looks something like the following:"),(0,r.kt)(i.Z,{src:n(53432),width:"60%",mdxType:"Image"}))}m.isMDXComponent=!0},53432:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/run-report-41cffa17cd530ab8cca5cef47b38dcfd.png"}}]); \ No newline at end of file diff --git a/assets/js/769e9ed2.7045c1c8.js b/assets/js/769e9ed2.7045c1c8.js deleted file mode 100644 index 78327051781..00000000000 --- a/assets/js/769e9ed2.7045c1c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6728],{91187:e=>{e.exports=JSON.parse('{"label":"notifier","permalink":"/blog/tags/notifier","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/769e9ed2.dac44f1f.js b/assets/js/769e9ed2.dac44f1f.js new file mode 100644 index 00000000000..a780c823266 --- /dev/null +++ b/assets/js/769e9ed2.dac44f1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13869],{91187:e=>{e.exports=JSON.parse('{"label":"notifier","permalink":"/blog/tags/notifier","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/771f38eb.6dabf2a5.js b/assets/js/771f38eb.6dabf2a5.js deleted file mode 100644 index 3b4a33fc1b5..00000000000 --- a/assets/js/771f38eb.6dabf2a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1478],{59811:e=>{e.exports=JSON.parse('{"label":"ci","permalink":"/blog/tags/ci","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/771f38eb.e0b21c1e.js b/assets/js/771f38eb.e0b21c1e.js new file mode 100644 index 00000000000..12319a6cab5 --- /dev/null +++ b/assets/js/771f38eb.e0b21c1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[71478],{59811:e=>{e.exports=JSON.parse('{"label":"ci","permalink":"/blog/tags/ci","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/77530bb9.68426064.js b/assets/js/77530bb9.68426064.js deleted file mode 100644 index c96c7d6864a..00000000000 --- a/assets/js/77530bb9.68426064.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6070],{35318:(A,I,C)=>{C.d(I,{Zo:()=>V,kt:()=>Z});var g=C(27378);function U(A,I,C){return I in A?Object.defineProperty(A,I,{value:C,enumerable:!0,configurable:!0,writable:!0}):A[I]=C,A}function Q(A,I){var C=Object.keys(A);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(A);I&&(g=g.filter((function(I){return Object.getOwnPropertyDescriptor(A,I).enumerable}))),C.push.apply(C,g)}return C}function F(A){for(var I=1;I<arguments.length;I++){var C=null!=arguments[I]?arguments[I]:{};I%2?Q(Object(C),!0).forEach((function(I){U(A,I,C[I])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(C)):Q(Object(C)).forEach((function(I){Object.defineProperty(A,I,Object.getOwnPropertyDescriptor(C,I))}))}return A}function B(A,I){if(null==A)return{};var C,g,U=function(A,I){if(null==A)return{};var C,g,U={},Q=Object.keys(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||(U[C]=A[C]);return U}(A,I);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||Object.prototype.propertyIsEnumerable.call(A,C)&&(U[C]=A[C])}return U}var E=g.createContext({}),l=function(A){var I=g.useContext(E),C=I;return A&&(C="function"==typeof A?A(I):F(F({},I),A)),C},V=function(A){var I=l(A.components);return g.createElement(E.Provider,{value:I},A.children)},R={inlineCode:"code",wrapper:function(A){var I=A.children;return g.createElement(g.Fragment,{},I)}},e=g.forwardRef((function(A,I){var C=A.components,U=A.mdxType,Q=A.originalType,E=A.parentName,V=B(A,["components","mdxType","originalType","parentName"]),e=l(C),Z=U,a=e["".concat(E,".").concat(Z)]||e[Z]||R[Z]||Q;return C?g.createElement(a,F(F({ref:I},V),{},{components:C})):g.createElement(a,F({ref:I},V))}));function Z(A,I){var C=arguments,U=I&&I.mdxType;if("string"==typeof A||U){var Q=C.length,F=new Array(Q);F[0]=e;var B={};for(var E in I)hasOwnProperty.call(I,E)&&(B[E]=I[E]);B.originalType=A,B.mdxType="string"==typeof A?A:U,F[1]=B;for(var l=2;l<Q;l++)F[l]=C[l];return g.createElement.apply(null,F)}return g.createElement.apply(null,C)}e.displayName="MDXCreateElement"},3580:(A,I,C)=>{C.d(I,{Z:()=>V});var g,U,Q,F,B,E=C(27378);function l(){return l=Object.assign?Object.assign.bind():function(A){for(var I=1;I<arguments.length;I++){var C=arguments[I];for(var g in C)Object.prototype.hasOwnProperty.call(C,g)&&(A[g]=C[g])}return A},l.apply(this,arguments)}const V=A=>{let{title:I,titleId:C,...V}=A;return E.createElement("svg",l({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 326 100",role:"img","aria-labelledby":C},V),I?E.createElement("title",{id:C},I):null,g||(g=E.createElement("path",{fill:"currentColor",d:"M206.776 22.102c-15.275 0-27.655 12.49-27.655 27.9 0 15.41 12.38 27.9 27.655 27.9s27.656-12.49 27.656-27.9c0-15.41-12.381-27.9-27.656-27.9Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072Zm91.569-44.972c-15.275 0-27.656 12.49-27.656 27.9 0 15.41 12.381 27.9 27.656 27.9 15.274 0 27.655-12.49 27.655-27.9 0-15.41-12.381-27.9-27.655-27.9Zm0 44.972c-9.353 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.339 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072ZM117.07 22.102c-15.275 0-27.655 12.49-27.655 27.9v50h10.732V72.035c4.677 3.663 10.545 5.866 16.923 5.866 15.275 0 27.656-12.49 27.656-27.9 0-15.409-12.381-27.899-27.656-27.899Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.57 17.072-16.923 17.072ZM252.346.002h-10.733v54.366c0 13.003 10.452 23.533 23.328 23.533V67.074c-6.954 0-12.595-5.69-12.595-12.706V27.523h12.595V16.695h-12.595V.002Zm-76.428 22.1c-12.889 0-23.327 10.544-23.327 23.534V77.9h10.732V45.636c0-7.016 5.641-12.706 12.595-12.706V22.102Z"})),E.createElement("mask",{id:"a",width:67,height:68,x:0,y:16,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=E.createElement("path",{fill:"#fff",d:"m66.744 63.6-4.61-14.774a21.975 21.975 0 0 1 0-13.139l4.69-15.044c.804-2.569-1.594-4.988-4.14-4.177l-14.913 4.73a21.421 21.421 0 0 1-13.024 0l-14.645-4.65c-2.6-.824-5.011 1.704-4.1 4.286l2.68 7.623a22.06 22.06 0 0 1-1.233 17.451L.392 78.82c-1.514 2.92 1.648 6.056 4.516 4.461L35.94 66.047a21.553 21.553 0 0 1 17.713-1.46l8.843 3.15c2.56.919 5.065-1.528 4.248-4.137Z"}))),E.createElement("g",{mask:"url(#a)"},E.createElement("mask",{id:"b",width:81,height:82,x:-7,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},Q||(Q=E.createElement("path",{fill:"#fff",d:"M73.684 9.545H-6.709v80.914h80.393V9.545Z"}))),F||(F=E.createElement("g",{mask:"url(#b)"},E.createElement("path",{fill:"url(#c)",d:"M-6.963 9.215h81.037v81.752H-6.963z"})))),B||(B=E.createElement("defs",null,E.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},E.createElement("use",{xlinkHref:"#d",transform:"scale(.00794 .00806)"})),E.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1Qmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozMzoyMS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjMzOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzM6MjEtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xNjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFCQUJBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FPOCtkdk5lcTZKZlc2V1hwU0k4UmFTSyYjeEE7VlMyL0lnSDRTcHpiOW5hSEhtaVRLK2ZSek1HbTQ0RW9XVDh3WnRIL0FDNTFMemhySVc0K3FGMmp0NGdJNmt1c1VVVmZpcHlrWWI3NyYjeEE7SEtkZHBvUXpjRU80T0puL0FIZCtTVVJmbUw1KzBEVmROaTg5NlBZMjJuYTBzdjFPZlRKWlpaTGVhS0l6ZWhjckpzek1xa2NvL2hybSYjeEE7TDRjU1BTZVRqK0pJSDFEbWwybS9tdCtZK3NycE5scGVqYVltc2VZb3BkVDB4TGlhWXdXdWx4MFZKTHNvT1R5U09kaEgycFVlRWppaSYjeEE7THNtaDk3RVpaR3FBcy9jeHJ6ZjVxODErWmZNSGxuUTUxZzBIem5vbXVtMm5uaUgxcTFCbXRmVmhualY2Y2xkUDJXeWNJaUlKNXhJWSYjeEE7VGtaRURsSUZtTjMrWXY1azNjbXZYM2xyUjlQdTlDOHIzRTFsZnRleXl4WGQ1TlpMVzYrckxHREdnQit6ejYvZ0t4amp0WjNMWWNrdCYjeEE7Nkd3ZWkrWE5jdGRlMERUdGF0VlpMZlVyZUs2alIvdEtKVURjVzkxclE1VEtOR202TXJGcGprV1RzVmVZdDUvOHl2ZXBZeE5iZ1N6aSYjeEE7TkxyMHlXNHMvRUg3WEdsUGJPbS9rdkNJOFo0dGh5dnljL05vK0VXOU96bVhBZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjViL09uL25KWHo3NUkvTXpXZkwraUhUN3pUb0k3Y1JKZFFNN3dTU1FJNzhYaWxqNUhrMWZqclRwVEZYcDMvS3p2TXVtZiYjeEE7bEg1UzEyVzNoMXZ6WjVyYXl0TENGQ0xlM2E3MUZHbGo5VWl2Qlk0MVBPbmNkdW9WUzdVZnpxODVlVERyZGg1LzBheU9wMk9sTnJHbCYjeEE7WEdqeXl0YVhTQ1pMY3dONjYrcEc2eVNyeWFsS1YyNlZWVmJmOHdQenExUFZaUExHbGFMb2llWk5IdElidnpMUGR6WElzbzN2SGQ3VyYjeEE7MXR4SHlrYVEyNkRrNVBIbnk3QVZWWXhwbm5EVy9PdjVxK1VOYnNuSGwyOHNkTTFDUHpGWnl4aTYrQ3h2NGt2TFZHMnA2Z1g0WkFLaiYjeEE7NTRxbS93RHl1djhBTWxQTGEvbUxONWQwOWZ5NWVaZjNJbmwvVEMyYlRlZ0xvclQwQ0N4RGNCdjlIeFlxOVVsOG9XTjVxTTk3cVRtNyYjeEE7TWgvZHhib2lKMFZkalUwSHZtZkhYeWhBUmg2YWRnZGZJWXhDQTRRT2ZteFQ4NXZLY3N2NVJhOW8zbDNUNUo3bTVlMmtpczdjUEk3cyYjeEE7THVCbktyVmpzaVYyOE1yR29sUElKVExyTlVaVGllcFZiUDhBSnExRjlGZGF0NWcxUFhCWTI4MXRvME4rOGJMYWllTXhOSjhDcDZzZyYjeEE7UTBETi9TbFJ6ZHdBWUREM2tsVnV2eWhzVzBueTdCWWF2ZWFackhsbTNGcHArczJ2QVN0RnhDdWtzYkJrZFc0MTQrT0l6Ym5iWXFjTyYjeEE7dzMzQ0gvNVVob2Y2Rk52K2xMLzlQRytYVlQ1bE1nTjc5Y1ZTaXYwNGNBcDQrblNsUGZmSHh6ZkxidVh3QlhQZnZkcS81TDIxNWU2ayYjeEE7OWo1aDFMU3RPMTEvVjE3VExSb3hEY3lzQXNzaThsSmlhWUQ5NXgrMTh0c1JtcnB5VTRiNjgyZmFacHRscGVuV3VtMkVRZ3NyT0pJTCYjeEE7YUZhMFdPTlFxcnZ2c0JsUk5tMjBDaFNKd0pRMnBXczExWXpXMFV2b1BNdkQxYWNxQS9hMnFPMldZWmlNaElpNmJzR1FRbUpFWFhSSyYjeEE7YmZ5TDVjamlWWkxjenlMdVpuZGcxZXY3SlVETXVYYWVZblkwM1o5ZGt5R3pzbitZRGh1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdU5hR2hvZXhPNHJpcnhueTcvemk1NUdqdXIzVnZPVHllYk5mMUtaN2k4dXB5OXZBSkpYNXQ2VU1UMUcvd0RNN2UxTyYjeEE7bUtvbjgyUHl5aHV2S3ZranluNWJ0YnV6MHF3OHhXVHRKcDd1WjdLMldLNTVYQ1N2NmpKNmJ5QWgyclEweFZWdlArY2ZkUDFQVDlkRyYjeEE7dStZZFExblc5YnRZOVA4QTB6ZCtrWHRyU0taSnhGQkVpcEd2SjR3V1BmMjNxcW5YbS84QUtaTlo4eE41bDBUWDcveXhyZHhiaXkxRyYjeEE7NTA4b1Z1WUYrd0pJNUFSelQ5aHh1UHVvcWhyTDhqUExHbG55ekxvbDVlYWRkZVczZXR5cnJJOTlEY1NDUzdodmVhMGtFNUJxUlRqWCYjeEE7YnRSVkxFLzV4MjBaZU9sTjVnMVIvSkNYUXZJL0tCa1EyWWNTZXFJaTVYMURDSlBpOU92MDEzeFYvOWs9PC94bXBHSW1nOmltYWdlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L3htcDpUaHVtYm5haWxzPgogICAgICAgICA8eG1wTU06UmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwveG1wTU06UmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjczNzkyNDVjLWMyNDctNGFlMi05OTM1LTk0ZjM4NGJkYjMzNjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3Mzc5MjQ1Yy1jMjQ3LTRhZTItOTkzNS05NGYzODRiZGIzMzY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OGE0ODVjMDgtOTQ4Yi00OWUzLTkyYWItNTk5NWRiODI0YjBhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjhhNDg1YzA4LTk0OGItNDllMy05MmFiLTU5OTVkYjgyNGIwYTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpyZW5kaXRpb25DbGFzcz5kZWZhdWx0PC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzM3OTI0NWMtYzI0Ny00YWUyLTk5MzUtOTRmMzg0YmRiMzM2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjMzOjIxLTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAEP/uAA5BZG9iZQBkwAAAAAH/wAARCAB8AH4DABEAAREBAhEB/8QBogABAAECBwEAAAAAAAAAAAAACgkFCAABAgMEBgcLAQACAgIBBQAAAAAAAAAAAAAACQcIBAUCAQMGCgsQAAAEAQIDBAWMAwAAAAAAAAECAwQFAAYHEhMIERUxCRQWIUIKFxgZGiIjJCUmJygpKjIzNDU2Nzg5OkFDREVGR0hJSlFSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+hEAAQIDAwICBwWJAAAAAAAAAQIDAAQRBQYhBxITMQgVFiJBUWEUI0KDkQkKFxgZGiQlJicoKSoyMzQ1Njc4OTpDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanFyc3R1dnd4eXqBgoSFhoeIiYqSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwB/EiCMSIIxIgiGOt71sGcqE6InQPoWxpzA4dBCCyn/ADkha4t4nFIs4QUB1NaHvUFBUZwqGt1ykenIJF1ndOgNImia1i9Go6ZErKcslq/97mETE1MHOk2HBVtttJGbMLSRRTi1AloGqEt5rmvKWNDme4VzpZUqm3LUQFuLxaQoVSlIOCyDpqJGug1ATRWJUM2IsZXSESwoRtmlzEdhQi4+h/Wv60XQzqCM36J8ffQ1CnKWDTqUTnbC6ieoUzdFKPkfrsEQFuUSg1VQEgielEKopTxdeTInkwvXnLtKyZZuaVTb2XBl3KiuJLJQFnXjXRErrrta5qc3xW0rrWDaFVPSzaXDuJGuHpuu0B09iDXDZCl+lD60rgBUGtFehZk8zmOUPInqACaSE1ZyLaimMoaM5NLSWZ5V1vLqHVc5651r7LNanW+m1JmGB06ABLbM52kI8AtDJ2E1VZ0xhsEuD19PYNwfAi+uZdbUrMU+G6SzGi5NiBLHqgKsp6uDzLcNjpETUOmqrOQkOh6leRUKU6S6qahq8pTGMU4Fr1buQfKzd90omLFm5hsUoqVAmkqBJAIDBWsYg1CkJUBQkAEE+GTV27alFUcYWobNGvg9y1O6geYj0eN1oKgRNtMVI5RmoWw0bDxiqSDmfk2AeuofSqmI6YMCxMz6IEXqBypAgmoZU5RKQDGt0vF5DJtlDtRWbZ9hWu6NF0MlMo/mpXhVK16HmIIqCrPUkJBqqgxjXps+fXway6cacGKpXamlB2GLNaJ9pRqz7M1JZvMVrOWirFikXqNhbFea83SuESgBEXsanG1bxJNNZU1cVVrDXhKUpjV4hSAecrpaiPlJtxaXLwrlbHkqiuiLD71DplLTCigkDEpcfaNSBs83NbsOcOL2a2NqandBhupER2UUbSi1oieiazCZaM2qFcMVIukKsCYhHJxqJOCgQxFI3OArtogdJMBqarRk0XTMYTAemAgks5dHUR8mVhLTMW6qatibBBo6vQmAU41DTOaogng5LjriCAAU0zgrJFlMNcHVUdrgN0HwYj/npRBn5REfkik/Z5zpnpEEqqCDudEeicdWakXEgqpNDRJ05tUQNUiBU0qQgAQoAFcUACyFhXau7dmWMpdyRk5CWNKpl2W2gqlaFWYlOccTiqpxJrUmoW0IFEAAbSOkjLfiMdQxjv8AQyoq0QKDs6mM8qHM5ojNmOsTkEVmate0foFGvMwi8OVBRjFocsAjToOE1Exs64DAAh45eu592772O5Yd6JRqbs5waShryDym2sUW2sbBaCFbCtCQewpIUKK0oVFWVK0NCa0tQihE/wBq2QhcebLqQGekCQOJ0oROhgi3UeFaAoqsvYVEUHCbpoJzHOCKwEOYyhDjJQWWDJnOZKr6PXbeWp6zlJD0q6Ri4wsqCc6gA0RBSptygAKklQASpMa9xGYrN2Ef/9B/EiCMSIIxIggg8air6PxiLR2JqVaJRqJPotEFq4Qqz6IulXjtWuETCFUXWMNvERt8nWyEnL2bJM2dKDNlWGkNoGyQhISkdgAAi4bMu3LsoYaFG0JCRtAkUHhBFLEJZYMdVJjaMEuYMY60xxzhLuCMNwRxThLvJjWvCOCpicshMal8RT1Qs5ZKI0cwKxTlAlkpMaN9McI4SyEmNS6mOKYJd4GNe4mNkQlzBjEUmNsQlyBjslMTNWh7jsUTnTRqmxa0c0FcwCa0eFmcxzJpRRlEYjDyum5BNU0DuGj8SLCUoGVBJKmEQTKAUY1NuzpRVkWDa2YBPpmZhnOFKltSELzVHTICkVTU0TnLpwca4U0mgBj/0X8SIIxIgjEiCCn0cKHTihTRcogUPl0qinNucj5CGhXnGqwF4JYnNx1XKru1S2uQB62VpTqqHLT1xjGEBEXCXAvO1fG5dm3lbOcqalUFelg8nXH04BI115C01CUg0qABQC3VgT6bYsaWtJJqXWgVbRY11Y0gMFhQ0hpaQjykSy8xrG1LcbRiy5gxjrbjjnLLuJMYLqI4ahZd9JjVvIjgqFlkJMah9EU9UtnLJQY0j6N1jgKFlkJMaZ9EcI5ZZCTGpdRHFMWXdBjXOIjYMWXcBjDWiNoSy51jsFET1WiJoaKQqYlE2is9STA87Y/DZoQQTgarkh01Gyz+KuUhpAJarEolHk0hu8JhUh43dKAAJ11amnepM5eKybnME0kpZcy7TSK5hQQ2k7HOQhlStIDNeGJxCdXOHXggbAR//9J/EiCMSIIxIgiFq0oVDUWM7Jg0VWSB7VpwwpxM6OKFFMEUopA1FIjBllCiAKmcxKGxBwnXgJiAnDwrwKNvPe3USb1CYsa0rnvqGiyzyZloY1LboCHQNhmoWhB2Bq8dMcGz3kgtIPyczYzh19pYdRsyleuq2lEqSk7Oq9jsIqRTziVws6JmLMbRiS5hUYzjMcU5Jd1KowHWo4ahJd9Ko1TzUcBQkshCo0z7UU9UlnLJQqNJMNRwFCSyUqjTPtRwTkl30mNS83HFMSXeCo1zjUbJiS7gVGGtuNoSS5gxjqbhedZmoYmoOUBKFtDldOpRCb81mqscSBRZUic5Y6u4nFOciR3FcsKBJwxd0CdeUlcSuACkCuKCVMq17BfjKLa96GznS0zOKDRoASw0EssEgYV0FtuuJxrio4nxh9eiOqWNInwmwj//038SIIxIgjEiCLLbSAwFhGKy/PN88TqjibMXmbHIUakRNUX686YXNtRSvVSUUTr4XOBySvTMme71cJhIJyGnbUbrRmZHK1Iy7Bo1NsTLTmJxQJdx8DAgHbxlBooEYVpnAESPkoedRfeWYb4MfbeQrTxSGlObA8pNpONRhpVoQeYUs4kzALi2qpbCNg6UuYXGI5LxxTp5xLvJVGteYjgqJyyEqjUPsRT1U7OWShUaWYZinqp2cslCo0kwzFPUTlkpVGkfZjhHTziWQlUal1mOKZOXdCo17jMbBk5dwKjDWzFy1Y6oYGosVpGhZNdROnhbScSE6o+IqLIp2CTQKacL1sos2vMJWJmh5GZDEEpgUcFu8TAZYqy33tFzsltr2sk0m1ypl2cATosztylQCtdOh55dINRmoOCuDTrLQpLyq3NjSg6acPqwsKScY8Mj/9R/EiCMSIIxIgiw20iU7m0EoBHmyLupvp9TngkNSZEI3UUdQ+COSzjfLnBYQVSaNHcMagZRKvOCqqRBu4c9dYjUZbFdn8o4tbMrL2fKOrKiVAJW6nQEAUwKlJW5QKwzUrUNeSImTIdY7lo3y23BFWJOWcWVY0CnBoSRhgVKCl0CsKJUdMCIGzI5xJiQci3a5SmwjinRziXdSuNe9LRw1ErO3S76Vxqn5aOAqlLJQuNM/LxT1U84lkoVGkmGIpyqecSyUKjRzDEU9ROzlkpVGkfY044R084lkJVGpdYjiHTziXdCo1zjEbIpy7gVGIpiJgrRGzKTXnZRiohLIrEVg03puTNhy5kHINnCc5Yk8jcZSSc1YjQ6zM002AqEFNRQpVyCBkymEFKS6mjbym7GsO7SFJKH5l+ZWKpzklhCWmiU0KqK20OgHOSklChRRFUeI3nOhoaZ5SJVugAG61O6bpORJf0eIR//1X8SIIxIgjEiCIBa2jRmJRhoruGkHcnWmbMEjqbc3hAwCg/fVcozij6RSmUKBYo+bkRSOU1cqzZoHEpTGMUGO5Cbim5FzkvTyQm3LRKX3tmhFNuWTpcI0KKlAiqXHHE1IAJv3keuCu6V0kPTyM22Z/Ned2aE025aOlihJKlAjXXHHE1IAJs5OjnEpwSuJKelY4aiOcS76Vxq3pWOColnEshC40z8tTYRT1UrO3SyULjSzEvSKcqlZyykLjRTEvFNVSllIXGimJeKeonZ26WSlUaN9jTjgnTlkJVGoeYjimTl3QqNe4xGyKcu5nRiFiJqrRIzhRGHUapoqCgm4QezNnG0CmPaw6RdoR2GREaSupAQYHYtbfX14mc5wEqHamfZi9tVg20nOLam5lhXKKSksuIx06rC3OwIjwK+ksW1S7w0iFJO0pmkbrU7pEyMqOx4NH//1n8SIIxIgi1qte0XRoT0IorYa6qE655AtNiblTPSuG1rSBrF4wnXCByWFQ0xqRQMAOlUa+zlLuRW5WtjfVnbUjOseRo+/UYKzTt22dgdEXSo2LaV7KJiyIXGN9r7NCZRnWNIUmH6jXVZp26aOw28XSo2LaXNlEAh0s4kx5K4Yu7LbSOIdLOJd5K41rsttI4SiVnbpZCVxqn5aOAqlLIQuNLMS1IpyqVnLKQuNHMy+nFMVSs5ZSFxoJmXimqp5xLLQqNBMsbSKcqnLJQqNHMMxwVE5ZCVRp3mI4hk5d4KjWuMxsinLuBUYimYvLrAtEG5vK07MSrr1CFz4teodxSuJTnWtpiJWAoJ166BCVSeDKG05hp65MDVxRNS10GakbdrWmyTWjoac6bs/MnW8aAaAToxOBOEst+gFNepUgVjxu9Vn7arEdKRr7VHB2Lwd4YVQmKSp4haP//XfxIgjEiCIB61TRdUowUV4u/YvDuJozbMpNyaCZFRO0VYM1TFexpEgCCRjzgiBTuCq0pVRa1BM9fUi1zHMkFy03JucxLTDYTbU0A/MkjXgtQ11onToyiiCmpSHNEUng81aLkWyeJuHcaXlZpsIt6cAfmiRrwWsa4ydjtwiiCmpSHNFWmmea20GTs7dKVguJRcYjjHSl3UrjXuy8cJRLOJd9K41T8vFPVSziWShcaSYl6DSimKp2dulloXGgmWNpFMWTs5ZSFR4/MsRTFU7OWWhUePzLG6RTVU7OWUhUaGYZinqElkpVGlfajiHJLvpVGrdajYMSXcCoxFtxvsnTqHPWkQYrHbPWDlB6zcp1wKN3TVUi7ddMRAQA6SqYGC3WYS7b7LM0wuWmEhbDiClSTpFKhRQO0IJEdlTKVpKFCqSKHphhblCqe6NEqhpMOf6JUU7a+acCjy7dvTVFm+iMOQXiLAlOdUwWHvzKoDXmPXCmN3hsxTDfCwF3VvVaN3FlR2xTjrIKtNSELIQs0A4PRmq0hp6Q0hXG0ZQyE+9Jmu3Tik47EA4HsIoewx/9B/EiCLQK2XRiPQyoZKQGDuCpTqogEfQJkYphBeHwMW1Tj8WSEhinSXIg5I3QOAgYirgFC29MZTXkMuQm9d6xaM8kmx7NKHlbJbudVls1wIJSVrGkUozTgqLCajlk6Tfa+gtW0EFVhWSUPrw11x7Oqw0aggpKkqcWMQUozFYLiEASyv7WGXlusbYklyCo7CmqxsHTziXcSqMN1iscNROXfSqNU+xFPVTs5ZKFRpZhjTimLJ2cstCo8fmWNOKUsnZyy0Kjx2aZpWKWsSzt0sxCo8cmmopapLOWWhUePTLWnFOULZyykmNI+3HDOWXfSY1TrcccxZdwGMFaI2xCXKsdkpifC0X1ENScdBacUwHSpDuKG06VBYkIJgMjN+eNrUZaFUKY57vmj7eKGpgpSiUQCurymMZc+pa3ZTZd+5W8bIIatWUGedm9LZrSqbTQVS4oamoJrQgCF8ocgJe1m51PBsw3j08iiT4aUfppf/0X5rrotkVnLlZJu3bpKLuHC6hEkUEUiCoqssqoJU0kkkyiYxjCAFAK8Zc223HXEtNJKnVEAACpJOAAAxJJwAGnHNpp191LLKVLeWoJSlIJUpRNAABiSTgAMSYgDrR1Fk1GKilGpyNVlTzcY0sDmmkoRVKlgUPUVqTsUFSkVRVizpRV0YpygclWAhsAAAMeyX3NFyLosWU8kC1HNvZgih29WBVNRUENpCWwQSDmlQ4OxbNkbuAMnVxpaxX0pFsu7fzRBB2/cAqjOFQQ0kJaBBKTmFQ4ONfB66UiRKdBGKWRWOJQDG2YkuYVHZcbjiKEs5d5Ko1jzUU9UlnbpZKFRpZhmKYsSWUhUaCaZilLJ2csxtUeNzbOnFIXJZyzWzHjE23pxSVi2cs1BjxqaRFNUCWUgxoX0xwThLvpMal1MccwS7oMYK0xtiEudY7BTusS1WihZxA87KMj9Mp7C203ZpNHhgWIVMH76JRhaGlM3FQFFTmbw93SnAhipgBgESicANTLUxn5ZNjWHLqI21rmphScDXMQhoL16lAM5bdRUE1BAOaaRdlMUgSsog8JS4sjDYAJrj00p6b2DD/9Jj9bhotWw9DQsyIU5qc4qI9rMNWqR65VnNNsCdj6xqUTUlitWTYlKcoFVRXcCUaZK3T1kAuZrQXqNvziK2ZZeasVGCphVdBG5dFOkg1SpLdRRcWa1F/J/rUX1N559FbHsbNcFRguaVXQANnoVFPkpNUrQyFCi8YYa6V6oZLSMV0iDNjFlIjppdNjSNvl1EcFYiNg5ZdxJjCdRHBUJZyyEmNQ+3FNWJZyykKjRTLUbkHm1Hp1RVtA5tQaJx6MPT0jSGQhi4iD5c1xCm2bJqKiQgDXmNXUpQt4iAW+XGetWzrHk12har7UtItiqnHFpQgdNUogVOwGmdIR4hbU3IWXKrnbSeal5NA15bighI7CogV2Q0zsIvNmZaOWjZOZkWITniU1ZglVIrU4ZEnq8ajhTlOlUTuG0DRdQlBu4SOYwDa8ZchigU6RRERLBdu6k/cKyZgy1ktTlokEVcQkNNUoahKnSlwqBAHCIIINUrNMa6Xgy5XQlHyxZiJmdoRr6UhtvY1oXClZINBwjCTWoUdj3SO2i3nkmZxbO0WZsxMpWxjNBjU3IrAhWd1MwkQcFYvpxg2bCqAAKpRWMBREamIhSjorP1Lmw1BOrOxptolWvaE+29RNcSnPQxnKpjmnNFcM4aY8KTlvs98AzUg82SccxxLlBsxVLdTtMBtdiLNKJlZArQtDAy60aodxWMwhE4FCPzOLbVQs6YpicXKxYSC0UhjYhiiQTvWzYKcAC4iCac7qZbMml7AluQtNlidUOEMzvjuA1pmjRKNuK2NGlrw6Yqnkkhfi7NsgCWmUIeI4Md27V0zXtdUenVKw6YaWtHlLqY3DsbBpdwRhLEc6DQWLTii0OgMBhzyLxqLvG8OhcLh7dR0+fvnShUW7Vq3SKZRZZZQwAUACWPPT8nZkm7aNoutsSDDZW44shKEISKqUpRwAA0zGI+60w0p99QQ0gElRNAANMk7KEo1jes9LVnqhMjBo6mzGfk6HgzgnouzVK6TbuRJUYXAknhCgVwjA2FcUwkEyQu1VzJmMQxTCrDLjlLRlLvkqes8r1nZRvQZUKGaVJrVx4p3CXV4itFaGlsKAUCBXi9tvC3rULzNdsTYzWwcKjYqpsM49hzQmtCKD//053qOtE57Rcomzkneu4VVhp3R4ZNpucytIxmzD1lU4UgiksUhm9rBTmcqkpS17lwoauATDJl+T26bFy7pytiNpAmggOPkUqt9YBcJIrWlA2k1OuIQK0AhvWS25Etk+uTJ3eaQlM6EByZUKVXMuAF1RIqFZpAbQanbttAqQBHkMvNYkOMwGRHIGMDIgV4WMpdY4RtGCXMRjuCsbSbZd0si2bIquHLhVNBu3QTOsuuuscE0kUUkwMoqqqoYClKUBExhrglyU62y2p11QS0kEkkgAACpJJwAAxJOAEauaU2y0p55SUNISSpRIASAKkknAADEk4CL5aDtYLn3PUYfG6JbhWYE2l6g4NCATIpPV60PSqGStSWTO1m6qqkIhTPAUcInwG1GuEJV+vvqRV3rB0SQuqkWlaqap0SpEqhQwrnAhTwBxo2UoUODXhpxVXKFqR12bDLtnXSSm07VTVOi1pKIUMK54IU+AcduiELHBrw04lToZ0IaHlCGEDBphTcaQZJalM/fGMq8jEUWApQFaJRV2dZ65rzFpip0xUEhEQTIQtuCoF6763mvrO7brxzS31p4MRgltsbJDaQEp2RVQrVTX1KOMUxvTfO8l853bdeGZW+scGpwS22NkhtICU7IqoVKprylHGPSpeKx4vGJEEYkQR4pRKrOlBOi4Vc8/KHU3YtEXBAIePN2xoPOUAIoKyd7igyjCMHImsImBM6x0hExgMUSmMBvPLq5Tr+3LKU3dtOZZlkmugqVorGlQ7cuhbQJGFQkKwFCCARu7NvHbdkUEhMuIaG4Cc5Hciqp7CBXa4Clpj20XtZ6dOlnCM46LMOSVOJyMmc45rHati1wBU0TxCZD56YgV2Kiyhs5ySZWNS2ylstJbclbGdWBipTEwFK2pCJpCa9OpA2keUpym3gCQlTcoojYlC6ndHAN0Ai52g3WX6C1AmmdTDmiiScCqNQcztja6kbnOskNWA6aERd16cIRXTWpFkmCTRFcCEFUhzFAQie/OVq/eULbm8U6o2aFVTLNANMA4UJQnFwgiqVPKcUglWYpIJEeM2veW2Lb12edOgVqEJGajdBwdSmBUVEY0Ii4GUbRoY//9SYCTZId5GJEEYkR1jOzCRHXTFdjGUiOMXV0GqyFRNor2qRd+2tiZmqqpmPHI8gsnEIg2GkMoeAQMSkdvq9NQBIssLZocBGkVOYpiSh+/OWu6dzs+Sl17b7cANGmSChCsaB53g1GINUpz3BhnISCDEB5SdSCuTcTRLOlV6s7xhJoywQW21Y0D72KEYg5yEaI6nDObSFBUSsUI6znQvoMkK5mvBzPJxGbmbuZ1xpQr6OrEUAAWTbqAmk1hjdWurjEapJActcBxOIV8qe30yn3tv0otWs+EWZnVTLtDMaBGkSKlThGwLilUPBubpRQ6/2V6+uUVZatuYDdkhWcmVZBQyCNIqFSpxQ2CnFKoeDc3Sj3WUexGEYkQRiRBGJEEYkQRiRBGJEEYkQRiRBH//VQfWmKB0ToNT+fkbslRmROB04iU04kkk4MzbtnKy6gzecOTpFRLFIQBBLUwOcx29TVuIQKxTJTlAlL83cbU64NX8sgImEEpzipIA0ZKQa6G5WtaABecjYAlrGRTKhJZR7qNKecTrTyjaW5pslIWpSUpG2hKQSS07WudQAOZ6Nwgm3CUoRMkYkQR7rQjrOtE6jKcribEHIzm8VcyDmdUaUMxgaJ0xAFk26gJquomulX1xiNklRIauA4kAa8I+vplOuncZJatZ8rtPNqmXaGe6QdIkVCWwdgXFJqODc7SiLsoGWG5GThBZtyYLlsFAUmVZAW+QdIqFQltJ2CnFJqODQrSiVagzWRKGVCi1SMPm1trPJJJMTxyOoIqMIe5u4ZQ8AgglO0YVyiYCRZYXDslvpFiFMYkqe35y1XrvjnyUuvbBYZJo0ySFrTjQPO4KXgTVKcxs4ZyFEAxQ3KRqQl9r+6JZ0qvVZdxSjRlhRDjicaB97Ba8CaoRobSsM5tRSFRdbKHogaMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSII//1nuzim3N+d0IdwCc8Gh0egr4gFdQ2KNEXjRWkMB0lKmsUwJroKAB0lC0qiShQMQxTAAhn2ZatpWLOotKyX3ZaebOurbUUqFcCKjTBGCkmoUCQQQSDs7Htq1rv2g3a1hzL0paTRqlxpRQoVwIqKVSoYKSapUklKgQSDHNRorHlCaaiUNik33M74cWIvFm54cEYYu2LciaNVAW5n0HdRCmERrhqjhQK4LKvrxGz9xMt18rYW7KWkiSdLTYUF6EtKySaa9mOJRuiB8C42TXUib/AFvuPSNros94sthQc0FaVqJNNezHkt06dbTjug9goV1jOgjCGE3p0xKGRmeD55C4RFytJ2RFu7g7Z44atHhwLCoYwhLR+1BQTFqL0rpIxDCBymtwh4TfDLnf6dmJmyJV1iRl0PON50ugpcUlKlJ4SLW4pCqUOc0W1AiqSMax3fzUkMptoTc5YUk/LWdKtvvNZ8q2pDykJUtA29ccdW2qlDnslpQIBSU4g3noIItkUWzZFJu3bpJoN26CZEkUEUiAmkiikmBU0kkkygUpSgAFAK4JQU44464p11RU6okkk1JJxJJOJJOJJ04ra666+6p55SlvLUVKUokqUompJJxJJxJOJMbsuEcIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCP//Z",id:"d",width:126,height:124}))))}},11666:(A,I,C)=>{C.r(I),C.d(I,{assets:()=>E,contentTitle:()=>F,default:()=>R,frontMatter:()=>Q,metadata:()=>B,toc:()=>l});var g=C(25773),U=(C(27378),C(35318));C(76911),C(3580);const Q={slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},F=void 0,B={permalink:"/blog/proto",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx",source:"@site/blog/2023-03-09_proto.mdx",title:"Introducing proto, a next-generation toolchain manager!",description:"We are proud to announce the launch of proto, a next-generation toolchain manager for all",date:"2023-03-09T00:00:00.000Z",formattedDate:"March 9, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:1.89,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},prevItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"},nextItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"}},E={image:C(40469).Z,authorsImageUrls:[void 0]},l=[],V={toc:l};function R(A){let{components:I,...C}=A;return(0,U.kt)("wrapper",(0,g.Z)({},V,C,{components:I,mdxType:"MDXLayout"}),(0,U.kt)("p",null,"We are proud to announce the launch of ",(0,U.kt)("a",{parentName:"p",href:"/proto"},"proto"),", a next-generation toolchain manager for all\nof your favorite programming languages."))}R.isMDXComponent=!0},40469:(A,I,C)=>{C.d(I,{Z:()=>g});const g=C.p+"assets/images/v0-f4d2ad552e3bee8cc7ef8c3e52e2f675.png"}}]); \ No newline at end of file diff --git a/assets/js/77530bb9.887b4f2a.js b/assets/js/77530bb9.887b4f2a.js new file mode 100644 index 00000000000..331a35f40c5 --- /dev/null +++ b/assets/js/77530bb9.887b4f2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46070],{35318:(A,I,C)=>{C.d(I,{Zo:()=>V,kt:()=>Z});var g=C(27378);function U(A,I,C){return I in A?Object.defineProperty(A,I,{value:C,enumerable:!0,configurable:!0,writable:!0}):A[I]=C,A}function Q(A,I){var C=Object.keys(A);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(A);I&&(g=g.filter((function(I){return Object.getOwnPropertyDescriptor(A,I).enumerable}))),C.push.apply(C,g)}return C}function F(A){for(var I=1;I<arguments.length;I++){var C=null!=arguments[I]?arguments[I]:{};I%2?Q(Object(C),!0).forEach((function(I){U(A,I,C[I])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(C)):Q(Object(C)).forEach((function(I){Object.defineProperty(A,I,Object.getOwnPropertyDescriptor(C,I))}))}return A}function B(A,I){if(null==A)return{};var C,g,U=function(A,I){if(null==A)return{};var C,g,U={},Q=Object.keys(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||(U[C]=A[C]);return U}(A,I);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(A);for(g=0;g<Q.length;g++)C=Q[g],I.indexOf(C)>=0||Object.prototype.propertyIsEnumerable.call(A,C)&&(U[C]=A[C])}return U}var E=g.createContext({}),l=function(A){var I=g.useContext(E),C=I;return A&&(C="function"==typeof A?A(I):F(F({},I),A)),C},V=function(A){var I=l(A.components);return g.createElement(E.Provider,{value:I},A.children)},R={inlineCode:"code",wrapper:function(A){var I=A.children;return g.createElement(g.Fragment,{},I)}},e=g.forwardRef((function(A,I){var C=A.components,U=A.mdxType,Q=A.originalType,E=A.parentName,V=B(A,["components","mdxType","originalType","parentName"]),e=l(C),Z=U,a=e["".concat(E,".").concat(Z)]||e[Z]||R[Z]||Q;return C?g.createElement(a,F(F({ref:I},V),{},{components:C})):g.createElement(a,F({ref:I},V))}));function Z(A,I){var C=arguments,U=I&&I.mdxType;if("string"==typeof A||U){var Q=C.length,F=new Array(Q);F[0]=e;var B={};for(var E in I)hasOwnProperty.call(I,E)&&(B[E]=I[E]);B.originalType=A,B.mdxType="string"==typeof A?A:U,F[1]=B;for(var l=2;l<Q;l++)F[l]=C[l];return g.createElement.apply(null,F)}return g.createElement.apply(null,C)}e.displayName="MDXCreateElement"},3580:(A,I,C)=>{C.d(I,{Z:()=>V});var g,U,Q,F,B,E=C(27378);function l(){return l=Object.assign?Object.assign.bind():function(A){for(var I=1;I<arguments.length;I++){var C=arguments[I];for(var g in C)Object.prototype.hasOwnProperty.call(C,g)&&(A[g]=C[g])}return A},l.apply(this,arguments)}const V=A=>{let{title:I,titleId:C,...V}=A;return E.createElement("svg",l({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 326 100",role:"img","aria-labelledby":C},V),I?E.createElement("title",{id:C},I):null,g||(g=E.createElement("path",{fill:"currentColor",d:"M206.776 22.102c-15.275 0-27.655 12.49-27.655 27.9 0 15.41 12.38 27.9 27.655 27.9s27.656-12.49 27.656-27.9c0-15.41-12.381-27.9-27.656-27.9Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072Zm91.569-44.972c-15.275 0-27.656 12.49-27.656 27.9 0 15.41 12.381 27.9 27.656 27.9 15.274 0 27.655-12.49 27.655-27.9 0-15.41-12.381-27.9-27.655-27.9Zm0 44.972c-9.353 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.339 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072ZM117.07 22.102c-15.275 0-27.655 12.49-27.655 27.9v50h10.732V72.035c4.677 3.663 10.545 5.866 16.923 5.866 15.275 0 27.656-12.49 27.656-27.9 0-15.409-12.381-27.899-27.656-27.899Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.57 17.072-16.923 17.072ZM252.346.002h-10.733v54.366c0 13.003 10.452 23.533 23.328 23.533V67.074c-6.954 0-12.595-5.69-12.595-12.706V27.523h12.595V16.695h-12.595V.002Zm-76.428 22.1c-12.889 0-23.327 10.544-23.327 23.534V77.9h10.732V45.636c0-7.016 5.641-12.706 12.595-12.706V22.102Z"})),E.createElement("mask",{id:"a",width:67,height:68,x:0,y:16,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=E.createElement("path",{fill:"#fff",d:"m66.744 63.6-4.61-14.774a21.975 21.975 0 0 1 0-13.139l4.69-15.044c.804-2.569-1.594-4.988-4.14-4.177l-14.913 4.73a21.421 21.421 0 0 1-13.024 0l-14.645-4.65c-2.6-.824-5.011 1.704-4.1 4.286l2.68 7.623a22.06 22.06 0 0 1-1.233 17.451L.392 78.82c-1.514 2.92 1.648 6.056 4.516 4.461L35.94 66.047a21.553 21.553 0 0 1 17.713-1.46l8.843 3.15c2.56.919 5.065-1.528 4.248-4.137Z"}))),E.createElement("g",{mask:"url(#a)"},E.createElement("mask",{id:"b",width:81,height:82,x:-7,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},Q||(Q=E.createElement("path",{fill:"#fff",d:"M73.684 9.545H-6.709v80.914h80.393V9.545Z"}))),F||(F=E.createElement("g",{mask:"url(#b)"},E.createElement("path",{fill:"url(#c)",d:"M-6.963 9.215h81.037v81.752H-6.963z"})))),B||(B=E.createElement("defs",null,E.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},E.createElement("use",{xlinkHref:"#d",transform:"scale(.00794 .00806)"})),E.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1Qmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozMzoyMS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjMzOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzM6MjEtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xNjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFCQUJBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FPOCtkdk5lcTZKZlc2V1hwU0k4UmFTSyYjeEE7VlMyL0lnSDRTcHpiOW5hSEhtaVRLK2ZSek1HbTQ0RW9XVDh3WnRIL0FDNTFMemhySVc0K3FGMmp0NGdJNmt1c1VVVmZpcHlrWWI3NyYjeEE7SEtkZHBvUXpjRU80T0puL0FIZCtTVVJmbUw1KzBEVmROaTg5NlBZMjJuYTBzdjFPZlRKWlpaTGVhS0l6ZWhjckpzek1xa2NvL2hybSYjeEE7TDRjU1BTZVRqK0pJSDFEbWwybS9tdCtZK3NycE5scGVqYVltc2VZb3BkVDB4TGlhWXdXdWx4MFZKTHNvT1R5U09kaEgycFVlRWppaSYjeEE7THNtaDk3RVpaR3FBcy9jeHJ6ZjVxODErWmZNSGxuUTUxZzBIem5vbXVtMm5uaUgxcTFCbXRmVmhualY2Y2xkUDJXeWNJaUlKNXhJWSYjeEE7VGtaRURsSUZtTjMrWXY1azNjbXZYM2xyUjlQdTlDOHIzRTFsZnRleXl4WGQ1TlpMVzYrckxHREdnQit6ejYvZ0t4amp0WjNMWWNrdCYjeEE7Nkd3ZWkrWE5jdGRlMERUdGF0VlpMZlVyZUs2alIvdEtKVURjVzkxclE1VEtOR202TXJGcGprV1RzVmVZdDUvOHl2ZXBZeE5iZ1N6aSYjeEE7TkxyMHlXNHMvRUg3WEdsUGJPbS9rdkNJOFo0dGh5dnljL05vK0VXOU96bVhBZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjViL09uL25KWHo3NUkvTXpXZkwraUhUN3pUb0k3Y1JKZFFNN3dTU1FJNzhYaWxqNUhrMWZqclRwVEZYcDMvS3p2TXVtZiYjeEE7bEg1UzEyVzNoMXZ6WjVyYXl0TENGQ0xlM2E3MUZHbGo5VWl2Qlk0MVBPbmNkdW9WUzdVZnpxODVlVERyZGg1LzBheU9wMk9sTnJHbCYjeEE7WEdqeXl0YVhTQ1pMY3dONjYrcEc2eVNyeWFsS1YyNlZWVmJmOHdQenExUFZaUExHbGFMb2llWk5IdElidnpMUGR6WElzbzN2SGQ3VyYjeEE7MXR4SHlrYVEyNkRrNVBIbnk3QVZWWXhwbm5EVy9PdjVxK1VOYnNuSGwyOHNkTTFDUHpGWnl4aTYrQ3h2NGt2TFZHMnA2Z1g0WkFLaiYjeEE7NTRxbS93RHl1djhBTWxQTGEvbUxONWQwOWZ5NWVaZjNJbmwvVEMyYlRlZ0xvclQwQ0N4RGNCdjlIeFlxOVVsOG9XTjVxTTk3cVRtNyYjeEE7TWgvZHhib2lKMFZkalUwSHZtZkhYeWhBUmg2YWRnZGZJWXhDQTRRT2ZteFQ4NXZLY3N2NVJhOW8zbDNUNUo3bTVlMmtpczdjUEk3cyYjeEE7THVCbktyVmpzaVYyOE1yR29sUElKVExyTlVaVGllcFZiUDhBSnExRjlGZGF0NWcxUFhCWTI4MXRvME4rOGJMYWllTXhOSjhDcDZzZyYjeEE7UTBETi9TbFJ6ZHdBWUREM2tsVnV2eWhzVzBueTdCWWF2ZWFackhsbTNGcHArczJ2QVN0RnhDdWtzYkJrZFc0MTQrT0l6Ym5iWXFjTyYjeEE7dzMzQ0gvNVVob2Y2Rk52K2xMLzlQRytYVlQ1bE1nTjc5Y1ZTaXYwNGNBcDQrblNsUGZmSHh6ZkxidVh3QlhQZnZkcS81TDIxNWU2ayYjeEE7OWo1aDFMU3RPMTEvVjE3VExSb3hEY3lzQXNzaThsSmlhWUQ5NXgrMTh0c1JtcnB5VTRiNjgyZmFacHRscGVuV3VtMkVRZ3NyT0pJTCYjeEE7YUZhMFdPTlFxcnZ2c0JsUk5tMjBDaFNKd0pRMnBXczExWXpXMFV2b1BNdkQxYWNxQS9hMnFPMldZWmlNaElpNmJzR1FRbUpFWFhSSyYjeEE7YmZ5TDVjamlWWkxjenlMdVpuZGcxZXY3SlVETXVYYWVZblkwM1o5ZGt5R3pzbitZRGh1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdU5hR2hvZXhPNHJpcnhueTcvemk1NUdqdXIzVnZPVHllYk5mMUtaN2k4dXB5OXZBSkpYNXQ2VU1UMUcvd0RNN2UxTyYjeEE7bUtvbjgyUHl5aHV2S3ZranluNWJ0YnV6MHF3OHhXVHRKcDd1WjdLMldLNTVYQ1N2NmpKNmJ5QWgyclEweFZWdlArY2ZkUDFQVDlkRyYjeEE7dStZZFExblc5YnRZOVA4QTB6ZCtrWHRyU0taSnhGQkVpcEd2SjR3V1BmMjNxcW5YbS84QUtaTlo4eE41bDBUWDcveXhyZHhiaXkxRyYjeEE7NTA4b1Z1WUYrd0pJNUFSelQ5aHh1UHVvcWhyTDhqUExHbG55ekxvbDVlYWRkZVczZXR5cnJJOTlEY1NDUzdodmVhMGtFNUJxUlRqWCYjeEE7YnRSVkxFLzV4MjBaZU9sTjVnMVIvSkNYUXZJL0tCa1EyWWNTZXFJaTVYMURDSlBpOU92MDEzeFYvOWs9PC94bXBHSW1nOmltYWdlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L3htcDpUaHVtYm5haWxzPgogICAgICAgICA8eG1wTU06UmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwveG1wTU06UmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjczNzkyNDVjLWMyNDctNGFlMi05OTM1LTk0ZjM4NGJkYjMzNjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3Mzc5MjQ1Yy1jMjQ3LTRhZTItOTkzNS05NGYzODRiZGIzMzY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OGE0ODVjMDgtOTQ4Yi00OWUzLTkyYWItNTk5NWRiODI0YjBhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjhhNDg1YzA4LTk0OGItNDllMy05MmFiLTU5OTVkYjgyNGIwYTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpyZW5kaXRpb25DbGFzcz5kZWZhdWx0PC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzM3OTI0NWMtYzI0Ny00YWUyLTk5MzUtOTRmMzg0YmRiMzM2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjMzOjIxLTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAEP/uAA5BZG9iZQBkwAAAAAH/wAARCAB8AH4DABEAAREBAhEB/8QBogABAAECBwEAAAAAAAAAAAAACgkFCAABAgMEBgcLAQACAgIBBQAAAAAAAAAAAAAACQcIBAUCAQMGCgsQAAAEAQIDBAWMAwAAAAAAAAECAwQFAAYHEhMIERUxCRQWIUIKFxgZGiIjJCUmJygpKjIzNDU2Nzg5OkFDREVGR0hJSlFSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+hEAAQIDAwICBwWJAAAAAAAAAQIDAAQRBQYhBxITMQgVFiJBUWEUI0KDkQkKFxgZGiQlJicoKSoyMzQ1Njc4OTpDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanFyc3R1dnd4eXqBgoSFhoeIiYqSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwB/EiCMSIIxIgiGOt71sGcqE6InQPoWxpzA4dBCCyn/ADkha4t4nFIs4QUB1NaHvUFBUZwqGt1ykenIJF1ndOgNImia1i9Go6ZErKcslq/97mETE1MHOk2HBVtttJGbMLSRRTi1AloGqEt5rmvKWNDme4VzpZUqm3LUQFuLxaQoVSlIOCyDpqJGug1ATRWJUM2IsZXSESwoRtmlzEdhQi4+h/Wv60XQzqCM36J8ffQ1CnKWDTqUTnbC6ieoUzdFKPkfrsEQFuUSg1VQEgielEKopTxdeTInkwvXnLtKyZZuaVTb2XBl3KiuJLJQFnXjXRErrrta5qc3xW0rrWDaFVPSzaXDuJGuHpuu0B09iDXDZCl+lD60rgBUGtFehZk8zmOUPInqACaSE1ZyLaimMoaM5NLSWZ5V1vLqHVc5651r7LNanW+m1JmGB06ABLbM52kI8AtDJ2E1VZ0xhsEuD19PYNwfAi+uZdbUrMU+G6SzGi5NiBLHqgKsp6uDzLcNjpETUOmqrOQkOh6leRUKU6S6qahq8pTGMU4Fr1buQfKzd90omLFm5hsUoqVAmkqBJAIDBWsYg1CkJUBQkAEE+GTV27alFUcYWobNGvg9y1O6geYj0eN1oKgRNtMVI5RmoWw0bDxiqSDmfk2AeuofSqmI6YMCxMz6IEXqBypAgmoZU5RKQDGt0vF5DJtlDtRWbZ9hWu6NF0MlMo/mpXhVK16HmIIqCrPUkJBqqgxjXps+fXway6cacGKpXamlB2GLNaJ9pRqz7M1JZvMVrOWirFikXqNhbFea83SuESgBEXsanG1bxJNNZU1cVVrDXhKUpjV4hSAecrpaiPlJtxaXLwrlbHkqiuiLD71DplLTCigkDEpcfaNSBs83NbsOcOL2a2NqandBhupER2UUbSi1oieiazCZaM2qFcMVIukKsCYhHJxqJOCgQxFI3OArtogdJMBqarRk0XTMYTAemAgks5dHUR8mVhLTMW6qatibBBo6vQmAU41DTOaogng5LjriCAAU0zgrJFlMNcHVUdrgN0HwYj/npRBn5REfkik/Z5zpnpEEqqCDudEeicdWakXEgqpNDRJ05tUQNUiBU0qQgAQoAFcUACyFhXau7dmWMpdyRk5CWNKpl2W2gqlaFWYlOccTiqpxJrUmoW0IFEAAbSOkjLfiMdQxjv8AQyoq0QKDs6mM8qHM5ojNmOsTkEVmate0foFGvMwi8OVBRjFocsAjToOE1Exs64DAAh45eu592772O5Yd6JRqbs5waShryDym2sUW2sbBaCFbCtCQewpIUKK0oVFWVK0NCa0tQihE/wBq2QhcebLqQGekCQOJ0oROhgi3UeFaAoqsvYVEUHCbpoJzHOCKwEOYyhDjJQWWDJnOZKr6PXbeWp6zlJD0q6Ri4wsqCc6gA0RBSptygAKklQASpMa9xGYrN2Ef/9B/EiCMSIIxIggg8air6PxiLR2JqVaJRqJPotEFq4Qqz6IulXjtWuETCFUXWMNvERt8nWyEnL2bJM2dKDNlWGkNoGyQhISkdgAAi4bMu3LsoYaFG0JCRtAkUHhBFLEJZYMdVJjaMEuYMY60xxzhLuCMNwRxThLvJjWvCOCpicshMal8RT1Qs5ZKI0cwKxTlAlkpMaN9McI4SyEmNS6mOKYJd4GNe4mNkQlzBjEUmNsQlyBjslMTNWh7jsUTnTRqmxa0c0FcwCa0eFmcxzJpRRlEYjDyum5BNU0DuGj8SLCUoGVBJKmEQTKAUY1NuzpRVkWDa2YBPpmZhnOFKltSELzVHTICkVTU0TnLpwca4U0mgBj/0X8SIIxIgjEiCCn0cKHTihTRcogUPl0qinNucj5CGhXnGqwF4JYnNx1XKru1S2uQB62VpTqqHLT1xjGEBEXCXAvO1fG5dm3lbOcqalUFelg8nXH04BI115C01CUg0qABQC3VgT6bYsaWtJJqXWgVbRY11Y0gMFhQ0hpaQjykSy8xrG1LcbRiy5gxjrbjjnLLuJMYLqI4ahZd9JjVvIjgqFlkJMah9EU9UtnLJQY0j6N1jgKFlkJMaZ9EcI5ZZCTGpdRHFMWXdBjXOIjYMWXcBjDWiNoSy51jsFET1WiJoaKQqYlE2is9STA87Y/DZoQQTgarkh01Gyz+KuUhpAJarEolHk0hu8JhUh43dKAAJ11amnepM5eKybnME0kpZcy7TSK5hQQ2k7HOQhlStIDNeGJxCdXOHXggbAR//9J/EiCMSIIxIgiFq0oVDUWM7Jg0VWSB7VpwwpxM6OKFFMEUopA1FIjBllCiAKmcxKGxBwnXgJiAnDwrwKNvPe3USb1CYsa0rnvqGiyzyZloY1LboCHQNhmoWhB2Bq8dMcGz3kgtIPyczYzh19pYdRsyleuq2lEqSk7Oq9jsIqRTziVws6JmLMbRiS5hUYzjMcU5Jd1KowHWo4ahJd9Ko1TzUcBQkshCo0z7UU9UlnLJQqNJMNRwFCSyUqjTPtRwTkl30mNS83HFMSXeCo1zjUbJiS7gVGGtuNoSS5gxjqbhedZmoYmoOUBKFtDldOpRCb81mqscSBRZUic5Y6u4nFOciR3FcsKBJwxd0CdeUlcSuACkCuKCVMq17BfjKLa96GznS0zOKDRoASw0EssEgYV0FtuuJxrio4nxh9eiOqWNInwmwj//038SIIxIgjEiCLLbSAwFhGKy/PN88TqjibMXmbHIUakRNUX686YXNtRSvVSUUTr4XOBySvTMme71cJhIJyGnbUbrRmZHK1Iy7Bo1NsTLTmJxQJdx8DAgHbxlBooEYVpnAESPkoedRfeWYb4MfbeQrTxSGlObA8pNpONRhpVoQeYUs4kzALi2qpbCNg6UuYXGI5LxxTp5xLvJVGteYjgqJyyEqjUPsRT1U7OWShUaWYZinqp2cslCo0kwzFPUTlkpVGkfZjhHTziWQlUal1mOKZOXdCo17jMbBk5dwKjDWzFy1Y6oYGosVpGhZNdROnhbScSE6o+IqLIp2CTQKacL1sos2vMJWJmh5GZDEEpgUcFu8TAZYqy33tFzsltr2sk0m1ypl2cATosztylQCtdOh55dINRmoOCuDTrLQpLyq3NjSg6acPqwsKScY8Mj/9R/EiCMSIIxIgiw20iU7m0EoBHmyLupvp9TngkNSZEI3UUdQ+COSzjfLnBYQVSaNHcMagZRKvOCqqRBu4c9dYjUZbFdn8o4tbMrL2fKOrKiVAJW6nQEAUwKlJW5QKwzUrUNeSImTIdY7lo3y23BFWJOWcWVY0CnBoSRhgVKCl0CsKJUdMCIGzI5xJiQci3a5SmwjinRziXdSuNe9LRw1ErO3S76Vxqn5aOAqlLJQuNM/LxT1U84lkoVGkmGIpyqecSyUKjRzDEU9ROzlkpVGkfY044R084lkJVGpdYjiHTziXdCo1zjEbIpy7gVGIpiJgrRGzKTXnZRiohLIrEVg03puTNhy5kHINnCc5Yk8jcZSSc1YjQ6zM002AqEFNRQpVyCBkymEFKS6mjbym7GsO7SFJKH5l+ZWKpzklhCWmiU0KqK20OgHOSklChRRFUeI3nOhoaZ5SJVugAG61O6bpORJf0eIR//1X8SIIxIgjEiCIBa2jRmJRhoruGkHcnWmbMEjqbc3hAwCg/fVcozij6RSmUKBYo+bkRSOU1cqzZoHEpTGMUGO5Cbim5FzkvTyQm3LRKX3tmhFNuWTpcI0KKlAiqXHHE1IAJv3keuCu6V0kPTyM22Z/Ned2aE025aOlihJKlAjXXHHE1IAJs5OjnEpwSuJKelY4aiOcS76Vxq3pWOColnEshC40z8tTYRT1UrO3SyULjSzEvSKcqlZyykLjRTEvFNVSllIXGimJeKeonZ26WSlUaN9jTjgnTlkJVGoeYjimTl3QqNe4xGyKcu5nRiFiJqrRIzhRGHUapoqCgm4QezNnG0CmPaw6RdoR2GREaSupAQYHYtbfX14mc5wEqHamfZi9tVg20nOLam5lhXKKSksuIx06rC3OwIjwK+ksW1S7w0iFJO0pmkbrU7pEyMqOx4NH//1n8SIIxIgi1qte0XRoT0IorYa6qE655AtNiblTPSuG1rSBrF4wnXCByWFQ0xqRQMAOlUa+zlLuRW5WtjfVnbUjOseRo+/UYKzTt22dgdEXSo2LaV7KJiyIXGN9r7NCZRnWNIUmH6jXVZp26aOw28XSo2LaXNlEAh0s4kx5K4Yu7LbSOIdLOJd5K41rsttI4SiVnbpZCVxqn5aOAqlLIQuNLMS1IpyqVnLKQuNHMy+nFMVSs5ZSFxoJmXimqp5xLLQqNBMsbSKcqnLJQqNHMMxwVE5ZCVRp3mI4hk5d4KjWuMxsinLuBUYimYvLrAtEG5vK07MSrr1CFz4teodxSuJTnWtpiJWAoJ166BCVSeDKG05hp65MDVxRNS10GakbdrWmyTWjoac6bs/MnW8aAaAToxOBOEst+gFNepUgVjxu9Vn7arEdKRr7VHB2Lwd4YVQmKSp4haP//XfxIgjEiCIB61TRdUowUV4u/YvDuJozbMpNyaCZFRO0VYM1TFexpEgCCRjzgiBTuCq0pVRa1BM9fUi1zHMkFy03JucxLTDYTbU0A/MkjXgtQ11onToyiiCmpSHNEUng81aLkWyeJuHcaXlZpsIt6cAfmiRrwWsa4ydjtwiiCmpSHNFWmmea20GTs7dKVguJRcYjjHSl3UrjXuy8cJRLOJd9K41T8vFPVSziWShcaSYl6DSimKp2dulloXGgmWNpFMWTs5ZSFR4/MsRTFU7OWWhUePzLG6RTVU7OWUhUaGYZinqElkpVGlfajiHJLvpVGrdajYMSXcCoxFtxvsnTqHPWkQYrHbPWDlB6zcp1wKN3TVUi7ddMRAQA6SqYGC3WYS7b7LM0wuWmEhbDiClSTpFKhRQO0IJEdlTKVpKFCqSKHphhblCqe6NEqhpMOf6JUU7a+acCjy7dvTVFm+iMOQXiLAlOdUwWHvzKoDXmPXCmN3hsxTDfCwF3VvVaN3FlR2xTjrIKtNSELIQs0A4PRmq0hp6Q0hXG0ZQyE+9Jmu3Tik47EA4HsIoewx/9B/EiCLQK2XRiPQyoZKQGDuCpTqogEfQJkYphBeHwMW1Tj8WSEhinSXIg5I3QOAgYirgFC29MZTXkMuQm9d6xaM8kmx7NKHlbJbudVls1wIJSVrGkUozTgqLCajlk6Tfa+gtW0EFVhWSUPrw11x7Oqw0aggpKkqcWMQUozFYLiEASyv7WGXlusbYklyCo7CmqxsHTziXcSqMN1iscNROXfSqNU+xFPVTs5ZKFRpZhjTimLJ2cstCo8fmWNOKUsnZyy0Kjx2aZpWKWsSzt0sxCo8cmmopapLOWWhUePTLWnFOULZyykmNI+3HDOWXfSY1TrcccxZdwGMFaI2xCXKsdkpifC0X1ENScdBacUwHSpDuKG06VBYkIJgMjN+eNrUZaFUKY57vmj7eKGpgpSiUQCurymMZc+pa3ZTZd+5W8bIIatWUGedm9LZrSqbTQVS4oamoJrQgCF8ocgJe1m51PBsw3j08iiT4aUfppf/0X5rrotkVnLlZJu3bpKLuHC6hEkUEUiCoqssqoJU0kkkyiYxjCAFAK8Zc223HXEtNJKnVEAACpJOAAAxJJwAGnHNpp191LLKVLeWoJSlIJUpRNAABiSTgAMSYgDrR1Fk1GKilGpyNVlTzcY0sDmmkoRVKlgUPUVqTsUFSkVRVizpRV0YpygclWAhsAAAMeyX3NFyLosWU8kC1HNvZgih29WBVNRUENpCWwQSDmlQ4OxbNkbuAMnVxpaxX0pFsu7fzRBB2/cAqjOFQQ0kJaBBKTmFQ4ONfB66UiRKdBGKWRWOJQDG2YkuYVHZcbjiKEs5d5Ko1jzUU9UlnbpZKFRpZhmKYsSWUhUaCaZilLJ2csxtUeNzbOnFIXJZyzWzHjE23pxSVi2cs1BjxqaRFNUCWUgxoX0xwThLvpMal1MccwS7oMYK0xtiEudY7BTusS1WihZxA87KMj9Mp7C203ZpNHhgWIVMH76JRhaGlM3FQFFTmbw93SnAhipgBgESicANTLUxn5ZNjWHLqI21rmphScDXMQhoL16lAM5bdRUE1BAOaaRdlMUgSsog8JS4sjDYAJrj00p6b2DD/9Jj9bhotWw9DQsyIU5qc4qI9rMNWqR65VnNNsCdj6xqUTUlitWTYlKcoFVRXcCUaZK3T1kAuZrQXqNvziK2ZZeasVGCphVdBG5dFOkg1SpLdRRcWa1F/J/rUX1N559FbHsbNcFRguaVXQANnoVFPkpNUrQyFCi8YYa6V6oZLSMV0iDNjFlIjppdNjSNvl1EcFYiNg5ZdxJjCdRHBUJZyyEmNQ+3FNWJZyykKjRTLUbkHm1Hp1RVtA5tQaJx6MPT0jSGQhi4iD5c1xCm2bJqKiQgDXmNXUpQt4iAW+XGetWzrHk12har7UtItiqnHFpQgdNUogVOwGmdIR4hbU3IWXKrnbSeal5NA15bighI7CogV2Q0zsIvNmZaOWjZOZkWITniU1ZglVIrU4ZEnq8ajhTlOlUTuG0DRdQlBu4SOYwDa8ZchigU6RRERLBdu6k/cKyZgy1ktTlokEVcQkNNUoahKnSlwqBAHCIIINUrNMa6Xgy5XQlHyxZiJmdoRr6UhtvY1oXClZINBwjCTWoUdj3SO2i3nkmZxbO0WZsxMpWxjNBjU3IrAhWd1MwkQcFYvpxg2bCqAAKpRWMBREamIhSjorP1Lmw1BOrOxptolWvaE+29RNcSnPQxnKpjmnNFcM4aY8KTlvs98AzUg82SccxxLlBsxVLdTtMBtdiLNKJlZArQtDAy60aodxWMwhE4FCPzOLbVQs6YpicXKxYSC0UhjYhiiQTvWzYKcAC4iCac7qZbMml7AluQtNlidUOEMzvjuA1pmjRKNuK2NGlrw6Yqnkkhfi7NsgCWmUIeI4Md27V0zXtdUenVKw6YaWtHlLqY3DsbBpdwRhLEc6DQWLTii0OgMBhzyLxqLvG8OhcLh7dR0+fvnShUW7Vq3SKZRZZZQwAUACWPPT8nZkm7aNoutsSDDZW44shKEISKqUpRwAA0zGI+60w0p99QQ0gElRNAANMk7KEo1jes9LVnqhMjBo6mzGfk6HgzgnouzVK6TbuRJUYXAknhCgVwjA2FcUwkEyQu1VzJmMQxTCrDLjlLRlLvkqes8r1nZRvQZUKGaVJrVx4p3CXV4itFaGlsKAUCBXi9tvC3rULzNdsTYzWwcKjYqpsM49hzQmtCKD//053qOtE57Rcomzkneu4VVhp3R4ZNpucytIxmzD1lU4UgiksUhm9rBTmcqkpS17lwoauATDJl+T26bFy7pytiNpAmggOPkUqt9YBcJIrWlA2k1OuIQK0AhvWS25Etk+uTJ3eaQlM6EByZUKVXMuAF1RIqFZpAbQanbttAqQBHkMvNYkOMwGRHIGMDIgV4WMpdY4RtGCXMRjuCsbSbZd0si2bIquHLhVNBu3QTOsuuuscE0kUUkwMoqqqoYClKUBExhrglyU62y2p11QS0kEkkgAACpJJwAAxJOAEauaU2y0p55SUNISSpRIASAKkknAADEk4CL5aDtYLn3PUYfG6JbhWYE2l6g4NCATIpPV60PSqGStSWTO1m6qqkIhTPAUcInwG1GuEJV+vvqRV3rB0SQuqkWlaqap0SpEqhQwrnAhTwBxo2UoUODXhpxVXKFqR12bDLtnXSSm07VTVOi1pKIUMK54IU+AcduiELHBrw04lToZ0IaHlCGEDBphTcaQZJalM/fGMq8jEUWApQFaJRV2dZ65rzFpip0xUEhEQTIQtuCoF6763mvrO7brxzS31p4MRgltsbJDaQEp2RVQrVTX1KOMUxvTfO8l853bdeGZW+scGpwS22NkhtICU7IqoVKprylHGPSpeKx4vGJEEYkQR4pRKrOlBOi4Vc8/KHU3YtEXBAIePN2xoPOUAIoKyd7igyjCMHImsImBM6x0hExgMUSmMBvPLq5Tr+3LKU3dtOZZlkmugqVorGlQ7cuhbQJGFQkKwFCCARu7NvHbdkUEhMuIaG4Cc5Hciqp7CBXa4Clpj20XtZ6dOlnCM46LMOSVOJyMmc45rHati1wBU0TxCZD56YgV2Kiyhs5ySZWNS2ylstJbclbGdWBipTEwFK2pCJpCa9OpA2keUpym3gCQlTcoojYlC6ndHAN0Ai52g3WX6C1AmmdTDmiiScCqNQcztja6kbnOskNWA6aERd16cIRXTWpFkmCTRFcCEFUhzFAQie/OVq/eULbm8U6o2aFVTLNANMA4UJQnFwgiqVPKcUglWYpIJEeM2veW2Lb12edOgVqEJGajdBwdSmBUVEY0Ii4GUbRoY//9SYCTZId5GJEEYkR1jOzCRHXTFdjGUiOMXV0GqyFRNor2qRd+2tiZmqqpmPHI8gsnEIg2GkMoeAQMSkdvq9NQBIssLZocBGkVOYpiSh+/OWu6dzs+Sl17b7cANGmSChCsaB53g1GINUpz3BhnISCDEB5SdSCuTcTRLOlV6s7xhJoywQW21Y0D72KEYg5yEaI6nDObSFBUSsUI6znQvoMkK5mvBzPJxGbmbuZ1xpQr6OrEUAAWTbqAmk1hjdWurjEapJActcBxOIV8qe30yn3tv0otWs+EWZnVTLtDMaBGkSKlThGwLilUPBubpRQ6/2V6+uUVZatuYDdkhWcmVZBQyCNIqFSpxQ2CnFKoeDc3Sj3WUexGEYkQRiRBGJEEYkQRiRBGJEEYkQRiRBH//VQfWmKB0ToNT+fkbslRmROB04iU04kkk4MzbtnKy6gzecOTpFRLFIQBBLUwOcx29TVuIQKxTJTlAlL83cbU64NX8sgImEEpzipIA0ZKQa6G5WtaABecjYAlrGRTKhJZR7qNKecTrTyjaW5pslIWpSUpG2hKQSS07WudQAOZ6Nwgm3CUoRMkYkQR7rQjrOtE6jKcribEHIzm8VcyDmdUaUMxgaJ0xAFk26gJquomulX1xiNklRIauA4kAa8I+vplOuncZJatZ8rtPNqmXaGe6QdIkVCWwdgXFJqODc7SiLsoGWG5GThBZtyYLlsFAUmVZAW+QdIqFQltJ2CnFJqODQrSiVagzWRKGVCi1SMPm1trPJJJMTxyOoIqMIe5u4ZQ8AgglO0YVyiYCRZYXDslvpFiFMYkqe35y1XrvjnyUuvbBYZJo0ySFrTjQPO4KXgTVKcxs4ZyFEAxQ3KRqQl9r+6JZ0qvVZdxSjRlhRDjicaB97Ba8CaoRobSsM5tRSFRdbKHogaMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSII//1nuzim3N+d0IdwCc8Gh0egr4gFdQ2KNEXjRWkMB0lKmsUwJroKAB0lC0qiShQMQxTAAhn2ZatpWLOotKyX3ZaebOurbUUqFcCKjTBGCkmoUCQQQSDs7Htq1rv2g3a1hzL0paTRqlxpRQoVwIqKVSoYKSapUklKgQSDHNRorHlCaaiUNik33M74cWIvFm54cEYYu2LciaNVAW5n0HdRCmERrhqjhQK4LKvrxGz9xMt18rYW7KWkiSdLTYUF6EtKySaa9mOJRuiB8C42TXUib/AFvuPSNros94sthQc0FaVqJNNezHkt06dbTjug9goV1jOgjCGE3p0xKGRmeD55C4RFytJ2RFu7g7Z44atHhwLCoYwhLR+1BQTFqL0rpIxDCBymtwh4TfDLnf6dmJmyJV1iRl0PON50ugpcUlKlJ4SLW4pCqUOc0W1AiqSMax3fzUkMptoTc5YUk/LWdKtvvNZ8q2pDykJUtA29ccdW2qlDnslpQIBSU4g3noIItkUWzZFJu3bpJoN26CZEkUEUiAmkiikmBU0kkkygUpSgAFAK4JQU44464p11RU6okkk1JJxJJOJJOJJ04ra666+6p55SlvLUVKUokqUompJJxJJxJOJMbsuEcIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCP//Z",id:"d",width:126,height:124}))))}},11666:(A,I,C)=>{C.r(I),C.d(I,{assets:()=>E,contentTitle:()=>F,default:()=>R,frontMatter:()=>Q,metadata:()=>B,toc:()=>l});var g=C(25773),U=(C(27378),C(35318));C(76911),C(3580);const Q={slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},F=void 0,B={permalink:"/blog/proto",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx",source:"@site/blog/2023-03-09_proto.mdx",title:"Introducing proto, a next-generation toolchain manager!",description:"We are proud to announce the launch of proto, a next-generation toolchain manager for all",date:"2023-03-09T00:00:00.000Z",formattedDate:"March 9, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:1.89,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},prevItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"},nextItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"}},E={image:C(40469).Z,authorsImageUrls:[void 0]},l=[],V={toc:l};function R(A){let{components:I,...C}=A;return(0,U.kt)("wrapper",(0,g.Z)({},V,C,{components:I,mdxType:"MDXLayout"}),(0,U.kt)("p",null,"We are proud to announce the launch of ",(0,U.kt)("a",{parentName:"p",href:"/proto"},"proto"),", a next-generation toolchain manager for all\nof your favorite programming languages."))}R.isMDXComponent=!0},40469:(A,I,C)=>{C.d(I,{Z:()=>g});const g=C.p+"assets/images/v0-f4d2ad552e3bee8cc7ef8c3e52e2f675.png"}}]); \ No newline at end of file diff --git a/assets/js/77b7a366.caef0281.js b/assets/js/77b7a366.caef0281.js new file mode 100644 index 00000000000..cf206f5d522 --- /dev/null +++ b/assets/js/77b7a366.caef0281.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[25624],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),s=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),f=n,g=u["".concat(p,".").concat(f)]||u[f]||m[f]||a;return r?o.createElement(g,i(i({ref:t},c),{},{components:r})):o.createElement(g,i({ref:t},c))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},2335:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));const a={slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},i=void 0,l={permalink:"/blog/proto-v0.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx",source:"@site/blog/2023-04-28_proto-v0.8.mdx",title:"proto v0.8 - Version detection and installation improvements",description:"In this release, we're dropping some quality of life workflow improvements.",date:"2023-04-28T00:00:00.000Z",formattedDate:"April 28, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"detect",permalink:"/blog/tags/detect"}],readingTime:1.295,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},prevItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"},nextItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"}},p={image:r(62681).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"In this release, we're dropping some quality of life workflow improvements."))}m.isMDXComponent=!0},62681:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/v0.8-9fbf22972083ec9959ca9045d7ea8f95.png"}}]); \ No newline at end of file diff --git a/assets/js/77b7a366.f922420b.js b/assets/js/77b7a366.f922420b.js deleted file mode 100644 index a545ed8baa3..00000000000 --- a/assets/js/77b7a366.f922420b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5624],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),s=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),f=n,g=u["".concat(p,".").concat(f)]||u[f]||m[f]||a;return r?o.createElement(g,i(i({ref:t},c),{},{components:r})):o.createElement(g,i({ref:t},c))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}u.displayName="MDXCreateElement"},2335:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));const a={slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},i=void 0,l={permalink:"/blog/proto-v0.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx",source:"@site/blog/2023-04-28_proto-v0.8.mdx",title:"proto v0.8 - Version detection and installation improvements",description:"In this release, we're dropping some quality of life workflow improvements.",date:"2023-04-28T00:00:00.000Z",formattedDate:"April 28, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"detect",permalink:"/blog/tags/detect"}],readingTime:1.295,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},prevItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"},nextItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"}},p={image:r(62681).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"In this release, we're dropping some quality of life workflow improvements."))}m.isMDXComponent=!0},62681:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/v0.8-9fbf22972083ec9959ca9045d7ea8f95.png"}}]); \ No newline at end of file diff --git a/assets/js/780.d5e09d6d.js b/assets/js/780.d5e09d6d.js deleted file mode 100644 index 7e90f04515f..00000000000 --- a/assets/js/780.d5e09d6d.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[780],{30780:(e,t,n)=>{"use strict";n.d(t,{Z:()=>H});var o=n(25773),r=n(27378),s=n(76457),c=n(37140),a=n(6499),l=n(75484),i=n(90433);const u="codeBlockContainer_mQmQ";function p(e){let{as:t,...n}=e;const s=(0,a.p)(),p=(0,i.QC)(s);return r.createElement(t,(0,o.Z)({},n,{style:p,className:(0,c.Z)(n.className,u,l.k.common.codeBlock)}))}const d={codeBlockContent:"codeBlockContent_D5yF",codeBlockTitle:"codeBlockTitle_x_ju",codeBlock:"codeBlock_RMoD",codeBlockStandalone:"codeBlockStandalone_wQog",codeBlockLines:"codeBlockLines_AclH",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_O625",buttonGroup:"buttonGroup_aaMX"};function m(e){let{children:t,className:n}=e;return r.createElement(p,{as:"pre",tabIndex:0,className:(0,c.Z)(d.codeBlockStandalone,"thin-scrollbar",n)},r.createElement("code",{className:d.codeBlockLines},t))}var g=n(20624),f=n(96177);const y={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var h={Prism:n(52349).Z,theme:y};function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(){return k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},k.apply(this,arguments)}var v=/\r\n|\r|\n/,E=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},B=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},N=function(e,t){var n=e.plain,o=Object.create(null),r=e.styles.reduce((function(e,n){var o=n.languages,r=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=k({},e[t],r);e[t]=n})),e}),o);return r.root=n,r.plain=k({},n,{backgroundColor:null}),r};function C(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}const w=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),b(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?N(e.theme,e.language):void 0;return t.themeDict=n})),b(this,"getLineProps",(function(e){var n=e.key,o=e.className,r=e.style,s=k({},C(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(s.style=c.plain),void 0!==r&&(s.style=void 0!==s.style?k({},s.style,r):r),void 0!==n&&(s.key=n),o&&(s.className+=" "+o),s})),b(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,r=n.length,s=t.getThemeDict(t.props);if(void 0!==s){if(1===r&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===r&&!o)return s[n[0]];var c=o?{display:"inline-block"}:{},a=n.map((function(e){return s[e]}));return Object.assign.apply(Object,[c].concat(a))}})),b(this,"getTokenProps",(function(e){var n=e.key,o=e.className,r=e.style,s=e.token,c=k({},C(e,["key","className","style","token"]),{className:"token "+s.types.join(" "),children:s.content,style:t.getStyleForToken(s),key:void 0});return void 0!==r&&(c.style=void 0!==c.style?k({},c.style,r):r),void 0!==n&&(c.key=n),o&&(c.className+=" "+o),c})),b(this,"tokenize",(function(e,t,n,o){var r={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",r);var s=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),s}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,r=e.children,s=this.getThemeDict(this.props),c=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],o=[0],r=[e.length],s=0,c=0,a=[],l=[a];c>-1;){for(;(s=o[c]++)<r[c];){var i=void 0,u=t[c],p=n[c][s];if("string"==typeof p?(u=c>0?u:["plain"],i=p):(u=B(u,p.type),p.alias&&(u=B(u,p.alias)),i=p.content),"string"==typeof i){var d=i.split(v),m=d.length;a.push({types:u,content:d[0]});for(var g=1;g<m;g++)E(a),l.push(a=[]),a.push({types:u,content:d[g]})}else c++,t.push(u),n.push(i),o.push(0),r.push(i.length)}c--,t.pop(),n.pop(),o.pop(),r.pop()}return E(a),l}(void 0!==c?this.tokenize(t,o,c,n):[o]),className:"prism-code language-"+n,style:void 0!==s?s.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(r.Component),L="codeLine_FAqz",j="codeLineNumber_BE9Z",T="codeLineContent_EF2y";function x(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:l}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const i=a({line:t,className:(0,c.Z)(n,s&&L)}),u=t.map(((e,t)=>r.createElement("span",(0,o.Z)({key:t},l({token:e,key:t})))));return r.createElement("span",i,s?r.createElement(r.Fragment,null,r.createElement("span",{className:j}),r.createElement("span",{className:T},u)):u,r.createElement("br",null))}var Z=n(99213);function O(e){return r.createElement("svg",(0,o.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function S(e){return r.createElement("svg",(0,o.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const _={copyButtonCopied:"copyButtonCopied_TYdd",copyButtonIcons:"copyButtonIcons_z5j7",copyButtonIcon:"copyButtonIcon_FoOz",copyButtonSuccessIcon:"copyButtonSuccessIcon_L0B6"};function I(e){let{code:t,className:n}=e;const[o,s]=(0,r.useState)(!1),a=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;const o=document.createElement("textarea"),r=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const s=document.getSelection();let c=!1;s.rangeCount>0&&(c=s.getRangeAt(0)),n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let a=!1;try{a=document.execCommand("copy")}catch{}o.remove(),c&&(s.removeAllRanges(),s.addRange(c)),r&&r.focus()}(t),s(!0),a.current=window.setTimeout((()=>{s(!1)}),1e3)}),[t]);return(0,r.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),r.createElement("button",{type:"button","aria-label":o?(0,Z.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,Z.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,Z.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",n,_.copyButton,o&&_.copyButtonCopied),onClick:l},r.createElement("span",{className:_.copyButtonIcons,"aria-hidden":"true"},r.createElement(O,{className:_.copyButtonIcon}),r.createElement(S,{className:_.copyButtonSuccessIcon})))}function A(e){return r.createElement("svg",(0,o.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const P="wordWrapButtonIcon_HV9T",z="wordWrapButtonEnabled_XzR1";function D(e){let{className:t,onClick:n,isEnabled:o}=e;const s=(0,Z.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return r.createElement("button",{type:"button",onClick:n,className:(0,c.Z)("clean-btn",t,o&&z),"aria-label":s,title:s},r.createElement(A,{className:P,"aria-hidden":"true"}))}function $(e){let{children:t,className:n="",metastring:s,title:l,showLineNumbers:u,language:m}=e;const{prism:{defaultLanguage:y,magicComments:b}}=(0,g.L)(),k=m??(0,i.Vo)(n)??y,v=(0,a.p)(),E=(0,f.F)(),B=(0,i.bc)(s)||l,{lineClassNames:N,code:C}=(0,i.nZ)(t,{metastring:s,language:k,magicComments:b}),L=u??(0,i.nt)(s);return r.createElement(p,{as:"div",className:(0,c.Z)(n,k&&!n.includes(`language-${k}`)&&`language-${k}`)},B&&r.createElement("div",{className:d.codeBlockTitle},B),r.createElement("div",{className:d.codeBlockContent},r.createElement(w,(0,o.Z)({},h,{theme:v,code:C,language:k??"text"}),(e=>{let{className:t,tokens:n,getLineProps:o,getTokenProps:s}=e;return r.createElement("pre",{tabIndex:0,ref:E.codeBlockRef,className:(0,c.Z)(t,d.codeBlock,"thin-scrollbar")},r.createElement("code",{className:(0,c.Z)(d.codeBlockLines,L&&d.codeBlockLinesWithNumbering)},n.map(((e,t)=>r.createElement(x,{key:t,line:e,getLineProps:o,getTokenProps:s,classNames:N[t],showLineNumbers:L})))))})),r.createElement("div",{className:d.buttonGroup},(E.isEnabled||E.isCodeScrollable)&&r.createElement(D,{className:d.codeButton,onClick:()=>E.toggle(),isEnabled:E.isEnabled}),r.createElement(I,{className:d.codeButton,code:C}))))}function H(e){let{children:t,...n}=e;const c=(0,s.Z)(),a=function(e){return r.Children.toArray(e).some((e=>(0,r.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof a?$:m;return r.createElement(l,(0,o.Z)({key:String(c)},n),a)}},96177:(e,t,n)=>{"use strict";n.d(t,{F:()=>a});var o=n(27378),r=n(41763);const s={attributes:!0,characterData:!0,childList:!0,subtree:!0};function c(e,t){const[n,c]=(0,o.useState)(),a=(0,o.useCallback)((()=>{c(e.current?.closest("[role=tabpanel][hidden]"))}),[e,c]);(0,o.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=s);const c=(0,r.zX)(t),a=(0,r.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(c);return e&&t.observe(e,a),()=>t.disconnect()}),[e,c,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function a(){const[e,t]=(0,o.useState)(!1),[n,r]=(0,o.useState)(!1),s=(0,o.useRef)(null),a=(0,o.useCallback)((()=>{const n=s.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[s,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=s.current,n=e>t||s.current.querySelector("code").hasAttribute("style");r(n)}),[s]);return c(s,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:n,toggle:a}}},6499:(e,t,n)=>{"use strict";n.d(t,{p:()=>s});var o=n(55421),r=n(20624);function s(){const{prism:e}=(0,r.L)(),{colorMode:t}=(0,o.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}},90433:(e,t,n)=>{"use strict";n.d(t,{QC:()=>m,Vo:()=>p,bc:()=>i,nZ:()=>d,nt:()=>u});var o=n(6324),r=n.n(o);const s=/title=(?<quote>["'])(?<title>.*?)\1/,c=/\{(?<range>[\d,-]+)\}/,a={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function l(e,t){const n=e.map((e=>{const{start:n,end:o}=a[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function i(e){return e?.match(s)?.groups.title??""}function u(e){return Boolean(e?.includes("showLineNumbers"))}function p(e){return e.split(" ").find((e=>e.startsWith("language-")))?.replace(/language-/,"")}function d(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:s,metastring:i}=t;if(i&&c.test(i)){const e=i.match(c).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=s[0].className,o=r()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const u=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return l(["js","jsBlock"],t);case"jsx":case"tsx":return l(["js","jsBlock","jsx"],t);case"html":return l(["js","jsBlock","html"],t);case"python":case"py":case"bash":return l(["bash"],t);case"markdown":case"md":return l(["html","jsx","bash"],t);default:return l(Object.keys(a),t)}}(o,s),p=n.split("\n"),d=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),m=Object.fromEntries(s.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),g=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),f=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let r=0;r<p.length;){const e=p[r].match(u);if(!e){r+=1;continue}const t=e.slice(1).find((e=>void 0!==e));m[t]?d[m[t]].range+=`${r},`:g[t]?d[g[t]].start=r:f[t]&&(d[f[t]].range+=`${d[f[t]].start}-${r-1},`),p.splice(r,1)}n=p.join("\n");const y={};return Object.entries(d).forEach((e=>{let[t,{range:n}]=e;r()(n).forEach((e=>{y[e]??=[],y[e].push(t)}))})),{lineClassNames:y,code:n}}function m(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,r]=e;const s=t[o];s&&"string"==typeof r&&(n[s]=r)})),n}},6324:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,r,s]=t;if(o&&s){o=parseInt(o),s=parseInt(s);const e=o<s?1:-1;"-"!==r&&".."!==r&&"\u2025"!==r||(s+=e);for(let t=o;t!==s;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/788e7a3c.2d6eda8d.js b/assets/js/788e7a3c.2d6eda8d.js deleted file mode 100644 index 26701ada0bc..00000000000 --- a/assets/js/788e7a3c.2d6eda8d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[354],{65592:e=>{e.exports=JSON.parse('{"label":"toml","permalink":"/blog/tags/toml","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/788e7a3c.55ef5e64.js b/assets/js/788e7a3c.55ef5e64.js new file mode 100644 index 00000000000..ff6c37fda76 --- /dev/null +++ b/assets/js/788e7a3c.55ef5e64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60354],{65592:e=>{e.exports=JSON.parse('{"label":"toml","permalink":"/blog/tags/toml","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/78dd992d.77594a62.js b/assets/js/78dd992d.77594a62.js new file mode 100644 index 00000000000..7df1ee6af08 --- /dev/null +++ b/assets/js/78dd992d.77594a62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77869],{3357:s=>{s.exports=JSON.parse('{"label":"tags","permalink":"/blog/tags/tags","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/78dd992d.b447f03d.js b/assets/js/78dd992d.b447f03d.js deleted file mode 100644 index 8551f041dae..00000000000 --- a/assets/js/78dd992d.b447f03d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7869],{3357:s=>{s.exports=JSON.parse('{"label":"tags","permalink":"/blog/tags/tags","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/79765aba.5dce3e69.js b/assets/js/79765aba.5dce3e69.js deleted file mode 100644 index 68f9b8dd2bc..00000000000 --- a/assets/js/79765aba.5dce3e69.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7440],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=o,f=u["".concat(p,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:i}=e;return r.createElement(o.Z,{text:`v${i}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),a=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?i[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),l)}},4758:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const i={title:"pin"},l=void 0,p={unversionedId:"proto/commands/pin",id:"proto/commands/pin",title:"pin",description:"The proto pin command will pin a version (or alias) of a tool. By default it will",source:"@site/docs/proto/commands/pin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/pin",permalink:"/docs/proto/commands/pin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/pin.mdx",tags:[],version:"current",frontMatter:{title:"pin"},sidebar:"proto",previous:{title:"outdated",permalink:"/docs/proto/commands/outdated"},next:{title:"plugins",permalink:"/docs/proto/commands/plugins"}},s={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],m={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.19.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto pin <tool> <version>")," command will pin a version (or alias) of a tool. By default it will\npin to a ",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," file in the current directory. This version will be used when attempting to\n",(0,o.kt)("a",{parentName:"p",href:"../detection"},"detect a version"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto pin go 1.20\n")),(0,o.kt)("p",null,"When the ",(0,o.kt)("inlineCode",{parentName:"p"},"--global")," option is passed, the version will be pinned globally in\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<tool>/manifest.json"),". This version will be used as a global fallback when\nattempting to ",(0,o.kt)("a",{parentName:"p",href:"../detection"},"detect a version"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto pin go 1.20 --global\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("a",{parentName:"p",href:"../config"},"Learn more about the ",(0,o.kt)("inlineCode",{parentName:"a"},".prototools")," configuration file!"))),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<version>")," - Version of tool.")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--global")," - Pin the version globally, rather than in the current directory.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/79765aba.ad91eedb.js b/assets/js/79765aba.ad91eedb.js new file mode 100644 index 00000000000..cf3acf3a5bc --- /dev/null +++ b/assets/js/79765aba.ad91eedb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37440],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=o,f=u["".concat(p,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:i}=e;return r.createElement(o.Z,{text:`v${i}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),a=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?i[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),l)}},4758:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const i={title:"pin"},l=void 0,p={unversionedId:"proto/commands/pin",id:"proto/commands/pin",title:"pin",description:"The proto pin command will pin a version (or alias) of a tool. By default it will",source:"@site/docs/proto/commands/pin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/pin",permalink:"/docs/proto/commands/pin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/pin.mdx",tags:[],version:"current",frontMatter:{title:"pin"},sidebar:"proto",previous:{title:"outdated",permalink:"/docs/proto/commands/outdated"},next:{title:"plugins",permalink:"/docs/proto/commands/plugins"}},s={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],m={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.19.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto pin <tool> <version>")," command will pin a version (or alias) of a tool. By default it will\npin to a ",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," file in the current directory. This version will be used when attempting to\n",(0,o.kt)("a",{parentName:"p",href:"../detection"},"detect a version"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto pin go 1.20\n")),(0,o.kt)("p",null,"When the ",(0,o.kt)("inlineCode",{parentName:"p"},"--global")," option is passed, the version will be pinned globally in\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<tool>/manifest.json"),". This version will be used as a global fallback when\nattempting to ",(0,o.kt)("a",{parentName:"p",href:"../detection"},"detect a version"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto pin go 1.20 --global\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("a",{parentName:"p",href:"../config"},"Learn more about the ",(0,o.kt)("inlineCode",{parentName:"a"},".prototools")," configuration file!"))),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<version>")," - Version of tool.")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--global")," - Pin the version globally, rather than in the current directory.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b667a7f.7fd4670b.js b/assets/js/7b667a7f.7fd4670b.js new file mode 100644 index 00000000000..7acfee8e12f --- /dev/null +++ b/assets/js/7b667a7f.7fd4670b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35649],{85274:s=>{s.exports=JSON.parse('{"label":"git","permalink":"/docs/tags/git","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/7b667a7f.fa34c87a.js b/assets/js/7b667a7f.fa34c87a.js deleted file mode 100644 index b8dfdc5c193..00000000000 --- a/assets/js/7b667a7f.fa34c87a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5649],{85274:s=>{s.exports=JSON.parse('{"label":"git","permalink":"/docs/tags/git","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/7c4e6415.161a874c.js b/assets/js/7c4e6415.161a874c.js new file mode 100644 index 00000000000..685b49e7223 --- /dev/null +++ b/assets/js/7c4e6415.161a874c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21393],{94940:e=>{e.exports=JSON.parse('{"label":"editors","permalink":"/blog/tags/editors","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/7c4e6415.85caf0b6.js b/assets/js/7c4e6415.85caf0b6.js deleted file mode 100644 index 051055fc49a..00000000000 --- a/assets/js/7c4e6415.85caf0b6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1393],{94940:e=>{e.exports=JSON.parse('{"label":"editors","permalink":"/blog/tags/editors","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/7c9b29bb.8099e0e8.js b/assets/js/7c9b29bb.8099e0e8.js deleted file mode 100644 index 9e706a30f57..00000000000 --- a/assets/js/7c9b29bb.8099e0e8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2334],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>h});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,d=u["".concat(l,".").concat(h)]||u[h]||p[h]||r;return n?o.createElement(d,i(i({ref:t},m),{},{components:n})):o.createElement(d,i({ref:t},m))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c<r;c++)i[c]=n[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},99484:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(25773),a=(n(27378),n(35318));const r={slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},i=void 0,s={permalink:"/blog/moon-v1.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx",source:"@site/blog/2023-06-26_moon-v1.9.mdx",title:"moon v1.9 - VCS hooks management and improved task inheritance",description:"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete",date:"2023-06-26T00:00:00.000Z",formattedDate:"June 26, 2023",tags:[{label:"vcs",permalink:"/blog/tags/vcs"},{label:"git",permalink:"/blog/tags/git"},{label:"hooks",permalink:"/blog/tags/hooks"},{label:"task",permalink:"/blog/tags/task"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:2.625,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},prevItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"},nextItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"}},l={image:n(1269).Z,authorsImageUrls:[void 0]},c=[{value:"Support for VCS hooks",id:"support-for-vcs-hooks",level:2},{value:"New <code>vcs</code> settings",id:"new-vcs-settings",level:3},{value:"New <code>moon sync hooks</code> command",id:"new-moon-sync-hooks-command",level:3},{value:"Rewritten task inheritance",id:"rewritten-task-inheritance",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:c};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete\nrewrite of our task inheritance layer."),(0,a.kt)("h2",{id:"support-for-vcs-hooks"},"Support for VCS hooks"),(0,a.kt)("p",null,"In our last release, we added support for ",(0,a.kt)("a",{parentName:"p",href:"./moon-v1.8"},"code ownership"),", to better help teams manage\ntheir code review and approval workflows. To continue this trend of \"features all companies require\nbut don't have a good solution for\", we're adding support for VCS hooks,\n",(0,a.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/githooks"},"starting with Git"),"."),(0,a.kt)("p",null,"If you're unfamiliar with Git hooks, they're a mechanism for running scripts before or after certain\nGit events. For example, before a commit is added, before pushing, or after merging. Hooks can be\nused for such situations as:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Ensuring commit messages abide by a certain format."),(0,a.kt)("li",{parentName:"ul"},"Ensuring affected project's source code pass linting and formatting checks."),(0,a.kt)("li",{parentName:"ul"},"Validating configuration files."),(0,a.kt)("li",{parentName:"ul"},"And much more!")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"For more information, view our official in-depth ",(0,a.kt)("a",{parentName:"p",href:"/docs/guides/vcs-hooks"},"VCS hooks guide"),"!")),(0,a.kt)("h3",{id:"new-vcs-settings"},"New ",(0,a.kt)("inlineCode",{parentName:"h3"},"vcs")," settings"),(0,a.kt)("p",null,"To support hooks, we're introducing the ",(0,a.kt)("inlineCode",{parentName:"p"},"vcs.hooks")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"vcs.syncHooks")," settings to\n",(0,a.kt)("a",{parentName:"p",href:"/docs/config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". The former is where you configure the list of\ncommands to run, grouped by hook type."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks:\n pre-commit:\n - 'pre-commit run'\n - 'moon run :lint --affected'\n")),(0,a.kt)("p",null,"The latter will automatically create and sync hooks with the local VCS checkout, enabling them going\nforward. ",(0,a.kt)("a",{parentName:"p",href:"/docs/guides/vcs-hooks#enabling-hooks"},"Learn more about enabling hooks"),", and choosing the\napproach that works best for you or your team!"),(0,a.kt)("h3",{id:"new-moon-sync-hooks-command"},"New ",(0,a.kt)("inlineCode",{parentName:"h3"},"moon sync hooks")," command"),(0,a.kt)("p",null,"Although moon can ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/workspace#synchooksonrun"},"automatically create")," hooks when running a\ntarget, this may be undesirable or abrasive for some developers. Instead, we also support an opt-in\nsolution through the ",(0,a.kt)("a",{parentName:"p",href:"/docs/commands/sync/hooks"},(0,a.kt)("inlineCode",{parentName:"a"},"moon sync hooks"))," command, which will manually\ncreate the hooks."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks\n")),(0,a.kt)("h2",{id:"rewritten-task-inheritance"},"Rewritten task inheritance"),(0,a.kt)("p",null,'One of the most complicated systems in moon is the task inheritance layer. On the surface, it sounds\nrather simple, but internally it was very complicated. For common use cases, it worked very well,\nbut for advanced use cases, how a task was "inherited and merged" was sometimes undefined behavior.'),(0,a.kt)("p",null,"Over the past year, we've introduced many new features, such as\n",(0,a.kt)("a",{parentName:"p",href:"./v0.23"},"implicit dependencies and inputs"),", ",(0,a.kt)("a",{parentName:"p",href:"./moon-v1.2"},"tag-based task inheritance"),",\n",(0,a.kt)("a",{parentName:"p",href:"./v0.23#project-level-environment-variables"},"project-level environment variables"),",\n",(0,a.kt)("a",{parentName:"p",href:"./v0.25#custom-project-language"},"custom languages")," and\n",(0,a.kt)("a",{parentName:"p",href:"./v0.24#project-level-task-platform"},"platforms"),", and so much more. Each of these new features would\nthrow yet another facet to be aware of during the task inheritance model, and over the past year, it\nhas become rather unwieldy."),(0,a.kt)("p",null,"To rectify this situation before it becomes worse, we rewrote our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/921"},"project, task"),", and\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/939"},"task inheritance")," layers from the ground-up using a new\nbuilder pattern, including writing all new unit tests, to properly and efficiently account for all\nedge cases."),(0,a.kt)("p",null,"Going forward, tasks should be far more accurate and deterministic. If you encounter any weirdness,\nit's either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not\naccounted for in our current unit test suite. Please report them either way!"),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.9.0"},"official release")," for a full list of\nchanges."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added ",(0,a.kt)("inlineCode",{parentName:"li"},"--clean")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"--force")," flags to ",(0,a.kt)("inlineCode",{parentName:"li"},"moon sync codeowners")," command."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"moon init")," to detect VCS providers and resolve fully-qualified tool versions."),(0,a.kt)("li",{parentName:"ul"},"Improved VCS file handling, caching, and performance.")))}p.isMDXComponent=!0},1269:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.9-0b831cf2af6e85b7dc549d1966de7775.png"}}]); \ No newline at end of file diff --git a/assets/js/7c9b29bb.c619ec07.js b/assets/js/7c9b29bb.c619ec07.js new file mode 100644 index 00000000000..6c5db1dd2e6 --- /dev/null +++ b/assets/js/7c9b29bb.c619ec07.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42334],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>h});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,d=u["".concat(l,".").concat(h)]||u[h]||p[h]||r;return n?o.createElement(d,i(i({ref:t},m),{},{components:n})):o.createElement(d,i({ref:t},m))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c<r;c++)i[c]=n[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},99484:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(25773),a=(n(27378),n(35318));const r={slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},i=void 0,s={permalink:"/blog/moon-v1.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx",source:"@site/blog/2023-06-26_moon-v1.9.mdx",title:"moon v1.9 - VCS hooks management and improved task inheritance",description:"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete",date:"2023-06-26T00:00:00.000Z",formattedDate:"June 26, 2023",tags:[{label:"vcs",permalink:"/blog/tags/vcs"},{label:"git",permalink:"/blog/tags/git"},{label:"hooks",permalink:"/blog/tags/hooks"},{label:"task",permalink:"/blog/tags/task"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:2.625,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.9",title:"moon v1.9 - VCS hooks management and improved task inheritance",authors:["milesj"],tags:["vcs","git","hooks","task","inheritance"],image:"./img/moon/v1.9.png"},prevItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"},nextItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"}},l={image:n(1269).Z,authorsImageUrls:[void 0]},c=[{value:"Support for VCS hooks",id:"support-for-vcs-hooks",level:2},{value:"New <code>vcs</code> settings",id:"new-vcs-settings",level:3},{value:"New <code>moon sync hooks</code> command",id:"new-moon-sync-hooks-command",level:3},{value:"Rewritten task inheritance",id:"rewritten-task-inheritance",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:c};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"In this release, we're introducing a long requested feature, VCS hooks! As well as a complete\nrewrite of our task inheritance layer."),(0,a.kt)("h2",{id:"support-for-vcs-hooks"},"Support for VCS hooks"),(0,a.kt)("p",null,"In our last release, we added support for ",(0,a.kt)("a",{parentName:"p",href:"./moon-v1.8"},"code ownership"),", to better help teams manage\ntheir code review and approval workflows. To continue this trend of \"features all companies require\nbut don't have a good solution for\", we're adding support for VCS hooks,\n",(0,a.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/githooks"},"starting with Git"),"."),(0,a.kt)("p",null,"If you're unfamiliar with Git hooks, they're a mechanism for running scripts before or after certain\nGit events. For example, before a commit is added, before pushing, or after merging. Hooks can be\nused for such situations as:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Ensuring commit messages abide by a certain format."),(0,a.kt)("li",{parentName:"ul"},"Ensuring affected project's source code pass linting and formatting checks."),(0,a.kt)("li",{parentName:"ul"},"Validating configuration files."),(0,a.kt)("li",{parentName:"ul"},"And much more!")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"For more information, view our official in-depth ",(0,a.kt)("a",{parentName:"p",href:"/docs/guides/vcs-hooks"},"VCS hooks guide"),"!")),(0,a.kt)("h3",{id:"new-vcs-settings"},"New ",(0,a.kt)("inlineCode",{parentName:"h3"},"vcs")," settings"),(0,a.kt)("p",null,"To support hooks, we're introducing the ",(0,a.kt)("inlineCode",{parentName:"p"},"vcs.hooks")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"vcs.syncHooks")," settings to\n",(0,a.kt)("a",{parentName:"p",href:"/docs/config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". The former is where you configure the list of\ncommands to run, grouped by hook type."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n hooks:\n pre-commit:\n - 'pre-commit run'\n - 'moon run :lint --affected'\n")),(0,a.kt)("p",null,"The latter will automatically create and sync hooks with the local VCS checkout, enabling them going\nforward. ",(0,a.kt)("a",{parentName:"p",href:"/docs/guides/vcs-hooks#enabling-hooks"},"Learn more about enabling hooks"),", and choosing the\napproach that works best for you or your team!"),(0,a.kt)("h3",{id:"new-moon-sync-hooks-command"},"New ",(0,a.kt)("inlineCode",{parentName:"h3"},"moon sync hooks")," command"),(0,a.kt)("p",null,"Although moon can ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/workspace#synchooksonrun"},"automatically create")," hooks when running a\ntarget, this may be undesirable or abrasive for some developers. Instead, we also support an opt-in\nsolution through the ",(0,a.kt)("a",{parentName:"p",href:"/docs/commands/sync/hooks"},(0,a.kt)("inlineCode",{parentName:"a"},"moon sync hooks"))," command, which will manually\ncreate the hooks."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync hooks\n")),(0,a.kt)("h2",{id:"rewritten-task-inheritance"},"Rewritten task inheritance"),(0,a.kt)("p",null,'One of the most complicated systems in moon is the task inheritance layer. On the surface, it sounds\nrather simple, but internally it was very complicated. For common use cases, it worked very well,\nbut for advanced use cases, how a task was "inherited and merged" was sometimes undefined behavior.'),(0,a.kt)("p",null,"Over the past year, we've introduced many new features, such as\n",(0,a.kt)("a",{parentName:"p",href:"./v0.23"},"implicit dependencies and inputs"),", ",(0,a.kt)("a",{parentName:"p",href:"./moon-v1.2"},"tag-based task inheritance"),",\n",(0,a.kt)("a",{parentName:"p",href:"./v0.23#project-level-environment-variables"},"project-level environment variables"),",\n",(0,a.kt)("a",{parentName:"p",href:"./v0.25#custom-project-language"},"custom languages")," and\n",(0,a.kt)("a",{parentName:"p",href:"./v0.24#project-level-task-platform"},"platforms"),", and so much more. Each of these new features would\nthrow yet another facet to be aware of during the task inheritance model, and over the past year, it\nhas become rather unwieldy."),(0,a.kt)("p",null,"To rectify this situation before it becomes worse, we rewrote our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/921"},"project, task"),", and\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/939"},"task inheritance")," layers from the ground-up using a new\nbuilder pattern, including writing all new unit tests, to properly and efficiently account for all\nedge cases."),(0,a.kt)("p",null,"Going forward, tasks should be far more accurate and deterministic. If you encounter any weirdness,\nit's either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not\naccounted for in our current unit test suite. Please report them either way!"),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.9.0"},"official release")," for a full list of\nchanges."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added ",(0,a.kt)("inlineCode",{parentName:"li"},"--clean")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"--force")," flags to ",(0,a.kt)("inlineCode",{parentName:"li"},"moon sync codeowners")," command."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"moon init")," to detect VCS providers and resolve fully-qualified tool versions."),(0,a.kt)("li",{parentName:"ul"},"Improved VCS file handling, caching, and performance.")))}p.isMDXComponent=!0},1269:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.9-0b831cf2af6e85b7dc549d1966de7775.png"}}]); \ No newline at end of file diff --git a/assets/js/7d19a980.66f700df.js b/assets/js/7d19a980.66f700df.js deleted file mode 100644 index 633e0d115b9..00000000000 --- a/assets/js/7d19a980.66f700df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3549],{91482:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hasher","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7d19a980.ff26f5c5.js b/assets/js/7d19a980.ff26f5c5.js new file mode 100644 index 00000000000..ef10cf2efde --- /dev/null +++ b/assets/js/7d19a980.ff26f5c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83549],{91482:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hasher","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7d4c8b40.d01a5e2b.js b/assets/js/7d4c8b40.d01a5e2b.js new file mode 100644 index 00000000000..6deeb61e0ac --- /dev/null +++ b/assets/js/7d4c8b40.d01a5e2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8100],{13290:e=>{e.exports=JSON.parse('{"label":"bin","permalink":"/blog/tags/bin","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/7d55a0f0.3640e2eb.js b/assets/js/7d55a0f0.3640e2eb.js deleted file mode 100644 index 2a428ed5d2d..00000000000 --- a/assets/js/7d55a0f0.3640e2eb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6920],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<r;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,i),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),o=n(27378),r=n(37140),i=n(83457),l=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==l&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},i,{className:(0,r.Z)("tabs__item",c,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,l.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",u)},o.createElement(p,(0,a.Z)({},e,t)),o.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),o=n(35331),r=n(30654),i=n(70784),l=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const i=(0,o.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(l),(0,a.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(i.location.search);t.set(l,e),i.replace({...i.location,search:t.toString()})}),[l,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=u(e),[i,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[m,d]=p({queryString:n,groupId:o}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,l.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),f=(()=>{const e=m??h;return c({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,r]),tabValues:r}}},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:r,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:o,title:r,className:"inline-block"}))}},55885:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(25773),o=(n(27378),n(35318)),r=(n(33337),n(39798),n(76911),n(88109));const i={slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},l=void 0,s={permalink:"/blog/v0.25",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx",source:"@site/blog/2023-02-27_v0.25.mdx",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",description:"With this release, we're landing Deno, our first supported language besides Node.js, and improving",date:"2023-02-27T00:00:00.000Z",formattedDate:"February 27, 2023",tags:[{label:"deno",permalink:"/blog/tags/deno"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"offline",permalink:"/blog/tags/offline"},{label:"github",permalink:"/blog/tags/github"}],readingTime:4.475,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},prevItem:{title:"Introducing proto, a next-generation toolchain manager!",permalink:"/blog/proto"},nextItem:{title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",permalink:"/blog/v0.24"}},u={image:n(44718).Z,authorsImageUrls:[void 0]},c=[{value:"Deno tier 2 support (experimental)",id:"deno-tier-2-support-experimental",level:2},{value:"CI insights in moonbase",id:"ci-insights-in-moonbase",level:2},{value:"Offline mode",id:"offline-mode",level:2},{value:"Custom project <code>language</code>",id:"custom-project-language",level:2},{value:"Project-level TypeScript settings (breaking)",id:"project-level-typescript-settings-breaking",level:2},{value:"New <code>moonrepo/setup-moon-action</code> GitHub action",id:"new-moonreposetup-moon-action-github-action",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function m(e){let{components:t,...i}=e;return(0,o.kt)("wrapper",(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're landing Deno, our first supported language besides Node.js, and improving\ninteroperability of languages as a whole."),(0,o.kt)("h2",{id:"deno-tier-2-support-experimental"},"Deno tier 2 support (experimental)"),(0,o.kt)("p",null,"Three months ago we announced our ",(0,o.kt)("a",{parentName:"p",href:"./v0.21"},"new tiered support structure")," for languages, and as of\ntoday, we're happy to announce that our second language to reach tier 2 is\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land"},"Deno"),"! With tier 2 support, we now analyze Deno specific configuration files\n(like ",(0,o.kt)("inlineCode",{parentName:"p"},"deno.json"),") to infer dependencies and relationships, as well as utilize this information for\ninputs and hashing purposes. With that being said, we're marking this release as experimental until\nwe fine tune the implementation, and iron out all the bugs."),(0,o.kt)("p",null,"To get started with using Deno, enable the new ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain#deno"},(0,o.kt)("inlineCode",{parentName:"a"},"deno"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". At this time, we don't have many settings to\nconfigure, so simply defining an empty object is enough to enable the Deno platform! Learn more\nabout this in our ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/javascript/deno-handbook"},"Deno handbook"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"deno: {}\n")),(0,o.kt)("p",null,"Once enabled, you can start using ",(0,o.kt)("inlineCode",{parentName:"p"},"deno")," commands in your moon tasks. moon will automatically set\nthe ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#platform-1"},(0,o.kt)("inlineCode",{parentName:"a"},"platform")),' to "deno" when using a deno command.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n format:\n command: 'deno fmt'\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Because this is only tier 2 support, moon ",(0,o.kt)("em",{parentName:"p"},"does not")," download and install Deno into its toolchain.\nmoon expects the ",(0,o.kt)("inlineCode",{parentName:"p"},"deno")," binary to exist in the current environment.")),(0,o.kt)("p",null,"Furthermore, if you're working a project that is composed of multiple JavaScript runtimes, like\nDeno, Bun, or Node.js, you can set the default ",(0,o.kt)("inlineCode",{parentName:"p"},"platform")," for all tasks at the project-level."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"platform: 'deno'\nlanguage: 'typescript'\ntype: 'application'\n")),(0,o.kt)("p",null,"We're very excited for this release as it paves the way for future language integrations, and\nenables additional JavaScript runtimes!"),(0,o.kt)("h2",{id:"ci-insights-in-moonbase"},"CI insights in moonbase"),(0,o.kt)("p",null,"We've spent the last few weeks implementing a new ",(0,o.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"moonbase")," feature called CI\ninsights, where we track all CI runs (via ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,o.kt)("inlineCode",{parentName:"a"},"moon ci")),"), and all actions (tasks)\nthat have ran based on affected files. In the future these insights will help catch regressions,\nalert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and\nrepositories."),(0,o.kt)(r.Z,{src:n(17032),width:"90%",mdxType:"Image"}),(0,o.kt)("p",null,"With this initial release, we track touched files, which targets are affected based on those files,\nan estimation on how much time was saved or lost, the actions that ran and their final status,\noutlined as a timeline."),(0,o.kt)(r.Z,{src:n(15756),width:"90%",mdxType:"Image"}),(0,o.kt)("p",null,"Insights are enabled by default if you're using moonbase in your CI pipeline, and start using moon\nv0.25! You can disable insights gathering from your\n",(0,o.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"organization settings page"),"."),(0,o.kt)("h2",{id:"offline-mode"},"Offline mode"),(0,o.kt)("p",null,"moon assumes that an internet connection is always available, as we download and install tools into\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\nWhile this is useful, having a constant internet connection isn't always viable."),(0,o.kt)("p",null,"In this release, we now check for an active internet connection and bypass certain workflows when\napplicable.\n",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/offline-mode"},"Jump to the official guide on offline mode for more information"),"!"),(0,o.kt)("h2",{id:"custom-project-language"},"Custom project ",(0,o.kt)("inlineCode",{parentName:"h2"},"language")),(0,o.kt)("p",null,"Project's have always been able to define a ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language"))," in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," that denotes the primary programming language for the project.\nHistorically this has been a strict enum of supported values, and could ",(0,o.kt)("em",{parentName:"p"},"not")," be customized for\nother languages. With the introduction of\n",(0,o.kt)("a",{parentName:"p",href:"./v0.23#new-scoped-tasks-with-moontasksyml"},"language driven task inheritance"),", we felt like\nrevisiting this setting, and as such, you're now able to define ",(0,o.kt)("em",{parentName:"p"},"any")," language in this setting,\nwhich also feeds into the task inheritance system."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'kotlin'\n")),(0,o.kt)("p",null,"With this change, ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/kotlin-application.yml"),", ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/dotnet.yml"),", and other\nvariations are now possible! However, besides task inheritance, other functionality like platform\ndetection, and Dockerfile support are not enabled."),(0,o.kt)("h2",{id:"project-level-typescript-settings-breaking"},"Project-level TypeScript settings (breaking)"),(0,o.kt)("p",null,"Our TypeScript integration supports many automated workflows, like syncing project references, and\nrouting ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," to our shared cache. This is wonderful for the majority, but for the handful of\nprojects where these settings were not viable, there was no simple way to disable or opt out of the\nfunctionality."),(0,o.kt)("p",null,"Well no more, projects can now override the workspace-level TypeScript settings\n",(0,o.kt)("inlineCode",{parentName:"p"},"routeOutDirToCache"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"syncProjectReferences"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"syncProjectReferencesToPaths")," through the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#typescript"},(0,o.kt)("inlineCode",{parentName:"a"},"toolchain.typescript"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"toolchain:\n typescript:\n routeOutDirToCache: false\n")),(0,o.kt)("p",null,"Because this setting was changed from a boolean to an object, the old pattern of disabling\nTypescript must now use the ",(0,o.kt)("inlineCode",{parentName:"p"},"disabled")," setting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"# Old\ntoolchain:\n typescript: false\n\n# new\ntoolchain:\n typescript:\n disabled: true\n")),(0,o.kt)("h2",{id:"new-moonreposetup-moon-action-github-action"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"moonrepo/setup-moon-action")," GitHub action"),(0,o.kt)("p",null,"If you're using GitHub Actions as your CI pipeline, we've introducing a new action called\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},"moonrepo/setup-moon-action"),", that will install the\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," binary globally, and will cache (and restore) the moon toolchain."),(0,o.kt)("p",null,"With this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps\naround setting up Node.js, and install dependencies."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"jobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: moonrepo/setup-moon-action@v1\n - run: moon ci\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.25.0"},"official release")," for a\nfull list of changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Updated project, task, and target identifiers to support periods (",(0,o.kt)("inlineCode",{parentName:"li"},"."),")."),(0,o.kt)("li",{parentName:"ul"},"Refactored glob matching to use workspace relative paths instead of absolute. Please report an\nissue if hashing or affected detection is now inaccurate."),(0,o.kt)("li",{parentName:"ul"},"We now build against older operating systems in an attempt to solve GLIBC version errors.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v0.26 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Officially release proto!"),(0,o.kt)("li",{parentName:"ul"},"Improved Deno interoperability.")))}m.isMDXComponent=!0},15756:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/run-detail-37622c4b8e3faaefb1fc8b43ce794036.png"},17032:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/runs-list-eb2d2c47d5a970e36bfe0b53892ad20c.png"},44718:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.25-a7107e8421326425d72769c0742873ac.png"}}]); \ No newline at end of file diff --git a/assets/js/7d55a0f0.a547811d.js b/assets/js/7d55a0f0.a547811d.js new file mode 100644 index 00000000000..ba086088e7f --- /dev/null +++ b/assets/js/7d55a0f0.a547811d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46920],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<r;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(37140);const r="tabItem_wHwb";function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,i),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),o=n(27378),r=n(37140),i=n(83457),l=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==l&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},i,{className:(0,r.Z)("tabs__item",c,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,l.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",u)},o.createElement(p,(0,a.Z)({},e,t)),o.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return o.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),o=n(35331),r=n(30654),i=n(70784),l=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const i=(0,o.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,r._X)(l),(0,a.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(i.location.search);t.set(l,e),i.replace({...i.location,search:t.toString()})}),[l,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=u(e),[i,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[m,d]=p({queryString:n,groupId:o}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,r]=(0,l.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:o}),f=(()=>{const e=m??h;return c({value:e,tabValues:r})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,r]),tabValues:r}}},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:r,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:o,title:r,className:"inline-block"}))}},55885:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(25773),o=(n(27378),n(35318)),r=(n(33337),n(39798),n(76911),n(88109));const i={slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},l=void 0,s={permalink:"/blog/v0.25",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx",source:"@site/blog/2023-02-27_v0.25.mdx",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",description:"With this release, we're landing Deno, our first supported language besides Node.js, and improving",date:"2023-02-27T00:00:00.000Z",formattedDate:"February 27, 2023",tags:[{label:"deno",permalink:"/blog/tags/deno"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"offline",permalink:"/blog/tags/offline"},{label:"github",permalink:"/blog/tags/github"}],readingTime:4.475,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.25",title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",authors:["milesj"],tags:["deno","toolchain","moonbase","offline","github"],image:"./img/v0.25.png"},prevItem:{title:"Introducing proto, a next-generation toolchain manager!",permalink:"/blog/proto"},nextItem:{title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",permalink:"/blog/v0.24"}},u={image:n(44718).Z,authorsImageUrls:[void 0]},c=[{value:"Deno tier 2 support (experimental)",id:"deno-tier-2-support-experimental",level:2},{value:"CI insights in moonbase",id:"ci-insights-in-moonbase",level:2},{value:"Offline mode",id:"offline-mode",level:2},{value:"Custom project <code>language</code>",id:"custom-project-language",level:2},{value:"Project-level TypeScript settings (breaking)",id:"project-level-typescript-settings-breaking",level:2},{value:"New <code>moonrepo/setup-moon-action</code> GitHub action",id:"new-moonreposetup-moon-action-github-action",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],p={toc:c};function m(e){let{components:t,...i}=e;return(0,o.kt)("wrapper",(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're landing Deno, our first supported language besides Node.js, and improving\ninteroperability of languages as a whole."),(0,o.kt)("h2",{id:"deno-tier-2-support-experimental"},"Deno tier 2 support (experimental)"),(0,o.kt)("p",null,"Three months ago we announced our ",(0,o.kt)("a",{parentName:"p",href:"./v0.21"},"new tiered support structure")," for languages, and as of\ntoday, we're happy to announce that our second language to reach tier 2 is\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land"},"Deno"),"! With tier 2 support, we now analyze Deno specific configuration files\n(like ",(0,o.kt)("inlineCode",{parentName:"p"},"deno.json"),") to infer dependencies and relationships, as well as utilize this information for\ninputs and hashing purposes. With that being said, we're marking this release as experimental until\nwe fine tune the implementation, and iron out all the bugs."),(0,o.kt)("p",null,"To get started with using Deno, enable the new ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain#deno"},(0,o.kt)("inlineCode",{parentName:"a"},"deno"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". At this time, we don't have many settings to\nconfigure, so simply defining an empty object is enough to enable the Deno platform! Learn more\nabout this in our ",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/javascript/deno-handbook"},"Deno handbook"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"deno: {}\n")),(0,o.kt)("p",null,"Once enabled, you can start using ",(0,o.kt)("inlineCode",{parentName:"p"},"deno")," commands in your moon tasks. moon will automatically set\nthe ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#platform-1"},(0,o.kt)("inlineCode",{parentName:"a"},"platform")),' to "deno" when using a deno command.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n format:\n command: 'deno fmt'\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Because this is only tier 2 support, moon ",(0,o.kt)("em",{parentName:"p"},"does not")," download and install Deno into its toolchain.\nmoon expects the ",(0,o.kt)("inlineCode",{parentName:"p"},"deno")," binary to exist in the current environment.")),(0,o.kt)("p",null,"Furthermore, if you're working a project that is composed of multiple JavaScript runtimes, like\nDeno, Bun, or Node.js, you can set the default ",(0,o.kt)("inlineCode",{parentName:"p"},"platform")," for all tasks at the project-level."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"platform: 'deno'\nlanguage: 'typescript'\ntype: 'application'\n")),(0,o.kt)("p",null,"We're very excited for this release as it paves the way for future language integrations, and\nenables additional JavaScript runtimes!"),(0,o.kt)("h2",{id:"ci-insights-in-moonbase"},"CI insights in moonbase"),(0,o.kt)("p",null,"We've spent the last few weeks implementing a new ",(0,o.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"moonbase")," feature called CI\ninsights, where we track all CI runs (via ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,o.kt)("inlineCode",{parentName:"a"},"moon ci")),"), and all actions (tasks)\nthat have ran based on affected files. In the future these insights will help catch regressions,\nalert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and\nrepositories."),(0,o.kt)(r.Z,{src:n(17032),width:"90%",mdxType:"Image"}),(0,o.kt)("p",null,"With this initial release, we track touched files, which targets are affected based on those files,\nan estimation on how much time was saved or lost, the actions that ran and their final status,\noutlined as a timeline."),(0,o.kt)(r.Z,{src:n(15756),width:"90%",mdxType:"Image"}),(0,o.kt)("p",null,"Insights are enabled by default if you're using moonbase in your CI pipeline, and start using moon\nv0.25! You can disable insights gathering from your\n",(0,o.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"organization settings page"),"."),(0,o.kt)("h2",{id:"offline-mode"},"Offline mode"),(0,o.kt)("p",null,"moon assumes that an internet connection is always available, as we download and install tools into\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\nWhile this is useful, having a constant internet connection isn't always viable."),(0,o.kt)("p",null,"In this release, we now check for an active internet connection and bypass certain workflows when\napplicable.\n",(0,o.kt)("a",{parentName:"p",href:"/docs/guides/offline-mode"},"Jump to the official guide on offline mode for more information"),"!"),(0,o.kt)("h2",{id:"custom-project-language"},"Custom project ",(0,o.kt)("inlineCode",{parentName:"h2"},"language")),(0,o.kt)("p",null,"Project's have always been able to define a ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#language"},(0,o.kt)("inlineCode",{parentName:"a"},"language"))," in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," that denotes the primary programming language for the project.\nHistorically this has been a strict enum of supported values, and could ",(0,o.kt)("em",{parentName:"p"},"not")," be customized for\nother languages. With the introduction of\n",(0,o.kt)("a",{parentName:"p",href:"./v0.23#new-scoped-tasks-with-moontasksyml"},"language driven task inheritance"),", we felt like\nrevisiting this setting, and as such, you're now able to define ",(0,o.kt)("em",{parentName:"p"},"any")," language in this setting,\nwhich also feeds into the task inheritance system."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"language: 'kotlin'\n")),(0,o.kt)("p",null,"With this change, ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/kotlin-application.yml"),", ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/tasks/dotnet.yml"),", and other\nvariations are now possible! However, besides task inheritance, other functionality like platform\ndetection, and Dockerfile support are not enabled."),(0,o.kt)("h2",{id:"project-level-typescript-settings-breaking"},"Project-level TypeScript settings (breaking)"),(0,o.kt)("p",null,"Our TypeScript integration supports many automated workflows, like syncing project references, and\nrouting ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," to our shared cache. This is wonderful for the majority, but for the handful of\nprojects where these settings were not viable, there was no simple way to disable or opt out of the\nfunctionality."),(0,o.kt)("p",null,"Well no more, projects can now override the workspace-level TypeScript settings\n",(0,o.kt)("inlineCode",{parentName:"p"},"routeOutDirToCache"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"syncProjectReferences"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"syncProjectReferencesToPaths")," through the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#typescript"},(0,o.kt)("inlineCode",{parentName:"a"},"toolchain.typescript"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"toolchain:\n typescript:\n routeOutDirToCache: false\n")),(0,o.kt)("p",null,"Because this setting was changed from a boolean to an object, the old pattern of disabling\nTypescript must now use the ",(0,o.kt)("inlineCode",{parentName:"p"},"disabled")," setting."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"# Old\ntoolchain:\n typescript: false\n\n# new\ntoolchain:\n typescript:\n disabled: true\n")),(0,o.kt)("h2",{id:"new-moonreposetup-moon-action-github-action"},"New ",(0,o.kt)("inlineCode",{parentName:"h2"},"moonrepo/setup-moon-action")," GitHub action"),(0,o.kt)("p",null,"If you're using GitHub Actions as your CI pipeline, we've introducing a new action called\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},"moonrepo/setup-moon-action"),", that will install the\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon")," binary globally, and will cache (and restore) the moon toolchain."),(0,o.kt)("p",null,"With this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps\naround setting up Node.js, and install dependencies."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"jobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: moonrepo/setup-moon-action@v1\n - run: moon ci\n")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.25.0"},"official release")," for a\nfull list of changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Updated project, task, and target identifiers to support periods (",(0,o.kt)("inlineCode",{parentName:"li"},"."),")."),(0,o.kt)("li",{parentName:"ul"},"Refactored glob matching to use workspace relative paths instead of absolute. Please report an\nissue if hashing or affected detection is now inaccurate."),(0,o.kt)("li",{parentName:"ul"},"We now build against older operating systems in an attempt to solve GLIBC version errors.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v0.26 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Officially release proto!"),(0,o.kt)("li",{parentName:"ul"},"Improved Deno interoperability.")))}m.isMDXComponent=!0},15756:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/run-detail-37622c4b8e3faaefb1fc8b43ce794036.png"},17032:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/runs-list-eb2d2c47d5a970e36bfe0b53892ad20c.png"},44718:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.25-a7107e8421326425d72769c0742873ac.png"}}]); \ No newline at end of file diff --git a/assets/js/7d9726a8.0661fc84.js b/assets/js/7d9726a8.0661fc84.js new file mode 100644 index 00000000000..71cc178b515 --- /dev/null +++ b/assets/js/7d9726a8.0661fc84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7429],{89494:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/4","page":4,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7d9726a8.48b7ef1a.js b/assets/js/7d9726a8.48b7ef1a.js deleted file mode 100644 index 0b1e7d6a057..00000000000 --- a/assets/js/7d9726a8.48b7ef1a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7429],{89494:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/4","page":4,"postsPerPage":10,"totalPages":6,"totalCount":51,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7e9fb3d2.2345714e.js b/assets/js/7e9fb3d2.2345714e.js deleted file mode 100644 index 39379d73bc9..00000000000 --- a/assets/js/7e9fb3d2.2345714e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9702],{97517:e=>{e.exports=JSON.parse('{"label":"errors","permalink":"/blog/tags/errors","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/7e9fb3d2.eab2ef42.js b/assets/js/7e9fb3d2.eab2ef42.js new file mode 100644 index 00000000000..42d58ceec90 --- /dev/null +++ b/assets/js/7e9fb3d2.eab2ef42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[79702],{97517:e=>{e.exports=JSON.parse('{"label":"errors","permalink":"/blog/tags/errors","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/7ec3d878.136f9042.js b/assets/js/7ec3d878.136f9042.js deleted file mode 100644 index ea732fc2dbd..00000000000 --- a/assets/js/7ec3d878.136f9042.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2178],{15655:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/version","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7ec3d878.b3bc87a8.js b/assets/js/7ec3d878.b3bc87a8.js new file mode 100644 index 00000000000..dadf84b38ca --- /dev/null +++ b/assets/js/7ec3d878.b3bc87a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72178],{15655:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/version","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7f3e2518.6f646df8.js b/assets/js/7f3e2518.6f646df8.js new file mode 100644 index 00000000000..4cb822b5abd --- /dev/null +++ b/assets/js/7f3e2518.6f646df8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66647],{41640:e=>{e.exports=JSON.parse('{"label":"debug","permalink":"/blog/tags/debug","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/7f3e2518.84821248.js b/assets/js/7f3e2518.84821248.js deleted file mode 100644 index 9422c779b08..00000000000 --- a/assets/js/7f3e2518.84821248.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6647],{41640:e=>{e.exports=JSON.parse('{"label":"debug","permalink":"/blog/tags/debug","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/7f6c6f55.b7f1dba2.js b/assets/js/7f6c6f55.b7f1dba2.js deleted file mode 100644 index 78c00079dd0..00000000000 --- a/assets/js/7f6c6f55.b7f1dba2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3561],{8801:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/toolchain","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7f6c6f55.be59f03e.js b/assets/js/7f6c6f55.be59f03e.js new file mode 100644 index 00000000000..9090b5cece7 --- /dev/null +++ b/assets/js/7f6c6f55.be59f03e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83561],{8801:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/toolchain","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/80514956.3dfd96bc.js b/assets/js/80514956.3dfd96bc.js deleted file mode 100644 index e0427faf8b2..00000000000 --- a/assets/js/80514956.3dfd96bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[609],{29708:e=>{e.exports=JSON.parse('{"label":"clean","permalink":"/blog/tags/clean","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/80514956.66ec961f.js b/assets/js/80514956.66ec961f.js new file mode 100644 index 00000000000..dd6ed2d5717 --- /dev/null +++ b/assets/js/80514956.66ec961f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50609],{29708:e=>{e.exports=JSON.parse('{"label":"clean","permalink":"/blog/tags/clean","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.2c06b562.js b/assets/js/814f3328.2c06b562.js new file mode 100644 index 00000000000..6c68ec05ae3 --- /dev/null +++ b/assets/js/814f3328.2c06b562.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"},{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.4463a7d3.js b/assets/js/814f3328.4463a7d3.js deleted file mode 100644 index ae4ead9001b..00000000000 --- a/assets/js/814f3328.4463a7d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"},{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"}]}')}}]); \ No newline at end of file diff --git a/assets/js/819f977d.1a660b08.js b/assets/js/819f977d.1a660b08.js new file mode 100644 index 00000000000..ee3589eebe2 --- /dev/null +++ b/assets/js/819f977d.1a660b08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31622],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||l;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u<l;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(d(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=d??f;return c({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,l]),tabValues:l}}},27915:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(9619);function o(e){let{text:t}=e;return a.createElement(l.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),r=n(81884),l=n(25773),o=n(9928),i=n(83469),s=n(31792);const u={discord:o.omb,github:o.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:o.mdU,workspace:i.emM,"workspace-config":i.cRF};function c(e){let{name:t,...n}=e;return a.createElement(s.Z,(0,l.Z)({},n,{icon:u[t]}))}function p(e){let{links:t}=e;return a.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>a.createElement(r.default,{key:e.url,href:e.url,className:"focus:outline-none"},a.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},a.createElement("div",{className:"flex-shrink-0"},a.createElement(c,{size:"lg",name:e.icon})),a.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),l=n(31792);const o={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?o[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},84102:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=n(25773),r=n(27378),l=n(35318),o=(n(33337),n(39798),n(27915)),i=n(9634);const s={title:"Run a task"},u=void 0,c={unversionedId:"run-task",id:"run-task",title:"Run a task",description:"Even though we've created a task, it's not useful unless we run it, which is done",source:"@site/docs/run-task.mdx",sourceDirName:".",slug:"/run-task",permalink:"/docs/run-task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/run-task.mdx",tags:[],version:"current",frontMatter:{title:"Run a task"},sidebar:"docs",previous:{title:"Create a task",permalink:"/docs/create-task"},next:{title:"Migrate to moon",permalink:"/docs/migrate-to-moon"}},p={},d=[{value:"Running dependents",id:"running-dependents",level:2},{value:"Running based on affected files only",id:"running-based-on-affected-files-only",level:2},{value:"Using remote changes",id:"using-remote-changes",level:3},{value:"Filtering based on change status",id:"filtering-based-on-change-status",level:3},{value:"Passing arguments to the underlying command",id:"passing-arguments-to-the-underlying-command",level:2},{value:"Advanced run targeting",id:"advanced-run-targeting",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:d};function f(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)(o.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,l.kt)("p",null,"Even though we've ",(0,l.kt)("a",{parentName:"p",href:"./create-task"},"created a task"),", it's not useful unless we ",(0,l.kt)("em",{parentName:"p"},"run it"),", which is done\nwith the ",(0,l.kt)("a",{parentName:"p",href:"./commands/run"},(0,l.kt)("inlineCode",{parentName:"a"},"moon run <target>"))," command. This command requires a single argument, a\n",(0,l.kt)("a",{parentName:"p",href:"./concepts/target"},"primary target"),", which is the pairing of a scope and task name. In the example\nbelow, our project is ",(0,l.kt)("inlineCode",{parentName:"p"},"app"),", the task is ",(0,l.kt)("inlineCode",{parentName:"p"},"build"),", and the target is ",(0,l.kt)("inlineCode",{parentName:"p"},"app:build"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},'$ moon run app:build\n\n# In v1.14+, "run" can be omitted\n$ moon app:build\n')),(0,l.kt)("p",null,"When this command is ran, it will do the following:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Generate a directed acyclic graph, known as the action (dependency) graph."),(0,l.kt)("li",{parentName:"ul"},"Insert ",(0,l.kt)("a",{parentName:"li",href:"./config/project#deps"},(0,l.kt)("inlineCode",{parentName:"a"},"deps"))," as targets into the graph."),(0,l.kt)("li",{parentName:"ul"},"Insert the primary target into the graph."),(0,l.kt)("li",{parentName:"ul"},"Run all tasks in the graph in parallel and in topological order (the dependency chain)."),(0,l.kt)("li",{parentName:"ul"},"For each task, calculate ",(0,l.kt)("a",{parentName:"li",href:"./concepts/cache"},"hashes")," and either:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"On cache hit, exit early and return the last run."),(0,l.kt)("li",{parentName:"ul"},"On cache miss, run the task and generate a new cache.")))),(0,l.kt)("h2",{id:"running-dependents"},"Running dependents"),(0,l.kt)("p",null,"moon will ",(0,l.kt)("em",{parentName:"p"},"always")," run upstream dependencies (",(0,l.kt)("a",{parentName:"p",href:"./config/project#deps"},(0,l.kt)("inlineCode",{parentName:"a"},"deps")),") before running the\nprimary target, as their outputs may be required for the primary target to function correctly."),(0,l.kt)("p",null,"However, if you're working on a project that is shared and consumed by other projects, you may want\nto verify that downstream dependents have not been indirectly broken by any changes. This can be\nachieved by passing the ",(0,l.kt)("inlineCode",{parentName:"p"},"--dependents")," option, which will run dependent targets (of the same task\nname) ",(0,l.kt)("em",{parentName:"p"},"after")," the primary target."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --dependents\n")),(0,l.kt)("h2",{id:"running-based-on-affected-files-only"},"Running based on affected files only"),(0,l.kt)("p",null,"By default ",(0,l.kt)("a",{parentName:"p",href:"./commands/run"},(0,l.kt)("inlineCode",{parentName:"a"},"moon run"))," will ",(0,l.kt)("em",{parentName:"p"},"always")," run the target, regardless if files have\nactually changed. However, this is typically fine because of our\n",(0,l.kt)("a",{parentName:"p",href:"./concepts/cache"},"smart hashing & cache layer"),". With that being said, if you'd like to ",(0,l.kt)("em",{parentName:"p"},"only")," run a\ntarget if files have changed, pass the ",(0,l.kt)("inlineCode",{parentName:"p"},"--affected")," flag."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected\n")),(0,l.kt)("p",null,"Under the hood, we extract locally touched (created, modified, staged, etc) files from your\nconfigured ",(0,l.kt)("a",{parentName:"p",href:"./config/workspace#vcs"},"VCS"),", and exit early if no files intersect with the task's\n",(0,l.kt)("a",{parentName:"p",href:"./config/project#inputs"},"inputs"),"."),(0,l.kt)("h3",{id:"using-remote-changes"},"Using remote changes"),(0,l.kt)("p",null,"If you'd like to determine affected files based on remote changes instead of local changes, pass the\n",(0,l.kt)("inlineCode",{parentName:"p"},"--remote")," flag. This will extract touched files by comparing the current ",(0,l.kt)("inlineCode",{parentName:"p"},"HEAD")," against the\n",(0,l.kt)("a",{parentName:"p",href:"./config/workspace#defaultbranch"},(0,l.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected --remote\n")),(0,l.kt)("h3",{id:"filtering-based-on-change-status"},"Filtering based on change status"),(0,l.kt)("p",null,"We can take this a step further by filtering down affected files based on a change status, using the\n",(0,l.kt)("inlineCode",{parentName:"p"},"--status")," option. This option accepts the following values: ",(0,l.kt)("inlineCode",{parentName:"p"},"added"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"deleted"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"modified"),",\n",(0,l.kt)("inlineCode",{parentName:"p"},"staged"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"unstaged"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"untracked"),". If not provided, the option defaults to all."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected --status deleted\n")),(0,l.kt)("p",null,"Multiple status can be provided by passing the ",(0,l.kt)("inlineCode",{parentName:"p"},"--status")," option multiple times."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected --status deleted --status modified\n")),(0,l.kt)("h2",{id:"passing-arguments-to-the-underlying-command"},"Passing arguments to the underlying command"),(0,l.kt)("p",null,"If you'd like to pass arbitrary arguments to the underlying task command, in addition to the already\ndefined ",(0,l.kt)("a",{parentName:"p",href:"./config/project#args"},(0,l.kt)("inlineCode",{parentName:"a"},"args")),", you can pass them after ",(0,l.kt)("inlineCode",{parentName:"p"},"--"),". These arguments are ",(0,l.kt)("em",{parentName:"p"},"appended\nas-is"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build -- --force\n")),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"The ",(0,l.kt)("inlineCode",{parentName:"p"},"--")," delimiter and any arguments ",(0,l.kt)("em",{parentName:"p"},"must")," be defined last on the command line.")),(0,l.kt)("h2",{id:"advanced-run-targeting"},"Advanced run targeting"),(0,l.kt)("p",null,"By this point you should have a basic understanding of how to run tasks, but with moon, we want to\nprovide support for advanced workflows and development scenarios. For example, running a target in\nall projects:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run :build\n")),(0,l.kt)("p",null,"Or perhaps running a target based on a query:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},'$ moon run :build --query "language=[javascript, typescript]"\n')),(0,l.kt)("p",null,"Jump to the official ",(0,l.kt)("a",{parentName:"p",href:"./commands/run"},(0,l.kt)("inlineCode",{parentName:"a"},"moon run")," documentation")," for more examples!"),(0,l.kt)("h2",{id:"next-steps"},"Next steps"),(0,l.kt)(i.Z,{links:[{icon:"moon",label:"Migrate to moon",url:"./migrate-to-moon"},{icon:"task",label:"Learn about tasks",url:"./concepts/task"},{icon:"run-task",label:(0,l.kt)(r.Fragment,null,"Learn about ",(0,l.kt)("code",null,"moon run")),url:"./commands/run"}],mdxType:"NextSteps"}))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/819f977d.e4c2c495.js b/assets/js/819f977d.e4c2c495.js deleted file mode 100644 index c1abc7f7a5e..00000000000 --- a/assets/js/819f977d.e4c2c495.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1622],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||l;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u<l;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(d(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=d??f;return c({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,l]),tabValues:l}}},27915:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(9619);function o(e){let{text:t}=e;return a.createElement(l.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(27378),r=n(81884),l=n(25773),o=n(9928),i=n(83469),s=n(31792);const u={discord:o.omb,github:o.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:o.mdU,workspace:i.emM,"workspace-config":i.cRF};function c(e){let{name:t,...n}=e;return a.createElement(s.Z,(0,l.Z)({},n,{icon:u[t]}))}function p(e){let{links:t}=e;return a.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>a.createElement(r.default,{key:e.url,href:e.url,className:"focus:outline-none"},a.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},a.createElement("div",{className:"flex-shrink-0"},a.createElement(c,{size:"lg",name:e.icon})),a.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),l=n(31792);const o={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?o[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(l.Z,{icon:n,className:"mr-1"}),i)}},84102:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=n(25773),r=n(27378),l=n(35318),o=(n(33337),n(39798),n(27915)),i=n(9634);const s={title:"Run a task"},u=void 0,c={unversionedId:"run-task",id:"run-task",title:"Run a task",description:"Even though we've created a task, it's not useful unless we run it, which is done",source:"@site/docs/run-task.mdx",sourceDirName:".",slug:"/run-task",permalink:"/docs/run-task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/run-task.mdx",tags:[],version:"current",frontMatter:{title:"Run a task"},sidebar:"docs",previous:{title:"Create a task",permalink:"/docs/create-task"},next:{title:"Migrate to moon",permalink:"/docs/migrate-to-moon"}},p={},d=[{value:"Running dependents",id:"running-dependents",level:2},{value:"Running based on affected files only",id:"running-based-on-affected-files-only",level:2},{value:"Using remote changes",id:"using-remote-changes",level:3},{value:"Filtering based on change status",id:"filtering-based-on-change-status",level:3},{value:"Passing arguments to the underlying command",id:"passing-arguments-to-the-underlying-command",level:2},{value:"Advanced run targeting",id:"advanced-run-targeting",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:d};function f(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)(o.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,l.kt)("p",null,"Even though we've ",(0,l.kt)("a",{parentName:"p",href:"./create-task"},"created a task"),", it's not useful unless we ",(0,l.kt)("em",{parentName:"p"},"run it"),", which is done\nwith the ",(0,l.kt)("a",{parentName:"p",href:"./commands/run"},(0,l.kt)("inlineCode",{parentName:"a"},"moon run <target>"))," command. This command requires a single argument, a\n",(0,l.kt)("a",{parentName:"p",href:"./concepts/target"},"primary target"),", which is the pairing of a scope and task name. In the example\nbelow, our project is ",(0,l.kt)("inlineCode",{parentName:"p"},"app"),", the task is ",(0,l.kt)("inlineCode",{parentName:"p"},"build"),", and the target is ",(0,l.kt)("inlineCode",{parentName:"p"},"app:build"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},'$ moon run app:build\n\n# In v1.14+, "run" can be omitted\n$ moon app:build\n')),(0,l.kt)("p",null,"When this command is ran, it will do the following:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Generate a directed acyclic graph, known as the action (dependency) graph."),(0,l.kt)("li",{parentName:"ul"},"Insert ",(0,l.kt)("a",{parentName:"li",href:"./config/project#deps"},(0,l.kt)("inlineCode",{parentName:"a"},"deps"))," as targets into the graph."),(0,l.kt)("li",{parentName:"ul"},"Insert the primary target into the graph."),(0,l.kt)("li",{parentName:"ul"},"Run all tasks in the graph in parallel and in topological order (the dependency chain)."),(0,l.kt)("li",{parentName:"ul"},"For each task, calculate ",(0,l.kt)("a",{parentName:"li",href:"./concepts/cache"},"hashes")," and either:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"On cache hit, exit early and return the last run."),(0,l.kt)("li",{parentName:"ul"},"On cache miss, run the task and generate a new cache.")))),(0,l.kt)("h2",{id:"running-dependents"},"Running dependents"),(0,l.kt)("p",null,"moon will ",(0,l.kt)("em",{parentName:"p"},"always")," run upstream dependencies (",(0,l.kt)("a",{parentName:"p",href:"./config/project#deps"},(0,l.kt)("inlineCode",{parentName:"a"},"deps")),") before running the\nprimary target, as their outputs may be required for the primary target to function correctly."),(0,l.kt)("p",null,"However, if you're working on a project that is shared and consumed by other projects, you may want\nto verify that downstream dependents have not been indirectly broken by any changes. This can be\nachieved by passing the ",(0,l.kt)("inlineCode",{parentName:"p"},"--dependents")," option, which will run dependent targets (of the same task\nname) ",(0,l.kt)("em",{parentName:"p"},"after")," the primary target."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --dependents\n")),(0,l.kt)("h2",{id:"running-based-on-affected-files-only"},"Running based on affected files only"),(0,l.kt)("p",null,"By default ",(0,l.kt)("a",{parentName:"p",href:"./commands/run"},(0,l.kt)("inlineCode",{parentName:"a"},"moon run"))," will ",(0,l.kt)("em",{parentName:"p"},"always")," run the target, regardless if files have\nactually changed. However, this is typically fine because of our\n",(0,l.kt)("a",{parentName:"p",href:"./concepts/cache"},"smart hashing & cache layer"),". With that being said, if you'd like to ",(0,l.kt)("em",{parentName:"p"},"only")," run a\ntarget if files have changed, pass the ",(0,l.kt)("inlineCode",{parentName:"p"},"--affected")," flag."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected\n")),(0,l.kt)("p",null,"Under the hood, we extract locally touched (created, modified, staged, etc) files from your\nconfigured ",(0,l.kt)("a",{parentName:"p",href:"./config/workspace#vcs"},"VCS"),", and exit early if no files intersect with the task's\n",(0,l.kt)("a",{parentName:"p",href:"./config/project#inputs"},"inputs"),"."),(0,l.kt)("h3",{id:"using-remote-changes"},"Using remote changes"),(0,l.kt)("p",null,"If you'd like to determine affected files based on remote changes instead of local changes, pass the\n",(0,l.kt)("inlineCode",{parentName:"p"},"--remote")," flag. This will extract touched files by comparing the current ",(0,l.kt)("inlineCode",{parentName:"p"},"HEAD")," against the\n",(0,l.kt)("a",{parentName:"p",href:"./config/workspace#defaultbranch"},(0,l.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected --remote\n")),(0,l.kt)("h3",{id:"filtering-based-on-change-status"},"Filtering based on change status"),(0,l.kt)("p",null,"We can take this a step further by filtering down affected files based on a change status, using the\n",(0,l.kt)("inlineCode",{parentName:"p"},"--status")," option. This option accepts the following values: ",(0,l.kt)("inlineCode",{parentName:"p"},"added"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"deleted"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"modified"),",\n",(0,l.kt)("inlineCode",{parentName:"p"},"staged"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"unstaged"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"untracked"),". If not provided, the option defaults to all."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected --status deleted\n")),(0,l.kt)("p",null,"Multiple status can be provided by passing the ",(0,l.kt)("inlineCode",{parentName:"p"},"--status")," option multiple times."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build --affected --status deleted --status modified\n")),(0,l.kt)("h2",{id:"passing-arguments-to-the-underlying-command"},"Passing arguments to the underlying command"),(0,l.kt)("p",null,"If you'd like to pass arbitrary arguments to the underlying task command, in addition to the already\ndefined ",(0,l.kt)("a",{parentName:"p",href:"./config/project#args"},(0,l.kt)("inlineCode",{parentName:"a"},"args")),", you can pass them after ",(0,l.kt)("inlineCode",{parentName:"p"},"--"),". These arguments are ",(0,l.kt)("em",{parentName:"p"},"appended\nas-is"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run app:build -- --force\n")),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"The ",(0,l.kt)("inlineCode",{parentName:"p"},"--")," delimiter and any arguments ",(0,l.kt)("em",{parentName:"p"},"must")," be defined last on the command line.")),(0,l.kt)("h2",{id:"advanced-run-targeting"},"Advanced run targeting"),(0,l.kt)("p",null,"By this point you should have a basic understanding of how to run tasks, but with moon, we want to\nprovide support for advanced workflows and development scenarios. For example, running a target in\nall projects:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run :build\n")),(0,l.kt)("p",null,"Or perhaps running a target based on a query:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},'$ moon run :build --query "language=[javascript, typescript]"\n')),(0,l.kt)("p",null,"Jump to the official ",(0,l.kt)("a",{parentName:"p",href:"./commands/run"},(0,l.kt)("inlineCode",{parentName:"a"},"moon run")," documentation")," for more examples!"),(0,l.kt)("h2",{id:"next-steps"},"Next steps"),(0,l.kt)(i.Z,{links:[{icon:"moon",label:"Migrate to moon",url:"./migrate-to-moon"},{icon:"task",label:"Learn about tasks",url:"./concepts/task"},{icon:"run-task",label:(0,l.kt)(r.Fragment,null,"Learn about ",(0,l.kt)("code",null,"moon run")),url:"./commands/run"}],mdxType:"NextSteps"}))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/81d944d1.48d8a669.js b/assets/js/81d944d1.48d8a669.js deleted file mode 100644 index 8e78dacca7c..00000000000 --- a/assets/js/81d944d1.48d8a669.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4875],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),m=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=m(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=m(r),g=o,f=u["".concat(l,".").concat(g)]||u[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var m=2;m<a;m++)i[m]=r[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},79967:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>m});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},i=void 0,s={permalink:"/blog/moon-v1.1",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx",source:"@site/blog/2023-04-03_moon-v1.1.mdx",title:"moon v1.1 - Task debugging and improvements",description:"With this release, we're introducing some quality of life task improvements.",date:"2023-04-03T00:00:00.000Z",formattedDate:"April 3, 2023",tags:[{label:"tokens",permalink:"/blog/tags/tokens"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.775,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},prevItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"},nextItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"}},l={image:r(89585).Z,authorsImageUrls:[void 0]},m=[],p={toc:m};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're introducing some quality of life task improvements."))}c.isMDXComponent=!0},89585:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.1-1447beccba44240528518a0af56c91f2.png"}}]); \ No newline at end of file diff --git a/assets/js/81d944d1.51932674.js b/assets/js/81d944d1.51932674.js new file mode 100644 index 00000000000..5f2803ba6d6 --- /dev/null +++ b/assets/js/81d944d1.51932674.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74875],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),m=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=m(e.components);return n.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=m(r),g=o,f=u["".concat(l,".").concat(g)]||u[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var m=2;m<a;m++)i[m]=r[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},79967:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>m});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},i=void 0,s={permalink:"/blog/moon-v1.1",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx",source:"@site/blog/2023-04-03_moon-v1.1.mdx",title:"moon v1.1 - Task debugging and improvements",description:"With this release, we're introducing some quality of life task improvements.",date:"2023-04-03T00:00:00.000Z",formattedDate:"April 3, 2023",tags:[{label:"tokens",permalink:"/blog/tags/tokens"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.775,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.1",title:"moon v1.1 - Task debugging and improvements",authors:["milesj"],tags:["tokens","tasks"],image:"./img/moon/v1.1.png"},prevItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"},nextItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"}},l={image:r(89585).Z,authorsImageUrls:[void 0]},m=[],p={toc:m};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're introducing some quality of life task improvements."))}c.isMDXComponent=!0},89585:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.1-1447beccba44240528518a0af56c91f2.png"}}]); \ No newline at end of file diff --git a/assets/js/83943ce1.243cef91.js b/assets/js/83943ce1.243cef91.js deleted file mode 100644 index 9e9ced9a957..00000000000 --- a/assets/js/83943ce1.243cef91.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9821,3893,9514],{72214:(e,t,n)=>{n.r(t),n.d(t,{default:()=>_e});var a=n(27378),l=n(37140),r=n(1123),o=n(75484),i=n(13149),c=n(45161),s=n(25611),d=n(52095),m=n(64654),u=n(99213),b=n(69169);const p="backToTopButton_iEvu",h="backToTopButtonShow_DO8w";function f(){const{shown:e,scrollToTop:t}=(0,b.a)({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",o.k.common.backToTopButton,p,e&&h),type:"button",onClick:t})}var E=n(56903),g=n(35331),v=n(58357),k=n(20624),_=n(10898),C=n(25773);function I(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const S="collapseSidebarButton_oTwn",N="collapseSidebarButtonIcon_pMEX";function y(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",S),onClick:t},a.createElement(I,{className:N}))}var Z=n(10),x=n(83457),T=n(36666),w=n(41763),A=n(80376),L=n(8862),M=n(81884),P=n(76457);function B(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function F(e){let{item:t,onItemClick:n,activePath:r,level:i,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,k.L)(),E=function(e){const t=(0,P.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,c.Wl)(e):void 0),[e,t])}(t),g=(0,c._F)(t,r),v=(0,L.Mg)(h,r),{collapsed:_,setCollapsed:I}=(0,A.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:S,setExpandedItem:N}=(0,T.f)(),y=function(e){void 0===e&&(e=!_),N(e?null:s),I(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const r=(0,w.D9)(t);(0,a.useEffect)((()=>{t&&!r&&n&&l(!1)}),[t,r,n,l])}({isActive:g,collapsed:_,updateCollapsed:y}),(0,a.useEffect)((()=>{b&&null!=S&&S!==s&&f&&I(!0)}),[b,S,s,I,f]),a.createElement("li",{className:(0,l.Z)(o.k.docs.docSidebarItemCategory,o.k.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?y(!1):(e.preventDefault(),y())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!_:void 0,href:b?E??"#":E},d),u),h&&b&&a.createElement(B,{categoryLabel:u,onClick:e=>{e.preventDefault(),y()}})),a.createElement(A.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(z,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:r,level:i+1})))}var H=n(45626),D=n(6125);const O="menuExternalLink_BiEj";function R(e){let{item:t,onItemClick:n,activePath:r,level:i,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,c._F)(t,r),f=(0,H.Z)(m);return a.createElement("li",{className:(0,l.Z)(o.k.docs.docSidebarItemLink,o.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",b),key:u},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",!f&&O,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},f&&{onClick:n?()=>n(t):void 0},d),u,!f&&a.createElement(D.Z,null)))}const j="menuHtmlItem_OniL";function W(e){let{item:t,level:n,index:r}=e;const{value:i,defaultStyle:c,className:s}=t;return a.createElement("li",{className:(0,l.Z)(o.k.docs.docSidebarItemLink,o.k.docs.docSidebarItemLinkLevel(n),c&&[j,"menu__list-item"],s),key:r,dangerouslySetInnerHTML:{__html:i}})}function V(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(F,(0,C.Z)({item:t},n));case"html":return a.createElement(W,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function Y(e){let{items:t,...n}=e;return a.createElement(T.D,null,t.map(((e,t)=>a.createElement(V,(0,C.Z)({key:t,item:e,index:t},n)))))}const z=(0,a.memo)(Y),U="menu_jmj1",G="menuWithAnnouncementBar_YufC";function K(e){let{path:t,sidebar:n,className:r}=e;const i=function(){const{isActive:e}=(0,Z.nT)(),[t,n]=(0,a.useState)(e);return(0,x.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",U,i&&G,r)},a.createElement("ul",{className:(0,l.Z)(o.k.docs.docSidebarMenu,"menu__list")},a.createElement(z,{items:n,activePath:t,level:1})))}const J="sidebar_CUen",q="sidebarWithHideableNavbar_w4KB",Q="sidebarHidden_k6VE",X="sidebarLogo_CYvI";function $(e){let{path:t,sidebar:n,onCollapse:r,isHidden:o}=e;const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:c}}}=(0,k.L)();return a.createElement("div",{className:(0,l.Z)(J,i&&q,o&&Q)},i&&a.createElement(_.Z,{tabIndex:-1,className:X}),a.createElement(K,{path:t,sidebar:n}),c&&a.createElement(y,{onClick:r}))}const ee=a.memo($);var te=n(63471),ne=n(85536);const ae=e=>{let{sidebar:t,path:n}=e;const r=(0,ne.e)();return a.createElement("ul",{className:(0,l.Z)(o.k.docs.docSidebarMenu,"menu__list")},a.createElement(z,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&r.toggle(),"link"===e.type&&r.toggle()},level:1}))};function le(e){return a.createElement(te.Zo,{component:ae,props:e})}const re=a.memo(le);function oe(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(ee,e),l&&a.createElement(re,e))}const ie="expandButton_YOoA",ce="expandButtonIcon_GZLG";function se(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ie,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(I,{className:ce}))}const de={docSidebarContainer:"docSidebarContainer_y0RQ",docSidebarContainerHidden:"docSidebarContainerHidden_uArb",sidebarViewport:"sidebarViewport_EJ1r"};function me(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function ue(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:r}=e;const{pathname:i}=(0,g.TH)(),[c,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{c&&s(!1),!c&&(0,E.n)()&&s(!0),r((e=>!e))}),[r,c]);return a.createElement("aside",{className:(0,l.Z)(o.k.docs.docSidebarContainer,de.docSidebarContainer,n&&de.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(de.docSidebarContainer)&&n&&s(!0)}},a.createElement(me,null,a.createElement("div",{className:(0,l.Z)(de.sidebarViewport,c&&de.sidebarViewportHidden)},a.createElement(oe,{sidebar:t,path:i,onCollapse:d,isHidden:c}),c&&a.createElement(se,{toggleSidebar:d}))))}const be={docMainContainer:"docMainContainer_sTIZ",docMainContainerEnhanced:"docMainContainerEnhanced_iSjt",docItemWrapperEnhanced:"docItemWrapperEnhanced_PxMR"};function pe(e){let{hiddenSidebarContainer:t,children:n}=e;const r=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(be.docMainContainer,(t||!r)&&be.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",be.docItemWrapper,t&&be.docItemWrapperEnhanced)},n))}const he="docPage_KLoz",fe="docsWrapper_ct1J";function Ee(e){let{children:t}=e;const n=(0,d.V)(),[l,r]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:fe},a.createElement(f,null),a.createElement("div",{className:he},n&&a.createElement(ue,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:r}),a.createElement(pe,{hiddenSidebarContainer:l},t)))}var ge=n(53893),ve=n(60505);function ke(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ve.Z,{version:t.version,tag:(0,i.os)(t.pluginId,t.version)}),a.createElement(r.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function _e(e){const{versionMetadata:t}=e,n=(0,c.hI)(e);if(!n)return a.createElement(ge.default,null);const{docElement:i,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ke,e),a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.docsPages,o.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(Ee,null,i)))))}},53893:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(99213),r=n(1123),o=n(64654);function i(){return a.createElement(a.Fragment,null,a.createElement(r.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(o.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},36666:(e,t,n)=>{n.d(t,{D:()=>i,f:()=>c});var a=n(27378),l=n(41763);const r=Symbol("EmptyContext"),o=a.createContext(r);function i(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),r=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(o.Provider,{value:r},t)}function c(){const e=(0,a.useContext)(o);if(e===r)throw new l.i6("DocSidebarItemsExpandedStateProvider");return e}},69169:(e,t,n)=>{n.d(t,{a:()=>o});var a=n(27378),l=n(83457),r=n(24993);function o(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:c,cancelScroll:s}=(0,l.Ct)();return(0,l.RF)(((e,n)=>{let{scrollY:a}=e;const l=n?.scrollY;l&&(i.current?i.current=!1:a>=l?(s(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,r.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>c(0)}}},99746:(e,t,n)=>{const a=n(27378).createContext({options:{banner:"",breadcrumbs:!0,gitRefName:"master",minimal:!1,pluginId:"default",scopes:[]},reflections:{}});t.ApiDataContext=a},26723:(e,t,n)=>{const a=["options","packages"];function l(e,t){if(null==e)return{};var n,a,l=function(e,t){if(null==e)return{};var n,a,l={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}n(54675),n(83335);const r=n(27378),o=n(72214),i=n(99746),c=e=>e&&e.__esModule?e:{default:e},s=c(r),d=c(o);function m(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function u(e,t,n){return Object.entries(e).forEach((a=>{let[l,r]=a;if("id"===l){const a="type"in e;(!a||a&&"reference"!==e.type)&&(t[Number(r)]=e,n&&(e.parentId=n.id))}else Array.isArray(r)?r.forEach((n=>{m(n)&&u(n,t,e)})):m(r)&&u(r,t,e)})),t}function b(e){const t={};return e.forEach((e=>{e.entryPoints.forEach((e=>{u(e.reflection,t)}))})),t}e.exports=function(e){let t=e.options,n=e.packages,o=l(e,a);const c=r.useMemo((()=>({options:t,reflections:b(n)})),[t,n]);return s.default.createElement(i.ApiDataContext.Provider,{value:c},s.default.createElement("div",{className:"apiPage"},s.default.createElement(d.default,o)))}},54675:(e,t,n)=>{n.r(t)},83335:(e,t,n)=>{n.r(t)}}]); \ No newline at end of file diff --git a/assets/js/83943ce1.96ff7e1c.js b/assets/js/83943ce1.96ff7e1c.js new file mode 100644 index 00000000000..e5f58f390ad --- /dev/null +++ b/assets/js/83943ce1.96ff7e1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19821,53893,29514],{72214:(e,t,n)=>{n.r(t),n.d(t,{default:()=>_e});var a=n(27378),l=n(37140),r=n(1123),o=n(75484),i=n(13149),c=n(45161),s=n(25611),d=n(52095),m=n(64654),u=n(99213),b=n(69169);const p="backToTopButton_iEvu",h="backToTopButtonShow_DO8w";function f(){const{shown:e,scrollToTop:t}=(0,b.a)({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",o.k.common.backToTopButton,p,e&&h),type:"button",onClick:t})}var E=n(56903),g=n(35331),v=n(58357),k=n(20624),_=n(10898),C=n(25773);function I(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const S="collapseSidebarButton_oTwn",N="collapseSidebarButtonIcon_pMEX";function y(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",S),onClick:t},a.createElement(I,{className:N}))}var Z=n(10),x=n(83457),T=n(36666),w=n(41763),A=n(80376),L=n(8862),M=n(81884),P=n(76457);function B(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function F(e){let{item:t,onItemClick:n,activePath:r,level:i,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,k.L)(),E=function(e){const t=(0,P.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,c.Wl)(e):void 0),[e,t])}(t),g=(0,c._F)(t,r),v=(0,L.Mg)(h,r),{collapsed:_,setCollapsed:I}=(0,A.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:S,setExpandedItem:N}=(0,T.f)(),y=function(e){void 0===e&&(e=!_),N(e?null:s),I(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const r=(0,w.D9)(t);(0,a.useEffect)((()=>{t&&!r&&n&&l(!1)}),[t,r,n,l])}({isActive:g,collapsed:_,updateCollapsed:y}),(0,a.useEffect)((()=>{b&&null!=S&&S!==s&&f&&I(!0)}),[b,S,s,I,f]),a.createElement("li",{className:(0,l.Z)(o.k.docs.docSidebarItemCategory,o.k.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?y(!1):(e.preventDefault(),y())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!_:void 0,href:b?E??"#":E},d),u),h&&b&&a.createElement(B,{categoryLabel:u,onClick:e=>{e.preventDefault(),y()}})),a.createElement(A.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(z,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:r,level:i+1})))}var H=n(45626),D=n(6125);const O="menuExternalLink_BiEj";function R(e){let{item:t,onItemClick:n,activePath:r,level:i,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,c._F)(t,r),f=(0,H.Z)(m);return a.createElement("li",{className:(0,l.Z)(o.k.docs.docSidebarItemLink,o.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",b),key:u},a.createElement(M.default,(0,C.Z)({className:(0,l.Z)("menu__link",!f&&O,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},f&&{onClick:n?()=>n(t):void 0},d),u,!f&&a.createElement(D.Z,null)))}const j="menuHtmlItem_OniL";function W(e){let{item:t,level:n,index:r}=e;const{value:i,defaultStyle:c,className:s}=t;return a.createElement("li",{className:(0,l.Z)(o.k.docs.docSidebarItemLink,o.k.docs.docSidebarItemLinkLevel(n),c&&[j,"menu__list-item"],s),key:r,dangerouslySetInnerHTML:{__html:i}})}function V(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(F,(0,C.Z)({item:t},n));case"html":return a.createElement(W,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function Y(e){let{items:t,...n}=e;return a.createElement(T.D,null,t.map(((e,t)=>a.createElement(V,(0,C.Z)({key:t,item:e,index:t},n)))))}const z=(0,a.memo)(Y),U="menu_jmj1",G="menuWithAnnouncementBar_YufC";function K(e){let{path:t,sidebar:n,className:r}=e;const i=function(){const{isActive:e}=(0,Z.nT)(),[t,n]=(0,a.useState)(e);return(0,x.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",U,i&&G,r)},a.createElement("ul",{className:(0,l.Z)(o.k.docs.docSidebarMenu,"menu__list")},a.createElement(z,{items:n,activePath:t,level:1})))}const J="sidebar_CUen",q="sidebarWithHideableNavbar_w4KB",Q="sidebarHidden_k6VE",X="sidebarLogo_CYvI";function $(e){let{path:t,sidebar:n,onCollapse:r,isHidden:o}=e;const{navbar:{hideOnScroll:i},docs:{sidebar:{hideable:c}}}=(0,k.L)();return a.createElement("div",{className:(0,l.Z)(J,i&&q,o&&Q)},i&&a.createElement(_.Z,{tabIndex:-1,className:X}),a.createElement(K,{path:t,sidebar:n}),c&&a.createElement(y,{onClick:r}))}const ee=a.memo($);var te=n(63471),ne=n(85536);const ae=e=>{let{sidebar:t,path:n}=e;const r=(0,ne.e)();return a.createElement("ul",{className:(0,l.Z)(o.k.docs.docSidebarMenu,"menu__list")},a.createElement(z,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&r.toggle(),"link"===e.type&&r.toggle()},level:1}))};function le(e){return a.createElement(te.Zo,{component:ae,props:e})}const re=a.memo(le);function oe(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(ee,e),l&&a.createElement(re,e))}const ie="expandButton_YOoA",ce="expandButtonIcon_GZLG";function se(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ie,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(I,{className:ce}))}const de={docSidebarContainer:"docSidebarContainer_y0RQ",docSidebarContainerHidden:"docSidebarContainerHidden_uArb",sidebarViewport:"sidebarViewport_EJ1r"};function me(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function ue(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:r}=e;const{pathname:i}=(0,g.TH)(),[c,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{c&&s(!1),!c&&(0,E.n)()&&s(!0),r((e=>!e))}),[r,c]);return a.createElement("aside",{className:(0,l.Z)(o.k.docs.docSidebarContainer,de.docSidebarContainer,n&&de.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(de.docSidebarContainer)&&n&&s(!0)}},a.createElement(me,null,a.createElement("div",{className:(0,l.Z)(de.sidebarViewport,c&&de.sidebarViewportHidden)},a.createElement(oe,{sidebar:t,path:i,onCollapse:d,isHidden:c}),c&&a.createElement(se,{toggleSidebar:d}))))}const be={docMainContainer:"docMainContainer_sTIZ",docMainContainerEnhanced:"docMainContainerEnhanced_iSjt",docItemWrapperEnhanced:"docItemWrapperEnhanced_PxMR"};function pe(e){let{hiddenSidebarContainer:t,children:n}=e;const r=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(be.docMainContainer,(t||!r)&&be.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",be.docItemWrapper,t&&be.docItemWrapperEnhanced)},n))}const he="docPage_KLoz",fe="docsWrapper_ct1J";function Ee(e){let{children:t}=e;const n=(0,d.V)(),[l,r]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:fe},a.createElement(f,null),a.createElement("div",{className:he},n&&a.createElement(ue,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:r}),a.createElement(pe,{hiddenSidebarContainer:l},t)))}var ge=n(53893),ve=n(60505);function ke(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ve.Z,{version:t.version,tag:(0,i.os)(t.pluginId,t.version)}),a.createElement(r.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function _e(e){const{versionMetadata:t}=e,n=(0,c.hI)(e);if(!n)return a.createElement(ge.default,null);const{docElement:i,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ke,e),a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.docsPages,o.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(Ee,null,i)))))}},53893:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(27378),l=n(99213),r=n(1123),o=n(64654);function i(){return a.createElement(a.Fragment,null,a.createElement(r.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(o.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},36666:(e,t,n)=>{n.d(t,{D:()=>i,f:()=>c});var a=n(27378),l=n(41763);const r=Symbol("EmptyContext"),o=a.createContext(r);function i(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),r=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(o.Provider,{value:r},t)}function c(){const e=(0,a.useContext)(o);if(e===r)throw new l.i6("DocSidebarItemsExpandedStateProvider");return e}},69169:(e,t,n)=>{n.d(t,{a:()=>o});var a=n(27378),l=n(83457),r=n(24993);function o(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:c,cancelScroll:s}=(0,l.Ct)();return(0,l.RF)(((e,n)=>{let{scrollY:a}=e;const l=n?.scrollY;l&&(i.current?i.current=!1:a>=l?(s(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,r.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>c(0)}}},99746:(e,t,n)=>{const a=n(27378).createContext({options:{banner:"",breadcrumbs:!0,gitRefName:"master",minimal:!1,pluginId:"default",scopes:[]},reflections:{}});t.ApiDataContext=a},26723:(e,t,n)=>{const a=["options","packages"];function l(e,t){if(null==e)return{};var n,a,l=function(e,t){if(null==e)return{};var n,a,l={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}n(54675),n(83335);const r=n(27378),o=n(72214),i=n(99746),c=e=>e&&e.__esModule?e:{default:e},s=c(r),d=c(o);function m(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function u(e,t,n){return Object.entries(e).forEach((a=>{let[l,r]=a;if("id"===l){const a="type"in e;(!a||a&&"reference"!==e.type)&&(t[Number(r)]=e,n&&(e.parentId=n.id))}else Array.isArray(r)?r.forEach((n=>{m(n)&&u(n,t,e)})):m(r)&&u(r,t,e)})),t}function b(e){const t={};return e.forEach((e=>{e.entryPoints.forEach((e=>{u(e.reflection,t)}))})),t}e.exports=function(e){let t=e.options,n=e.packages,o=l(e,a);const c=r.useMemo((()=>({options:t,reflections:b(n)})),[t,n]);return s.default.createElement(i.ApiDataContext.Provider,{value:c},s.default.createElement("div",{className:"apiPage"},s.default.createElement(d.default,o)))}},54675:(e,t,n)=>{n.r(t)},83335:(e,t,n)=>{n.r(t)}}]); \ No newline at end of file diff --git a/assets/js/8526ffa3.72675280.js b/assets/js/8526ffa3.72675280.js new file mode 100644 index 00000000000..8516c700f27 --- /dev/null +++ b/assets/js/8526ffa3.72675280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85620],{52991:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/target","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/8526ffa3.79b584ba.js b/assets/js/8526ffa3.79b584ba.js deleted file mode 100644 index b08a570bd29..00000000000 --- a/assets/js/8526ffa3.79b584ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5620],{52991:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/target","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/85730.39feec99.js b/assets/js/85730.39feec99.js new file mode 100644 index 00000000000..33b08a40015 --- /dev/null +++ b/assets/js/85730.39feec99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85730],{35318:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>p});var r=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,a=function(e,n){if(null==e)return{};var t,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=r.createContext({}),s=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},m=function(e){var n=s(e.components);return r.createElement(c.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(t),p=a,f=u["".concat(c,".").concat(p)]||u[p]||d[p]||i;return t?r.createElement(f,o(o({ref:n},m),{},{components:t})):r.createElement(f,o({ref:n},m))}));function p(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=u;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var s=2;s<i;s++)o[s]=t[s];return r.createElement.apply(null,o)}return r.createElement.apply(null,t)}u.displayName="MDXCreateElement"},74903:(e,n,t)=>{t.d(n,{Z:()=>f});var r=t(27378),a=t(37140),i=t(75484),o=t(99213);const l="admonition_uH4V",c="admonitionHeading_P5_N",s="admonitionIcon_MF44",m="admonitionContent_yySL";const d={note:{infimaClassName:"secondary",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:r.createElement(o.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:r.createElement(o.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:r.createElement(o.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:r.createElement(o.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 16 16"},r.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:r.createElement(o.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},u={secondary:"note",important:"info",success:"tip",warning:"danger"};function p(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=r.Children.toArray(e),t=n.find((e=>r.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=r.createElement(r.Fragment,null,n.filter((e=>e!==t)));return{mdxAdmonitionTitle:t,rest:a}}(e.children);return{...e,title:e.title??n,children:t}}function f(e){const{children:n,type:t,title:o,icon:f}=p(e),h=function(e){const n=u[e]??e;return d[n]||(console.warn(`No admonition config found for admonition type "${n}". Using Info as fallback.`),d.info)}(t),v=o??h.label,{iconComponent:y}=h,E=f??r.createElement(y,null);return r.createElement("div",{className:(0,a.Z)(i.k.common.admonition,i.k.common.admonitionType(e.type),"alert",`alert--${h.infimaClassName}`,l)},r.createElement("div",{className:c},r.createElement("span",{className:s},E),v),r.createElement("div",{className:m},n))}},1999:(e,n,t)=>{t.r(n),t.d(n,{default:()=>d});var r=t(25773),a=t(27378),i=t(37140),o=t(99213),l=t(20624),c=t(81884);const s="anchorWithStickyNavbar_JmGV",m="anchorWithHideOnScrollNavbar_pMLv";function d(e){let{as:n,id:t,...d}=e;const{navbar:{hideOnScroll:u}}=(0,l.L)();if("h1"===n||!t)return a.createElement(n,(0,r.Z)({},d,{id:void 0}));const p=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:t});return a.createElement(n,(0,r.Z)({},d,{className:(0,i.Z)("anchor",u?m:s,d.className),id:t}),d.children,a.createElement(c.default,{className:"hash-link",to:`#${t}`,"aria-label":p,title:p},"\u200b"))}},40527:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(27378),a=t(30780);function i(e){const n=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return r.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,r.isValidElement)(e)&&n.includes(e.props?.mdxType)))?r.createElement("code",e):r.createElement(a.Z,e)}},36256:(e,n,t)=>{t.r(n),t.d(n,{default:()=>x});var r=t(25773),a=t(27378),i=t(7092);var o=t(40527),l=t(81884);var c=t(30780);var s=t(37140),m=t(33441),d=t(76457),u=t(80376);const p="details_IpIu",f="isBrowser_QD4r",h="collapsibleContent_Fd2D";function v(e){return!!e&&("SUMMARY"===e.tagName||v(e.parentElement))}function y(e,n){return!!e&&(e===n||y(e.parentElement,n))}function E(e){let{summary:n,children:t,...i}=e;const o=(0,d.Z)(),l=(0,a.useRef)(null),{collapsed:c,setCollapsed:s}=(0,u.u)({initialState:!i.open}),[E,g]=(0,a.useState)(i.open),b=a.isValidElement(n)?n:a.createElement("summary",null,n??"Details");return a.createElement("details",(0,r.Z)({},i,{ref:l,open:E,"data-collapsed":c,className:(0,m.Z)(p,o&&f,i.className),onMouseDown:e=>{v(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const n=e.target;v(n)&&y(n,l.current)&&(e.preventDefault(),c?(s(!1),g(!0)):s(!0))}}),b,a.createElement(u.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{s(e),g(!e)}},a.createElement("div",{className:h},t)))}const g="details_jERq";function b(e){let{...n}=e;return a.createElement(E,(0,r.Z)({},n,{className:(0,s.Z)("alert alert--info",g,n.className)}))}var C=t(1999);function Z(e){return a.createElement(C.default,e)}const N="containsTaskList_QWGu";function T(e){if(void 0!==e)return(0,s.Z)(e,e?.includes("contains-task-list")&&N)}const O="img_SS3x";var w=t(74903);const x={head:function(e){const n=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:n,originalType:t,...r}=e.props;return a.createElement(e.props.originalType,r)}return e}(e):e));return a.createElement(i.Z,e,n)},code:o.Z,a:function(e){return a.createElement(l.default,e)},pre:function(e){return a.createElement(c.Z,(0,a.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const n=a.Children.toArray(e.children),t=n.find((e=>a.isValidElement(e)&&"summary"===e.props?.mdxType)),i=a.createElement(a.Fragment,null,n.filter((e=>e!==t)));return a.createElement(b,(0,r.Z)({},e,{summary:t}),i)},ul:function(e){return a.createElement("ul",(0,r.Z)({},e,{className:T(e.className)}))},img:function(e){return a.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(n=e.className,(0,s.Z)(n,O))}));var n},h1:e=>a.createElement(Z,(0,r.Z)({as:"h1"},e)),h2:e=>a.createElement(Z,(0,r.Z)({as:"h2"},e)),h3:e=>a.createElement(Z,(0,r.Z)({as:"h3"},e)),h4:e=>a.createElement(Z,(0,r.Z)({as:"h4"},e)),h5:e=>a.createElement(Z,(0,r.Z)({as:"h5"},e)),h6:e=>a.createElement(Z,(0,r.Z)({as:"h6"},e)),admonition:w.Z,mermaid:()=>null}}}]); \ No newline at end of file diff --git a/assets/js/8593ff01.26a6a233.js b/assets/js/8593ff01.26a6a233.js deleted file mode 100644 index 1dc4a4860fa..00000000000 --- a/assets/js/8593ff01.26a6a233.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7007],{89064:e=>{e.exports=JSON.parse('{"label":"docker","permalink":"/blog/tags/docker","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/8593ff01.2a398534.js b/assets/js/8593ff01.2a398534.js new file mode 100644 index 00000000000..f63824cc058 --- /dev/null +++ b/assets/js/8593ff01.2a398534.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37007],{89064:e=>{e.exports=JSON.parse('{"label":"docker","permalink":"/blog/tags/docker","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/860d7f34.c81faa15.js b/assets/js/860d7f34.c81faa15.js deleted file mode 100644 index 69e601aec12..00000000000 --- a/assets/js/860d7f34.c81faa15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8495],{80806:s=>{s.exports=JSON.parse('{"label":"shim","permalink":"/blog/tags/shim","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/860d7f34.e4bb48a6.js b/assets/js/860d7f34.e4bb48a6.js new file mode 100644 index 00000000000..129236becf1 --- /dev/null +++ b/assets/js/860d7f34.e4bb48a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28495],{80806:s=>{s.exports=JSON.parse('{"label":"shim","permalink":"/blog/tags/shim","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/861abce9.6c85e833.js b/assets/js/861abce9.6c85e833.js new file mode 100644 index 00000000000..e1475ca0845 --- /dev/null +++ b/assets/js/861abce9.6c85e833.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15995],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),l=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=a,f=u["".concat(i,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(f,c(c({ref:t},p),{},{components:n})):r.createElement(f,c({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=u;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:a,c[1]=s;for(var l=2;l<o;l++)c[l]=n[l];return r.createElement.apply(null,c)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:c}=e;return r.createElement(a.Z,{text:`v${c}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(27378),a=n(40624),o=n(31792);const c={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:i}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?c[i]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},43633:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>p});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const c={title:"sync projects",sidebar_label:"projects"},s=void 0,i={unversionedId:"commands/sync/projects",id:"commands/sync/projects",title:"sync projects",description:"The moon sync projects command will force sync all projects in the workspace to help achieve a",source:"@site/docs/commands/sync/projects.mdx",sourceDirName:"commands/sync",slug:"/commands/sync/projects",permalink:"/docs/commands/sync/projects",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/sync/projects.mdx",tags:[],version:"current",frontMatter:{title:"sync projects",sidebar_label:"projects"},sidebar:"docs",previous:{title:"hooks",permalink:"/docs/commands/sync/hooks"},next:{title:"task",permalink:"/docs/commands/task"}},l={},p=[],m={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{version:"1.8.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon sync projects")," command will force sync ",(0,a.kt)("em",{parentName:"p"},"all")," projects in the workspace to help achieve a\n",(0,a.kt)("a",{parentName:"p",href:"../../faq#what-should-be-considered-the-source-of-truth"},"healthy repository state"),". This applies\nthe following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Ensures cross-project dependencies are linked based on\n",(0,a.kt)("a",{parentName:"li",href:"../../config/project#dependsOn"},(0,a.kt)("inlineCode",{parentName:"a"},"dependsOn")),"."),(0,a.kt)("li",{parentName:"ul"},"Ensures language specific configuration files are present and accurate (",(0,a.kt)("inlineCode",{parentName:"li"},"package.json"),",\n",(0,a.kt)("inlineCode",{parentName:"li"},"tsconfig.json"),", etc)."),(0,a.kt)("li",{parentName:"ul"},"Ensures root configuration and project configuration are in sync."),(0,a.kt)("li",{parentName:"ul"},"Any additional language specific semantics that may be required.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync projects\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"This command should rarely be ran, as ",(0,a.kt)("a",{parentName:"p",href:"../run"},(0,a.kt)("inlineCode",{parentName:"a"},"moon run"))," will sync affected projects\nautomatically! However, when migrating or refactoring, manual syncing may be necessary.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/861abce9.efda154f.js b/assets/js/861abce9.efda154f.js deleted file mode 100644 index 755906720d0..00000000000 --- a/assets/js/861abce9.efda154f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5995],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),l=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),d=a,f=u["".concat(i,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(f,c(c({ref:t},p),{},{components:n})):r.createElement(f,c({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=u;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:a,c[1]=s;for(var l=2;l<o;l++)c[l]=n[l];return r.createElement.apply(null,c)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:c}=e;return r.createElement(a.Z,{text:`v${c}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(27378),a=n(40624),o=n(31792);const c={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:i}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?c[i]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},43633:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>p});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const c={title:"sync projects",sidebar_label:"projects"},s=void 0,i={unversionedId:"commands/sync/projects",id:"commands/sync/projects",title:"sync projects",description:"The moon sync projects command will force sync all projects in the workspace to help achieve a",source:"@site/docs/commands/sync/projects.mdx",sourceDirName:"commands/sync",slug:"/commands/sync/projects",permalink:"/docs/commands/sync/projects",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/sync/projects.mdx",tags:[],version:"current",frontMatter:{title:"sync projects",sidebar_label:"projects"},sidebar:"docs",previous:{title:"hooks",permalink:"/docs/commands/sync/hooks"},next:{title:"task",permalink:"/docs/commands/task"}},l={},p=[],m={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{version:"1.8.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon sync projects")," command will force sync ",(0,a.kt)("em",{parentName:"p"},"all")," projects in the workspace to help achieve a\n",(0,a.kt)("a",{parentName:"p",href:"../../faq#what-should-be-considered-the-source-of-truth"},"healthy repository state"),". This applies\nthe following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Ensures cross-project dependencies are linked based on\n",(0,a.kt)("a",{parentName:"li",href:"../../config/project#dependsOn"},(0,a.kt)("inlineCode",{parentName:"a"},"dependsOn")),"."),(0,a.kt)("li",{parentName:"ul"},"Ensures language specific configuration files are present and accurate (",(0,a.kt)("inlineCode",{parentName:"li"},"package.json"),",\n",(0,a.kt)("inlineCode",{parentName:"li"},"tsconfig.json"),", etc)."),(0,a.kt)("li",{parentName:"ul"},"Ensures root configuration and project configuration are in sync."),(0,a.kt)("li",{parentName:"ul"},"Any additional language specific semantics that may be required.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync projects\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"This command should rarely be ran, as ",(0,a.kt)("a",{parentName:"p",href:"../run"},(0,a.kt)("inlineCode",{parentName:"a"},"moon run"))," will sync affected projects\nautomatically! However, when migrating or refactoring, manual syncing may be necessary.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8777.93eac301.js b/assets/js/8777.93eac301.js deleted file mode 100644 index bbc2adf513f..00000000000 --- a/assets/js/8777.93eac301.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8777],{88777:(e,t,r)=>{function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t,r){var a,c=t.initialState;return{getState:function(){return c},dispatch:function(a,i){var l=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},c);c=e(c,{type:a,props:t,payload:i}),r({state:c,prevState:l})},pendingRequests:(a=[],{add:function(e){return a.push(e),e.finally((function(){a=a.filter((function(t){return t!==e}))}))},cancelAll:function(){a.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===a.length}})}}function c(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){u(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}r.r(t),r.d(t,{DocSearchModal:()=>Dr});var f=0;var m=function(){};function p(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){d(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:m},e);return Promise.resolve(t)})))}))}function v(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return y(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return y(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function g(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?g(Object(r),!0).forEach((function(t){O(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):g(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function S(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?S(Object(r),!0).forEach((function(t){E(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):S(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function E(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?w(Object(r),!0).forEach((function(t){I(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):w(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function I(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function D(e){return function(e){if(Array.isArray(e))return C(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return C(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return C(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function k(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function A(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?k(Object(r),!0).forEach((function(t){x(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):k(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function N(e){return Boolean(e.execute)}function R(e,t){return r=e,Boolean(null==r?void 0:r.execute)?A(A({},e),{},{requests:e.queries.map((function(r){return{query:r,sourceId:t,transformResponse:e.transformResponse}}))}):{items:e,sourceId:t};var r}function q(e){var t=e.reduce((function(e,t){if(!N(t))return e.push(t),e;var r=t.searchClient,n=t.execute,o=t.requesterId,a=t.requests,c=e.find((function(e){return N(t)&&N(e)&&e.searchClient===r&&Boolean(o)&&e.requesterId===o}));if(c){var i;(i=c.items).push.apply(i,D(a))}else{var l={execute:n,requesterId:o,items:a,searchClient:r};e.push(l)}return e}),[]).map((function(e){if(!N(e))return Promise.resolve(e);var t=e,r=t.execute,n=t.items;return r({searchClient:t.searchClient,requests:n})}));return Promise.all(t).then((function(e){return c(e)}))}function _(e,t){return t.map((function(t){var r=e.filter((function(e){return e.sourceId===t.sourceId})),n=r.map((function(e){return e.items})),o=r[0].transformResponse,a=o?o(function(e){var t=e.map((function(e){var t;return P(P({},e),{},{hits:null===(t=e.hits)||void 0===t?void 0:t.map((function(t){return P(P({},t),{},{__autocomplete_indexName:e.index,__autocomplete_queryID:e.queryID})}))})}));return{results:t,hits:t.map((function(e){return e.hits})).filter(Boolean),facetHits:t.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}}(n)):n;return Array.isArray(a),a.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:a}}))}function T(e,t){var r=t;return{then:function(t,n){return T(e.then(H(t,r,e),H(n,r,e)),r)},catch:function(t){return T(e.catch(H(t,r,e)),r)},finally:function(t){return t&&r.onCancelList.push(t),T(e.finally(H(t&&function(){return r.onCancelList=[],t()},r,e)),r)},cancel:function(){r.isCanceled=!0;var e=r.onCancelList;r.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===r.isCanceled}}}function L(e){return T(new Promise((function(t,r){return e(t,r)})),{isCanceled:!1,onCancelList:[]})}function M(e){return T(e,{isCanceled:!1,onCancelList:[]})}function H(e,t,r){return e?function(r){return t.isCanceled?r:e(r)}:r}function F(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,r){var n=(e[r-1]||0)+t;return e.push(n),e}),[]).reduce((function(t,r){return r<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var r=t.items[function(e){for(var t=e.state,r=e.collection,n=!1,o=0,a=0;!1===n;){var c=t.collections[o];if(c===r){n=!0;break}a+=c.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],n=t.source;return{item:r,itemInputValue:n.getItemInputValue({item:r,state:e}),itemUrl:n.getItemUrl({item:r,state:e}),source:n}}L.resolve=function(e){return M(Promise.resolve(e))},L.reject=function(e){return M(Promise.reject(e))};var U=["event","nextState","props","query","refresh","store"];function B(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function V(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?B(Object(r),!0).forEach((function(t){z(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):B(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var J,$,W,Q=null,Y=(J=-1,$=-1,W=void 0,function(e){var t=++J;return Promise.resolve(e).then((function(e){return W&&t<$?W:($=t,W=e,e)}))});function G(e){var t=e.event,r=e.nextState,n=void 0===r?{}:r,o=e.props,a=e.query,i=e.refresh,l=e.store,u=K(e,U);Q&&o.environment.clearTimeout(Q);var s=u.setCollections,f=u.setIsOpen,m=u.setQuery,p=u.setActiveItemId,d=u.setStatus;if(m(a),p(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var h,v=l.getState().collections.map((function(e){return V(V({},e),{},{items:[]})}));d("idle"),s(v),f(null!==(h=n.isOpen)&&void 0!==h?h:o.shouldPanelOpen({state:l.getState()}));var y=M(Y(v).then((function(){return Promise.resolve()})));return l.pendingRequests.add(y)}d("loading"),Q=o.environment.setTimeout((function(){d("stalled")}),o.stallThreshold);var g=M(Y(o.getSources(V({query:a,refresh:i,state:l.getState()},u)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(V({query:a,refresh:i,state:l.getState()},u))).then((function(t){return R(t,e.sourceId)}))}))).then(q).then((function(t){return _(t,e)})).then((function(e){return function(e){var t=e.collections,r=e.props,n=e.state,o=t.reduce((function(e,t){return j(j({},e),{},E({},t.source.sourceId,j(j({},t.source),{},{getItems:function(){return c(t.items)}})))}),{});return c(r.reshape({sources:Object.values(o),sourcesBySourceId:o,state:n})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var r;d("idle"),s(e);var c=o.shouldPanelOpen({state:l.getState()});f(null!==(r=n.isOpen)&&void 0!==r?r:o.openOnFocus&&!a&&c||c);var m=F(l.getState());if(null!==l.getState().activeItemId&&m){var p=m.item,h=m.itemInputValue,v=m.itemUrl,y=m.source;y.onActive(V({event:t,item:p,itemInputValue:h,itemUrl:v,refresh:i,source:y,state:l.getState()},u))}})).finally((function(){d("idle"),Q&&o.environment.clearTimeout(Q)}));return l.pendingRequests.add(g)}var X=["event","props","refresh","store"];function Z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ee(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(r),!0).forEach((function(t){te(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Z(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function re(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var ne=/((gt|sm)-|galaxy nexus)|samsung[- ]/i;var oe=["props","refresh","store"],ae=["inputElement","formElement","panelElement"],ce=["inputElement"],ie=["inputElement","maxLength"],le=["item","source"];function ue(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function se(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ue(Object(r),!0).forEach((function(t){fe(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ue(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pe(e){var t=e.props,r=e.refresh,n=e.store,o=me(e,oe);return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,a=e.panelElement;function c(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,a].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return se({onTouchStart:c,onMouseDown:c,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},me(e,ae))},getRootProps:function(e){return se({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return se({action:"",noValidate:!0,role:"search",onSubmit:function(a){var c;a.preventDefault(),t.onSubmit(se({event:a,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(c=e.inputElement)||void 0===c||c.blur()},onReset:function(a){var c;a.preventDefault(),t.onReset(se({event:a,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(c=e.inputElement)||void 0===c||c.focus()}},me(e,ce))},getLabelProps:function(e){return se({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},e)},getInputProps:function(e){var a;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&G(se({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var i=e||{},l=(i.inputElement,i.maxLength),u=void 0===l?512:l,s=me(i,ie),f=F(n.getState()),p=function(e){return Boolean(e&&e.match(ne))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),d=null!=f&&f.itemUrl&&!p?"go":"search";return se({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:d,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){G(se({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,a=re(e,X);if("ArrowUp"===t.key||"ArrowDown"===t.key){var c=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},i=function(){var e=F(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,c=e.itemInputValue,i=e.itemUrl,l=e.source;l.onActive(ee({event:t,item:r,itemInputValue:c,itemUrl:i,refresh:n,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?G(ee({event:t,props:r,query:o.getState().query,refresh:n,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),i(),setTimeout(c,0)})):(o.dispatch(t.key,{}),i(),c())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=F(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});G(ee({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},a)).then((function(){m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a))}))}}}(se({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:m,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},s)},getPanelProps:function(e){return se({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){return se({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},e)},getItemProps:function(e){var a=e.item,c=e.source,i=me(e,le);return se({id:"".concat(t.id,"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=F(n.getState());if(null!==n.getState().activeItemId&&t){var c=t.item,i=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(se({event:e,item:c,itemInputValue:i,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():G(se({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(se({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},i)}}}var de=[{segment:"autocomplete-core",version:"1.7.1"}];function he(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ve(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?he(Object(r),!0).forEach((function(t){ye(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):he(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e){var t,r,n,o,a=e.plugins,c=e.options,i=null===(t=((null===(r=c.__autocomplete_metadata)||void 0===r?void 0:r.userAgents)||[])[0])||void 0===t?void 0:t.segment,l=i?ye({},i,Object.keys((null===(n=c.__autocomplete_metadata)||void 0===n?void 0:n.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:ve({"autocomplete-core":Object.keys(c)},l),ua:de.concat((null===(o=c.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function be(e){var t,r=e.state;return!1===r.isOpen||null===r.activeItemId?null:(null===(t=F(r))||void 0===t?void 0:t.itemInputValue)||null}function Oe(e,t,r,n){if(!r)return null;if(e<0&&(null===t||null!==n&&0===t))return r+e;var o=(null===t?-1:t)+e;return o<=-1||o>=r?null===n?null:0:o}function Se(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function je(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Se(Object(r),!0).forEach((function(t){Ee(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Se(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ee(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var we=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return je(je({},e),{},{activeItemId:t.payload});case"setQuery":return je(je({},e),{},{query:t.payload,completion:null});case"setCollections":return je(je({},e),{},{collections:t.payload});case"setIsOpen":return je(je({},e),{},{isOpen:t.payload});case"setStatus":return je(je({},e),{},{status:t.payload});case"setContext":return je(je({},e),{},{context:je(je({},e.context),t.payload)});case"ArrowDown":var r=je(je({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:Oe(1,e.activeItemId,s(e),t.props.defaultActiveItemId)});return je(je({},r),{},{completion:be({state:r})});case"ArrowUp":var n=je(je({},e),{},{activeItemId:Oe(-1,e.activeItemId,s(e),t.props.defaultActiveItemId)});return je(je({},n),{},{completion:be({state:n})});case"Escape":return e.isOpen?je(je({},e),{},{activeItemId:null,isOpen:!1,completion:null}):je(je({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return je(je({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return je(je({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return je(je({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:je(je({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return je(je({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Pe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Pe(Object(r),!0).forEach((function(t){De(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Pe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function De(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ce(e){var t=[],r=function(e,t){var r,n="undefined"!=typeof window?window:{},o=e.plugins||[];return b(b({debug:!1,openOnFocus:!1,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,environment:n,shouldPanelOpen:function(e){return s(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(f++),plugins:o,initialState:b({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(v(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return h(e,r)}))).then((function(e){return c(e)})).then((function(e){return e.map((function(e){return b(b({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:b({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}(e,t),n=a(we,r,(function(e){var t=e.prevState,n=e.state;r.onStateChange(Ie({prevState:t,state:n,refresh:u},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var r=0,n=e.map((function(e){return l(l({},e),{},{items:c(e.items).map((function(e){return l(l({},e),{},{__autocomplete_id:r++})}))})}));t.dispatch("setCollections",n)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:n}),i=pe(Ie({props:r,refresh:u,store:n},o));function u(){return G(Ie({event:new Event("input"),nextState:{isOpen:n.getState().isOpen},props:r,query:n.getState().query,refresh:u,store:n},o))}return r.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,Ie(Ie({},o),{},{refresh:u,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})}}))})),function(e){var t,r,n=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(r=t.userAgent)||void 0===r?void 0:r.includes("Algolia Crawler")){var a=o.document.createElement("meta"),c=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(n),c.appendChild(a)}),0)}}({metadata:ge({plugins:r.plugins,options:e}),environment:r.environment}),Ie(Ie({refresh:u},i),o)}var ke=r(27378);function Ae(e){var t=e.translations,r=(void 0===t?{}:t).searchByText,n=void 0===r?"Search by":r;return ke.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},ke.createElement("span",{className:"DocSearch-Label"},n),ke.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img"},ke.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function xe(e){return ke.createElement("svg",{width:"15",height:"15","aria-label":e.ariaLabel,role:"img"},ke.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function Ne(e){var t=e.translations,r=void 0===t?{}:t,n=r.selectText,o=void 0===n?"to select":n,a=r.selectKeyAriaLabel,c=void 0===a?"Enter key":a,i=r.navigateText,l=void 0===i?"to navigate":i,u=r.navigateUpKeyAriaLabel,s=void 0===u?"Arrow up":u,f=r.navigateDownKeyAriaLabel,m=void 0===f?"Arrow down":f,p=r.closeText,d=void 0===p?"to close":p,h=r.closeKeyAriaLabel,v=void 0===h?"Escape key":h,y=r.searchByText,g=void 0===y?"Search by":y;return ke.createElement(ke.Fragment,null,ke.createElement("div",{className:"DocSearch-Logo"},ke.createElement(Ae,{translations:{searchByText:g}})),ke.createElement("ul",{className:"DocSearch-Commands"},ke.createElement("li",null,ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:c},ke.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),ke.createElement("span",{className:"DocSearch-Label"},o)),ke.createElement("li",null,ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:m},ke.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:s},ke.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),ke.createElement("span",{className:"DocSearch-Label"},l)),ke.createElement("li",null,ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:v},ke.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),ke.createElement("span",{className:"DocSearch-Label"},d))))}function Re(e){var t=e.hit,r=e.children;return ke.createElement("a",{href:t.url},r)}function qe(){return ke.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function _e(e){var t=e.translations,r=void 0===t?{}:t,n=r.titleText,o=void 0===n?"Unable to fetch results":n,a=r.helpText,c=void 0===a?"You might want to check your network connection.":a;return ke.createElement("div",{className:"DocSearch-ErrorScreen"},ke.createElement("div",{className:"DocSearch-Screen-Icon"},ke.createElement(qe,null)),ke.createElement("p",{className:"DocSearch-Title"},o),ke.createElement("p",{className:"DocSearch-Help"},c))}function Te(){return ke.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}var Le=["translations"];function Me(e){return function(e){if(Array.isArray(e))return He(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return He(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return He(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function He(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Fe(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ue(e){var t=e.translations,r=void 0===t?{}:t,n=Fe(e,Le),o=r.noResultsText,a=void 0===o?"No results for":o,c=r.suggestedQueryText,i=void 0===c?"Try searching for":c,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return ke.createElement("div",{className:"DocSearch-NoResults"},ke.createElement("div",{className:"DocSearch-Screen-Icon"},ke.createElement(Te,null)),ke.createElement("p",{className:"DocSearch-Title"},a,' "',ke.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&ke.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},ke.createElement("p",{className:"DocSearch-Help"},i,":"),ke.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(Me(e),[ke.createElement("li",{key:t},ke.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&ke.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),ke.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var Be=function(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ve(e){switch(e.type){case"lvl1":return ke.createElement(Be,null);case"content":return ke.createElement(Ke,null);default:return ke.createElement(ze,null)}}function ze(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function Ke(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Je(){return ke.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),ke.createElement("path",{d:"M8 17l-6-6 6-6"})))}var $e=["hit","attribute","tagName"];function We(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?We(Object(r),!0).forEach((function(t){Ye(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):We(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ge(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xe(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ze(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,a=Ge(e,$e);return(0,ke.createElement)(o,Qe(Qe({},a),{},{dangerouslySetInnerHTML:{__html:Xe(t,"_snippetResult.".concat(r,".value"))||Xe(t,r)}}))}function et(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,a=[],c=!0,i=!1;try{for(r=r.call(e);!(c=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);c=!0);}catch(l){i=!0,o=l}finally{try{c||null==r.return||r.return()}finally{if(i)throw o}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return tt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return tt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function rt(){return rt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rt.apply(this,arguments)}function nt(e){return e.collection&&0!==e.collection.items.length?ke.createElement("section",{className:"DocSearch-Hits"},ke.createElement("div",{className:"DocSearch-Hit-source"},e.title),ke.createElement("ul",e.getListProps(),e.collection.items.map((function(t,r){return ke.createElement(ot,rt({key:[e.title,t.objectID].join(":"),item:t,index:r},e))})))):null}function ot(e){var t=e.item,r=e.index,n=e.renderIcon,o=e.renderAction,a=e.getItemProps,c=e.onItemClick,i=e.collection,l=e.hitComponent,u=et(ke.useState(!1),2),s=u[0],f=u[1],m=et(ke.useState(!1),2),p=m[0],d=m[1],h=ke.useRef(null),v=l;return ke.createElement("li",rt({className:["DocSearch-Hit",t.__docsearch_parent&&"DocSearch-Hit--Child",s&&"DocSearch-Hit--deleting",p&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){h.current&&h.current()}},a({item:t,source:i.source,onClick:function(){c(t)}})),ke.createElement(v,{hit:t},ke.createElement("div",{className:"DocSearch-Hit-Container"},n({item:t,index:r}),t.hierarchy[t.type]&&"lvl1"===t.type&&ke.createElement("div",{className:"DocSearch-Hit-content-wrapper"},ke.createElement(Ze,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.lvl1"}),t.content&&ke.createElement(Ze,{className:"DocSearch-Hit-path",hit:t,attribute:"content"})),t.hierarchy[t.type]&&("lvl2"===t.type||"lvl3"===t.type||"lvl4"===t.type||"lvl5"===t.type||"lvl6"===t.type)&&ke.createElement("div",{className:"DocSearch-Hit-content-wrapper"},ke.createElement(Ze,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.".concat(t.type)}),ke.createElement(Ze,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),"content"===t.type&&ke.createElement("div",{className:"DocSearch-Hit-content-wrapper"},ke.createElement(Ze,{className:"DocSearch-Hit-title",hit:t,attribute:"content"}),ke.createElement(Ze,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),o({item:t,runDeleteTransition:function(e){f(!0),h.current=e},runFavoriteTransition:function(e){d(!0),h.current=e}}))))}var at=/(<mark>|<\/mark>)/g,ct=RegExp(at.source);function it(e){var t,r,n,o,a,c=e;if(!c.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var i=((c.__docsearch_parent?null===(t=c.__docsearch_parent)||void 0===t||null===(r=t._highlightResult)||void 0===r||null===(n=r.hierarchy)||void 0===n?void 0:n.lvl0:null===(o=e._highlightResult)||void 0===o||null===(a=o.hierarchy)||void 0===a?void 0:a.lvl0)||{}).value;return i&&ct.test(i)?i.replace(at,""):i}function lt(){return lt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},lt.apply(this,arguments)}function ut(e){return ke.createElement("div",{className:"DocSearch-Dropdown-Container"},e.state.collections.map((function(t){if(0===t.items.length)return null;var r=it(t.items[0]);return ke.createElement(nt,lt({},e,{key:t.source.sourceId,title:r,collection:t,renderIcon:function(e){var r,n=e.item,o=e.index;return ke.createElement(ke.Fragment,null,n.__docsearch_parent&&ke.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},ke.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},n.__docsearch_parent!==(null===(r=t.items[o+1])||void 0===r?void 0:r.__docsearch_parent)?ke.createElement("path",{d:"M8 6v21M20 27H8.3"}):ke.createElement("path",{d:"M8 6v42M20 27H8.3"}))),ke.createElement("div",{className:"DocSearch-Hit-icon"},ke.createElement(Ve,{type:n.type})))},renderAction:function(){return ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement(Je,null))}}))})),e.resultsFooterComponent&&ke.createElement("section",{className:"DocSearch-HitsFooter"},ke.createElement(e.resultsFooterComponent,{state:e.state})))}function st(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),ke.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function ft(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function mt(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var pt=["translations"];function dt(){return dt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},dt.apply(this,arguments)}function ht(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vt(e){var t=e.translations,r=void 0===t?{}:t,n=ht(e,pt),o=r.recentSearchesTitle,a=void 0===o?"Recent":o,c=r.noRecentSearchesText,i=void 0===c?"No recent searches":c,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,d=r.removeFavoriteSearchButtonTitle,h=void 0===d?"Remove this search from favorites":d;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:ke.createElement("div",{className:"DocSearch-StartScreen"},ke.createElement("p",{className:"DocSearch-Help"},i)):!1===n.hasCollections?null:ke.createElement("div",{className:"DocSearch-Dropdown-Container"},ke.createElement(nt,dt({},n,{title:a,collection:n.state.collections[0],renderIcon:function(){return ke.createElement("div",{className:"DocSearch-Hit-icon"},ke.createElement(st,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return ke.createElement(ke.Fragment,null,ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},ke.createElement(ft,null))),ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},ke.createElement(mt,null))))}})),ke.createElement(nt,dt({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return ke.createElement("div",{className:"DocSearch-Hit-icon"},ke.createElement(ft,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement("button",{className:"DocSearch-Hit-action-button",title:h,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},ke.createElement(mt,null)))}})))}var yt=["translations"];function gt(){return gt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},gt.apply(this,arguments)}function bt(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ot=ke.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=bt(e,yt);if("error"===n.state.status)return ke.createElement(_e,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?ke.createElement(Ue,gt({},n,{translations:null==r?void 0:r.noResultsScreen})):ke.createElement(ut,n):ke.createElement(vt,gt({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function St(){return ke.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},ke.createElement("g",{fill:"none",fillRule:"evenodd"},ke.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},ke.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),ke.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},ke.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var jt=r(56573),Et=["translations"];function wt(){return wt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},wt.apply(this,arguments)}function Pt(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function It(e){var t=e.translations,r=void 0===t?{}:t,n=Pt(e,Et),o=r.resetButtonTitle,a=void 0===o?"Clear the query":o,c=r.resetButtonAriaLabel,i=void 0===c?"Clear the query":c,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return ke.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),ke.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),ke.createElement(ke.Fragment,null,ke.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},ke.createElement("label",wt({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),ke.createElement(jt.W,null)),ke.createElement("div",{className:"DocSearch-LoadingIndicator"},ke.createElement(St,null)),ke.createElement("input",wt({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:64}))),ke.createElement("button",{type:"reset",title:a,className:"DocSearch-Reset","aria-label":i,hidden:!n.state.query},ke.createElement(mt,null))),ke.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var Dt=["_highlightResult","_snippetResult"];function Ct(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function At(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=kt(t),a=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,Ct(t,Dt)),c=a.findIndex((function(e){return e.objectID===r.objectID}));c>-1&&a.splice(c,1),a.unshift(r),a=a.slice(0,n),o.setItem(a)},remove:function(e){a=a.filter((function(t){return t.objectID!==e.objectID})),o.setItem(a)},getAll:function(){return a}}}function xt(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}");return{get:(e,t,r={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{const r=JSON.stringify(e),n=o()[r];return Promise.all([n||t(),void 0!==n])})).then((([e,t])=>Promise.all([e,t||r.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const a=o();return a[JSON.stringify(e)]=r,n().setItem(t,JSON.stringify(a)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Nt(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Nt({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Nt({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Nt({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Nt({caches:t}).clear()))}}function Rt(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);const c=n(),i=o&&o.miss||(()=>Promise.resolve());return c.then((e=>i(e))).then((()=>c))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function qt(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function _t(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Tt(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Lt="4.14.2",Mt={WithinQueryParameters:0,WithinHeaders:1};function Ht(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ft={Read:1,Write:2,Any:3},Ut=1,Bt=2,Vt=3,zt=12e4;function Kt(e,t=Ut){return{...e,status:t,lastUpdate:Date.now()}}function Jt(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ft.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ft.Any}}const $t="GET",Wt="POST";function Qt(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Kt(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===Ut||Date.now()-e.lastUpdate>zt}(e))),n=e.filter((e=>function(e){return e.status===Vt&&Date.now()-e.lastUpdate<=zt}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Jt(e))):t}}))}function Yt(e,t,r,n){const o=[],a=function(e,t){if(e.method===$t||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),c=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),i=r.method,l=r.method!==$t?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:er(o)};const p={data:a,headers:c,method:i,url:Xt(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},d=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},h={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=d(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",tr(n)),e.hostsCache.set(m,Kt(m,r.isTimedOut?Vt:Bt))]).then((()=>f(t,l)))},onFail(e){throw d(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,er(o))}};return e.requester.send(p).then((e=>((e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e))(e,h)))};return Qt(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Gt(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Xt(e,t,r){const n=Zt(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Zt(e){return Object.keys(e).map((t=>{return Tt("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function er(e){return e.map((e=>tr(e)))}function tr(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const rr=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Mt.WithinHeaders?n:{},queryParameters:()=>e===Mt.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Mt.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:a,timeouts:c,userAgent:i,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:a,timeouts:c,userAgent:i,headers:s,queryParameters:u,hosts:l.map((e=>Jt(e))),read(e,t){const r=Ht(t,f.timeouts.read),n=()=>Yt(f,f.hosts.filter((e=>0!=(e.accept&Ft.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Yt(f,f.hosts.filter((e=>0!=(e.accept&Ft.Write))),e,Ht(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ft.Read},{url:`${t}.algolia.net`,accept:Ft.Write}].concat(qt([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return _t(o,e.methods)},nr=e=>(t,r)=>t.method===$t?e.transporter.read(t,r):e.transporter.write(t,r),or=e=>(t,r={})=>_t({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),ar=e=>(t,r)=>{const n=t.map((e=>({...e,params:Zt(e.params||{})})));return e.transporter.read({method:Wt,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},cr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...a}=t.params;return or(e)(t.indexName,{methods:{searchForFacetValues:ur}}).searchForFacetValues(n,o,{...r,...a})}))),ir=e=>(t,r,n)=>e.transporter.read({method:Wt,path:Tt("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),lr=e=>(t,r)=>e.transporter.read({method:Wt,path:Tt("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),ur=e=>(t,r,n)=>e.transporter.read({method:Wt,path:Tt("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),sr=1,fr=2,mr=3;function pr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let a;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===a&&(clearTimeout(o),a=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(a),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(a),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=mr,{debug:(e,t)=>(sr>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(fr>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Rt(),requestsCache:Rt({serializable:!1}),hostsCache:Nt({caches:[xt({key:`4.14.2-${e}`}),Rt()]}),userAgent:Gt(Lt).add({segment:"Browser",version:"lite"}),authMode:Mt.WithinQueryParameters};var o;return rr({...n,...r,methods:{search:ar,searchForFacetValues:cr,multipleQueries:ar,multipleSearchForFacetValues:cr,customRequest:nr,initIndex:e=>t=>or(e)(t,{methods:{search:lr,searchForFacetValues:ur,findAnswers:ir}})}})}pr.version=Lt;const dr=pr;var hr="3.2.1";function vr(){}function yr(e){return e}function gr(e,t){return e.reduce((function(e,r){var n=t(r);return e.hasOwnProperty(n)||(e[n]=[]),e[n].length<5&&e[n].push(r),e}),{})}var br=["footer","searchBox"];function Or(){return Or=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Or.apply(this,arguments)}function Sr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jr(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Sr(Object(r),!0).forEach((function(t){Er(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Sr(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Er(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function wr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,a=[],c=!0,i=!1;try{for(r=r.call(e);!(c=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);c=!0);}catch(l){i=!0,o=l}finally{try{c||null==r.return||r.return()}finally{if(i)throw o}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Pr(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Pr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pr(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Ir(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dr(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,a=void 0===o?"Search docs":o,c=e.searchParameters,i=e.onClose,l=void 0===i?vr:i,u=e.transformItems,s=void 0===u?yr:u,f=e.hitComponent,m=void 0===f?Re:f,p=e.resultsFooterComponent,d=void 0===p?function(){return null}:p,h=e.navigator,v=e.initialScrollY,y=void 0===v?0:v,g=e.transformSearchClient,b=void 0===g?yr:g,O=e.disableUserPersonalization,S=void 0!==O&&O,j=e.initialQuery,E=void 0===j?"":j,w=e.translations,P=void 0===w?{}:w,I=e.getMissingResultsUrl,D=P.footer,C=P.searchBox,k=Ir(P,br),A=wr(ke.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),x=A[0],N=A[1],R=ke.useRef(null),q=ke.useRef(null),_=ke.useRef(null),T=ke.useRef(null),L=ke.useRef(null),M=ke.useRef(10),H=ke.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,64):"").current,F=ke.useRef(E||H).current,U=function(e,t,r){return ke.useMemo((function(){var n=dr(e,t);return n.addAlgoliaAgent("docsearch",hr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",hr),r(n)}),[e,t,r])}(t,r,b),B=ke.useRef(At({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,V=ke.useRef(At({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===B.getAll().length?7:4})).current,z=ke.useCallback((function(e){if(!S){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===B.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&V.add(t)}}),[B,V,S]),K=ke.useMemo((function(){return Ce({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:F,context:{searchSuggestions:[]}},navigator:h,onStateChange:function(e){N(e.state)},getSources:function(e){var t=e.query,r=e.state,o=e.setContext,a=e.setStatus;return t?U.search([{query:t,indexName:n,params:jr({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(M.current),"hierarchy.lvl2:".concat(M.current),"hierarchy.lvl3:".concat(M.current),"hierarchy.lvl4:".concat(M.current),"hierarchy.lvl5:".concat(M.current),"hierarchy.lvl6:".concat(M.current),"content:".concat(M.current)],snippetEllipsisText:"\u2026",highlightPreTag:"<mark>",highlightPostTag:"</mark>",hitsPerPage:20},c)}]).catch((function(e){throw"RetryError"===e.name&&a("error"),e})).then((function(e){var t=e.results[0],n=t.hits,a=t.nbHits,c=gr(n,(function(e){return it(e)}));return r.context.searchSuggestions.length<Object.keys(c).length&&o({searchSuggestions:Object.keys(c)}),o({nbHits:a}),Object.values(c).map((function(e,t){return{sourceId:"hits".concat(t),onSelect:function(e){var t=e.item,r=e.event;z(t),r.shiftKey||r.ctrlKey||r.metaKey||l()},getItemUrl:function(e){return e.item.url},getItems:function(){return Object.values(gr(e,(function(e){return e.hierarchy.lvl1}))).map(s).map((function(e){return e.map((function(t){return jr(jr({},t),{},{__docsearch_parent:"lvl1"!==t.type&&e.find((function(e){return"lvl1"===e.type&&e.hierarchy.lvl1===t.hierarchy.lvl1}))})}))})).flat()}}}))})):S?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),r.shiftKey||r.ctrlKey||r.metaKey||l()},getItemUrl:function(e){return e.item.url},getItems:function(){return V.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),r.shiftKey||r.ctrlKey||r.metaKey||l()},getItemUrl:function(e){return e.item.url},getItems:function(){return B.getAll()}}]}})}),[n,c,U,l,V,B,z,F,a,h,s,S]),J=K.getEnvironmentProps,$=K.getRootProps,W=K.refresh;return function(e){var t=e.getEnvironmentProps,r=e.panelElement,n=e.formElement,o=e.inputElement;ke.useEffect((function(){if(r&&n&&o){var e=t({panelElement:r,formElement:n,inputElement:o}),a=e.onTouchStart,c=e.onTouchMove;return window.addEventListener("touchstart",a),window.addEventListener("touchmove",c),function(){window.removeEventListener("touchstart",a),window.removeEventListener("touchmove",c)}}}),[t,r,n,o])}({getEnvironmentProps:J,panelElement:T.current,formElement:_.current,inputElement:L.current}),function(e){var t=e.container;ke.useEffect((function(){if(t){var e=t.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), input:not([disabled])"),r=e[0],n=e[e.length-1];return t.addEventListener("keydown",o),function(){t.removeEventListener("keydown",o)}}function o(e){"Tab"===e.key&&(e.shiftKey?document.activeElement===r&&(e.preventDefault(),n.focus()):document.activeElement===n&&(e.preventDefault(),r.focus()))}}),[t])}({container:R.current}),ke.useEffect((function(){return document.body.classList.add("DocSearch--active"),function(){var e,t;document.body.classList.remove("DocSearch--active"),null===(e=(t=window).scrollTo)||void 0===e||e.call(t,0,y)}}),[]),ke.useEffect((function(){window.matchMedia("(max-width: 768px)").matches&&(M.current=5)}),[]),ke.useEffect((function(){T.current&&(T.current.scrollTop=0)}),[x.query]),ke.useEffect((function(){F.length>0&&(W(),L.current&&L.current.focus())}),[F,W]),ke.useEffect((function(){function e(){if(q.current){var e=.01*window.innerHeight;q.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),ke.createElement("div",Or({ref:R},$({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===x.status&&"DocSearch-Container--Stalled","error"===x.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&l()}}),ke.createElement("div",{className:"DocSearch-Modal",ref:q},ke.createElement("header",{className:"DocSearch-SearchBar",ref:_},ke.createElement(It,Or({},K,{state:x,autoFocus:0===F.length,inputRef:L,isFromSelection:Boolean(F)&&F===H,translations:C,onClose:l}))),ke.createElement("div",{className:"DocSearch-Dropdown",ref:T},ke.createElement(Ot,Or({},K,{indexName:n,state:x,hitComponent:m,resultsFooterComponent:d,disableUserPersonalization:S,recentSearches:V,favoriteSearches:B,inputRef:L,translations:k,getMissingResultsUrl:I,onItemClick:function(e){z(e),l()}}))),ke.createElement("footer",{className:"DocSearch-Footer"},ke.createElement(Ne,{translations:D}))))}}}]); \ No newline at end of file diff --git a/assets/js/87f861ef.7b5d71e0.js b/assets/js/87f861ef.7b5d71e0.js new file mode 100644 index 00000000000..6774850f265 --- /dev/null +++ b/assets/js/87f861ef.7b5d71e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43408],{97390:e=>{e.exports=JSON.parse('{"label":"dependency","permalink":"/blog/tags/dependency","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/87f861ef.e399e304.js b/assets/js/87f861ef.e399e304.js deleted file mode 100644 index 5b2892a8e38..00000000000 --- a/assets/js/87f861ef.e399e304.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3408],{97390:e=>{e.exports=JSON.parse('{"label":"dependency","permalink":"/blog/tags/dependency","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/88777.90211865.js b/assets/js/88777.90211865.js new file mode 100644 index 00000000000..4ab813c86b7 --- /dev/null +++ b/assets/js/88777.90211865.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88777],{88777:(e,t,r)=>{function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t,r){var a,c=t.initialState;return{getState:function(){return c},dispatch:function(a,i){var l=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},c);c=e(c,{type:a,props:t,payload:i}),r({state:c,prevState:l})},pendingRequests:(a=[],{add:function(e){return a.push(e),e.finally((function(){a=a.filter((function(t){return t!==e}))}))},cancelAll:function(){a.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===a.length}})}}function c(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){u(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}r.r(t),r.d(t,{DocSearchModal:()=>Dr});var f=0;var m=function(){};function p(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){d(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:m},e);return Promise.resolve(t)})))}))}function v(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return y(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return y(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function g(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?g(Object(r),!0).forEach((function(t){O(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):g(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function S(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?S(Object(r),!0).forEach((function(t){E(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):S(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function E(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?w(Object(r),!0).forEach((function(t){I(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):w(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function I(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function D(e){return function(e){if(Array.isArray(e))return C(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return C(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return C(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function k(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function A(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?k(Object(r),!0).forEach((function(t){x(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):k(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function N(e){return Boolean(e.execute)}function R(e,t){return r=e,Boolean(null==r?void 0:r.execute)?A(A({},e),{},{requests:e.queries.map((function(r){return{query:r,sourceId:t,transformResponse:e.transformResponse}}))}):{items:e,sourceId:t};var r}function q(e){var t=e.reduce((function(e,t){if(!N(t))return e.push(t),e;var r=t.searchClient,n=t.execute,o=t.requesterId,a=t.requests,c=e.find((function(e){return N(t)&&N(e)&&e.searchClient===r&&Boolean(o)&&e.requesterId===o}));if(c){var i;(i=c.items).push.apply(i,D(a))}else{var l={execute:n,requesterId:o,items:a,searchClient:r};e.push(l)}return e}),[]).map((function(e){if(!N(e))return Promise.resolve(e);var t=e,r=t.execute,n=t.items;return r({searchClient:t.searchClient,requests:n})}));return Promise.all(t).then((function(e){return c(e)}))}function _(e,t){return t.map((function(t){var r=e.filter((function(e){return e.sourceId===t.sourceId})),n=r.map((function(e){return e.items})),o=r[0].transformResponse,a=o?o(function(e){var t=e.map((function(e){var t;return P(P({},e),{},{hits:null===(t=e.hits)||void 0===t?void 0:t.map((function(t){return P(P({},t),{},{__autocomplete_indexName:e.index,__autocomplete_queryID:e.queryID})}))})}));return{results:t,hits:t.map((function(e){return e.hits})).filter(Boolean),facetHits:t.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}}(n)):n;return Array.isArray(a),a.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:a}}))}function T(e,t){var r=t;return{then:function(t,n){return T(e.then(H(t,r,e),H(n,r,e)),r)},catch:function(t){return T(e.catch(H(t,r,e)),r)},finally:function(t){return t&&r.onCancelList.push(t),T(e.finally(H(t&&function(){return r.onCancelList=[],t()},r,e)),r)},cancel:function(){r.isCanceled=!0;var e=r.onCancelList;r.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===r.isCanceled}}}function L(e){return T(new Promise((function(t,r){return e(t,r)})),{isCanceled:!1,onCancelList:[]})}function M(e){return T(e,{isCanceled:!1,onCancelList:[]})}function H(e,t,r){return e?function(r){return t.isCanceled?r:e(r)}:r}function F(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,r){var n=(e[r-1]||0)+t;return e.push(n),e}),[]).reduce((function(t,r){return r<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var r=t.items[function(e){for(var t=e.state,r=e.collection,n=!1,o=0,a=0;!1===n;){var c=t.collections[o];if(c===r){n=!0;break}a+=c.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],n=t.source;return{item:r,itemInputValue:n.getItemInputValue({item:r,state:e}),itemUrl:n.getItemUrl({item:r,state:e}),source:n}}L.resolve=function(e){return M(Promise.resolve(e))},L.reject=function(e){return M(Promise.reject(e))};var U=["event","nextState","props","query","refresh","store"];function B(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function V(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?B(Object(r),!0).forEach((function(t){z(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):B(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var J,$,W,Q=null,Y=(J=-1,$=-1,W=void 0,function(e){var t=++J;return Promise.resolve(e).then((function(e){return W&&t<$?W:($=t,W=e,e)}))});function G(e){var t=e.event,r=e.nextState,n=void 0===r?{}:r,o=e.props,a=e.query,i=e.refresh,l=e.store,u=K(e,U);Q&&o.environment.clearTimeout(Q);var s=u.setCollections,f=u.setIsOpen,m=u.setQuery,p=u.setActiveItemId,d=u.setStatus;if(m(a),p(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var h,v=l.getState().collections.map((function(e){return V(V({},e),{},{items:[]})}));d("idle"),s(v),f(null!==(h=n.isOpen)&&void 0!==h?h:o.shouldPanelOpen({state:l.getState()}));var y=M(Y(v).then((function(){return Promise.resolve()})));return l.pendingRequests.add(y)}d("loading"),Q=o.environment.setTimeout((function(){d("stalled")}),o.stallThreshold);var g=M(Y(o.getSources(V({query:a,refresh:i,state:l.getState()},u)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(V({query:a,refresh:i,state:l.getState()},u))).then((function(t){return R(t,e.sourceId)}))}))).then(q).then((function(t){return _(t,e)})).then((function(e){return function(e){var t=e.collections,r=e.props,n=e.state,o=t.reduce((function(e,t){return j(j({},e),{},E({},t.source.sourceId,j(j({},t.source),{},{getItems:function(){return c(t.items)}})))}),{});return c(r.reshape({sources:Object.values(o),sourcesBySourceId:o,state:n})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var r;d("idle"),s(e);var c=o.shouldPanelOpen({state:l.getState()});f(null!==(r=n.isOpen)&&void 0!==r?r:o.openOnFocus&&!a&&c||c);var m=F(l.getState());if(null!==l.getState().activeItemId&&m){var p=m.item,h=m.itemInputValue,v=m.itemUrl,y=m.source;y.onActive(V({event:t,item:p,itemInputValue:h,itemUrl:v,refresh:i,source:y,state:l.getState()},u))}})).finally((function(){d("idle"),Q&&o.environment.clearTimeout(Q)}));return l.pendingRequests.add(g)}var X=["event","props","refresh","store"];function Z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ee(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(r),!0).forEach((function(t){te(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Z(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function re(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var ne=/((gt|sm)-|galaxy nexus)|samsung[- ]/i;var oe=["props","refresh","store"],ae=["inputElement","formElement","panelElement"],ce=["inputElement"],ie=["inputElement","maxLength"],le=["item","source"];function ue(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function se(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ue(Object(r),!0).forEach((function(t){fe(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ue(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pe(e){var t=e.props,r=e.refresh,n=e.store,o=me(e,oe);return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,a=e.panelElement;function c(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,a].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return se({onTouchStart:c,onMouseDown:c,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},me(e,ae))},getRootProps:function(e){return se({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return se({action:"",noValidate:!0,role:"search",onSubmit:function(a){var c;a.preventDefault(),t.onSubmit(se({event:a,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(c=e.inputElement)||void 0===c||c.blur()},onReset:function(a){var c;a.preventDefault(),t.onReset(se({event:a,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(c=e.inputElement)||void 0===c||c.focus()}},me(e,ce))},getLabelProps:function(e){return se({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},e)},getInputProps:function(e){var a;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&G(se({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var i=e||{},l=(i.inputElement,i.maxLength),u=void 0===l?512:l,s=me(i,ie),f=F(n.getState()),p=function(e){return Boolean(e&&e.match(ne))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),d=null!=f&&f.itemUrl&&!p?"go":"search";return se({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:d,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){G(se({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,a=re(e,X);if("ArrowUp"===t.key||"ArrowDown"===t.key){var c=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},i=function(){var e=F(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,c=e.itemInputValue,i=e.itemUrl,l=e.source;l.onActive(ee({event:t,item:r,itemInputValue:c,itemUrl:i,refresh:n,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?G(ee({event:t,props:r,query:o.getState().query,refresh:n,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),i(),setTimeout(c,0)})):(o.dispatch(t.key,{}),i(),c())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=F(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});G(ee({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},a)).then((function(){m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a))}))}}}(se({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:m,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},s)},getPanelProps:function(e){return se({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){return se({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},e)},getItemProps:function(e){var a=e.item,c=e.source,i=me(e,le);return se({id:"".concat(t.id,"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=F(n.getState());if(null!==n.getState().activeItemId&&t){var c=t.item,i=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(se({event:e,item:c,itemInputValue:i,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():G(se({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(se({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},i)}}}var de=[{segment:"autocomplete-core",version:"1.7.1"}];function he(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ve(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?he(Object(r),!0).forEach((function(t){ye(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):he(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e){var t,r,n,o,a=e.plugins,c=e.options,i=null===(t=((null===(r=c.__autocomplete_metadata)||void 0===r?void 0:r.userAgents)||[])[0])||void 0===t?void 0:t.segment,l=i?ye({},i,Object.keys((null===(n=c.__autocomplete_metadata)||void 0===n?void 0:n.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:ve({"autocomplete-core":Object.keys(c)},l),ua:de.concat((null===(o=c.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function be(e){var t,r=e.state;return!1===r.isOpen||null===r.activeItemId?null:(null===(t=F(r))||void 0===t?void 0:t.itemInputValue)||null}function Oe(e,t,r,n){if(!r)return null;if(e<0&&(null===t||null!==n&&0===t))return r+e;var o=(null===t?-1:t)+e;return o<=-1||o>=r?null===n?null:0:o}function Se(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function je(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Se(Object(r),!0).forEach((function(t){Ee(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Se(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ee(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var we=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return je(je({},e),{},{activeItemId:t.payload});case"setQuery":return je(je({},e),{},{query:t.payload,completion:null});case"setCollections":return je(je({},e),{},{collections:t.payload});case"setIsOpen":return je(je({},e),{},{isOpen:t.payload});case"setStatus":return je(je({},e),{},{status:t.payload});case"setContext":return je(je({},e),{},{context:je(je({},e.context),t.payload)});case"ArrowDown":var r=je(je({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:Oe(1,e.activeItemId,s(e),t.props.defaultActiveItemId)});return je(je({},r),{},{completion:be({state:r})});case"ArrowUp":var n=je(je({},e),{},{activeItemId:Oe(-1,e.activeItemId,s(e),t.props.defaultActiveItemId)});return je(je({},n),{},{completion:be({state:n})});case"Escape":return e.isOpen?je(je({},e),{},{activeItemId:null,isOpen:!1,completion:null}):je(je({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return je(je({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return je(je({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return je(je({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:je(je({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return je(je({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Pe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Pe(Object(r),!0).forEach((function(t){De(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Pe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function De(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ce(e){var t=[],r=function(e,t){var r,n="undefined"!=typeof window?window:{},o=e.plugins||[];return b(b({debug:!1,openOnFocus:!1,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,environment:n,shouldPanelOpen:function(e){return s(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(f++),plugins:o,initialState:b({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(v(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return h(e,r)}))).then((function(e){return c(e)})).then((function(e){return e.map((function(e){return b(b({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:b({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}(e,t),n=a(we,r,(function(e){var t=e.prevState,n=e.state;r.onStateChange(Ie({prevState:t,state:n,refresh:u},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var r=0,n=e.map((function(e){return l(l({},e),{},{items:c(e.items).map((function(e){return l(l({},e),{},{__autocomplete_id:r++})}))})}));t.dispatch("setCollections",n)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:n}),i=pe(Ie({props:r,refresh:u,store:n},o));function u(){return G(Ie({event:new Event("input"),nextState:{isOpen:n.getState().isOpen},props:r,query:n.getState().query,refresh:u,store:n},o))}return r.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,Ie(Ie({},o),{},{refresh:u,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})}}))})),function(e){var t,r,n=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(r=t.userAgent)||void 0===r?void 0:r.includes("Algolia Crawler")){var a=o.document.createElement("meta"),c=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(n),c.appendChild(a)}),0)}}({metadata:ge({plugins:r.plugins,options:e}),environment:r.environment}),Ie(Ie({refresh:u},i),o)}var ke=r(27378);function Ae(e){var t=e.translations,r=(void 0===t?{}:t).searchByText,n=void 0===r?"Search by":r;return ke.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},ke.createElement("span",{className:"DocSearch-Label"},n),ke.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img"},ke.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function xe(e){return ke.createElement("svg",{width:"15",height:"15","aria-label":e.ariaLabel,role:"img"},ke.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function Ne(e){var t=e.translations,r=void 0===t?{}:t,n=r.selectText,o=void 0===n?"to select":n,a=r.selectKeyAriaLabel,c=void 0===a?"Enter key":a,i=r.navigateText,l=void 0===i?"to navigate":i,u=r.navigateUpKeyAriaLabel,s=void 0===u?"Arrow up":u,f=r.navigateDownKeyAriaLabel,m=void 0===f?"Arrow down":f,p=r.closeText,d=void 0===p?"to close":p,h=r.closeKeyAriaLabel,v=void 0===h?"Escape key":h,y=r.searchByText,g=void 0===y?"Search by":y;return ke.createElement(ke.Fragment,null,ke.createElement("div",{className:"DocSearch-Logo"},ke.createElement(Ae,{translations:{searchByText:g}})),ke.createElement("ul",{className:"DocSearch-Commands"},ke.createElement("li",null,ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:c},ke.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),ke.createElement("span",{className:"DocSearch-Label"},o)),ke.createElement("li",null,ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:m},ke.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:s},ke.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),ke.createElement("span",{className:"DocSearch-Label"},l)),ke.createElement("li",null,ke.createElement("kbd",{className:"DocSearch-Commands-Key"},ke.createElement(xe,{ariaLabel:v},ke.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),ke.createElement("span",{className:"DocSearch-Label"},d))))}function Re(e){var t=e.hit,r=e.children;return ke.createElement("a",{href:t.url},r)}function qe(){return ke.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function _e(e){var t=e.translations,r=void 0===t?{}:t,n=r.titleText,o=void 0===n?"Unable to fetch results":n,a=r.helpText,c=void 0===a?"You might want to check your network connection.":a;return ke.createElement("div",{className:"DocSearch-ErrorScreen"},ke.createElement("div",{className:"DocSearch-Screen-Icon"},ke.createElement(qe,null)),ke.createElement("p",{className:"DocSearch-Title"},o),ke.createElement("p",{className:"DocSearch-Help"},c))}function Te(){return ke.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}var Le=["translations"];function Me(e){return function(e){if(Array.isArray(e))return He(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return He(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return He(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function He(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Fe(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ue(e){var t=e.translations,r=void 0===t?{}:t,n=Fe(e,Le),o=r.noResultsText,a=void 0===o?"No results for":o,c=r.suggestedQueryText,i=void 0===c?"Try searching for":c,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return ke.createElement("div",{className:"DocSearch-NoResults"},ke.createElement("div",{className:"DocSearch-Screen-Icon"},ke.createElement(Te,null)),ke.createElement("p",{className:"DocSearch-Title"},a,' "',ke.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&ke.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},ke.createElement("p",{className:"DocSearch-Help"},i,":"),ke.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(Me(e),[ke.createElement("li",{key:t},ke.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&ke.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),ke.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var Be=function(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ve(e){switch(e.type){case"lvl1":return ke.createElement(Be,null);case"content":return ke.createElement(Ke,null);default:return ke.createElement(ze,null)}}function ze(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function Ke(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Je(){return ke.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),ke.createElement("path",{d:"M8 17l-6-6 6-6"})))}var $e=["hit","attribute","tagName"];function We(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?We(Object(r),!0).forEach((function(t){Ye(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):We(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ge(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Xe(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ze(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,a=Ge(e,$e);return(0,ke.createElement)(o,Qe(Qe({},a),{},{dangerouslySetInnerHTML:{__html:Xe(t,"_snippetResult.".concat(r,".value"))||Xe(t,r)}}))}function et(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,a=[],c=!0,i=!1;try{for(r=r.call(e);!(c=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);c=!0);}catch(l){i=!0,o=l}finally{try{c||null==r.return||r.return()}finally{if(i)throw o}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return tt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return tt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function rt(){return rt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rt.apply(this,arguments)}function nt(e){return e.collection&&0!==e.collection.items.length?ke.createElement("section",{className:"DocSearch-Hits"},ke.createElement("div",{className:"DocSearch-Hit-source"},e.title),ke.createElement("ul",e.getListProps(),e.collection.items.map((function(t,r){return ke.createElement(ot,rt({key:[e.title,t.objectID].join(":"),item:t,index:r},e))})))):null}function ot(e){var t=e.item,r=e.index,n=e.renderIcon,o=e.renderAction,a=e.getItemProps,c=e.onItemClick,i=e.collection,l=e.hitComponent,u=et(ke.useState(!1),2),s=u[0],f=u[1],m=et(ke.useState(!1),2),p=m[0],d=m[1],h=ke.useRef(null),v=l;return ke.createElement("li",rt({className:["DocSearch-Hit",t.__docsearch_parent&&"DocSearch-Hit--Child",s&&"DocSearch-Hit--deleting",p&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){h.current&&h.current()}},a({item:t,source:i.source,onClick:function(){c(t)}})),ke.createElement(v,{hit:t},ke.createElement("div",{className:"DocSearch-Hit-Container"},n({item:t,index:r}),t.hierarchy[t.type]&&"lvl1"===t.type&&ke.createElement("div",{className:"DocSearch-Hit-content-wrapper"},ke.createElement(Ze,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.lvl1"}),t.content&&ke.createElement(Ze,{className:"DocSearch-Hit-path",hit:t,attribute:"content"})),t.hierarchy[t.type]&&("lvl2"===t.type||"lvl3"===t.type||"lvl4"===t.type||"lvl5"===t.type||"lvl6"===t.type)&&ke.createElement("div",{className:"DocSearch-Hit-content-wrapper"},ke.createElement(Ze,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.".concat(t.type)}),ke.createElement(Ze,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),"content"===t.type&&ke.createElement("div",{className:"DocSearch-Hit-content-wrapper"},ke.createElement(Ze,{className:"DocSearch-Hit-title",hit:t,attribute:"content"}),ke.createElement(Ze,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),o({item:t,runDeleteTransition:function(e){f(!0),h.current=e},runFavoriteTransition:function(e){d(!0),h.current=e}}))))}var at=/(<mark>|<\/mark>)/g,ct=RegExp(at.source);function it(e){var t,r,n,o,a,c=e;if(!c.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var i=((c.__docsearch_parent?null===(t=c.__docsearch_parent)||void 0===t||null===(r=t._highlightResult)||void 0===r||null===(n=r.hierarchy)||void 0===n?void 0:n.lvl0:null===(o=e._highlightResult)||void 0===o||null===(a=o.hierarchy)||void 0===a?void 0:a.lvl0)||{}).value;return i&&ct.test(i)?i.replace(at,""):i}function lt(){return lt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},lt.apply(this,arguments)}function ut(e){return ke.createElement("div",{className:"DocSearch-Dropdown-Container"},e.state.collections.map((function(t){if(0===t.items.length)return null;var r=it(t.items[0]);return ke.createElement(nt,lt({},e,{key:t.source.sourceId,title:r,collection:t,renderIcon:function(e){var r,n=e.item,o=e.index;return ke.createElement(ke.Fragment,null,n.__docsearch_parent&&ke.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},ke.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},n.__docsearch_parent!==(null===(r=t.items[o+1])||void 0===r?void 0:r.__docsearch_parent)?ke.createElement("path",{d:"M8 6v21M20 27H8.3"}):ke.createElement("path",{d:"M8 6v42M20 27H8.3"}))),ke.createElement("div",{className:"DocSearch-Hit-icon"},ke.createElement(Ve,{type:n.type})))},renderAction:function(){return ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement(Je,null))}}))})),e.resultsFooterComponent&&ke.createElement("section",{className:"DocSearch-HitsFooter"},ke.createElement(e.resultsFooterComponent,{state:e.state})))}function st(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},ke.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),ke.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function ft(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function mt(){return ke.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},ke.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var pt=["translations"];function dt(){return dt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},dt.apply(this,arguments)}function ht(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vt(e){var t=e.translations,r=void 0===t?{}:t,n=ht(e,pt),o=r.recentSearchesTitle,a=void 0===o?"Recent":o,c=r.noRecentSearchesText,i=void 0===c?"No recent searches":c,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,d=r.removeFavoriteSearchButtonTitle,h=void 0===d?"Remove this search from favorites":d;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:ke.createElement("div",{className:"DocSearch-StartScreen"},ke.createElement("p",{className:"DocSearch-Help"},i)):!1===n.hasCollections?null:ke.createElement("div",{className:"DocSearch-Dropdown-Container"},ke.createElement(nt,dt({},n,{title:a,collection:n.state.collections[0],renderIcon:function(){return ke.createElement("div",{className:"DocSearch-Hit-icon"},ke.createElement(st,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return ke.createElement(ke.Fragment,null,ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},ke.createElement(ft,null))),ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},ke.createElement(mt,null))))}})),ke.createElement(nt,dt({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return ke.createElement("div",{className:"DocSearch-Hit-icon"},ke.createElement(ft,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return ke.createElement("div",{className:"DocSearch-Hit-action"},ke.createElement("button",{className:"DocSearch-Hit-action-button",title:h,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},ke.createElement(mt,null)))}})))}var yt=["translations"];function gt(){return gt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},gt.apply(this,arguments)}function bt(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ot=ke.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=bt(e,yt);if("error"===n.state.status)return ke.createElement(_e,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?ke.createElement(Ue,gt({},n,{translations:null==r?void 0:r.noResultsScreen})):ke.createElement(ut,n):ke.createElement(vt,gt({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function St(){return ke.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},ke.createElement("g",{fill:"none",fillRule:"evenodd"},ke.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},ke.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),ke.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},ke.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var jt=r(56573),Et=["translations"];function wt(){return wt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},wt.apply(this,arguments)}function Pt(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function It(e){var t=e.translations,r=void 0===t?{}:t,n=Pt(e,Et),o=r.resetButtonTitle,a=void 0===o?"Clear the query":o,c=r.resetButtonAriaLabel,i=void 0===c?"Clear the query":c,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return ke.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),ke.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),ke.createElement(ke.Fragment,null,ke.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},ke.createElement("label",wt({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),ke.createElement(jt.W,null)),ke.createElement("div",{className:"DocSearch-LoadingIndicator"},ke.createElement(St,null)),ke.createElement("input",wt({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:64}))),ke.createElement("button",{type:"reset",title:a,className:"DocSearch-Reset","aria-label":i,hidden:!n.state.query},ke.createElement(mt,null))),ke.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var Dt=["_highlightResult","_snippetResult"];function Ct(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function At(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=kt(t),a=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,Ct(t,Dt)),c=a.findIndex((function(e){return e.objectID===r.objectID}));c>-1&&a.splice(c,1),a.unshift(r),a=a.slice(0,n),o.setItem(a)},remove:function(e){a=a.filter((function(t){return t.objectID!==e.objectID})),o.setItem(a)},getAll:function(){return a}}}function xt(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}");return{get:(e,t,r={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{const r=JSON.stringify(e),n=o()[r];return Promise.all([n||t(),void 0!==n])})).then((([e,t])=>Promise.all([e,t||r.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const a=o();return a[JSON.stringify(e)]=r,n().setItem(t,JSON.stringify(a)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Nt(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Nt({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Nt({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Nt({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Nt({caches:t}).clear()))}}function Rt(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);const c=n(),i=o&&o.miss||(()=>Promise.resolve());return c.then((e=>i(e))).then((()=>c))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function qt(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function _t(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Tt(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Lt="4.14.2",Mt={WithinQueryParameters:0,WithinHeaders:1};function Ht(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ft={Read:1,Write:2,Any:3},Ut=1,Bt=2,Vt=3,zt=12e4;function Kt(e,t=Ut){return{...e,status:t,lastUpdate:Date.now()}}function Jt(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ft.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ft.Any}}const $t="GET",Wt="POST";function Qt(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Kt(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===Ut||Date.now()-e.lastUpdate>zt}(e))),n=e.filter((e=>function(e){return e.status===Vt&&Date.now()-e.lastUpdate<=zt}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Jt(e))):t}}))}function Yt(e,t,r,n){const o=[],a=function(e,t){if(e.method===$t||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),c=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),i=r.method,l=r.method!==$t?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:er(o)};const p={data:a,headers:c,method:i,url:Xt(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},d=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},h={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=d(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",tr(n)),e.hostsCache.set(m,Kt(m,r.isTimedOut?Vt:Bt))]).then((()=>f(t,l)))},onFail(e){throw d(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,er(o))}};return e.requester.send(p).then((e=>((e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e))(e,h)))};return Qt(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Gt(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Xt(e,t,r){const n=Zt(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Zt(e){return Object.keys(e).map((t=>{return Tt("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function er(e){return e.map((e=>tr(e)))}function tr(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const rr=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Mt.WithinHeaders?n:{},queryParameters:()=>e===Mt.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Mt.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:a,timeouts:c,userAgent:i,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:a,timeouts:c,userAgent:i,headers:s,queryParameters:u,hosts:l.map((e=>Jt(e))),read(e,t){const r=Ht(t,f.timeouts.read),n=()=>Yt(f,f.hosts.filter((e=>0!=(e.accept&Ft.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Yt(f,f.hosts.filter((e=>0!=(e.accept&Ft.Write))),e,Ht(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ft.Read},{url:`${t}.algolia.net`,accept:Ft.Write}].concat(qt([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return _t(o,e.methods)},nr=e=>(t,r)=>t.method===$t?e.transporter.read(t,r):e.transporter.write(t,r),or=e=>(t,r={})=>_t({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),ar=e=>(t,r)=>{const n=t.map((e=>({...e,params:Zt(e.params||{})})));return e.transporter.read({method:Wt,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},cr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...a}=t.params;return or(e)(t.indexName,{methods:{searchForFacetValues:ur}}).searchForFacetValues(n,o,{...r,...a})}))),ir=e=>(t,r,n)=>e.transporter.read({method:Wt,path:Tt("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),lr=e=>(t,r)=>e.transporter.read({method:Wt,path:Tt("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),ur=e=>(t,r,n)=>e.transporter.read({method:Wt,path:Tt("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),sr=1,fr=2,mr=3;function pr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let a;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===a&&(clearTimeout(o),a=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(a),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(a),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=mr,{debug:(e,t)=>(sr>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(fr>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Rt(),requestsCache:Rt({serializable:!1}),hostsCache:Nt({caches:[xt({key:`4.14.2-${e}`}),Rt()]}),userAgent:Gt(Lt).add({segment:"Browser",version:"lite"}),authMode:Mt.WithinQueryParameters};var o;return rr({...n,...r,methods:{search:ar,searchForFacetValues:cr,multipleQueries:ar,multipleSearchForFacetValues:cr,customRequest:nr,initIndex:e=>t=>or(e)(t,{methods:{search:lr,searchForFacetValues:ur,findAnswers:ir}})}})}pr.version=Lt;const dr=pr;var hr="3.2.1";function vr(){}function yr(e){return e}function gr(e,t){return e.reduce((function(e,r){var n=t(r);return e.hasOwnProperty(n)||(e[n]=[]),e[n].length<5&&e[n].push(r),e}),{})}var br=["footer","searchBox"];function Or(){return Or=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Or.apply(this,arguments)}function Sr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jr(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Sr(Object(r),!0).forEach((function(t){Er(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Sr(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Er(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function wr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,a=[],c=!0,i=!1;try{for(r=r.call(e);!(c=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);c=!0);}catch(l){i=!0,o=l}finally{try{c||null==r.return||r.return()}finally{if(i)throw o}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Pr(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Pr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pr(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Ir(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Dr(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,a=void 0===o?"Search docs":o,c=e.searchParameters,i=e.onClose,l=void 0===i?vr:i,u=e.transformItems,s=void 0===u?yr:u,f=e.hitComponent,m=void 0===f?Re:f,p=e.resultsFooterComponent,d=void 0===p?function(){return null}:p,h=e.navigator,v=e.initialScrollY,y=void 0===v?0:v,g=e.transformSearchClient,b=void 0===g?yr:g,O=e.disableUserPersonalization,S=void 0!==O&&O,j=e.initialQuery,E=void 0===j?"":j,w=e.translations,P=void 0===w?{}:w,I=e.getMissingResultsUrl,D=P.footer,C=P.searchBox,k=Ir(P,br),A=wr(ke.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),x=A[0],N=A[1],R=ke.useRef(null),q=ke.useRef(null),_=ke.useRef(null),T=ke.useRef(null),L=ke.useRef(null),M=ke.useRef(10),H=ke.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,64):"").current,F=ke.useRef(E||H).current,U=function(e,t,r){return ke.useMemo((function(){var n=dr(e,t);return n.addAlgoliaAgent("docsearch",hr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",hr),r(n)}),[e,t,r])}(t,r,b),B=ke.useRef(At({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,V=ke.useRef(At({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===B.getAll().length?7:4})).current,z=ke.useCallback((function(e){if(!S){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===B.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&V.add(t)}}),[B,V,S]),K=ke.useMemo((function(){return Ce({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:F,context:{searchSuggestions:[]}},navigator:h,onStateChange:function(e){N(e.state)},getSources:function(e){var t=e.query,r=e.state,o=e.setContext,a=e.setStatus;return t?U.search([{query:t,indexName:n,params:jr({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(M.current),"hierarchy.lvl2:".concat(M.current),"hierarchy.lvl3:".concat(M.current),"hierarchy.lvl4:".concat(M.current),"hierarchy.lvl5:".concat(M.current),"hierarchy.lvl6:".concat(M.current),"content:".concat(M.current)],snippetEllipsisText:"\u2026",highlightPreTag:"<mark>",highlightPostTag:"</mark>",hitsPerPage:20},c)}]).catch((function(e){throw"RetryError"===e.name&&a("error"),e})).then((function(e){var t=e.results[0],n=t.hits,a=t.nbHits,c=gr(n,(function(e){return it(e)}));return r.context.searchSuggestions.length<Object.keys(c).length&&o({searchSuggestions:Object.keys(c)}),o({nbHits:a}),Object.values(c).map((function(e,t){return{sourceId:"hits".concat(t),onSelect:function(e){var t=e.item,r=e.event;z(t),r.shiftKey||r.ctrlKey||r.metaKey||l()},getItemUrl:function(e){return e.item.url},getItems:function(){return Object.values(gr(e,(function(e){return e.hierarchy.lvl1}))).map(s).map((function(e){return e.map((function(t){return jr(jr({},t),{},{__docsearch_parent:"lvl1"!==t.type&&e.find((function(e){return"lvl1"===e.type&&e.hierarchy.lvl1===t.hierarchy.lvl1}))})}))})).flat()}}}))})):S?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),r.shiftKey||r.ctrlKey||r.metaKey||l()},getItemUrl:function(e){return e.item.url},getItems:function(){return V.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),r.shiftKey||r.ctrlKey||r.metaKey||l()},getItemUrl:function(e){return e.item.url},getItems:function(){return B.getAll()}}]}})}),[n,c,U,l,V,B,z,F,a,h,s,S]),J=K.getEnvironmentProps,$=K.getRootProps,W=K.refresh;return function(e){var t=e.getEnvironmentProps,r=e.panelElement,n=e.formElement,o=e.inputElement;ke.useEffect((function(){if(r&&n&&o){var e=t({panelElement:r,formElement:n,inputElement:o}),a=e.onTouchStart,c=e.onTouchMove;return window.addEventListener("touchstart",a),window.addEventListener("touchmove",c),function(){window.removeEventListener("touchstart",a),window.removeEventListener("touchmove",c)}}}),[t,r,n,o])}({getEnvironmentProps:J,panelElement:T.current,formElement:_.current,inputElement:L.current}),function(e){var t=e.container;ke.useEffect((function(){if(t){var e=t.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), input:not([disabled])"),r=e[0],n=e[e.length-1];return t.addEventListener("keydown",o),function(){t.removeEventListener("keydown",o)}}function o(e){"Tab"===e.key&&(e.shiftKey?document.activeElement===r&&(e.preventDefault(),n.focus()):document.activeElement===n&&(e.preventDefault(),r.focus()))}}),[t])}({container:R.current}),ke.useEffect((function(){return document.body.classList.add("DocSearch--active"),function(){var e,t;document.body.classList.remove("DocSearch--active"),null===(e=(t=window).scrollTo)||void 0===e||e.call(t,0,y)}}),[]),ke.useEffect((function(){window.matchMedia("(max-width: 768px)").matches&&(M.current=5)}),[]),ke.useEffect((function(){T.current&&(T.current.scrollTop=0)}),[x.query]),ke.useEffect((function(){F.length>0&&(W(),L.current&&L.current.focus())}),[F,W]),ke.useEffect((function(){function e(){if(q.current){var e=.01*window.innerHeight;q.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),ke.createElement("div",Or({ref:R},$({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===x.status&&"DocSearch-Container--Stalled","error"===x.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&l()}}),ke.createElement("div",{className:"DocSearch-Modal",ref:q},ke.createElement("header",{className:"DocSearch-SearchBar",ref:_},ke.createElement(It,Or({},K,{state:x,autoFocus:0===F.length,inputRef:L,isFromSelection:Boolean(F)&&F===H,translations:C,onClose:l}))),ke.createElement("div",{className:"DocSearch-Dropdown",ref:T},ke.createElement(Ot,Or({},K,{indexName:n,state:x,hitComponent:m,resultsFooterComponent:d,disableUserPersonalization:S,recentSearches:V,favoriteSearches:B,inputRef:L,translations:k,getMissingResultsUrl:I,onItemClick:function(e){z(e),l()}}))),ke.createElement("footer",{className:"DocSearch-Footer"},ke.createElement(Ne,{translations:D}))))}}}]); \ No newline at end of file diff --git a/assets/js/89127.70da48ea.js b/assets/js/89127.70da48ea.js new file mode 100644 index 00000000000..cc934f1a15b --- /dev/null +++ b/assets/js/89127.70da48ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89127],{89127:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/89a53707.52b5d760.js b/assets/js/89a53707.52b5d760.js new file mode 100644 index 00000000000..0efbed42100 --- /dev/null +++ b/assets/js/89a53707.52b5d760.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23157],{35318:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>m});var t=a(27378);function o(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function l(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?r(Object(a),!0).forEach((function(n){o(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function i(e,n){if(null==e)return{};var a,t,o=function(e,n){if(null==e)return{};var a,t,o={},r=Object.keys(e);for(t=0;t<r.length;t++)a=r[t],n.indexOf(a)>=0||(o[a]=e[a]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)a=r[t],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=t.createContext({}),c=function(e){var n=t.useContext(s),a=n;return e&&(a="function"==typeof e?e(n):l(l({},n),e)),a},u=function(e){var n=c(e.components);return t.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(a),m=o,k=d["".concat(s,".").concat(m)]||d[m]||p[m]||r;return a?t.createElement(k,l(l({ref:n},u),{},{components:a})):t.createElement(k,l({ref:n},u))}));function m(e,n){var a=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=a.length,l=new Array(r);l[0]=d;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<r;c++)l[c]=a[c];return t.createElement.apply(null,l)}return t.createElement.apply(null,a)}d.displayName="MDXCreateElement"},39798:(e,n,a)=>{a.d(n,{Z:()=>l});var t=a(27378),o=a(37140);const r="tabItem_wHwb";function l(e){let{children:n,hidden:a,className:l}=e;return t.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:a},n)}},33337:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(25773),o=a(27378),r=a(37140),l=a(83457),i=a(35595),s=a(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:n,block:a,selectedValue:i,selectValue:s,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const n=e.currentTarget,a=p.indexOf(n),t=c[a].value;t!==i&&(d(n),s(t))},k=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const a=p.indexOf(e.currentTarget)+1;n=p[a]??p[0];break}case"ArrowLeft":{const a=p.indexOf(e.currentTarget)-1;n=p[a]??p[p.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},n)},c.map((e=>{let{value:n,label:a,attributes:l}=e;return o.createElement("li",(0,t.Z)({role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,key:n,ref:e=>p.push(e),onKeyDown:k,onClick:m},l,{className:(0,r.Z)("tabs__item",u,l?.className,{"tabs__item--active":i===n})}),a??n)})))}function d(e){let{lazy:n,children:a,selectedValue:t}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t}))))}function m(e){const n=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",c)},o.createElement(p,(0,t.Z)({},e,n)),o.createElement(d,(0,t.Z)({},e,n)))}function k(e){const n=(0,s.Z)();return o.createElement(m,(0,t.Z)({key:String(n)},e))}},35595:(e,n,a)=>{a.d(n,{Y:()=>d});var t=a(27378),o=a(35331),r=a(30654),l=a(70784),i=a(71819);function s(e){return function(e){return t.Children.map(e,(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:o}}=e;return{value:n,label:a,attributes:t,default:o}}))}function c(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??s(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function u(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:a}=e;const l=(0,o.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,r._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(l.location.search);n.set(i,e),l.replace({...l.location,search:n.toString()})}),[i,l])]}function d(e){const{defaultValue:n,queryString:a=!1,groupId:o}=e,r=c(e),[l,s]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!u({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[d,m]=p({queryString:a,groupId:o}),[k,f]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,r]=(0,i.Nk)(a);return[o,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:o}),g=(()=>{const e=d??k;return u({value:e,tabValues:r})?e:null})();(0,t.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),f(e)}),[m,f,r]),tabValues:r}}},55946:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var t=a(25773),o=(a(27378),a(35318)),r=a(33337),l=a(39798);const i={title:"Docker usage"},s=void 0,c={unversionedId:"guides/docker",id:"guides/docker",title:"Docker usage",description:"Using Docker to run your applications? Or build your artifacts? No",source:"@site/docs/guides/docker.mdx",sourceDirName:"guides",slug:"/guides/docker",permalink:"/docs/guides/docker",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/docker.mdx",tags:[],version:"current",frontMatter:{title:"Docker usage"},sidebar:"guides",previous:{title:"Debugging a task",permalink:"/docs/guides/debug-task"},next:{title:"Offline mode",permalink:"/docs/guides/offline-mode"}},u={},p=[{value:"Performance improvements",id:"performance-improvements",level:2},{value:"Dockerfile",id:"dockerfile",level:2},{value:"What we're trying to avoid",id:"what-were-trying-to-avoid",level:3},{value:"Scaffolding the bare minimum",id:"scaffolding-the-bare-minimum",level:3},{value:"Copying necessary source files",id:"copying-necessary-source-files",level:3},{value:"Pruning extraneous files",id:"pruning-extraneous-files",level:3},{value:"Final result",id:"final-result",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Process failure for git",id:"process-failure-for-git",level:3}],d={toc:p};function m(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},d,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Using ",(0,o.kt)("a",{parentName:"p",href:"https://www.docker.com/"},"Docker")," to run your applications? Or build your artifacts? No\nworries, moon can be utilized with Docker, and supports a robust integration layer."),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"Looking to speed up your Docker builds? Want to build in the cloud?\n",(0,o.kt)("a",{parentName:"p",href:"https://depot.dev?ref=moonrepo"},"Give Depot a try"),"!")),(0,o.kt)("h2",{id:"performance-improvements"},"Performance improvements"),(0,o.kt)("p",null,"For the most part, everything should just work, but we have disabled caching and hashing in Docker\ncontainers and images for the following reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Avoids having to mount a volume for the ",(0,o.kt)("inlineCode",{parentName:"li"},".git")," directory."),(0,o.kt)("li",{parentName:"ul"},"Reduces the overall image size as we're avoiding creating tarballs."),(0,o.kt)("li",{parentName:"ul"},"Ensures that builds are fresh and up-to-date.")),(0,o.kt)("h2",{id:"dockerfile"},"Dockerfile"),(0,o.kt)("p",null,"We're very familiar with how tedious ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s are to write and maintain, so in an effort to\nreduce this headache, we've built a handful of tools to make this process much easier. With moon,\nwe'll take advantage of Docker's layer caching and staged builds as much as possible."),(0,o.kt)("p",null,"With that being said, there's many approaches you can utilize, depending on your workflow (we'll\ndocument them below):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Running ",(0,o.kt)("inlineCode",{parentName:"li"},"moon docker")," commands ",(0,o.kt)("em",{parentName:"li"},"before")," running ",(0,o.kt)("inlineCode",{parentName:"li"},"docker run|build")," commands."),(0,o.kt)("li",{parentName:"ul"},"Running ",(0,o.kt)("inlineCode",{parentName:"li"},"moon docker")," commands ",(0,o.kt)("em",{parentName:"li"},"within")," the ",(0,o.kt)("inlineCode",{parentName:"li"},"Dockerfile"),"."),(0,o.kt)("li",{parentName:"ul"},"Using multi-staged or standard builds."),(0,o.kt)("li",{parentName:"ul"},"Something else unique to your setup!")),(0,o.kt)("h3",{id:"what-were-trying-to-avoid"},"What we're trying to avoid"),(0,o.kt)("p",null,"Before we dive into writing a perfect ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),", we'll briefly talk about the pain points we're\ntrying to avoid. In the context of Node.js and monorepo's, you may be familiar with having to ",(0,o.kt)("inlineCode",{parentName:"p"},"COPY"),"\neach individual ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," in the monorepo before installing ",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),", to effectively use\nlayer caching. This is very brittle, as each new application or package is created, every\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," in the monorepo will need to be modified to account for this new ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,o.kt)("p",null,"Furthermore, we'll have to follow a similar process for ",(0,o.kt)("em",{parentName:"p"},"only copying source files")," necessary for\nthe build or ",(0,o.kt)("inlineCode",{parentName:"p"},"CMD")," to complete. This is ",(0,o.kt)("em",{parentName:"p"},"very tedious"),", so most developers simply use ",(0,o.kt)("inlineCode",{parentName:"p"},"COPY . .")," and\nforget about it. Copying the entire monorepo is costly, especially as it grows."),(0,o.kt)("p",null,"As an example, we'll use moon's official repository. The ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," would look something like the\nfollowing."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\n\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy moon files\nCOPY ./.moon ./.moon\n\n# Copy all package.json's and lockfiles\nCOPY ./packages/cli/package.json ./packages/cli/package.json\nCOPY ./packages/core-linux-arm64-gnu/package.json ./packages/core-linux-arm64-gnu/package.json\nCOPY ./packages/core-linux-arm64-musl/package.json ./packages/core-linux-arm64-musl/package.json\nCOPY ./packages/core-linux-x64-gnu/package.json ./packages/core-linux-x64-gnu/package.json\nCOPY ./packages/core-linux-x64-musl/package.json ./packages/core-linux-x64-musl/package.json\nCOPY ./packages/core-macos-arm64/package.json ./packages/core-macos-arm64/package.json\nCOPY ./packages/core-macos-x64/package.json ./packages/core-macos-x64/package.json\nCOPY ./packages/core-windows-x64-msvc/package.json ./packages/core-windows-x64-msvc/package.json\nCOPY ./packages/runtime/package.json ./packages/runtime/package.json\nCOPY ./packages/types/package.json ./packages/types/package.json\nCOPY ./package.json ./package.json\nCOPY ./yarn.lock ./yarn.lock\nCOPY ./.yarn ./.yarn\nCOPY ./.yarnrc.yml ./yarnrc.yml\n\n# Install toolchain and dependencies\nRUN moon docker setup\n\n# Copy project and required files\nCOPY ./packages/types ./packages/types\nCOPY ./packages/runtime ./packages/runtime\n# OR COPY . .\n\n# Build the target\nRUN moon run runtime:build\n")),(0,o.kt)("p",null,"For such a small monorepo, this already looks too confusing!!! Let's remedy this by utilizing moon\nitself to the fullest!"),(0,o.kt)("h3",{id:"scaffolding-the-bare-minimum"},"Scaffolding the bare minimum"),(0,o.kt)("p",null,"The first step in this process is to only copy the bare minimum of files necessary for installing\ndependencies (Node.js modules, etc). This is typically manifests (",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"), lockfiles\n(",(0,o.kt)("inlineCode",{parentName:"p"},"yarn.lock"),", etc), and any configuration (",(0,o.kt)("inlineCode",{parentName:"p"},".yarnrc.yml"),", etc)."),(0,o.kt)("p",null,"This can all be achieved by the ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," command, which scaffolds a\nskeleton of the repository structure, with only necessary files (the above). Let's update our\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," usage."),(0,o.kt)(r.Z,{groupId:"dockerfile",defaultValue:"standard",values:[{label:"Standard",value:"standard"},{label:"Multi-staged",value:"staged"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"standard",mdxType:"TabItem"},(0,o.kt)("p",null,"This assumes ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold <project>"))," is ran outside of the ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy workspace skeleton\nCOPY ./.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n"))),(0,o.kt)(l.Z,{value:"staged",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"#### BASE\nFROM node:latest AS base\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n#### WORKSPACE\nFROM base AS workspace\nWORKDIR /app\n\n# Copy entire repository and scaffold\nCOPY . .\nRUN moon docker scaffold <project>\n\n#### BUILD\nFROM base AS build\nWORKDIR /app\n\n# Copy workspace skeleton\nCOPY --from=workspace /app/.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n")))),(0,o.kt)("p",null,"And with this, our dependencies will be layer cached effectively! Let's now move onto copying source\nfiles."),(0,o.kt)("h3",{id:"copying-necessary-source-files"},"Copying necessary source files"),(0,o.kt)("p",null,"The next step is to copy all source files necessary for ",(0,o.kt)("inlineCode",{parentName:"p"},"CMD")," or any ",(0,o.kt)("inlineCode",{parentName:"p"},"RUN")," commands to execute\ncorrectly. This typically requires copying all source files for the project ",(0,o.kt)("em",{parentName:"p"},"and")," all source files\nof the project's dependencies... NOT the entire repository!"),(0,o.kt)("p",null,"Luckily our ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold <project>"))," command has already done this for us! Let's\ncontinue updating our ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," to account for this, by appending the following:"),(0,o.kt)(r.Z,{groupId:"dockerfile",defaultValue:"standard",values:[{label:"Standard",value:"standard"},{label:"Multi-staged",value:"staged"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"standard",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"# Copy source files\nCOPY ./.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n"))),(0,o.kt)(l.Z,{value:"staged",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"# Copy source files\nCOPY --from=workspace /app/.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n")))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you need additional files for your commands to run successfully, you can manually use ",(0,o.kt)("inlineCode",{parentName:"p"},"COPY")," or\npass ",(0,o.kt)("inlineCode",{parentName:"p"},"--include")," to the scaffold command.")),(0,o.kt)("h3",{id:"pruning-extraneous-files"},"Pruning extraneous files"),(0,o.kt)("p",null,"Now that we've ran a command or built an artifact, we should prune the Docker environment to remove\nunneeded files and folders. We can do this with the ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/prune"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker prune"))," command, which\n",(0,o.kt)("em",{parentName:"p"},"must be ran")," within the context of a ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"# Prune workspace\nRUN moon docker prune\n")),(0,o.kt)("p",null,"When ran, this command will do the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Install production only dependencies for the projects that were scaffolded."),(0,o.kt)("li",{parentName:"ul"},"Remove extraneous dependencies (",(0,o.kt)("inlineCode",{parentName:"li"},"node_modules"),") for unfocused projects.")),(0,o.kt)("h3",{id:"final-result"},"Final result"),(0,o.kt)("p",null,"And with this moon integration, we've reduced the original ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," of 35 lines to 18 lines, a\nreduction of almost 50%. The original file can also be seen as ",(0,o.kt)("inlineCode",{parentName:"p"},"O(n)"),", as each new manifest requires\ncascading updates, while the moon approach is ",(0,o.kt)("inlineCode",{parentName:"p"},"O(1)"),"!"),(0,o.kt)(r.Z,{groupId:"dockerfile",defaultValue:"standard",values:[{label:"Standard",value:"standard"},{label:"Multi-staged",value:"staged"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"standard",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy workspace skeleton\nCOPY ./.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n\n# Copy source files\nCOPY ./.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n\n# Prune workspace\nRUN moon docker prune\n\n# Or CMD\n"))),(0,o.kt)(l.Z,{value:"staged",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"#### BASE\nFROM node:latest AS base\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n#### WORKSPACE\nFROM base AS workspace\nWORKDIR /app\n\n# Copy entire repository and scaffold\nCOPY . .\nRUN moon docker scaffold <project>\n\n#### BUILD\nFROM base AS build\nWORKDIR /app\n\n# Copy workspace skeleton\nCOPY --from=workspace /app/.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n\n# Copy source files\nCOPY --from=workspace /app/.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n\n# Prune workspace\nRUN moon docker prune\n\n# Or CMD\n")))),(0,o.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("h3",{id:"process-failure-for-git"},"Process failure for git"),(0,o.kt)("p",null,"Since moon executes ",(0,o.kt)("inlineCode",{parentName:"p"},"git")," commands under the hood, there are some special considerations to be aware\nof when running moon within Docker. There's basically 2 scenarios to choose from:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Add the ",(0,o.kt)("inlineCode",{parentName:"li"},".git")," folder to ",(0,o.kt)("inlineCode",{parentName:"li"},".dockerignore"),", so that it's not ",(0,o.kt)("inlineCode",{parentName:"li"},"COPY"),"'d. moon will continue to work\njust fine, albeit with some functionality disabled."),(0,o.kt)("li",{parentName:"ol"},"Ensure that the ",(0,o.kt)("inlineCode",{parentName:"li"},"git")," library is installed in the container, and copy the ",(0,o.kt)("inlineCode",{parentName:"li"},".git")," folder with\n",(0,o.kt)("inlineCode",{parentName:"li"},"COPY"),". moon will work with full functionality, but it will increase the overall size of the\nimage because of caching.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89a53707.69f7ea99.js b/assets/js/89a53707.69f7ea99.js deleted file mode 100644 index 03e31d5567a..00000000000 --- a/assets/js/89a53707.69f7ea99.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3157],{35318:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>m});var t=a(27378);function o(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function l(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?r(Object(a),!0).forEach((function(n){o(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function i(e,n){if(null==e)return{};var a,t,o=function(e,n){if(null==e)return{};var a,t,o={},r=Object.keys(e);for(t=0;t<r.length;t++)a=r[t],n.indexOf(a)>=0||(o[a]=e[a]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)a=r[t],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=t.createContext({}),c=function(e){var n=t.useContext(s),a=n;return e&&(a="function"==typeof e?e(n):l(l({},n),e)),a},u=function(e){var n=c(e.components);return t.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(a),m=o,k=d["".concat(s,".").concat(m)]||d[m]||p[m]||r;return a?t.createElement(k,l(l({ref:n},u),{},{components:a})):t.createElement(k,l({ref:n},u))}));function m(e,n){var a=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=a.length,l=new Array(r);l[0]=d;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<r;c++)l[c]=a[c];return t.createElement.apply(null,l)}return t.createElement.apply(null,a)}d.displayName="MDXCreateElement"},39798:(e,n,a)=>{a.d(n,{Z:()=>l});var t=a(27378),o=a(37140);const r="tabItem_wHwb";function l(e){let{children:n,hidden:a,className:l}=e;return t.createElement("div",{role:"tabpanel",className:(0,o.Z)(r,l),hidden:a},n)}},33337:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(25773),o=a(27378),r=a(37140),l=a(83457),i=a(35595),s=a(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:n,block:a,selectedValue:i,selectValue:s,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const n=e.currentTarget,a=p.indexOf(n),t=c[a].value;t!==i&&(d(n),s(t))},k=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const a=p.indexOf(e.currentTarget)+1;n=p[a]??p[0];break}case"ArrowLeft":{const a=p.indexOf(e.currentTarget)-1;n=p[a]??p[p.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},n)},c.map((e=>{let{value:n,label:a,attributes:l}=e;return o.createElement("li",(0,t.Z)({role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,key:n,ref:e=>p.push(e),onKeyDown:k,onClick:m},l,{className:(0,r.Z)("tabs__item",u,l?.className,{"tabs__item--active":i===n})}),a??n)})))}function d(e){let{lazy:n,children:a,selectedValue:t}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t}))))}function m(e){const n=(0,i.Y)(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",c)},o.createElement(p,(0,t.Z)({},e,n)),o.createElement(d,(0,t.Z)({},e,n)))}function k(e){const n=(0,s.Z)();return o.createElement(m,(0,t.Z)({key:String(n)},e))}},35595:(e,n,a)=>{a.d(n,{Y:()=>d});var t=a(27378),o=a(35331),r=a(30654),l=a(70784),i=a(71819);function s(e){return function(e){return t.Children.map(e,(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:o}}=e;return{value:n,label:a,attributes:t,default:o}}))}function c(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??s(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function u(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:a}=e;const l=(0,o.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,r._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(l.location.search);n.set(i,e),l.replace({...l.location,search:n.toString()})}),[i,l])]}function d(e){const{defaultValue:n,queryString:a=!1,groupId:o}=e,r=c(e),[l,s]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!u({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[d,m]=p({queryString:a,groupId:o}),[k,f]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,r]=(0,i.Nk)(a);return[o,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:o}),g=(()=>{const e=d??k;return u({value:e,tabValues:r})?e:null})();(0,t.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),f(e)}),[m,f,r]),tabValues:r}}},55946:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var t=a(25773),o=(a(27378),a(35318)),r=a(33337),l=a(39798);const i={title:"Docker usage"},s=void 0,c={unversionedId:"guides/docker",id:"guides/docker",title:"Docker usage",description:"Using Docker to run your applications? Or build your artifacts? No",source:"@site/docs/guides/docker.mdx",sourceDirName:"guides",slug:"/guides/docker",permalink:"/docs/guides/docker",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/docker.mdx",tags:[],version:"current",frontMatter:{title:"Docker usage"},sidebar:"guides",previous:{title:"Debugging a task",permalink:"/docs/guides/debug-task"},next:{title:"Offline mode",permalink:"/docs/guides/offline-mode"}},u={},p=[{value:"Performance improvements",id:"performance-improvements",level:2},{value:"Dockerfile",id:"dockerfile",level:2},{value:"What we're trying to avoid",id:"what-were-trying-to-avoid",level:3},{value:"Scaffolding the bare minimum",id:"scaffolding-the-bare-minimum",level:3},{value:"Copying necessary source files",id:"copying-necessary-source-files",level:3},{value:"Pruning extraneous files",id:"pruning-extraneous-files",level:3},{value:"Final result",id:"final-result",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Process failure for git",id:"process-failure-for-git",level:3}],d={toc:p};function m(e){let{components:n,...a}=e;return(0,o.kt)("wrapper",(0,t.Z)({},d,a,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Using ",(0,o.kt)("a",{parentName:"p",href:"https://www.docker.com/"},"Docker")," to run your applications? Or build your artifacts? No\nworries, moon can be utilized with Docker, and supports a robust integration layer."),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"Looking to speed up your Docker builds? Want to build in the cloud?\n",(0,o.kt)("a",{parentName:"p",href:"https://depot.dev?ref=moonrepo"},"Give Depot a try"),"!")),(0,o.kt)("h2",{id:"performance-improvements"},"Performance improvements"),(0,o.kt)("p",null,"For the most part, everything should just work, but we have disabled caching and hashing in Docker\ncontainers and images for the following reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Avoids having to mount a volume for the ",(0,o.kt)("inlineCode",{parentName:"li"},".git")," directory."),(0,o.kt)("li",{parentName:"ul"},"Reduces the overall image size as we're avoiding creating tarballs."),(0,o.kt)("li",{parentName:"ul"},"Ensures that builds are fresh and up-to-date.")),(0,o.kt)("h2",{id:"dockerfile"},"Dockerfile"),(0,o.kt)("p",null,"We're very familiar with how tedious ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s are to write and maintain, so in an effort to\nreduce this headache, we've built a handful of tools to make this process much easier. With moon,\nwe'll take advantage of Docker's layer caching and staged builds as much as possible."),(0,o.kt)("p",null,"With that being said, there's many approaches you can utilize, depending on your workflow (we'll\ndocument them below):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Running ",(0,o.kt)("inlineCode",{parentName:"li"},"moon docker")," commands ",(0,o.kt)("em",{parentName:"li"},"before")," running ",(0,o.kt)("inlineCode",{parentName:"li"},"docker run|build")," commands."),(0,o.kt)("li",{parentName:"ul"},"Running ",(0,o.kt)("inlineCode",{parentName:"li"},"moon docker")," commands ",(0,o.kt)("em",{parentName:"li"},"within")," the ",(0,o.kt)("inlineCode",{parentName:"li"},"Dockerfile"),"."),(0,o.kt)("li",{parentName:"ul"},"Using multi-staged or standard builds."),(0,o.kt)("li",{parentName:"ul"},"Something else unique to your setup!")),(0,o.kt)("h3",{id:"what-were-trying-to-avoid"},"What we're trying to avoid"),(0,o.kt)("p",null,"Before we dive into writing a perfect ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),", we'll briefly talk about the pain points we're\ntrying to avoid. In the context of Node.js and monorepo's, you may be familiar with having to ",(0,o.kt)("inlineCode",{parentName:"p"},"COPY"),"\neach individual ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," in the monorepo before installing ",(0,o.kt)("inlineCode",{parentName:"p"},"node_modules"),", to effectively use\nlayer caching. This is very brittle, as each new application or package is created, every\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," in the monorepo will need to be modified to account for this new ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,o.kt)("p",null,"Furthermore, we'll have to follow a similar process for ",(0,o.kt)("em",{parentName:"p"},"only copying source files")," necessary for\nthe build or ",(0,o.kt)("inlineCode",{parentName:"p"},"CMD")," to complete. This is ",(0,o.kt)("em",{parentName:"p"},"very tedious"),", so most developers simply use ",(0,o.kt)("inlineCode",{parentName:"p"},"COPY . .")," and\nforget about it. Copying the entire monorepo is costly, especially as it grows."),(0,o.kt)("p",null,"As an example, we'll use moon's official repository. The ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," would look something like the\nfollowing."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\n\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy moon files\nCOPY ./.moon ./.moon\n\n# Copy all package.json's and lockfiles\nCOPY ./packages/cli/package.json ./packages/cli/package.json\nCOPY ./packages/core-linux-arm64-gnu/package.json ./packages/core-linux-arm64-gnu/package.json\nCOPY ./packages/core-linux-arm64-musl/package.json ./packages/core-linux-arm64-musl/package.json\nCOPY ./packages/core-linux-x64-gnu/package.json ./packages/core-linux-x64-gnu/package.json\nCOPY ./packages/core-linux-x64-musl/package.json ./packages/core-linux-x64-musl/package.json\nCOPY ./packages/core-macos-arm64/package.json ./packages/core-macos-arm64/package.json\nCOPY ./packages/core-macos-x64/package.json ./packages/core-macos-x64/package.json\nCOPY ./packages/core-windows-x64-msvc/package.json ./packages/core-windows-x64-msvc/package.json\nCOPY ./packages/runtime/package.json ./packages/runtime/package.json\nCOPY ./packages/types/package.json ./packages/types/package.json\nCOPY ./package.json ./package.json\nCOPY ./yarn.lock ./yarn.lock\nCOPY ./.yarn ./.yarn\nCOPY ./.yarnrc.yml ./yarnrc.yml\n\n# Install toolchain and dependencies\nRUN moon docker setup\n\n# Copy project and required files\nCOPY ./packages/types ./packages/types\nCOPY ./packages/runtime ./packages/runtime\n# OR COPY . .\n\n# Build the target\nRUN moon run runtime:build\n")),(0,o.kt)("p",null,"For such a small monorepo, this already looks too confusing!!! Let's remedy this by utilizing moon\nitself to the fullest!"),(0,o.kt)("h3",{id:"scaffolding-the-bare-minimum"},"Scaffolding the bare minimum"),(0,o.kt)("p",null,"The first step in this process is to only copy the bare minimum of files necessary for installing\ndependencies (Node.js modules, etc). This is typically manifests (",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"), lockfiles\n(",(0,o.kt)("inlineCode",{parentName:"p"},"yarn.lock"),", etc), and any configuration (",(0,o.kt)("inlineCode",{parentName:"p"},".yarnrc.yml"),", etc)."),(0,o.kt)("p",null,"This can all be achieved by the ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," command, which scaffolds a\nskeleton of the repository structure, with only necessary files (the above). Let's update our\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," usage."),(0,o.kt)(r.Z,{groupId:"dockerfile",defaultValue:"standard",values:[{label:"Standard",value:"standard"},{label:"Multi-staged",value:"staged"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"standard",mdxType:"TabItem"},(0,o.kt)("p",null,"This assumes ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold <project>"))," is ran outside of the ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy workspace skeleton\nCOPY ./.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n"))),(0,o.kt)(l.Z,{value:"staged",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"#### BASE\nFROM node:latest AS base\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n#### WORKSPACE\nFROM base AS workspace\nWORKDIR /app\n\n# Copy entire repository and scaffold\nCOPY . .\nRUN moon docker scaffold <project>\n\n#### BUILD\nFROM base AS build\nWORKDIR /app\n\n# Copy workspace skeleton\nCOPY --from=workspace /app/.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n")))),(0,o.kt)("p",null,"And with this, our dependencies will be layer cached effectively! Let's now move onto copying source\nfiles."),(0,o.kt)("h3",{id:"copying-necessary-source-files"},"Copying necessary source files"),(0,o.kt)("p",null,"The next step is to copy all source files necessary for ",(0,o.kt)("inlineCode",{parentName:"p"},"CMD")," or any ",(0,o.kt)("inlineCode",{parentName:"p"},"RUN")," commands to execute\ncorrectly. This typically requires copying all source files for the project ",(0,o.kt)("em",{parentName:"p"},"and")," all source files\nof the project's dependencies... NOT the entire repository!"),(0,o.kt)("p",null,"Luckily our ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold <project>"))," command has already done this for us! Let's\ncontinue updating our ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," to account for this, by appending the following:"),(0,o.kt)(r.Z,{groupId:"dockerfile",defaultValue:"standard",values:[{label:"Standard",value:"standard"},{label:"Multi-staged",value:"staged"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"standard",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"# Copy source files\nCOPY ./.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n"))),(0,o.kt)(l.Z,{value:"staged",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"# Copy source files\nCOPY --from=workspace /app/.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n")))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you need additional files for your commands to run successfully, you can manually use ",(0,o.kt)("inlineCode",{parentName:"p"},"COPY")," or\npass ",(0,o.kt)("inlineCode",{parentName:"p"},"--include")," to the scaffold command.")),(0,o.kt)("h3",{id:"pruning-extraneous-files"},"Pruning extraneous files"),(0,o.kt)("p",null,"Now that we've ran a command or built an artifact, we should prune the Docker environment to remove\nunneeded files and folders. We can do this with the ",(0,o.kt)("a",{parentName:"p",href:"../commands/docker/prune"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker prune"))," command, which\n",(0,o.kt)("em",{parentName:"p"},"must be ran")," within the context of a ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"# Prune workspace\nRUN moon docker prune\n")),(0,o.kt)("p",null,"When ran, this command will do the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Install production only dependencies for the projects that were scaffolded."),(0,o.kt)("li",{parentName:"ul"},"Remove extraneous dependencies (",(0,o.kt)("inlineCode",{parentName:"li"},"node_modules"),") for unfocused projects.")),(0,o.kt)("h3",{id:"final-result"},"Final result"),(0,o.kt)("p",null,"And with this moon integration, we've reduced the original ",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile")," of 35 lines to 18 lines, a\nreduction of almost 50%. The original file can also be seen as ",(0,o.kt)("inlineCode",{parentName:"p"},"O(n)"),", as each new manifest requires\ncascading updates, while the moon approach is ",(0,o.kt)("inlineCode",{parentName:"p"},"O(1)"),"!"),(0,o.kt)(r.Z,{groupId:"dockerfile",defaultValue:"standard",values:[{label:"Standard",value:"standard"},{label:"Multi-staged",value:"staged"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"standard",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy workspace skeleton\nCOPY ./.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n\n# Copy source files\nCOPY ./.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n\n# Prune workspace\nRUN moon docker prune\n\n# Or CMD\n"))),(0,o.kt)(l.Z,{value:"staged",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-docker"},"#### BASE\nFROM node:latest AS base\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n#### WORKSPACE\nFROM base AS workspace\nWORKDIR /app\n\n# Copy entire repository and scaffold\nCOPY . .\nRUN moon docker scaffold <project>\n\n#### BUILD\nFROM base AS build\nWORKDIR /app\n\n# Copy workspace skeleton\nCOPY --from=workspace /app/.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon docker setup\n\n# Copy source files\nCOPY --from=workspace /app/.moon/docker/sources .\n\n# Run something\nRUN moon run <project>:<task>\n\n# Prune workspace\nRUN moon docker prune\n\n# Or CMD\n")))),(0,o.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("h3",{id:"process-failure-for-git"},"Process failure for git"),(0,o.kt)("p",null,"Since moon executes ",(0,o.kt)("inlineCode",{parentName:"p"},"git")," commands under the hood, there are some special considerations to be aware\nof when running moon within Docker. There's basically 2 scenarios to choose from:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Add the ",(0,o.kt)("inlineCode",{parentName:"li"},".git")," folder to ",(0,o.kt)("inlineCode",{parentName:"li"},".dockerignore"),", so that it's not ",(0,o.kt)("inlineCode",{parentName:"li"},"COPY"),"'d. moon will continue to work\njust fine, albeit with some functionality disabled."),(0,o.kt)("li",{parentName:"ol"},"Ensure that the ",(0,o.kt)("inlineCode",{parentName:"li"},"git")," library is installed in the container, and copy the ",(0,o.kt)("inlineCode",{parentName:"li"},".git")," folder with\n",(0,o.kt)("inlineCode",{parentName:"li"},"COPY"),". moon will work with full functionality, but it will increase the overall size of the\nimage because of caching.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89c16be8.056f977a.js b/assets/js/89c16be8.056f977a.js new file mode 100644 index 00000000000..804f0b45333 --- /dev/null +++ b/assets/js/89c16be8.056f977a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47969],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=c(n),d=r,m=h["".concat(l,".").concat(d)]||h[d]||u[d]||i;return n?a.createElement(m,o(o({ref:t},p),{},{components:n})):a.createElement(m,o({ref:t},p))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c<i;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},82134:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(25773),r=(n(27378),n(35318));const i={title:"Cache"},o=void 0,s={unversionedId:"concepts/cache",id:"concepts/cache",title:"Cache",description:"moon's able to achieve high performance and blazing speeds by implementing a cache that's powered by",source:"@site/docs/concepts/cache.mdx",sourceDirName:"concepts",slug:"/concepts/cache",permalink:"/docs/concepts/cache",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/cache.mdx",tags:[],version:"current",frontMatter:{title:"Cache"},sidebar:"docs",previous:{title:"Concepts",permalink:"/docs/concepts"},next:{title:"File groups",permalink:"/docs/concepts/file-group"}},l={},c=[{value:"Hashing",id:"hashing",level:2},{value:"Archiving & hydration",id:"archiving--hydration",level:2},{value:"File structure",id:"file-structure",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"moon's able to achieve high performance and blazing speeds by implementing a cache that's powered by\nour own unique smart hashing layer. All cache is stored in ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache"),", relative from the\nworkspace root (be sure to git ignore this folder)."),(0,r.kt)("h2",{id:"hashing"},"Hashing"),(0,r.kt)("p",null,"Incremental builds are possible through a concept known as hashing, where in multiple sources are\naggregated to generate a unique hash. In the context of moon, each time a target is ran we generate\na hash, and if this hash already exists we abort early (cache hit), otherwise we continue the run\n(cache miss)."),(0,r.kt)("p",null,"The tiniest change may trigger a different hash, for example, changing a line of code (when an\ninput), or updating a package version, so don't worry if you see ",(0,r.kt)("em",{parentName:"p"},"a lot")," of hashes."),(0,r.kt)("p",null,"Our smart hashing currently takes the following sources into account:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Command (",(0,r.kt)("inlineCode",{parentName:"li"},"command"),") being ran and its arguments (",(0,r.kt)("inlineCode",{parentName:"li"},"args"),")."),(0,r.kt)("li",{parentName:"ul"},"Input sources (",(0,r.kt)("inlineCode",{parentName:"li"},"inputs"),")."),(0,r.kt)("li",{parentName:"ul"},"Output targets (",(0,r.kt)("inlineCode",{parentName:"li"},"outputs"),")."),(0,r.kt)("li",{parentName:"ul"},"Environment variables (",(0,r.kt)("inlineCode",{parentName:"li"},"env"),")."),(0,r.kt)("li",{parentName:"ul"},"Dependencies between projects (",(0,r.kt)("inlineCode",{parentName:"li"},"dependsOn"),") and tasks (",(0,r.kt)("inlineCode",{parentName:"li"},"deps"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"For Deno tasks"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Deno version."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"deno.json"),"/",(0,r.kt)("inlineCode",{parentName:"li"},"deps.ts")," imports, import maps, and scopes."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," compiler options (when applicable)."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"For Node.js tasks"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Node.js version."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," dependencies (including development and peer)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," compiler options (when applicable).")))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Be aware that greedy inputs (",(0,r.kt)("inlineCode",{parentName:"p"},"**/*"),", the default) will include ",(0,r.kt)("em",{parentName:"p"},"everything")," in the target directory\nas a source. We do our best to filter out VCS ignored files, and ",(0,r.kt)("inlineCode",{parentName:"p"},"outputs")," for the current task, but\nfiles may slip through that you don't expect. We suggest using explicit ",(0,r.kt)("inlineCode",{parentName:"p"},"inputs")," and routinely\nauditing the hash files for accuracy!")),(0,r.kt)("h2",{id:"archiving--hydration"},"Archiving & hydration"),(0,r.kt)("p",null,"On top of our hashing layer, we have another concept known as archiving, where in we create a\ntarball archive of a task's outputs and store it in ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/outputs"),". These are akin to build\nartifacts."),(0,r.kt)("p",null,"When we encounter a cache hit on a hash, we trigger a mechanism known as hydration, where we\nefficiently unpack an existing tarball archive into a task's outputs. This can be understood as a\ntimeline, where every point in time will have its own hash + archive that moon can play back."),(0,r.kt)("p",null,'Furthermore, if we receive a cache hit on the hash, and the hash is the same as the last run, and\noutputs exist, we exit early without hydrating and assume the project is already hydrated. In the\nterminal, you\'ll see a message for "cached from previous run".'),(0,r.kt)("h2",{id:"file-structure"},"File structure"),(0,r.kt)("p",null,"The following diagram outlines our cache folder structure and why each piece exists."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},".moon/cache/\n # Stores hash manifests of every ran task. Exists purely for debugging purposes.\n hashes/\n # Contents includes all sources used to generate the hash.\n <hash>.json\n\n # Stores `tar.gz` archives of a task's outputs based on its generated hash.\n outputs/\n <hash>.tar.gz\n\n # State information about anything and everything within moon. Toolchain,\n # dependencies, projects, running targets, etc.\n states/\n # Files at the root pertain to the entire workspace.\n <state>.json\n\n # Files for a project are nested within a folder by the project name.\n <project>/\n # Informational snapshot of the project, its tasks, and its configs.\n # Can be used at runtime by tasks that require this information.\n snapshot.json\n\n <task>/\n # Contents of the child process, including the exit code and\n # unique hash that is referenced above.\n lastRun.json\n\n # Outputs of last run target.\n stderr.log\n stdout.log\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89c16be8.2cf21373.js b/assets/js/89c16be8.2cf21373.js deleted file mode 100644 index 788af863b2b..00000000000 --- a/assets/js/89c16be8.2cf21373.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7969],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=c(n),d=r,m=h["".concat(l,".").concat(d)]||h[d]||u[d]||i;return n?a.createElement(m,o(o({ref:t},p),{},{components:n})):a.createElement(m,o({ref:t},p))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var c=2;c<i;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},82134:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(25773),r=(n(27378),n(35318));const i={title:"Cache"},o=void 0,s={unversionedId:"concepts/cache",id:"concepts/cache",title:"Cache",description:"moon's able to achieve high performance and blazing speeds by implementing a cache that's powered by",source:"@site/docs/concepts/cache.mdx",sourceDirName:"concepts",slug:"/concepts/cache",permalink:"/docs/concepts/cache",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/cache.mdx",tags:[],version:"current",frontMatter:{title:"Cache"},sidebar:"docs",previous:{title:"Concepts",permalink:"/docs/concepts"},next:{title:"File groups",permalink:"/docs/concepts/file-group"}},l={},c=[{value:"Hashing",id:"hashing",level:2},{value:"Archiving & hydration",id:"archiving--hydration",level:2},{value:"File structure",id:"file-structure",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"moon's able to achieve high performance and blazing speeds by implementing a cache that's powered by\nour own unique smart hashing layer. All cache is stored in ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache"),", relative from the\nworkspace root (be sure to git ignore this folder)."),(0,r.kt)("h2",{id:"hashing"},"Hashing"),(0,r.kt)("p",null,"Incremental builds are possible through a concept known as hashing, where in multiple sources are\naggregated to generate a unique hash. In the context of moon, each time a target is ran we generate\na hash, and if this hash already exists we abort early (cache hit), otherwise we continue the run\n(cache miss)."),(0,r.kt)("p",null,"The tiniest change may trigger a different hash, for example, changing a line of code (when an\ninput), or updating a package version, so don't worry if you see ",(0,r.kt)("em",{parentName:"p"},"a lot")," of hashes."),(0,r.kt)("p",null,"Our smart hashing currently takes the following sources into account:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Command (",(0,r.kt)("inlineCode",{parentName:"li"},"command"),") being ran and its arguments (",(0,r.kt)("inlineCode",{parentName:"li"},"args"),")."),(0,r.kt)("li",{parentName:"ul"},"Input sources (",(0,r.kt)("inlineCode",{parentName:"li"},"inputs"),")."),(0,r.kt)("li",{parentName:"ul"},"Output targets (",(0,r.kt)("inlineCode",{parentName:"li"},"outputs"),")."),(0,r.kt)("li",{parentName:"ul"},"Environment variables (",(0,r.kt)("inlineCode",{parentName:"li"},"env"),")."),(0,r.kt)("li",{parentName:"ul"},"Dependencies between projects (",(0,r.kt)("inlineCode",{parentName:"li"},"dependsOn"),") and tasks (",(0,r.kt)("inlineCode",{parentName:"li"},"deps"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"For Deno tasks"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Deno version."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"deno.json"),"/",(0,r.kt)("inlineCode",{parentName:"li"},"deps.ts")," imports, import maps, and scopes."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," compiler options (when applicable)."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"For Node.js tasks"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Node.js version."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," dependencies (including development and peer)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," compiler options (when applicable).")))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Be aware that greedy inputs (",(0,r.kt)("inlineCode",{parentName:"p"},"**/*"),", the default) will include ",(0,r.kt)("em",{parentName:"p"},"everything")," in the target directory\nas a source. We do our best to filter out VCS ignored files, and ",(0,r.kt)("inlineCode",{parentName:"p"},"outputs")," for the current task, but\nfiles may slip through that you don't expect. We suggest using explicit ",(0,r.kt)("inlineCode",{parentName:"p"},"inputs")," and routinely\nauditing the hash files for accuracy!")),(0,r.kt)("h2",{id:"archiving--hydration"},"Archiving & hydration"),(0,r.kt)("p",null,"On top of our hashing layer, we have another concept known as archiving, where in we create a\ntarball archive of a task's outputs and store it in ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/outputs"),". These are akin to build\nartifacts."),(0,r.kt)("p",null,"When we encounter a cache hit on a hash, we trigger a mechanism known as hydration, where we\nefficiently unpack an existing tarball archive into a task's outputs. This can be understood as a\ntimeline, where every point in time will have its own hash + archive that moon can play back."),(0,r.kt)("p",null,'Furthermore, if we receive a cache hit on the hash, and the hash is the same as the last run, and\noutputs exist, we exit early without hydrating and assume the project is already hydrated. In the\nterminal, you\'ll see a message for "cached from previous run".'),(0,r.kt)("h2",{id:"file-structure"},"File structure"),(0,r.kt)("p",null,"The following diagram outlines our cache folder structure and why each piece exists."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},".moon/cache/\n # Stores hash manifests of every ran task. Exists purely for debugging purposes.\n hashes/\n # Contents includes all sources used to generate the hash.\n <hash>.json\n\n # Stores `tar.gz` archives of a task's outputs based on its generated hash.\n outputs/\n <hash>.tar.gz\n\n # State information about anything and everything within moon. Toolchain,\n # dependencies, projects, running targets, etc.\n states/\n # Files at the root pertain to the entire workspace.\n <state>.json\n\n # Files for a project are nested within a folder by the project name.\n <project>/\n # Informational snapshot of the project, its tasks, and its configs.\n # Can be used at runtime by tasks that require this information.\n snapshot.json\n\n <task>/\n # Contents of the child process, including the exit code and\n # unique hash that is referenced above.\n lastRun.json\n\n # Outputs of last run target.\n stderr.log\n stdout.log\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8b38bcbd.371763d4.js b/assets/js/8b38bcbd.371763d4.js deleted file mode 100644 index cab348dd006..00000000000 --- a/assets/js/8b38bcbd.371763d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8900],{3025:a=>{a.exports=JSON.parse('{"label":"alias","permalink":"/blog/tags/alias","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/8b38bcbd.c0a2f1ac.js b/assets/js/8b38bcbd.c0a2f1ac.js new file mode 100644 index 00000000000..c3db6bd92f8 --- /dev/null +++ b/assets/js/8b38bcbd.c0a2f1ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68900],{3025:a=>{a.exports=JSON.parse('{"label":"alias","permalink":"/blog/tags/alias","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/8c079f7d.4fd3e085.js b/assets/js/8c079f7d.4fd3e085.js deleted file mode 100644 index 577681ec260..00000000000 --- a/assets/js/8c079f7d.4fd3e085.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5880],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var i=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},a=Object.keys(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),p=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),u=r,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||a;return n?i.createElement(f,o(o({ref:t},c),{},{components:n})):i.createElement(f,o({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var p=2;p<a;p++)o[p]=n[p];return i.createElement.apply(null,o)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},57920:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var i=n(25773),r=(n(27378),n(35318));const a={title:"init"},o=void 0,l={unversionedId:"commands/init",id:"commands/init",title:"init",description:"The moon init [dest] command will initialize moon into a repository and scaffold config files by",source:"@site/docs/commands/init.mdx",sourceDirName:"commands",slug:"/commands/init",permalink:"/docs/commands/init",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/init.mdx",tags:[],version:"current",frontMatter:{title:"init"},sidebar:"docs",previous:{title:"generate",permalink:"/docs/commands/generate"},next:{title:"migrate",permalink:"/docs/commands/migrate"}},s={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,i.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon init [dest]")," command will initialize moon into a repository and scaffold config files by\ncreating a ",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," folder. By default moon will enable the following supported languages when a\ncertain file exists, or we'll prompt you to decide."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"node")," enabled when ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," exists."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"rust")," enabled when ",(0,r.kt)("inlineCode",{parentName:"li"},"Cargo.toml")," exists."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"typescript")," enabled when ",(0,r.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," exists.")),(0,r.kt)("p",null,"Furthermore, we'll also attempt to detect applicable language versions, dependency managers, and\nother ecosystem related settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init\n\n# In another directory\n$ moon init ./app\n")),(0,r.kt)("p",null,"The command can also be used to initialize a specific tool ",(0,r.kt)("em",{parentName:"p"},"after")," moon has already been\ninitialized. Perfect for adopting a new language into the workspace."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init --tool typescript\n")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[dest]")," - Destination to initialize and scaffold into. Defaults to ",(0,r.kt)("inlineCode",{parentName:"li"},".")," (current working\ndirectory).")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--force")," - Overwrite existing config files if they exist."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--minimal")," - Generate minimal configurations and sane defaults."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--tool")," - Individual tool to initialize and configure.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Accepts: ",(0,r.kt)("inlineCode",{parentName:"li"},"node"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"rust"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"typescript")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--yes")," - Skip all prompts and enables tools based on file detection.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c079f7d.76525273.js b/assets/js/8c079f7d.76525273.js new file mode 100644 index 00000000000..5396b61c0d5 --- /dev/null +++ b/assets/js/8c079f7d.76525273.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85880],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var i=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},a=Object.keys(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),p=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),u=r,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||a;return n?i.createElement(f,o(o({ref:t},c),{},{components:n})):i.createElement(f,o({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var p=2;p<a;p++)o[p]=n[p];return i.createElement.apply(null,o)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},57920:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var i=n(25773),r=(n(27378),n(35318));const a={title:"init"},o=void 0,l={unversionedId:"commands/init",id:"commands/init",title:"init",description:"The moon init [dest] command will initialize moon into a repository and scaffold config files by",source:"@site/docs/commands/init.mdx",sourceDirName:"commands",slug:"/commands/init",permalink:"/docs/commands/init",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/init.mdx",tags:[],version:"current",frontMatter:{title:"init"},sidebar:"docs",previous:{title:"generate",permalink:"/docs/commands/generate"},next:{title:"migrate",permalink:"/docs/commands/migrate"}},s={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,i.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon init [dest]")," command will initialize moon into a repository and scaffold config files by\ncreating a ",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," folder. By default moon will enable the following supported languages when a\ncertain file exists, or we'll prompt you to decide."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"node")," enabled when ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," exists."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"rust")," enabled when ",(0,r.kt)("inlineCode",{parentName:"li"},"Cargo.toml")," exists."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"typescript")," enabled when ",(0,r.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," exists.")),(0,r.kt)("p",null,"Furthermore, we'll also attempt to detect applicable language versions, dependency managers, and\nother ecosystem related settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init\n\n# In another directory\n$ moon init ./app\n")),(0,r.kt)("p",null,"The command can also be used to initialize a specific tool ",(0,r.kt)("em",{parentName:"p"},"after")," moon has already been\ninitialized. Perfect for adopting a new language into the workspace."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init --tool typescript\n")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[dest]")," - Destination to initialize and scaffold into. Defaults to ",(0,r.kt)("inlineCode",{parentName:"li"},".")," (current working\ndirectory).")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--force")," - Overwrite existing config files if they exist."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--minimal")," - Generate minimal configurations and sane defaults."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--tool")," - Individual tool to initialize and configure.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Accepts: ",(0,r.kt)("inlineCode",{parentName:"li"},"node"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"rust"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"typescript")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--yes")," - Skip all prompts and enables tools based on file detection.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c241076.75f31396.js b/assets/js/8c241076.75f31396.js new file mode 100644 index 00000000000..0e527bcc751 --- /dev/null +++ b/assets/js/8c241076.75f31396.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91324],{92687:e=>{e.exports=JSON.parse('{"label":"graph","permalink":"/blog/tags/graph","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/8c241076.b55fee09.js b/assets/js/8c241076.b55fee09.js deleted file mode 100644 index 544963d10e3..00000000000 --- a/assets/js/8c241076.b55fee09.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1324],{92687:e=>{e.exports=JSON.parse('{"label":"graph","permalink":"/blog/tags/graph","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/8c4a23a7.efed62da.js b/assets/js/8c4a23a7.efed62da.js deleted file mode 100644 index da699e825f1..00000000000 --- a/assets/js/8c4a23a7.efed62da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[739],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=s(n),u=o,f=m["".concat(l,".").concat(u)]||m[u]||d[u]||a;return n?r.createElement(f,c(c({ref:t},p),{},{components:n})):r.createElement(f,c({ref:t},p))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,c=new Array(a);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var s=2;s<a;s++)c[s]=n[s];return r.createElement.apply(null,c)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79217:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(25773),o=(n(27378),n(35318));const a={title:"docker setup",sidebar_label:"setup"},c=void 0,i={unversionedId:"commands/docker/setup",id:"commands/docker/setup",title:"docker setup",description:"The moon docker setup command will efficiently install dependencies for focused projects. This is",source:"@site/docs/commands/docker/setup.mdx",sourceDirName:"commands/docker",slug:"/commands/docker/setup",permalink:"/docs/commands/docker/setup",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/docker/setup.mdx",tags:[],version:"current",frontMatter:{title:"docker setup",sidebar_label:"setup"},sidebar:"docs",previous:{title:"scaffold",permalink:"/docs/commands/docker/scaffold"},next:{title:"generate",permalink:"/docs/commands/generate"}},l={},s=[],p={toc:s};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon docker setup")," command will efficiently install dependencies for focused projects. This is\nan all-in-one command for all dependency installations, and should replace ",(0,o.kt)("inlineCode",{parentName:"p"},"npm install")," and other\ncommands."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon docker setup\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"View the official ",(0,o.kt)("a",{parentName:"p",href:"../../guides/docker"},"Docker usage guide")," for a more in-depth example of how to\nutilize this command.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This command ",(0,o.kt)("em",{parentName:"p"},"must be")," ran after ",(0,o.kt)("a",{parentName:"p",href:"./scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," and is typically ran within a\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"!")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c4a23a7.f97689cb.js b/assets/js/8c4a23a7.f97689cb.js new file mode 100644 index 00000000000..15602fffd4f --- /dev/null +++ b/assets/js/8c4a23a7.f97689cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20739],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=s(n),u=o,f=m["".concat(l,".").concat(u)]||m[u]||d[u]||a;return n?r.createElement(f,c(c({ref:t},p),{},{components:n})):r.createElement(f,c({ref:t},p))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,c=new Array(a);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var s=2;s<a;s++)c[s]=n[s];return r.createElement.apply(null,c)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79217:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(25773),o=(n(27378),n(35318));const a={title:"docker setup",sidebar_label:"setup"},c=void 0,i={unversionedId:"commands/docker/setup",id:"commands/docker/setup",title:"docker setup",description:"The moon docker setup command will efficiently install dependencies for focused projects. This is",source:"@site/docs/commands/docker/setup.mdx",sourceDirName:"commands/docker",slug:"/commands/docker/setup",permalink:"/docs/commands/docker/setup",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/docker/setup.mdx",tags:[],version:"current",frontMatter:{title:"docker setup",sidebar_label:"setup"},sidebar:"docs",previous:{title:"scaffold",permalink:"/docs/commands/docker/scaffold"},next:{title:"generate",permalink:"/docs/commands/generate"}},l={},s=[],p={toc:s};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon docker setup")," command will efficiently install dependencies for focused projects. This is\nan all-in-one command for all dependency installations, and should replace ",(0,o.kt)("inlineCode",{parentName:"p"},"npm install")," and other\ncommands."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon docker setup\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"View the official ",(0,o.kt)("a",{parentName:"p",href:"../../guides/docker"},"Docker usage guide")," for a more in-depth example of how to\nutilize this command.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This command ",(0,o.kt)("em",{parentName:"p"},"must be")," ran after ",(0,o.kt)("a",{parentName:"p",href:"./scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," and is typically ran within a\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"!")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8d701eb4.2b27358b.js b/assets/js/8d701eb4.2b27358b.js new file mode 100644 index 00000000000..dff08b91144 --- /dev/null +++ b/assets/js/8d701eb4.2b27358b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26622],{13762:s=>{s.exports=JSON.parse('{"label":"hooks","permalink":"/blog/tags/hooks","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/8d701eb4.569701a6.js b/assets/js/8d701eb4.569701a6.js deleted file mode 100644 index a295aa12bf8..00000000000 --- a/assets/js/8d701eb4.569701a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6622],{13762:s=>{s.exports=JSON.parse('{"label":"hooks","permalink":"/blog/tags/hooks","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/8de38bef.899dd2c0.js b/assets/js/8de38bef.899dd2c0.js new file mode 100644 index 00000000000..6c5edbe17d9 --- /dev/null +++ b/assets/js/8de38bef.899dd2c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64197],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>u});var a=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,o=function(e,n){if(null==e)return{};var t,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(t),u=o,k=m["".concat(s,".").concat(u)]||m[u]||d[u]||i;return t?a.createElement(k,r(r({ref:n},c),{},{components:t})):a.createElement(k,r({ref:n},c))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;p<i;p++)r[p]=t[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},39798:(e,n,t)=>{t.d(n,{Z:()=>r});var a=t(27378),o=t(37140);const i="tabItem_wHwb";function r(e){let{children:n,hidden:t,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i,r),hidden:t},n)}},33337:(e,n,t)=>{t.d(n,{Z:()=>k});var a=t(25773),o=t(27378),i=t(37140),r=t(83457),l=t(35595),s=t(76457);const p="tabList_J5MA",c="tabItem_l0OV";function d(e){let{className:n,block:t,selectedValue:l,selectValue:s,tabValues:p}=e;const d=[],{blockElementScrollPositionUntilNextRender:m}=(0,r.o5)(),u=e=>{const n=e.currentTarget,t=d.indexOf(n),a=p[t].value;a!==l&&(m(n),s(a))},k=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":t},n)},p.map((e=>{let{value:n,label:t,attributes:r}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===n?0:-1,"aria-selected":l===n,key:n,ref:e=>d.push(e),onKeyDown:k,onClick:u},r,{className:(0,i.Z)("tabs__item",c,r?.className,{"tabs__item--active":l===n})}),t??n)})))}function m(e){let{lazy:n,children:t,selectedValue:a}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==a}))))}function u(e){const n=(0,l.Y)(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",p)},o.createElement(d,(0,a.Z)({},e,n)),o.createElement(m,(0,a.Z)({},e,n)))}function k(e){const n=(0,s.Z)();return o.createElement(u,(0,a.Z)({key:String(n)},e))}},35595:(e,n,t)=>{t.d(n,{Y:()=>m});var a=t(27378),o=t(35331),i=t(30654),r=t(70784),l=t(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:o}}=e;return{value:n,label:t,attributes:a,default:o}}))}function p(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??s(t);return function(e){const n=(0,r.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function c(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function d(e){let{queryString:n=!1,groupId:t}=e;const r=(0,o.k6)(),l=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,i._X)(l),(0,a.useCallback)((e=>{if(!l)return;const n=new URLSearchParams(r.location.search);n.set(l,e),r.replace({...r.location,search:n.toString()})}),[l,r])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,i=p(e),[r,s]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!c({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[m,u]=d({queryString:t,groupId:o}),[k,h]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,i]=(0,l.Nk)(t);return[o,(0,a.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:o}),g=(()=>{const e=m??k;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}},32189:(e,n,t)=>{t.d(n,{Z:()=>r});var a=t(27378),o=t(83469),i=t(31792);function r(e){let{to:n}=e;return a.createElement("a",{href:n,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(i.Z,{icon:o.dT$}))}},9785:(e,n,t)=>{t.d(n,{Z:()=>i});var a=t(27378),o=t(9619);function i(e){let{text:n="Required"}=e;return a.createElement(o.Z,{text:n,variant:"failure",className:"ml-2"})}},79022:(e,n,t)=>{t.d(n,{Z:()=>i});var a=t(27378),o=t(9619);function i(e){let{header:n,inline:t,updated:i,version:r}=e;return a.createElement(o.Z,{text:`v${r}`,variant:i?"success":"info",className:n?"absolute right-0 top-1.5":t?"inline-block":"ml-2"})}},9619:(e,n,t)=>{t.d(n,{Z:()=>l});var a=t(27378),o=t(40624),i=t(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:n,icon:t,text:l,variant:s}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?r[s]:"bg-gray-100 text-gray-800",n)},t&&a.createElement(i.Z,{icon:t,className:"mr-1"}),l)}},74685:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>d});var a=t(25773),o=(t(27378),t(35318)),i=(t(33337),t(39798),t(32189)),r=(t(9785),t(79022));const l={title:".moon/toolchain.yml",toc_max_heading_level:6},s=void 0,p={unversionedId:"config/toolchain",id:"config/toolchain",title:".moon/toolchain.yml",description:"The .moon/toolchain.yml file configures the toolchain and the workspace development environment.",source:"@site/docs/config/toolchain.mdx",sourceDirName:"config",slug:"/config/toolchain",permalink:"/docs/config/toolchain",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/toolchain.mdx",tags:[],version:"current",frontMatter:{title:".moon/toolchain.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:".moon/workspace.yml",permalink:"/docs/config/workspace"},next:{title:".moon/tasks...",permalink:"/docs/config/tasks"}},c={},d=[{value:"<code>extends</code>",id:"extends",level:2},{value:"JavaScript",id:"javascript",level:2},{value:"<code>deno</code>",id:"deno",level:2},{value:'<code>bins</code><VersionLabel version="1.10.0" />',id:"bins",level:3},{value:"<code>depsFile</code>",id:"depsfile",level:3},{value:"<code>lockfile</code>",id:"lockfile",level:3},{value:"<code>node</code>",id:"node",level:2},{value:"<code>version</code>",id:"version",level:3},{value:"<code>packageManager</code>",id:"packagemanager",level:3},{value:"<code>npm</code>, <code>pnpm</code>, <code>yarn</code>",id:"npm-pnpm-yarn",level:3},{value:"<code>version</code>",id:"version-1",level:4},{value:"<code>yarn</code>",id:"yarn",level:3},{value:"<code>plugins</code>",id:"plugins",level:4},{value:"<code>addEnginesConstraint</code>",id:"addenginesconstraint",level:3},{value:"<code>binExecArgs</code>",id:"binexecargs",level:3},{value:"<code>dedupeOnLockfileChange</code>",id:"dedupeonlockfilechange",level:3},{value:"<code>dependencyVersionFormat</code>",id:"dependencyversionformat",level:3},{value:"<code>inferTasksFromScripts</code>",id:"infertasksfromscripts",level:3},{value:"<code>syncProjectWorkspaceDependencies</code>",id:"syncprojectworkspacedependencies",level:3},{value:"<code>syncVersionManagerConfig</code>",id:"syncversionmanagerconfig",level:3},{value:"<code>typescript</code>",id:"typescript",level:2},{value:"<code>createMissingConfig</code>",id:"createmissingconfig",level:3},{value:"<code>projectConfigFileName</code>",id:"projectconfigfilename",level:3},{value:"<code>rootConfigFileName</code>",id:"rootconfigfilename",level:3},{value:"<code>rootOptionsConfigFileName</code>",id:"rootoptionsconfigfilename",level:3},{value:"<code>routeOutDirToCache</code>",id:"routeoutdirtocache",level:3},{value:"<code>syncProjectReferences</code>",id:"syncprojectreferences",level:3},{value:"<code>syncProjectReferencesToPaths</code>",id:"syncprojectreferencestopaths",level:3},{value:"Rust",id:"rust",level:2},{value:'<code>rust</code><VersionLabel version="1.5.0" />',id:"rust-1",level:2},{value:"<code>version</code>",id:"version-2",level:3},{value:'<code>bins</code><VersionLabel version="1.10.0" updated />',id:"bins-1",level:3},{value:"<code>syncToolchainConfig</code>",id:"synctoolchainconfig",level:3}],m={toc:d};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/toolchain.yml")," file configures the toolchain and the workspace development environment.\nThis file is ",(0,o.kt)("em",{parentName:"p"},"optional"),"."),(0,o.kt)("p",null,"Managing tool version's within the toolchain ensures a deterministic environment across any machine\n(whether a developer, CI, or production machine)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"$schema: 'https://moonrepo.dev/schemas/toolchain.json'\n")),(0,o.kt)("h2",{id:"extends"},(0,o.kt)("inlineCode",{parentName:"h2"},"extends")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#extends",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines an external ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/toolchain.yml")," to extend and inherit settings from. Perfect for\nreusability and sharing configuration across repositories and projects. When defined, this setting\nmust be an HTTPS URL ",(0,o.kt)("em",{parentName:"p"},"or")," relative file system path that points to a valid YAML document!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {1}',title:'".moon/toolchain.yml"',"{1}":!0},"extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/toolchain.yml'\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Settings will be merged recursively for blocks, with values defined in the local configuration\ntaking precedence over those defined in the extended configuration.")),(0,o.kt)("h2",{id:"javascript"},"JavaScript"),(0,o.kt)("h2",{id:"deno"},(0,o.kt)("inlineCode",{parentName:"h2"},"deno")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#deno",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables and configures ",(0,o.kt)("a",{parentName:"p",href:"../guides/javascript/deno-handbook"},"Deno"),"."),(0,o.kt)("h3",{id:"bins"},(0,o.kt)("inlineCode",{parentName:"h3"},"bins"),(0,o.kt)(r.Z,{version:"1.10.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/DenoConfig#bins",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of binaries to install globally into Deno (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.deno/bin"),"). This setting requires a list of\nURLs or binary configuration objects with the following fields:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"bin")," (required) - URL of the binary."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"name")," - Provide a custom name for the binary."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"local")," - Only install the binary locally, and not in CI."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"force")," - Force install the binary. This ",(0,o.kt)("em",{parentName:"li"},"should")," be toggled for one-offs.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-5}',title:'".moon/toolchain.yml"',"{2-5}":!0},"deno:\n bins:\n - 'https://deno.land/std@0.192.0/http/file_server.ts'\n - bin: 'https://deno.land/std@0.192.0/http/file_server.ts'\n name: 'fs'\n")),(0,o.kt)("h3",{id:"depsfile"},(0,o.kt)("inlineCode",{parentName:"h3"},"depsFile")),(0,o.kt)(i.Z,{to:"/api/types/interface/DenoConfig#depsFile",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Path to the\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/manual/basics/modules#it-seems-unwieldy-to-import-urls-everywhere"},"dependencies file"),"\nthat's used for re-exporting external libraries. This file is heavily used in hashing and caching\nrelated scenarios. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"deps.ts"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"deno:\n depsFile: 'src/deps.ts'\n")),(0,o.kt)("h3",{id:"lockfile"},(0,o.kt)("inlineCode",{parentName:"h3"},"lockfile")),(0,o.kt)(i.Z,{to:"/api/types/interface/DenoConfig#lockfile",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables lockfile (",(0,o.kt)("inlineCode",{parentName:"p"},"deno.lock"),") support for Deno dependencies. When enabled, will run\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/manual/basics/modules/integrity_checking"},(0,o.kt)("inlineCode",{parentName:"a"},"deno cache"))," as part of the dependency\ninstallation action. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"deno:\n lockfile: true\n")),(0,o.kt)("h2",{id:"node"},(0,o.kt)("inlineCode",{parentName:"h2"},"node")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#node",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables and configures ",(0,o.kt)("a",{parentName:"p",href:"../guides/javascript/node-handbook"},"Node.js"),"."),(0,o.kt)("h3",{id:"version"},(0,o.kt)("inlineCode",{parentName:"h3"},"version")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#version",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the explicit Node.js ",(0,o.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version specification")," to\nuse. If this field is ",(0,o.kt)("em",{parentName:"p"},"not defined"),", the global ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," binary will be used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n version: '16.13'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Version can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," or with the ",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_NODE_VERSION"),"\nenvironment variable.")),(0,o.kt)("h3",{id:"packagemanager"},(0,o.kt)("inlineCode",{parentName:"h3"},"packageManager")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#packageManager",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines which package manager to utilize. Supports ",(0,o.kt)("inlineCode",{parentName:"p"},"npm")," (default), ",(0,o.kt)("inlineCode",{parentName:"p"},"pnpm"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n packageManager: 'yarn'\n")),(0,o.kt)("h3",{id:"npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"h3"},"npm"),", ",(0,o.kt)("inlineCode",{parentName:"h3"},"pnpm"),", ",(0,o.kt)("inlineCode",{parentName:"h3"},"yarn")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodePackageManagerConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Optional fields for defining package manager specific configuration. The chosen setting is dependent\non the value of ",(0,o.kt)("a",{parentName:"p",href:"#packagemanager"},(0,o.kt)("inlineCode",{parentName:"a"},"node.packageManager")),". If these settings ",(0,o.kt)("em",{parentName:"p"},"are not defined"),", the\nlatest version of the active package manager will be used (when applicable)."),(0,o.kt)("h4",{id:"version-1"},(0,o.kt)("inlineCode",{parentName:"h4"},"version")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodePackageManagerConfig#version",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"version")," setting defines the explicit package manager\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version specification")," to use. If this field is ",(0,o.kt)("em",{parentName:"p"},"not\ndefined"),", the global ",(0,o.kt)("inlineCode",{parentName:"p"},"npm"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"pnpm"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn")," binaries will be used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {4}',title:'".moon/toolchain.yml"',"{4}":!0},"node:\n packageManager: 'yarn'\n yarn:\n version: '3.1.0'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Version can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," or with the ",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_NPM_VERSION"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_PNPM_VERSION"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_YARN_VERSION")," environment variables.")),(0,o.kt)("h3",{id:"yarn"},(0,o.kt)("inlineCode",{parentName:"h3"},"yarn")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#yarn",mdxType:"HeadingApiLink"}),(0,o.kt)("h4",{id:"plugins"},(0,o.kt)("inlineCode",{parentName:"h4"},"plugins")),(0,o.kt)(i.Z,{to:"/api/types/interface/YarnConfig#plugins",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of plugins that will automatically be imported using ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn plugin import")," (Yarn 2+ only). For\nperformance reasons, plugins will only be imported when the Yarn version changes."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {4}',title:'".moon/toolchain.yml"',"{4}":!0},"node:\n packageManager: 'yarn'\n yarn:\n version: '3.1.0'\n plugins:\n - 'interactive-tools'\n - 'workspace-tools'\n")),(0,o.kt)("h3",{id:"addenginesconstraint"},(0,o.kt)("inlineCode",{parentName:"h3"},"addEnginesConstraint")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#addEnginesConstraint",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Injects the currently configured ",(0,o.kt)("a",{parentName:"p",href:"#version"},"Node.js version")," as an ",(0,o.kt)("inlineCode",{parentName:"p"},"engines")," constraint to the root\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," field. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"node:\n addEnginesConstraint: true\n")),(0,o.kt)("p",null,'For example, say our Node.js version is "16.15.0", and when we execute a run process through the\n',(0,o.kt)("inlineCode",{parentName:"p"},"moon")," binary, it will update the root ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," with the below. We pin a fixed version to\nensure other Node.js processes outside of our toolchain are utilizing the same version."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "engines": {\n "node": "16.15.0"\n }\n}\n')),(0,o.kt)("h3",{id:"binexecargs"},(0,o.kt)("inlineCode",{parentName:"h3"},"binExecArgs")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#binExecArgs",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Additional ",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/api/cli.html"},"command line arguments")," to pass to the ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," binary\nwhen it's being executed by running a target. This will apply arguments to ",(0,o.kt)("em",{parentName:"p"},"all Node.js based"),"\ntargets, and cannot be changed on a per target basis."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-5}',title:'".moon/toolchain.yml"',"{2-5}":!0},"node:\n binExecArgs:\n - '--preserve-symlinks'\n - '--loader'\n - '@boost/module/loader'\n")),(0,o.kt)("h3",{id:"dedupeonlockfilechange"},(0,o.kt)("inlineCode",{parentName:"h3"},"dedupeOnLockfileChange")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#dedupeOnLockfileChange",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will dedupe dependencies after they have been installed, added, removing, or changed in any way, in\nan effort to keep the workspace tree as clean and lean as possible. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n dedupeOnLockfileChange: true\n")),(0,o.kt)("h3",{id:"dependencyversionformat"},(0,o.kt)("inlineCode",{parentName:"h3"},"dependencyVersionFormat")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#dependencyVersionFormat",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When ",(0,o.kt)("a",{parentName:"p",href:"#syncprojectworkspacedependencies"},"syncing project dependencies"),", customize the format that\nwill be used for the dependency version range. The following formats are supported (but use the one\nmost applicable to your chosen package manager):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"file")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"file:../relative/path")," and copies package contents."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"link")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"link:../relative/path")," and symlinks package contents."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"star")," - Uses an explicit ",(0,o.kt)("inlineCode",{parentName:"li"},"*"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version")," - Uses the explicit version from the dependent project's ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),', e.g., "1.2.3".'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version-caret")," - Uses the version from the dependent project's ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),' as a caret range,\ne.g., "^1.2.3".'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version-tilde")," - Uses the version from the dependent project's ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),' as a tilde range,\ne.g., "~1.2.3".'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"workspace")," (default) - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"workspace:*"),', which resolves to "1.2.3". Requires package\nworkspaces.'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"workspace-caret")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"workspace:^"),', which resolves to "^1.2.3". Requires package workspaces.'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"workspace-tilde")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"workspace:~"),', which resolves to "~1.2.3". Requires package workspaces.')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n dependencyVersionFormat: 'link'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting does not apply to peer dependencies, as they will always use a format of\n",(0,o.kt)("inlineCode",{parentName:"p"},"^<major>.0.0"),".")),(0,o.kt)("h3",{id:"infertasksfromscripts"},(0,o.kt)("inlineCode",{parentName:"h3"},"inferTasksFromScripts")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#inferTasksFromScripts",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will infer and automatically create ",(0,o.kt)("a",{parentName:"p",href:"../concepts/task"},"tasks")," from ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts. Defaults\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("p",null,"This requires the ",(0,o.kt)("a",{parentName:"p",href:"./project#language"},"project's language"),' to be "javascript" or "typescript", a\n',(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," to exist in the project, and will take the following into account:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Script names will be converted to kebab-case, and will become the task ID."),(0,o.kt)("li",{parentName:"ul"},"Pre, post, and life cycle hooks are ignored."),(0,o.kt)("li",{parentName:"ul"},"Tasks defined in ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"moon.yml")," take precedence over scripts of the same name.")),(0,o.kt)("p",null,"To verify inferred tasks, run ",(0,o.kt)("a",{parentName:"p",href:"../commands/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon project <id>"))," (pass ",(0,o.kt)("inlineCode",{parentName:"p"},"--json")," to view raw\nconfig and options). Tasks that are inferred will have their command and args set to\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon node run-script"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n inferTasksFromScripts: true\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This implementation shares functionality with\n",(0,o.kt)("a",{parentName:"p",href:"../commands/migrate/from-package-json"},(0,o.kt)("inlineCode",{parentName:"a"},"moon migrate from-package-json")),", and will attempt to\ndetermine environment variables, outputs, CI options, and more! Be aware of these when utilizing\nthis feature, especially in regards to ",(0,o.kt)("inlineCode",{parentName:"p"},"runInCI"),", as it may be inaccurate!")),(0,o.kt)("h3",{id:"syncprojectworkspacedependencies"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncProjectWorkspaceDependencies")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#syncProjectWorkspaceDependencies",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync a project's ",(0,o.kt)("a",{parentName:"p",href:"./project#dependson"},(0,o.kt)("inlineCode",{parentName:"a"},"dependsOn"))," setting as normal dependencies within the\nproject's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". If a dependent project does not have a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),", or if a dependency\nof the same name has an explicit version already defined, the sync will be skipped. Defaults to\n",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n syncProjectWorkspaceDependencies: true\n")),(0,o.kt)("p",null,"A quick example on how this works. Given the following ",(0,o.kt)("inlineCode",{parentName:"p"},"dependsOn"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'designSystem'\n - 'reactHooks'\n")),(0,o.kt)("p",null,"Would result in the following ",(0,o.kt)("inlineCode",{parentName:"p"},"dependencies")," within a project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". The version format\ncan be customized with ",(0,o.kt)("a",{parentName:"p",href:"#dependencyversionformat"},(0,o.kt)("inlineCode",{parentName:"a"},"node.dependencyVersionFormat")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "dependencies": {\n "@company/design-system": "workspace:*",\n "@company/react-hooks": "workspace:*"\n // ...\n }\n}\n')),(0,o.kt)("h3",{id:"syncversionmanagerconfig"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncVersionManagerConfig")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#syncVersionManagerConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync the currently configured ",(0,o.kt)("a",{parentName:"p",href:"#version"},"Node.js version"),' to a 3rd-party version manager\'s\nconfig/rc file. Supports "nodenv" (syncs to ',(0,o.kt)("inlineCode",{parentName:"p"},".node-version"),'), "nvm" (syncs to ',(0,o.kt)("inlineCode",{parentName:"p"},".nvmrc"),"), or none\n(default)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n syncVersionManagerConfig: 'nvm'\n")),(0,o.kt)("p",null,"This is a special setting that ensure other Node.js processes outside of our toolchain are utilizing\nthe same version, which is a very common practice when managing dependencies."),(0,o.kt)("h2",{id:"typescript"},(0,o.kt)("inlineCode",{parentName:"h2"},"typescript")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#typescript",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Dictates how moon interacts with and utilizes TypeScript within the workspace. This field is\noptional and is undefined by default. Define it to enable TypeScript support."),(0,o.kt)("h3",{id:"createmissingconfig"},(0,o.kt)("inlineCode",{parentName:"h3"},"createMissingConfig")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#createMissingConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When ",(0,o.kt)("a",{parentName:"p",href:"#syncprojectreferences"},"syncing project references")," and a depended on project ",(0,o.kt)("em",{parentName:"p"},"does not")," have\na ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", automatically create one. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n createMissingConfig: true\n")),(0,o.kt)("h3",{id:"projectconfigfilename"},(0,o.kt)("inlineCode",{parentName:"h3"},"projectConfigFileName")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#projectConfigFileName",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file name of the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," found in the project root. We utilize this setting when\nsyncing project references between projects. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n projectConfigFileName: 'tsconfig.build.json'\n")),(0,o.kt)("h3",{id:"rootconfigfilename"},(0,o.kt)("inlineCode",{parentName:"h3"},"rootConfigFileName")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#rootConfigFileName",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file name of the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," found in the workspace root. We utilize this setting\nwhen syncing projects as references. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n rootConfigFileName: 'tsconfig.projects.json'\n")),(0,o.kt)("h3",{id:"rootoptionsconfigfilename"},(0,o.kt)("inlineCode",{parentName:"h3"},"rootOptionsConfigFileName")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#rootOptionsConfigFileName",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file name of the config file found in the workspace root that houses shared compiler\noptions. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.options.json"),". This setting is used in the following scenarios:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"When ",(0,o.kt)("a",{parentName:"li",href:"#"},"creating a ",(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.json")," for a project"),", sets the ",(0,o.kt)("inlineCode",{parentName:"li"},"extends")," field to this value.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n rootOptionsConfigFileName: 'tsconfig.base.json'\n")),(0,o.kt)("h3",{id:"routeoutdirtocache"},(0,o.kt)("inlineCode",{parentName:"h3"},"routeOutDirToCache")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#routeOutDirToCache",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Updates the ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," compiler option in each project's ",(0,o.kt)("a",{parentName:"p",href:"#projectConfigFileName"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.json"))," to\nroute to moon's cache folder. This is useful when using project references and wanting to keep all\nthe compiled ",(0,o.kt)("inlineCode",{parentName:"p"},".d.ts")," files ",(0,o.kt)("em",{parentName:"p"},"out")," of the project folder. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n routeOutDirToCache: true\n")),(0,o.kt)("p",null,'As a demonstration, if we had an npm package located at "packages/components", the ',(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," compiler\noption will be re-routed to the following when syncing."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "outDir": "../../.moon/cache/types/packages/components"\n }\n}\n')),(0,o.kt)("h3",{id:"syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncProjectReferences")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#syncProjectReferences",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync a project's ",(0,o.kt)("a",{parentName:"p",href:"../concepts/project#dependencies"},"dependencies")," (when applicable) as project\nreferences within that project's ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", and the workspace root ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),". Defaults\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"true")," when the parent ",(0,o.kt)("inlineCode",{parentName:"p"},"typescript")," setting is defined, otherwise ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n syncProjectReferences: true\n")),(0,o.kt)("p",null,"A quick example on how this works. Given the following ",(0,o.kt)("inlineCode",{parentName:"p"},"dependsOn"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'designSystem'\n - 'reactHooks'\n")),(0,o.kt)("p",null,"Would result in the following ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," within both ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"s."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n // ...\n "references": [\n // ...\n { "path": "../../design-system" },\n { "path": "../../react-hooks" }\n ]\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This setting assumes you're using the file organization as defined in our official\n",(0,o.kt)("a",{parentName:"p",href:"../guides/javascript/typescript-project-refs"},"TypeScript project references")," in-depth guide.")),(0,o.kt)("h3",{id:"syncprojectreferencestopaths"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncProjectReferencesToPaths")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#syncProjectReferencesToPaths",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync a project's ",(0,o.kt)("a",{parentName:"p",href:"#projectConfigFileName"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.json"))," project references to the ",(0,o.kt)("inlineCode",{parentName:"p"},"paths"),"\ncompiler option, using the referenced project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name. This is useful for mapping\nimport aliases to their source code. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n syncProjectReferencesToPaths: true\n")),(0,o.kt)("p",null,"As a demonstration, if we had a reference to a shared npm package with the name ",(0,o.kt)("inlineCode",{parentName:"p"},"@brand/components"),",\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"paths")," compiler option would be updated to the following when syncing. The index file may exist\nin a ",(0,o.kt)("inlineCode",{parentName:"p"},"src")," folder, or the root of the package."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "paths": {\n "@brand/components": ["../shared/components/src/index.ts"],\n "@brand/components/*": ["../shared/components/src/*"]\n }\n },\n "references": [\n {\n "path": "../shared/components"\n }\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting runs ",(0,o.kt)("em",{parentName:"p"},"after")," ",(0,o.kt)("a",{parentName:"p",href:"#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"syncProjectReferences"))," and will inherit any\nsynced references from that setting.")),(0,o.kt)("h2",{id:"rust"},"Rust"),(0,o.kt)("h2",{id:"rust-1"},(0,o.kt)("inlineCode",{parentName:"h2"},"rust"),(0,o.kt)(r.Z,{version:"1.5.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#rust",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables and configures ",(0,o.kt)("a",{parentName:"p",href:"../guides/rust/handbook"},"Rust"),"."),(0,o.kt)("h3",{id:"version-2"},(0,o.kt)("inlineCode",{parentName:"h3"},"version")),(0,o.kt)(i.Z,{to:"/api/types/interface/RustConfig#version",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the explicit Rust toolchain\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version/channel specification")," to use. If this field\nis ",(0,o.kt)("em",{parentName:"p"},"not defined"),", the global ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"rustc"),", and other binaries will be used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"rust:\n version: '1.69'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Version can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),".")),(0,o.kt)("h3",{id:"bins-1"},(0,o.kt)("inlineCode",{parentName:"h3"},"bins"),(0,o.kt)(r.Z,{version:"1.10.0",updated:!0,mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/RustConfig#bins",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of binaries (with optional versions) to install into Cargo (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),"), and make them\navailable to the ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo")," command. Binaries will be installed with\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/cargo-binstall"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo-binstall"))," in an effort to reduce build and\ncompilation times."),(0,o.kt)("p",null,"This setting requires a list of package names or binary configuration objects with the following\nfields:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"bin")," (required) - Name of the binary."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"local")," - Only install the binary locally, and not in CI."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"force")," - Force install the binary. This ",(0,o.kt)("em",{parentName:"li"},"should")," be toggled for one-offs.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-5}',title:'".moon/toolchain.yml"',"{2-5}":!0},"rust:\n bins:\n - 'cargo-nextest@0.9.52'\n - bin: 'cargo-nextest'\n local: true\n")),(0,o.kt)("p",null,"Binaries that have been installed into Cargo can be referenced from task commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n test:\n command: 'nextest run --workspace'\n")),(0,o.kt)("h3",{id:"synctoolchainconfig"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncToolchainConfig")),(0,o.kt)(i.Z,{to:"/api/types/interface/RustConfig#syncToolchainConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will automatically sync the currently configured ",(0,o.kt)("a",{parentName:"p",href:"#version-2"},"Rust ",(0,o.kt)("inlineCode",{parentName:"a"},"version"))," to the\n",(0,o.kt)("inlineCode",{parentName:"p"},"toolchain.channel")," field in ",(0,o.kt)("inlineCode",{parentName:"p"},"rust-toolchain.toml"),", relative to the root ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock"),". If the file\ndoes not exist, it will be created."),(0,o.kt)("p",null,"This is a special setting that ensures other Rust/Cargo processes outside of our toolchain are\nutilizing the same version, which is a very common practice."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2,3}',title:'".moon/toolchain.yml"',"{2,3}":!0},"rust:\n version: '1.69.0'\n syncToolchainConfig: true\n")),(0,o.kt)("p",null,"To demonstrate this, the settings above would sync the following file:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="rust-toolchain.toml"',title:'"rust-toolchain.toml"'},'[toolchain]\nchannel = "1.69.0"\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8de38bef.ea97f77e.js b/assets/js/8de38bef.ea97f77e.js deleted file mode 100644 index 39a7e5690ec..00000000000 --- a/assets/js/8de38bef.ea97f77e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4197],{35318:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>u});var a=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,o=function(e,n){if(null==e)return{};var t,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(t),u=o,k=m["".concat(s,".").concat(u)]||m[u]||d[u]||i;return t?a.createElement(k,r(r({ref:n},c),{},{components:t})):a.createElement(k,r({ref:n},c))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;p<i;p++)r[p]=t[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},39798:(e,n,t)=>{t.d(n,{Z:()=>r});var a=t(27378),o=t(37140);const i="tabItem_wHwb";function r(e){let{children:n,hidden:t,className:r}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i,r),hidden:t},n)}},33337:(e,n,t)=>{t.d(n,{Z:()=>k});var a=t(25773),o=t(27378),i=t(37140),r=t(83457),l=t(35595),s=t(76457);const p="tabList_J5MA",c="tabItem_l0OV";function d(e){let{className:n,block:t,selectedValue:l,selectValue:s,tabValues:p}=e;const d=[],{blockElementScrollPositionUntilNextRender:m}=(0,r.o5)(),u=e=>{const n=e.currentTarget,t=d.indexOf(n),a=p[t].value;a!==l&&(m(n),s(a))},k=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":t},n)},p.map((e=>{let{value:n,label:t,attributes:r}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===n?0:-1,"aria-selected":l===n,key:n,ref:e=>d.push(e),onKeyDown:k,onClick:u},r,{className:(0,i.Z)("tabs__item",c,r?.className,{"tabs__item--active":l===n})}),t??n)})))}function m(e){let{lazy:n,children:t,selectedValue:a}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==a}))))}function u(e){const n=(0,l.Y)(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",p)},o.createElement(d,(0,a.Z)({},e,n)),o.createElement(m,(0,a.Z)({},e,n)))}function k(e){const n=(0,s.Z)();return o.createElement(u,(0,a.Z)({key:String(n)},e))}},35595:(e,n,t)=>{t.d(n,{Y:()=>m});var a=t(27378),o=t(35331),i=t(30654),r=t(70784),l=t(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:o}}=e;return{value:n,label:t,attributes:a,default:o}}))}function p(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??s(t);return function(e){const n=(0,r.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function c(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function d(e){let{queryString:n=!1,groupId:t}=e;const r=(0,o.k6)(),l=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,i._X)(l),(0,a.useCallback)((e=>{if(!l)return;const n=new URLSearchParams(r.location.search);n.set(l,e),r.replace({...r.location,search:n.toString()})}),[l,r])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,i=p(e),[r,s]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!c({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[m,u]=d({queryString:t,groupId:o}),[k,h]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,i]=(0,l.Nk)(t);return[o,(0,a.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:o}),g=(()=>{const e=m??k;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}},32189:(e,n,t)=>{t.d(n,{Z:()=>r});var a=t(27378),o=t(83469),i=t(31792);function r(e){let{to:n}=e;return a.createElement("a",{href:n,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(i.Z,{icon:o.dT$}))}},9785:(e,n,t)=>{t.d(n,{Z:()=>i});var a=t(27378),o=t(9619);function i(e){let{text:n="Required"}=e;return a.createElement(o.Z,{text:n,variant:"failure",className:"ml-2"})}},79022:(e,n,t)=>{t.d(n,{Z:()=>i});var a=t(27378),o=t(9619);function i(e){let{header:n,inline:t,updated:i,version:r}=e;return a.createElement(o.Z,{text:`v${r}`,variant:i?"success":"info",className:n?"absolute right-0 top-1.5":t?"inline-block":"ml-2"})}},9619:(e,n,t)=>{t.d(n,{Z:()=>l});var a=t(27378),o=t(40624),i=t(31792);const r={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:n,icon:t,text:l,variant:s}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?r[s]:"bg-gray-100 text-gray-800",n)},t&&a.createElement(i.Z,{icon:t,className:"mr-1"}),l)}},74685:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>d});var a=t(25773),o=(t(27378),t(35318)),i=(t(33337),t(39798),t(32189)),r=(t(9785),t(79022));const l={title:".moon/toolchain.yml",toc_max_heading_level:6},s=void 0,p={unversionedId:"config/toolchain",id:"config/toolchain",title:".moon/toolchain.yml",description:"The .moon/toolchain.yml file configures the toolchain and the workspace development environment.",source:"@site/docs/config/toolchain.mdx",sourceDirName:"config",slug:"/config/toolchain",permalink:"/docs/config/toolchain",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/toolchain.mdx",tags:[],version:"current",frontMatter:{title:".moon/toolchain.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:".moon/workspace.yml",permalink:"/docs/config/workspace"},next:{title:".moon/tasks...",permalink:"/docs/config/tasks"}},c={},d=[{value:"<code>extends</code>",id:"extends",level:2},{value:"JavaScript",id:"javascript",level:2},{value:"<code>deno</code>",id:"deno",level:2},{value:'<code>bins</code><VersionLabel version="1.10.0" />',id:"bins",level:3},{value:"<code>depsFile</code>",id:"depsfile",level:3},{value:"<code>lockfile</code>",id:"lockfile",level:3},{value:"<code>node</code>",id:"node",level:2},{value:"<code>version</code>",id:"version",level:3},{value:"<code>packageManager</code>",id:"packagemanager",level:3},{value:"<code>npm</code>, <code>pnpm</code>, <code>yarn</code>",id:"npm-pnpm-yarn",level:3},{value:"<code>version</code>",id:"version-1",level:4},{value:"<code>yarn</code>",id:"yarn",level:3},{value:"<code>plugins</code>",id:"plugins",level:4},{value:"<code>addEnginesConstraint</code>",id:"addenginesconstraint",level:3},{value:"<code>binExecArgs</code>",id:"binexecargs",level:3},{value:"<code>dedupeOnLockfileChange</code>",id:"dedupeonlockfilechange",level:3},{value:"<code>dependencyVersionFormat</code>",id:"dependencyversionformat",level:3},{value:"<code>inferTasksFromScripts</code>",id:"infertasksfromscripts",level:3},{value:"<code>syncProjectWorkspaceDependencies</code>",id:"syncprojectworkspacedependencies",level:3},{value:"<code>syncVersionManagerConfig</code>",id:"syncversionmanagerconfig",level:3},{value:"<code>typescript</code>",id:"typescript",level:2},{value:"<code>createMissingConfig</code>",id:"createmissingconfig",level:3},{value:"<code>projectConfigFileName</code>",id:"projectconfigfilename",level:3},{value:"<code>rootConfigFileName</code>",id:"rootconfigfilename",level:3},{value:"<code>rootOptionsConfigFileName</code>",id:"rootoptionsconfigfilename",level:3},{value:"<code>routeOutDirToCache</code>",id:"routeoutdirtocache",level:3},{value:"<code>syncProjectReferences</code>",id:"syncprojectreferences",level:3},{value:"<code>syncProjectReferencesToPaths</code>",id:"syncprojectreferencestopaths",level:3},{value:"Rust",id:"rust",level:2},{value:'<code>rust</code><VersionLabel version="1.5.0" />',id:"rust-1",level:2},{value:"<code>version</code>",id:"version-2",level:3},{value:'<code>bins</code><VersionLabel version="1.10.0" updated />',id:"bins-1",level:3},{value:"<code>syncToolchainConfig</code>",id:"synctoolchainconfig",level:3}],m={toc:d};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/toolchain.yml")," file configures the toolchain and the workspace development environment.\nThis file is ",(0,o.kt)("em",{parentName:"p"},"optional"),"."),(0,o.kt)("p",null,"Managing tool version's within the toolchain ensures a deterministic environment across any machine\n(whether a developer, CI, or production machine)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"$schema: 'https://moonrepo.dev/schemas/toolchain.json'\n")),(0,o.kt)("h2",{id:"extends"},(0,o.kt)("inlineCode",{parentName:"h2"},"extends")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#extends",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines an external ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/toolchain.yml")," to extend and inherit settings from. Perfect for\nreusability and sharing configuration across repositories and projects. When defined, this setting\nmust be an HTTPS URL ",(0,o.kt)("em",{parentName:"p"},"or")," relative file system path that points to a valid YAML document!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {1}',title:'".moon/toolchain.yml"',"{1}":!0},"extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/toolchain.yml'\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Settings will be merged recursively for blocks, with values defined in the local configuration\ntaking precedence over those defined in the extended configuration.")),(0,o.kt)("h2",{id:"javascript"},"JavaScript"),(0,o.kt)("h2",{id:"deno"},(0,o.kt)("inlineCode",{parentName:"h2"},"deno")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#deno",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables and configures ",(0,o.kt)("a",{parentName:"p",href:"../guides/javascript/deno-handbook"},"Deno"),"."),(0,o.kt)("h3",{id:"bins"},(0,o.kt)("inlineCode",{parentName:"h3"},"bins"),(0,o.kt)(r.Z,{version:"1.10.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/DenoConfig#bins",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of binaries to install globally into Deno (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.deno/bin"),"). This setting requires a list of\nURLs or binary configuration objects with the following fields:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"bin")," (required) - URL of the binary."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"name")," - Provide a custom name for the binary."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"local")," - Only install the binary locally, and not in CI."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"force")," - Force install the binary. This ",(0,o.kt)("em",{parentName:"li"},"should")," be toggled for one-offs.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-5}',title:'".moon/toolchain.yml"',"{2-5}":!0},"deno:\n bins:\n - 'https://deno.land/std@0.192.0/http/file_server.ts'\n - bin: 'https://deno.land/std@0.192.0/http/file_server.ts'\n name: 'fs'\n")),(0,o.kt)("h3",{id:"depsfile"},(0,o.kt)("inlineCode",{parentName:"h3"},"depsFile")),(0,o.kt)(i.Z,{to:"/api/types/interface/DenoConfig#depsFile",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Path to the\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/manual/basics/modules#it-seems-unwieldy-to-import-urls-everywhere"},"dependencies file"),"\nthat's used for re-exporting external libraries. This file is heavily used in hashing and caching\nrelated scenarios. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"deps.ts"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"deno:\n depsFile: 'src/deps.ts'\n")),(0,o.kt)("h3",{id:"lockfile"},(0,o.kt)("inlineCode",{parentName:"h3"},"lockfile")),(0,o.kt)(i.Z,{to:"/api/types/interface/DenoConfig#lockfile",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables lockfile (",(0,o.kt)("inlineCode",{parentName:"p"},"deno.lock"),") support for Deno dependencies. When enabled, will run\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/manual/basics/modules/integrity_checking"},(0,o.kt)("inlineCode",{parentName:"a"},"deno cache"))," as part of the dependency\ninstallation action. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"deno:\n lockfile: true\n")),(0,o.kt)("h2",{id:"node"},(0,o.kt)("inlineCode",{parentName:"h2"},"node")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#node",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables and configures ",(0,o.kt)("a",{parentName:"p",href:"../guides/javascript/node-handbook"},"Node.js"),"."),(0,o.kt)("h3",{id:"version"},(0,o.kt)("inlineCode",{parentName:"h3"},"version")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#version",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the explicit Node.js ",(0,o.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version specification")," to\nuse. If this field is ",(0,o.kt)("em",{parentName:"p"},"not defined"),", the global ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," binary will be used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n version: '16.13'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Version can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," or with the ",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_NODE_VERSION"),"\nenvironment variable.")),(0,o.kt)("h3",{id:"packagemanager"},(0,o.kt)("inlineCode",{parentName:"h3"},"packageManager")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#packageManager",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines which package manager to utilize. Supports ",(0,o.kt)("inlineCode",{parentName:"p"},"npm")," (default), ",(0,o.kt)("inlineCode",{parentName:"p"},"pnpm"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n packageManager: 'yarn'\n")),(0,o.kt)("h3",{id:"npm-pnpm-yarn"},(0,o.kt)("inlineCode",{parentName:"h3"},"npm"),", ",(0,o.kt)("inlineCode",{parentName:"h3"},"pnpm"),", ",(0,o.kt)("inlineCode",{parentName:"h3"},"yarn")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodePackageManagerConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Optional fields for defining package manager specific configuration. The chosen setting is dependent\non the value of ",(0,o.kt)("a",{parentName:"p",href:"#packagemanager"},(0,o.kt)("inlineCode",{parentName:"a"},"node.packageManager")),". If these settings ",(0,o.kt)("em",{parentName:"p"},"are not defined"),", the\nlatest version of the active package manager will be used (when applicable)."),(0,o.kt)("h4",{id:"version-1"},(0,o.kt)("inlineCode",{parentName:"h4"},"version")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodePackageManagerConfig#version",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"version")," setting defines the explicit package manager\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version specification")," to use. If this field is ",(0,o.kt)("em",{parentName:"p"},"not\ndefined"),", the global ",(0,o.kt)("inlineCode",{parentName:"p"},"npm"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"pnpm"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn")," binaries will be used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {4}',title:'".moon/toolchain.yml"',"{4}":!0},"node:\n packageManager: 'yarn'\n yarn:\n version: '3.1.0'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Version can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," or with the ",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_NPM_VERSION"),",\n",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_PNPM_VERSION"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"MOON_YARN_VERSION")," environment variables.")),(0,o.kt)("h3",{id:"yarn"},(0,o.kt)("inlineCode",{parentName:"h3"},"yarn")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#yarn",mdxType:"HeadingApiLink"}),(0,o.kt)("h4",{id:"plugins"},(0,o.kt)("inlineCode",{parentName:"h4"},"plugins")),(0,o.kt)(i.Z,{to:"/api/types/interface/YarnConfig#plugins",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of plugins that will automatically be imported using ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn plugin import")," (Yarn 2+ only). For\nperformance reasons, plugins will only be imported when the Yarn version changes."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {4}',title:'".moon/toolchain.yml"',"{4}":!0},"node:\n packageManager: 'yarn'\n yarn:\n version: '3.1.0'\n plugins:\n - 'interactive-tools'\n - 'workspace-tools'\n")),(0,o.kt)("h3",{id:"addenginesconstraint"},(0,o.kt)("inlineCode",{parentName:"h3"},"addEnginesConstraint")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#addEnginesConstraint",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Injects the currently configured ",(0,o.kt)("a",{parentName:"p",href:"#version"},"Node.js version")," as an ",(0,o.kt)("inlineCode",{parentName:"p"},"engines")," constraint to the root\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," field. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"node:\n addEnginesConstraint: true\n")),(0,o.kt)("p",null,'For example, say our Node.js version is "16.15.0", and when we execute a run process through the\n',(0,o.kt)("inlineCode",{parentName:"p"},"moon")," binary, it will update the root ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," with the below. We pin a fixed version to\nensure other Node.js processes outside of our toolchain are utilizing the same version."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "engines": {\n "node": "16.15.0"\n }\n}\n')),(0,o.kt)("h3",{id:"binexecargs"},(0,o.kt)("inlineCode",{parentName:"h3"},"binExecArgs")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#binExecArgs",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Additional ",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/api/cli.html"},"command line arguments")," to pass to the ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," binary\nwhen it's being executed by running a target. This will apply arguments to ",(0,o.kt)("em",{parentName:"p"},"all Node.js based"),"\ntargets, and cannot be changed on a per target basis."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-5}',title:'".moon/toolchain.yml"',"{2-5}":!0},"node:\n binExecArgs:\n - '--preserve-symlinks'\n - '--loader'\n - '@boost/module/loader'\n")),(0,o.kt)("h3",{id:"dedupeonlockfilechange"},(0,o.kt)("inlineCode",{parentName:"h3"},"dedupeOnLockfileChange")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#dedupeOnLockfileChange",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will dedupe dependencies after they have been installed, added, removing, or changed in any way, in\nan effort to keep the workspace tree as clean and lean as possible. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n dedupeOnLockfileChange: true\n")),(0,o.kt)("h3",{id:"dependencyversionformat"},(0,o.kt)("inlineCode",{parentName:"h3"},"dependencyVersionFormat")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#dependencyVersionFormat",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When ",(0,o.kt)("a",{parentName:"p",href:"#syncprojectworkspacedependencies"},"syncing project dependencies"),", customize the format that\nwill be used for the dependency version range. The following formats are supported (but use the one\nmost applicable to your chosen package manager):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"file")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"file:../relative/path")," and copies package contents."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"link")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"link:../relative/path")," and symlinks package contents."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"star")," - Uses an explicit ",(0,o.kt)("inlineCode",{parentName:"li"},"*"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version")," - Uses the explicit version from the dependent project's ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),', e.g., "1.2.3".'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version-caret")," - Uses the version from the dependent project's ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),' as a caret range,\ne.g., "^1.2.3".'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version-tilde")," - Uses the version from the dependent project's ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),' as a tilde range,\ne.g., "~1.2.3".'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"workspace")," (default) - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"workspace:*"),', which resolves to "1.2.3". Requires package\nworkspaces.'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"workspace-caret")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"workspace:^"),', which resolves to "^1.2.3". Requires package workspaces.'),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"workspace-tilde")," - Uses ",(0,o.kt)("inlineCode",{parentName:"li"},"workspace:~"),', which resolves to "~1.2.3". Requires package workspaces.')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n dependencyVersionFormat: 'link'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting does not apply to peer dependencies, as they will always use a format of\n",(0,o.kt)("inlineCode",{parentName:"p"},"^<major>.0.0"),".")),(0,o.kt)("h3",{id:"infertasksfromscripts"},(0,o.kt)("inlineCode",{parentName:"h3"},"inferTasksFromScripts")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#inferTasksFromScripts",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will infer and automatically create ",(0,o.kt)("a",{parentName:"p",href:"../concepts/task"},"tasks")," from ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts. Defaults\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("p",null,"This requires the ",(0,o.kt)("a",{parentName:"p",href:"./project#language"},"project's language"),' to be "javascript" or "typescript", a\n',(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," to exist in the project, and will take the following into account:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Script names will be converted to kebab-case, and will become the task ID."),(0,o.kt)("li",{parentName:"ul"},"Pre, post, and life cycle hooks are ignored."),(0,o.kt)("li",{parentName:"ul"},"Tasks defined in ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"moon.yml")," take precedence over scripts of the same name.")),(0,o.kt)("p",null,"To verify inferred tasks, run ",(0,o.kt)("a",{parentName:"p",href:"../commands/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon project <id>"))," (pass ",(0,o.kt)("inlineCode",{parentName:"p"},"--json")," to view raw\nconfig and options). Tasks that are inferred will have their command and args set to\n",(0,o.kt)("inlineCode",{parentName:"p"},"moon node run-script"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n inferTasksFromScripts: true\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This implementation shares functionality with\n",(0,o.kt)("a",{parentName:"p",href:"../commands/migrate/from-package-json"},(0,o.kt)("inlineCode",{parentName:"a"},"moon migrate from-package-json")),", and will attempt to\ndetermine environment variables, outputs, CI options, and more! Be aware of these when utilizing\nthis feature, especially in regards to ",(0,o.kt)("inlineCode",{parentName:"p"},"runInCI"),", as it may be inaccurate!")),(0,o.kt)("h3",{id:"syncprojectworkspacedependencies"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncProjectWorkspaceDependencies")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#syncProjectWorkspaceDependencies",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync a project's ",(0,o.kt)("a",{parentName:"p",href:"./project#dependson"},(0,o.kt)("inlineCode",{parentName:"a"},"dependsOn"))," setting as normal dependencies within the\nproject's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". If a dependent project does not have a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),", or if a dependency\nof the same name has an explicit version already defined, the sync will be skipped. Defaults to\n",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n syncProjectWorkspaceDependencies: true\n")),(0,o.kt)("p",null,"A quick example on how this works. Given the following ",(0,o.kt)("inlineCode",{parentName:"p"},"dependsOn"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'designSystem'\n - 'reactHooks'\n")),(0,o.kt)("p",null,"Would result in the following ",(0,o.kt)("inlineCode",{parentName:"p"},"dependencies")," within a project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". The version format\ncan be customized with ",(0,o.kt)("a",{parentName:"p",href:"#dependencyversionformat"},(0,o.kt)("inlineCode",{parentName:"a"},"node.dependencyVersionFormat")),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "dependencies": {\n "@company/design-system": "workspace:*",\n "@company/react-hooks": "workspace:*"\n // ...\n }\n}\n')),(0,o.kt)("h3",{id:"syncversionmanagerconfig"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncVersionManagerConfig")),(0,o.kt)(i.Z,{to:"/api/types/interface/NodeConfig#syncVersionManagerConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync the currently configured ",(0,o.kt)("a",{parentName:"p",href:"#version"},"Node.js version"),' to a 3rd-party version manager\'s\nconfig/rc file. Supports "nodenv" (syncs to ',(0,o.kt)("inlineCode",{parentName:"p"},".node-version"),'), "nvm" (syncs to ',(0,o.kt)("inlineCode",{parentName:"p"},".nvmrc"),"), or none\n(default)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"node:\n syncVersionManagerConfig: 'nvm'\n")),(0,o.kt)("p",null,"This is a special setting that ensure other Node.js processes outside of our toolchain are utilizing\nthe same version, which is a very common practice when managing dependencies."),(0,o.kt)("h2",{id:"typescript"},(0,o.kt)("inlineCode",{parentName:"h2"},"typescript")),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#typescript",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Dictates how moon interacts with and utilizes TypeScript within the workspace. This field is\noptional and is undefined by default. Define it to enable TypeScript support."),(0,o.kt)("h3",{id:"createmissingconfig"},(0,o.kt)("inlineCode",{parentName:"h3"},"createMissingConfig")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#createMissingConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"When ",(0,o.kt)("a",{parentName:"p",href:"#syncprojectreferences"},"syncing project references")," and a depended on project ",(0,o.kt)("em",{parentName:"p"},"does not")," have\na ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", automatically create one. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n createMissingConfig: true\n")),(0,o.kt)("h3",{id:"projectconfigfilename"},(0,o.kt)("inlineCode",{parentName:"h3"},"projectConfigFileName")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#projectConfigFileName",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file name of the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," found in the project root. We utilize this setting when\nsyncing project references between projects. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n projectConfigFileName: 'tsconfig.build.json'\n")),(0,o.kt)("h3",{id:"rootconfigfilename"},(0,o.kt)("inlineCode",{parentName:"h3"},"rootConfigFileName")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#rootConfigFileName",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file name of the ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," found in the workspace root. We utilize this setting\nwhen syncing projects as references. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n rootConfigFileName: 'tsconfig.projects.json'\n")),(0,o.kt)("h3",{id:"rootoptionsconfigfilename"},(0,o.kt)("inlineCode",{parentName:"h3"},"rootOptionsConfigFileName")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#rootOptionsConfigFileName",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the file name of the config file found in the workspace root that houses shared compiler\noptions. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.options.json"),". This setting is used in the following scenarios:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"When ",(0,o.kt)("a",{parentName:"li",href:"#"},"creating a ",(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.json")," for a project"),", sets the ",(0,o.kt)("inlineCode",{parentName:"li"},"extends")," field to this value.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n rootOptionsConfigFileName: 'tsconfig.base.json'\n")),(0,o.kt)("h3",{id:"routeoutdirtocache"},(0,o.kt)("inlineCode",{parentName:"h3"},"routeOutDirToCache")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#routeOutDirToCache",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Updates the ",(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," compiler option in each project's ",(0,o.kt)("a",{parentName:"p",href:"#projectConfigFileName"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.json"))," to\nroute to moon's cache folder. This is useful when using project references and wanting to keep all\nthe compiled ",(0,o.kt)("inlineCode",{parentName:"p"},".d.ts")," files ",(0,o.kt)("em",{parentName:"p"},"out")," of the project folder. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n routeOutDirToCache: true\n")),(0,o.kt)("p",null,'As a demonstration, if we had an npm package located at "packages/components", the ',(0,o.kt)("inlineCode",{parentName:"p"},"outDir")," compiler\noption will be re-routed to the following when syncing."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "outDir": "../../.moon/cache/types/packages/components"\n }\n}\n')),(0,o.kt)("h3",{id:"syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncProjectReferences")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#syncProjectReferences",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync a project's ",(0,o.kt)("a",{parentName:"p",href:"../concepts/project#dependencies"},"dependencies")," (when applicable) as project\nreferences within that project's ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),", and the workspace root ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),". Defaults\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"true")," when the parent ",(0,o.kt)("inlineCode",{parentName:"p"},"typescript")," setting is defined, otherwise ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n syncProjectReferences: true\n")),(0,o.kt)("p",null,"A quick example on how this works. Given the following ",(0,o.kt)("inlineCode",{parentName:"p"},"dependsOn"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'designSystem'\n - 'reactHooks'\n")),(0,o.kt)("p",null,"Would result in the following ",(0,o.kt)("inlineCode",{parentName:"p"},"references")," within both ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),"s."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n // ...\n "references": [\n // ...\n { "path": "../../design-system" },\n { "path": "../../react-hooks" }\n ]\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This setting assumes you're using the file organization as defined in our official\n",(0,o.kt)("a",{parentName:"p",href:"../guides/javascript/typescript-project-refs"},"TypeScript project references")," in-depth guide.")),(0,o.kt)("h3",{id:"syncprojectreferencestopaths"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncProjectReferencesToPaths")),(0,o.kt)(i.Z,{to:"/api/types/interface/TypeScriptConfig#syncProjectReferencesToPaths",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will sync a project's ",(0,o.kt)("a",{parentName:"p",href:"#projectConfigFileName"},(0,o.kt)("inlineCode",{parentName:"a"},"tsconfig.json"))," project references to the ",(0,o.kt)("inlineCode",{parentName:"p"},"paths"),"\ncompiler option, using the referenced project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name. This is useful for mapping\nimport aliases to their source code. Defaults to ",(0,o.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"typescript:\n syncProjectReferencesToPaths: true\n")),(0,o.kt)("p",null,"As a demonstration, if we had a reference to a shared npm package with the name ",(0,o.kt)("inlineCode",{parentName:"p"},"@brand/components"),",\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"paths")," compiler option would be updated to the following when syncing. The index file may exist\nin a ",(0,o.kt)("inlineCode",{parentName:"p"},"src")," folder, or the root of the package."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "paths": {\n "@brand/components": ["../shared/components/src/index.ts"],\n "@brand/components/*": ["../shared/components/src/*"]\n }\n },\n "references": [\n {\n "path": "../shared/components"\n }\n ]\n}\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting runs ",(0,o.kt)("em",{parentName:"p"},"after")," ",(0,o.kt)("a",{parentName:"p",href:"#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"syncProjectReferences"))," and will inherit any\nsynced references from that setting.")),(0,o.kt)("h2",{id:"rust"},"Rust"),(0,o.kt)("h2",{id:"rust-1"},(0,o.kt)("inlineCode",{parentName:"h2"},"rust"),(0,o.kt)(r.Z,{version:"1.5.0",mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/ToolchainConfig#rust",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Enables and configures ",(0,o.kt)("a",{parentName:"p",href:"../guides/rust/handbook"},"Rust"),"."),(0,o.kt)("h3",{id:"version-2"},(0,o.kt)("inlineCode",{parentName:"h3"},"version")),(0,o.kt)(i.Z,{to:"/api/types/interface/RustConfig#version",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Defines the explicit Rust toolchain\n",(0,o.kt)("a",{parentName:"p",href:"../concepts/toolchain#version-specification"},"version/channel specification")," to use. If this field\nis ",(0,o.kt)("em",{parentName:"p"},"not defined"),", the global ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"rustc"),", and other binaries will be used."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2}',title:'".moon/toolchain.yml"',"{2}":!0},"rust:\n version: '1.69'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Version can also be defined with ",(0,o.kt)("a",{parentName:"p",href:"../proto/config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools")),".")),(0,o.kt)("h3",{id:"bins-1"},(0,o.kt)("inlineCode",{parentName:"h3"},"bins"),(0,o.kt)(r.Z,{version:"1.10.0",updated:!0,mdxType:"VersionLabel"})),(0,o.kt)(i.Z,{to:"/api/types/interface/RustConfig#bins",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"A list of binaries (with optional versions) to install into Cargo (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),"), and make them\navailable to the ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo")," command. Binaries will be installed with\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/cargo-binstall"},(0,o.kt)("inlineCode",{parentName:"a"},"cargo-binstall"))," in an effort to reduce build and\ncompilation times."),(0,o.kt)("p",null,"This setting requires a list of package names or binary configuration objects with the following\nfields:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"bin")," (required) - Name of the binary."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"local")," - Only install the binary locally, and not in CI."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"force")," - Force install the binary. This ",(0,o.kt)("em",{parentName:"li"},"should")," be toggled for one-offs.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2-5}',title:'".moon/toolchain.yml"',"{2-5}":!0},"rust:\n bins:\n - 'cargo-nextest@0.9.52'\n - bin: 'cargo-nextest'\n local: true\n")),(0,o.kt)("p",null,"Binaries that have been installed into Cargo can be referenced from task commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n test:\n command: 'nextest run --workspace'\n")),(0,o.kt)("h3",{id:"synctoolchainconfig"},(0,o.kt)("inlineCode",{parentName:"h3"},"syncToolchainConfig")),(0,o.kt)(i.Z,{to:"/api/types/interface/RustConfig#syncToolchainConfig",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"Will automatically sync the currently configured ",(0,o.kt)("a",{parentName:"p",href:"#version-2"},"Rust ",(0,o.kt)("inlineCode",{parentName:"a"},"version"))," to the\n",(0,o.kt)("inlineCode",{parentName:"p"},"toolchain.channel")," field in ",(0,o.kt)("inlineCode",{parentName:"p"},"rust-toolchain.toml"),", relative to the root ",(0,o.kt)("inlineCode",{parentName:"p"},"Cargo.lock"),". If the file\ndoes not exist, it will be created."),(0,o.kt)("p",null,"This is a special setting that ensures other Rust/Cargo processes outside of our toolchain are\nutilizing the same version, which is a very common practice."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml" {2,3}',title:'".moon/toolchain.yml"',"{2,3}":!0},"rust:\n version: '1.69.0'\n syncToolchainConfig: true\n")),(0,o.kt)("p",null,"To demonstrate this, the settings above would sync the following file:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="rust-toolchain.toml"',title:'"rust-toolchain.toml"'},'[toolchain]\nchannel = "1.69.0"\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8e65fbae.2034a2d2.js b/assets/js/8e65fbae.2034a2d2.js deleted file mode 100644 index ef6544bc8ed..00000000000 --- a/assets/js/8e65fbae.2034a2d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1578],{37701:e=>{e.exports=JSON.parse('{"label":"scaffold","permalink":"/docs/tags/scaffold","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8e65fbae.8826264e.js b/assets/js/8e65fbae.8826264e.js new file mode 100644 index 00000000000..1e45d43850e --- /dev/null +++ b/assets/js/8e65fbae.8826264e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51578],{37701:e=>{e.exports=JSON.parse('{"label":"scaffold","permalink":"/docs/tags/scaffold","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8e9e3e30.3fadd857.js b/assets/js/8e9e3e30.3fadd857.js deleted file mode 100644 index 1e4552dc881..00000000000 --- a/assets/js/8e9e3e30.3fadd857.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4675],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(p,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},96433:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.16",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx",source:"@site/blog/2023-09-04_proto-v0.16.mdx",title:"proto v0.16 - Add, remove, and purge plugins",description:"This release adds functionality for managing plugins and purging the proto store.",date:"2023-09-04T00:00:00.000Z",formattedDate:"September 4, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.445,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},prevItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"},nextItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release adds functionality for managing plugins and purging the proto store."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8e9e3e30.9a64e8c0.js b/assets/js/8e9e3e30.9a64e8c0.js new file mode 100644 index 00000000000..3ca20fc2b2b --- /dev/null +++ b/assets/js/8e9e3e30.9a64e8c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74675],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(p,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},96433:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.16",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx",source:"@site/blog/2023-09-04_proto-v0.16.mdx",title:"proto v0.16 - Add, remove, and purge plugins",description:"This release adds functionality for managing plugins and purging the proto store.",date:"2023-09-04T00:00:00.000Z",formattedDate:"September 4, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.445,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.16",title:"proto v0.16 - Add, remove, and purge plugins",authors:["milesj"],tags:["proto","plugin"]},prevItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"},nextItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release adds functionality for managing plugins and purging the proto store."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8eb4e46b.54d7c6e0.js b/assets/js/8eb4e46b.54d7c6e0.js deleted file mode 100644 index c5102a7c1a4..00000000000 --- a/assets/js/8eb4e46b.54d7c6e0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6018],{82638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":6,"totalCount":51,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/8eb4e46b.818d4eb8.js b/assets/js/8eb4e46b.818d4eb8.js new file mode 100644 index 00000000000..3fa7fb1dd37 --- /dev/null +++ b/assets/js/8eb4e46b.818d4eb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10001],{82638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/8f6f7bb5.4e2ebbda.js b/assets/js/8f6f7bb5.4e2ebbda.js new file mode 100644 index 00000000000..e7c229ab59a --- /dev/null +++ b/assets/js/8f6f7bb5.4e2ebbda.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19950],{35318:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>u});var o=a(27378);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,o,n=function(e,t){if(null==e)return{};var a,o,n={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),p=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),m=p(a),u=n,h=m["".concat(s,".").concat(u)]||m[u]||c[u]||r;return a?o.createElement(h,l(l({ref:t},d),{},{components:a})):o.createElement(h,l({ref:t},d))}));function u(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,l=new Array(r);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var p=2;p<r;p++)l[p]=a[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,a)}m.displayName="MDXCreateElement"},68523:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var o=a(25773),n=a(27378),r=a(35318);function l(e){let{alt:t,src:a}=e;return n.createElement("div",{className:"m-3 text-center"},n.createElement("img",{alt:t,src:a.default,className:"block w-auto max-w-full"}))}const i={title:"Task profiling"},s=void 0,p={unversionedId:"guides/profile",id:"guides/profile",title:"Task profiling",description:"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!",source:"@site/docs/guides/profile.mdx",sourceDirName:"guides",slug:"/guides/profile",permalink:"/docs/guides/profile",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/profile.mdx",tags:[],version:"current",frontMatter:{title:"Task profiling"},sidebar:"guides",previous:{title:"Node.js handbook",permalink:"/docs/guides/javascript/node-handbook"},next:{title:"TypeScript project references",permalink:"/docs/guides/javascript/typescript-project-refs"}},d={},c=[{value:"CPU snapshots",id:"cpu-snapshots",level:2},{value:"Record a profile",id:"record-a-profile",level:3},{value:"Analyze in Chrome",id:"analyze-in-chrome",level:3},{value:"Heap snapshots",id:"heap-snapshots",level:2},{value:"Record a profile",id:"record-a-profile-1",level:3},{value:"Analyze in Chrome",id:"analyze-in-chrome-1",level:3},{value:"Views",id:"views",level:2},{value:"Bottom up",id:"bottom-up",level:3},{value:"Top down",id:"top-down",level:3},{value:"Flame chart",id:"flame-chart",level:3}],m={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Profiling is only supported by ",(0,r.kt)("inlineCode",{parentName:"p"},"node")," based tasks, and is not supported by tasks that are created\nthrough ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," inference, or for packages that ship non-JavaScript code (like Rust or Go).")),(0,r.kt)("h2",{id:"cpu-snapshots"},"CPU snapshots"),(0,r.kt)("p",null,"CPU profiling helps you get a better understanding of which parts of your code require the most CPU\ntime, and how your code is executed and optimized by Node.js. The profiler will measure code\nexecution and activities performed by the engine itself, such as compilation, calls of system\nlibraries, optimization, and garbage collection."),(0,r.kt)("h3",{id:"record-a-profile"},"Record a profile"),(0,r.kt)("p",null,"To record a CPU profile, pass ",(0,r.kt)("inlineCode",{parentName:"p"},"--profile cpu")," to the ",(0,r.kt)("a",{parentName:"p",href:"../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command. When\nsuccessful, the profile will be written to\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/states/<project>/<task>/snapshot.cpuprofile"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run --profile cpu app:lint\n")),(0,r.kt)("h3",{id:"analyze-in-chrome"},"Analyze in Chrome"),(0,r.kt)("p",null,"CPU profiles can be reviewed and analyzed with\n",(0,r.kt)("a",{parentName:"p",href:"https://developer.chrome.com/docs/devtools/"},"Chrome developer tools")," using the following steps."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open Chrome and navigate to ",(0,r.kt)("inlineCode",{parentName:"li"},"chrome://inspect"),"."),(0,r.kt)("li",{parentName:"ol"},'Under "Devices", navigate to "Open dedicated DevTools for Node".'),(0,r.kt)("li",{parentName:"ol"},'The following window will popup. Ensure the "Profiler" tab is selected.')),(0,r.kt)(l,{src:a(53124),alt:"DevTools Profiler - CPU",mdxType:"Image"}),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},'Click "Load" and select the ',(0,r.kt)("inlineCode",{parentName:"li"},"snapshot.cpuprofile")," that was\n",(0,r.kt)("a",{parentName:"li",href:"#record-a-profile"},"previously recorded"),". If successful, the snapshot will appear in the left\ncolumn.")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"On macOS, press ",(0,r.kt)("inlineCode",{parentName:"p"},"command")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"shift")," + ",(0,r.kt)("inlineCode",{parentName:"p"},".")," to display hidden files and folders, to locate the\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," folder.")),(0,r.kt)(l,{src:a(51924),alt:"DevTools Profiler - CPU snapshot loaded",mdxType:"Image"}),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Select the snapshot in the left column. From here, the snapshot can be analyzed and represented\nwith ",(0,r.kt)("a",{parentName:"li",href:"#bottom-up"},"Bottom up"),", ",(0,r.kt)("a",{parentName:"li",href:"#top-down"},"Top down"),", or ",(0,r.kt)("a",{parentName:"li",href:"#flame-chart"},"Flame chart")," views.")),(0,r.kt)(l,{src:a(23127),alt:"DevTools Profiler - CPU snapshot being analyzed through charts",mdxType:"Image"}),(0,r.kt)("h2",{id:"heap-snapshots"},"Heap snapshots"),(0,r.kt)("p",null,"Heap profiling lets you detect memory leaks, dynamic memory problems, and locate the fragments of\ncode that caused them."),(0,r.kt)("h3",{id:"record-a-profile-1"},"Record a profile"),(0,r.kt)("p",null,"To record a heap profile, pass ",(0,r.kt)("inlineCode",{parentName:"p"},"--profile heap")," to the ",(0,r.kt)("a",{parentName:"p",href:"../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command. When\nsuccessful, the profile will be written to\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/states/<project>/<task>/snapshot.heapprofile"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run --profile heap app:lint\n")),(0,r.kt)("h3",{id:"analyze-in-chrome-1"},"Analyze in Chrome"),(0,r.kt)("p",null,"Heap profiles can be reviewed and analyzed with\n",(0,r.kt)("a",{parentName:"p",href:"https://developer.chrome.com/docs/devtools/"},"Chrome developer tools")," using the following steps."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open Chrome and navigate to ",(0,r.kt)("inlineCode",{parentName:"li"},"chrome://inspect"),"."),(0,r.kt)("li",{parentName:"ol"},'Under "Devices", navigate to "Open dedicated DevTools for Node".'),(0,r.kt)("li",{parentName:"ol"},'The following window will popup. Ensure the "Memory" tab is selected.')),(0,r.kt)(l,{src:a(82634),alt:"DevTools Profiler - Heap",mdxType:"Image"}),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},'Click "Load" and select the ',(0,r.kt)("inlineCode",{parentName:"li"},"snapshot.heapprofile")," that was\n",(0,r.kt)("a",{parentName:"li",href:"#record-a-profile-1"},"previously recorded"),". If successful, the snapshot will appear in the left\ncolumn.")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"On macOS, press ",(0,r.kt)("inlineCode",{parentName:"p"},"command")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"shift")," + ",(0,r.kt)("inlineCode",{parentName:"p"},".")," to display hidden files and folders, to locate the\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," folder.")),(0,r.kt)(l,{src:a(46030),alt:"DevTools Profiler - Heap snapshot loaded",mdxType:"Image"}),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Select the snapshot in the left column. From here, the snapshot can be analyzed and represented\nwith ",(0,r.kt)("a",{parentName:"li",href:"#bottom-up"},"Bottom up"),", ",(0,r.kt)("a",{parentName:"li",href:"#top-down"},"Top down"),", or ",(0,r.kt)("a",{parentName:"li",href:"#flame-chart"},"Flame chart")," views.")),(0,r.kt)(l,{src:a(49427),alt:"DevTools Profiler - Heap snapshot being analyzed through charts",mdxType:"Image"}),(0,r.kt)("h2",{id:"views"},"Views"),(0,r.kt)("p",null,"Chrome DevTools provide 3 views for analyzing activities within a snapshot. Each view gives you a\ndifferent perspective on these activities."),(0,r.kt)("h3",{id:"bottom-up"},"Bottom up"),(0,r.kt)("p",null,"The Bottom up view is helpful if you encounter a heavy function and want to find out where it was\ncalled from."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'The "Self Time" column represents the aggregated time spent directly in that activity, across all\nof its occurrences.'),(0,r.kt)("li",{parentName:"ul"},'The "Total Time" column represents aggregated time spent in that activity or any of its children.'),(0,r.kt)("li",{parentName:"ul"},'The "Function" column is the function that was executed, including source location, and any\nchildren.')),(0,r.kt)(l,{src:a(78455),alt:"Bottom up profiler view",mdxType:"Image"}),(0,r.kt)("h3",{id:"top-down"},"Top down"),(0,r.kt)("p",null,"The Top down view works in a similar fashion to ",(0,r.kt)("a",{parentName:"p",href:"#bottom-up"},"Bottom up"),", but displays functions\nstarting from the top-level entry points. These are also known as root activities."),(0,r.kt)(l,{src:a(11046),alt:"Top down profiler view",mdxType:"Image"}),(0,r.kt)("h3",{id:"flame-chart"},"Flame chart"),(0,r.kt)("p",null,"DevTools represents main thread activity with a flame chart. The x-axis represents the recording\nover time. The y-axis represents the call stack. The events on top cause the events below it."),(0,r.kt)(l,{src:a(43632),alt:"Flame chart profiler view",mdxType:"Image"}))}u.isMDXComponent=!0},78455:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/bottom-up-2e2e925bb1bd78f49bf29e4f6f848f7c.png"},51924:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/cpu-loaded-ff6afad307a77cc32e53364c0cd3a597.png"},23127:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/cpu-selected-febbd2aef4ffaea46979cbeb583bd648.png"},53124:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/cpu-deb9e0f9310721da8e3394071dbaa637.png"},43632:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/flame-chart-aa69d1306f8472d449c7d9755e7995e8.png"},46030:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/heap-loaded-4bbbd3b5dd677a0d5bbdce7585ea3286.png"},49427:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/heap-selected-41365c3cb6e1244aa6dd2382e58b5804.png"},82634:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/heap-3451a7088c4f41a89ad4e068d250f6b4.png"},11046:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/top-down-409f6e1447d9875d7013017d0c7f643c.png"}}]); \ No newline at end of file diff --git a/assets/js/8f6f7bb5.52a79037.js b/assets/js/8f6f7bb5.52a79037.js deleted file mode 100644 index 6b7fccd8f20..00000000000 --- a/assets/js/8f6f7bb5.52a79037.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9950],{35318:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>u});var o=a(27378);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,o,n=function(e,t){if(null==e)return{};var a,o,n={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=o.createContext({}),p=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),m=p(a),u=n,h=m["".concat(s,".").concat(u)]||m[u]||c[u]||r;return a?o.createElement(h,l(l({ref:t},d),{},{components:a})):o.createElement(h,l({ref:t},d))}));function u(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,l=new Array(r);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var p=2;p<r;p++)l[p]=a[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,a)}m.displayName="MDXCreateElement"},68523:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var o=a(25773),n=a(27378),r=a(35318);function l(e){let{alt:t,src:a}=e;return n.createElement("div",{className:"m-3 text-center"},n.createElement("img",{alt:t,src:a.default,className:"block w-auto max-w-full"}))}const i={title:"Task profiling"},s=void 0,p={unversionedId:"guides/profile",id:"guides/profile",title:"Task profiling",description:"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!",source:"@site/docs/guides/profile.mdx",sourceDirName:"guides",slug:"/guides/profile",permalink:"/docs/guides/profile",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/profile.mdx",tags:[],version:"current",frontMatter:{title:"Task profiling"},sidebar:"guides",previous:{title:"Node.js handbook",permalink:"/docs/guides/javascript/node-handbook"},next:{title:"TypeScript project references",permalink:"/docs/guides/javascript/typescript-project-refs"}},d={},c=[{value:"CPU snapshots",id:"cpu-snapshots",level:2},{value:"Record a profile",id:"record-a-profile",level:3},{value:"Analyze in Chrome",id:"analyze-in-chrome",level:3},{value:"Heap snapshots",id:"heap-snapshots",level:2},{value:"Record a profile",id:"record-a-profile-1",level:3},{value:"Analyze in Chrome",id:"analyze-in-chrome-1",level:3},{value:"Views",id:"views",level:2},{value:"Bottom up",id:"bottom-up",level:3},{value:"Top down",id:"top-down",level:3},{value:"Flame chart",id:"flame-chart",level:3}],m={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Profiling is only supported by ",(0,r.kt)("inlineCode",{parentName:"p"},"node")," based tasks, and is not supported by tasks that are created\nthrough ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," inference, or for packages that ship non-JavaScript code (like Rust or Go).")),(0,r.kt)("h2",{id:"cpu-snapshots"},"CPU snapshots"),(0,r.kt)("p",null,"CPU profiling helps you get a better understanding of which parts of your code require the most CPU\ntime, and how your code is executed and optimized by Node.js. The profiler will measure code\nexecution and activities performed by the engine itself, such as compilation, calls of system\nlibraries, optimization, and garbage collection."),(0,r.kt)("h3",{id:"record-a-profile"},"Record a profile"),(0,r.kt)("p",null,"To record a CPU profile, pass ",(0,r.kt)("inlineCode",{parentName:"p"},"--profile cpu")," to the ",(0,r.kt)("a",{parentName:"p",href:"../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command. When\nsuccessful, the profile will be written to\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/states/<project>/<task>/snapshot.cpuprofile"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run --profile cpu app:lint\n")),(0,r.kt)("h3",{id:"analyze-in-chrome"},"Analyze in Chrome"),(0,r.kt)("p",null,"CPU profiles can be reviewed and analyzed with\n",(0,r.kt)("a",{parentName:"p",href:"https://developer.chrome.com/docs/devtools/"},"Chrome developer tools")," using the following steps."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open Chrome and navigate to ",(0,r.kt)("inlineCode",{parentName:"li"},"chrome://inspect"),"."),(0,r.kt)("li",{parentName:"ol"},'Under "Devices", navigate to "Open dedicated DevTools for Node".'),(0,r.kt)("li",{parentName:"ol"},'The following window will popup. Ensure the "Profiler" tab is selected.')),(0,r.kt)(l,{src:a(53124),alt:"DevTools Profiler - CPU",mdxType:"Image"}),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},'Click "Load" and select the ',(0,r.kt)("inlineCode",{parentName:"li"},"snapshot.cpuprofile")," that was\n",(0,r.kt)("a",{parentName:"li",href:"#record-a-profile"},"previously recorded"),". If successful, the snapshot will appear in the left\ncolumn.")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"On macOS, press ",(0,r.kt)("inlineCode",{parentName:"p"},"command")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"shift")," + ",(0,r.kt)("inlineCode",{parentName:"p"},".")," to display hidden files and folders, to locate the\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," folder.")),(0,r.kt)(l,{src:a(51924),alt:"DevTools Profiler - CPU snapshot loaded",mdxType:"Image"}),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Select the snapshot in the left column. From here, the snapshot can be analyzed and represented\nwith ",(0,r.kt)("a",{parentName:"li",href:"#bottom-up"},"Bottom up"),", ",(0,r.kt)("a",{parentName:"li",href:"#top-down"},"Top down"),", or ",(0,r.kt)("a",{parentName:"li",href:"#flame-chart"},"Flame chart")," views.")),(0,r.kt)(l,{src:a(23127),alt:"DevTools Profiler - CPU snapshot being analyzed through charts",mdxType:"Image"}),(0,r.kt)("h2",{id:"heap-snapshots"},"Heap snapshots"),(0,r.kt)("p",null,"Heap profiling lets you detect memory leaks, dynamic memory problems, and locate the fragments of\ncode that caused them."),(0,r.kt)("h3",{id:"record-a-profile-1"},"Record a profile"),(0,r.kt)("p",null,"To record a heap profile, pass ",(0,r.kt)("inlineCode",{parentName:"p"},"--profile heap")," to the ",(0,r.kt)("a",{parentName:"p",href:"../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command. When\nsuccessful, the profile will be written to\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/states/<project>/<task>/snapshot.heapprofile"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run --profile heap app:lint\n")),(0,r.kt)("h3",{id:"analyze-in-chrome-1"},"Analyze in Chrome"),(0,r.kt)("p",null,"Heap profiles can be reviewed and analyzed with\n",(0,r.kt)("a",{parentName:"p",href:"https://developer.chrome.com/docs/devtools/"},"Chrome developer tools")," using the following steps."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open Chrome and navigate to ",(0,r.kt)("inlineCode",{parentName:"li"},"chrome://inspect"),"."),(0,r.kt)("li",{parentName:"ol"},'Under "Devices", navigate to "Open dedicated DevTools for Node".'),(0,r.kt)("li",{parentName:"ol"},'The following window will popup. Ensure the "Memory" tab is selected.')),(0,r.kt)(l,{src:a(82634),alt:"DevTools Profiler - Heap",mdxType:"Image"}),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},'Click "Load" and select the ',(0,r.kt)("inlineCode",{parentName:"li"},"snapshot.heapprofile")," that was\n",(0,r.kt)("a",{parentName:"li",href:"#record-a-profile-1"},"previously recorded"),". If successful, the snapshot will appear in the left\ncolumn.")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"On macOS, press ",(0,r.kt)("inlineCode",{parentName:"p"},"command")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"shift")," + ",(0,r.kt)("inlineCode",{parentName:"p"},".")," to display hidden files and folders, to locate the\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," folder.")),(0,r.kt)(l,{src:a(46030),alt:"DevTools Profiler - Heap snapshot loaded",mdxType:"Image"}),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Select the snapshot in the left column. From here, the snapshot can be analyzed and represented\nwith ",(0,r.kt)("a",{parentName:"li",href:"#bottom-up"},"Bottom up"),", ",(0,r.kt)("a",{parentName:"li",href:"#top-down"},"Top down"),", or ",(0,r.kt)("a",{parentName:"li",href:"#flame-chart"},"Flame chart")," views.")),(0,r.kt)(l,{src:a(49427),alt:"DevTools Profiler - Heap snapshot being analyzed through charts",mdxType:"Image"}),(0,r.kt)("h2",{id:"views"},"Views"),(0,r.kt)("p",null,"Chrome DevTools provide 3 views for analyzing activities within a snapshot. Each view gives you a\ndifferent perspective on these activities."),(0,r.kt)("h3",{id:"bottom-up"},"Bottom up"),(0,r.kt)("p",null,"The Bottom up view is helpful if you encounter a heavy function and want to find out where it was\ncalled from."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'The "Self Time" column represents the aggregated time spent directly in that activity, across all\nof its occurrences.'),(0,r.kt)("li",{parentName:"ul"},'The "Total Time" column represents aggregated time spent in that activity or any of its children.'),(0,r.kt)("li",{parentName:"ul"},'The "Function" column is the function that was executed, including source location, and any\nchildren.')),(0,r.kt)(l,{src:a(78455),alt:"Bottom up profiler view",mdxType:"Image"}),(0,r.kt)("h3",{id:"top-down"},"Top down"),(0,r.kt)("p",null,"The Top down view works in a similar fashion to ",(0,r.kt)("a",{parentName:"p",href:"#bottom-up"},"Bottom up"),", but displays functions\nstarting from the top-level entry points. These are also known as root activities."),(0,r.kt)(l,{src:a(11046),alt:"Top down profiler view",mdxType:"Image"}),(0,r.kt)("h3",{id:"flame-chart"},"Flame chart"),(0,r.kt)("p",null,"DevTools represents main thread activity with a flame chart. The x-axis represents the recording\nover time. The y-axis represents the call stack. The events on top cause the events below it."),(0,r.kt)(l,{src:a(43632),alt:"Flame chart profiler view",mdxType:"Image"}))}u.isMDXComponent=!0},78455:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/bottom-up-2e2e925bb1bd78f49bf29e4f6f848f7c.png"},51924:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/cpu-loaded-ff6afad307a77cc32e53364c0cd3a597.png"},23127:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/cpu-selected-febbd2aef4ffaea46979cbeb583bd648.png"},53124:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/cpu-deb9e0f9310721da8e3394071dbaa637.png"},43632:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/flame-chart-aa69d1306f8472d449c7d9755e7995e8.png"},46030:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/heap-loaded-4bbbd3b5dd677a0d5bbdce7585ea3286.png"},49427:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/heap-selected-41365c3cb6e1244aa6dd2382e58b5804.png"},82634:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/heap-3451a7088c4f41a89ad4e068d250f6b4.png"},11046:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const o=a.p+"assets/images/top-down-409f6e1447d9875d7013017d0c7f643c.png"}}]); \ No newline at end of file diff --git a/assets/js/907bfa82.7727ec8d.js b/assets/js/907bfa82.7727ec8d.js deleted file mode 100644 index c66bd3396e0..00000000000 --- a/assets/js/907bfa82.7727ec8d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7633],{98818:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-typedoc-api","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/907bfa82.ac27cc7e.js b/assets/js/907bfa82.ac27cc7e.js new file mode 100644 index 00000000000..27c2f915c71 --- /dev/null +++ b/assets/js/907bfa82.ac27cc7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37633],{98818:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-typedoc-api","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/90b14878.0de805cb.js b/assets/js/90b14878.0de805cb.js deleted file mode 100644 index e95610af2b4..00000000000 --- a/assets/js/90b14878.0de805cb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1512],{24833:e=>{e.exports=JSON.parse('{"title":"Config files","keywords":["config"],"slug":"/config","permalink":"/docs/config","navigation":{"previous":{"title":"Workspace","permalink":"/docs/concepts/workspace"},"next":{"title":".moon/workspace.yml","permalink":"/docs/config/workspace"}}}')}}]); \ No newline at end of file diff --git a/assets/js/90b14878.9e5d1974.js b/assets/js/90b14878.9e5d1974.js new file mode 100644 index 00000000000..c932ef27a71 --- /dev/null +++ b/assets/js/90b14878.9e5d1974.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8114],{24833:e=>{e.exports=JSON.parse('{"title":"Config files","keywords":["config"],"slug":"/config","permalink":"/docs/config","navigation":{"previous":{"title":"Workspace","permalink":"/docs/concepts/workspace"},"next":{"title":".moon/workspace.yml","permalink":"/docs/config/workspace"}}}')}}]); \ No newline at end of file diff --git a/assets/js/90f88783.8572bd77.js b/assets/js/90f88783.8572bd77.js new file mode 100644 index 00000000000..b1a4a160fbd --- /dev/null +++ b/assets/js/90f88783.8572bd77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13481],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},l=Object.keys(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(r),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||l;return r?n.createElement(f,o(o({ref:t},c),{},{components:r})):n.createElement(f,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var u=2;u<l;u++)o[u]=r[u];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378),a=r(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:r,className:o}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(l,o),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),l=r(37140),o=r(83457),i=r(35595),s=r(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,r=p.indexOf(t),n=u[r].value;n!==i&&(d(t),s(n))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":r},t)},u.map((e=>{let{value:t,label:r,attributes:o}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),r??t)})))}function d(e){let{lazy:t,children:r,selectedValue:n}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,l.Z)("tabs-container",u)},a.createElement(p,(0,n.Z)({},e,t)),a.createElement(d,(0,n.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>d});var n=r(27378),a=r(35331),l=r(30654),o=r(70784),i=r(71819);function s(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function u(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??s(r);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const o=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,l=u(e),[o,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:r,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,l]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&l.set(e)}),[r,l])]}({groupId:a}),h=(()=>{const e=d??f;return c({value:e,tabValues:l})?e:null})();(0,n.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,l]),tabValues:l}}},36642:(e,t,r)=>{r.d(t,{Z:()=>u});var n=r(27378),a=r(30780),l=r(39798),o=r(33337);function i(e,t,r){let n=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?n+="--dev ":e.peer&&(n+="--peer "),r&&t&&!e.package&&(n+="-W "),n+=e.dep,n}function s(e,t){let r="pnpm add ";return e.dev?r+="--save-dev ":e.peer&&(r+="--save-peer "),e.package?r+=`--filter ${e.package} `:t&&(r+="-w "),r+=e.dep,r}function u(e){let t=i(e,!1,!0),r=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",r+="\n\n# If using workspaces\n",t+=i(e,!0,!0),r+=s(e,!0)),n.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},n.createElement(l.Z,{value:"yarn"},n.createElement(a.Z,{language:"shell"},i(e,!1,!1))),n.createElement(l.Z,{value:"yarn1"},n.createElement(a.Z,{language:"shell"},t)),n.createElement(l.Z,{value:"npm"},n.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),n.createElement(l.Z,{value:"pnpm"},n.createElement(a.Z,{language:"shell"},r)))}},32189:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378),a=r(83469),l=r(31792);function o(e){let{to:t}=e;return n.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},n.createElement(l.Z,{icon:a.dT$}))}},9123:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var n=r(25773),a=(r(27378),r(35318)),l=r(36642),o=r(32189);const i={title:"Prettier example",sidebar_label:"Prettier"},s=void 0,u={unversionedId:"guides/examples/prettier",id:"guides/examples/prettier",title:"Prettier example",description:"In this guide, you'll learn how to integrate Prettier into moon.",source:"@site/docs/guides/examples/prettier.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/prettier",permalink:"/docs/guides/examples/prettier",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/prettier.mdx",tags:[],version:"current",frontMatter:{title:"Prettier example",sidebar_label:"Prettier"},sidebar:"guides",previous:{title:"Packemon",permalink:"/docs/guides/examples/packemon"},next:{title:"React",permalink:"/docs/guides/examples/react"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to use <code>--write</code>?",id:"how-to-use---write",level:3}],d={toc:p};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L41",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,a.kt)("a",{parentName:"p",href:"https://prettier.io/"},"Prettier")," into moon."),(0,a.kt)("p",null,"Begin by installing ",(0,a.kt)("inlineCode",{parentName:"p"},"prettier")," in your root. We suggest using the same version across the entire\nrepository."),(0,a.kt)(l.Z,{dep:"prettier",dev:!0,mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Since code formatting is a universal workflow, add a ",(0,a.kt)("inlineCode",{parentName:"p"},"format")," task to\n",(0,a.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n format:\n command:\n - 'prettier'\n # Use the same config for the entire repo\n - '--config'\n - '@in(4)'\n # Use the same ignore patterns as well\n - '--ignore-path'\n - '@in(3)'\n # Fail for unformatted code\n - '--check'\n # Run in current dir\n - '.'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Config and other files\n - '**/*.{md,mdx,yml,yaml,json}'\n # Root configs, any format\n - '/.prettierignore'\n - '/.prettierrc.*'\n")),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("h3",{id:"root-level"},"Root-level"),(0,a.kt)("p",null,"The root-level Prettier config is ",(0,a.kt)("em",{parentName:"p"},"required"),", as it defines conventions and standards to apply to\nthe entire repository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".prettierrc.js"',title:'".prettierrc.js"'},"module.exports = {\n arrowParens: 'always',\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'all',\n useTabs: true,\n};\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},".prettierignore")," file must also be defined at the root, as\n",(0,a.kt)("a",{parentName:"p",href:"https://prettier.io/docs/en/ignore.html#ignoring-files-prettierignore"},"only 1 ignore file")," can\nexist in a repository. We ensure this ignore file is used by passing ",(0,a.kt)("inlineCode",{parentName:"p"},"--ignore-path")," above."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title=".prettierignore"',title:'".prettierignore"'},"node_modules/\n*.min.js\n*.map\n*.snap\n")),(0,a.kt)("h3",{id:"project-level"},"Project-level"),(0,a.kt)("p",null,"We suggest ",(0,a.kt)("em",{parentName:"p"},"against")," project-level configurations, as the entire repository should be formatted\nusing the same standards. However, if you're migrating code and need an escape hatch,\n",(0,a.kt)("a",{parentName:"p",href:"https://prettier.io/docs/en/configuration.html#configuration-overrides"},"overrides in the root")," will\nwork."),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h3",{id:"how-to-use---write"},"How to use ",(0,a.kt)("inlineCode",{parentName:"h3"},"--write"),"?"),(0,a.kt)("p",null,"Unfortunately, this isn't currently possible, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"prettier")," binary itself requires either the\n",(0,a.kt)("inlineCode",{parentName:"p"},"--check")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"--write")," options, and since we're configuring ",(0,a.kt)("inlineCode",{parentName:"p"},"--check")," in the task above, that takes\nprecedence. This is also the preferred pattern as checks will run (and fail) in CI."),(0,a.kt)("p",null,"To work around this limitation, we suggest the following alternatives:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Configure your editor to run Prettier on save."),(0,a.kt)("li",{parentName:"ul"},"Define another task to write the formatted code, like ",(0,a.kt)("inlineCode",{parentName:"li"},"format-write"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/90f88783.a49c4640.js b/assets/js/90f88783.a49c4640.js deleted file mode 100644 index d3107a3a1ee..00000000000 --- a/assets/js/90f88783.a49c4640.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3481],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},l=Object.keys(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(r),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||l;return r?n.createElement(f,o(o({ref:t},c),{},{components:r})):n.createElement(f,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var u=2;u<l;u++)o[u]=r[u];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378),a=r(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:r,className:o}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(l,o),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),l=r(37140),o=r(83457),i=r(35595),s=r(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,r=p.indexOf(t),n=u[r].value;n!==i&&(d(t),s(n))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":r},t)},u.map((e=>{let{value:t,label:r,attributes:o}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),r??t)})))}function d(e){let{lazy:t,children:r,selectedValue:n}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,l.Z)("tabs-container",u)},a.createElement(p,(0,n.Z)({},e,t)),a.createElement(d,(0,n.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>d});var n=r(27378),a=r(35331),l=r(30654),o=r(70784),i=r(71819);function s(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function u(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??s(r);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const o=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,l=u(e),[o,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l}))),[d,m]=p({queryString:r,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,l]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&l.set(e)}),[r,l])]}({groupId:a}),h=(()=>{const e=d??f;return c({value:e,tabValues:l})?e:null})();(0,n.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,l]),tabValues:l}}},36642:(e,t,r)=>{r.d(t,{Z:()=>u});var n=r(27378),a=r(30780),l=r(39798),o=r(33337);function i(e,t,r){let n=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?n+="--dev ":e.peer&&(n+="--peer "),r&&t&&!e.package&&(n+="-W "),n+=e.dep,n}function s(e,t){let r="pnpm add ";return e.dev?r+="--save-dev ":e.peer&&(r+="--save-peer "),e.package?r+=`--filter ${e.package} `:t&&(r+="-w "),r+=e.dep,r}function u(e){let t=i(e,!1,!0),r=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",r+="\n\n# If using workspaces\n",t+=i(e,!0,!0),r+=s(e,!0)),n.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},n.createElement(l.Z,{value:"yarn"},n.createElement(a.Z,{language:"shell"},i(e,!1,!1))),n.createElement(l.Z,{value:"yarn1"},n.createElement(a.Z,{language:"shell"},t)),n.createElement(l.Z,{value:"npm"},n.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),n.createElement(l.Z,{value:"pnpm"},n.createElement(a.Z,{language:"shell"},r)))}},32189:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378),a=r(83469),l=r(31792);function o(e){let{to:t}=e;return n.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},n.createElement(l.Z,{icon:a.dT$}))}},9123:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var n=r(25773),a=(r(27378),r(35318)),l=r(36642),o=r(32189);const i={title:"Prettier example",sidebar_label:"Prettier"},s=void 0,u={unversionedId:"guides/examples/prettier",id:"guides/examples/prettier",title:"Prettier example",description:"In this guide, you'll learn how to integrate Prettier into moon.",source:"@site/docs/guides/examples/prettier.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/prettier",permalink:"/docs/guides/examples/prettier",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/prettier.mdx",tags:[],version:"current",frontMatter:{title:"Prettier example",sidebar_label:"Prettier"},sidebar:"guides",previous:{title:"Packemon",permalink:"/docs/guides/examples/packemon"},next:{title:"React",permalink:"/docs/guides/examples/react"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to use <code>--write</code>?",id:"how-to-use---write",level:3}],d={toc:p};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L41",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,a.kt)("a",{parentName:"p",href:"https://prettier.io/"},"Prettier")," into moon."),(0,a.kt)("p",null,"Begin by installing ",(0,a.kt)("inlineCode",{parentName:"p"},"prettier")," in your root. We suggest using the same version across the entire\nrepository."),(0,a.kt)(l.Z,{dep:"prettier",dev:!0,mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Since code formatting is a universal workflow, add a ",(0,a.kt)("inlineCode",{parentName:"p"},"format")," task to\n",(0,a.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n format:\n command:\n - 'prettier'\n # Use the same config for the entire repo\n - '--config'\n - '@in(4)'\n # Use the same ignore patterns as well\n - '--ignore-path'\n - '@in(3)'\n # Fail for unformatted code\n - '--check'\n # Run in current dir\n - '.'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Config and other files\n - '**/*.{md,mdx,yml,yaml,json}'\n # Root configs, any format\n - '/.prettierignore'\n - '/.prettierrc.*'\n")),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("h3",{id:"root-level"},"Root-level"),(0,a.kt)("p",null,"The root-level Prettier config is ",(0,a.kt)("em",{parentName:"p"},"required"),", as it defines conventions and standards to apply to\nthe entire repository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".prettierrc.js"',title:'".prettierrc.js"'},"module.exports = {\n arrowParens: 'always',\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'all',\n useTabs: true,\n};\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},".prettierignore")," file must also be defined at the root, as\n",(0,a.kt)("a",{parentName:"p",href:"https://prettier.io/docs/en/ignore.html#ignoring-files-prettierignore"},"only 1 ignore file")," can\nexist in a repository. We ensure this ignore file is used by passing ",(0,a.kt)("inlineCode",{parentName:"p"},"--ignore-path")," above."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title=".prettierignore"',title:'".prettierignore"'},"node_modules/\n*.min.js\n*.map\n*.snap\n")),(0,a.kt)("h3",{id:"project-level"},"Project-level"),(0,a.kt)("p",null,"We suggest ",(0,a.kt)("em",{parentName:"p"},"against")," project-level configurations, as the entire repository should be formatted\nusing the same standards. However, if you're migrating code and need an escape hatch,\n",(0,a.kt)("a",{parentName:"p",href:"https://prettier.io/docs/en/configuration.html#configuration-overrides"},"overrides in the root")," will\nwork."),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h3",{id:"how-to-use---write"},"How to use ",(0,a.kt)("inlineCode",{parentName:"h3"},"--write"),"?"),(0,a.kt)("p",null,"Unfortunately, this isn't currently possible, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"prettier")," binary itself requires either the\n",(0,a.kt)("inlineCode",{parentName:"p"},"--check")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"--write")," options, and since we're configuring ",(0,a.kt)("inlineCode",{parentName:"p"},"--check")," in the task above, that takes\nprecedence. This is also the preferred pattern as checks will run (and fail) in CI."),(0,a.kt)("p",null,"To work around this limitation, we suggest the following alternatives:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Configure your editor to run Prettier on save."),(0,a.kt)("li",{parentName:"ul"},"Define another task to write the formatted code, like ",(0,a.kt)("inlineCode",{parentName:"li"},"format-write"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/90fdb9b5.c6fee719.js b/assets/js/90fdb9b5.c6fee719.js deleted file mode 100644 index 765c784f0f5..00000000000 --- a/assets/js/90fdb9b5.c6fee719.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6321],{27488:e=>{e.exports=JSON.parse('{"label":"offline","permalink":"/blog/tags/offline","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/90fdb9b5.ea27b65f.js b/assets/js/90fdb9b5.ea27b65f.js new file mode 100644 index 00000000000..b38806ac6d2 --- /dev/null +++ b/assets/js/90fdb9b5.ea27b65f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96321],{27488:e=>{e.exports=JSON.parse('{"label":"offline","permalink":"/blog/tags/offline","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/9127.686f7823.js b/assets/js/9127.686f7823.js deleted file mode 100644 index 9350c2b0f22..00000000000 --- a/assets/js/9127.686f7823.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9127],{89127:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/9262.4c68992b.js b/assets/js/9262.4c68992b.js deleted file mode 100644 index 6ac3c493bc6..00000000000 --- a/assets/js/9262.4c68992b.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 9262.4c68992b.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9262],{35318:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>c,kt:()=>f});var r=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),l=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),h=l(n),f=i,p=h["".concat(u,".").concat(f)]||h[f]||d[f]||a;return n?r.createElement(p,o(o({ref:t},c),{},{components:n})):r.createElement(p,o({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var l=2;l<a;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}h.displayName="MDXCreateElement"},58406:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var r=n(1),i=function(e){e&&e("layout","dagre",r)};"undefined"!=typeof cytoscape&&i(cytoscape),e.exports=i},function(e,t,n){function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var i=function(e){return"function"==typeof e},a=n(2),o=n(3),s=n(4);function u(e){this.options=o({},a,e)}u.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,a=function(e,t){return i(t)?t.apply(e,[e]):t},o=e.boundingBox||{x1:0,y1:0,w:t.width(),h:t.height()};void 0===o.x2&&(o.x2=o.x1+o.w),void 0===o.w&&(o.w=o.x2-o.x1),void 0===o.y2&&(o.y2=o.y1+o.h),void 0===o.h&&(o.h=o.y2-o.y1);var u=new s.graphlib.Graph({multigraph:!0,compound:!0}),l={},c=function(e,t){null!=t&&(l[e]=t)};c("nodesep",e.nodeSep),c("edgesep",e.edgeSep),c("ranksep",e.rankSep),c("rankdir",e.rankDir),c("align",e.align),c("ranker",e.ranker),c("acyclicer",e.acyclicer),u.setGraph(l),u.setDefaultEdgeLabel((function(){return{}})),u.setDefaultNodeLabel((function(){return{}}));var d=n.nodes();i(e.sort)&&(d=d.sort(e.sort));for(var h=0;h<d.length;h++){var f=d[h],p=f.layoutDimensions(e);u.setNode(f.id(),{width:p.w,height:p.h,name:f.id()})}for(var v=0;v<d.length;v++){var g=d[v];g.isChild()&&u.setParent(g.id(),g.parent().id())}var y=n.edges().stdFilter((function(e){return!e.source().isParent()&&!e.target().isParent()}));i(e.sort)&&(y=y.sort(e.sort));for(var m=0;m<y.length;m++){var b=y[m];u.setEdge(b.source().id(),b.target().id(),{minlen:a(b,e.minLen),weight:a(b,e.edgeWeight),name:b.id()},b.id())}s.layout(u);for(var x,w=u.nodes(),E=0;E<w.length;E++){var k=w[E],_=u.node(k);t.getElementById(k).scratch().dagre=_}return e.boundingBox?(x={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0},d.forEach((function(e){var t=e.scratch().dagre;x.x1=Math.min(x.x1,t.x),x.x2=Math.max(x.x2,t.x),x.y1=Math.min(x.y1,t.y),x.y2=Math.max(x.y2,t.y)})),x.w=x.x2-x.x1,x.h=x.y2-x.y1):x=o,d.layoutPositions(this,e,(function(t){var n=(t="object"===r(t)?t:this).scratch().dagre;return function(t){if(e.boundingBox){var n=0===x.w?0:(t.x-x.x1)/x.w,r=0===x.h?0:(t.y-x.y1)/x.h;return{x:o.x1+n*o.w,y:o.y1+r*o.h}}return t}({x:n.x,y:n.y})})),this},e.exports=u},function(e,t){var n={nodeSep:void 0,edgeSep:void 0,rankSep:void 0,rankDir:void 0,align:void 0,acyclicer:void 0,ranker:void 0,minLen:function(e){return 1},edgeWeight:function(e){return 1},fit:!0,padding:30,spacingFactor:void 0,nodeDimensionsIncludeLabels:!1,animate:!1,animateFilter:function(e,t){return!0},animationDuration:500,animationEasing:void 0,boundingBox:void 0,transform:function(e,t){return t},ready:function(){},sort:void 0,stop:function(){}};e.exports=n},function(e,t){e.exports=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return n.forEach((function(t){Object.keys(t).forEach((function(n){return e[n]=t[n]}))})),e}},function(t,n){t.exports=e}])},e.exports=r(n(24259))},35315:(e,t,n)=>{"use strict";var r=n(66726),i=n(87251),a=n(99729),o=n(47215),s=n(40110);function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(r),c=u(i),d=u(a),h=u(o),f=u(s);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t,n){return t&&g(e.prototype,t),n&&g(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(u){s=!0,i=u}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return x(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return x(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w="undefined"==typeof window?null:window,E=w?w.navigator:null;w&&w.document;var k=p(""),_=p({}),C=p((function(){})),S="undefined"==typeof HTMLElement?"undefined":p(HTMLElement),P=function(e){return e&&e.instanceString&&T(e.instanceString)?e.instanceString():null},D=function(e){return null!=e&&p(e)==k},T=function(e){return null!=e&&p(e)===C},M=function(e){return!O(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},B=function(e){return null!=e&&p(e)===_&&!M(e)&&e.constructor===Object},N=function(e){return null!=e&&p(e)===p(1)&&!isNaN(e)},I=function(e){return"undefined"===S?void 0:null!=e&&e instanceof HTMLElement},O=function(e){return z(e)||L(e)},z=function(e){return"collection"===P(e)&&e._private.single},L=function(e){return"collection"===P(e)&&!e._private.single},A=function(e){return"core"===P(e)},j=function(e){return"stylesheet"===P(e)},R=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},F=function(e){return function(e){return null!=e&&p(e)===_}(e)&&T(e.then)},V=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=this,a=arguments,o=t.apply(i,a),s=n.cache;return(r=s[o])||(r=s[o]=e.apply(i,a)),r};return n.cache={},n},q=V((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),Y=V((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),X=V((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),W=function(e){return R(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},G="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",H=function(e,t){return e<t?-1:e>t?1:0},U=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},K=function(e){return(M(e)?e:null)||function(e){return Z[e.toLowerCase()]}(e)||function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}}(e)||function(e){var t,n=new RegExp("^rgb[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var u=n[4];if(void 0!==u){if((u=parseFloat(u))<0||u>1)return;t.push(u)}}return t}(e)||function(e){var t,n,r,i,a,o,s,u;function l(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=u=Math.round(255*i);else{var d=i<.5?i*(1+r):i+r-i*r,h=2*i-d;o=Math.round(255*l(h,d,n+1/3)),s=Math.round(255*l(h,d,n)),u=Math.round(255*l(h,d,n-1/3))}t=[o,s,u,a]}return t}(e)},Z={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},$=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(B(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},Q=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(B(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t},J=w?w.performance:null,ee=J&&J.now?function(){return J.now()}:function(){return Date.now()},te=function(){if(w){if(w.requestAnimationFrame)return function(e){w.requestAnimationFrame(e)};if(w.mozRequestAnimationFrame)return function(e){w.mozRequestAnimationFrame(e)};if(w.webkitRequestAnimationFrame)return function(e){w.webkitRequestAnimationFrame(e)};if(w.msRequestAnimationFrame)return function(e){w.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(ee())}),1e3/60)}}(),ne=function(e){return te(e)},re=ee,ie=9261,ae=65599,oe=5381,se=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie,r=n;!(t=e.next()).done;)r=r*ae+t.value|0;return r},ue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie;return t*ae+e|0},le=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:oe;return(t<<5)+t+e|0},ce=function(e){return 2097152*e[0]+e[1]},de=function(e,t){return[ue(e[0],t[0]),le(e[1],t[1])]},he=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return se({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},fe=function(){return pe(arguments)},pe=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?he(r):he(r,t)}return t},ve=!0,ge=null!=console.warn,ye=null!=console.trace,me=Number.MAX_SAFE_INTEGER||9007199254740991,be=function(){return!0},xe=function(){return!1},we=function(){return 0},Ee=function(){},ke=function(e){throw new Error(e)},_e=function(e){if(void 0===e)return ve;ve=!!e},Ce=function(e){_e()&&(ge?console.warn(e):(console.log(e),ye&&console.trace()))},Se=function(e){return null==e?e:M(e)?e.slice():B(e)?function(e){return U({},e)}(e):e},Pe=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},De={},Te=function(){return De},Me=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Be=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Ne=function(e){e.splice(0,e.length)},Ie=function(e,t,n){return n&&(t=X(n,t)),e[t]},Oe=function(e,t,n,r){n&&(t=X(n,t)),e[t]=r},ze="undefined"!=typeof Map?Map:function(){function e(){v(this,e),this._obj={}}return y(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),Le=function(){function e(t){if(v(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r<n.length;r++)this.add(n[r])}}return y(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ae="undefined"!==("undefined"==typeof Set?"undefined":p(Set))?Set:Le,je=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&A(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ae,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var u=[];M(t.classes)?u=t.classes:D(t.classes)&&(u=t.classes.split(/\s+/));for(var l=0,c=u.length;l<c;l++){var d=u[l];d&&""!==d&&i.classes.add(d)}this.createEmitter();var h=t.style||t.css;h&&(Ce("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(h)),(void 0===n||n)&&this.restore()}else ke("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else ke("An element must have a core reference and parameters set")},Re=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;B(t)&&!O(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||T(n)?r:n,n=T(n)?n:function(){};for(var a,o=this._private.cy,s=t=D(t)?this.filter(t):t,u=[],l=[],c={},d={},h={},f=0,p=this.byGroup(),v=p.nodes,g=p.edges,y=0;y<s.length;y++){var m=s[y],b=m.id();m.isNode()&&(u.unshift(m),e.bfs&&(h[b]=!0,l.push(m)),d[b]=0)}for(var x=function(){var t=e.bfs?u.shift():u.pop(),i=t.id();if(e.dfs){if(h[i])return"continue";h[i]=!0,l.push(t)}var o,s=d[i],p=c[i],y=null!=p?p.source():null,m=null!=p?p.target():null,b=null==p?void 0:t.same(y)?m[0]:y[0];if(!0===(o=n(t,p,b,f++,s)))return a=t,"break";if(!1===o)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&g.has(e)})),w=0;w<x.length;w++){var E=x[w],k=E.connectedNodes().filter((function(e){return!e.same(t)&&v.has(e)})),_=k.id();0===k.length||h[_]||(k=k[0],u.push(k),e.bfs&&(h[_]=!0,l.push(k)),c[_]=E,d[_]=d[i]+1)}};0!==u.length;){var w=x();if("continue"!==w&&"break"===w)break}for(var E=o.collection(),k=0;k<l.length;k++){var _=l[k],C=c[_.id()];null!=C&&E.push(C),E.push(_)}return{path:o.collection(E),found:o.collection(a)}}},Fe={breadthFirstSearch:Re({bfs:!0}),depthFirstSearch:Re({dfs:!0})};Fe.bfs=Fe.breadthFirstSearch,Fe.dfs=Fe.depthFirstSearch;var Ve=Me({root:null,weight:function(e){return 1},directed:!1}),qe={dijkstra:function(e){if(!B(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Ve(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,u=D(r)?this.filter(r)[0]:r[0],l={},d={},h={},f=this.byGroup(),p=f.nodes,v=f.edges;v.unmergeBy((function(e){return e.isLoop()}));for(var g=function(e){return l[e.id()]},y=function(e,t){l[e.id()]=t,m.updateItem(e)},m=new c.default((function(e,t){return g(e)-g(t)})),b=0;b<p.length;b++){var x=p[b];l[x.id()]=x.same(u)?0:1/0,m.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(v),i=1/0,o=0;o<r.length;o++){var u=r[o],l=s(u);(l<i||!n)&&(i=l,n=u)}return{edge:n,dist:i}};m.size()>0;){var E=m.pop(),k=g(E),_=E.id();if(h[_]=k,k!==1/0)for(var C=E.neighborhood().intersect(p),S=0;S<C.length;S++){var P=C[S],T=P.id(),M=w(E,P),N=k+M.dist;N<g(P)&&(y(P,N),d[T]={node:E,edge:M.edge})}}return{distanceTo:function(e){var t=D(e)?p.filter(e)[0]:e[0];return h[t.id()]},pathTo:function(e){var t=D(e)?p.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)for(n.unshift(t);d[i];){var a=d[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},Ye={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t<a.length;t++){if(a[t].has(e))return t}},u=0;u<i;u++)a[u]=this.spawn(n[u]);for(var l=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<l.length;c++){var d=l[c],h=d.source()[0],f=d.target()[0],p=s(h),v=s(f),g=a[p],y=a[v];p!==v&&(o.merge(d),g.merge(y),a.splice(v,1))}return o}},Xe=Me({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),We={aStar:function(e){var t=this.cy(),n=Xe(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var u,l,d=r.id(),h=i.id(),f={},p={},v={},g=new c.default((function(e,t){return p[e.id()]-p[t.id()]})),y=new Ae,m={},b={},x=function(e,t){g.push(e),y.add(t)};x(r,d),f[d]=0,p[d]=a(r);for(var w,E=0;g.size()>0;){if(u=g.pop(),l=u.id(),y.delete(l),E++,l===h){for(var k=[],_=i,C=h,S=b[C];k.unshift(_),null!=S&&k.unshift(S),null!=(_=m[C]);)S=b[C=_.id()];return{found:!0,distance:f[l],path:this.spawn(k),steps:E}}v[l]=!0;for(var P=u._private.edges,D=0;D<P.length;D++){var T=P[D];if(this.hasElementWithId(T.id())&&(!o||T.data("source")===l)){var M=T.source(),B=T.target(),N=M.id()!==l?M:B,I=N.id();if(this.hasElementWithId(I)&&!v[I]){var O=f[l]+s(T);w=I,y.has(w)?O<f[I]&&(f[I]=O,p[I]=O+a(N),m[I]=u,b[I]=T):(f[I]=O,p[I]=O+a(N),x(N,I),m[I]=u,b[I]=T)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},Ge=Me({weight:function(e){return 1},directed:!1}),He={floydWarshall:function(e){for(var t=this.cy(),n=Ge(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,u=o.edges,l=s.length,c=l*l,d=function(e){return s.indexOf(e)},h=function(e){return s[e]},f=new Array(c),p=0;p<c;p++){var v=p%l,g=(p-v)/l;f[p]=g===v?0:1/0}for(var y=new Array(c),m=new Array(c),b=0;b<u.length;b++){var x=u[b],w=x.source()[0],E=x.target()[0];if(w!==E){var k=d(w),_=d(E),C=k*l+_,S=a(x);if(f[C]>S&&(f[C]=S,y[C]=_,m[C]=x),!i){var P=_*l+k;!i&&f[P]>S&&(f[P]=S,y[P]=k,m[P]=x)}}}for(var T=0;T<l;T++)for(var M=0;M<l;M++)for(var B=M*l+T,N=0;N<l;N++){var I=M*l+N,O=T*l+N;f[B]+f[O]<f[I]&&(f[I]=f[B]+f[O],y[I]=y[B])}var z=function(e){return d(function(e){return(D(e)?t.filter(e):e)[0]}(e))},L={distance:function(e,t){var n=z(e),r=z(t);return f[n*l+r]},path:function(e,n){var r=z(e),i=z(n),a=h(r);if(r===i)return a.collection();if(null==y[r*l+i])return t.collection();var o,s=t.collection(),u=r;for(s.merge(a);r!==i;)u=r,r=y[r*l+i],o=m[u*l+r],s.merge(o),s.merge(h(r));return s}};return L}},Ue=Me({weight:function(e){return 1},directed:!1,root:null}),Ke={bellmanFord:function(e){var t=this,n=Ue(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,u=this.cy(),l=this.byGroup(),c=l.edges,d=l.nodes,h=d.length,f=new ze,p=!1,v=[];a=u.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var g=c.length,y=function(e){var t=f.get(e.id());return t||(t={},f.set(e.id(),t)),t},m=function(e){return(D(e)?u.$(e):e)[0]},b=0;b<h;b++){var x=d[b],w=y(x);x.same(a)?w.dist=0:w.dist=1/0,w.pred=null,w.edge=null}for(var E=!1,k=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,E=!0)},_=1;_<h;_++){E=!1;for(var C=0;C<g;C++){var S=c[C],P=S.source(),T=S.target(),M=o(S),B=y(P),N=y(T);k(P,0,S,B,N,M),i||k(T,0,S,N,B,M)}if(!E)break}if(E)for(var I=[],O=0;O<g;O++){var z=c[O],L=z.source(),A=z.target(),j=o(z),R=y(L).dist,F=y(A).dist;if(R+j<F||!i&&F+j<R){if(p||(Ce("Graph contains a negative weight cycle for Bellman-Ford"),p=!0),!1===e.findNegativeWeightCycles)break;var V=[];R+j<F&&V.push(L),!i&&F+j<R&&V.push(A);for(var q=V.length,Y=0;Y<q;Y++){var X=V[Y],W=[X];W.push(y(X).edge);for(var G=y(X).pred;-1===W.indexOf(G);)W.push(G),W.push(y(G).edge),G=y(G).pred;for(var H=(W=W.slice(W.indexOf(G)))[0].id(),U=0,K=2;K<W.length;K+=2)W[K].id()<H&&(H=W[K].id(),U=K);(W=W.slice(U).concat(W.slice(0,U))).push(W[0]);var Z=W.map((function(e){return e.id()})).join(",");-1===I.indexOf(Z)&&(v.push(s.spawn(W)),I.push(Z))}}}return{distanceTo:function(e){return y(m(e)).dist},pathTo:function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,r=m(e),i=[],o=r;;){if(null==o)return t.spawn();var u=y(o),l=u.edge,c=u.pred;if(i.unshift(o[0]),o.same(n)&&i.length>0)break;null!=l&&i.unshift(l),o=c}return s.spawn(i)},hasNegativeWeightCycle:p,negativeWeightCycles:v}}},Ze=Math.sqrt(2),$e=function(e,t,n){0===n.length&&ke("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],u=n,l=u.length-1;l>=0;l--){var c=u[l],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&u.splice(l,1)}for(var f=0;f<u.length;f++){var p=u[f];p[1]===s?(u[f]=p.slice(),u[f][1]=o):p[2]===s&&(u[f]=p.slice(),u[f][2]=o)}for(var v=0;v<t.length;v++)t[v]===s&&(t[v]=o);return u},Qe=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=$e(i,e,t),n--}return t},Je={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/Ze);if(!(i<2)){for(var u=[],l=0;l<a;l++){var c=r[l];u.push([l,n.indexOf(c.source()),n.indexOf(c.target())])}for(var d=1/0,h=[],f=new Array(i),p=new Array(i),v=new Array(i),g=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)p[m]=m;var b=Qe(p,u.slice(),i,s),x=b.slice();g(p,v);var w=Qe(p,b,s,2),E=Qe(v,x,s,2);w.length<=E.length&&w.length<d?(d=w.length,h=w,g(p,f)):E.length<=w.length&&E.length<d&&(d=E.length,h=E,g(v,f))}for(var k=this.spawn(h.map((function(e){return r[e[0]]}))),_=this.spawn(),C=this.spawn(),S=f[0],P=0;P<f.length;P++){var D=f[P],T=n[P];D===S?_.merge(T):C.merge(T)}var M=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!k.contains(t)&&n.merge(t)}))})),n},B=[M(_),M(C)];return{cut:k,components:B,partition1:_,partition2:C}}ke("At least 2 nodes are required for Karger-Stein algorithm")}},et=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},tt=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},nt=function(e){return{x:e[0],y:e[1]}},rt=function(e,t){return Math.atan2(t,e)-Math.PI/2},it=Math.log2||function(e){return Math.log(e)/Math.log(2)},at=function(e){return e>0?1:e<0?-1:0},ot=function(e,t){return Math.sqrt(st(e,t))},st=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},ut=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},lt=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},ct=function(e,t,n,r){return{x:lt(e.x,t.x,n.x,r),y:lt(e.y,t.y,n.y,r)}},dt=function(e,t,n){return Math.max(e,Math.min(n,t))},ht=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},ft=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},pt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},vt=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=b(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},gt=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},yt=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2<t.x1)&&(!(t.x2<e.x1)&&(!(e.y2<t.y1)&&(!(t.y2<e.y1)&&(!(e.y1>t.y2)&&!(t.y1>e.y2)))))))},mt=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},bt=function(e,t){return mt(e,t.x1,t.y1)&&mt(e,t.x2,t.y2)},xt=function(e,t,n,r,i,a,o){var s,u=jt(i,a),l=i/2,c=a/2,d=r-c-o;if((s=Nt(e,t,n,r,n-l+u-o,d,n+l-u+o,d,!1)).length>0)return s;var h=n+l+o;if((s=Nt(e,t,n,r,h,r-c+u-o,h,r+c-u+o,!1)).length>0)return s;var f=r+c+o;if((s=Nt(e,t,n,r,n-l+u-o,f,n+l-u+o,f,!1)).length>0)return s;var p,v=n-l-o;if((s=Nt(e,t,n,r,v,r-c+u-o,v,r+c-u+o,!1)).length>0)return s;var g=n-l+u,y=r-c+u;if((p=Mt(e,t,n,r,g,y,u+o)).length>0&&p[0]<=g&&p[1]<=y)return[p[0],p[1]];var m=n+l-u,b=r-c+u;if((p=Mt(e,t,n,r,m,b,u+o)).length>0&&p[0]>=m&&p[1]<=b)return[p[0],p[1]];var x=n+l-u,w=r+c-u;if((p=Mt(e,t,n,r,x,w,u+o)).length>0&&p[0]>=x&&p[1]>=w)return[p[0],p[1]];var E=n-l+u,k=r+c-u;return(p=Mt(e,t,n,r,E,k,u+o)).length>0&&p[0]<=E&&p[1]>=k?[p[0],p[1]]:[]},wt=function(e,t,n,r,i,a,o){var s=o,u=Math.min(n,i),l=Math.max(n,i),c=Math.min(r,a),d=Math.max(r,a);return u-s<=e&&e<=l+s&&c-s<=t&&t<=d+s},Et=function(e,t,n,r,i,a,o,s,u){var l=Math.min(n,o,i)-u,c=Math.max(n,o,i)+u,d=Math.min(r,s,a)-u,h=Math.max(r,s,a)+u;return!(e<l||e>c||t<d||t>h)},kt=function(e,t,n,r,i,a,o,s){var u=[];!function(e,t,n,r,i){var a,o,s,u,l,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,d=t/3,a>0?(l=(l=s+Math.sqrt(a))<0?-Math.pow(-l,1/3):Math.pow(l,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-d+l+c,d+=(l+c)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-c+l)/2,i[3]=d,i[5]=-d):(i[5]=i[3]=0,0===a?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*h-d,i[4]=i[2]=-(h+d)):(u=(o=-o)*o*o,u=Math.acos(s/Math.sqrt(u)),h=2*Math.sqrt(o),i[0]=-d+h*Math.cos(u/3),i[2]=-d+h*Math.cos((u+2*Math.PI)/3),i[4]=-d+h*Math.cos((u+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,u);for(var l=[],c=0;c<6;c+=2)Math.abs(u[c+1])<1e-7&&u[c]>=0&&u[c]<=1&&l.push(u[c]);l.push(1),l.push(0);for(var d,h,f,p=-1,v=0;v<l.length;v++)d=Math.pow(1-l[v],2)*n+2*(1-l[v])*l[v]*i+l[v]*l[v]*o,h=Math.pow(1-l[v],2)*r+2*(1-l[v])*l[v]*a+l[v]*l[v]*s,f=Math.pow(d-e,2)+Math.pow(h-t,2),p>=0?f<p&&(p=f):p=f;return p},_t=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],u=s[0]*s[0]+s[1]*s[1],l=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],d=c*c/u;return c<0?l:d>u?(e-i)*(e-i)+(t-a)*(t-a):l-d},Ct=function(e,t,n){for(var r,i,a,o,s=0,u=0;u<n.length/2;u++)if(r=n[2*u],i=n[2*u+1],u+1<n.length/2?(a=n[2*(u+1)],o=n[2*(u+1)+1]):(a=n[2*(u+1-n.length/2)],o=n[2*(u+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},St=function(e,t,n,r,i,a,o,s,u){var l,c=new Array(n.length);null!=s[0]?(l=Math.atan(s[1]/s[0]),s[0]<0?l+=Math.PI/2:l=-l-Math.PI/2):l=s;for(var d,h=Math.cos(-l),f=Math.sin(-l),p=0;p<c.length/2;p++)c[2*p]=a/2*(n[2*p]*h-n[2*p+1]*f),c[2*p+1]=o/2*(n[2*p+1]*h+n[2*p]*f),c[2*p]+=r,c[2*p+1]+=i;if(u>0){var v=Dt(c,-u);d=Pt(v)}else d=c;return Ct(e,t,d)},Pt=function(e){for(var t,n,r,i,a,o,s,u,l=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],u=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],u=e[3]);var d=Nt(t,n,r,i,a,o,s,u,!0);l[2*c]=d[0],l[2*c+1]=d[1]}return l},Dt=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var u=a-r,l=-(i-n),c=Math.sqrt(u*u+l*l),d=u/c,h=l/c;o[4*s]=n+d*t,o[4*s+1]=r+h*t,o[4*s+2]=i+d*t,o[4*s+3]=a+h*t}return o},Tt=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},Mt=function(e,t,n,r,i,a,o){var s=[n-e,r-t],u=[e-i,t-a],l=s[0]*s[0]+s[1]*s[1],c=2*(u[0]*s[0]+u[1]*s[1]),d=c*c-4*l*(u[0]*u[0]+u[1]*u[1]-o*o);if(d<0)return[];var h=(-c+Math.sqrt(d))/(2*l),f=(-c-Math.sqrt(d))/(2*l),p=Math.min(h,f),v=Math.max(h,f),g=[];if(p>=0&&p<=1&&g.push(p),v>=0&&v<=1&&g.push(v),0===g.length)return[];var y=g[0]*s[0]+e,m=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[y,m]:[y,m,g[1]*s[0]+e,g[1]*s[1]+t]:[y,m]},Bt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Nt=function(e,t,n,r,i,a,o,s,u){var l=e-i,c=n-e,d=o-i,h=t-a,f=r-t,p=s-a,v=d*h-p*l,g=c*h-f*l,y=p*c-d*f;if(0!==y){var m=v/y,b=g/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||u?[e+m*c,t+m*f]:[]}return 0===v||0===g?Bt(e,n,o)===o?[o,s]:Bt(e,n,i)===i?[i,a]:Bt(i,o,n)===n?[n,r]:[]:[]},It=function(e,t,n,r,i,a,o,s){var u,l,c,d,h,f,p=[],v=new Array(n.length),g=!0;if(null==a&&(g=!1),g){for(var y=0;y<v.length/2;y++)v[2*y]=n[2*y]*a+r,v[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=Dt(v,-s);l=Pt(m)}else l=v}else l=n;for(var b=0;b<l.length/2;b++)c=l[2*b],d=l[2*b+1],b<l.length/2-1?(h=l[2*(b+1)],f=l[2*(b+1)+1]):(h=l[0],f=l[1]),0!==(u=Nt(e,t,r,i,c,d,h,f)).length&&p.push(u[0],u[1]);return p},Ot=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},zt=function(e,t){var n=At(e,t);return n=Lt(n)},Lt=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,u=0;u<r;u++)t=e[2*u],n=e[2*u+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var l=2/(o-i),c=2/(s-a),d=0;d<r;d++)t=e[2*d]=e[2*d]*l,n=e[2*d+1]=e[2*d+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var h=0;h<r;h++)n=e[2*h+1]=e[2*h+1]+(-1-a);return e},At=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},jt=function(e,t){return Math.min(e/4,t/4,8)},Rt=function(e,t){return Math.min(e/10,t/10,8)},Ft=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},Vt=Me({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),qt={pageRank:function(e){for(var t=Vt(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),u=s.nodes,l=s.edges,c=u.length,d=c*c,h=l.length,f=new Array(d),p=new Array(c),v=(1-n)/c,g=0;g<c;g++){for(var y=0;y<c;y++){f[g*c+y]=0}p[g]=0}for(var m=0;m<h;m++){var b=l[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=u.indexOfId(x),k=u.indexOfId(w),_=a(b);f[k*c+E]+=_,p[E]+=_}}for(var C=1/c+v,S=0;S<c;S++)if(0===p[S])for(var P=0;P<c;P++){f[P*c+S]=C}else for(var D=0;D<c;D++){var T=D*c+S;f[T]=f[T]/p[S]+v}for(var M,B=new Array(c),N=new Array(c),I=0;I<c;I++)B[I]=1;for(var O=0;O<i;O++){for(var z=0;z<c;z++)N[z]=0;for(var L=0;L<c;L++)for(var A=0;A<c;A++){var j=L*c+A;N[L]+=f[j]*B[A]}ut(N),M=B,B=N,N=M;for(var R=0,F=0;F<c;F++){var V=M[F]-B[F];R+=V*V}if(R<r)break}return{rank:function(e){return e=o.collection(e)[0],B[u.indexOf(e)]}}}},Yt=Me({root:null,weight:function(e){return 1},directed:!1,alpha:0}),Xt={degreeCentralityNormalized:function(e){e=Yt(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,u=0;u<r;u++){var l=n[u],c=l.id();e.root=l;var d=this.degreeCentrality(e);o<d.indegree&&(o=d.indegree),s<d.outdegree&&(s=d.outdegree),i[c]=d.indegree,a[c]=d.outdegree}return{indegree:function(e){return 0==o?0:(D(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(D(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var h={},f=0,p=0;p<r;p++){var v=n[p];e.root=v;var g=this.degreeCentrality(e);f<g.degree&&(f=g.degree),h[v.id()]=g.degree}return{degree:function(e){return 0===f?0:(D(e)&&(e=t.filter(e)),h[e.id()]/f)}}},degreeCentrality:function(e){e=Yt(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var u=i.connectedEdges(),l=u.filter((function(e){return e.target().same(i)&&n.has(e)})),c=u.filter((function(e){return e.source().same(i)&&n.has(e)})),d=l.length,h=c.length,f=0,p=0,v=0;v<l.length;v++)f+=a(l[v]);for(var g=0;g<c.length;g++)p+=a(c[g]);return{indegree:Math.pow(d,1-s)*Math.pow(f,s),outdegree:Math.pow(h,1-s)*Math.pow(p,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};Xt.dc=Xt.degreeCentrality,Xt.dcn=Xt.degreeCentralityNormalised=Xt.degreeCentralityNormalized;var Wt=Me({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),Gt={closenessCentralityNormalized:function(e){for(var t=Wt(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,u=this.nodes(),l=this.floydWarshall({weight:r,directed:i}),c=0;c<u.length;c++){for(var d=0,h=u[c],f=0;f<u.length;f++)if(c!==f){var p=l.distance(h,u[f]);d+=n?1/p:p}n||(d=1/d),s<d&&(s=d),o[h.id()]=d}return{closeness:function(e){return 0==s?0:(e=D(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=Wt(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,u=this.nodes(),l=0;l<u.length;l++){var c=u[l];if(!c.same(n)){var d=o.distanceTo(c);s+=a?1/d:d}}return a?s:1/s}};Gt.cc=Gt.closenessCentrality,Gt.ccn=Gt.closenessCentralityNormalised=Gt.closenessCentralityNormalized;var Ht=Me({weight:null,directed:!1}),Ut={betweennessCentrality:function(e){for(var t=Ht(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},u={},l=0,d=function(e,t){u[e]=t,t>l&&(l=t)},h=function(e){return u[e]},f=0;f<o.length;f++){var p=o[f],v=p.id();s[v]=n?p.outgoers().nodes():p.openNeighborhood().nodes(),d(v,0)}for(var g=function(e){for(var t=o[e].id(),n=[],u={},l={},f={},p=new c.default((function(e,t){return f[e]-f[t]})),v=0;v<o.length;v++){var g=o[v].id();u[g]=[],l[g]=0,f[g]=1/0}for(l[t]=1,f[t]=0,p.push(t);!p.empty();){var y=p.pop();if(n.push(y),i)for(var m=0;m<s[y].length;m++){var b=s[y][m],x=a.getElementById(y),w=void 0;w=x.edgesTo(b).length>0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var E=r(w);b=b.id(),f[b]>f[y]+E&&(f[b]=f[y]+E,p.nodes.indexOf(b)<0?p.push(b):p.updateItem(b),l[b]=0,u[b]=[]),f[b]==f[y]+E&&(l[b]=l[b]+l[y],u[b].push(y))}else for(var k=0;k<s[y].length;k++){var _=s[y][k].id();f[_]==1/0&&(p.push(_),f[_]=f[y]+1),f[_]==f[y]+1&&(l[_]=l[_]+l[y],u[_].push(y))}}for(var C={},S=0;S<o.length;S++)C[o[S].id()]=0;for(;n.length>0;){for(var P=n.pop(),D=0;D<u[P].length;D++){var T=u[P][D];C[T]=C[T]+l[T]/l[P]*(1+C[P])}P!=o[e].id()&&d(P,h(P)+C[P])}},y=0;y<o.length;y++)g(y);var m={betweenness:function(e){var t=a.collection(e).id();return h(t)},betweennessNormalized:function(e){if(0==l)return 0;var t=a.collection(e).id();return h(t)/l}};return m.betweennessNormalised=m.betweennessNormalized,m}};Ut.bc=Ut.betweennessCentrality;var Kt=Me({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),Zt=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},$t=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},Qt=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},Jt=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=Qt(e,r,t);return e},en=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return $t(r,t),r},tn=function(e,t,n,r){for(var i=0;i<n;i++){if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!==Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1}return!0},nn=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},rn=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=function(e){return Kt(e)}(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,u=t.length,l=u*u,c=new Array(l),d=0;d<l;d++)c[d]=0;for(var h=0;h<n.length;h++){var f=n[h],p=a[f.source().id()],v=a[f.target().id()],g=Zt(f,i.attributes);c[p*u+v]+=g,c[v*u+p]+=g}!function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n}(c,u,i.multFactor),$t(c,u);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=Jt(c,u,i.expandFactor),c=en(s,u,i.inflateFactor),tn(c,s,l,4)||(y=!0),m++;var b=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,u,t,r);return b=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&nn(e[t],e[n])&&e.splice(n,1);return e}(b),b},an={markovClustering:rn,mcl:rn},on=function(e){return e},sn=function(e,t){return Math.abs(t-e)},un=function(e,t,n){return e+sn(t,n)},ln=function(e,t,n){return e+Math.pow(n-t,2)},cn=function(e){return Math.sqrt(e)},dn=function(e,t,n){return Math.max(e,sn(t,n))},hn=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:on,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},fn={euclidean:function(e,t,n){return e>=2?hn(e,t,n,0,ln,cn):hn(e,t,n,0,un)},squaredEuclidean:function(e,t,n){return hn(e,t,n,0,ln)},manhattan:function(e,t,n){return hn(e,t,n,0,un)},max:function(e,t,n){return hn(e,t,n,-1/0,dn)}};function pn(e,t,n,r,i,a){var o;return o=T(e)?e:fn[e]||fn.euclidean,0===t&&T(e)?o(i,a):o(t,n,r,i,a)}fn["squared-euclidean"]=fn.squaredEuclidean,fn.squaredeuclidean=fn.squaredEuclidean;var vn=Me({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),gn=function(e){return vn(e)},yn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return pn(e,r.length,a,(function(e){return r[e](t)}),o,s)},mn=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,u=0;u<r;u++)i[u]=e.min(n[u]).value,a[u]=e.max(n[u]).value;for(var l=0;l<t;l++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[l]=s}return o},bn=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var u=yn(n,e,t[s],r,i);u<a&&(a=u,o=s)}return o},xn=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},wn=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++){if(Math.abs(e[r][i]-t[r][i])>n)return!1}return!0},En=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},kn=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];En(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},_n=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=yn("manhattan",t[i],e,n,"kMedoids");return r},Cn=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var u=0;u<e.length;u++)r[s][u]=Math.pow(n[s][u],i.m);for(var l=0;l<e.length;l++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var d=0;d<t.length;d++)a+=r[d][l]*i.attributes[c](t[d]),o+=r[d][l];e[l][c]=a/o}},Sn=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,u,l=2/(i.m-1),c=0;c<n.length;c++)for(var d=0;d<r.length;d++){o=0;for(var h=0;h<n.length;h++)s=yn(i.distance,r[d],n[c],i.attributes,"cmeans"),u=yn(i.distance,r[d],n[h],i.attributes,"cmeans"),o+=Math.pow(s/u,l);e[d][c]=1/o}},Pn=function(e){var t,n,r,i,a,o=this.cy(),s=this.nodes(),u=gn(e);i=new Array(s.length);for(var l=0;l<s.length;l++)i[l]=new Array(u.k);r=new Array(s.length);for(var c=0;c<s.length;c++)r[c]=new Array(u.k);for(var d=0;d<s.length;d++){for(var h=0,f=0;f<u.k;f++)r[d][f]=Math.random(),h+=r[d][f];for(var p=0;p<u.k;p++)r[d][p]=r[d][p]/h}n=new Array(u.k);for(var v=0;v<u.k;v++)n[v]=new Array(u.attributes.length);a=new Array(s.length);for(var g=0;g<s.length;g++)a[g]=new Array(u.k);for(var y=!0,m=0;y&&m<u.maxIterations;)y=!1,Cn(n,s,r,a,u),Sn(r,i,n,s,u),wn(r,i,u.sensitivityThreshold)||(y=!0),m++;return t=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var u=0;u<t.length;u++){i=-1/0,a=-1;for(var l=0;l<t[0].length;l++)t[u][l]>i&&(i=t[u][l],a=l);o[a].push(e[u])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o}(s,r,u,o),{clusters:t,degreeOfMembership:r}},Dn={kMeans:function(e){var t,n=this.cy(),r=this.nodes(),i=null,a=gn(e),o=new Array(a.k),s={};a.testMode?"number"==typeof a.testCentroids?(a.testCentroids,t=mn(r,a.k,a.attributes)):t="object"===p(a.testCentroids)?a.testCentroids:mn(r,a.k,a.attributes):t=mn(r,a.k,a.attributes);for(var u,l,c,d=!0,h=0;d&&h<a.maxIterations;){for(var f=0;f<r.length;f++)s[(i=r[f]).id()]=bn(i,t,a.distance,a.attributes,"kMeans");d=!1;for(var v=0;v<a.k;v++){var g=xn(v,r,s);if(0!==g.length){for(var y=a.attributes.length,m=t[v],b=new Array(y),x=new Array(y),w=0;w<y;w++){x[w]=0;for(var E=0;E<g.length;E++)i=g[E],x[w]+=a.attributes[w](i);b[w]=x[w]/g.length,u=b[w],l=m[w],c=a.sensitivityThreshold,Math.abs(l-u)<=c||(d=!0)}t[v]=b,o[v]=n.collection(g)}}h++}return o},kMedoids:function(e){var t,n,r=this.cy(),i=this.nodes(),a=null,o=gn(e),s=new Array(o.k),u={},l=new Array(o.k);o.testMode?"number"==typeof o.testCentroids||(t="object"===p(o.testCentroids)?o.testCentroids:kn(i,o.k)):t=kn(i,o.k);for(var c=!0,d=0;c&&d<o.maxIterations;){for(var h=0;h<i.length;h++)u[(a=i[h]).id()]=bn(a,t,o.distance,o.attributes,"kMedoids");c=!1;for(var f=0;f<t.length;f++){var v=xn(f,i,u);if(0!==v.length){l[f]=_n(t[f],v,o.attributes);for(var g=0;g<v.length;g++)(n=_n(v[g],v,o.attributes))<l[f]&&(l[f]=n,t[f]=v[g],c=!0);s[f]=r.collection(v)}}d++}return s},fuzzyCMeans:Pn,fcm:Pn},Tn=Me({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),Mn={single:"min",complete:"max"},Bn=function(e,t,n,r,i){for(var a,o=0,s=1/0,u=i.attributes,l=function(e,t){return pn(i.distance,u.length,(function(t){return u[t](e)}),(function(e){return u[e](t)}),e,t)},c=0;c<e.length;c++){var d=e[c].key,h=n[d][r[d]];h<s&&(o=d,s=h)}if("threshold"===i.mode&&s>=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var f,p=t[o],v=t[r[o]];f="dendrogram"===i.mode?{left:p,right:v,key:p.key}:{value:p.value.concat(v.value),key:p.key},e[p.index]=f,e.splice(v.index,1),t[p.key]=f;for(var g=0;g<e.length;g++){var y=e[g];p.key===y.key?a=1/0:"min"===i.linkage?(a=n[p.key][y.key],n[p.key][y.key]>n[v.key][y.key]&&(a=n[v.key][y.key])):"max"===i.linkage?(a=n[p.key][y.key],n[p.key][y.key]<n[v.key][y.key]&&(a=n[v.key][y.key])):a="mean"===i.linkage?(n[p.key][y.key]*p.size+n[v.key][y.key]*v.size)/(p.size+v.size):"dendrogram"===i.mode?l(y.value,p.value):l(y.value[0],p.value[0]),n[p.key][y.key]=n[y.key][p.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===p.key||r[b]===v.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return p.key=v.key=p.index=v.index=null,!0},Nn=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},In=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},On=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&Nn(t.left,i),t.right&&Nn(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&Nn(t.left,i),t.right&&Nn(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},zn=function(e){for(var t=this.cy(),n=this.nodes(),r=function(e){var t=Tn(e),n=Mn[t.linkage];return null!=n&&(t.linkage=n),t}(e),i=r.attributes,a=function(e,t){return pn(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],u=[],l=[],c=0;c<n.length;c++){var d={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=d,l[c]=d,s[c]=[],u[c]=0}for(var h=0;h<o.length;h++)for(var f=0;f<=h;f++){var p=void 0;p="dendrogram"===r.mode?h===f?1/0:a(o[h].value,o[f].value):h===f?1/0:a(o[h].value[0],o[f].value[0]),s[h][f]=p,s[f][h]=p,p<s[h][u[h]]&&(u[h]=f)}for(var v,g=Bn(o,l,s,u,r);g;)g=Bn(o,l,s,u,r);return"dendrogram"===r.mode?(v=On(o[0],r.dendrogramDepth,t),r.addDendrogram&&In(o[0],t)):(v=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,v[n]=t.collection(e.value)}))),v},Ln={hierarchicalClustering:zn,hca:zn},An=Me({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),jn=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-pn(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},Rn=function(e,t){var n=null;return n="median"===t?function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n<e.length&&e.splice(n,e.length-n),t>0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var u=e.length,l=Math.floor(u/2);return u%2!=0?e[l+1+a]:(e[l-1+a]+e[l+a])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i}(e):"min"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r}(e):"max"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r}(e):t,n},Fn=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var u=n[s];t[i*e+u]>o&&(a=u,o=t[i*e+u])}a>0&&r.push(a)}for(var l=0;l<n.length;l++)r[n[l]]=n[l];return r},Vn=function(e){for(var t,n,r,i,a,o,s=this.cy(),u=this.nodes(),l=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||ke("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||N(n)||ke("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),An(e)}(e),c={},d=0;d<u.length;d++)c[u[d].id()]=d;n=(t=u.length)*t,r=new Array(n);for(var h=0;h<n;h++)r[h]=-1/0;for(var f=0;f<t;f++)for(var p=0;p<t;p++)f!==p&&(r[f*t+p]=jn(l.distance,u[f],u[p],l.attributes));i=Rn(r,l.preference);for(var v=0;v<t;v++)r[v*t+v]=i;a=new Array(n);for(var g=0;g<n;g++)a[g]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,k=new Array(t*l.minIterations),_=0;_<k.length;_++)k[_]=0;for(E=0;E<l.maxIterations;E++){for(var C=0;C<t;C++){for(var S=-1/0,P=-1/0,D=-1,T=0,M=0;M<t;M++)m[M]=a[C*t+M],(T=o[C*t+M]+r[C*t+M])>=S?(P=S,S=T,D=M):T>P&&(P=T);for(var B=0;B<t;B++)a[C*t+B]=(1-l.damping)*(r[C*t+B]-S)+l.damping*m[B];a[C*t+D]=(1-l.damping)*(r[C*t+D]-P)+l.damping*m[D]}for(var I=0;I<t;I++){for(var O=0,z=0;z<t;z++)m[z]=o[z*t+I],b[z]=Math.max(0,a[z*t+I]),O+=b[z];O-=b[I],b[I]=a[I*t+I],O+=b[I];for(var L=0;L<t;L++)o[L*t+I]=(1-l.damping)*Math.min(0,O-b[L])+l.damping*m[L];o[I*t+I]=(1-l.damping)*(O-b[I])+l.damping*m[I]}for(var A=0,j=0;j<t;j++){var R=o[j*t+j]+a[j*t+j]>0?1:0;k[E%l.minIterations*t+j]=R,A+=R}if(A>0&&(E>=l.minIterations-1||E==l.maxIterations-1)){for(var F=0,V=0;V<t;V++){x[V]=0;for(var q=0;q<l.minIterations;q++)x[V]+=k[q*t+V];0!==x[V]&&x[V]!==l.minIterations||F++}if(F===t)break}}for(var Y=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r}(t,a,o),X=function(e,t,n){for(var r=Fn(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,u=-1/0,l=0;l<a.length;l++){for(var c=0,d=0;d<a.length;d++)c+=t[a[d]*e+a[l]];c>u&&(s=l,u=c)}n[i]=a[s]}return Fn(e,t,n)}(t,r,Y),W={},G=0;G<Y.length;G++)W[Y[G]]=[];for(var H=0;H<u.length;H++){var U=X[c[u[H].id()]];null!=U&&W[U].push(u[H])}for(var K=new Array(Y.length),Z=0;Z<Y.length;Z++)K[Z]=s.collection(W[Y[Z]]);return K},qn={affinityPropagation:Vn,ap:Vn},Yn=Me({root:void 0,directed:!1}),Xn=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(u,l,c){u===c&&(r+=1),t[l]={id:n,low:n++,cutVertex:!1};var d,h,f,p,v=e.getElementById(l).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(l))):v.forEach((function(n){d=n.source().id(),h=n.target().id(),(f=d===l?h:d)!==c&&(p=n.id(),o[p]||(o[p]=!0,a.push({x:l,y:f,edge:n})),f in t?t[l].low=Math.min(t[l].low,t[f].id):(s(u,f,l),t[l].low=Math.min(t[l].low,t[f].low),t[l].id<=t[f].low&&(t[l].cutVertex=!0,function(n,r){for(var o=a.length-1,s=[],u=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);u.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);u.merge(n),t[r].cutVertex?u.merge(i.filter((function(e){return e.isLoop()}))):u.merge(i)}))})),i.push(u)}(l,f))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Wn=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var u=e.spawn();;){var l=i.pop();if(u.merge(e.getElementById(l)),t[l].low=t[s].index,t[l].explored=!0,l===s)break}var c=u.edgesWith(u),d=u.merge(c);r.push(d),a=a.difference(d)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Gn={};[Fe,qe,Ye,We,He,Ke,Je,qt,Xt,Gt,Ut,an,Dn,Ln,qn,{hierholzer:function(e){if(!B(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Yn(e),o=a.root,s=a.directed,u=this,l=!1;o&&(i=D(o)?this.filter(o)[0].id():o[0].id());var c={},d={};s?u.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?l=!0:n=t:1==s?r?l=!0:r=t:(s>1||o>1)&&(l=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else d[t]=[void 0,e.target().id()]})):u.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?l=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):d[t]=[e.source().id(),e.target().id()]}));var h={found:!1,trail:void 0};if(l)return h;if(r&&n)if(s){if(i&&r!=i)return h;i=r}else{if(i&&r!=i&&n!=i)return h;i||(i=r)}else i||(i=u[0].id());var f=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=d[t][0],i!=(r=d[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},p=[],v=[];for(v=f(i);1!=v.length;)0==c[v[0]].length?(p.unshift(u.getElementById(v.shift())),p.unshift(u.getElementById(v.shift()))):v=f(v.shift()).concat(v);for(var g in p.unshift(u.getElementById(v.shift())),c)if(c[g].length)return h;return h.found=!0,h.trail=this.spawn(p,!0),h}},{hopcroftTarjanBiconnected:Xn,htbc:Xn,htb:Xn,hopcroftTarjanBiconnectedComponents:Xn},{tarjanStronglyConnected:Wn,tsc:Wn,tscc:Wn,tarjanStronglyConnectedComponents:Wn}].forEach((function(e){U(Gn,e)}));var Hn=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Hn.prototype={fulfill:function(e){return Un(this,1,"fulfillValue",e)},reject:function(e){return Un(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Hn;return n.onFulfilled.push($n(e,r,"fulfill")),n.onRejected.push($n(t,r,"reject")),Kn(n),r.proxy}};var Un=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Kn(e)),e},Kn=function(e){1===e.state?Zn(e,"onFulfilled",e.fulfillValue):2===e.state&&Zn(e,"onRejected",e.rejectReason)},Zn=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},$n=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}Qn(t,i)}}},Qn=function e(t,n){if(t!==n&&t.proxy!==n){var r;if("object"===p(n)&&null!==n||"function"==typeof n)try{r=n.then}catch(a){return void t.reject(a)}if("function"!=typeof r)t.fulfill(n);else{var i=!1;try{r.call(n,(function(r){i||(i=!0,r===n?t.reject(new TypeError("circular thenable chain")):e(t,r))}),(function(e){i||(i=!0,t.reject(e))}))}catch(a){i||t.reject(a)}}}else t.reject(new TypeError("cannot resolve promise with itself"))};Hn.all=function(e){return new Hn((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Hn.resolve=function(e){return new Hn((function(t,n){t(e)}))},Hn.reject=function(e){return new Hn((function(t,n){n(e)}))};var Jn="undefined"!=typeof Promise?Promise:Hn,er=function(e,t,n){var r=A(e),i=!r,a=this._private=U({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&T(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},tr=er.prototype;U(tr,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),O(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;if("frame"===e)t=n.frames;else t=n.completes;return new Jn((function(e,n){t.push((function(){e()}))}))}}),tr.complete=tr.completed,tr.run=tr.play,tr.running=tr.playing;var nr={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n<t.length;n++){t[n]._private.animation.queue=[]}return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var u=a.style();if(e=U({},e,t),0===Object.keys(e).length)return new er(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=u.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var l=e.renderedPosition,c=a.pan(),d=a.zoom();e.position=tt(l,d,c)}if(o&&null!=e.panBy){var h=e.panBy,f=a.pan();e.pan={x:f.x+h.x,y:f.y+h.y}}var p=e.center||e.centre;if(o&&null!=p){var v=a.getCenterPan(p.eles,e.zoom);null!=v&&(e.pan=v)}if(o&&null!=e.fit){var g=e.fit,y=a.getFitViewport(g.eles||g.boundingBox,g.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&B(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new er(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=U({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,u=0;u<s.length;u++){var l=s[u]._private;t&&(l.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},rr={data:function(e){return e=U({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,a=void 0!==i.length,o=a?i:[i],s=a?i[0]:i;if(D(t)){var u,l=-1!==t.indexOf(".")&&f.default(t);if(r.allowGetting&&void 0===n)return s&&(r.beforeGet(s),u=l&&void 0===s._private[r.field][t]?d.default(s._private[r.field],l):s._private[r.field][t]),u;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var c=m({},t,n);r.beforeSet(i,c);for(var p=0,v=o.length;p<v;p++){var g=o[p];r.canSet(g)&&(l&&void 0===s._private[r.field][t]?h.default(g._private[r.field],l,n):g._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&B(t)){var y,b,x=t,w=Object.keys(x);r.beforeSet(i,x);for(var E=0;E<w.length;E++){if(b=x[y=w[E]],!r.immutableKeys[y])for(var k=0;k<o.length;k++){var _=o[k];r.canSet(_)&&(_._private[r.field][y]=b)}}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&T(t)){var C=t;i.on(r.bindingEvent,C)}else if(r.allowGetting&&void 0===t){var S;return s&&(r.beforeGet(s),S=s._private[r.field]),S}return i}},removeData:function(e){return e=U({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(D(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var u=a[s];if(!R(u))if(!n.immutableKeys[u])for(var l=0,c=i.length;l<c;l++)i[l]._private[n.field][u]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var d=0,h=i.length;d<h;d++)for(var f=i[d]._private[n.field],p=Object.keys(f),v=0;v<p.length;v++){var g=p[v];!n.immutableKeys[g]&&(f[g]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},ir={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new Jn((function(e,t){var i=r.concat([function(t){n.off.apply(n,a),e(t)}]),a=i.concat([]);n.on.apply(n,i)}))}}},ar={};[nr,rr,ir].forEach((function(e){U(ar,e)}));var or={animate:ar.animate(),animation:ar.animation(),animated:ar.animated(),clearQueue:ar.clearQueue(),delay:ar.delay(),delayAnimation:ar.delayAnimation(),stop:ar.stop()},sr={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}M(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ae(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,u=s.classes,l=!1,c=0;c<e.length;c++){var d=e[c];if(!u.has(d)){l=!0;break}}l||(l=u.size!==e.length),l&&(s.classes=i,r.push(o))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){M(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a<o;a++)for(var s=n[a],u=s._private.classes,l=!1,c=0;c<e.length;c++){var d=e[c],h=u.has(d),f=!1;t||r&&!h?(u.add(d),f=!0):(!t||r&&h)&&(u.delete(d),f=!0),!l&&f&&(i.push(s),l=!0)}return i.length>0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};sr.className=sr.classNames=sr.classes;var ur={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:G,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};ur.variable="(?:[\\w-.]|(?:\\\\"+ur.metaChar+"))+",ur.className="(?:[\\w-]|(?:\\\\"+ur.metaChar+"))+",ur.value=ur.string+"|"+ur.number,ur.id=ur.variable,function(){var e,t,n;for(e=ur.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],ur.comparatorOp+="|@"+t;for(e=ur.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(ur.comparatorOp+="|\\!"+t)}();var lr=0,cr=1,dr=2,hr=3,fr=4,pr=5,vr=6,gr=7,yr=8,mr=9,br=10,xr=11,wr=12,Er=13,kr=14,_r=15,Cr=16,Sr=17,Pr=18,Dr=19,Tr=20,Mr=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*H(e,t)}(e.selector,t.selector)})),Br=function(){for(var e,t={},n=0;n<Mr.length;n++)t[(e=Mr[n]).selector]=e.matches;return t}(),Nr="("+Mr.map((function(e){return e.selector})).join("|")+")",Ir=function(e){return e.replace(new RegExp("\\\\("+ur.metaChar+")","g"),(function(e,t){return t}))},Or=function(e,t,n){e[e.length-1]=n},zr=[{name:"group",query:!0,regex:"("+ur.group+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:lr,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:Nr,populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:gr,value:r})}},{name:"id",query:!0,regex:"\\#("+ur.id+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:yr,value:Ir(r)})}},{name:"className",query:!0,regex:"\\.("+ur.className+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:mr,value:Ir(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+ur.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:fr,field:Ir(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+ur.variable+")\\s*("+ur.comparatorOp+")\\s*("+ur.value+")\\s*\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];o=null!=new RegExp("^"+ur.string+"$").exec(o)?o.substring(1,o.length-1):parseFloat(o),t.checks.push({type:hr,field:Ir(i),operator:a,value:o})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+ur.boolOp+")\\s*("+ur.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,2),i=r[0],a=r[1];t.checks.push({type:pr,field:Ir(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+ur.meta+")\\s*("+ur.comparatorOp+")\\s*("+ur.number+")\\s*\\]\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];t.checks.push({type:vr,field:Ir(i),operator:a,value:parseFloat(o)})}},{name:"nextQuery",separator:!0,regex:ur.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]={checks:[]}}},{name:"directedEdge",separator:!0,regex:ur.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:xr,source:r,target:i}),Or(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:wr,source:o,target:s}),Or(e,0,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:ur.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:br,nodes:[r,i]}),Or(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:kr,node:o,neighbor:s}),Or(e,0,a),s}},{name:"child",separator:!0,regex:ur.child,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:_r,parent:i,child:r}),Or(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},u={checks:[]},l={checks:[]},c={checks:[]};return a.checks.push({type:Dr,left:o,right:s,subject:u}),u.checks=t.checks,t.checks=[{type:Tr}],c.checks.push({type:Tr}),s.checks.push({type:Sr,parent:c,child:l}),Or(e,0,a),e.currentSubject=u,e.compoundCount++,l}var d={checks:[]},h={checks:[]},f=[{type:Sr,parent:d,child:h}];return d.checks=t.checks,t.checks=f,e.compoundCount++,h}},{name:"descendant",separator:!0,regex:ur.descendant,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:Cr,ancestor:i,descendant:r}),Or(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},u={checks:[]},l={checks:[]},c={checks:[]};return a.checks.push({type:Dr,left:o,right:s,subject:u}),u.checks=t.checks,t.checks=[{type:Tr}],c.checks.push({type:Tr}),s.checks.push({type:Pr,ancestor:c,descendant:l}),Or(e,0,a),e.currentSubject=u,e.compoundCount++,l}var d={checks:[]},h={checks:[]},f=[{type:Pr,ancestor:d,descendant:h}];return d.checks=t.checks,t.checks=f,e.compoundCount++,h}},{name:"subject",modifier:!0,regex:ur.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Ce("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===xr?n.type=Er:r===br&&(n.type=kr,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];zr.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var Lr=function(e){for(var t,n,r,i=0;i<zr.length;i++){var a=zr[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var u=s[0];e=e.substring(u.length);break}}return{expr:t,match:n,name:r,remaining:e}},Ar={parse:function(e){var t=this,n=t.inputText=e,r=t[0]={checks:[]};for(t.length=1,n=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e}(n);;){var i=Lr(n);if(null==i.expr)return Ce("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var u=0;u<t.length;u++){var l=t[u];if(l.compoundCount>0&&l.edgeCount>0)return Ce("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(l.edgeCount>1)return Ce("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===l.edgeCount&&Ce("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return D(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case lr:var u=e(s);return u.substring(0,u.length-1);case hr:var l=r.field,c=r.operator;return"["+l+n(e(c))+t(s)+"]";case pr:var d=r.operator,h=r.field;return"["+e(d)+h+"]";case fr:return"["+r.field+"]";case vr:var f=r.operator;return"[["+r.field+n(e(f))+t(s)+"]]";case gr:return s;case yr:return"#"+s;case mr:return"."+s;case Sr:case _r:return i(r.parent,a)+n(">")+i(r.child,a);case Pr:case Cr:return i(r.ancestor,a)+" "+i(r.descendant,a);case Dr:var p=i(r.left,a),v=i(r.subject,a),g=i(r.right,a);return p+(p.length>0?" ":"")+v+g;case Tr:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},jr=function(e,t,n){var r,i,a,o=D(e),s=N(e),u=D(n),l=!1,c=!1,d=!1;switch(t.indexOf("!")>=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),l=!0),(o||u||l)&&(i=o||s?""+e:"",a=""+n),l&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":d=!0,r=e>n;break;case">=":d=!0,r=e>=n;break;case"<":d=!0,r=e<n;break;case"<=":d=!0,r=e<=n;break;default:r=!1}return!c||null==e&&d||(r=!r),r},Rr=function(e,t){return e.data(t)},Fr=[],Vr=function(e,t){return e.checks.every((function(e){return Fr[e.type](e,t)}))};Fr[lr]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Fr[gr]=function(e,t){return function(e,t){return Br[e](t)}(e.value,t)},Fr[yr]=function(e,t){var n=e.value;return t.id()===n},Fr[mr]=function(e,t){var n=e.value;return t.hasClass(n)},Fr[vr]=function(e,t){var n=e.field,r=e.operator,i=e.value;return jr(function(e,t){return e[t]()}(t,n),r,i)},Fr[hr]=function(e,t){var n=e.field,r=e.operator,i=e.value;return jr(Rr(t,n),r,i)},Fr[pr]=function(e,t){var n=e.field,r=e.operator;return function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}}(Rr(t,n),r)},Fr[fr]=function(e,t){var n=e.field;return e.operator,void 0!==Rr(t,n)},Fr[br]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return Vr(n,i)&&Vr(r,a)||Vr(r,i)&&Vr(n,a)},Fr[kr]=function(e,t){return Vr(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&Vr(e.neighbor,t)}))},Fr[xr]=function(e,t){return Vr(e.source,t.source())&&Vr(e.target,t.target())},Fr[wr]=function(e,t){return Vr(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&Vr(e.target,t)}))},Fr[Er]=function(e,t){return Vr(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&Vr(e.source,t)}))},Fr[_r]=function(e,t){return Vr(e.child,t)&&Vr(e.parent,t.parent())},Fr[Sr]=function(e,t){return Vr(e.parent,t)&&t.children().some((function(t){return Vr(e.child,t)}))},Fr[Cr]=function(e,t){return Vr(e.descendant,t)&&t.ancestors().some((function(t){return Vr(e.ancestor,t)}))},Fr[Pr]=function(e,t){return Vr(e.ancestor,t)&&t.descendants().some((function(t){return Vr(e.descendant,t)}))},Fr[Dr]=function(e,t){return Vr(e.subject,t)&&Vr(e.left,t)&&Vr(e.right,t)},Fr[Tr]=function(){return!0},Fr[cr]=function(e,t){return e.value.has(t)},Fr[dr]=function(e,t){return(0,e.value)(t)};var qr={matches:function(e){for(var t=0;t<this.length;t++){var n=this[t];if(Vr(n,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===yr)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(Vr(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Yr=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||D(e)&&e.match(/^\s*$/)||(O(e)?this.addQuery({checks:[{type:cr,value:e.collection()}]}):T(e)?this.addQuery({checks:[{type:dr,value:e}]}):D(e)?this.parse(e)||(this.invalid=!0):ke("A selector must be created from a string; found "))},Xr=Yr.prototype;[Ar,qr].forEach((function(e){return U(Xr,e)})),Xr.text=function(){return this.inputText},Xr.size=function(){return this.length},Xr.eq=function(e){return this[e]},Xr.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Xr.addQuery=function(e){this[this.length++]=e},Xr.selector=Xr.toString;var Wr={allAre:function(e){var t=new Yr(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Yr(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++){if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0}return!1},every:function(e,t){for(var n=0;n<this.length;n++){if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1}return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};Wr.allAreNeighbours=Wr.allAreNeighbors,Wr.has=Wr.contains,Wr.equal=Wr.equals=Wr.same;var Gr,Hr,Ur=function(e,t){return function(n,r,i,a){var o,s=n,u=this;if(null==s?o="":O(s)&&1===s.length&&(o=s.id()),1===u.length&&o){var l=u[0]._private,c=l.traversalCache=l.traversalCache||{},d=c[t]=c[t]||[],h=he(o),f=d[h];return f||(d[h]=e.call(u,n,r,i,a))}return e.call(u,n,r,i,a)}},Kr={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Ur((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];return function e(n){for(var r=0;r<n.length;r++){var i=n[r];t.push(i),i.children().nonempty()&&e(i.children())}}(this.children()),this.spawn(t,!0).filter(e)}};function Zr(e,t,n,r){for(var i=[],a=new Ae,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var u=e[s];n?i.push(u):o&&r(i,a,u)}for(;i.length>0;){var l=i.shift();t(l),a.add(l.id()),o&&r(i,a,l)}return e}function $r(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function Qr(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function Jr(e,t,n){Qr(e,t,n),$r(e,t,n)}Kr.forEachDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Zr(this,e,t,$r)},Kr.forEachUp=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Zr(this,e,t,Qr)},Kr.forEachUpAndDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Zr(this,e,t,Jr)},Kr.ancestors=Kr.parents,(Gr=Hr={data:ar.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:ar.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ar.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ar.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ar.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ar.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Gr.data,Gr.removeAttr=Gr.removeData;var ei,ti,ni=Hr,ri={};function ii(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function ai(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}U(ri,{degree:ii((function(e,t){return t.source().same(t.target())?2:1})),indegree:ii((function(e,t){return t.target().same(e)?1:0})),outdegree:ii((function(e,t){return t.source().same(e)?1:0}))}),U(ri,{minDegree:ai("degree",(function(e,t){return e<t})),maxDegree:ai("degree",(function(e,t){return e>t})),minIndegree:ai("indegree",(function(e,t){return e<t})),maxIndegree:ai("indegree",(function(e,t){return e>t})),minOutdegree:ai("outdegree",(function(e,t){return e<t})),maxOutdegree:ai("outdegree",(function(e,t){return e>t}))}),U(ri,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var oi=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},si={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){oi(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};ei=ti={position:ar.data(si),silentPosition:ar.data(U({},si,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){oi(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(B(e))t?this.silentPosition(e):this.position(e);else if(T(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a,o=this[i];(a=n(o,i))&&(t?o.silentPosition(a):o.position(a))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(B(e)?(r={x:N(e.x)?e.x:0,y:N(e.y)?e.y:0},n=t):D(e)&&N(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),u={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(u):o.position(u)}}i.endBatch()}return this},silentShift:function(e,t){return B(e)?this.shift(e,!0):D(e)&&N(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=B(e)?e:void 0,s=void 0!==o||void 0!==t&&D(e);if(n&&n.isNode()){if(!s){var u=n.position();return o=et(u,i,a),void 0===e?o:o[e]}for(var l=0;l<this.length;l++){var c=this[l];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(tt(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=B(e)?e:void 0,a=void 0!==i||void 0!==t&&D(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),u=o?n.parent():null,l=u&&u.length>0,c=l;l&&(u=u[0]);var d=c?u.position():{x:0,y:0};return i={x:s.x-d.x,y:s.y-d.y},void 0===e?i:i[e]}for(var h=0;h<this.length;h++){var f=this[h],p=o?f.parent():null,v=p&&p.length>0,g=v;v&&(p=p[0]);var y=g?p.position():{x:0,y:0};void 0!==t?f.position(e,t+y[e]):void 0!==i&&f.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}},ei.modelPosition=ei.point=ei.position,ei.modelPositions=ei.points=ei.positions,ei.renderedPoint=ei.renderedPosition,ei.relativePoint=ei.relativePosition;var ui,li,ci=ti;ui=li={},li.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,u=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:u,w:o-a,h:u-s}},li.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},li.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var u=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(u=100*u/i.width.val);var l=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(l=100*l/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var d=y(i.width.val-a.w,s,u),h=d.biasDiff,f=d.biasComplementDiff,p=y(i.height.val-a.h,l,c),v=p.biasDiff,g=p.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-h+a.x1+a.x2+f)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-v+a.y1+a.y2+g)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var di=function(e){return e===1/0||e===-1/0?0:e},hi=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},fi=function(e,t){return null==t?e:hi(e,t.x1,t.y1,t.x2,t.y2)},pi=function(e,t,n){return Ie(e,t,n)},vi=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var u=a.arrowBounds=a.arrowBounds||{},l=u[n]=u[n]||{};l.x1=r-s,l.y1=i-s,l.x2=r+s,l.y2=i+s,l.w=l.x2-l.x1,l.h=l.y2-l.y1,pt(l,1),hi(e,l.x1,l.y1,l.x2,l.y2)}}},gi=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,u,l,c=t.pstyle("text-halign"),d=t.pstyle("text-valign"),h=pi(a,"labelWidth",n),f=pi(a,"labelHeight",n),p=pi(a,"labelX",n),v=pi(a,"labelY",n),g=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,k=f,_=h,C=_/2,S=k/2;if(m)o=p-C,s=p+C,u=v-S,l=v+S;else{switch(c.value){case"left":o=p-_,s=p;break;case"center":o=p-C,s=p+C;break;case"right":o=p,s=p+_}switch(d.value){case"top":u=v-k,l=v;break;case"center":u=v-S,l=v+S;break;case"bottom":u=v,l=v+k}}o+=g-Math.max(x,w)-E-2,s+=g+Math.max(x,w)+E+2,u+=y-Math.max(x,w)-E-2,l+=y+Math.max(x,w)+E+2;var P=n||"main",D=i.labelBounds,T=D[P]=D[P]||{};T.x1=o,T.y1=u,T.x2=s,T.y2=l,T.w=s-o,T.h=l-u;var M=m&&"autorotate"===b.strValue,B=null!=b.pfValue&&0!==b.pfValue;if(M||B){var N=M?pi(i.rstyle,"labelAngle",n):b.pfValue,I=Math.cos(N),O=Math.sin(N),z=(o+s)/2,L=(u+l)/2;if(!m){switch(c.value){case"left":z=s;break;case"right":z=o}switch(d.value){case"top":L=l;break;case"bottom":L=u}}var A=function(e,t){return{x:(e-=z)*I-(t-=L)*O+z,y:e*O+t*I+L}},j=A(o,u),R=A(o,l),F=A(s,u),V=A(s,l);o=Math.min(j.x,R.x,F.x,V.x),s=Math.max(j.x,R.x,F.x,V.x),u=Math.min(j.y,R.y,F.y,V.y),l=Math.max(j.y,R.y,F.y,V.y)}var q=P+"Rot",Y=D[q]=D[q]||{};Y.x1=o,Y.y1=u,Y.x2=s,Y.y2=l,Y.w=s-o,Y.h=l-u,hi(e,o,u,s,l),hi(i.labelBounds.all,o,u,s,l)}return e}},yi=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays)},mi=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return function(e,t){var n={value:0,done:!1},r=0,i=e.length;return se({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)}([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},bi=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?wi:yi(t))===wi,o=mi(e),s=r.bbCachePosKey===o,u=t.useCache&&s,l=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!u||l(e)||i&&l(e.source())||l(e.target())?(s||e.recalculateRenderedStyle(u),n=function(e,t){var n,r,i,a,o,s,u,l=e._private.cy,c=l.styleEnabled(),d=l.headless(),h=ht(),f=e._private,p=e.isNode(),v=e.isEdge(),g=f.rstyle,y=p&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!v||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),k=0;if(c&&(k=e.pstyle("width").pfValue/2),p&&t.includeNodes){var _=e.position();o=_.x,s=_.y;var C=e.outerWidth()/2,S=e.outerHeight()/2;hi(h,n=o-C,i=s-S,r=o+C,a=s+S)}else if(v&&t.includeEdges)if(c&&!d){var P=e.pstyle("curve-style").strValue;if(n=Math.min(g.srcX,g.midX,g.tgtX),r=Math.max(g.srcX,g.midX,g.tgtX),i=Math.min(g.srcY,g.midY,g.tgtY),a=Math.max(g.srcY,g.midY,g.tgtY),hi(h,n-=k,i-=k,r+=k,a+=k),"haystack"===P){var D=g.haystackPts;if(D&&2===D.length){if(n=D[0].x,i=D[0].y,n>(r=D[1].x)){var T=n;n=r,r=T}if(i>(a=D[1].y)){var M=i;i=a,a=M}hi(h,n-k,i-k,r+k,a+k)}}else if("bezier"===P||"unbundled-bezier"===P||"segments"===P||"taxi"===P){var B;switch(P){case"bezier":case"unbundled-bezier":B=g.bezierPts;break;case"segments":case"taxi":B=g.linePts}if(null!=B)for(var N=0;N<B.length;N++){var I=B[N];n=I.x-k,r=I.x+k,i=I.y-k,a=I.y+k,hi(h,n,i,r,a)}}}else{var O=e.source().position(),z=e.target().position();if((n=O.x)>(r=z.x)){var L=n;n=r,r=L}if((i=O.y)>(a=z.y)){var A=i;i=a,a=A}hi(h,n-=k,i-=k,r+=k,a+=k)}if(c&&t.includeEdges&&v&&(vi(h,e,"mid-source"),vi(h,e,"mid-target"),vi(h,e,"source"),vi(h,e,"target")),c&&"yes"===e.pstyle("ghost").value){var j=e.pstyle("ghost-offset-x").pfValue,R=e.pstyle("ghost-offset-y").pfValue;hi(h,h.x1+j,h.y1+R,h.x2+j,h.y2+R)}var F=f.bodyBounds=f.bodyBounds||{};gt(F,h),vt(F,y),pt(F,1),c&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,hi(h,n-E,i-E,r+E,a+E));var V=f.overlayBounds=f.overlayBounds||{};gt(V,h),vt(V,y),pt(V,1);var q=f.labelBounds=f.labelBounds||{};null!=q.all?((u=q.all).x1=1/0,u.y1=1/0,u.x2=-1/0,u.y2=-1/0,u.w=0,u.h=0):q.all=ht(),c&&t.includeLabels&&(t.includeMainLabels&&gi(h,e,null),v&&(t.includeSourceLabels&&gi(h,e,"source"),t.includeTargetLabels&&gi(h,e,"target")))}return h.x1=di(h.x1),h.y1=di(h.y1),h.x2=di(h.x2),h.y2=di(h.y2),h.w=di(h.x2-h.x1),h.h=di(h.y2-h.y1),h.w>0&&h.h>0&&b&&(vt(h,y),pt(h,1)),h}(e,xi),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=ht(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?fi(n,r.overlayBounds):fi(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?fi(n,r.labelBounds.all):(t.includeMainLabels&&fi(n,r.labelBounds.mainRot),t.includeSourceLabels&&fi(n,r.labelBounds.sourceRot),t.includeTargetLabels&&fi(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},xi={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},wi=yi(xi),Ei=Me(xi);li.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=ht();var n=Ei(e=e||xi),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=mi(a),u=o.bbCachePosKey===s,l=n.useCache&&u&&!o.styleDirty;a.recalculateRenderedStyle(l)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var d=r[c];fi(t,bi(d,n))}}else e=void 0===e?xi:Ei(e),t=bi(this[0],e);return t.x1=di(t.x1),t.y1=di(t.y1),t.x2=di(t.x2),t.y2=di(t.y2),t.w=di(t.x2-t.x1),t.h=di(t.y2-t.y1),t},li.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},li.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),B(e)){var a=e;e=function(){return a}}n.startBatch(),t.forEach((function(t,n){return t._private.bbAtOldPos=e(t,n)})).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var o=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}}(this.boundingBox({useCache:!1}));return t.silentPositions((function(e){return e._private.bbAtOldPos})),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),o},ui.boundingbox=ui.bb=ui.boundingBox,ui.renderedBoundingbox=ui.renderedBoundingBox;var ki,_i,Ci=li;ki=_i={};var Si=function(e){e.uppercaseName=W(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=W(e.outerName),ki[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},ki["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},ki["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},ki["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};Si({name:"width"}),Si({name:"height"}),_i.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},_i.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},_i.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var Pi=_i,Di={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Ti=Object.keys(Di).reduce((function(e,t){var n=Di[t],r=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)}(t);return e[t]=function(){return function(e,t){if(e.isEdge())return t(e)}(this,n.get)},n.mult?e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return et(e,i,r)}))}}(this,n.get)}:e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy();return et(t(e),n.zoom(),n.pan())}}(this,n.get)},e}),{}),Mi=U({},ci,Ci,Pi,Ti),Bi=function(e,t){this.recycle(e,t)};function Ni(){return!1}function Ii(){return!0}Bi.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ni,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Ii:Ni):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Ii;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Ii;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Ii,this.stopPropagation()},isDefaultPrevented:Ni,isPropagationStopped:Ni,isImmediatePropagationStopped:Ni};var Oi=/^([^.]+)(\.(?:[^.]+))?$/,zi={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Li=Object.keys(zi),Ai={};function ji(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ai,t=arguments.length>1?arguments[1]:void 0,n=0;n<Li.length;n++){var r=Li[n];this[r]=e[r]||zi[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Ri=ji.prototype,Fi=function(e,t,n,r,i,a,o){T(r)&&(i=r,r=null),o&&(a=null==a?o:U({},a,o));for(var s=M(n)?n:n.split(/\s+/),u=0;u<s.length;u++){var l=s[u];if(!R(l)){var c=l.match(Oi);if(c)if(!1===t(e,l,c[1],c[2]?c[2]:null,r,i,a))break}}},Vi=function(e,t){return e.addEventFields(e.context,t),new Bi(t.type,t)},qi=function(e,t,n){if("event"!==P(n))if(B(n))t(e,Vi(e,n));else for(var r=M(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!R(a)){var o=a.match(Oi);if(o){var s=o[1],u=o[2]?o[2]:null;t(e,Vi(e,{type:s,namespace:u,target:e.context}))}}}else t(e,n)};Ri.on=Ri.addListener=function(e,t,n,r,i){return Fi(this,(function(e,t,n,r,i,a,o){T(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Ri.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Ri.removeListener=Ri.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=this.listeners.slice());for(var a=this.listeners,o=function(o){var s=a[o];Fi(i,(function(t,n,r,i,u,l){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!u||t.qualifierCompare(s.qualifier,u))&&(!l||s.callback===l))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Ri.removeAllListeners=function(){return this.removeListener("*")},Ri.emit=Ri.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,M(t)||(t=[t]),qi(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||".*"===i.namespace)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}}(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),u=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===u&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Yi={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&z(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},Xi=function(e){return D(e)?new Yr(e):e},Wi={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new ji(Yi,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n)}return this},removeListener:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().removeListener(e,r,n)}return this},removeAllListeners:function(){for(var e=0;e<this.length;e++){this[e].emitter().removeAllListeners()}return this},one:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().one(e,r,n)}return this},once:function(e,t,n){for(var r=Xi(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})}},emit:function(e,t){for(var n=0;n<this.length;n++){this[n].emitter().emit(e,t)}return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};ar.eventAliasesOn(Wi);var Gi={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(D(e)||O(e))return new Yr(e).filter(this);if(T(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){D(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(D(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=e,i=this.length<e.length,a=i?this:r,o=i?r:this,s=0;s<a.length;s++){var u=a[s];o.has(u)&&n.push(u)}return n},xor:function(e){var t=this._private.cy;D(e)&&(e=t.$(e));var n=this.spawn(),r=e,i=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return i(this,r),i(r,this),n},diff:function(e){var t=this._private.cy;D(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=e,o=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return o(this,a,n),o(a,this,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(D(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&D(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var u=this.length++;this[u]=o,i.set(s,{ele:o,index:u})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&D(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},Hi=Gi;Hi.u=Hi["|"]=Hi["+"]=Hi.union=Hi.or=Hi.add,Hi["\\"]=Hi["!"]=Hi["-"]=Hi.difference=Hi.relativeComplement=Hi.subtract=Hi.not,Hi.n=Hi["&"]=Hi["."]=Hi.and=Hi.intersection=Hi.intersect,Hi["^"]=Hi["(+)"]=Hi["(-)"]=Hi.symmetricDifference=Hi.symdiff=Hi.xor,Hi.fnFilter=Hi.filterFn=Hi.stdFilter=Hi.filter,Hi.complement=Hi.abscomp=Hi.absoluteComplement;var Ui=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?me:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},Ki={forEach:function(e,t){if(T(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!T(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Ui)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:me-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};Ki.each=Ki.forEach;var Zi;Zi="undefined",("undefined"==typeof Symbol?"undefined":p(Symbol))!=Zi&&p(Symbol.iterator)!=Zi&&(Ki[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return m({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var $i=Me({nodeDimensionsIncludeLabels:!1}),Qi={layoutDimensions:function(e){var t;if(e=$i(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=V(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var u=t.spacingFactor&&1!==t.spacingFactor,l=function(){if(!u)return null;for(var e=ht(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);ft(e,i.x,i.y)}return e}(),c=V((function(e,n){var r=s(e,n);u&&(r=function(e,t,n){var r=t.x1+t.w/2,i=t.y1+t.h/2;return{x:r+(n.x-r)*e,y:i+(n.y-i)*e}}(Math.abs(t.spacingFactor),l,r));return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var d=0;d<r.length;d++){var h=r[d],f=c(h,d);if(null==t.animateFilter||t.animateFilter(h,d)){var p=h.animation({position:f,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(p)}else h.position(f)}if(t.fit){var v=i.animation({fit:{boundingBox:a.boundingBoxAt(c),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}else if(void 0!==t.zoom&&void 0!==t.pan){var g=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(g)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),Jn.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(c),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(U({},e,{eles:this}))}};function Ji(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function ea(e,t){return e=he(e),function(n){return Ji(e,t,n)}}function ta(e,t){e=he(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return Ji(e,n,t)}}Qi.createLayout=Qi.makeLayout=Qi.layout;var na={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)}));return this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=n.style();if(B(e)){var i=e;r.applyBypass(this,i,false),this.emitAndNotify("style")}else if(D(e)){if(void 0===t){var a=this[0];return a?r.getStylePropertyValue(a,e):void 0}r.applyBypass(this,e,t,false),this.emitAndNotify("style")}else if(void 0===e){var o=this[0];return o?r.getRawStyle(o):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style(),r=this;if(void 0===e)for(var i=0;i<r.length;i++){var a=r[i];n.removeAllBypasses(a,false)}else{e=e.split(/\s+/);for(var o=0;o<r.length;o++){var s=r[o];n.removeBypasses(s,e,false)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++){i*=a[o].pstyle("opacity").value}return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function ra(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++){if(!t(n[r]))return!1}return!0}function ia(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||ra(i,r);var s=o.source,u=o.target;return n(s)&&(!a||ra(s,n))&&(s===u||n(u)&&(!a||ra(u,n)))}}}var aa=ea("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));na.takesUpSpace=ta("takesUpSpace",ia({ok:aa}));var oa=ea("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&aa(e)})),sa=ea("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&aa(e)}));na.interactive=ta("interactive",ia({ok:oa,parentOk:sa,edgeOkViaNode:aa})),na.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var ua=ea("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&aa(e)})),la=aa;na.visible=ta("visible",ia({ok:ua,edgeOkViaNode:la})),na.hidden=function(){var e=this[0];if(e)return!e.visible()},na.isBundledBezier=ta("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&(!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace())})),na.bypass=na.css=na.style,na.renderedCss=na.renderedStyle,na.removeBypass=na.removeCss=na.removeStyle,na.pstyle=na.parsedStyle;var ca={};function da(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&T(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&M(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var u=this[s],l=!e.ableField||u._private[e.ableField],c=u._private[e.field]!=e.value;if(e.overrideAble){var d=e.overrideAble(u);if(void 0!==d&&(l=d,!d))return this}l&&(u._private[e.field]=e.value,c&&n.push(u))}var h=this.spawn(n);h.updateStyle(),h.emit(e.event),o&&h.emit(o)}return this}}function ha(e){ca[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},ca[e.on]=da({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),ca[e.off]=da({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}ha({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),ha({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),ha({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),ha({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),ca.deselect=ca.unselect,ca.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},ha({field:"active",on:"activate",off:"unactivate"}),ha({field:"pannable",on:"panify",off:"unpanify"}),ca.inactive=function(){var e=this[0];if(e)return!e._private.active};var fa={},pa=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode()){for(var a=!1,o=i.connectedEdges(),s=0;s<o.length;s++){var u=o[s],l=u.source(),c=u.target();if(e.noIncomingEdges&&c===i&&l!==i||e.noOutgoingEdges&&l===i&&c!==i){a=!0;break}}a||n.push(i)}}return this.spawn(n,!0).filter(t)}},va=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode())for(var a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],u=s.source(),l=s.target();e.outgoing&&u===i?(n.push(s),n.push(l)):e.incoming&&l===i&&(n.push(s),n.push(u))}}return this.spawn(n,!0).filter(t)}},ga=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var u=a[s],l=u.id();i[l]||(i[l]=!0,r.push(u),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function ya(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function ma(e){return function(t){var n=[],r=this._private.cy,i=e||{};D(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var u=o[s],l=u._private.data,c=this.hasElementWithId(l.source)&&t.hasElementWithId(l.target),d=t.hasElementWithId(l.source)&&this.hasElementWithId(l.target);if(c||d){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!d)continue}n.push(u)}}return this.spawn(n,!0)}}function ba(e){return e=U({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,u=s._private.data.id,l=o.data.target,c=s._private.edges,d=0;d<c.length;d++){var h=c[d],f=h._private.data,p=f.target,v=f.source,g=p===l&&v===u,y=u===p&&l===v;(i.codirected&&g||!i.codirected&&(g||y))&&n.push(h)}return this.spawn(n,!0).filter(t)}}fa.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},U(fa,{roots:pa({noIncomingEdges:!0}),leaves:pa({noOutgoingEdges:!0}),outgoers:Ur(va({outgoing:!0}),"outgoers"),successors:ga({outgoing:!0}),incomers:Ur(va({incoming:!0}),"incomers"),predecessors:ga({incoming:!0})}),U(fa,{neighborhood:Ur((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],u=s.source(),l=s.target(),c=i===u?l:u;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),fa.neighbourhood=fa.neighborhood,fa.closedNeighbourhood=fa.closedNeighborhood,fa.openNeighbourhood=fa.openNeighborhood,U(fa,{source:Ur((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Ur((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:ya({attr:"source"}),targets:ya({attr:"target"})}),U(fa,{edgesWith:Ur(ma(),"edgesWith"),edgesTo:Ur(ma({thisIsSrc:!0}),"edgesTo")}),U(fa,{connectedEdges:Ur((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];if(r.isNode())for(var i=r._private.edges,a=0;a<i.length;a++){var o=i[a];t.push(o)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Ur((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];r.isEdge()&&(t.push(r.source()[0]),t.push(r.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Ur(ba(),"parallelEdges"),codirectedEdges:Ur(ba({codirected:!0}),"codirectedEdges")}),U(fa,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),fa.componentsOf=fa.components;var xa=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new ze,a=!1;if(t){if(t.length>0&&B(t[0])&&!z(t[0])){a=!0;for(var o=[],s=new Ae,u=0,l=t.length;u<l;u++){var c=t[u];null==c.data&&(c.data={});var d=c.data;if(null==d.id)d.id=Pe();else if(e.hasElementWithId(d.id)||s.has(d.id))continue;var h=new je(e,c,!1);o.push(h),s.add(d.id)}t=o}}else t=[];this.length=0;for(var f=0,p=t.length;f<p;f++){var v=t[f][0];if(null!=v){var g=v._private.data.id;n&&i.has(g)||(n&&i.set(g,{index:this.length,ele:v}),this[this.length]=v,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new ze,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else ke("A collection must have a reference to the core")},wa=je.prototype=xa.prototype=Object.create(Array.prototype);wa.instanceString=function(){return"collection"},wa.spawn=function(e,t){return new xa(this.cy(),e,t)},wa.spawnSelf=function(){return this.spawn(this)},wa.cy=function(){return this._private.cy},wa.renderer=function(){return this._private.cy.renderer()},wa.element=function(){return this[0]},wa.collection=function(){return L(this)?this:new xa(this._private.cy,[this])},wa.unique=function(){return new xa(this._private.cy,this,!0)},wa.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},wa.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new xa(t)},wa.$id=wa.getElementById,wa.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},wa.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},wa.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},wa.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(B(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,u=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=u&&u!=i.target&&(o.target=""+u,a=!0),a&&(t=t.move(o))}else{var l="parent"in e.data,c=e.data.parent;!l||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var d=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return d("removed","remove","restore"),d("selected","select","unselect"),d("selectable","selectify","unselectify"),d("locked","lock","unlock"),d("grabbable","grabify","ungrabify"),d("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var h={data:Se(r.data),position:Se(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};h.classes="";var f=0;return r.classes.forEach((function(e){return h.classes+=0==f++?e:" "+e})),h}}},wa.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},wa.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new je(e,r,!1);t.push(i)}return new xa(e,t)},wa.copy=wa.clone,wa.restore=function(){for(var e,t,n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],u=[],l=0,c=i.length;l<c;l++){var d=i[l];r&&!d.removed()||(d.isNode()?s.push(d):u.push(d))}e=s.concat(u);var h=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var f=e[t],p=f._private,v=p.data;if(f.clearTraversalCache(),r||p.removed)if(void 0===v.id)v.id=Pe();else if(N(v.id))v.id=""+v.id;else{if(R(v.id)||!D(v.id)){ke("Can not create element with invalid string ID `"+v.id+"`"),h();continue}if(a.hasElementWithId(v.id)){ke("Can not create second element with ID `"+v.id+"`"),h();continue}}else;var g=v.id;if(f.isNode()){var y=p.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(f.isEdge()){for(var m=f,b=["source","target"],x=b.length,w=!1,E=0;E<x;E++){var k=b[E],_=v[k];N(_)&&(_=v[k]=""+v[k]),null==_||""===_?(ke("Can not create edge `"+g+"` with unspecified "+k),w=!0):a.hasElementWithId(_)||(ke("Can not create edge `"+g+"` with nonexistant "+k+" `"+_+"`"),w=!0)}if(w){h();continue}var C=a.getElementById(v.source),S=a.getElementById(v.target);C.same(S)?C._private.edges.push(m):(C._private.edges.push(m),S._private.edges.push(m)),m._private.source=C,m._private.target=S}p.map=new ze,p.map.set(g,{ele:f,index:0}),p.removed=!1,r&&a.addToPool(f)}for(var P=0;P<s.length;P++){var T=s[P],M=T._private.data;N(M.parent)&&(M.parent=""+M.parent);var B=M.parent,I=null!=B;if(I||T._private.parent){var O=T._private.parent?a.collection().merge(T._private.parent):a.getElementById(B);if(O.empty())M.parent=void 0;else if(O[0].removed())Ce("Node added with missing parent, reference to parent removed"),M.parent=void 0,T._private.parent=null;else{for(var z=!1,L=O;!L.empty();){if(T.same(L)){z=!0,M.parent=void 0;break}L=L.parent()}z||(O[0]._private.children.push(T),T._private.parent=O[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var A=e.length===i.length?i:new xa(a,e),j=0;j<A.length;j++){var F=A[j];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(A).merge(A.connectedNodes()).merge(A.parent()):A).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?A.emitAndNotify("add"):r&&A.emit("add")}return i},wa.removed=function(){var e=this[0];return e&&e._private.removed},wa.inside=function(){var e=this[0];return e&&!e._private.removed},wa.remove=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){for(var t=e._private.edges,n=0;n<t.length;n++)u(t[n])}function s(e){for(var t=e._private.children,n=0;n<t.length;n++)u(t[n])}function u(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),o(e),s(e)):r.unshift(e))}for(var l=0,c=n.length;l<c;l++){var d=n[l];u(d)}function h(e,t){var n=e._private.edges;Be(n,t),e.clearTraversalCache()}function f(e){e.clearTraversalCache()}var p=[];function v(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Be(n,t),t._private.parent=null,p.ids[r]||(p.ids[r]=!0,p.push(e))}p.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var g=0;g<r.length;g++){var y=r[g];if(y.isEdge()){var m=y.source()[0],b=y.target()[0];h(m,y),h(b,y);for(var x=y.parallelEdges(),w=0;w<x.length;w++){var E=x[w];f(E),E.isBundledBezier()&&E.dirtyBoundingBoxCache()}}else{var k=y.parent();0!==k.length&&v(k,y)}t&&(y._private.removed=!0)}var _=a._private.elements;a._private.hasCompoundNodes=!1;for(var C=0;C<_.length;C++){var S=_[C];if(S.isParent()){a._private.hasCompoundNodes=!0;break}}var P=new xa(this.cy(),r);P.size()>0&&(e?P.emitAndNotify("remove"):t&&P.emit("remove"));for(var D=0;D<p.length;D++){var T=p[D];t&&T.removed()||T.updateStyle()}return P},wa.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),u=null!=o&&t.hasElementWithId(o),l=null!=s&&t.hasElementWithId(s);(u||l)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(u&&(a.source=o),l&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var d=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=d)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Gn,or,sr,Wr,Kr,ni,ri,Mi,Wi,Gi,{isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},Ki,Qi,na,ca,fa].forEach((function(e){U(wa,e)}));var Ea={add:function(e){var t,n=this;if(O(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new xa(n,i)}}else if(M(e)){t=new xa(n,e)}else if(B(e)&&(M(e.nodes)||M(e.edges))){for(var s=e,u=[],l=["nodes","edges"],c=0,d=l.length;c<d;c++){var h=l[c],f=s[h];if(M(f))for(var p=0,v=f.length;p<v;p++){var g=U({group:h},f[p]);u.push(g)}}t=new xa(n,u)}else{t=new je(n,e).collection()}return t},remove:function(e){if(O(e));else if(D(e)){var t=e;e=this.$(t)}return e.remove()}};var ka=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),u=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),l=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+u*r,n.v=n.v+l*r,n}return function e(t,r,i){var a,o,s,u={x:-1,v:0,tension:null,friction:null},l=[0],c=0,d=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,u.tension=t,u.friction=r,o=(a=null!==i)?(c=e(t,r))/i*.016:.016;s=n(s||u,o),l.push(1+s.x),c+=16,Math.abs(s.x)>d&&Math.abs(s.v)>d;);return a?function(e){return l[e*(l.length-1)|0]}:c}}(),_a=function(e,t,n,r){var i=function(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,u=11,l=1/(u-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var d=0;d<4;++d)if("number"!=typeof arguments[d]||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var h=c?new Float32Array(u):new Array(u);function f(e,t){return 1-3*t+3*e}function p(e,t){return 3*t-6*e}function v(e){return 3*e}function g(e,t,n){return((f(t,n)*e+p(t,n))*e+v(t))*e}function y(e,t,n){return 3*f(t,n)*e*e+2*p(t,n)*e+v(t)}function m(t,r){for(var a=0;a<i;++a){var o=y(r,e,n);if(0===o)return r;r-=(g(r,e,n)-t)/o}return r}function b(){for(var t=0;t<u;++t)h[t]=g(t*l,e,n)}function x(t,r,i){var a,u,l=0;do{(a=g(u=r+(i-r)/2,e,n)-t)>0?i=u:r=u}while(Math.abs(a)>o&&++l<s);return u}function w(t){for(var r=0,i=1,o=u-1;i!==o&&h[i]<=t;++i)r+=l;--i;var s=r+(t-h[i])/(h[i+1]-h[i])*l,c=y(s,e,n);return c>=a?m(t,s):0===c?s:x(t,r,r+l)}var E=!1;function k(){E=!0,e===t&&n===r||b()}var _=function(i){return E||k(),e===t&&n===r?i:0===i?0:1===i?1:g(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var C="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return C},_}(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Ca={linear:function(e,t,n){return e+(t-e)*n},ease:_a(.25,.1,.25,1),"ease-in":_a(.42,0,1,1),"ease-out":_a(0,0,.58,1),"ease-in-out":_a(.42,0,.58,1),"ease-in-sine":_a(.47,0,.745,.715),"ease-out-sine":_a(.39,.575,.565,1),"ease-in-out-sine":_a(.445,.05,.55,.95),"ease-in-quad":_a(.55,.085,.68,.53),"ease-out-quad":_a(.25,.46,.45,.94),"ease-in-out-quad":_a(.455,.03,.515,.955),"ease-in-cubic":_a(.55,.055,.675,.19),"ease-out-cubic":_a(.215,.61,.355,1),"ease-in-out-cubic":_a(.645,.045,.355,1),"ease-in-quart":_a(.895,.03,.685,.22),"ease-out-quart":_a(.165,.84,.44,1),"ease-in-out-quart":_a(.77,0,.175,1),"ease-in-quint":_a(.755,.05,.855,.06),"ease-out-quint":_a(.23,1,.32,1),"ease-in-out-quint":_a(.86,0,.07,1),"ease-in-expo":_a(.95,.05,.795,.035),"ease-out-expo":_a(.19,1,.22,1),"ease-in-out-expo":_a(1,0,0,1),"ease-in-circ":_a(.6,.04,.98,.335),"ease-out-circ":_a(.075,.82,.165,1),"ease-in-out-circ":_a(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Ca.linear;var r=ka(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":_a};function Sa(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Pa(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Da(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Pa(e,i),s=Pa(t,i);if(N(o)&&N(s))return Sa(a,o,s,n,r);if(M(o)&&M(s)){for(var u=[],l=0;l<s.length;l++){var c=o[l],d=s[l];if(null!=c&&null!=d){var h=Sa(a,c,d,n,r);u.push(h)}else u.push(d)}return u}}function Ta(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,u=o.startTime,l=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Ca.linear;else{var c,d,h;if(D(s))c=l.parse("transition-timing-function",s).value;else c=s;D(c)?(d=c,h=[]):(d=c[1],h=c.slice(2).map((function(e){return+e}))),h.length>0?("spring"===d&&h.push(o.duration),o.easingImpl=Ca[d].apply(null,h)):o.easingImpl=Ca[d]}var f,p=o.easingImpl;if(f=0===o.duration?1:(n-u)/o.duration,o.applying&&(f=o.progress),f<0?f=0:f>1&&(f=1),null==o.delay){var v=o.startPosition,g=o.position;if(g&&i&&!e.locked()){var y={};Ma(v.x,g.x)&&(y.x=Da(v.x,g.x,f,p)),Ma(v.y,g.y)&&(y.y=Da(v.y,g.y,f,p)),e.position(y)}var m=o.startPan,b=o.pan,x=a.pan,w=null!=b&&r;w&&(Ma(m.x,b.x)&&(x.x=Da(m.x,b.x,f,p)),Ma(m.y,b.y)&&(x.y=Da(m.y,b.y,f,p)),e.emit("pan"));var E=o.startZoom,k=o.zoom,_=null!=k&&r;_&&(Ma(E,k)&&(a.zoom=dt(a.minZoom,Da(E,k,f,p),a.maxZoom)),e.emit("zoom")),(w||_)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&i){for(var S=0;S<C.length;S++){var P=C[S],T=P.name,M=P,B=o.startStyle[T],N=Da(B,M,f,p,l.properties[B.name]);l.overrideBypass(e,T,N)}e.emit("style")}}return o.progress=f,f}function Ma(e,t){return null!=e&&null!=t&&(!(!N(e)||!N(t))||!(!e||!t))}function Ba(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Na(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var u=o.shift();u&&a.push(u)}for(var l=function(e){for(var t=e.length-1;t>=0;t--){(0,e[t])()}e.splice(0,e.length)},c=a.length-1;c>=0;c--){var d=a[c],h=d._private;h.stopped?(a.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,l(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||Ba(0,d,e),Ta(t,d,e,n),h.applying&&(h.applying=!1),l(h.frames),null!=h.step&&h.step(e),d.completed()&&(a.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,l(h.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o<n.length;o++){var s=i(n[o]);a=a||s}var u=i(t,!0);(a||u)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Ia={animate:ar.animate(),animation:ar.animation(),animated:ar.animated(),clearQueue:ar.clearQueue(),delay:ar.delay(),delayAnimation:ar.delayAnimation(),stop:ar.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Na(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&ne((function(n){Na(n,e),t()}))}()}}},Oa={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&z(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},za=function(e){return D(e)?new Yr(e):e},La={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new ji(Oa,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,za(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,za(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,za(t),n),this},once:function(e,t,n){return this.emitter().one(e,za(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};ar.eventAliasesOn(La);var Aa={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Aa.jpeg=Aa.jpg;var ja={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=D(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(U({},e,{cy:t,eles:i}));return a}ke("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else ke("A `name` must be specified to make a layout");else ke("Layout options must be specified to make a layout")}};ja.createLayout=ja.makeLayout=ja.layout;var Ra={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},Fa=Me({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Va={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Ce("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var r=Fa(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else ke("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Va.invalidateDimensions=Va.resize;var qa={collection:function(e,t){return D(e)?this.$(e):O(e)?e.collection():M(e)?(t||(t={}),new xa(this,e,t.unique,t.removed)):new xa(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};qa.elements=qa.filter=qa.$;var Ya={},Xa="t";Ya.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},Ya.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},u=0;u<n.length;u++){var l=n[u],c=e[u]===Xa,d=t[u]===Xa,h=c!==d,f=l.mappedProperties.length>0;if(h||d&&f){var p=void 0;h&&f||h?p=l.properties:f&&(p=l.mappedProperties);for(var v=0;v<p.length;v++){for(var g=p[v],y=g.name,m=!1,b=u+1;b<n.length;b++){var x=n[b];if(t[b]===Xa&&(m=null!=x.properties[g.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},Ya.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Xa:"f"}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},Ya.getContextStyle=function(e){var t=e.key,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var r={_private:{key:t}},i=0;i<this.length;i++){var a=this[i];if(t[i]===Xa)for(var o=0;o<a.properties.length;o++){var s=a.properties[o];r[s.name]=s}}return n[t]=r,r},Ya.applyContextStyle=function(e,t,n){for(var r=e.diffPropNames,i={},a=this.types,o=0;o<r.length;o++){var s=r[o],u=t[s],l=n.pstyle(s);if(!u){if(!l)continue;u=l.bypass?{name:s,deleteBypassed:!0}:{name:s,delete:!0}}if(l!==u){if(u.mapped===a.fn&&null!=l&&null!=l.mapping&&l.mapping.value===u.value){var c=l.mapping;if((c.fnValue=u.value(n))===c.prevFnValue)continue}var d=i[s]={prev:l};this.applyParsedProperty(n,u),d.next=n.pstyle(s),d.next&&d.next.bypass&&(d.next=d.next.bypassed)}}return{diffProps:i}},Ya.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,u=e._private.style;r=Object.keys(u);for(var l=0;l<i.length;l++){var c=i[l];t.styleKeys[c]=[ie,oe]}for(var d,h=function(e,n){return t.styleKeys[n][0]=ue(e,t.styleKeys[n][0])},f=function(e,n){return t.styleKeys[n][1]=le(e,t.styleKeys[n][1])},p=function(e,t){h(e,t),f(e,t)},v=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);h(r,t),f(r,t)}},g=0;g<r.length;g++){var y=r[g],m=u[y];if(null!=m){var b=this.properties[y],x=b.type,w=b.groupKey,E=void 0;null!=b.hashOverride?E=b.hashOverride(e,m):null!=m.pfValue&&(E=m.pfValue);var k=null==b.enums?m.value:null,_=null!=E,C=_||null!=k,S=m.units;if(x.number&&C&&!x.multiple)p(-128<(d=_?E:k)&&d<128&&Math.floor(d)!==d?2e9-(1024*d|0):d,w),_||null==S||v(S,w);else v(m.strValue,w)}}for(var P,D,T=[ie,oe],M=0;M<i.length;M++){var B=i[M],N=t.styleKeys[B];T[0]=ue(N[0],T[0]),T[1]=le(N[1],T[1])}t.styleKey=(P=T[0],D=T[1],2097152*P+D);var I=t.styleKeys;t.labelDimsKey=ce(I.labelDimensions);var O=a(e,["label"],I.labelDimensions);if(t.labelKey=ce(O),t.labelStyleKey=ce(de(I.commonLabel,O)),!s){var z=a(e,["source-label"],I.labelDimensions);t.sourceLabelKey=ce(z),t.sourceLabelStyleKey=ce(de(I.commonLabel,z));var L=a(e,["target-label"],I.labelDimensions);t.targetLabelKey=ce(L),t.targetLabelStyleKey=ce(de(I.commonLabel,L))}if(s){var A=t.styleKeys,j=A.nodeBody,R=A.nodeBorder,F=A.backgroundImage,V=A.compound,q=A.pie,Y=[j,R,F,V,q].filter((function(e){return null!=e})).reduce(de,[ie,oe]);t.nodeKey=ce(Y),t.hasPie=null!=q&&q[0]!==ie&&q[1]!==oe}return o!==t.styleKey},Ya.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},Ya.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,u=i.bypass,l=a[i.name],c=l&&l.bypass,d=e._private,h="mapping",f=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},p=function(){var t=f(l),n=f(i);r.checkTriggers(e,i.name,t,n)};if(i&&"pie"===i.name.substr(0,3)&&Ce("The pie style properties are deprecated. Create charts using background images instead."),"curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",u)),i.delete)return a[i.name]=void 0,p(),!0;if(i.deleteBypassed)return l?!!l.bypass&&(l.bypassed=void 0,p(),!0):(p(),!0);if(i.deleteBypass)return l?!!l.bypass&&(a[i.name]=l.bypassed,p(),!0):(p(),!0);var v=function(){Ce("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var g,y=i.field.split("."),m=d.data,b=0;b<y.length&&m;b++){m=m[y[b]]}if(null==m)return v(),!1;if(!N(m))return Ce("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((g=0===x?0:(m-i.fieldMin)/x)<0?g=0:g>1&&(g=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],k=i.valueMin[1],_=i.valueMax[1],C=i.valueMin[2],S=i.valueMax[2],P=null==i.valueMin[3]?1:i.valueMin[3],D=null==i.valueMax[3]?1:i.valueMax[3],T=[Math.round(w+(E-w)*g),Math.round(k+(_-k)*g),Math.round(C+(S-C)*g),Math.round(P+(D-P)*g)];n={bypass:i.bypass,name:i.name,value:T,strValue:"rgb("+T[0]+", "+T[1]+", "+T[2]+")"}}else{if(!s.number)return!1;var M=i.valueMin+(i.valueMax-i.valueMin)*g;n=this.parse(i.name,M,i.bypass,h)}if(!n)return v(),!1;n.mapping=i,i=n;break;case o.data:for(var B=i.field.split("."),I=d.data,O=0;O<B.length&&I;O++){I=I[B[O]]}if(null!=I&&(n=this.parse(i.name,I,i.bypass,h)),!n)return v(),!1;n.mapping=i,i=n;break;case o.fn:var z=i.value,L=null!=i.fnValue?i.fnValue:z(e);if(i.prevFnValue=L,null==L)return Ce("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,L,i.bypass,h)))return Ce("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Se(i),i=n;break;case void 0:break;default:return!1}return u?(i.bypassed=c?l.bypassed:l,a[i.name]=i):c?l.bypassed=i:a[i.name]=i,p(),!0},Ya.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],u=i[s];null!=u&&(u.bypass?u.bypassed=null:i[s]=null)}else r._private.style={}}},Ya.update=function(){this._private.cy.mutableElements().updateStyle()},Ya.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},u=!1,l=0;l<i.length;l++){var c=i[l],d=e.pstyle(c),h=t[c];if(h){var f=h.prev,p=null!=h.next?h.next:d,v=!1,g=void 0,y=1e-6;f&&(N(f.pfValue)&&N(p.pfValue)?(v=p.pfValue-f.pfValue,g=f.pfValue+y*v):N(f.value)&&N(p.value)?(v=p.value-f.value,g=f.value+y*v):M(f.value)&&M(p.value)&&(v=f.value[0]!==p.value[0]||f.value[1]!==p.value[1]||f.value[2]!==p.value[2],g=f.strValue),v&&(s[c]=p.strValue,this.applyBypass(e,c,g),u=!0))}}if(!u)return;r.transitioning=!0,new Jn((function(t){o>0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Ya.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Ya.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Ya.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Ya.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Wa={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;a<this.properties.length;a++){var o=this.properties[a].name,s=this.parse(o,n,!0);s&&i.push(s)}}else if(D(t)){var u=this.parse(t,n,!0);u&&i.push(u)}else{if(!B(t))return!1;var l=t;r=n;for(var c=Object.keys(l),d=0;d<c.length;d++){var h=c[d],f=l[h];if(void 0===f&&(f=l[Y(h)]),void 0!==f){var p=this.parse(h,f,!0);p&&i.push(p)}}}if(0===i.length)return!1;for(var v=!1,g=0;g<e.length;g++){for(var y=e[g],m={},b=void 0,x=0;x<i.length;x++){var w=i[x];if(r){var E=y.pstyle(w.name);b=m[w.name]={prev:E}}v=this.applyParsedProperty(y,Se(w))||v,r&&(b.next=y.pstyle(w.name))}v&&this.updateStyleHints(y),r&&this.updateTransitions(y,m,true)}return v},overrideBypass:function(e,t,n){t=q(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,u=o.mutiple,l=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":u?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,l,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=0;r<e.length;r++){for(var i=e[r],a={},o=0;o<t.length;o++){var s=t[o],u=this.properties[s],l=i.pstyle(u.name);if(l&&l.bypass){var c=this.parse(s,"",!0),d=a[u.name]={prev:l};this.applyParsedProperty(i,c),d.next=i.pstyle(u.name)}}this.updateStyleHints(i),n&&this.updateTransitions(i,a,true)}}},Ga={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy,n=t.container(),r=t.window();if(r&&n&&r.getComputedStyle)return r.getComputedStyle(n).getPropertyValue(e)}},Ha={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[Y(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){if(e=e[0]){var r=this.properties[t];r.alias&&(r=r.pointsTo);var i=r.type,a=e.pstyle(r.name);if(a){var o=a.value,s=a.units,u=a.strValue;if(n&&i.number&&null!=o&&N(o)){var l=e.cy().zoom(),c=function(e){return e*l},d=function(e,t){return c(e)+t},h=M(o);return(h?s.every((function(e){return null!=e})):null!=s)?h?o.map((function(e,t){return d(e,s[t])})).join(" "):d(o,s):h?o.map((function(e){return D(e)?e:""+c(e)})).join(" "):""+c(o)}if(null!=u)return u}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=B(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],u=r[o]||r[q(o)],l=this.parse(u.name,s);l&&t.push(l)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,u,l=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)l[0]=ue(o,l[0]),l[1]=le(o,l[1]);else for(a=i.strValue,u=0;u<a.length;u++)o=a.charCodeAt(u),l[0]=ue(o,l[0]),l[1]=le(o,l[1]);return l}};Ha.getPropertiesHash=Ha.getNonDefaultPropertiesHash;var Ua={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var u=o[s],l=a[u];t.css(u,l)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},Ka={appendFromString:function(e){var t,n,r,i=this,a=""+e;function o(){a=a.length>t.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var u=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Ce("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=u[0];var l=u[1];if("core"!==l)if(new Yr(l).invalid){Ce("Skipping parsing of block: Invalid selector found in string stylesheet: "+l),o();continue}var c=u[2],d=!1;n=c;for(var h=[];;){if(n.match(/^\s*$/))break;var f=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!f){Ce("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),d=!0;break}r=f[0];var p=f[1],v=f[2];if(this.properties[p])i.parse(p,v)?(h.push({name:p,val:v}),s()):(Ce("Skipping property: Invalid property definition in: "+r),s());else Ce("Skipping property: Invalid property name in: "+r),s()}if(d){o();break}i.selector(l);for(var g=0;g<h.length;g++){var y=h[g];i.css(y.name,y.val)}o()}return i},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},Za={};!function(){var e=G,t=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},n=function(t){var n=e+"|\\w+|rgb[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)|hsl[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)|\\#[0-9a-fA-F]{3}|\\#[0-9a-fA-F]{6}";return"^"+t+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+n+")\\s*\\,\\s*("+n+")\\)$"},r=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];Za.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:t("data")},layoutData:{mapping:!0,regex:t("layoutData")},scratch:{mapping:!0,regex:t("scratch")},mapData:{mapping:!0,regex:n("mapData")},mapLayoutData:{mapping:!0,regex:n("mapLayoutData")},mapScratch:{mapping:!0,regex:n("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:r,singleRegexMatchValue:!0},urls:{regexes:r,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return D(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var i={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||(0==e&&0!=t||0!=e&&0==t)},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=R(e),r=R(t);return n&&!r||!n&&r}},a=Za.types,o=[{name:"label",type:a.text,triggersBounds:i.any,triggersZOrder:i.emptyNonEmpty},{name:"text-rotation",type:a.textRotation,triggersBounds:i.any},{name:"text-margin-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"text-margin-y",type:a.bidirectionalSize,triggersBounds:i.any}],s=[{name:"source-label",type:a.text,triggersBounds:i.any},{name:"source-text-rotation",type:a.textRotation,triggersBounds:i.any},{name:"source-text-margin-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"source-text-margin-y",type:a.bidirectionalSize,triggersBounds:i.any},{name:"source-text-offset",type:a.size,triggersBounds:i.any}],u=[{name:"target-label",type:a.text,triggersBounds:i.any},{name:"target-text-rotation",type:a.textRotation,triggersBounds:i.any},{name:"target-text-margin-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"target-text-margin-y",type:a.bidirectionalSize,triggersBounds:i.any},{name:"target-text-offset",type:a.size,triggersBounds:i.any}],l=[{name:"font-family",type:a.fontFamily,triggersBounds:i.any},{name:"font-style",type:a.fontStyle,triggersBounds:i.any},{name:"font-weight",type:a.fontWeight,triggersBounds:i.any},{name:"font-size",type:a.size,triggersBounds:i.any},{name:"text-transform",type:a.textTransform,triggersBounds:i.any},{name:"text-wrap",type:a.textWrap,triggersBounds:i.any},{name:"text-overflow-wrap",type:a.textOverflowWrap,triggersBounds:i.any},{name:"text-max-width",type:a.size,triggersBounds:i.any},{name:"text-outline-width",type:a.size,triggersBounds:i.any},{name:"line-height",type:a.positiveNumber,triggersBounds:i.any}],c=[{name:"text-valign",type:a.valign,triggersBounds:i.any},{name:"text-halign",type:a.halign,triggersBounds:i.any},{name:"color",type:a.color},{name:"text-outline-color",type:a.color},{name:"text-outline-opacity",type:a.zeroOneNumber},{name:"text-background-color",type:a.color},{name:"text-background-opacity",type:a.zeroOneNumber},{name:"text-background-padding",type:a.size,triggersBounds:i.any},{name:"text-border-opacity",type:a.zeroOneNumber},{name:"text-border-color",type:a.color},{name:"text-border-width",type:a.size,triggersBounds:i.any},{name:"text-border-style",type:a.borderStyle,triggersBounds:i.any},{name:"text-background-shape",type:a.textBackgroundShape,triggersBounds:i.any},{name:"text-justification",type:a.justification}],d=[{name:"events",type:a.bool},{name:"text-events",type:a.bool}],h=[{name:"display",type:a.display,triggersZOrder:i.any,triggersBounds:i.any,triggersBoundsOfParallelBeziers:!0},{name:"visibility",type:a.visibility,triggersZOrder:i.any},{name:"opacity",type:a.zeroOneNumber,triggersZOrder:i.zeroNonZero},{name:"text-opacity",type:a.zeroOneNumber},{name:"min-zoomed-font-size",type:a.size},{name:"z-compound-depth",type:a.zCompoundDepth,triggersZOrder:i.any},{name:"z-index-compare",type:a.zIndexCompare,triggersZOrder:i.any},{name:"z-index",type:a.nonNegativeInt,triggersZOrder:i.any}],f=[{name:"overlay-padding",type:a.size,triggersBounds:i.any},{name:"overlay-color",type:a.color},{name:"overlay-opacity",type:a.zeroOneNumber,triggersBounds:i.zeroNonZero},{name:"overlay-shape",type:a.overlayShape,triggersBounds:i.any}],p=[{name:"underlay-padding",type:a.size,triggersBounds:i.any},{name:"underlay-color",type:a.color},{name:"underlay-opacity",type:a.zeroOneNumber,triggersBounds:i.zeroNonZero},{name:"underlay-shape",type:a.overlayShape,triggersBounds:i.any}],v=[{name:"transition-property",type:a.propList},{name:"transition-duration",type:a.time},{name:"transition-delay",type:a.time},{name:"transition-timing-function",type:a.easing}],g=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},y=[{name:"height",type:a.nodeSize,triggersBounds:i.any,hashOverride:g},{name:"width",type:a.nodeSize,triggersBounds:i.any,hashOverride:g},{name:"shape",type:a.nodeShape,triggersBounds:i.any},{name:"shape-polygon-points",type:a.polygonPointList,triggersBounds:i.any},{name:"background-color",type:a.color},{name:"background-fill",type:a.fill},{name:"background-opacity",type:a.zeroOneNumber},{name:"background-blacken",type:a.nOneOneNumber},{name:"background-gradient-stop-colors",type:a.colors},{name:"background-gradient-stop-positions",type:a.percentages},{name:"background-gradient-direction",type:a.gradientDirection},{name:"padding",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"padding-relative-to",type:a.paddingRelativeTo,triggersBounds:i.any},{name:"bounds-expansion",type:a.boundsExpansion,triggersBounds:i.any}],m=[{name:"border-color",type:a.color},{name:"border-opacity",type:a.zeroOneNumber},{name:"border-width",type:a.size,triggersBounds:i.any},{name:"border-style",type:a.borderStyle}],b=[{name:"background-image",type:a.urls},{name:"background-image-crossorigin",type:a.bgCrossOrigin},{name:"background-image-opacity",type:a.zeroOneNumbers},{name:"background-image-containment",type:a.bgContainment},{name:"background-image-smoothing",type:a.bools},{name:"background-position-x",type:a.bgPos},{name:"background-position-y",type:a.bgPos},{name:"background-width-relative-to",type:a.bgRelativeTo},{name:"background-height-relative-to",type:a.bgRelativeTo},{name:"background-repeat",type:a.bgRepeat},{name:"background-fit",type:a.bgFit},{name:"background-clip",type:a.bgClip},{name:"background-width",type:a.bgWH},{name:"background-height",type:a.bgWH},{name:"background-offset-x",type:a.bgPos},{name:"background-offset-y",type:a.bgPos}],x=[{name:"position",type:a.position,triggersBounds:i.any},{name:"compound-sizing-wrt-labels",type:a.compoundIncludeLabels,triggersBounds:i.any},{name:"min-width",type:a.size,triggersBounds:i.any},{name:"min-width-bias-left",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"min-width-bias-right",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"min-height",type:a.size,triggersBounds:i.any},{name:"min-height-bias-top",type:a.sizeMaybePercent,triggersBounds:i.any},{name:"min-height-bias-bottom",type:a.sizeMaybePercent,triggersBounds:i.any}],w=[{name:"line-style",type:a.lineStyle},{name:"line-color",type:a.color},{name:"line-fill",type:a.fill},{name:"line-cap",type:a.lineCap},{name:"line-opacity",type:a.zeroOneNumber},{name:"line-dash-pattern",type:a.numbers},{name:"line-dash-offset",type:a.number},{name:"line-gradient-stop-colors",type:a.colors},{name:"line-gradient-stop-positions",type:a.percentages},{name:"curve-style",type:a.curveStyle,triggersBounds:i.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:a.zeroOneNumber,triggersBounds:i.any},{name:"source-endpoint",type:a.edgeEndpoint,triggersBounds:i.any},{name:"target-endpoint",type:a.edgeEndpoint,triggersBounds:i.any},{name:"control-point-step-size",type:a.size,triggersBounds:i.any},{name:"control-point-distances",type:a.bidirectionalSizes,triggersBounds:i.any},{name:"control-point-weights",type:a.numbers,triggersBounds:i.any},{name:"segment-distances",type:a.bidirectionalSizes,triggersBounds:i.any},{name:"segment-weights",type:a.numbers,triggersBounds:i.any},{name:"taxi-turn",type:a.bidirectionalSizeMaybePercent,triggersBounds:i.any},{name:"taxi-turn-min-distance",type:a.size,triggersBounds:i.any},{name:"taxi-direction",type:a.axisDirection,triggersBounds:i.any},{name:"edge-distances",type:a.edgeDistances,triggersBounds:i.any},{name:"arrow-scale",type:a.positiveNumber,triggersBounds:i.any},{name:"loop-direction",type:a.angle,triggersBounds:i.any},{name:"loop-sweep",type:a.angle,triggersBounds:i.any},{name:"source-distance-from-node",type:a.size,triggersBounds:i.any},{name:"target-distance-from-node",type:a.size,triggersBounds:i.any}],E=[{name:"ghost",type:a.bool,triggersBounds:i.any},{name:"ghost-offset-x",type:a.bidirectionalSize,triggersBounds:i.any},{name:"ghost-offset-y",type:a.bidirectionalSize,triggersBounds:i.any},{name:"ghost-opacity",type:a.zeroOneNumber}],k=[{name:"selection-box-color",type:a.color},{name:"selection-box-opacity",type:a.zeroOneNumber},{name:"selection-box-border-color",type:a.color},{name:"selection-box-border-width",type:a.size},{name:"active-bg-color",type:a.color},{name:"active-bg-opacity",type:a.zeroOneNumber},{name:"active-bg-size",type:a.size},{name:"outside-texture-bg-color",type:a.color},{name:"outside-texture-bg-opacity",type:a.zeroOneNumber}],_=[];Za.pieBackgroundN=16,_.push({name:"pie-size",type:a.sizeMaybePercent});for(var C=1;C<=Za.pieBackgroundN;C++)_.push({name:"pie-"+C+"-background-color",type:a.color}),_.push({name:"pie-"+C+"-background-size",type:a.percent}),_.push({name:"pie-"+C+"-background-opacity",type:a.zeroOneNumber});var S=[],P=Za.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:a.arrowShape,triggersBounds:i.any},{name:"arrow-color",type:a.color},{name:"arrow-fill",type:a.arrowFill}].forEach((function(e){P.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;S.push({name:n,type:r,triggersBounds:i})}))}),{});var T=Za.properties=[].concat(d,v,h,f,p,E,c,l,o,s,u,y,m,b,_,x,w,S,k),M=Za.propertyGroups={behavior:d,transition:v,visibility:h,overlay:f,underlay:p,ghost:E,commonLabel:c,labelDimensions:l,mainLabel:o,sourceLabel:s,targetLabel:u,nodeBody:y,nodeBorder:m,backgroundImage:b,pie:_,compound:x,edgeLine:w,edgeArrow:S,core:k},B=Za.propertyGroupNames={};(Za.propertyGroupKeys=Object.keys(M)).forEach((function(e){B[e]=M[e].map((function(e){return e.name})),M[e].forEach((function(t){return t.groupKey=e}))}));var N=Za.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];Za.propertyNames=T.map((function(e){return e.name}));for(var I=0;I<T.length;I++){var O=T[I];T[O.name]=O}for(var z=0;z<N.length;z++){var L=N[z],A=T[L.pointsTo],j={name:L.name,alias:!0,pointsTo:A};T.push(j),T[L.name]=j}}(),Za.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},Za.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=U({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=Za.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce((function(e,t){return Za.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},Za.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var $a={parse:function(e,t,n,r){var i=this;if(T(t))return i.parseImplWarn(e,t,n,r);var a,o=fe(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Se(a))&&(a.value=Se(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Ce("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Ce("The style value of `label` is deprecated for `"+i.name+"`"),i}};$a.parseImpl=function(e,t,n,r){var i=this;e=q(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var u=D(t);u&&(t=t.trim());var l,c,d=a.type;if(!d)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(T(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!u||r||t.length<7||"a"!==t[1]);else{if(t.length>=7&&"d"===t[0]&&(l=new RegExp(s.data.regex).exec(t))){if(n)return!1;var h=s.data;return{name:e,value:l,strValue:""+t,mapped:h,field:l[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(d.multiple)return!1;var f=s.mapData;if(!d.color&&!d.number)return!1;var p=this.parse(e,c[4]);if(!p||p.mapped)return!1;var v=this.parse(e,c[5]);if(!v||v.mapped)return!1;if(p.pfValue===v.pfValue||p.strValue===v.strValue)return Ce("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+p.strValue+"`"),this.parse(e,p.strValue);if(d.color){var g=p.value,y=v.value;if(!(g[0]!==y[0]||g[1]!==y[1]||g[2]!==y[2]||g[3]!==y[3]&&(null!=g[3]&&1!==g[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:f,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:p.value,valueMax:v.value,bypass:n}}}if(d.multiple&&"multiple"!==r){var m;if(m=u?t.split(/\s+/):M(t)?t:[t],d.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",k=!1,_=0;_<m.length;_++){var C=i.parse(e,m[_],n,"multiple");k=k||D(C.value),b.push(C.value),w.push(null!=C.pfValue?C.pfValue:C.value),x.push(C.units),E+=(_>0?" ":"")+C.strValue}return d.validate&&!d.validate(b,x)?null:d.singleEnum&&k?1===b.length&&D(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var S,P,B=function(){for(var r=0;r<d.enums.length;r++){if(d.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n}}return null};if(d.number){var I,O="px";if(d.units&&(I=d.units),d.implicitUnits&&(O=d.implicitUnits),!d.unitless)if(u){var z="px|em"+(d.allowPercent?"|\\%":"");I&&(z=I);var L=t.match("^("+G+")("+z+")?$");L&&(t=L[1],I=L[2]||O)}else I&&!d.implicitUnits||(I=O);if(t=parseFloat(t),isNaN(t)&&void 0===d.enums)return null;if(isNaN(t)&&void 0!==d.enums)return t=o,B();if(d.integer&&(!N(P=t)||Math.floor(P)!==P))return null;if(void 0!==d.min&&(t<d.min||d.strictMin&&t===d.min)||void 0!==d.max&&(t>d.max||d.strictMax&&t===d.max))return null;var A={name:e,value:t,strValue:""+t+(I||""),units:I,bypass:n};return d.unitless||"px"!==I&&"em"!==I?A.pfValue=t:A.pfValue="px"!==I&&I?this.getEmSizeInPixels()*t:t,"ms"!==I&&"s"!==I||(A.pfValue="ms"===I?t:1e3*t),"deg"!==I&&"rad"!==I||(A.pfValue="rad"===I?t:(S=t,Math.PI*S/180)),"%"===I&&(A.pfValue=t/100),A}if(d.propList){var j=[],R=""+t;if("none"===R);else{for(var F=R.split(/\s*,\s*|\s+/),V=0;V<F.length;V++){var Y=F[V].trim();i.properties[Y]?j.push(Y):Ce("`"+Y+"` is not a valid property name")}if(0===j.length)return null}return{name:e,value:j,strValue:0===j.length?"none":j.join(" "),bypass:n}}if(d.color){var X=K(t);return X?{name:e,value:X,pfValue:X,strValue:"rgb("+X[0]+","+X[1]+","+X[2]+")",bypass:n}:null}if(d.regex||d.regexes){if(d.enums){var W=B();if(W)return W}for(var H=d.regexes?d.regexes:[d.regex],U=0;U<H.length;U++){var Z=new RegExp(H[U]).exec(t);if(Z)return{name:e,value:d.singleRegexMatchValue?Z[1]:Z,strValue:""+t,bypass:n}}return null}return d.string?{name:e,value:""+t,strValue:""+t,bypass:n}:d.enums?B():null};var Qa=function e(t){if(!(this instanceof e))return new e(t);A(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):ke("A style must have a core reference")},Ja=Qa.prototype;Ja.instanceString=function(){return"style"},Ja.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},Ja.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},Ja.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},Ja.selector=function(e){var t="core"===e?null:new Yr(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},Ja.css=function(){var e=this,t=arguments;if(1===t.length)for(var n=t[0],r=0;r<e.properties.length;r++){var i=e.properties[r],a=n[i.name];void 0===a&&(a=n[Y(i.name)]),void 0!==a&&this.cssRule(i.name,a)}else 2===t.length&&this.cssRule(t[0],t[1]);return this},Ja.style=Ja.css,Ja.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},Ja.append=function(e){return j(e)?e.appendToStyle(this):M(e)?this.appendFromJson(e):D(e)&&this.appendFromString(e),this},Qa.fromJson=function(e,t){var n=new Qa(e);return n.fromJson(t),n},Qa.fromString=function(e,t){return new Qa(e).fromString(t)},[Ya,Wa,Ga,Ha,Ua,Ka,Za,$a].forEach((function(e){U(Ja,e)})),Qa.types=Ja.types,Qa.properties=Ja.properties,Qa.propertyGroups=Ja.propertyGroups,Qa.propertyGroupNames=Ja.propertyGroupNames,Qa.propertyGroupKeys=Ja.propertyGroupKeys;var eo={style:function(e){e&&this.setStyle(e).update();return this._private.style},setStyle:function(e){var t=this._private;return j(e)?t.style=e.generateStyle(this):M(e)?t.style=Qa.fromJson(this,e):D(e)?t.style=Qa.fromString(this,e):t.style=Qa(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},to={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType="single"),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(D(a[0]))return o[e=a[0]];if(B(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,N(r)&&(o.x=r),N(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=a[0],t=a[1],"x"!==e&&"y"!==e||!N(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,u=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:B(e)&&(a=(i=s[0]).x,o=i.y,N(a)&&(u.x+=a),N(o)&&(u.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!N(r)||(u[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(N(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n,r;if(D(e)){var i=e;e=this.$(i)}else if(B(r=e)&&N(r.x1)&&N(r.x2)&&N(r.y1)&&N(r.y2)){var a=e;(n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else O(e)||(e=this.mutableElements());if(!O(e)||!e.empty()){n=n||e.boundingBox();var o,s=this.width(),u=this.height();if(t=N(t)?t:0,!isNaN(s)&&!isNaN(u)&&s>0&&u>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(u-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)<this._private.minZoom?this._private.minZoom:o,pan:{x:(s-o*(n.x1+n.x2))/2,y:(u-o*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return N(e)&&N(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):N(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:N(t)&&void 0===e&&t>=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),N(e)?n=e:B(e)&&(n=e.level,null!=e.position?t=et(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!N(n)||n===a||null!=t&&(!N(t.x)||!N(t.y)))return null;if(null!=t){var s=i,u=a,l=n;return{zoomed:!0,panned:!0,zoom:l,pan:{x:-l/u*(t.x-s.x)+t.x,y:-l/u*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(N(e.zoom)||(n=!1),B(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var u=e.pan;N(u.x)&&(t.pan.x=u.x,o=!1),N(u.y)&&(t.pan.y=u.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(D(e)){var n=e;e=this.mutableElements().filter(n)}else O(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};to.centre=to.center,to.autolockNodes=to.autolock,to.autoungrabifyNodes=to.autoungrabify;var no={data:ar.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ar.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ar.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ar.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};no.attr=no.data,no.removeAttr=no.removeData;var ro=function(e){var t=this,n=(e=U({},e)).container;n&&!I(n)&&I(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==w&&void 0!==n&&!e.headless,o=e;o.layout=U({name:a?"grid":"null"},o.layout),o.renderer=U({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},u=this._private={container:n,ready:!1,options:o,elements:new xa(this),listeners:[],aniEles:new xa(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:N(o.zoom)?o.zoom:1,pan:{x:B(o.pan)&&N(o.pan.x)?o.pan.x:0,y:B(o.pan)&&N(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});u.styleEnabled&&t.setStyle([]);var l=U({},o,o.renderer);t.initRenderer(l);!function(e,t){if(e.some(F))return Jn.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];u.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(B(e)||M(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=U({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),u.ready=!0,T(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},io=ro.prototype;U(io,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){if(null==this._private.container)return w;var e=this._private.container.ownerDocument;return void 0===e||null==e?w:e.defaultView||w},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!I(e)&&I(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(U({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Se(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements();if(B(e)){if(t.startBatch(),e.elements){var i={},a=function(e,n){for(var r=[],a=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var u=""+s.data.id,l=t.getElementById(u);i[u]=!0,0!==l.length?a.push({ele:l,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Ce("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<a.length;c++){var d=a[c],h=d.ele,f=d.json;h.json(f)}};if(M(e.elements))a(e.elements);else for(var o=["nodes","edges"],s=0;s<o.length;s++){var u=o[s],l=e.elements[u];M(l)&&a(l,u)}var c=t.collection();r.filter((function(e){return!i[e.id()]})).forEach((function(e){e.isParent()?c.merge(e):e.remove()})),c.forEach((function(e){return e.children().move({parent:null})})),c.forEach((function(e){return function(e){return t.getElementById(e.id())}(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var d=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],h=0;h<d.length;h++){var f=d[h];null!=e[f]&&t[f](e[f])}return t.endBatch(),this}var p={};!!e?p.elements=this.elements().map((function(e){return e.json()})):(p.elements={},r.forEach((function(e){var t=e.group();p.elements[t]||(p.elements[t]=[]),p.elements[t].push(e.json())}))),this._private.styleEnabled&&(p.style=t.style().json()),p.data=Se(t.data());var v=n.options;return p.zoomingEnabled=n.zoomingEnabled,p.userZoomingEnabled=n.userZoomingEnabled,p.zoom=n.zoom,p.minZoom=n.minZoom,p.maxZoom=n.maxZoom,p.panningEnabled=n.panningEnabled,p.userPanningEnabled=n.userPanningEnabled,p.pan=Se(n.pan),p.boxSelectionEnabled=n.boxSelectionEnabled,p.renderer=Se(v.renderer),p.hideEdgesOnViewport=v.hideEdgesOnViewport,p.textureOnViewport=v.textureOnViewport,p.wheelSensitivity=v.wheelSensitivity,p.motionBlur=v.motionBlur,p.multiClickDebounceTime=v.multiClickDebounceTime,p}}),io.$id=io.getElementById,[Ea,Ia,La,Aa,ja,Ra,Va,qa,eo,to,no].forEach((function(e){U(io,e)}));var ao={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},oo={maximal:!1,acyclic:!1},so=function(e){return e.scratch("breadthfirst")},uo=function(e,t){return e.scratch("breadthfirst",t)};function lo(e){this.options=U({},ao,oo,e)}lo.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,u=n.acyclic||n.maximal||n.maximalAdjustments>0,l=ht(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(O(n.roots))e=n.roots;else if(M(n.roots)){for(var c=[],d=0;d<n.roots.length;d++){var h=n.roots[d],f=r.getElementById(h);c.push(f)}e=r.collection(c)}else if(D(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var p=i.components();e=r.collection();for(var v=function(t){var n=p[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},g=0;g<p.length;g++)v(g)}var y=[],m={},b=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),uo(e,{index:n,depth:t})};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();b(a,i),m[o]=!0}});for(var x=[],w=0;w<a.length;w++){var E=a[w];m[E.id()]||x.push(E)}var k=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?uo(r,{depth:e,index:n}):(t.splice(n,1),n--)}},_=function(){for(var e=0;e<y.length;e++)k(e)},C=function(e,t){for(var r=so(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),u=0;u<a.length;u++){var l=a[u],c=so(l);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var d=o+1;return function(e,t){var n=so(e),r=n.depth,i=n.index;y[r][i]=null,b(e,t)}(e,d),t[s]=d,!0}return!1};if(s&&u){var S=[],P={},T=function(e){return S.push(e)};for(a.forEach((function(e){return S.push(e)}));S.length>0;){var B=S.shift(),N=C(B,P);if(N)B.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(T);else if(null===N){Ce("Detected double maximal shift for node `"+B.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}_();var I=0;if(n.avoidOverlap)for(var z=0;z<a.length;z++){var L=a[z].layoutDimensions(n),A=L.w,j=L.h;I=Math.max(I,A,j)}var R={},F=function(e){if(R[e.id()])return R[e.id()];for(var t=so(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var u=so(s);if(null!=u){var l=u.index,c=u.depth;if(null!=l&&null!=c){var d=y[c].length;c<t&&(r+=l/d,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),R[e.id()]=r,r},V=function(e,t){var n=F(e)-F(t);return 0===n?H(e.id(),t.id()):n};void 0!==n.depthSort&&(V=n.depthSort);for(var q=0;q<y.length;q++)y[q].sort(V),k(q);for(var Y=[],X=0;X<x.length;X++)Y.push(x[X]);y.unshift(Y),_();for(var W=0,G=0;G<y.length;G++)W=Math.max(y[G].length,W);var U=l.x1+l.w/2,K=l.x1+l.h/2,Z=y.reduce((function(e,t){return Math.max(e,t.length)}),0);return i.nodes().layoutPositions(this,n,(function(e){var t=so(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(l.w/((n.grid?Z:a)+1),I),s=Math.max(l.h/(y.length+1),I),u=Math.min(l.w/2/y.length,l.h/2/y.length);if(u=Math.max(u,I),n.circle){var c=u*r+u-(y.length>0&&y[0].length<=3?u/2:0),d=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:U+c*Math.cos(d),y:K+c*Math.sin(d)}}return{x:U+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var co={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function ho(e){this.options=U({},co,e)}ho.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=ht(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),u=s.x1+s.w/2,l=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),d=0,h=0;h<a.length;h++){var f=a[h].layoutDimensions(t),p=f.w,v=f.h;d=Math.max(d,p,v)}if(o=N(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-d,a.length>1&&t.avoidOverlap){d*=1.75;var g=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(d*d/(g*g+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:u+a,y:l+s}})),this};var fo,po={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function vo(e){this.options=U({},po,e)}vo.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=ht(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,u=o.y1+o.h/2,l=[],c=0,d=0;d<a.length;d++){var h,f=a[d];h=t.concentric(f),l.push({value:h,node:f}),f._private.scratch.concentric=h}a.updateStyle();for(var p=0;p<a.length;p++){var v=a[p].layoutDimensions(t);c=Math.max(c,v.w,v.h)}l.sort((function(e,t){return t.value-e.value}));for(var g=t.levelWidth(a),y=[[]],m=y[0],b=0;b<l.length;b++){var x=l[b];if(m.length>0)Math.abs(m[0].value-x.value)>=g&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,k=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,k)}for(var _=0,C=0;C<y.length;C++){var S=y[C],P=void 0===t.sweep?2*Math.PI-2*Math.PI/S.length:t.sweep,D=S.dTheta=P/Math.max(1,S.length-1);if(S.length>1&&t.avoidOverlap){var T=Math.cos(D)-Math.cos(0),M=Math.sin(D)-Math.sin(0),B=Math.sqrt(w*w/(T*T+M*M));_=Math.max(B,_)}S.r=_,_+=w}if(t.equidistant){for(var N=0,I=0,O=0;O<y.length;O++){var z=y[O].r-I;N=Math.max(N,z)}I=0;for(var L=0;L<y.length;L++){var A=y[L];0===L&&(I=A.r),A.r=I,I+=N}}for(var j={},R=0;R<y.length;R++)for(var F=y[R],V=F.dTheta,q=F.r,Y=0;Y<F.length;Y++){var X=F[Y],W=t.startAngle+(n?1:-1)*V*Y,G={x:s+q*Math.cos(W),y:u+q*Math.sin(W)};j[X.node.id()]=G}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return j[t]})),this};var go={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function yo(e){this.options=U({},go,e),this.options.layout=this}yo.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),fo=!0===e.debug;var r=mo(t,n,e);fo&&undefined(r),e.randomize&&wo(r);var i=re(),a=function(){ko(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter)&&(_o(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=Eo(r,e,t);t.layoutPositions(n,e,i)}},u=0,l=!0;if(!0===e.animate){!function t(){for(var n=0;l&&n<e.refresh;)l=o(u),u++,n++;l?(re()-i>=e.animationThreshold&&a(),ne(t)):(Lo(r,e),s())}()}else{for(;l;)l=o(u),u++;Lo(r,e),s()}return this},yo.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},yo.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var mo=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=ht(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),u={},l=0;l<s.length;l++)for(var c=s[l],d=0;d<c.length;d++){u[c[d].id()]=l}for(l=0;l<o.nodeSize;l++){var h=(y=i[l]).layoutDimensions(n);(O={}).isLocked=y.locked(),O.id=y.data("id"),O.parentId=y.data("parent"),O.cmptId=u[y.id()],O.children=[],O.positionX=y.position("x"),O.positionY=y.position("y"),O.offsetX=0,O.offsetY=0,O.height=h.w,O.width=h.h,O.maxX=O.positionX+O.width/2,O.minX=O.positionX-O.width/2,O.maxY=O.positionY+O.height/2,O.minY=O.positionY-O.height/2,O.padLeft=parseFloat(y.style("padding")),O.padRight=parseFloat(y.style("padding")),O.padTop=parseFloat(y.style("padding")),O.padBottom=parseFloat(y.style("padding")),O.nodeRepulsion=T(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(O),o.idToIndex[O.id]=l}var f=[],p=0,v=-1,g=[];for(l=0;l<o.nodeSize;l++){var y,m=(y=o.layoutNodes[l]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(f[++v]=y.id,g.push(y.id))}for(o.graphSet.push(g);p<=v;){var b=f[p++],x=o.idToIndex[b],w=o.layoutNodes[x].children;if(w.length>0){o.graphSet.push(w);for(l=0;l<w.length;l++)f[++v]=w[l]}}for(l=0;l<o.graphSet.length;l++){var E=o.graphSet[l];for(d=0;d<E.length;d++){var k=o.idToIndex[E[d]];o.indexToGraph[k]=l}}for(l=0;l<o.edgeSize;l++){var _=r[l],C={};C.id=_.data("id"),C.sourceId=_.data("source"),C.targetId=_.data("target");var S=T(n.idealEdgeLength)?n.idealEdgeLength(_):n.idealEdgeLength,P=T(n.edgeElasticity)?n.edgeElasticity(_):n.edgeElasticity,D=o.idToIndex[C.sourceId],M=o.idToIndex[C.targetId];if(o.indexToGraph[D]!=o.indexToGraph[M]){for(var B=bo(C.sourceId,C.targetId,o),N=o.graphSet[B],I=0,O=o.layoutNodes[D];-1===N.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],I++;for(O=o.layoutNodes[M];-1===N.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],I++;S*=I*n.nestingFactor}C.idealLength=S,C.elasticity=P,o.layoutEdges.push(C)}return o},bo=function(e,t,n){var r=xo(e,t,0,n);return 2>r.count?0:r.graph},xo=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var u=a[s],l=i.idToIndex[u],c=i.layoutNodes[l].children;if(0!==c.length){var d=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==d.count){if(1!==d.count)return d;if(2===++o)break}}}return{count:o,graph:r}},wo=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},Eo=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,u=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+u*r.h}}return{x:o.positionX,y:o.positionY}}},ko=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=Eo(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},_o=function(e,t,n){Co(e,t),Mo(e),Bo(e,t),No(e),Io(e)},Co=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var u=e.layoutNodes[e.idToIndex[r[s]]];Po(o,u,e,t)}},So=function(e){return-e+2*e*Math.random()},Po=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY;0===i&&0===a&&(i=So(1),a=So(1));var o=Do(e,t,i,a);if(o>0)var s=(l=r.nodeOverlap*o)*i/(v=Math.sqrt(i*i+a*a)),u=l*a/v;else{var l,c=To(e,i,a),d=To(t,-1*i,-1*a),h=d.x-c.x,f=d.y-c.y,p=h*h+f*f,v=Math.sqrt(p);s=(l=(e.nodeRepulsion+t.nodeRepulsion)/p)*h/v,u=l*f/v}e.isLocked||(e.offsetX-=s,e.offsetY-=u),t.isLocked||(t.offsetX+=s,t.offsetY+=u)}},Do=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},To=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,u=a/o,l={};return 0===t&&0<n||0===t&&0>n?(l.x=r,l.y=i+a/2,l):0<t&&-1*u<=s&&s<=u?(l.x=r+o/2,l.y=i+o*n/2/t,l):0>t&&-1*u<=s&&s<=u?(l.x=r-o/2,l.y=i-o*n/2/t,l):0<n&&(s<=-1*u||s>=u)?(l.x=r+a*t/2/n,l.y=i+a/2,l):0>n&&(s<=-1*u||s>=u)?(l.x=r-a*t/2/n,l.y=i-a/2,l):l},Mo=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],u=s.positionX-a.positionX,l=s.positionY-a.positionY;if(0!==u||0!==l){var c=To(a,u,l),d=To(s,-1*u,-1*l),h=d.x-c.x,f=d.y-c.y,p=Math.sqrt(h*h+f*f),v=Math.pow(r.idealLength-p,2)/r.elasticity;if(0!==p)var g=v*h/p,y=v*f/p;else g=0,y=0;a.isLocked||(a.offsetX+=g,a.offsetY+=y),s.isLocked||(s.offsetX-=g,s.offsetY-=y)}}},Bo=function(e,t){if(0!==t.gravity)for(var n=0;n<e.graphSet.length;n++){var r=e.graphSet[n],i=r.length;if(0===n)var a=e.clientHeight/2,o=e.clientWidth/2;else{var s=e.layoutNodes[e.idToIndex[r[0]]],u=e.layoutNodes[e.idToIndex[s.parentId]];a=u.positionX,o=u.positionY}for(var l=0;l<i;l++){var c=e.layoutNodes[e.idToIndex[r[l]]];if(!c.isLocked){var d=a-c.positionX,h=o-c.positionY,f=Math.sqrt(d*d+h*h);if(f>1){var p=t.gravity*d/f,v=t.gravity*h/f;c.offsetX+=p,c.offsetY+=v}}}}},No=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],u=s.children;if(0<u.length&&!s.isLocked){for(var l=s.offsetX,c=s.offsetY,d=0;d<u.length;d++){var h=e.layoutNodes[e.idToIndex[u[d]]];h.offsetX+=l,h.offsetY+=c,n[++i]=u[d]}s.offsetX=0,s.offsetY=0}}},Io=function(e,t){for(var n=0;n<e.nodeSize;n++){0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(n=0;n<e.nodeSize;n++){if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Oo(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,zo(i,e)}}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Oo=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},zo=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Lo=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++){if(v=r[i]){v.x1=1/0,v.x2=-1/0,v.y1=1/0,v.y2=-1/0;for(var u=0;u<v.length;u++){var l=v[u];v.x1=Math.min(v.x1,l.positionX-l.width/2),v.x2=Math.max(v.x2,l.positionX+l.width/2),v.y1=Math.min(v.y1,l.positionY-l.height/2),v.y2=Math.max(v.y2,l.positionY+l.height/2)}v.w=v.x2-v.x1,v.h=v.y2-v.y1,s+=v.w*v.h}}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,d=0,h=0,f=0,p=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var v;if(v=r[i]){for(u=0;u<v.length;u++){(l=v[u]).isLocked||(l.positionX+=c-v.x1,l.positionY+=d-v.y1)}c+=v.w+t.componentSpacing,h+=v.w+t.componentSpacing,f=Math.max(f,v.h),h>p&&(d+=f+t.componentSpacing,c=0,h=0,f=0)}}},Ao={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function jo(e){this.options=U({},Ao,e)}jo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=ht(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),u=Math.round(s),l=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(u,l);Math.min(u,l)==u?u=e:l=e},d=function(e){if(null==e)return Math.max(u,l);Math.max(u,l)==u?u=e:l=e},h=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=h&&null!=f)u=h,l=f;else if(null!=h&&null==f)u=h,l=Math.ceil(o/u);else if(null==h&&null!=f)l=f,u=Math.ceil(o/l);else if(l*u>o){var p=c(),v=d();(p-1)*v>=o?c(p-1):(v-1)*p>=o&&d(v-1)}else for(;l*u<o;){var g=c(),y=d();(y+1)*g>=o?d(y+1):c(g+1)}var m=a.w/l,b=a.h/u;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var k=w.layoutDimensions(t),_=t.avoidOverlapPadding,C=k.w+_,S=k.h+_;m=Math.max(m,C),b=Math.max(b,S)}for(var P={},D=function(e,t){return!!P["c-"+e+"-"+t]},T=function(e,t){P["c-"+e+"-"+t]=!0},M=0,B=0,N=function(){++B>=l&&(B=0,M++)},I={},O=0;O<i.length;O++){var z=i[O],L=t.position(z);if(L&&(void 0!==L.row||void 0!==L.col)){var A={row:L.row,col:L.col};if(void 0===A.col)for(A.col=0;D(A.row,A.col);)A.col++;else if(void 0===A.row)for(A.row=0;D(A.row,A.col);)A.row++;I[z.id()]=A,T(A.row,A.col)}}i.layoutPositions(this,t,(function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=I[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;D(M,B);)N();n=B*m+m/2+a.x1,r=M*b+b/2+a.y1,T(M,B),N()}return{x:n,y:r}}))}return this};var Ro={ready:function(){},stop:function(){}};function Fo(e){this.options=U({},Ro,e)}Fo.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},Fo.prototype.stop=function(){return this};var Vo={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function qo(e){this.options=U({},Vo,e)}qo.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=T(e.positions);return t.layoutPositions(this,e,(function(t,r){var i=function(t){if(null==e.positions)return function(e){return{x:e.x,y:e.y}}(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}(t);return!t.locked()&&null!=i&&i})),this};var Yo={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Xo(e){this.options=U({},Yo,e)}Xo.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=ht(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});return n.nodes().layoutPositions(this,e,(function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}})),this};var Wo=[{name:"breadthfirst",impl:lo},{name:"circle",impl:ho},{name:"concentric",impl:vo},{name:"cose",impl:yo},{name:"grid",impl:jo},{name:"null",impl:Fo},{name:"preset",impl:qo},{name:"random",impl:Xo}];function Go(e){this.options=e,this.notifications=0}var Ho=function(){},Uo=function(){throw new Error("A headless instance can not render images")};Go.prototype={recalculateRenderedStyle:Ho,notify:function(){this.notifications++},init:Ho,isHeadless:function(){return!0},png:Uo,jpg:Uo};var Ko={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,u=i.x+n/2+o,l=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=u&&l<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],u=e[o+1];a.push(r(s,u,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){D(s)&&(s=e[s]),e[r]=U({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var u=a(i(this.points,n+2*s,r,o));return Ct(e,t,u)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:xe,roughCollide:xe,draw:Ee,spacing:we,gap:we}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var u=i(this.points,n,a,o),l=this.controlPoint,c=r(l[0],l[1],n,a,o);t.arrowShapeImpl(this.name)(e,u,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,u){var l=a(i(this.points,n+2*u,r,o)),c=a(i(this.pointsTee,n+2*u,r,o));return Ct(e,t,l)||Ct(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),u=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,u)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,u){var l=o,c=Math.pow(l.x-e,2)+Math.pow(l.y-t,2)<=Math.pow((n+2*u)*this.radius,2),d=a(i(this.points,n+2*u,r,o));return Ct(e,t,d)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e;return n[3]=n[3]-r,n[5]=n[5]-r,n},collide:function(e,t,n,r,o,s,u){var l=a(i(this.points,n+2*u,r,o)),c=a(i(this.crossLinePts(n,s),n+2*u,r,o));return Ct(e,t,l)||Ct(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),u=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,u)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},Zo={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),u=n.zoom();return[((e-i)/o-s.x)/u,((t-a)/o-s.y)/u]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=this.cy.window().getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i=r("padding-left"),a=r("padding-right"),o=r("padding-top"),s=r("padding-bottom"),u=r("border-left-width"),l=r("border-right-width"),c=r("border-top-width"),d=(r("border-bottom-width"),e.clientWidth),h=e.clientHeight,f=i+a,p=o+s,v=u+l,g=t.width/(d+v),y=d-f,m=h-p,b=t.left+i+u,x=t.top+o+c;return this.containerBB=[b,x,y,m,g]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,u=s.getCachedZSortedEles(),l=[],c=s.cy.zoom(),d=s.cy.hasCompoundNodes(),h=(r?24:8)/c,f=(r?8:2)/c,p=(r?8:2)/c,v=1/0;function g(e,t){if(e.isNode()){if(a)return;a=e,l.push(e)}if(e.isEdge()&&(null==t||t<v))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<l.length;n++)if(l[n].isEdge()){l[n]=e,i=e,v=null!=t?t:v;break}}else l.push(e),i=e,v=null!=t?t:v}function y(n){var r=n.outerWidth()+2*f,i=n.outerHeight()+2*f,a=r/2,u=i/2,l=n.position();if(l.x-a<=e&&e<=l.x+a&&l.y-u<=t&&t<=l.y+u&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,l.x,l.y))return g(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,u=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,f=u/2+h,p=f*f,v=2*f,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(wt(e,t,x[w],x[w+1],x[w+2],x[w+3],v)&&p>(r=_t(e,t,x[w],x[w+1],x[w+2],x[w+3])))return g(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5<a.allpts.length;w+=4)if(Et(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],v)&&p>(r=kt(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return g(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(u,c),k=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<k.length;w++){var _=k[w],C=s.arrowShapes[n.pstyle(_.name+"-arrow-shape").value],S=n.pstyle("width").pfValue;if(C.roughCollide(e,t,E,_.angle,{x:_.x,y:_.y},S,h)&&C.collide(e,t,E,_.angle,{x:_.x,y:_.y},S,h))return g(n),!0}d&&l.length>0&&(y(m),y(b))}function b(e,t,n){return Ie(e,t,n)}function x(n,r){var i,a=n._private,o=p;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],u=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&u){var l=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),d=b(a.rscratch,"labelAngle",r),h=n.pstyle(i+"text-margin-x").pfValue,f=n.pstyle(i+"text-margin-y").pfValue,v=s.x1-o-h,y=s.x2+o-h,m=s.y1-o-f,x=s.y2+o-f;if(d){var w=Math.cos(d),E=Math.sin(d),k=function(e,t){return{x:(e-=l)*w-(t-=c)*E+l,y:e*E+t*w+c}},_=k(v,m),C=k(v,x),S=k(y,m),P=k(y,x),D=[_.x+h,_.y+f,S.x+h,S.y+f,P.x+h,P.y+f,C.x+h,C.y+f];if(Ct(e,t,D))return g(n),!0}else if(mt(s,e,t))return g(n),!0}}n&&(u=u.interactive);for(var w=u.length-1;w>=0;w--){var E=u[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return l},getAllInBox:function(e,t,n,r){for(var i,a,o=this.getCachedZSortedEles().interactive,s=[],u=Math.min(e,n),l=Math.max(e,n),c=Math.min(t,r),d=Math.max(t,r),h=ht({x1:e=u,y1:t=c,x2:n=l,y2:r=d}),f=0;f<o.length;f++){var p=o[f];if(p.isNode()){var v=p,g=v.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});yt(h,g)&&!bt(g,h)&&s.push(v)}else{var y=p,m=y._private,b=m.rscratch;if(null!=b.startX&&null!=b.startY&&!mt(h,b.startX,b.startY))continue;if(null!=b.endX&&null!=b.endY&&!mt(h,b.endX,b.endY))continue;if("bezier"===b.edgeType||"multibezier"===b.edgeType||"self"===b.edgeType||"compound"===b.edgeType||"segments"===b.edgeType||"haystack"===b.edgeType){for(var x=m.rstyle.bezierPts||m.rstyle.linePts||m.rstyle.haystackPts,w=!0,E=0;E<x.length;E++)if(i=h,a=x[E],!mt(i,a.x,a.y)){w=!1;break}w&&s.push(y)}else"haystack"!==b.edgeType&&"straight"!==b.edgeType||s.push(y)}}return s}},$o={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,u="haystack"===s.edgeType,l="bezier"===s.edgeType,c="multibezier"===s.edgeType,d="segments"===s.edgeType,h="compound"===s.edgeType,f="self"===s.edgeType;if(u?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),v=s.midX,g=s.midY,d)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||h||f||l){var p=s.allpts;t=r-lt(p[0],p[2],p[4],.1),n=i-lt(p[1],p[3],p[5],.1)}else t=r-v,n=i-g;s.srcArrowAngle=rt(t,n);var v=s.midX,g=s.midY;if(u&&(v=(r+a)/2,g=(i+o)/2),t=a-r,n=o-i,d)if((p=s.allpts).length/2%2==0){var y=(m=p.length/2)-2;t=p[m]-p[y],n=p[m+1]-p[y+1]}else{y=(m=p.length/2-1)-2;var m,b=m+2;t=p[m]-p[y],n=p[m+1]-p[y+1]}else if(c||h||f){var x,w,E,k,p=s.allpts;if(s.ctrlpts.length/2%2==0){var _=(C=(S=p.length/2-1)+2)+2;x=lt(p[S],p[C],p[_],0),w=lt(p[S+1],p[C+1],p[_+1],0),E=lt(p[S],p[C],p[_],1e-4),k=lt(p[S+1],p[C+1],p[_+1],1e-4)}else{var C,S;_=(C=p.length/2-1)+2;x=lt(p[S=C-2],p[C],p[_],.4999),w=lt(p[S+1],p[C+1],p[_+1],.4999),E=lt(p[S],p[C],p[_],.5),k=lt(p[S+1],p[C+1],p[_+1],.5)}t=E-x,n=k-w}(s.midtgtArrowAngle=rt(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,d)&&((p=s.allpts).length/2%2==0||(t=-(p[b=(m=p.length/2-1)+2]-p[m]),n=-(p[b+1]-p[m+1])));if(s.midsrcArrowAngle=rt(t,n),d)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||h||f||l){var P=(p=s.allpts).length;t=a-lt(p[P-6],p[P-4],p[P-2],.9),n=o-lt(p[P-5],p[P-3],p[P-1],.9)}else t=a-v,n=o-g;s.tgtArrowAngle=rt(t,n)}};$o.getArrowWidth=$o.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var Qo={};function Jo(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}Qo.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,u=o.position(),l=s.position(),c=o.width(),d=s.width(),h=o.height(),f=s.height(),p=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*p+u.x,i.source.y*h*p+u.y,i.target.x*d*p+l.x,i.target.y*f*p+l.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},Qo.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("edge-distances").value,s=e.pstyle("segment-weights"),u=e.pstyle("segment-distances"),l=Math.min(s.pfValue.length,u.pfValue.length);n.edgeType="segments",n.segpts=[];for(var c=0;c<l;c++){var d=s.pfValue[c],h=u.pfValue[c],f=1-d,p=d,v="node-position"===o?r:i,g={x:v.x1*f+v.x2*p,y:v.y1*f+v.y2*p};n.segpts.push(g.x+a.x*h,g.y+a.y*h)}},Qo.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),u=s?s.pfValue[0]:void 0,l=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,d=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var h=n,f=d;r&&(h=0,f=u);var p=l-Math.PI/2,v=p-c/2,g=p+c/2,y=String(l+"_"+c);h=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(v)*f*(h/3+1),o.y+1.4*Math.sin(v)*f*(h/3+1),o.x+1.4*Math.cos(g)*f*(h/3+1),o.y+1.4*Math.sin(g)*f*(h/3+1)]},Qo.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,u=t.srcH,l=t.tgtW,c=t.tgtH,d=e.pstyle("control-point-step-size").pfValue,h=e.pstyle("control-point-distances"),f=h?h.pfValue[0]:void 0,p=n,v=d;r&&(p=0,v=f);var g={x:a.x-s/2,y:a.y-u/2},y={x:o.x-l/2,y:o.y-c/2},m={x:Math.min(g.x,y.x),y:Math.min(g.y,y.y)},b=Math.max(.5,Math.log(.01*s)),x=Math.max(.5,Math.log(.01*l));i.ctrlpts=[m.x,m.y-(1+Math.pow(50,1.12)/100)*v*(p/3+1)*b,m.x-(1+Math.pow(50,1.12)/100)*v*(p/3+1)*x,m.y]},Qo.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},Qo.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=t.vectorNormInverse,s=t.posPts,u=t.intersectionPts,l=e.pstyle("edge-distances").value,c=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),h=e.pstyle("control-point-weights"),f=d&&h?Math.min(d.value.length,h.value.length):1,p=d?d.pfValue[0]:void 0,v=h.value[0],g=r;a.edgeType=g?"multibezier":"bezier",a.ctrlpts=[];for(var y=0;y<f;y++){var m=(.5-t.eles.length/2+n)*c*(i?-1:1),b=void 0,x=at(m);g&&(p=d?d.pfValue[y]:c,v=h.value[y]);var w=void 0!==(b=r?p:void 0!==p?x*p:void 0)?b:m,E=1-v,k=v,_="node-position"===l?s:u,C={x:_.x1*E+_.x2*k,y:_.y1*E+_.y2*k};a.ctrlpts.push(C.x+o.x*w,C.y+o.y*w)}},Qo.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",u="upward",l=t.posPts,c=t.srcW,d=t.srcH,h=t.tgtW,f=t.tgtH,p="node-position"!==e.pstyle("edge-distances").value,v=e.pstyle("taxi-direction").value,g=v,y=e.pstyle("taxi-turn"),m="%"===y.units,b=y.pfValue,x=b<0,w=e.pstyle("taxi-turn-min-distance").pfValue,E=p?(c+h)/2:0,k=p?(d+f)/2:0,_=l.x2-l.x1,C=l.y2-l.y1,S=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},P=S(_,E),D=S(C,k),T=!1;"auto"===g?v=Math.abs(P)>Math.abs(D)?i:r:g===u||g===s?(v=r,T=!0):g!==a&&g!==o||(v=i,T=!0);var M,B=v===r,N=B?D:P,I=B?C:_,O=at(I),z=!1;(T&&(m||x)||!(g===s&&I<0||g===u&&I>0||g===a&&I>0||g===o&&I<0)||(N=(O*=-1)*Math.abs(N),z=!0),m)?M=(b<0?1+b:b)*N:M=(b<0?N:0)+b*O;var L=function(e){return Math.abs(e)<w||Math.abs(e)>=Math.abs(N)},A=L(M),j=L(Math.abs(N)-Math.abs(M));if((A||j)&&!z)if(B){var R=Math.abs(I)<=d/2,F=Math.abs(_)<=h/2;if(R){var V=(l.x1+l.x2)/2,q=l.y1,Y=l.y2;n.segpts=[V,q,V,Y]}else if(F){var X=(l.y1+l.y2)/2,W=l.x1,G=l.x2;n.segpts=[W,X,G,X]}else n.segpts=[l.x1,l.y2]}else{var H=Math.abs(I)<=c/2,U=Math.abs(C)<=f/2;if(H){var K=(l.y1+l.y2)/2,Z=l.x1,$=l.x2;n.segpts=[Z,K,$,K]}else if(U){var Q=(l.x1+l.x2)/2,J=l.y1,ee=l.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[l.x2,l.y1]}else if(B){var te=l.y1+M+(p?d/2*O:0),ne=l.x1,re=l.x2;n.segpts=[ne,te,re,te]}else{var ie=l.x1+M+(p?c/2*O:0),ae=l.y1,oe=l.y2;n.segpts=[ie,ae,ie,oe]}},Qo.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,u=t.tgtH,l=t.srcShape,c=t.tgtShape,d=!N(n.startX)||!N(n.startY),h=!N(n.arrowStartX)||!N(n.arrowStartY),f=!N(n.endX)||!N(n.endY),p=!N(n.arrowEndX)||!N(n.arrowEndY),v=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),g=ot({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=g<v,m=ot({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<v,x=!1;if(d||h||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),k={x:w.x/E,y:w.y/E},_=Math.max(a,o),C={x:n.ctrlpts[0]+2*k.x*_,y:n.ctrlpts[1]+2*k.y*_},S=l.intersectLine(r.x,r.y,a,o,C.x,C.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+k.x*(v-g),n.ctrlpts[1]=n.ctrlpts[1]+k.y*(v-g)):(n.ctrlpts[0]=S[0]+k.x*v,n.ctrlpts[1]=S[1]+k.y*v)}if(f||p||b){x=!0;var P={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},D=Math.sqrt(P.x*P.x+P.y*P.y),T={x:P.x/D,y:P.y/D},M=Math.max(a,o),B={x:n.ctrlpts[0]+2*T.x*M,y:n.ctrlpts[1]+2*T.y*M},I=c.intersectLine(i.x,i.y,s,u,B.x,B.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+T.x*(v-m),n.ctrlpts[1]=n.ctrlpts[1]+T.y*(v-m)):(n.ctrlpts[0]=I[0]+T.x*v,n.ctrlpts[1]=I[1]+T.y*v)}x&&this.findEndpoints(e)}},Qo.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,.5,t.midX=lt(t.allpts[r],t.allpts[r+2],t.allpts[r+4],.5),t.midY=lt(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],.5))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var i=t.segpts.length/2,a=i-2;t.midX=(t.segpts[a]+t.segpts[i])/2,t.midY=(t.segpts[a+1]+t.segpts[i+1])/2}else{var o=t.segpts.length/2-1;t.midX=t.segpts[o],t.midY=t.segpts[o+1]}},Qo.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||N(t.startX)&&N(t.startY)&&N(t.endX)&&N(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Ce("Edge `"+e.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))},Qo.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new ze,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new ze,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var u=e[s],l=u._private,c=u.pstyle("curve-style").value;if(!u.removed()&&u.takesUpSpace())if("haystack"!==c){var d="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,h="unbundled-bezier"===c||"bezier"===c,f=l.source,p=l.target,v=[f.poolIndex(),p.poolIndex()].sort(),g=i.get(v);null==g&&(g={eles:[]},i.set(v,g),a.push(v)),g.eles.push(u),d&&(g.hasUnbundled=!0),h&&(g.hasBezier=!0)}else o.push(u)}for(var y=function(e){var o=a[e],s=i.get(o),u=void 0;if(!s.hasUnbundled){var l=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Ne(s.eles),l.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],d=c.source(),h=c.target();if(d.poolIndex()>h.poolIndex()){var f=d;d=h,h=f}var p=s.srcPos=d.position(),v=s.tgtPos=h.position(),g=s.srcW=d.outerWidth(),y=s.srcH=d.outerHeight(),m=s.tgtW=h.outerWidth(),b=s.tgtH=h.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(d)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(h)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var k=s.eles[E],_=k[0]._private.rscratch,C=k.pstyle("curve-style").value,S="unbundled-bezier"===C||"segments"===C||"taxi"===C,P=!d.same(k.source());if(!s.calculatedIntersection&&d!==h&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var D=x.intersectLine(p.x,p.y,g,y,v.x,v.y,0),T=s.srcIntn=D,M=w.intersectLine(v.x,v.y,m,b,p.x,p.y,0),B=s.tgtIntn=M,I=s.intersectionPts={x1:D[0],x2:M[0],y1:D[1],y2:M[1]},O=s.posPts={x1:p.x,x2:v.x,y1:p.y,y2:v.y},z=M[1]-D[1],L=M[0]-D[0],A=Math.sqrt(L*L+z*z),j=s.vector={x:L,y:z},R=s.vectorNorm={x:j.x/A,y:j.y/A},F={x:-R.y,y:R.x};s.nodesOverlap=!N(A)||w.checkPoint(D[0],D[1],0,m,b,v.x,v.y)||x.checkPoint(M[0],M[1],0,g,y,p.x,p.y),s.vectorNormInverse=F,u={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:v,tgtPos:p,srcW:m,srcH:b,tgtW:g,tgtH:y,srcIntn:B,tgtIntn:T,srcShape:w,tgtShape:x,posPts:{x1:O.x2,y1:O.y2,x2:O.x1,y2:O.y1},intersectionPts:{x1:I.x2,y1:I.y2,x2:I.x1,y2:I.y1},vector:{x:-j.x,y:-j.y},vectorNorm:{x:-R.x,y:-R.y},vectorNormInverse:{x:-F.x,y:-F.y}}}var V=P?u:s;_.nodesOverlap=V.nodesOverlap,_.srcIntn=V.srcIntn,_.tgtIntn=V.tgtIntn,r&&(d.isParent()||d.isChild()||h.isParent()||h.isChild())&&(d.parents().anySame(h)||h.parents().anySame(d)||d.same(h)&&d.isParent())?t.findCompoundLoopPoints(k,V,E,S):d===h?t.findLoopPoints(k,V,E,S):"segments"===C?t.findSegmentsPoints(k,V):"taxi"===C?t.findTaxiPoints(k,V):"straight"===C||!S&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(k):t.findBezierPoints(k,V,E,S,P),t.findEndpoints(k),t.tryToCorrectInvalidPoints(k,V),t.checkForInvalidEdgeWarning(k),t.storeAllpts(k),t.storeEdgeProjections(k),t.calculateArrowAngles(k),t.recalculateEdgeLabelProjections(k),t.calculateLabelAngles(k)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},Qo.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),Jo(t.segpts)},Qo.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),Jo(t.ctrlpts)},Qo.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var es={manualEndptToPx:function(e,t){var n=e.position(),r=e.outerWidth(),i=e.outerHeight();if(2===t.value.length){var a=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(a[0]=a[0]*r),"%"===t.units[1]&&(a[1]=a[1]*i),a[0]+=n.x,a[1]+=n.y,a}var o=t.pfValue[0];o=-Math.PI/2+o;var s=2*Math.max(r,i),u=[n.x+Math.cos(o)*s,n.y+Math.sin(o)*s];return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x,n.y,r,i,u[0],u[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],u=e.target()[0],l=s.position(),c=u.position(),d=e.pstyle("target-arrow-shape").value,h=e.pstyle("source-arrow-shape").value,f=e.pstyle("target-distance-from-node").pfValue,p=e.pstyle("source-distance-from-node").pfValue,v=e.pstyle("curve-style").value,g=e._private.rscratch,y=g.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,k=b||x||w,_=m||"taxi"===v,C=e.pstyle("source-endpoint"),S=_?"outside-to-node":C.value,P=e.pstyle("target-endpoint"),D=_?"outside-to-node":P.value;if(g.srcManEndpt=C,g.tgtManEndpt=P,b){var T=[g.ctrlpts[0],g.ctrlpts[1]];n=x?[g.ctrlpts[g.ctrlpts.length-2],g.ctrlpts[g.ctrlpts.length-1]]:T,r=T}else if(w){var M=E?g.segpts.slice(0,2):[c.x,c.y];n=E?g.segpts.slice(g.segpts.length-2):[l.x,l.y],r=M}if("inside-to-node"===D)t=[c.x,c.y];else if(P.units)t=this.manualEndptToPx(u,P);else if("outside-to-line"===D)t=g.tgtIntn;else if("outside-to-node"===D||"outside-to-node-or-label"===D?i=n:"outside-to-line"!==D&&"outside-to-line-or-label"!==D||(i=[l.x,l.y]),t=o.nodeShapes[this.getNodeShape(u)].intersectLine(c.x,c.y,u.outerWidth(),u.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===D||"outside-to-line-or-label"===D){var B=u._private.rscratch,I=B.labelWidth,O=B.labelHeight,z=B.labelX,L=B.labelY,A=I/2,j=O/2,R=u.pstyle("text-valign").value;"top"===R?L-=j:"bottom"===R&&(L+=j);var F=u.pstyle("text-halign").value;"left"===F?z-=A:"right"===F&&(z+=A);var V=It(i[0],i[1],[z-A,L-j,z+A,L-j,z+A,L+j,z-A,L+j],c.x,c.y);if(V.length>0){var q=l,Y=st(q,nt(t)),X=st(q,nt(V)),W=Y;if(X<Y&&(t=V,W=X),V.length>2)st(q,{x:V[2],y:V[3]})<W&&(t=[V[2],V[3]])}}var G=Ot(t,n,o.arrowShapes[d].spacing(e)+f),H=Ot(t,n,o.arrowShapes[d].gap(e)+f);if(g.endX=H[0],g.endY=H[1],g.arrowEndX=G[0],g.arrowEndY=G[1],"inside-to-node"===S)t=[l.x,l.y];else if(C.units)t=this.manualEndptToPx(s,C);else if("outside-to-line"===S)t=g.srcIntn;else if("outside-to-node"===S||"outside-to-node-or-label"===S?a=r:"outside-to-line"!==S&&"outside-to-line-or-label"!==S||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(l.x,l.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0),"outside-to-node-or-label"===S||"outside-to-line-or-label"===S){var U=s._private.rscratch,K=U.labelWidth,Z=U.labelHeight,$=U.labelX,Q=U.labelY,J=K/2,ee=Z/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?$-=J:"right"===ne&&($+=J);var re=It(a[0],a[1],[$-J,Q-ee,$+J,Q-ee,$+J,Q+ee,$-J,Q+ee],l.x,l.y);if(re.length>0){var ie=c,ae=st(ie,nt(t)),oe=st(ie,nt(re)),se=ae;if(oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2)st(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var ue=Ot(t,r,o.arrowShapes[h].spacing(e)+p),le=Ot(t,r,o.arrowShapes[h].gap(e)+p);g.startX=le[0],g.startY=le[1],g.arrowStartX=ue[0],g.arrowStartY=ue[1],k&&(N(g.startX)&&N(g.startY)&&N(g.endX)&&N(g.endY)?g.badLine=!1:g.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},ts={};function ns(e,t,n){for(var r=function(e,t,n,r){return lt(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}ts.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ns(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},ts.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var rs={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!R(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),u=e.position(),l=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,d=i.rscratch,h=i.rstyle;switch(l){case"left":n=u.x-a/2-s;break;case"right":n=u.x+a/2+s;break;default:n=u.x}switch(c){case"top":r=u.y-o/2-s;break;case"bottom":r=u.y+o/2+s;break;default:r=u.y}d.labelX=n,d.labelY=r,h.labelX=n,h.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},is=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},as=function(e,t){var n=t.x-e.x,r=t.y-e.y;return is(n,r)};rs.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){Oe(n.rscratch,e,t,r),Oe(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=is(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var u=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},u={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:u,startDist:0,length:0,segments:[]})}var l=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function d(e,t,n,r,i){var a=ot(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var h=0;h<t.length;h++){var f=t[h],p=t[h-1];p&&(f.startDist=p.startDist+p.length),d(f,f.p0,l[h*c],0,i.bezierProjPcts[0]);for(var v=0;v<c-1;v++)d(f,l[h*c+v],l[h*c+v+1],i.bezierProjPcts[v],i.bezierProjPcts[v+1]);d(f,l[h*c+c-1],f.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},l=function(n){var i,s="source"===n;if(a[n]){var l=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,d=u(),h=0,f=0,p=0;p<d.length;p++){for(var v=d[s?p:d.length-1-p],g=0;g<v.segments.length;g++){var y=v.segments[s?g:v.segments.length-1-g],m=p===d.length-1&&g===v.segments.length-1;if(h=f,(f+=y.length)>=l||m){c={cp:v,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(l-h)/x.length,E=x.t1-x.t0,k=s?x.t0+E*w:x.t1-E*w;k=dt(0,k,1),t=ct(b.p0,b.p1,b.p2,k),i=function(e,t,n,r){var i=dt(0,r-.001,1),a=dt(0,r+.001,1),o=ct(e,t,n,i),s=ct(e,t,n,a);return as(o,s)}(b.p0,b.p1,b.p2,k);break;case"straight":case"segments":case"haystack":for(var _,C,S,P,D=0,T=r.allpts.length,M=0;M+3<T&&(s?(S={x:r.allpts[M],y:r.allpts[M+1]},P={x:r.allpts[M+2],y:r.allpts[M+3]}):(S={x:r.allpts[T-2-M],y:r.allpts[T-1-M]},P={x:r.allpts[T-4-M],y:r.allpts[T-3-M]}),C=D,!((D+=_=ot(S,P))>=l));M+=2);var B=(l-C)/_;B=dt(0,B,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=ot(e,t),s=i/o,u=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+u*r}}(S,P,B),i=as(S,P)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};l("source"),l("target"),this.applyLabelDimensions(e)}},rs.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},rs.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Ie(n.rscratch,"labelWrapCachedLines",t)||[],u="wrap"!==o?1:Math.max(s.length,1),l=i.height/u,c=l*a,d=i.width,h=i.height+(u-1)*(a-1)*l;Oe(n.rstyle,"labelWidth",t,d),Oe(n.rscratch,"labelWidth",t,d),Oe(n.rstyle,"labelHeight",t,h),Oe(n.rscratch,"labelHeight",t,h),Oe(n.rscratch,"labelLineHeight",t,c)},rs.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(Oe(n.rscratch,e,t,r),r):Ie(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var u=o("labelKey");if(null!=u&&o("labelWrapKey")===u)return o("labelWrapCachedText");for(var l=i.split("\n"),c=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,h=[],f=/[\s\u200b]+/,p=d?"":" ",v=0;v<l.length;v++){var g=l[v],y=this.calculateLabelDimensions(e,g).width;if(d){var m=g.split("").join("\u200b");g=m}if(y>c){for(var b=g.split(f),x="",w=0;w<b.length;w++){var E=b[w],k=0===x.length?E:x+p+E;this.calculateLabelDimensions(e,k).width<=c?x+=E+p:(x&&h.push(x),x=E+p)}x.match(/^[\s\u200b]+$/)||h.push(x)}else h.push(g)}o("labelWrapCachedLines",h),i=o("labelWrapCachedText",h.join("\n")),o("labelWrapKey",u)}else if("ellipsis"===s){var _=e.pstyle("text-max-width").pfValue,C="",S=!1;if(this.calculateLabelDimensions(e,i).width<_)return i;for(var P=0;P<i.length;P++){if(this.calculateLabelDimensions(e,C+i[P]+"\u2026").width>_)break;C+=i[P],P===i.length-1&&(S=!0)}return S||(C+="\u2026"),C}return i},rs.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},rs.calculateLabelDimensions=function(e,t){var n=he(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,u=e.pstyle("font-weight").strValue,l=this.labelCalcCanvas,c=this.labelCalcCanvasContext;if(!l){l=this.labelCalcCanvas=document.createElement("canvas"),c=this.labelCalcCanvasContext=l.getContext("2d");var d=l.style;d.position="absolute",d.left="-9999px",d.top="-9999px",d.zIndex="-1",d.visibility="hidden",d.pointerEvents="none"}c.font="".concat(a," ").concat(u," ").concat(o,"px ").concat(s);for(var h=0,f=0,p=t.split("\n"),v=0;v<p.length;v++){var g=p[v],y=c.measureText(g),m=Math.ceil(y.width),b=o;h=Math.max(m,h),f+=b}return h+=0,f+=0,r[n]={width:h,height:f}},rs.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},rs.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var os={},ss=!1;os.getNodeShape=function(e){var t=e.pstyle("shape").value;if("cutrectangle"===t&&(e.width()<28||e.height()<28))return ss||(Ce("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),ss=!0),"rectangle";if(e.isParent())return"rectangle"===t||"roundrectangle"===t||"round-rectangle"===t||"cutrectangle"===t||"cut-rectangle"===t||"barrel"===t?t:"rectangle";if("polygon"===t){var n=e.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return t};var us={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r],a=i._private,o=a.rstyle;o.clean=!1,o.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],u=s._private.rstyle;s.isNode()&&!u.cleanConnected&&(r(s.connectedEdges()),u.cleanConnected=!0)}if(a)for(var l=0;l<a.length;l++){(0,a[l])(i,t)}n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,u=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(u.clean=!1),t&&u.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),u.clean=!0)}for(var l=0;l<i.length;l++){var c=i[l],d=c._private.rstyle,h=c.position();this.recalculateNodeLabelProjection(c),d.nodeX=h.x,d.nodeY=h.y,d.nodeW=c.pstyle("width").pfValue,d.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var f=0;f<r.length;f++){var p=r[f]._private,v=p.rstyle,g=p.rscratch;v.srcX=g.arrowStartX,v.srcY=g.arrowStartY,v.tgtX=g.arrowEndX,v.tgtY=g.arrowEndY,v.midX=g.midX,v.midY=g.midY,v.labelAngle=g.labelAngle,v.sourceLabelAngle=g.sourceLabelAngle,v.targetLabelAngle=g.targetLabelAngle}}}},ls={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Ui),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},cs={};[Zo,$o,Qo,es,ts,rs,os,us,ls].forEach((function(e){U(cs,e)}));var ds={getCachedImage:function(e,t,n){var r=this.imageCache=this.imageCache||{},i=r[e];if(i)return i.image.complete||i.image.addEventListener("load",n),i.image;var a=(i=r[e]=r[e]||{}).image=new Image;a.addEventListener("load",n),a.addEventListener("error",(function(){a.error=!0}));var o="data:";return e.substring(0,o.length).toLowerCase()===o||(t="null"===t?null:t,a.crossOrigin=t),a.src=e,a}},hs={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)}};hs.binder=function(e){var t,n=this,r=n.cy.window(),i=e===r||e===r.document||e===r.document.body||(t=e,"undefined"!=typeof HTMLElement&&t instanceof HTMLElement);if(null==n.supportsPassiveEvents){var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){return a=!0,!0}});r.addEventListener("test",null,o)}catch(u){}n.supportsPassiveEvents=a}var s=function(t,r,a){var o=Array.prototype.slice.call(arguments);return i&&n.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),n.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:s,addEventListener:s,addListener:s,bind:s}},hs.nodeIsDraggable=function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},hs.nodeIsGrabbable=function(e){return this.nodeIsDraggable(e)&&e.interactive()},hs.load=function(){var e=this,t=e.cy.window(),n=function(e){return e.selected()},r=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},i=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable())for(var i=0;n&&i<n.length;i++){if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},o=function(e){e[0]._private.rscratch.inDragLayer=!0},s=function(e){e[0]._private.rscratch.isGrabTarget=!0},u=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),function(e){e[0]._private.grabbed=!0}(e))},c=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(o),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(o)),n.addToList&&t.forEach((function(e){u(e,n)})),function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(o),n.connectedEdges().forEach(o)),t.addToList&&u(n,t)}}(t,n),f(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},d=c,h=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){!function(e){e[0]._private.grabbed=!1}(e),function(e){e[0]._private.rscratch.inDragLayer=!1}(e),function(e){e[0]._private.rscratch.isGrabTarget=!1}(e)})),e.updateCachedGrabbedEles())},f=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(o),r.forEach(o)),t.addToList&&r.forEach((function(e){u(e,t)}))}}},p=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},v="undefined"!=typeof MutationObserver,g="undefined"!=typeof ResizeObserver;v?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++){if(r[i]===e.container){e.destroy();break}}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var y=l.default((function(){e.cy.resize()}),100);v&&(e.styleObserver=new MutationObserver(y),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(t,"resize",y),g&&(e.resizeObserver=new ResizeObserver(y),e.resizeObserver.observe(e.container));var m=function(){e.invalidateContainerClientCoordsCache()};!function(e,t){for(;null!=e;)t(e),e=e.parentNode}(e.container,(function(t){e.registerBinding(t,"transitionend",m),e.registerBinding(t,"animationend",m),e.registerBinding(t,"scroll",m)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var b,x,w,E=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],u=!1,l=0;l<s.length;l++){var c=s[l];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){u=!0;break}}if(!u)return!1;for(var d=e.container,h=t.target.parentNode,f=!1;h;){if(h===d){f=!0;break}h=h.parentNode}return!!f};e.registerBinding(e.container,"mousedown",(function(t){if(E(t)){t.preventDefault(),p(),e.hoverData.capture=!0,e.hoverData.which=t.which;var n=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,u=e.findNearestElements(a[0],a[1],!0,!1),l=u[0],h=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;if(3==t.which){e.hoverData.cxtStarted=!0;var f={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};l?(l.activate(),l.emit(f),e.hoverData.down=l):n.emit(f),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(l&&l.activate(),null!=l&&e.nodeIsGrabbable(l)){var v=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(s(l),l.selected()){h=e.dragData.possibleDragElements=n.collection();var g=n.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));c(g,{addToList:h}),l.emit(v("grabon")),g.forEach((function(e){e.emit(v("grab"))}))}else h=e.dragData.possibleDragElements=n.collection(),d(l,{addToList:h}),l.emit(v("grabon")).emit(v("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=l,e.hoverData.downs=u,e.hoverData.downTime=(new Date).getTime(),r(l,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==l?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):l.pannable()&&(o[4]=1),e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var r=e.hoverData.down;r?r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(t,"mousemove",(function(t){if(e.hoverData.capture||E(t)){var n=!1,o=e.cy,s=o.zoom(),u=[t.clientX,t.clientY],l=e.projectIntoViewport(u[0],u[1]),d=e.hoverData.mdownPos,f=e.hoverData.mdownGPos,p=e.selection,v=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(v=e.findNearestElement(l[0],l[1],!0,!1));var g,y=e.hoverData.last,m=e.hoverData.down,b=[l[0]-p[2],l[1]-p[3]],x=e.dragData.possibleDragElements;if(f){var w=u[0]-f[0],k=w*w,_=u[1]-f[1],C=k+_*_;e.hoverData.isOverThresholdDrag=g=C>=e.desktopTapThreshold2}var S=i(t);g&&(e.hoverData.tapholdCancelled=!0);n=!0,r(v,["mousemove","vmousemove","tapdrag"],t,{x:l[0],y:l[1]});var P=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:l[0],y:l[1]}}),p[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(g){var D={originalEvent:t,type:"cxtdrag",position:{x:l[0],y:l[1]}};m?m.emit(D):o.emit(D),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&v===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:l[0],y:l[1]}}),e.hoverData.cxtOver=v,v&&v.emit({originalEvent:t,type:"cxtdragover",position:{x:l[0],y:l[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var T;if(e.hoverData.justStartedPan){var M=e.hoverData.mdownPos;T={x:(l[0]-M[0])*s,y:(l[1]-M[1])*s},e.hoverData.justStartedPan=!1}else T={x:b[0]*s,y:b[1]*s};o.panBy(T),o.emit("dragpan"),e.hoverData.dragged=!0}l=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=p[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||v==y||(y&&r(y,["mouseout","tapdragout"],t,{x:l[0],y:l[1]}),v&&r(v,["mouseover","tapdragover"],t,{x:l[0],y:l[1]}),e.hoverData.last=v),m)if(g){if(o.boxSelectionEnabled()&&S)m&&m.grabbed()&&(h(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),P();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var B=!e.dragData.didDrag;B&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||c(x,{inDragLayer:!0});var I={x:0,y:0};if(N(b[0])&&N(b[1])&&(I.x+=b[0],I.y+=b[1],B)){var O=e.hoverData.dragDelta;O&&N(O[0])&&N(O[1])&&(I.x+=O[0],I.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(I).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])}();n=!0}else if(g){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!S&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,p[4]=0,e.data.bgActivePosistion=nt(d),e.redrawHint("select",!0),e.redraw())}}else P();m&&m.pannable()&&m.active()&&m.unactivate()}return p[2]=l[0],p[3]=l[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,u=e.findNearestElement(o[0],o[1],!0,!1),l=e.dragData.possibleDragElements,c=e.hoverData.down,d=i(t);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var f={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(f):a.emit(f),!e.hoverData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(u,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=a.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout((function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).unselect(["tapunselect"]),l.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=l=a.collection()),u!=c||e.dragData.didDrag||e.hoverData.selecting||null!=u&&u._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||d?u.selected()?u.unselect(["tapunselect"]):u.select(["tapselect"]):d||(a.$(n).unmerge(u).unselect(["tapunselect"]),u.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var v=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),v.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var g=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||d||a.$(n).unmerge(v).unselect(),v.emit("box").stdFilter(g).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();h(l),y&&(c.emit("freeon"),l.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),l.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var k,_,C,S,P,D,T,M,B,I,O,z,L,A=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var u=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(u=e.gestureStartZoom*t.scale),n.zoom({level:u,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",A,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||A(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var j,R,F,V,q,Y,X,W=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},G=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",j=function(t){if(e.hasTouchStarted=!0,E(t)){p(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=o[0],i[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=o[0],i[5]=o[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,h(e.dragData.touchDragEles);var u=e.findContainerClientCoords();B=u[0],I=u[1],O=u[2],z=u[3],k=t.touches[0].clientX-B,_=t.touches[0].clientY-I,C=t.touches[1].clientX-B,S=t.touches[1].clientY-I,L=0<=k&&k<=O&&0<=C&&C<=O&&0<=_&&_<=z&&0<=S&&S<=z;var l=n.pan(),f=n.zoom();P=W(k,_,C,S),D=G(k,_,C,S),M=[((T=[(k+C)/2,(_+S)/2])[0]-l.x)/f,(T[1]-l.y)/f];if(D<4e4&&!t.touches[2]){var v=e.findNearestElement(i[0],i[1],!0,!0),g=e.findNearestElement(i[2],i[3],!0,!0);return v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):g&&g.isNode()?(g.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=g):n.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var y=e.findNearestElements(i[0],i[1],!0,!0),m=y[0];if(null!=m&&(m.activate(),e.touchData.start=m,e.touchData.starts=y,e.nodeIsGrabbable(m))){var b=e.dragData.touchDragEles=n.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),c(x,{addToList:b})):d(m,{addToList:b}),s(m);var w=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(w("grabon")),x?x.forEach((function(e){e.emit(w("grab"))})):m.emit(w("grab"))}r(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var N=e.touchData.startPosition=[null,null,null,null,null,null],A=0;A<i.length;A++)N[A]=a[A]=i[A];var j=t.touches[0];e.touchData.startGPosition=[j.clientX,j.clientY]}}},!1),e.registerBinding(window,"touchmove",R=function(t){var n=e.touchData.capture;if(n||E(t)){var i=e.selection,o=e.cy,s=e.touchData.now,u=e.touchData.earlier,l=o.zoom();if(t.touches[0]){var d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=d[0],s[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=d[0],s[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=d[0],s[5]=d[1]}var f,p=e.touchData.startGPosition;if(n&&t.touches[0]&&p){for(var v=[],g=0;g<s.length;g++)v[g]=s[g]-u[g];var y=t.touches[0].clientX-p[0],m=y*y,b=t.touches[0].clientY-p[1];f=m+b*b>=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-B,w=t.touches[0].clientY-I,T=t.touches[1].clientX-B,O=t.touches[1].clientY-I,z=G(x,w,T,O);if(z/D>=2.25||z>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var A={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(A),e.touchData.start=null):o.emit(A)}}if(n&&e.touchData.cxt){A={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}};e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(A):o.emit(A),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var j=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&j===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=j,j&&j.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var R=0;R<ee.length;R++){var F=ee[R]._private;F.grabbed=!1,F.rscratch.inDragLayer=!1}}var V=e.touchData.start,q=(x=t.touches[0].clientX-B,w=t.touches[0].clientY-I,T=t.touches[1].clientX-B,O=t.touches[1].clientY-I,W(x,w,T,O)),Y=q/P;if(L){var X=(x-k+(T-C))/2,H=(w-_+(O-S))/2,U=o.zoom(),K=U*Y,Z=o.pan(),$=M[0]*U+Z.x,Q=M[1]*U+Z.y,J={x:-K/U*($-Z.x-X)+$,y:-K/U*(Q-Z.y-H)+Q};if(V&&V.active()){var ee=e.dragData.touchDragEles;h(ee),e.redrawHint("drag",!0),e.redrawHint("eles",!0),V.unactivate().emit("freeon"),ee.emit("free"),e.dragData.didDrag&&(V.emit("dragfreeon"),ee.emit("dragfree"))}o.viewport({zoom:K,pan:J,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),P=q,k=x,_=w,C=T,S=O,e.pinching=!0}if(t.touches[0]){d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=d[0],s[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=d[0],s[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=d[0],s[5]=d[1]}}else if(t.touches[0]&&!e.touchData.didSelect){var te=e.touchData.start,ne=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(j=e.findNearestElement(s[0],s[1],!0,!0)),n&&null!=te&&t.preventDefault(),n&&null!=te&&e.nodeIsDraggable(te))if(f){ee=e.dragData.touchDragEles;var re=!e.dragData.didDrag;re&&c(ee,{inDragLayer:!0}),e.dragData.didDrag=!0;var ie={x:0,y:0};if(N(v[0])&&N(v[1]))if(ie.x+=v[0],ie.y+=v[1],re)e.redrawHint("eles",!0),(ae=e.touchData.dragDelta)&&N(ae[0])&&N(ae[1])&&(ie.x+=ae[0],ie.y+=ae[1]);e.hoverData.draggingEles=!0,ee.silentShift(ie).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==u[0]&&e.touchData.startPosition[1]==u[1]&&e.redrawHint("eles",!0),e.redraw()}else{var ae;0===(ae=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(ae.push(v[0]),ae.push(v[1])):(ae[0]+=v[0],ae[1]+=v[1])}if(r(te||j,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),te&&te.grabbed()||j==ne||(ne&&ne.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),j&&j.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=j,n)for(R=0;R<s.length;R++)s[R]&&e.touchData.startPosition[R]&&f&&(e.touchData.singleTouchMoved=!0);if(n&&(null==te||te.pannable())&&o.panningEnabled()&&o.userPanningEnabled()){a(te,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=nt(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:v[0]*l,y:v[1]*l}),o.emit("dragpan")):f&&(e.swipePanning=!0,o.panBy({x:y*l,y:b*l}),o.emit("dragpan"),te&&(te.unactivate(),e.redrawHint("select",!0),e.touchData.start=null)));d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=d[0],s[1]=d[1]}}for(g=0;g<s.length;g++)u[g]=s[g];n&&t.touches.length>0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",F=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",V=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,u=s.zoom(),l=e.touchData.now,c=e.touchData.earlier;if(t.touches[0]){var d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);l[0]=d[0],l[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);l[2]=d[0],l[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);l[4]=d[0],l[5]=d[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:l[0],y:l[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var f={originalEvent:t,type:"cxttap",position:{x:l[0],y:l[1]}};i?i.emit(f):s.emit(f)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:t,position:{x:l[0],y:l[1]}});p.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var v=e.dragData.touchDragEles;if(null!=i){var g=i._private.grabbed;h(v),e.redrawHint("drag",!0),e.redrawHint("eles",!0),g&&(i.emit("freeon"),v.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),v.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(l[0],l[1],!0,!0);r(y,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]})}var m=e.touchData.startPosition[0]-l[0],b=m*m,x=e.touchData.startPosition[1]-l[1],w=(b+x*x)*u*u;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:l[0],y:l[1]}),q=!1,t.timeStamp-X<=s.multiClickDebounceTime()?(Y&&clearTimeout(Y),q=!0,X=null,r(i,["dbltap","vdblclick"],t,{x:l[0],y:l[1]})):(Y=setTimeout((function(){q||r(i,["onetap","voneclick"],t,{x:l[0],y:l[1]})}),s.multiClickDebounceTime()),X=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(n).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var E=0;E<l.length;E++)c[E]=l[E];e.dragData.didDrag=!1,0===t.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=[null,null,null,null,null,null],e.touchData.startGPosition=null,e.touchData.didSelect=!1),t.touches.length<2&&(1===t.touches.length&&(e.touchData.startGPosition=[t.touches[0].clientX,t.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var H=[],U=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},K=function(e){H.push(function(e){return{event:e,touch:U(e)}}(e))},Z=function(e){for(var t=0;t<H.length;t++){if(H[t].event.pointerId===e.pointerId)return void H.splice(t,1)}},$=function(e){e.touches=H.map((function(e){return e.touch}))},Q=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){Q(e)||(e.preventDefault(),K(e),$(e),j(e))})),e.registerBinding(e.container,"pointerup",(function(e){Q(e)||(Z(e),$(e),V(e))})),e.registerBinding(e.container,"pointercancel",(function(e){Q(e)||(Z(e),$(e),F())})),e.registerBinding(e.container,"pointermove",(function(e){Q(e)||(e.preventDefault(),function(e){var t=H.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=U(e)}(e),$(e),R(e))}))}};var fs={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return It(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return St(e,t,this.points,a,o,r,i,[0,-1],n)}}}};fs.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var u=Math.sqrt(o*o+s*s),l=u-1;if(l<0)return[];var c=l/u;return[(n-e)*c+e,(r-t)*c+t]}(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return Tt(e,t,r,i,a,o,n)}}},fs.generateRoundPolygon=function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],u=Math.sqrt(o*o+s*s);n[4*r+2]=o/u,n[4*r+3]=s/u}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o,s){for(var u,l=[],c=new Array(n.length),d=a/2,h=o/2,f=Rt(a,o),p=0;p<n.length/4;p++){var v,g=void 0;g=0===p?n.length-2:4*p-2,v=4*p+2;var y=r+d*n[4*p],m=i+h*n[4*p+1],b=-n[g]*n[v]-n[g+1]*n[v+1],x=f/Math.tan(Math.acos(b)/2),w=y-x*n[g],E=m-x*n[g+1],k=y+x*n[v],_=m+x*n[v+1];0===p?(c[n.length-2]=w,c[n.length-1]=E):(c[4*p-2]=w,c[4*p-1]=E),c[4*p]=k,c[4*p+1]=_;var C=n[g+1],S=-n[g];C*n[v]+S*n[v+1]<0&&(C*=-1,S*=-1),0!==(u=Mt(e,t,r,i,w+C*f,E+S*f,f)).length&&l.push(u[0],u[1])}for(var P=0;P<c.length/4;P++)0!==(u=Nt(e,t,r,i,c[4*P],c[4*P+1],c[4*P+2],c[4*P+3],!1)).length&&l.push(u[0],u[1]);if(l.length>2){for(var D=[l[0],l[1]],T=Math.pow(D[0]-e,2)+Math.pow(D[1]-t,2),M=1;M<l.length/2;M++){var B=Math.pow(l[2*M]-e,2)+Math.pow(l[2*M+1]-t,2);B<=T&&(D[0]=l[2*M],D[1]=l[2*M+1],T=B)}return D}return l}(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o){for(var s=new Array(n.length),u=a/2,l=o/2,c=Rt(a,o),d=c*c,h=0;h<n.length/4;h++){var f,p=void 0;p=0===h?n.length-2:4*h-2,f=4*h+2;var v=r+u*n[4*h],g=i+l*n[4*h+1],y=-n[p]*n[f]-n[p+1]*n[f+1],m=c/Math.tan(Math.acos(y)/2),b=v-m*n[p],x=g-m*n[p+1],w=v+m*n[f],E=g+m*n[f+1];s[4*h]=b,s[4*h+1]=x,s[4*h+2]=w,s[4*h+3]=E;var k=n[p+1],_=-n[p];k*n[f]+_*n[f+1]<0&&(k*=-1,_*=-1);var C=b+k*c,S=x+_*c;if(Math.pow(C-e,2)+Math.pow(S-t,2)<=d)return!0}return Ct(e,t,s)}(e,t,this.points,a,o,r,i)}}},fs.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return xt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=jt(r,i),u=2*s;return!!St(e,t,this.points,a,o,r,i-u,[0,-1],n)||(!!St(e,t,this.points,a,o,r-u,i,[0,-1],n)||(!!Tt(e,t,u,u,a-r/2+s,o-i/2+s,n)||(!!Tt(e,t,u,u,a+r/2-s,o-i/2+s,n)||(!!Tt(e,t,u,u,a+r/2-s,o+i/2-s,n)||!!Tt(e,t,u,u,a-r/2+s,o+i/2-s,n)))))}}},fs.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:8,points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,u=n+o,l=r-a,c=r+a;return{topLeft:[s,l+i,s+i,l,s+i,l+i],topRight:[u-i,l,u,l+i,u-i,l+i],bottomRight:[u,c-i,u-i,c,u-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),u=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return It(i,a,u,e,t)},checkPoint:function(e,t,n,r,i,a,o){if(St(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if(St(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Ct(e,t,s.topLeft)||Ct(e,t,s.topRight)||Ct(e,t,s.bottomRight)||Ct(e,t,s.bottomLeft)}}},fs.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),u=function(e){var t=ct({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.15),n=ct({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.5),r=ct({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.85);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},l=[].concat(u(s.topLeft),u(s.topRight),u(s.bottomRight),u(s.bottomLeft));return It(i,a,l,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,u=r-i,l=r+i,c=Ft(e,t),d=c.heightOffset,h=c.widthOffset,f=c.ctrlPtOffsetPct*e,p={topLeft:[o,u+d,o+f,u,o+h,u],topRight:[s-h,u,s-f,u,s,u+d],bottomRight:[s,l-d,s-f,l,s-h,l],bottomLeft:[o+h,l,o+f,l,o,l-d]};return p.topLeft.isTop=!0,p.topRight.isTop=!0,p.bottomLeft.isBottom=!0,p.bottomRight.isBottom=!0,p},checkPoint:function(e,t,n,r,i,a,o){var s=Ft(r,i),u=s.heightOffset,l=s.widthOffset;if(St(e,t,this.points,a,o,r,i-2*u,[0,-1],n))return!0;if(St(e,t,this.points,a,o,r-2*l,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),d=function(e,t,n){var r,i,a=n[4],o=n[2],s=n[0],u=n[5],l=n[1],c=Math.min(a,s),d=Math.max(a,s),h=Math.min(u,l),f=Math.max(u,l);if(c<=e&&e<=d&&h<=t&&t<=f){var p=[(r=a)-2*(i=o)+s,2*(i-r),r],v=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]}(p[0],p[1],p[2],e).filter((function(e){return 0<=e&&e<=1}));if(v.length>0)return v[0]}return null},h=Object.keys(c),f=0;f<h.length;f++){var p=c[h[f]],v=d(e,t,p);if(null!=v){var g=p[5],y=p[3],m=p[1],b=lt(g,y,m,v);if(p.isTop&&b<=t)return!0;if(p.isBottom&&t<=b)return!0}}return!1}}},fs.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),u=Nt(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return u.length>0?u:xt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=jt(r,i),u=2*s;if(St(e,t,this.points,a,o,r,i-u,[0,-1],n))return!0;if(St(e,t,this.points,a,o,r-u,i,[0,-1],n))return!0;var l=r/2+2*n,c=i/2+2*n;return!!Ct(e,t,[a-l,o-c,a-l,o,a+l,o,a+l,o-c])||(!!Tt(e,t,u,u,a+r/2-s,o+i/2-s,n)||!!Tt(e,t,u,u,a-r/2+s,o+i/2-s,n))}}},fs.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",zt(3,0)),this.generateRoundPolygon("round-triangle",zt(3,0)),this.generatePolygon("rectangle",zt(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",zt(5,0)),this.generateRoundPolygon("round-pentagon",zt(5,0)),this.generatePolygon("hexagon",zt(6,0)),this.generateRoundPolygon("round-hexagon",zt(6,0)),this.generatePolygon("heptagon",zt(7,0)),this.generateRoundPolygon("round-heptagon",zt(7,0)),this.generatePolygon("octagon",zt(8,0)),this.generateRoundPolygon("round-octagon",zt(8,0));var r=new Array(20),i=At(5,0),a=At(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=Lt(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var u=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",u),this.generateRoundPolygon("round-tag",u),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}};var ps={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||Te();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&ke("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},vs=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};ps.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;ne((function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){vs(e,!0,r);var i=re();e.render(e.renderOptions);var a=e.lastDrawTime=re();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else vs(e,!1,r);e.skipFrame=!1,ne(n)}}))}};var gs=function(e){this.init(e)},ys=gs.prototype;ys.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],ys.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container(),r=t.cy.window();if(r){var i=r.document,a=i.head,o="__________cytoscape_stylesheet",s="__________cytoscape_container",u=null!=i.getElementById(o);if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!u){var l=i.createElement("style");l.id=o,l.textContent="."+s+" { position: relative; }",a.insertBefore(l,a.children[0])}"static"===r.getComputedStyle(n).getPropertyValue("position")&&Ce("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=N(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},ys.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},ys.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},ys.isHeadless=function(){return!1},[Ko,cs,ds,hs,fs,ps].forEach((function(e){U(ys,e)}));var ms=1e3/60,bs=function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=l.default((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=e.priority||Ee;n.beforeRender((function(i,a){var o=re(),s=n.averageRedrawTime,u=n.lastRedrawTime,l=[],c=n.cy.extent(),d=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var h=re(),f=h-o,p=h-a;if(u<ms){var v=ms-(i?s:0);if(p>=e.deqFastCost*v)break}else if(i){if(f>=e.deqCost*u||f>=e.deqAvgCost*s)break}else if(p>=e.deqNoDrawCost*ms)break;var g=e.deq(t,d,c);if(!(g.length>0))break;for(var y=0;y<g.length;y++)l.push(g[y])}l.length>0&&(e.onDeqd(t,l),!i&&e.shouldRedraw(t,l,d,c)&&r())}),i(t))}}},xs=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:xe;v(this,e),this.idsByKey=new ze,this.keyForId=new ze,this.cachesByLvl=new ze,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return y(e,[{key:"getIdsFor",value:function(e){null==e&&ke("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ae,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new ze,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),ws={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Es=Me({getKey:null,doesEleInvalidateKey:xe,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:be,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),ks=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Es(t);U(n,r),n.lookup=new xs(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},_s=ks.prototype;_s.reasons=ws,_s.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},_s.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},_s.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new c.default((function(e,t){return t.reqs-e.reqs}))},_s.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},_s.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),u=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(it(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var l=Math.pow(2,r),c=t.h*l,d=t.w*l,h=o.eleTextBiggerThanMin(e,l);if(!this.isVisible(e,h))return null;var f,p=u.get(e,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(f=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||d>1024)return null;var v=a.getTextureQueue(f),g=v[v.length-2],y=function(){return a.recycleTexture(f,d)||a.addTexture(f,d)};g||(g=v[v.length-1]),g||(g=y()),g.width-g.usedWidth<d&&(g=y());for(var m,b=function(e){return e&&e.scaledLabelShown===h},x=i&&i===ws.dequeue,w=i&&i===ws.highQuality,E=i&&i===ws.downscale,k=r+1;k<=3;k++){var _=u.get(e,k);if(_){m=_;break}}var C=m&&m.level===r+1?m:null,S=function(){g.context.drawImage(C.texture.canvas,C.x,0,C.width,C.height,g.usedWidth,0,d,c)};if(g.context.setTransform(1,0,0,1,0,0),g.context.clearRect(g.usedWidth,0,d,f),b(C))S();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var P=m.level;P>r;P--)C=a.getElement(e,t,n,P,ws.downscale);S()}else{var D;if(!x&&!w&&!E)for(var T=r-1;T>=-4;T--){var M=u.get(e,T);if(M){D=M;break}}if(b(D))return a.queueElement(e,r),D;g.context.translate(g.usedWidth,0),g.context.scale(l,l),this.drawElement(g.context,e,t,h,!1),g.context.scale(1/l,1/l),g.context.translate(-g.usedWidth,0)}return p={x:g.usedWidth,texture:g,level:r,scale:l,width:d,height:c,scaledLabelShown:h},g.usedWidth+=Math.ceil(d+8),g.eleCaches.push(p),u.set(e,r,p),a.checkTextureFullness(g),p},_s.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},_s.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=-4;i<=3;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],u=s.texture;u.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(u)}t.removeFromQueue(e)}},_s.checkTextureUtility=function(e){e.invalidatedWidth>=.2*e.width&&this.retireTexture(e)},_s.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?Be(t,e):e.fullnessChecks++},_s.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;Be(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a<i.length;a++){var o=i[a];r.deleteCache(o.key,o.level)}Ne(i),this.getRetiredTextureQueue(t).push(e)},_s.addTexture=function(e,t){var n={};return this.getTextureQueue(e).push(n),n.eleCaches=[],n.height=e,n.width=Math.max(1024,t),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=this.renderer.makeOffscreenCanvas(n.width,n.height),n.context=n.canvas.getContext("2d"),n},_s.recycleTexture=function(e,t){for(var n=this.getTextureQueue(e),r=this.getRetiredTextureQueue(e),i=0;i<r.length;i++){var a=r[i];if(a.width>=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,Ne(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),Be(r,a),n.push(a),a}},_s.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},_s.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),u=s.key,l=s.eles[0],c=a.hasCache(l,s.level);if(r[u]=null,!c){i.push(s);var d=t.getBoundingBox(l);t.getElement(l,d,e,s.level,ws.dequeue)}}return i},_s.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=me,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},_s.onDequeue=function(e){this.onDequeues.push(e)},_s.offDequeue=function(e){Be(this.onDequeues,e)},_s.setupDequeueing=bs({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++){(0,e.onDequeues[n])(t)}},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(yt(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var Cs=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=re()-500,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=l.default((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),50),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=250?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);t.layersQueue=new c.default((function(e,t){return t.reqs-e.reqs})),t.setupDequeueing()},Ss=Cs.prototype,Ps=0,Ds=Math.pow(2,53)-1;Ss.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:Ps=++Ps%Ds,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,u=-o.bb.x1,l=-o.bb.y1;return s.scale(n,n),s.translate(u,l),o},Ss.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(it(i*t)))<-4)n=-4;else if(i>=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,u=r.layersByLevel,l=Math.pow(2,n),c=u[n]=u[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=u[t],!0},i=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Be(c,o)}}();var d=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=ht();for(var t=0;t<e.length;t++)n=o,r=e[t].boundingBox(),n.x1=Math.min(n.x1,r.x1),n.x2=Math.max(n.x2,r.x2),n.w=n.x2-n.x1,n.y1=Math.min(n.y1,r.y1),n.y2=Math.max(n.y2,r.y2),n.h=n.y2-n.y1}var n,r}(),o.w*l*(o.h*l)>16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=c.indexOf(i)+1;c.splice(s,0,a)}else(void 0===t.insert||t.insert)&&c.unshift(a);return a};if(r.skipping&&!a)return null;for(var h=null,f=e.length/1,p=!a,v=0;v<e.length;v++){var g=e[v],y=g._private.rscratch,m=y.imgLayerCaches=y.imgLayerCaches||{},b=m[n];if(b)h=b;else{if((!h||h.eles.length>=f||!bt(h.bb,g.boundingBox()))&&!(h=d({insert:!0,after:h})))return null;s||p?r.queueLayer(h,g):r.drawEleInLayer(h,g,n,t),h.eles.push(g),m[n]=h}}return s||(p?null:c)},Ss.getEleLevelForLayerLevel=function(e,t){return e},Ss.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},Ss.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},Ss.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},Ss.updateElementsInLayers=function(e,t){for(var n=z(e[0]),r=0;r<e.length;r++)for(var i=n?null:e[r],a=n?e[r]:e[r].ele,o=a._private.rscratch,s=o.imgLayerCaches=o.imgLayerCaches||{},u=-4;u<=2;u++){var l=s[u];l&&(i&&this.getEleLevelForLayerLevel(l.level)!==i.level||t(l,a,i))}},Ss.haveLayers=function(){for(var e=!1,t=-4;t<=2;t++){var n=this.layersByLevel[t];if(n&&n.length>0){e=!0;break}}return e},Ss.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=re(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Ss.invalidateLayer=function(e){if(this.lastInvalidationTime=re(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Be(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},Ss.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},Ss.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},Ss.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},Ss.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<1&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},Ss.applyLayerReplacement=function(e){var t=this.layersByLevel[e.level],n=e.replaces,r=t.indexOf(n);if(!(r<0||n.invalid)){t[r]=e;for(var i=0;i<e.eles.length;i++){var a=e.eles[i]._private,o=a.imgLayerCaches=a.imgLayerCaches||{};o&&(o[e.level]=e)}this.requestRedraw()}},Ss.requestRedraw=l.default((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),Ss.setupDequeueing=bs({deqRedrawThreshold:50,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t){return e.dequeue(t)},onDeqd:Ee,shouldRedraw:be,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var Ts,Ms={};function Bs(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function Ns(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function Is(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];e.moveTo(s.x,s.y);for(i=1;i<o.length;i++){a=o[i];e.lineTo(a.x,a.y)}e.closePath&&e.closePath()}function Os(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var u=a[s];e.lineTo(u.x,u.y)}e.closePath&&e.closePath()}function zs(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}Ms.arrowShapeImpl=function(e){return(Ts||(Ts={polygon:Bs,"triangle-backcurve":Ns,"triangle-tee":Is,"circle-triangle":Os,"triangle-cross":Is,circle:zs}))[e]};var Ls={drawElement:function(e,t,n,r,i,a){t.isNode()?this.drawNode(e,t,n,r,i,a):this.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){t.isNode()?this.drawNodeOverlay(e,t):this.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){t.isNode()?this.drawNodeUnderlay(e,t):this.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var u=this,l=n.getBoundingBox(t);if(0!==l.w&&0!==l.h){var c=n.getElement(t,l,r,i,a);if(null!=c){var d=s(u,t);if(0===d)return;var h,f,p,v,g,y,m=o(u,t),b=l.x1,x=l.y1,w=l.w,E=l.h;if(0!==m){var k=n.getRotationPoint(t);p=k.x,v=k.y,e.translate(p,v),e.rotate(m),(g=u.getImgSmoothing(e))||u.setImgSmoothing(e,!0);var _=n.getRotationOffset(t);h=_.x,f=_.y}else h=b,f=x;1!==d&&(y=e.globalAlpha,e.globalAlpha=y*d),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,h,f,w,E),1!==d&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-p,-v),g||u.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},As=function(){return 0},js=function(e,t){return e.getTextAngle(t,null)},Rs=function(e,t){return e.getTextAngle(t,"source")},Fs=function(e,t){return e.getTextAngle(t,"target")},Vs=function(e,t){return t.effectiveOpacity()},qs=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};Ls.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,u=s.eleTxrCache,l=s.lblTxrCache,c=s.slbTxrCache,d=s.tlbTxrCache,h=t.boundingBox(),f=!0===a?u.reasons.highQuality:null;if(0!==h.w&&0!==h.h&&t.visible()&&(!r||yt(h,r))){var p=t.isEdge(),v=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,u,n,i,f,As,Vs),p&&v||o.drawCachedElementPortion(e,t,l,n,i,f,js,qs),p&&!v&&(o.drawCachedElementPortion(e,t,c,n,i,f,Rs,qs),o.drawCachedElementPortion(e,t,d,n,i,f,Fs,qs)),o.drawElementOverlay(e,t)}},Ls.drawElements=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];this.drawElement(e,r)}},Ls.drawCachedElements=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];this.drawCachedElement(e,a,n,r)}},Ls.drawCachedNodes=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];a.isNode()&&this.drawCachedElement(e,a,n,r)}},Ls.drawLayeredElements=function(e,t,n,r){var i=this.data.lyrTxrCache.getLayers(t,n);if(i)for(var a=0;a<i.length;a++){var o=i[a],s=o.bb;0!==s.w&&0!==s.h&&e.drawImage(o.canvas,s.x1,s.y1,s.w,s.h)}else this.drawCachedElements(e,t,n,r)};var Ys={drawEdge:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var u;n&&(u=n,e.translate(-u.x1,-u.y1));var l=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,d=t.pstyle("curve-style").value,h=t.pstyle("line-style").value,f=t.pstyle("width").pfValue,p=t.pstyle("line-cap").value,v=l*c,g=l*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;"straight-triangle"===d?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=f,e.lineCap=p,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")},m=function(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};e.lineJoin="round";var E="yes"===t.pstyle("ghost").value;if(E){var k=t.pstyle("ghost-offset-x").pfValue,_=t.pstyle("ghost-offset-y").pfValue,C=t.pstyle("ghost-opacity").value,S=v*C;e.translate(k,_),y(S),x(S),e.translate(-k,-_)}b(),y(),x(),m(),w(),n&&e.translate(u.x1,u.y1)}}},Xs=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,u=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,u[0],u[1],u[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};Ys.drawEdgeOverlay=Xs("overlay"),Ys.drawEdgeUnderlay=Xs("underlay"),Ys.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,u=this.usePaths(),l=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(u){var d=n.join("$");a.pathCacheKey&&a.pathCacheKey===d?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=d,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(l),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+3<n.length;h+=4)t.quadraticCurveTo(n[h],n[h+1],n[h+2],n[h+3]);break;case"straight":case"segments":case"haystack":for(var f=2;f+1<n.length;f+=2)t.lineTo(n[f],n[f+1])}t=o,u?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},Ys.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],u=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-u[0],n[i+1]-u[1]),t.lineTo(n[i]+u[0],n[i+1]+u[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},Ys.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},Ys.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,u=t.pstyle(n+"-arrow-shape").value;if("none"!==u){var l="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,d=t.pstyle("width").pfValue,h=t.pstyle("opacity").value;void 0===o&&(o=h);var f=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,l,d,u,r,i,a),e.globalCompositeOperation=f);var p=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,p[0],p[1],p[2],o),s.colorStrokeStyle(e,p[0],p[1],p[2],o),s.drawArrowShape(t,e,c,d,u,r,i,a)}}},Ys.drawArrowShape=function(e,t,n,r,i,a,o,s){var u,l=this,c=this.usePaths()&&"triangle-cross"!==i,d=!1,h=t,f={x:a,y:o},p=e.pstyle("arrow-scale").value,v=this.getArrowWidth(r,p),g=l.arrowShapes[i];if(c){var y=l.arrowPathCache=l.arrowPathCache||[],m=he(i),b=y[m];null!=b?(u=t=b,d=!0):(u=t=new Path2D,y[m]=u)}d||(t.beginPath&&t.beginPath(),c?g.draw(t,1,0,{x:0,y:0},1):g.draw(t,v,s,f,r),t.closePath&&t.closePath()),t=h,c&&(t.translate(a,o),t.rotate(s),t.scale(v,v)),"filled"!==n&&"both"!==n||(c?t.fill(u):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=(g.matchEdgeWidth?r:1)/(c?v:1),t.lineJoin="miter",c?t.stroke(u):t.stroke()),c&&(t.scale(1/v,1/v),t.rotate(-s),t.translate(-a,-o))};var Ws={safeDrawImage:function(e,t,n,r,i,a,o,s,u,l){if(!(i<=0||a<=0||u<=0||l<=0))try{e.drawImage(t,n,r,i,a,o,s,u,l)}catch(c){Ce(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,u=o.y,l=n.cy().style(),c=l.getIndexedStyle.bind(l),d=c(n,"background-fit","value",r),h=c(n,"background-repeat","value",r),f=n.width(),p=n.height(),v=2*n.padding(),g=f+("inner"===c(n,"background-width-relative-to","value",r)?0:v),y=p+("inner"===c(n,"background-height-relative-to","value",r)?0:v),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,k=t.height||t.cachedH;null!=E&&null!=k||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,k=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var _=E,C=k;if("auto"!==c(n,"background-width","value",r)&&(_="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*g:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(C="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==_&&0!==C){if("contain"===d)_*=S=Math.min(g/_,y/C),C*=S;else if("cover"===d){var S;_*=S=Math.max(g/_,y/C),C*=S}var P=s-g/2,D=c(n,"background-position-x","units",r),T=c(n,"background-position-x","pfValue",r);P+="%"===D?(g-_)*T:T;var M=c(n,"background-offset-x","units",r),B=c(n,"background-offset-x","pfValue",r);P+="%"===M?(g-_)*B:B;var N=u-y/2,I=c(n,"background-position-y","units",r),O=c(n,"background-position-y","pfValue",r);N+="%"===I?(y-C)*O:O;var z=c(n,"background-offset-y","units",r),L=c(n,"background-offset-y","pfValue",r);N+="%"===z?(y-C)*L:L,m.pathCache&&(P-=s,N-=u,s=0,u=0);var A=e.globalAlpha;e.globalAlpha=x;var j=a.getImgSmoothing(e),R=!1;if("no"===w&&j?(a.setImgSmoothing(e,!1),R=!0):"yes"!==w||j||(a.setImgSmoothing(e,!0),R=!0),"no-repeat"===h)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,u,g,y),e.clip())),a.safeDrawImage(e,t,0,0,E,k,P,N,_,C),b&&e.restore();else{var F=e.createPattern(t,h);e.fillStyle=F,a.nodeShapes[a.getNodeShape(n)].draw(e,s,u,g,y),e.translate(P,N),e.fill(),e.translate(-P,-N)}e.globalAlpha=A,R&&a.setImgSmoothing(e,j)}}},Gs={};function Hs(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}Gs.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(it(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Gs.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var u=o.getLabelJustification(t);e.textAlign=u,e.textBaseline="bottom"}else{var l=t.element()._private.rscratch.badLine,c=t.pstyle("label"),d=t.pstyle("source-label"),h=t.pstyle("target-label");if(l||(!c||!c.value)&&(!d||!d.value)&&(!h||!h.value))return;e.textAlign="center",e.textBaseline="bottom"}var f,p=!n;n&&(f=n,e.translate(-f.x1,-f.y1)),null==i?(o.drawText(e,t,null,p,a),t.isEdge()&&(o.drawText(e,t,"source",p,a),o.drawText(e,t,"target",p,a))):o.drawText(e,t,i,p,a),n&&e.translate(f.x1,f.y1)},Gs.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Gs.setupTextStyle=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,u=t.pstyle("text-outline-opacity").value*s,l=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,l[0],l[1],l[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],u)},Gs.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ie(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Gs.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private,o=a.rscratch,s=i?t.effectiveOpacity():1;if(!i||0!==s&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var u,l,c=Ie(o,"labelX",n),d=Ie(o,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(c)&&!isNaN(d)){this.setupTextStyle(e,t,i);var f,p=n?n+"-":"",v=Ie(o,"labelWidth",n),g=Ie(o,"labelHeight",n),y=t.pstyle(p+"text-margin-x").pfValue,m=t.pstyle(p+"text-margin-y").pfValue,b=t.isEdge(),x=t.pstyle("text-halign").value,w=t.pstyle("text-valign").value;switch(b&&(x="center",w="center"),c+=y,d+=m,0!==(f=r?this.getTextAngle(t,n):0)&&(u=c,l=d,e.translate(u,l),e.rotate(f),c=0,d=0),w){case"top":break;case"center":d+=g/2;break;case"bottom":d+=g}var E=t.pstyle("text-background-opacity").value,k=t.pstyle("text-border-opacity").value,_=t.pstyle("text-border-width").pfValue,C=t.pstyle("text-background-padding").pfValue;if(E>0||_>0&&k>0){var S=c-C;switch(x){case"left":S-=v;break;case"center":S-=v/2}var P=d-g-C,D=v+2*C,T=g+2*C;if(E>0){var M=e.fillStyle,B=t.pstyle("text-background-color").value;e.fillStyle="rgba("+B[0]+","+B[1]+","+B[2]+","+E*s+")";var N=t.pstyle("text-background-shape").strValue;0===N.indexOf("round")?Hs(e,S,P,D,T,2):e.fillRect(S,P,D,T),e.fillStyle=M}if(_>0&&k>0){var I=e.strokeStyle,O=e.lineWidth,z=t.pstyle("text-border-color").value,L=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+z[0]+","+z[1]+","+z[2]+","+k*s+")",e.lineWidth=_,e.setLineDash)switch(L){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=_/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(S,P,D,T),"double"===L){var A=_/2;e.strokeRect(S+A,P+A,D-2*A,T-2*A)}e.setLineDash&&e.setLineDash([]),e.lineWidth=O,e.strokeStyle=I}}var j=2*t.pstyle("text-outline-width").pfValue;if(j>0&&(e.lineWidth=j),"wrap"===t.pstyle("text-wrap").value){var R=Ie(o,"labelWrapCachedLines",n),F=Ie(o,"labelLineHeight",n),V=v/2,q=this.getLabelJustification(t);switch("auto"===q||("left"===x?"left"===q?c+=-v:"center"===q&&(c+=-V):"center"===x?"left"===q?c+=-V:"right"===q&&(c+=V):"right"===x&&("center"===q?c+=V:"right"===q&&(c+=v))),w){case"top":case"center":case"bottom":d-=(R.length-1)*F}for(var Y=0;Y<R.length;Y++)j>0&&e.strokeText(R[Y],c,d),e.fillText(R[Y],c,d),d+=F}else j>0&&e.strokeText(h,c,d),e.fillText(h,c,d);0!==f&&(e.rotate(-f),e.translate(-u,-l))}}};var Us={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=this,l=t._private,c=l.rscratch,d=t.position();if(N(d.x)&&N(d.y)&&(!s||t.visible())){var h,f,p=s?t.effectiveOpacity():1,v=u.usePaths(),g=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(f=n,e.translate(-f.x1,-f.y1));for(var m=t.pstyle("background-image"),b=m.value,x=new Array(b.length),w=new Array(b.length),E=0,k=0;k<b.length;k++){var _=b[k],C=x[k]=null!=_&&"none"!==_;if(C){var S=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",k);E++,w[k]=u.getCachedImage(_,S,(function(){l.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var P=t.pstyle("background-blacken").value,D=t.pstyle("border-width").pfValue,T=t.pstyle("background-opacity").value*p,M=t.pstyle("border-color").value,B=t.pstyle("border-style").value,I=t.pstyle("border-opacity").value*p;e.lineJoin="miter";var O=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:T;u.eleFillStyle(e,t,n)},z=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:I;u.colorStrokeStyle(e,M[0],M[1],M[2],t)},L=t.pstyle("shape").strValue,A=t.pstyle("shape-polygon-points").pfValue;if(v){e.translate(d.x,d.y);var j=u.nodePathCache=u.nodePathCache||[],R=fe("polygon"===L?L+","+A.join(","):L,""+i,""+r),F=j[R];null!=F?(h=F,g=!0,c.pathCache=h):(h=new Path2D,j[R]=c.pathCache=h)}var V=function(){if(!g){var n=d;v&&(n={x:0,y:0}),u.nodeShapes[u.getNodeShape(t)].draw(h||e,n.x,n.y,r,i)}v?e.fill(h):e.fill()},q=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=l.backgrounding,a=0,o=0;o<w.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:x[o]&&w[o].complete&&!w[o].error&&(a++,u.drawInscribedImage(e,w[o],t,o,n))}l.backgrounding=!(a===E),i!==l.backgrounding&&t.updateStyle(!1)},Y=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;u.hasPie(t)&&(u.drawPie(e,t,a),n&&(v||u.nodeShapes[u.getNodeShape(t)].draw(e,d.x,d.y,r,i)))},X=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,n=(P>0?P:-P)*t,r=P>0?0:255;0!==P&&(u.colorFillStyle(e,r,r,r,n),v?e.fill(h):e.fill())},W=function(){if(D>0){if(e.lineWidth=D,e.lineCap="butt",e.setLineDash)switch(B){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(v?e.stroke(h):e.stroke(),"double"===B){e.lineWidth=D/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",v?e.stroke(h):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},G=function(){o&&u.drawNodeOverlay(e,t,d,r,i)},H=function(){o&&u.drawNodeUnderlay(e,t,d,r,i)},U=function(){u.drawElementText(e,t,null,a)},K="yes"===t.pstyle("ghost").value;if(K){var Z=t.pstyle("ghost-offset-x").pfValue,$=t.pstyle("ghost-offset-y").pfValue,Q=t.pstyle("ghost-opacity").value,J=Q*p;e.translate(Z,$),O(Q*T),V(),q(J,!0),z(Q*I),W(),Y(0!==P||0!==D),q(J,!1),X(J),e.translate(-Z,-$)}v&&e.translate(-d.x,-d.y),H(),v&&e.translate(d.x,d.y),O(),V(),q(p,!0),z(),W(),Y(0!==P||0!==D),q(p,!1),X(),v&&e.translate(-d.x,-d.y),U(),G(),n&&e.translate(f.x1,f.y1)}}},Ks=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){if(n.visible()){var o=n.pstyle("".concat(e,"-padding")).pfValue,s=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,l=n.pstyle("".concat(e,"-shape")).value;if(s>0){if(r=r||n.position(),null==i||null==a){var c=n.padding();i=n.width()+2*c,a=n.height()+2*c}this.colorFillStyle(t,u[0],u[1],u[2],s),this.nodeShapes[l].draw(t,r.x,r.y,i+2*o,a+2*o),t.fill()}}}};Us.drawNodeOverlay=Ks("overlay"),Us.drawNodeUnderlay=Ks("underlay"),Us.hasPie=function(e){return(e=e[0])._private.hasPie},Us.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,u=t.width(),l=t.height(),c=Math.min(u,l)/2,d=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var h=1;h<=i.pieBackgroundN;h++){var f=t.pstyle("pie-"+h+"-background-size").value,p=t.pstyle("pie-"+h+"-background-color").value,v=t.pstyle("pie-"+h+"-background-opacity").value*n,g=f/100;g+d>1&&(g=1-d);var y=1.5*Math.PI+2*Math.PI*d,m=y+2*Math.PI*g;0===f||d>=1||d+g>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,p[0],p[1],p[2],v),e.fill(),d+=g)}};var Zs={};Zs.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},Zs.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},Zs.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,u=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var l=n.sourceEndpoint(),c=n.targetEndpoint(),d=n.midpoint(),h=ot(l,d),f=ot(c,d);a=e.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(h,f))}else{var p=o?{x:0,y:0}:n.position(),v=n.paddedWidth(),g=n.paddedHeight();a=e.createRadialGradient(p.x,p.y,0,p.x,p.y,Math.max(v,g))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=u.length===s.length,k=s.length,_=0;_<k;_++)a.addColorStop(E?u[_]:_/(k-1),"rgba("+s[_][0]+","+s[_][1]+","+s[_][2]+","+i+")");return a},Zs.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},Zs.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},Zs.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},Zs.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},Zs.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},Zs.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},Zs.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var u,l=i*o,c=a*o;if(l!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var d=n.canvasContainer;d.style.width=i+"px",d.style.height=a+"px";for(var h=0;h<t.CANVAS_LAYERS;h++)(u=n.canvases[h]).width=l,u.height=c,u.style.width=i+"px",u.style.height=a+"px";for(h=0;h<t.BUFFER_COUNT;h++)(u=n.bufferCanvases[h]).width=l,u.height=c,u.style.width=i+"px",u.style.height=a+"px";t.textureMult=1,o<=1&&(u=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,u.width=l*t.textureMult,u.height=c*t.textureMult),t.canvasWidth=l,t.canvasHeight=c}},Zs.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},Zs.render=function(e){var t=(e=e||Te()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,u=o.cy,l=o.data,c=l.canvasNeedsRedraw,d=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),h=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,f=o.motionBlurPxRatio,p=u.hasCompoundNodes(),v=o.hoverData.draggingEles,g=!(!o.hoverData.selecting&&!o.touchData.selecting),y=h=h&&!t&&o.motionBlurEnabled&&!g;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),h&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!d&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=u.style(),b=u.zoom(),x=void 0!==i?i:b,w=u.pan(),E={x:w.x,y:w.y},k={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||k.zoom!==_.zoom||k.pan.x!==_.pan.x||k.pan.y!==_.pan.y||v&&!p||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var C=o.getCachedZSortedEles();function S(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function P(e,r){var s,u,c,d;o.clearingMotionBlur||e!==l.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==l.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,u=x,c=o.canvasWidth,d=o.canvasHeight):(s={x:w.x*f,y:w.y*f},u=b*f,c=o.canvasWidth*f,d=o.canvasHeight*f),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?S(e,0,0,c,d):t||void 0!==r&&!r||e.clearRect(0,0,c,d),n||(e.translate(s.x,s.y),e.scale(u,u)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(d||(o.textureDrawLastFrame=!1),d){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=u.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var D=o.data.bufferContexts[o.TEXTURE_BUFFER];D.setTransform(1,0,0,1,0,0),D.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:D,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(k=o.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-k.pan.x)/k.zoom,y:(0-k.pan.y)/k.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var T=l.contexts[o.NODE],M=o.textureCache.texture;k=o.textureCache.viewport;T.setTransform(1,0,0,1,0,0),h?S(T,0,0,k.width,k.height):T.clearRect(0,0,k.width,k.height);var B=m.core("outside-texture-bg-color").value,N=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(T,B[0],B[1],B[2],N),T.fillRect(0,0,k.width,k.height);b=u.zoom();P(T,!1),T.clearRect(k.mpan.x,k.mpan.y,k.width/k.zoom/s,k.height/k.zoom/s),T.drawImage(M,k.mpan.x,k.mpan.y,k.width/k.zoom/s,k.height/k.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var I=u.extent(),O=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),z=o.hideEdgesOnViewport&&O,L=[];if(L[o.NODE]=!c[o.NODE]&&h&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,L[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),L[o.DRAG]=!c[o.DRAG]&&h&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,L[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||L[o.NODE]){var A=h&&!L[o.NODE]&&1!==f;P(T=t||(A?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:l.contexts[o.NODE]),h&&!A?"motionBlur":void 0),z?o.drawCachedNodes(T,C.nondrag,s,I):o.drawLayeredElements(T,C.nondrag,s,I),o.debug&&o.drawDebugPoints(T,C.nondrag),n||h||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||L[o.DRAG])){A=h&&!L[o.DRAG]&&1!==f;P(T=t||(A?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:l.contexts[o.DRAG]),h&&!A?"motionBlur":void 0),z?o.drawCachedNodes(T,C.drag,s,I):o.drawCachedElements(T,C.drag,s,I),o.debug&&o.drawDebugPoints(T,C.drag),n||h||(c[o.DRAG]=!1)}if(o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(P(T=t||l.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var j=m.core("selection-box-border-width").value/b;T.lineWidth=j,T.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",T.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),j>0&&(T.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",T.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(l.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var R=l.bgActivePosistion;T.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",T.beginPath(),T.arc(R.x,R.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),T.fill()}var F=o.lastRedrawTime;if(o.showFps&&F){F=Math.round(F);var V=Math.round(1e3/F);T.setTransform(1,0,0,1,0,0),T.fillStyle="rgba(255, 0, 0, 0.75)",T.strokeStyle="rgba(255, 0, 0, 0.75)",T.lineWidth=1,T.fillText("1 frame = "+F+" ms = "+V+" fps",0,20);T.strokeRect(0,30,250,20),T.fillRect(0,30,250*Math.min(V/60,1),20)}n||(c[o.SELECT_BOX]=!1)}if(h&&1!==f){var q=l.contexts[o.NODE],Y=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],X=l.contexts[o.DRAG],W=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],G=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):S(e,0,0,o.canvasWidth,o.canvasHeight);var r=f;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||L[o.NODE])&&(G(q,Y,L[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||L[o.DRAG])&&(G(X,W,L[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=k,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),h&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!d,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),100)),t||u.emit("render")};for(var $s={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var u=1;u<a.length/2;u++)e.lineTo(t+o*a[2*u],n+s*a[2*u+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,u=Rt(r,i);e.beginPath&&e.beginPath();for(var l=0;l<a.length/4;l++){var c,d=void 0;d=0===l?a.length-2:4*l-2,c=4*l+2;var h=t+o*a[4*l],f=n+s*a[4*l+1],p=-a[d]*a[c]-a[d+1]*a[c+1],v=u/Math.tan(Math.acos(p)/2),g=h-v*a[d],y=f-v*a[d+1],m=h+v*a[c],b=f+v*a[c+1];0===l?e.moveTo(g,y):e.lineTo(g,y),e.arcTo(h,f,m,b,u)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=jt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=jt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2;e.beginPath&&e.beginPath(),e.moveTo(t-a+8,n-o),e.lineTo(t+a-8,n-o),e.lineTo(t+a,n-o+8),e.lineTo(t+a,n+o-8),e.lineTo(t+a-8,n+o),e.lineTo(t-a+8,n+o),e.lineTo(t-a,n+o-8),e.lineTo(t-a,n-o+8),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,u=t+a,l=n-o,c=n+o,d=Ft(r,i),h=d.widthOffset,f=d.heightOffset,p=d.ctrlPtOffsetPct*h;e.beginPath&&e.beginPath(),e.moveTo(s,l+f),e.lineTo(s,c-f),e.quadraticCurveTo(s+p,c,s+h,c),e.lineTo(u-h,c),e.quadraticCurveTo(u-p,c,u,c-f),e.lineTo(u,l+f),e.quadraticCurveTo(u-p,l,u-h,l),e.lineTo(s+h,l),e.quadraticCurveTo(s+p,l,s,l+f),e.closePath()}},Qs=Math.sin(0),Js=Math.cos(0),eu={},tu={},nu=Math.PI/40,ru=0*Math.PI;ru<2*Math.PI;ru+=nu)eu[ru]=Math.sin(ru),tu[ru]=Math.cos(ru);$s.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,u=i/2,l=0*Math.PI;l<2*Math.PI;l+=nu)a=t-s*eu[l]*Qs+s*tu[l]*Js,o=n+u*tu[l]*Qs+u*eu[l]*Js,0===l?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var iu={};function au(e){var t=e.indexOf(",");return e.substr(t+1)}function ou(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new Jn((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return function(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}(au(r()),n);case"base64":return au(r());default:return r()}}iu.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},iu.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=N(e.maxWidth)||N(e.maxHeight),s=this.getPixelRatio(),u=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,u=e.scale;else if(o){var l=1/0,c=1/0;N(e.maxWidth)&&(l=u*e.maxWidth/i),N(e.maxHeight)&&(c=u*e.maxHeight/a),i*=u=Math.min(l,c),a*=u}o||(i*=s,a*=s,u*=s);var d=document.createElement("canvas");d.width=i,d.height=a,d.style.width=i+"px",d.style.height=a+"px";var h=d.getContext("2d");if(i>0&&a>0){h.clearRect(0,0,i,a),h.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)h.translate(-n.x1*u,-n.y1*u),h.scale(u,u),this.drawElements(h,f),h.scale(1/u,1/u),h.translate(n.x1*u,n.y1*u);else{var p=t.pan(),v={x:p.x*u,y:p.y*u};u*=t.zoom(),h.translate(v.x,v.y),h.scale(u,u),this.drawElements(h,f),h.scale(1/u,1/u),h.translate(-v.x,-v.y)}e.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=e.bg,h.rect(0,0,i,a),h.fill())}return d},iu.png=function(e){return ou(e,this.bufferCanvasImage(e),"image/png")},iu.jpg=function(e){return ou(e,this.bufferCanvasImage(e),"image/jpeg")};var su={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},uu=cu,lu=cu.prototype;function cu(e){var t=this;t.data={canvases:new Array(lu.CANVAS_LAYERS),contexts:new Array(lu.CANVAS_LAYERS),canvasNeedsRedraw:new Array(lu.CANVAS_LAYERS),bufferCanvases:new Array(lu.BUFFER_COUNT),bufferContexts:new Array(lu.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};E&&E.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<lu.CANVAS_LAYERS;s++){var u=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=u.getContext("2d"),Object.keys(o).forEach((function(e){u.style[e]=o[e]})),u.style.position="absolute",u.setAttribute("data-id","layer"+s),u.style.zIndex=String(lu.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(u),t.data.canvasNeedsRedraw[s]=!1}t.data.topCanvas=t.data.canvases[0],t.data.canvases[lu.NODE].setAttribute("data-id","layer"+lu.NODE+"-node"),t.data.canvases[lu.SELECT_BOX].setAttribute("data-id","layer"+lu.SELECT_BOX+"-selectbox"),t.data.canvases[lu.DRAG].setAttribute("data-id","layer"+lu.DRAG+"-drag");for(s=0;s<lu.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var l=ht(),c=function(e){return{x:-e.w/2,y:-e.h/2}},d=function(e){return e.boundingBox(),e[0]._private.bodyBounds},h=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||l},f=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||l},p=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||l},v=function(e,t){return t},g=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},y=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},m=t.data.eleTxrCache=new ks(t,{getKey:function(e){return e[0]._private.nodeKey},doesEleInvalidateKey:function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},drawElement:function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},getBoundingBox:d,getRotationPoint:function(e){return{x:((t=d(e)).x1+t.x2)/2,y:(t.y1+t.y2)/2};var t},getRotationOffset:function(e){return c(d(e))},allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),b=t.data.lblTxrCache=new ks(t,{getKey:function(e){return e[0]._private.labelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},getBoundingBox:h,getRotationPoint:function(e){return g("",y(e,"labelX","labelY"),e)},getRotationOffset:function(e){var t=h(e),n=c(h(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},isVisible:v}),x=t.data.slbTxrCache=new ks(t,{getKey:function(e){return e[0]._private.sourceLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},getBoundingBox:f,getRotationPoint:function(e){return g("source",y(e,"sourceLabelX","sourceLabelY"),e)},getRotationOffset:function(e){return c(f(e))},isVisible:v}),w=t.data.tlbTxrCache=new ks(t,{getKey:function(e){return e[0]._private.targetLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},getBoundingBox:p,getRotationPoint:function(e){return g("target",y(e,"targetLabelX","targetLabelY"),e)},getRotationOffset:function(e){return c(p(e))},isVisible:v}),k=t.data.lyrTxrCache=new Cs(t);t.onUpdateEleCalcs((function(e,t){m.invalidateElements(t),b.invalidateElements(t),x.invalidateElements(t),w.invalidateElements(t),k.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var _=function(e){for(var t=0;t<e.length;t++)k.enqueueElementRefinement(e[t].ele)};m.onDequeue(_),b.onDequeue(_),x.onDequeue(_),w.onDequeue(_)}lu.CANVAS_LAYERS=3,lu.SELECT_BOX=0,lu.DRAG=1,lu.NODE=2,lu.BUFFER_COUNT=3,lu.TEXTURE_BUFFER=0,lu.MOTIONBLUR_BUFFER_NODE=1,lu.MOTIONBLUR_BUFFER_DRAG=2,lu.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[lu.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[lu.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[lu.SELECT_BOX]=t}};var du="undefined"!=typeof Path2D;lu.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},lu.usePaths=function(){return du&&this.pathsEnabled},lu.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},lu.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},lu.makeOffscreenCanvas=function(e,t){var n;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":p(OffscreenCanvas))?n=new OffscreenCanvas(e,t):((n=document.createElement("canvas")).width=e,n.height=t),n},[Ms,Ls,Ys,Ws,Gs,Us,Zs,$s,iu,su].forEach((function(e){U(lu,e)}));var hu=[{type:"layout",extensions:Wo},{type:"renderer",extensions:[{name:"null",impl:Go},{name:"base",impl:gs},{name:"canvas",impl:uu}]}],fu={},pu={};function vu(e,t,n){var r=n,i=function(n){Ce("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(ro.prototype[t])return i(t);ro.prototype[t]=n}else if("collection"===e){if(xa.prototype[t])return i(t);xa.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),B(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],u=0;u<s.length;u++){var l=s[u];o[l]=o[l]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var d=function(e){return e._private.cy},h={addEventFields:function(e,t){t.layout=e,t.cy=d(e),t.target=e},bubble:function(){return!0},parent:function(e){return d(e)}};U(o,{createEmitter:function(){return this._private.emitter=new ji(h,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),ar.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var f=gu("renderer","base"),p=f.prototype,v=n,g=n.prototype,y=function(){f.apply(this,arguments),v.apply(this,arguments)},m=y.prototype;for(var b in p){var x=p[b];if(null!=g[b])return i(b);m[b]=x}for(var w in g)m[w]=g[w];p.clientFunctions.forEach((function(e){m[e]=m[e]||function(){ke("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return ke(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return $({map:fu,keys:[e,t],value:r})}function gu(e,t){return Q({map:fu,keys:[e,t]})}function yu(e,t,n,r,i){return $({map:pu,keys:[e,t,n,r],value:i})}function mu(e,t,n,r){return Q({map:pu,keys:[e,t,n,r]})}var bu=function(){return 2===arguments.length?gu.apply(null,arguments):3===arguments.length?vu.apply(null,arguments):4===arguments.length?mu.apply(null,arguments):5===arguments.length?yu.apply(null,arguments):void ke("Invalid extension access syntax")};ro.prototype.extension=bu,hu.forEach((function(e){e.extensions.forEach((function(t){vu(e.type,t.name,t.impl)}))}));var xu=function e(){if(!(this instanceof e))return new e;this.length=0},wu=xu.prototype;wu.instanceString=function(){return"stylesheet"},wu.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},wu.css=function(e,t){var n=this.length-1;if(D(e))this[n].properties.push({name:e,value:t});else if(B(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var u=Qa.properties[o]||Qa.properties[Y(o)];if(null!=u){var l=u.name,c=s;this[n].properties.push({name:l,value:c})}}}return this},wu.style=wu.css,wu.generateStyle=function(e){var t=new Qa(e);return this.appendToStyle(t)},wu.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var Eu=function(e){return void 0===e&&(e={}),B(e)?new ro(e):D(e)?bu.apply(bu,arguments):void 0};Eu.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(Eu),e.apply(null,t),this},Eu.warnings=function(e){return _e(e)},Eu.version="3.26.0",Eu.stylesheet=Eu.Stylesheet=xu,e.exports=Eu},24259:(e,t,n)=>{e.exports={graphlib:n(99043),layout:n(69155),debug:n(38093),util:{time:n(51942).time,notime:n(51942).notime},version:n(50665)}},19371:(e,t,n)=>{"use strict";var r=n(27568),i=n(26238);e.exports={run:function(e){var t="greedy"===e.graph().acyclicer?i(e,function(e){return function(t){return e.edge(t).weight}}(e)):function(e){var t=[],n={},i={};function a(o){r.has(i,o)||(i[o]=!0,n[o]=!0,r.forEach(e.outEdges(o),(function(e){r.has(n,e.w)?t.push(e):a(e.w)})),delete n[o])}return r.forEach(e.nodes(),a),t}(e);r.forEach(t,(function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.uniqueId("rev"))}))},undo:function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}}))}}},30111:(e,t,n)=>{var r=n(27568),i=n(51942);function a(e,t,n,r,a,o){var s={width:0,height:0,rank:o,borderType:t},u=a[t][o-1],l=i.addDummyNode(e,"border",s,n);a[t][o]=l,e.setParent(l,r),u&&e.setEdge(u,l,{weight:1})}e.exports=function(e){r.forEach(e.children(),(function t(n){var i=e.children(n),o=e.node(n);if(i.length&&r.forEach(i,t),r.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var s=o.minRank,u=o.maxRank+1;s<u;++s)a(e,"borderLeft","_bl",n,o,s),a(e,"borderRight","_br",n,o,s)}}))}},52551:(e,t,n)=>{"use strict";var r=n(27568);function i(e){r.forEach(e.nodes(),(function(t){a(e.node(t))})),r.forEach(e.edges(),(function(t){a(e.edge(t))}))}function a(e){var t=e.width;e.width=e.height,e.height=t}function o(e){e.y=-e.y}function s(e){var t=e.x;e.x=e.y,e.y=t}e.exports={adjust:function(e){var t=e.graph().rankdir.toLowerCase();"lr"!==t&&"rl"!==t||i(e)},undo:function(e){var t=e.graph().rankdir.toLowerCase();"bt"!==t&&"rl"!==t||function(e){r.forEach(e.nodes(),(function(t){o(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,o),r.has(n,"y")&&o(n)}))}(e);"lr"!==t&&"rl"!==t||(!function(e){r.forEach(e.nodes(),(function(t){s(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(e),i(e))}}},65186:e=>{function t(){var e={};e._next=e._prev=e,this._sentinel=e}function n(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function r(e,t){if("_next"!==e&&"_prev"!==e)return t}e.exports=t,t.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return n(t),t},t.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&n(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},t.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,r)),n=n._prev;return"["+e.join(", ")+"]"}},38093:(e,t,n)=>{var r=n(27568),i=n(51942),a=n(99043).Graph;e.exports={debugOrdering:function(e){var t=i.buildLayerMatrix(e),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.forEach(e.nodes(),(function(t){n.setNode(t,{label:t}),n.setParent(t,"layer"+e.node(t).rank)})),r.forEach(e.edges(),(function(e){n.setEdge(e.v,e.w,{},e.name)})),r.forEach(t,(function(e,t){var i="layer"+t;n.setNode(i,{rank:"same"}),r.reduce(e,(function(e,t){return n.setEdge(e,t,{style:"invis"}),t}))})),n}}},99043:(e,t,n)=>{var r;try{r=n(39254)}catch(i){}r||(r=window.graphlib),e.exports=r},26238:(e,t,n)=>{var r=n(27568),i=n(99043).Graph,a=n(65186);e.exports=function(e,t){if(e.nodeCount()<=1)return[];var n=function(e,t){var n=new i,o=0,s=0;r.forEach(e.nodes(),(function(e){n.setNode(e,{v:e,in:0,out:0})})),r.forEach(e.edges(),(function(e){var r=n.edge(e.v,e.w)||0,i=t(e),a=r+i;n.setEdge(e.v,e.w,a),s=Math.max(s,n.node(e.v).out+=i),o=Math.max(o,n.node(e.w).in+=i)}));var l=r.range(s+o+3).map((function(){return new a})),c=o+1;return r.forEach(n.nodes(),(function(e){u(l,c,n.node(e))})),{graph:n,buckets:l,zeroIdx:c}}(e,t||o),l=function(e,t,n){var r,i=[],a=t[t.length-1],o=t[0];for(;e.nodeCount();){for(;r=o.dequeue();)s(e,t,n,r);for(;r=a.dequeue();)s(e,t,n,r);if(e.nodeCount())for(var u=t.length-2;u>0;--u)if(r=t[u].dequeue()){i=i.concat(s(e,t,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(l,(function(t){return e.outEdges(t.v,t.w)})),!0)};var o=r.constant(1);function s(e,t,n,i,a){var o=a?[]:void 0;return r.forEach(e.inEdges(i.v),(function(r){var i=e.edge(r),s=e.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,u(t,n,s)})),r.forEach(e.outEdges(i.v),(function(r){var i=e.edge(r),a=r.w,o=e.node(a);o.in-=i,u(t,n,o)})),e.removeNode(i.v),o}function u(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},69155:(e,t,n)=>{"use strict";var r=n(27568),i=n(19371),a=n(431),o=n(29102),s=n(51942).normalizeRanks,u=n(14146),l=n(51942).removeEmptyRanks,c=n(2856),d=n(30111),h=n(52551),f=n(79595),p=n(50199),v=n(51942),g=n(99043).Graph;e.exports=function(e,t){var n=t&&t.debugTiming?v.time:v.notime;n("layout",(function(){var t=n(" buildLayoutGraph",(function(){return function(e){var t=new g({multigraph:!0,compound:!0}),n=S(e.graph());return t.setGraph(r.merge({},m,C(n,y),r.pick(n,b))),r.forEach(e.nodes(),(function(n){var i=S(e.node(n));t.setNode(n,r.defaults(C(i,x),w)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var i=S(e.edge(n));t.setEdge(n,r.merge({},k,C(i,E),r.pick(i,_)))})),t}(e)}));n(" runLayout",(function(){!function(e,t){t(" makeSpaceForEdgeLabels",(function(){!function(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(e)})),t(" removeSelfEdges",(function(){!function(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}(e)})),t(" acyclic",(function(){i.run(e)})),t(" nestingGraph.run",(function(){c.run(e)})),t(" rank",(function(){o(v.asNonCompoundGraph(e))})),t(" injectEdgeLabelProxies",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),i={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};v.addDummyNode(e,"edge-proxy",i,"_ep")}}))}(e)})),t(" removeEmptyRanks",(function(){l(e)})),t(" nestingGraph.cleanup",(function(){c.cleanup(e)})),t(" normalizeRanks",(function(){s(e)})),t(" assignRankMinMax",(function(){!function(e){var t=0;r.forEach(e.nodes(),(function(n){var i=e.node(n);i.borderTop&&(i.minRank=e.node(i.borderTop).rank,i.maxRank=e.node(i.borderBottom).rank,t=r.max(t,i.maxRank))})),e.graph().maxRank=t}(e)})),t(" removeEdgeLabelProxies",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}(e)})),t(" normalize.run",(function(){a.run(e)})),t(" parentDummyChains",(function(){u(e)})),t(" addBorderSegments",(function(){d(e)})),t(" order",(function(){f(e)})),t(" insertSelfEdges",(function(){!function(e){var t=v.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,i){var a=e.node(t);a.order=i+n,r.forEach(a.selfEdges,(function(t){v.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:a.rank,order:i+ ++n,e:t.e,label:t.label},"_se")})),delete a.selfEdges}))}))}(e)})),t(" adjustCoordinateSystem",(function(){h.adjust(e)})),t(" position",(function(){p(e)})),t(" positionSelfEdges",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(e)})),t(" removeBorderNodes",(function(){!function(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),i=e.node(n.borderTop),a=e.node(n.borderBottom),o=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(e.nodes(),(function(t){"border"===e.node(t).dummy&&e.removeNode(t)}))}(e)})),t(" normalize.undo",(function(){a.undo(e)})),t(" fixupEdgeLabelCoords",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(e)})),t(" undoCoordinateSystem",(function(){h.undo(e)})),t(" translateGraph",(function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=e.graph(),s=o.marginx||0,u=o.marginy||0;function l(e){var r=e.x,o=e.y,s=e.width,u=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-u/2),a=Math.max(a,o+u/2)}r.forEach(e.nodes(),(function(t){l(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,"x")&&l(n)})),t-=s,i-=u,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=i})),r.forEach(e.edges(),(function(n){var a=e.edge(n);r.forEach(a.points,(function(e){e.x-=t,e.y-=i})),r.has(a,"x")&&(a.x-=t),r.has(a,"y")&&(a.y-=i)})),o.width=n-t+s,o.height=a-i+u}(e)})),t(" assignNodeIntersects",(function(){!function(e){r.forEach(e.edges(),(function(t){var n,r,i=e.edge(t),a=e.node(t.v),o=e.node(t.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(v.intersectRect(a,n)),i.points.push(v.intersectRect(o,r))}))}(e)})),t(" reversePoints",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}(e)})),t(" acyclic.undo",(function(){i.undo(e)}))}(t,n)})),n(" updateInputGraph",(function(){!function(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),i=t.node(n);r&&(r.x=i.x,r.y=i.y,t.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(e.edges(),(function(n){var i=e.edge(n),a=t.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)}))}))};var y=["nodesep","edgesep","ranksep","marginx","marginy"],m={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],x=["width","height"],w={width:0,height:0},E=["minlen","weight","width","height","labeloffset"],k={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},_=["labelpos"];function C(e,t){return r.mapValues(r.pick(e,t),Number)}function S(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},27568:(e,t,n)=>{var r;try{r={cloneDeep:n(30454),constant:n(551),defaults:n(70236),each:n(72856),filter:n(69238),find:n(64925),flatten:n(89754),forEach:n(47003),forIn:n(3544),has:n(73915),isUndefined:n(92465),last:n(31159),map:n(55807),mapValues:n(25389),max:n(7620),merge:n(15409),min:n(14176),minBy:n(70201),now:n(82846),pick:n(14648),range:n(4215),reduce:n(34172),sortBy:n(95099),uniqueId:n(46854),values:n(58185),zipObject:n(11775)}}catch(i){}r||(r=window._),e.exports=r},2856:(e,t,n)=>{var r=n(27568),i=n(51942);function a(e,t,n,o,s,u,l){var c=e.children(l);if(c.length){var d=i.addBorderNode(e,"_bt"),h=i.addBorderNode(e,"_bb"),f=e.node(l);e.setParent(d,l),f.borderTop=d,e.setParent(h,l),f.borderBottom=h,r.forEach(c,(function(r){a(e,t,n,o,s,u,r);var i=e.node(r),c=i.borderTop?i.borderTop:r,f=i.borderBottom?i.borderBottom:r,p=i.borderTop?o:2*o,v=c!==f?1:s-u[l]+1;e.setEdge(d,c,{weight:p,minlen:v,nestingEdge:!0}),e.setEdge(f,h,{weight:p,minlen:v,nestingEdge:!0})})),e.parent(l)||e.setEdge(t,d,{weight:0,minlen:s+u[l]})}else l!==t&&e.setEdge(t,l,{weight:0,minlen:n})}e.exports={run:function(e){var t=i.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};function n(i,a){var o=e.children(i);o&&o.length&&r.forEach(o,(function(e){n(e,a+1)})),t[i]=a}return r.forEach(e.children(),(function(e){n(e,1)})),t}(e),o=r.max(r.values(n))-1,s=2*o+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=s}));var u=function(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}(e)+1;r.forEach(e.children(),(function(r){a(e,t,s,u,o,n,r)})),e.graph().nodeRankFactor=s},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}}},431:(e,t,n)=>{"use strict";var r=n(27568),i=n(51942);e.exports={run:function(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){!function(e,t){var n,r,a,o=t.v,s=e.node(o).rank,u=t.w,l=e.node(u).rank,c=t.name,d=e.edge(t),h=d.labelRank;if(l===s+1)return;for(e.removeEdge(t),a=0,++s;s<l;++a,++s)d.points=[],r={width:0,height:0,edgeLabel:d,edgeObj:t,rank:s},n=i.addDummyNode(e,"edge",r,"_d"),s===h&&(r.width=d.width,r.height=d.height,r.dummy="edge-label",r.labelpos=d.labelpos),e.setEdge(o,n,{weight:d.weight},c),0===a&&e.graph().dummyChains.push(n),o=n;e.setEdge(o,u,{weight:d.weight},c)}(e,t)}))},undo:function(e){r.forEach(e.graph().dummyChains,(function(t){var n,r=e.node(t),i=r.edgeLabel;for(e.setEdge(r.edgeObj,i);r.dummy;)n=e.successors(t)[0],e.removeNode(t),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),t=n,r=e.node(t)}))}}},74671:(e,t,n)=>{var r=n(27568);e.exports=function(e,t,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=e.parent(n);s;){if((r=e.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void t.setEdge(o,s);s=r}}))}},18346:(e,t,n)=>{var r=n(27568);e.exports=function(e,t){return r.map(t,(function(t){var n=e.inEdges(t);if(n.length){var i=r.reduce(n,(function(t,n){var r=e.edge(n),i=e.node(n.v);return{sum:t.sum+r.weight*i.order,weight:t.weight+r.weight}}),{sum:0,weight:0});return{v:t,barycenter:i.sum/i.weight,weight:i.weight}}return{v:t}}))}},46901:(e,t,n)=>{var r=n(27568),i=n(99043).Graph;e.exports=function(e,t,n){var a=function(e){var t;for(;e.hasNode(t=r.uniqueId("_root")););return t}(e),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(t){return e.node(t)}));return r.forEach(e.nodes(),(function(i){var s=e.node(i),u=e.parent(i);(s.rank===t||s.minRank<=t&&t<=s.maxRank)&&(o.setNode(i),o.setParent(i,u||a),r.forEach(e[n](i),(function(t){var n=t.v===i?t.w:t.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:e.edge(t).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[t],borderRight:s.borderRight[t]}))})),o}},27525:(e,t,n)=>{"use strict";var r=n(27568);function i(e,t,n){for(var i=r.zipObject(n,r.map(n,(function(e,t){return t}))),a=r.flatten(r.map(t,(function(t){return r.sortBy(r.map(e.outEdges(t),(function(t){return{pos:i[t.w],weight:e.edge(t).weight}})),"pos")})),!0),o=1;o<n.length;)o<<=1;var s=2*o-1;o-=1;var u=r.map(new Array(s),(function(){return 0})),l=0;return r.forEach(a.forEach((function(e){var t=e.pos+o;u[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=u[t+1]),u[t=t-1>>1]+=e.weight;l+=e.weight*n}))),l}e.exports=function(e,t){for(var n=0,r=1;r<t.length;++r)n+=i(e,t[r-1],t[r]);return n}},79595:(e,t,n)=>{"use strict";var r=n(27568),i=n(35037),a=n(27525),o=n(60066),s=n(46901),u=n(74671),l=n(99043).Graph,c=n(51942);function d(e,t,n){return r.map(t,(function(t){return s(e,t,n)}))}function h(e,t){var n=new l;r.forEach(e,(function(e){var i=e.graph().root,a=o(e,i,n,t);r.forEach(a.vs,(function(t,n){e.node(t).order=n})),u(e,n,a.vs)}))}function f(e,t){r.forEach(t,(function(t){r.forEach(t,(function(t,n){e.node(t).order=n}))}))}e.exports=function(e){var t=c.maxRank(e),n=d(e,r.range(1,t+1),"inEdges"),o=d(e,r.range(t-1,-1,-1),"outEdges"),s=i(e);f(e,s);for(var u,l=Number.POSITIVE_INFINITY,p=0,v=0;v<4;++p,++v){h(p%2?n:o,p%4>=2),s=c.buildLayerMatrix(e);var g=a(e,s);g<l&&(v=0,u=r.cloneDeep(s),l=g)}f(e,u)}},35037:(e,t,n)=>{"use strict";var r=n(27568);e.exports=function(e){var t={},n=r.filter(e.nodes(),(function(t){return!e.children(t).length})),i=r.max(r.map(n,(function(t){return e.node(t).rank}))),a=r.map(r.range(i+1),(function(){return[]}));var o=r.sortBy(n,(function(t){return e.node(t).rank}));return r.forEach(o,(function n(i){if(r.has(t,i))return;t[i]=!0;var o=e.node(i);a[o.rank].push(i),r.forEach(e.successors(i),n)})),a}},64873:(e,t,n)=>{"use strict";var r=n(27568);e.exports=function(e,t){var n={};return r.forEach(e,(function(e,t){var i=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};r.isUndefined(e.barycenter)||(i.barycenter=e.barycenter,i.weight=e.weight)})),r.forEach(t.edges(),(function(e){var t=n[e.v],i=n[e.w];r.isUndefined(t)||r.isUndefined(i)||(i.indegree++,t.out.push(n[e.w]))})),function(e){var t=[];function n(e){return function(t){t.merged||(r.isUndefined(t.barycenter)||r.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&function(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}(e,t)}}function i(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var a=e.pop();t.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(e){return!e.indegree})))}},60066:(e,t,n)=>{var r=n(27568),i=n(18346),a=n(64873),o=n(22474);e.exports=function e(t,n,s,u){var l=t.children(n),c=t.node(n),d=c?c.borderLeft:void 0,h=c?c.borderRight:void 0,f={};d&&(l=r.filter(l,(function(e){return e!==d&&e!==h})));var p=i(t,l);r.forEach(p,(function(n){if(t.children(n.v).length){var i=e(t,n.v,s,u);f[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var v=a(p,s);!function(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}(v,f);var g=o(v,u);if(d&&(g.vs=r.flatten([d,g.vs,h],!0),t.predecessors(d).length)){var y=t.node(t.predecessors(d)[0]),m=t.node(t.predecessors(h)[0]);r.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+y.order+m.order)/(g.weight+2),g.weight+=2}return g}},22474:(e,t,n)=>{var r=n(27568),i=n(51942);function a(e,t,n){for(var i;t.length&&(i=r.last(t)).i<=n;)t.pop(),e.push(i.vs),n++;return n}e.exports=function(e,t){var n=i.partition(e,(function(e){return r.has(e,"barycenter")})),o=n.lhs,s=r.sortBy(n.rhs,(function(e){return-e.i})),u=[],l=0,c=0,d=0;o.sort((h=!!t,function(e,t){return e.barycenter<t.barycenter?-1:e.barycenter>t.barycenter?1:h?t.i-e.i:e.i-t.i})),d=a(u,s,d),r.forEach(o,(function(e){d+=e.vs.length,u.push(e.vs),l+=e.barycenter*e.weight,c+=e.weight,d=a(u,s,d)}));var h;var f={vs:r.flatten(u,!0)};c&&(f.barycenter=l/c,f.weight=c);return f}},14146:(e,t,n)=>{var r=n(27568);e.exports=function(e){var t=function(e){var t={},n=0;function i(a){var o=n;r.forEach(e.children(a),i),t[a]={low:o,lim:n++}}return r.forEach(e.children(),i),t}(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),i=r.edgeObj,a=function(e,t,n,r){var i,a,o=[],s=[],u=Math.min(t[n].low,t[r].low),l=Math.max(t[n].lim,t[r].lim);i=n;do{i=e.parent(i),o.push(i)}while(i&&(t[i].low>u||l>t[i].lim));a=i,i=r;for(;(i=e.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(e,t,i.v,i.w),o=a.path,s=a.lca,u=0,l=o[u],c=!0;n!==i.w;){if(r=e.node(n),c){for(;(l=o[u])!==s&&e.node(l).maxRank<r.rank;)u++;l===s&&(c=!1)}if(!c){for(;u<o.length-1&&e.node(l=o[u+1]).minRank<=r.rank;)u++;l=o[u]}e.setParent(n,l),n=e.successors(n)[0]}}))}},31867:(e,t,n)=>{"use strict";var r=n(27568),i=n(99043).Graph,a=n(51942);function o(e,t){var n={};return r.reduce(t,(function(t,i){var a=0,o=0,s=t.length,l=r.last(i);return r.forEach(i,(function(t,c){var d=function(e,t){if(e.node(t).dummy)return r.find(e.predecessors(t),(function(t){return e.node(t).dummy}))}(e,t),h=d?e.node(d).order:s;(d||t===l)&&(r.forEach(i.slice(o,c+1),(function(t){r.forEach(e.predecessors(t),(function(r){var i=e.node(r),o=i.order;!(o<a||h<o)||i.dummy&&e.node(t).dummy||u(n,r,t)}))})),o=c+1,a=h)})),i})),n}function s(e,t){var n={};function i(t,i,a,o,s){var l;r.forEach(r.range(i,a),(function(i){l=t[i],e.node(l).dummy&&r.forEach(e.predecessors(l),(function(t){var r=e.node(t);r.dummy&&(r.order<o||r.order>s)&&u(n,t,l)}))}))}return r.reduce(t,(function(t,n){var a,o=-1,s=0;return r.forEach(n,(function(r,u){if("border"===e.node(r).dummy){var l=e.predecessors(r);l.length&&(a=e.node(l[0]).order,i(n,s,u,o,a),s=u,o=a)}i(n,s,n.length,a,t.length)})),n})),n}function u(e,t,n){if(t>n){var r=t;t=n,n=r}var i=e[t];i||(e[t]=i={}),i[n]=!0}function l(e,t,n){if(t>n){var i=t;t=n,n=i}return r.has(e[t],n)}function c(e,t,n,i){var a={},o={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){a[e]=e,o[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var u=i(e);if(u.length){u=r.sortBy(u,(function(e){return s[e]}));for(var c=(u.length-1)/2,d=Math.floor(c),h=Math.ceil(c);d<=h;++d){var f=u[d];o[e]===e&&t<s[f]&&!l(n,e,f)&&(o[f]=e,o[e]=a[e]=a[f],t=s[f])}}}))})),{root:a,align:o}}function d(e,t,n,a,o){var s={},u=function(e,t,n,a){var o=new i,s=e.graph(),u=function(e,t,n){return function(i,a,o){var s,u=i.node(a),l=i.node(o),c=0;if(c+=u.width/2,r.has(u,"labelpos"))switch(u.labelpos.toLowerCase()){case"l":s=-u.width/2;break;case"r":s=u.width/2}if(s&&(c+=n?s:-s),s=0,c+=(u.dummy?t:e)/2,c+=(l.dummy?t:e)/2,c+=l.width/2,r.has(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":s=l.width/2;break;case"r":s=-l.width/2}return s&&(c+=n?s:-s),s=0,c}}(s.nodesep,s.edgesep,a);return r.forEach(t,(function(t){var i;r.forEach(t,(function(t){var r=n[t];if(o.setNode(r),i){var a=n[i],s=o.edge(a,r);o.setEdge(a,r,Math.max(u(e,t,i),s||0))}i=t}))})),o}(e,t,n,o),l=o?"borderLeft":"borderRight";function c(e,t){for(var n=u.nodes(),r=n.pop(),i={};r;)i[r]?e(r):(i[r]=!0,n.push(r),n=n.concat(t(r))),r=n.pop()}return c((function(e){s[e]=u.inEdges(e).reduce((function(e,t){return Math.max(e,s[t.v]+u.edge(t))}),0)}),u.predecessors.bind(u)),c((function(t){var n=u.outEdges(t).reduce((function(e,t){return Math.min(e,s[t.w]-u.edge(t))}),Number.POSITIVE_INFINITY),r=e.node(t);n!==Number.POSITIVE_INFINITY&&r.borderType!==l&&(s[t]=Math.max(s[t],n))}),u.successors.bind(u)),r.forEach(a,(function(e){s[e]=s[n[e]]})),s}function h(e,t){return r.minBy(r.values(t),(function(t){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return r.forIn(t,(function(t,r){var a=function(e,t){return e.node(t).width}(e,r)/2;n=Math.max(t+a,n),i=Math.min(t-a,i)})),n-i}))}function f(e,t){var n=r.values(t),i=r.min(n),a=r.max(n);r.forEach(["u","d"],(function(n){r.forEach(["l","r"],(function(o){var s,u=n+o,l=e[u];if(l!==t){var c=r.values(l);(s="l"===o?i-r.min(c):a-r.max(c))&&(e[u]=r.mapValues(l,(function(e){return e+s})))}}))}))}function p(e,t){return r.mapValues(e.ul,(function(n,i){if(t)return e[t.toLowerCase()][i];var a=r.sortBy(r.map(e,i));return(a[1]+a[2])/2}))}e.exports={positionX:function(e){var t,n=a.buildLayerMatrix(e),i=r.merge(o(e,n),s(e,n)),u={};r.forEach(["u","d"],(function(a){t="u"===a?n:r.values(n).reverse(),r.forEach(["l","r"],(function(n){"r"===n&&(t=r.map(t,(function(e){return r.values(e).reverse()})));var o=("u"===a?e.predecessors:e.successors).bind(e),s=c(e,t,i,o),l=d(e,t,s.root,s.align,"r"===n);"r"===n&&(l=r.mapValues(l,(function(e){return-e}))),u[a+n]=l}))}));var l=h(e,u);return f(u,l),p(u,e.graph().align)},findType1Conflicts:o,findType2Conflicts:s,addConflict:u,hasConflict:l,verticalAlignment:c,horizontalCompaction:d,alignCoordinates:f,findSmallestWidthAlignment:h,balance:p}},50199:(e,t,n)=>{"use strict";var r=n(27568),i=n(51942),a=n(31867).positionX;e.exports=function(e){(function(e){var t=i.buildLayerMatrix(e),n=e.graph().ranksep,a=0;r.forEach(t,(function(t){var i=r.max(r.map(t,(function(t){return e.node(t).height})));r.forEach(t,(function(t){e.node(t).y=a+i/2})),a+=i+n}))})(e=i.asNonCompoundGraph(e)),r.forEach(a(e),(function(t,n){e.node(n).x=t}))}},7589:(e,t,n)=>{"use strict";var r=n(27568),i=n(99043).Graph,a=n(51512).slack;function o(e,t){return r.forEach(e.nodes(),(function n(i){r.forEach(t.nodeEdges(i),(function(r){var o=r.v,s=i===o?r.w:o;e.hasNode(s)||a(t,r)||(e.setNode(s,{}),e.setEdge(i,s,{}),n(s))}))})),e.nodeCount()}function s(e,t){return r.minBy(t.edges(),(function(n){if(e.hasNode(n.v)!==e.hasNode(n.w))return a(t,n)}))}function u(e,t,n){r.forEach(e.nodes(),(function(e){t.node(e).rank+=n}))}e.exports=function(e){var t,n,r=new i({directed:!1}),l=e.nodes()[0],c=e.nodeCount();r.setNode(l,{});for(;o(r,e)<c;)t=s(r,e),n=r.hasNode(t.v)?a(e,t):-a(e,t),u(r,e,n);return r}},29102:(e,t,n)=>{"use strict";var r=n(51512).longestPath,i=n(7589),a=n(95823);e.exports=function(e){switch(e.graph().ranker){case"network-simplex":default:s(e);break;case"tight-tree":!function(e){r(e),i(e)}(e);break;case"longest-path":o(e)}};var o=r;function s(e){a(e)}},95823:(e,t,n)=>{"use strict";var r=n(27568),i=n(7589),a=n(51512).slack,o=n(51512).longestPath,s=n(99043).alg.preorder,u=n(99043).alg.postorder,l=n(51942).simplify;function c(e){e=l(e),o(e);var t,n=i(e);for(f(n),d(n,e);t=v(n);)y(n,e,t,g(n,e,t))}function d(e,t){var n=u(e,e.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=h(e,t,n)}(e,t,n)}))}function h(e,t,n){var i=e.node(n).parent,a=!0,o=t.edge(n,i),s=0;return o||(a=!1,o=t.edge(i,n)),s=o.weight,r.forEach(t.nodeEdges(n),(function(r){var o,u,l=r.v===n,c=l?r.w:r.v;if(c!==i){var d=l===a,h=t.edge(r).weight;if(s+=d?h:-h,o=n,u=c,e.hasEdge(o,u)){var f=e.edge(n,c).cutvalue;s+=d?-f:f}}})),s}function f(e,t){arguments.length<2&&(t=e.nodes()[0]),p(e,{},1,t)}function p(e,t,n,i,a){var o=n,s=e.node(i);return t[i]=!0,r.forEach(e.neighbors(i),(function(a){r.has(t,a)||(n=p(e,t,n,a,i))})),s.low=o,s.lim=n++,a?s.parent=a:delete s.parent,n}function v(e){return r.find(e.edges(),(function(t){return e.edge(t).cutvalue<0}))}function g(e,t,n){var i=n.v,o=n.w;t.hasEdge(i,o)||(i=n.w,o=n.v);var s=e.node(i),u=e.node(o),l=s,c=!1;s.lim>u.lim&&(l=u,c=!0);var d=r.filter(t.edges(),(function(t){return c===m(e,e.node(t.v),l)&&c!==m(e,e.node(t.w),l)}));return r.minBy(d,(function(e){return a(t,e)}))}function y(e,t,n,i){var a=n.v,o=n.w;e.removeEdge(a,o),e.setEdge(i.v,i.w,{}),f(e),d(e,t),function(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),i=s(e,n);i=i.slice(1),r.forEach(i,(function(n){var r=e.node(n).parent,i=t.edge(n,r),a=!1;i||(i=t.edge(r,n),a=!0),t.node(n).rank=t.node(r).rank+(a?i.minlen:-i.minlen)}))}(e,t)}function m(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}e.exports=c,c.initLowLimValues=f,c.initCutValues=d,c.calcCutValue=h,c.leaveEdge=v,c.enterEdge=g,c.exchangeEdges=y},51512:(e,t,n)=>{"use strict";var r=n(27568);e.exports={longestPath:function(e){var t={};r.forEach(e.sources(),(function n(i){var a=e.node(i);if(r.has(t,i))return a.rank;t[i]=!0;var o=r.min(r.map(e.outEdges(i),(function(t){return n(t.w)-e.edge(t).minlen})));return o!==Number.POSITIVE_INFINITY&&null!=o||(o=0),a.rank=o}))},slack:function(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}}},51942:(e,t,n)=>{"use strict";var r=n(27568),i=n(99043).Graph;function a(e,t,n,i){var a;do{a=r.uniqueId(i)}while(e.hasNode(a));return n.dummy=t,e.setNode(a,n),a}function o(e){return r.max(r.map(e.nodes(),(function(t){var n=e.node(t).rank;if(!r.isUndefined(n))return n})))}e.exports={addDummyNode:a,simplify:function(e){var t=(new i).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},i=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),t},asNonCompoundGraph:function(e){var t=new i({multigraph:e.isMultigraph()}).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){e.children(n).length||t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){t.setEdge(n,e.edge(n))})),t},successorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.outEdges(t),(function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},predecessorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.inEdges(t),(function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},intersectRect:function(e,t){var n,r,i=e.x,a=e.y,o=t.x-i,s=t.y-a,u=e.width/2,l=e.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*u>Math.abs(o)*l?(s<0&&(l=-l),n=l*o/s,r=l):(o<0&&(u=-u),n=u,r=u*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(e){var t=r.map(r.range(o(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var i=e.node(n),a=i.rank;r.isUndefined(a)||(t[a][i.order]=n)})),t},normalizeRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var i=e.node(n);r.has(i,"rank")&&(i.rank-=t)}))},removeEmptyRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var i=e.node(r).rank-t;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%a!=0?--i:i&&r.forEach(t,(function(t){e.node(t).rank+=i}))}))},addBorderNode:function(e,t,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(e,"border",i,t)},maxRank:o,partition:function(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n},time:function(e,t){var n=r.now();try{return t()}finally{console.log(e+" time: "+(r.now()-n)+"ms")}},notime:function(e,t){return t()}}},50665:e=>{e.exports="0.8.5"},39254:(e,t,n)=>{var r=n(44020);e.exports={Graph:r.Graph,json:n(89063),alg:n(2757),version:r.version}},47205:(e,t,n)=>{var r=n(43329);e.exports=function(e){var t,n={},i=[];function a(i){r.has(n,i)||(n[i]=!0,t.push(i),r.each(e.successors(i),a),r.each(e.predecessors(i),a))}return r.each(e.nodes(),(function(e){t=[],a(e),t.length&&i.push(t)})),i}},56658:(e,t,n)=>{var r=n(43329);function i(e,t,n,a,o,s){r.has(a,t)||(a[t]=!0,n||s.push(t),r.each(o(t),(function(t){i(e,t,n,a,o,s)})),n&&s.push(t))}e.exports=function(e,t,n){r.isArray(t)||(t=[t]);var a=(e.isDirected()?e.successors:e.neighbors).bind(e),o=[],s={};return r.each(t,(function(t){if(!e.hasNode(t))throw new Error("Graph does not have node: "+t);i(e,t,"post"===n,s,a,o)})),o}},41884:(e,t,n)=>{var r=n(42081),i=n(43329);e.exports=function(e,t,n){return i.transform(e.nodes(),(function(i,a){i[a]=r(e,a,t,n)}),{})}},42081:(e,t,n)=>{var r=n(43329),i=n(35472);e.exports=function(e,t,n,r){return function(e,t,n,r){var a,o,s={},u=new i,l=function(e){var t=e.v!==a?e.v:e.w,r=s[t],i=n(e),l=o.distance+i;if(i<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+e+" Weight: "+i);l<r.distance&&(r.distance=l,r.predecessor=a,u.decrease(t,l))};e.nodes().forEach((function(e){var n=e===t?0:Number.POSITIVE_INFINITY;s[e]={distance:n},u.add(e,n)}));for(;u.size()>0&&(a=u.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(l);return s}(e,String(t),n||a,r||function(t){return e.outEdges(t)})};var a=r.constant(1)},40641:(e,t,n)=>{var r=n(43329),i=n(45379);e.exports=function(e){return r.filter(i(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}},13917:(e,t,n)=>{var r=n(43329);e.exports=function(e,t,n){return function(e,t,n){var r={},i=e.nodes();return i.forEach((function(e){r[e]={},r[e][e]={distance:0},i.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var i=n.v===e?n.w:n.v,a=t(n);r[e][i]={distance:a,predecessor:e}}))})),i.forEach((function(e){var t=r[e];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[e],i=t[n],o=a[n],s=r.distance+i.distance;s<o.distance&&(o.distance=s,o.predecessor=i.predecessor)}))}))})),r}(e,t||i,n||function(t){return e.outEdges(t)})};var i=r.constant(1)},2757:(e,t,n)=>{e.exports={components:n(47205),dijkstra:n(42081),dijkstraAll:n(41884),findCycles:n(40641),floydWarshall:n(13917),isAcyclic:n(66069),postorder:n(49444),preorder:n(54911),prim:n(73873),tarjan:n(45379),topsort:n(85954)}},66069:(e,t,n)=>{var r=n(85954);e.exports=function(e){try{r(e)}catch(t){if(t instanceof r.CycleException)return!1;throw t}return!0}},49444:(e,t,n)=>{var r=n(56658);e.exports=function(e,t){return r(e,t,"post")}},54911:(e,t,n)=>{var r=n(56658);e.exports=function(e,t){return r(e,t,"pre")}},73873:(e,t,n)=>{var r=n(43329),i=n(14015),a=n(35472);e.exports=function(e,t){var n,o=new i,s={},u=new a;function l(e){var r=e.v===n?e.w:e.v,i=u.priority(r);if(void 0!==i){var a=t(e);a<i&&(s[r]=n,u.decrease(r,a))}}if(0===e.nodeCount())return o;r.each(e.nodes(),(function(e){u.add(e,Number.POSITIVE_INFINITY),o.setNode(e)})),u.decrease(e.nodes()[0],0);var c=!1;for(;u.size()>0;){if(n=u.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(c)throw new Error("Input graph is not connected: "+e);c=!0}e.nodeEdges(n).forEach(l)}return o}},45379:(e,t,n)=>{var r=n(43329);e.exports=function(e){var t=0,n=[],i={},a=[];function o(s){var u=i[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach((function(e){r.has(i,e)?i[e].onStack&&(u.lowlink=Math.min(u.lowlink,i[e].index)):(o(e),u.lowlink=Math.min(u.lowlink,i[e].lowlink))})),u.lowlink===u.index){var l,c=[];do{l=n.pop(),i[l].onStack=!1,c.push(l)}while(s!==l);a.push(c)}}return e.nodes().forEach((function(e){r.has(i,e)||o(e)})),a}},85954:(e,t,n)=>{var r=n(43329);function i(e){var t={},n={},i=[];if(r.each(e.sinks(),(function o(s){if(r.has(n,s))throw new a;r.has(t,s)||(n[s]=!0,t[s]=!0,r.each(e.predecessors(s),o),delete n[s],i.push(s))})),r.size(t)!==e.nodeCount())throw new a;return i}function a(){}e.exports=i,i.CycleException=a,a.prototype=new Error},35472:(e,t,n)=>{var r=n(43329);function i(){this._arr=[],this._keyIndices={}}e.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},i.prototype.has=function(e){return r.has(this._keyIndices,e)},i.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var i=this._arr,a=i.length;return n[e]=a,i.push({key:e,priority:t}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},i.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+e+" Old: "+this._arr[n].priority+" New: "+t);this._arr[n].priority=t,this._decrease(n)},i.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,i=e;n<t.length&&(i=t[n].priority<t[i].priority?n:i,r<t.length&&(i=t[r].priority<t[i].priority?r:i),i!==e&&(this._swap(e,i),this._heapify(i)))},i.prototype._decrease=function(e){for(var t,n=this._arr,r=n[e].priority;0!==e&&!(n[t=e>>1].priority<r);)this._swap(e,t),e=t},i.prototype._swap=function(e,t){var n=this._arr,r=this._keyIndices,i=n[e],a=n[t];n[e]=a,n[t]=i,r[a.key]=e,r[i.key]=t}},14015:(e,t,n)=>{"use strict";var r=n(43329);e.exports=a;var i="\0";function a(e){this._isDirected=!r.has(e,"directed")||e.directed,this._isMultigraph=!!r.has(e,"multigraph")&&e.multigraph,this._isCompound=!!r.has(e,"compound")&&e.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function o(e,t){e[t]?e[t]++:e[t]=1}function s(e,t){--e[t]||delete e[t]}function u(e,t,n,i){var a=""+t,o=""+n;if(!e&&a>o){var s=a;a=o,o=s}return a+"\x01"+o+"\x01"+(r.isUndefined(i)?"\0":i)}function l(e,t,n,r){var i=""+t,a=""+n;if(!e&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function c(e,t){return u(e,t.v,t.w,t.name)}a.prototype._nodeCount=0,a.prototype._edgeCount=0,a.prototype.isDirected=function(){return this._isDirected},a.prototype.isMultigraph=function(){return this._isMultigraph},a.prototype.isCompound=function(){return this._isCompound},a.prototype.setGraph=function(e){return this._label=e,this},a.prototype.graph=function(){return this._label},a.prototype.setDefaultNodeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultNodeLabelFn=e,this},a.prototype.nodeCount=function(){return this._nodeCount},a.prototype.nodes=function(){return r.keys(this._nodes)},a.prototype.sources=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._in[t])}))},a.prototype.sinks=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._out[t])}))},a.prototype.setNodes=function(e,t){var n=arguments,i=this;return r.each(e,(function(e){n.length>1?i.setNode(e,t):i.setNode(e)})),this},a.prototype.setNode=function(e,t){return r.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=i,this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},a.prototype.node=function(e){return this._nodes[e]},a.prototype.hasNode=function(e){return r.has(this._nodes,e)},a.prototype.removeNode=function(e){var t=this;if(r.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],r.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),r.each(r.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],r.each(r.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},a.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(t))t=i;else{for(var n=t+="";!r.isUndefined(n);n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},a.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},a.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==i)return t}},a.prototype.children=function(e){if(r.isUndefined(e)&&(e=i),this._isCompound){var t=this._children[e];if(t)return r.keys(t)}else{if(e===i)return this.nodes();if(this.hasNode(e))return[]}},a.prototype.predecessors=function(e){var t=this._preds[e];if(t)return r.keys(t)},a.prototype.successors=function(e){var t=this._sucs[e];if(t)return r.keys(t)},a.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return r.union(t,this.successors(e))},a.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},a.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),r.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var i={};function a(e){var r=n.parent(e);return void 0===r||t.hasNode(r)?(i[e]=r,r):r in i?i[r]:a(r)}return this._isCompound&&r.each(t.nodes(),(function(e){t.setParent(e,a(e))})),t},a.prototype.setDefaultEdgeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultEdgeLabelFn=e,this},a.prototype.edgeCount=function(){return this._edgeCount},a.prototype.edges=function(){return r.values(this._edgeObjs)},a.prototype.setPath=function(e,t){var n=this,i=arguments;return r.reduce(e,(function(e,r){return i.length>1?n.setEdge(e,r,t):n.setEdge(e,r),r})),this},a.prototype.setEdge=function(){var e,t,n,i,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(e=s.v,t=s.w,n=s.name,2===arguments.length&&(i=arguments[1],a=!0)):(e=s,t=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,t=""+t,r.isUndefined(n)||(n=""+n);var c=u(this._isDirected,e,t,n);if(r.has(this._edgeLabels,c))return a&&(this._edgeLabels[c]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[c]=a?i:this._defaultEdgeLabelFn(e,t,n);var d=l(this._isDirected,e,t,n);return e=d.v,t=d.w,Object.freeze(d),this._edgeObjs[c]=d,o(this._preds[t],e),o(this._sucs[e],t),this._in[t][c]=d,this._out[e][c]=d,this._edgeCount++,this},a.prototype.edge=function(e,t,n){var r=1===arguments.length?c(this._isDirected,arguments[0]):u(this._isDirected,e,t,n);return this._edgeLabels[r]},a.prototype.hasEdge=function(e,t,n){var i=1===arguments.length?c(this._isDirected,arguments[0]):u(this._isDirected,e,t,n);return r.has(this._edgeLabels,i)},a.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?c(this._isDirected,arguments[0]):u(this._isDirected,e,t,n),i=this._edgeObjs[r];return i&&(e=i.v,t=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],s(this._preds[t],e),s(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},a.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var i=r.values(n);return t?r.filter(i,(function(e){return e.v===t})):i}},a.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var i=r.values(n);return t?r.filter(i,(function(e){return e.w===t})):i}},a.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},44020:(e,t,n)=>{e.exports={Graph:n(14015),version:n(86471)}},89063:(e,t,n)=>{var r=n(43329),i=n(14015);function a(e){return r.map(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.isUndefined(n)||(a.value=n),r.isUndefined(i)||(a.parent=i),a}))}function o(e){return r.map(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.isUndefined(t.name)||(i.name=t.name),r.isUndefined(n)||(i.value=n),i}))}e.exports={write:function(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:a(e),edges:o(e)};r.isUndefined(e.graph())||(t.value=r.clone(e.graph()));return t},read:function(e){var t=new i(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}}},43329:(e,t,n)=>{var r;try{r={clone:n(13784),constant:n(551),each:n(72856),filter:n(69238),has:n(73915),isArray:n(19785),isEmpty:n(90104),isFunction:n(28338),isUndefined:n(92465),keys:n(50098),map:n(55807),reduce:n(34172),size:n(36417),transform:n(42673),union:n(68946),values:n(58185)}}catch(i){}r||(r=window._),e.exports=r},86471:e=>{e.exports="2.1.8"},87251:(e,t,n)=>{e.exports=n(21208)},21208:function(e,t){var n,r,i;(function(){var a,o,s,u,l,c,d,h,f,p,v,g,y,m,b;s=Math.floor,p=Math.min,o=function(e,t){return e<t?-1:e>t?1:0},f=function(e,t,n,r,i){var a;if(null==n&&(n=0),null==i&&(i=o),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)i(t,e[a=s((n+r)/2)])<0?r=a:n=a+1;return[].splice.apply(e,[n,n-n].concat(t)),t},c=function(e,t,n){return null==n&&(n=o),e.push(t),m(e,0,e.length-1,n)},l=function(e,t){var n,r;return null==t&&(t=o),n=e.pop(),e.length?(r=e[0],e[0]=n,b(e,0,t)):r=n,r},h=function(e,t,n){var r;return null==n&&(n=o),r=e[0],e[0]=t,b(e,0,n),r},d=function(e,t,n){var r;return null==n&&(n=o),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],b(e,0,n)),t},u=function(e,t){var n,r,i,a,u,l;for(null==t&&(t=o),a=function(){l=[];for(var t=0,n=s(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)l.push(t);return l}.apply(this).reverse(),u=[],r=0,i=a.length;r<i;r++)n=a[r],u.push(b(e,n,t));return u},y=function(e,t,n){var r;if(null==n&&(n=o),-1!==(r=e.indexOf(t)))return m(e,0,r,n),b(e,r,n)},v=function(e,t,n){var r,i,a,s,l;if(null==n&&(n=o),!(i=e.slice(0,t)).length)return i;for(u(i,n),a=0,s=(l=e.slice(t)).length;a<s;a++)r=l[a],d(i,r,n);return i.sort(n).reverse()},g=function(e,t,n){var r,i,a,s,c,d,h,v,g;if(null==n&&(n=o),10*t<=e.length){if(!(a=e.slice(0,t).sort(n)).length)return a;for(i=a[a.length-1],s=0,d=(h=e.slice(t)).length;s<d;s++)n(r=h[s],i)<0&&(f(a,r,0,null,n),a.pop(),i=a[a.length-1]);return a}for(u(e,n),g=[],c=0,v=p(t,e.length);0<=v?c<v:c>v;0<=v?++c:--c)g.push(l(e,n));return g},m=function(e,t,n,r){var i,a,s;for(null==r&&(r=o),i=e[n];n>t&&r(i,a=e[s=n-1>>1])<0;)e[n]=a,n=s;return e[n]=i},b=function(e,t,n){var r,i,a,s,u;for(null==n&&(n=o),i=e.length,u=t,a=e[t],r=2*t+1;r<i;)(s=r+1)<i&&!(n(e[r],e[s])<0)&&(r=s),e[t]=e[r],r=2*(t=r)+1;return e[t]=a,m(e,u,t,n)},a=function(){function e(e){this.cmp=null!=e?e:o,this.nodes=[]}return e.push=c,e.pop=l,e.replace=h,e.pushpop=d,e.heapify=u,e.updateItem=y,e.nlargest=v,e.nsmallest=g,e.prototype.push=function(e){return c(this.nodes,e,this.cmp)},e.prototype.pop=function(){return l(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return h(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return d(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return u(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return y(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),r=[],void 0===(i="function"==typeof(n=function(){return a})?n.apply(t,r):n)||(e.exports=i)}).call(this)},82545:(e,t,n)=>{var r=n(81822)(n(77400),"DataView");e.exports=r},96586:(e,t,n)=>{var r=n(57753),i=n(82452),a=n(22115),o=n(38256),s=n(67426);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=o,u.prototype.set=s,e.exports=u},36301:(e,t,n)=>{var r=n(69417),i=n(72470),a=n(66165),o=n(71873),s=n(52556);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=o,u.prototype.set=s,e.exports=u},44538:(e,t,n)=>{var r=n(81822)(n(77400),"Map");e.exports=r},74554:(e,t,n)=>{var r=n(39448),i=n(7738),a=n(66575),o=n(7238),s=n(38738);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=o,u.prototype.set=s,e.exports=u},64825:(e,t,n)=>{var r=n(81822)(n(77400),"Promise");e.exports=r},46151:(e,t,n)=>{var r=n(81822)(n(77400),"Set");e.exports=r},52485:(e,t,n)=>{var r=n(74554),i=n(38639),a=n(88379);function o(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}o.prototype.add=o.prototype.push=i,o.prototype.has=a,e.exports=o},23694:(e,t,n)=>{var r=n(36301),i=n(7354),a=n(5863),o=n(12367),s=n(90748),u=n(97569);function l(e){var t=this.__data__=new r(e);this.size=t.size}l.prototype.clear=i,l.prototype.delete=a,l.prototype.get=o,l.prototype.has=s,l.prototype.set=u,e.exports=l},96539:(e,t,n)=>{var r=n(77400).Symbol;e.exports=r},59942:(e,t,n)=>{var r=n(77400).Uint8Array;e.exports=r},66902:(e,t,n)=>{var r=n(81822)(n(77400),"WeakMap");e.exports=r},79349:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},80594:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},10263:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}},58095:(e,t,n)=>{var r=n(8817);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},21796:e=>{e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}},98213:(e,t,n)=>{var r=n(24701),i=n(2900),a=n(19785),o=n(43854),s=n(42383),u=n(48519),l=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),c=!n&&i(e),d=!n&&!c&&o(e),h=!n&&!c&&!d&&u(e),f=n||c||d||h,p=f?r(e.length,String):[],v=p.length;for(var g in e)!t&&!l.call(e,g)||f&&("length"==g||d&&("offset"==g||"parent"==g)||h&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,v))||p.push(g);return p}},66070:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},97141:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},6446:e=>{e.exports=function(e,t,n,r){var i=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}},90756:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},46008:(e,t,n)=>{var r=n(50517)("length");e.exports=r},73140:(e,t,n)=>{var r=n(88799),i=n(85638);e.exports=function(e,t,n){(void 0!==n&&!i(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},71928:(e,t,n)=>{var r=n(88799),i=n(85638),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];a.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},93382:(e,t,n)=>{var r=n(85638);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},41876:(e,t,n)=>{var r=n(35159),i=n(50098);e.exports=function(e,t){return e&&r(t,i(t),e)}},5947:(e,t,n)=>{var r=n(35159),i=n(13996);e.exports=function(e,t){return e&&r(t,i(t),e)}},88799:(e,t,n)=>{var r=n(42630);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},40699:(e,t,n)=>{var r=n(23694),i=n(80594),a=n(71928),o=n(41876),s=n(5947),u=n(2734),l=n(37561),c=n(77262),d=n(37048),h=n(51385),f=n(39759),p=n(3533),v=n(86541),g=n(2078),y=n(97635),m=n(19785),b=n(43854),x=n(98247),w=n(11611),E=n(47614),k=n(50098),_=n(13996),C="[object Arguments]",S="[object Function]",P="[object Object]",D={};D[C]=D["[object Array]"]=D["[object ArrayBuffer]"]=D["[object DataView]"]=D["[object Boolean]"]=D["[object Date]"]=D["[object Float32Array]"]=D["[object Float64Array]"]=D["[object Int8Array]"]=D["[object Int16Array]"]=D["[object Int32Array]"]=D["[object Map]"]=D["[object Number]"]=D[P]=D["[object RegExp]"]=D["[object Set]"]=D["[object String]"]=D["[object Symbol]"]=D["[object Uint8Array]"]=D["[object Uint8ClampedArray]"]=D["[object Uint16Array]"]=D["[object Uint32Array]"]=!0,D["[object Error]"]=D[S]=D["[object WeakMap]"]=!1,e.exports=function e(t,n,T,M,B,N){var I,O=1&n,z=2&n,L=4&n;if(T&&(I=B?T(t,M,B,N):T(t)),void 0!==I)return I;if(!w(t))return t;var A=m(t);if(A){if(I=v(t),!O)return l(t,I)}else{var j=p(t),R=j==S||"[object GeneratorFunction]"==j;if(b(t))return u(t,O);if(j==P||j==C||R&&!B){if(I=z||R?{}:y(t),!O)return z?d(t,s(I,t)):c(t,o(I,t))}else{if(!D[j])return B?t:{};I=g(t,j,O)}}N||(N=new r);var F=N.get(t);if(F)return F;N.set(t,I),E(t)?t.forEach((function(r){I.add(e(r,n,T,r,t,N))})):x(t)&&t.forEach((function(r,i){I.set(i,e(r,n,T,i,t,N))}));var V=A?void 0:(L?z?f:h:z?_:k)(t);return i(V||t,(function(r,i){V&&(r=t[i=r]),a(I,i,e(r,n,T,i,t,N))})),I}},80158:(e,t,n)=>{var r=n(11611),i=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},52033:(e,t,n)=>{var r=n(26194),i=n(26789)(r);e.exports=i},58403:(e,t,n)=>{var r=n(55193);e.exports=function(e,t,n){for(var i=-1,a=e.length;++i<a;){var o=e[i],s=t(o);if(null!=s&&(void 0===u?s==s&&!r(s):n(s,u)))var u=s,l=o}return l}},98129:(e,t,n)=>{var r=n(52033);e.exports=function(e,t){var n=[];return r(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}},95372:e=>{e.exports=function(e,t,n,r){for(var i=e.length,a=n+(r?1:-1);r?a--:++a<i;)if(t(e[a],a,e))return a;return-1}},23545:(e,t,n)=>{var r=n(97141),i=n(72889);e.exports=function e(t,n,a,o,s){var u=-1,l=t.length;for(a||(a=i),s||(s=[]);++u<l;){var c=t[u];n>0&&a(c)?n>1?e(c,n-1,a,o,s):r(s,c):o||(s[s.length]=c)}return s}},49819:(e,t,n)=>{var r=n(18911)();e.exports=r},26194:(e,t,n)=>{var r=n(49819),i=n(50098);e.exports=function(e,t){return e&&r(e,t,i)}},79867:(e,t,n)=>{var r=n(76747),i=n(37948);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[i(t[n++])];return n&&n==a?e:void 0}},11324:(e,t,n)=>{var r=n(97141),i=n(19785);e.exports=function(e,t,n){var a=t(e);return i(e)?a:r(a,n(e))}},99736:(e,t,n)=>{var r=n(96539),i=n(34840),a=n(21258),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},59517:e=>{e.exports=function(e,t){return e>t}},30124:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e,n){return null!=e&&t.call(e,n)}},21610:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},8817:(e,t,n)=>{var r=n(95372),i=n(1129),a=n(58263);e.exports=function(e,t,n){return t==t?a(e,t,n):r(e,i,n)}},55829:(e,t,n)=>{var r=n(99736),i=n(92360);e.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},32866:(e,t,n)=>{var r=n(12772),i=n(92360);e.exports=function e(t,n,a,o,s){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,a,o,e,s))}},12772:(e,t,n)=>{var r=n(23694),i=n(27042),a=n(370),o=n(39584),s=n(3533),u=n(19785),l=n(43854),c=n(48519),d="[object Arguments]",h="[object Array]",f="[object Object]",p=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,v,g,y){var m=u(e),b=u(t),x=m?h:s(e),w=b?h:s(t),E=(x=x==d?f:x)==f,k=(w=w==d?f:w)==f,_=x==w;if(_&&l(e)){if(!l(t))return!1;m=!0,E=!1}if(_&&!E)return y||(y=new r),m||c(e)?i(e,t,n,v,g,y):a(e,t,x,n,v,g,y);if(!(1&n)){var C=E&&p.call(e,"__wrapped__"),S=k&&p.call(t,"__wrapped__");if(C||S){var P=C?e.value():e,D=S?t.value():t;return y||(y=new r),g(P,D,n,v,y)}}return!!_&&(y||(y=new r),o(e,t,n,v,g,y))}},57657:(e,t,n)=>{var r=n(3533),i=n(92360);e.exports=function(e){return i(e)&&"[object Map]"==r(e)}},19850:(e,t,n)=>{var r=n(23694),i=n(32866);e.exports=function(e,t,n,a){var o=n.length,s=o,u=!a;if(null==e)return!s;for(e=Object(e);o--;){var l=n[o];if(u&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++o<s;){var c=(l=n[o])[0],d=e[c],h=l[1];if(u&&l[2]){if(void 0===d&&!(c in e))return!1}else{var f=new r;if(a)var p=a(d,h,c,e,t,f);if(!(void 0===p?i(h,d,3,a,f):p))return!1}}return!0}},1129:e=>{e.exports=function(e){return e!=e}},46729:(e,t,n)=>{var r=n(28338),i=n(99678),a=n(11611),o=n(76532),s=/^\[object .+?Constructor\]$/,u=Function.prototype,l=Object.prototype,c=u.toString,d=l.hasOwnProperty,h=RegExp("^"+c.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?h:s).test(o(e))}},26903:(e,t,n)=>{var r=n(3533),i=n(92360);e.exports=function(e){return i(e)&&"[object Set]"==r(e)}},26972:(e,t,n)=>{var r=n(99736),i=n(84194),a=n(92360),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&i(e.length)&&!!o[r(e)]}},89278:(e,t,n)=>{var r=n(71410),i=n(57518),a=n(31137),o=n(19785),s=n(96001);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?o(e)?i(e[0],e[1]):r(e):s(e)}},20186:(e,t,n)=>{var r=n(56016),i=n(50962),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},59464:(e,t,n)=>{var r=n(11611),i=n(56016),a=n(21586),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=i(e),n=[];for(var s in e)("constructor"!=s||!t&&o.call(e,s))&&n.push(s);return n}},73818:e=>{e.exports=function(e,t){return e<t}},67375:(e,t,n)=>{var r=n(52033),i=n(80068);e.exports=function(e,t){var n=-1,a=i(e)?Array(e.length):[];return r(e,(function(e,r,i){a[++n]=t(e,r,i)})),a}},71410:(e,t,n)=>{var r=n(19850),i=n(68125),a=n(65042);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},57518:(e,t,n)=>{var r=n(32866),i=n(99729),a=n(79749),o=n(40318),s=n(68302),u=n(65042),l=n(37948);e.exports=function(e,t){return o(e)&&s(t)?u(l(e),t):function(n){var o=i(n,e);return void 0===o&&o===t?a(n,e):r(t,o,3)}}},40015:(e,t,n)=>{var r=n(23694),i=n(73140),a=n(49819),o=n(68867),s=n(11611),u=n(13996),l=n(97494);e.exports=function e(t,n,c,d,h){t!==n&&a(n,(function(a,u){if(h||(h=new r),s(a))o(t,n,u,c,e,d,h);else{var f=d?d(l(t,u),a,u+"",t,n,h):void 0;void 0===f&&(f=a),i(t,u,f)}}),u)}},68867:(e,t,n)=>{var r=n(73140),i=n(2734),a=n(63428),o=n(37561),s=n(97635),u=n(2900),l=n(19785),c=n(36468),d=n(43854),h=n(28338),f=n(11611),p=n(40861),v=n(48519),g=n(97494),y=n(89328);e.exports=function(e,t,n,m,b,x,w){var E=g(e,n),k=g(t,n),_=w.get(k);if(_)r(e,n,_);else{var C=x?x(E,k,n+"",e,t,w):void 0,S=void 0===C;if(S){var P=l(k),D=!P&&d(k),T=!P&&!D&&v(k);C=k,P||D||T?l(E)?C=E:c(E)?C=o(E):D?(S=!1,C=i(k,!0)):T?(S=!1,C=a(k,!0)):C=[]:p(k)||u(k)?(C=E,u(E)?C=y(E):f(E)&&!h(E)||(C=s(k))):S=!1}S&&(w.set(k,C),b(C,k,m,x,w),w.delete(k)),r(e,n,C)}}},98497:(e,t,n)=>{var r=n(66070),i=n(79867),a=n(89278),o=n(67375),s=n(73303),u=n(39334),l=n(96348),c=n(31137),d=n(19785);e.exports=function(e,t,n){t=t.length?r(t,(function(e){return d(e)?function(t){return i(t,1===e.length?e[0]:e)}:e})):[c];var h=-1;t=r(t,u(a));var f=o(e,(function(e,n,i){return{criteria:r(t,(function(t){return t(e)})),index:++h,value:e}}));return s(f,(function(e,t){return l(e,t,n)}))}},63005:(e,t,n)=>{var r=n(10228),i=n(79749);e.exports=function(e,t){return r(e,t,(function(t,n){return i(e,n)}))}},10228:(e,t,n)=>{var r=n(79867),i=n(78859),a=n(76747);e.exports=function(e,t,n){for(var o=-1,s=t.length,u={};++o<s;){var l=t[o],c=r(e,l);n(c,l)&&i(u,a(l,e),c)}return u}},50517:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},10301:(e,t,n)=>{var r=n(79867);e.exports=function(e){return function(t){return r(t,e)}}},18365:e=>{var t=Math.ceil,n=Math.max;e.exports=function(e,r,i,a){for(var o=-1,s=n(t((r-e)/(i||1)),0),u=Array(s);s--;)u[a?s:++o]=e,e+=i;return u}},19356:e=>{e.exports=function(e,t,n,r,i){return i(e,(function(e,i,a){n=r?(r=!1,e):t(n,e,i,a)})),n}},1197:(e,t,n)=>{var r=n(31137),i=n(11871),a=n(63132);e.exports=function(e,t){return a(i(e,t,r),e+"")}},78859:(e,t,n)=>{var r=n(71928),i=n(76747),a=n(42383),o=n(11611),s=n(37948);e.exports=function(e,t,n,u){if(!o(e))return e;for(var l=-1,c=(t=i(t,e)).length,d=c-1,h=e;null!=h&&++l<c;){var f=s(t[l]),p=n;if("__proto__"===f||"constructor"===f||"prototype"===f)return e;if(l!=d){var v=h[f];void 0===(p=u?u(v,f,h):void 0)&&(p=o(v)?v:a(t[l+1])?[]:{})}r(h,f,p),h=h[f]}return e}},54459:(e,t,n)=>{var r=n(551),i=n(42630),a=n(31137),o=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;e.exports=o},73303:e=>{e.exports=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}},24701:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},34282:(e,t,n)=>{var r=n(96539),i=n(66070),a=n(19785),o=n(55193),s=r?r.prototype:void 0,u=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return u?u.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},74833:(e,t,n)=>{var r=n(56127),i=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(i,""):e}},39334:e=>{e.exports=function(e){return function(t){return e(t)}}},92198:(e,t,n)=>{var r=n(52485),i=n(58095),a=n(21796),o=n(65581),s=n(47111),u=n(43735);e.exports=function(e,t,n){var l=-1,c=i,d=e.length,h=!0,f=[],p=f;if(n)h=!1,c=a;else if(d>=200){var v=t?null:s(e);if(v)return u(v);h=!1,c=o,p=new r}else p=t?[]:f;e:for(;++l<d;){var g=e[l],y=t?t(g):g;if(g=n||0!==g?g:0,h&&y==y){for(var m=p.length;m--;)if(p[m]===y)continue e;t&&p.push(y),f.push(g)}else c(p,y,n)||(p!==f&&p.push(y),f.push(g))}return f}},42231:(e,t,n)=>{var r=n(66070);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},5024:e=>{e.exports=function(e,t,n){for(var r=-1,i=e.length,a=t.length,o={};++r<i;){var s=r<a?t[r]:void 0;n(o,e[r],s)}return o}},65581:e=>{e.exports=function(e,t){return e.has(t)}},62079:(e,t,n)=>{var r=n(31137);e.exports=function(e){return"function"==typeof e?e:r}},76747:(e,t,n)=>{var r=n(19785),i=n(40318),a=n(23419),o=n(65567);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:a(o(e))}},95825:(e,t,n)=>{var r=n(59942);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},2734:(e,t,n)=>{e=n.nmd(e);var r=n(77400),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}},61859:(e,t,n)=>{var r=n(95825);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},9377:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},24116:(e,t,n)=>{var r=n(96539),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},63428:(e,t,n)=>{var r=n(95825);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},17845:(e,t,n)=>{var r=n(55193);e.exports=function(e,t){if(e!==t){var n=void 0!==e,i=null===e,a=e==e,o=r(e),s=void 0!==t,u=null===t,l=t==t,c=r(t);if(!u&&!c&&!o&&e>t||o&&s&&l&&!u&&!c||i&&s&&l||!n&&l||!a)return 1;if(!i&&!o&&!c&&e<t||c&&n&&a&&!i&&!o||u&&n&&a||!s&&a||!l)return-1}return 0}},96348:(e,t,n)=>{var r=n(17845);e.exports=function(e,t,n){for(var i=-1,a=e.criteria,o=t.criteria,s=a.length,u=n.length;++i<s;){var l=r(a[i],o[i]);if(l)return i>=u?l:l*("desc"==n[i]?-1:1)}return e.index-t.index}},37561:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},35159:(e,t,n)=>{var r=n(71928),i=n(88799);e.exports=function(e,t,n,a){var o=!n;n||(n={});for(var s=-1,u=t.length;++s<u;){var l=t[s],c=a?a(n[l],e[l],l,n,e):void 0;void 0===c&&(c=e[l]),o?i(n,l,c):r(n,l,c)}return n}},77262:(e,t,n)=>{var r=n(35159),i=n(83080);e.exports=function(e,t){return r(e,i(e),t)}},37048:(e,t,n)=>{var r=n(35159),i=n(30791);e.exports=function(e,t){return r(e,i(e),t)}},64937:(e,t,n)=>{var r=n(77400)["__core-js_shared__"];e.exports=r},7270:(e,t,n)=>{var r=n(1197),i=n(57535);e.exports=function(e){return r((function(t,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),t=Object(t);++r<a;){var u=n[r];u&&e(t,u,r,o)}return t}))}},26789:(e,t,n)=>{var r=n(80068);e.exports=function(e,t){return function(n,i){if(null==n)return n;if(!r(n))return e(n,i);for(var a=n.length,o=t?a:-1,s=Object(n);(t?o--:++o<a)&&!1!==i(s[o],o,s););return n}}},18911:e=>{e.exports=function(e){return function(t,n,r){for(var i=-1,a=Object(t),o=r(t),s=o.length;s--;){var u=o[e?s:++i];if(!1===n(a[u],u,a))break}return t}}},56632:(e,t,n)=>{var r=n(89278),i=n(80068),a=n(50098);e.exports=function(e){return function(t,n,o){var s=Object(t);if(!i(t)){var u=r(n,3);t=a(t),n=function(e){return u(s[e],e,s)}}var l=e(t,n,o);return l>-1?s[u?t[l]:l]:void 0}}},55294:(e,t,n)=>{var r=n(18365),i=n(57535),a=n(94919);e.exports=function(e){return function(t,n,o){return o&&"number"!=typeof o&&i(t,n,o)&&(n=o=void 0),t=a(t),void 0===n?(n=t,t=0):n=a(n),o=void 0===o?t<n?1:-1:a(o),r(t,n,o,e)}}},47111:(e,t,n)=>{var r=n(46151),i=n(50344),a=n(43735),o=r&&1/a(new r([,-0]))[1]==1/0?function(e){return new r(e)}:i;e.exports=o},42630:(e,t,n)=>{var r=n(81822),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},27042:(e,t,n)=>{var r=n(52485),i=n(90756),a=n(65581);e.exports=function(e,t,n,o,s,u){var l=1&n,c=e.length,d=t.length;if(c!=d&&!(l&&d>c))return!1;var h=u.get(e),f=u.get(t);if(h&&f)return h==t&&f==e;var p=-1,v=!0,g=2&n?new r:void 0;for(u.set(e,t),u.set(t,e);++p<c;){var y=e[p],m=t[p];if(o)var b=l?o(m,y,p,t,e,u):o(y,m,p,e,t,u);if(void 0!==b){if(b)continue;v=!1;break}if(g){if(!i(t,(function(e,t){if(!a(g,t)&&(y===e||s(y,e,n,o,u)))return g.push(t)}))){v=!1;break}}else if(y!==m&&!s(y,m,n,o,u)){v=!1;break}}return u.delete(e),u.delete(t),v}},370:(e,t,n)=>{var r=n(96539),i=n(59942),a=n(85638),o=n(27042),s=n(19383),u=n(43735),l=r?r.prototype:void 0,c=l?l.valueOf:void 0;e.exports=function(e,t,n,r,l,d,h){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var f=s;case"[object Set]":var p=1&r;if(f||(f=u),e.size!=t.size&&!p)return!1;var v=h.get(e);if(v)return v==t;r|=2,h.set(e,t);var g=o(f(e),f(t),r,l,d,h);return h.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},39584:(e,t,n)=>{var r=n(51385),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,a,o,s){var u=1&n,l=r(e),c=l.length;if(c!=r(t).length&&!u)return!1;for(var d=c;d--;){var h=l[d];if(!(u?h in t:i.call(t,h)))return!1}var f=s.get(e),p=s.get(t);if(f&&p)return f==t&&p==e;var v=!0;s.set(e,t),s.set(t,e);for(var g=u;++d<c;){var y=e[h=l[d]],m=t[h];if(a)var b=u?a(m,y,h,t,e,s):a(y,m,h,e,t,s);if(!(void 0===b?y===m||o(y,m,n,a,s):b)){v=!1;break}g||(g="constructor"==h)}if(v&&!g){var x=e.constructor,w=t.constructor;x==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof x&&x instanceof x&&"function"==typeof w&&w instanceof w||(v=!1)}return s.delete(e),s.delete(t),v}},24288:(e,t,n)=>{var r=n(89754),i=n(11871),a=n(63132);e.exports=function(e){return a(i(e,void 0,r),e+"")}},39120:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},51385:(e,t,n)=>{var r=n(11324),i=n(83080),a=n(50098);e.exports=function(e){return r(e,a,i)}},39759:(e,t,n)=>{var r=n(11324),i=n(30791),a=n(13996);e.exports=function(e){return r(e,a,i)}},95899:(e,t,n)=>{var r=n(54479);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},68125:(e,t,n)=>{var r=n(68302),i=n(50098);e.exports=function(e){for(var t=i(e),n=t.length;n--;){var a=t[n],o=e[a];t[n]=[a,o,r(o)]}return t}},81822:(e,t,n)=>{var r=n(46729),i=n(15371);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},2173:(e,t,n)=>{var r=n(58023)(Object.getPrototypeOf,Object);e.exports=r},34840:(e,t,n)=>{var r=n(96539),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(u){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},83080:(e,t,n)=>{var r=n(10263),i=n(15937),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(e){return null==e?[]:(e=Object(e),r(o(e),(function(t){return a.call(e,t)})))}:i;e.exports=s},30791:(e,t,n)=>{var r=n(97141),i=n(2173),a=n(83080),o=n(15937),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=i(e);return t}:o;e.exports=s},3533:(e,t,n)=>{var r=n(82545),i=n(44538),a=n(64825),o=n(46151),s=n(66902),u=n(99736),l=n(76532),c="[object Map]",d="[object Promise]",h="[object Set]",f="[object WeakMap]",p="[object DataView]",v=l(r),g=l(i),y=l(a),m=l(o),b=l(s),x=u;(r&&x(new r(new ArrayBuffer(1)))!=p||i&&x(new i)!=c||a&&x(a.resolve())!=d||o&&x(new o)!=h||s&&x(new s)!=f)&&(x=function(e){var t=u(e),n="[object Object]"==t?e.constructor:void 0,r=n?l(n):"";if(r)switch(r){case v:return p;case g:return c;case y:return d;case m:return h;case b:return f}return t}),e.exports=x},15371:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},731:(e,t,n)=>{var r=n(76747),i=n(2900),a=n(19785),o=n(42383),s=n(84194),u=n(37948);e.exports=function(e,t,n){for(var l=-1,c=(t=r(t,e)).length,d=!1;++l<c;){var h=u(t[l]);if(!(d=null!=e&&n(e,h)))break;e=e[h]}return d||++l!=c?d:!!(c=null==e?0:e.length)&&s(c)&&o(h,c)&&(a(e)||i(e))}},25348:e=>{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},57753:(e,t,n)=>{var r=n(35718);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},82452:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},22115:(e,t,n)=>{var r=n(35718),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},38256:(e,t,n)=>{var r=n(35718),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},67426:(e,t,n)=>{var r=n(35718);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},86541:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},2078:(e,t,n)=>{var r=n(95825),i=n(61859),a=n(9377),o=n(24116),s=n(63428);e.exports=function(e,t,n){var u=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new u(+e);case"[object DataView]":return i(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":case"[object Set]":return new u;case"[object Number]":case"[object String]":return new u(e);case"[object RegExp]":return a(e);case"[object Symbol]":return o(e)}}},97635:(e,t,n)=>{var r=n(80158),i=n(2173),a=n(56016);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(i(e))}},72889:(e,t,n)=>{var r=n(96539),i=n(2900),a=n(19785),o=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||i(e)||!!(o&&e&&e[o])}},42383:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},57535:(e,t,n)=>{var r=n(85638),i=n(80068),a=n(42383),o=n(11611);e.exports=function(e,t,n){if(!o(n))return!1;var s=typeof t;return!!("number"==s?i(n)&&a(t,n.length):"string"==s&&t in n)&&r(n[t],e)}},40318:(e,t,n)=>{var r=n(19785),i=n(55193),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!a.test(e)||null!=t&&e in Object(t))}},54479:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},99678:(e,t,n)=>{var r,i=n(64937),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},56016:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},68302:(e,t,n)=>{var r=n(11611);e.exports=function(e){return e==e&&!r(e)}},69417:e=>{e.exports=function(){this.__data__=[],this.size=0}},72470:(e,t,n)=>{var r=n(93382),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},66165:(e,t,n)=>{var r=n(93382);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},71873:(e,t,n)=>{var r=n(93382);e.exports=function(e){return r(this.__data__,e)>-1}},52556:(e,t,n)=>{var r=n(93382);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},39448:(e,t,n)=>{var r=n(96586),i=n(36301),a=n(44538);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},7738:(e,t,n)=>{var r=n(95899);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},66575:(e,t,n)=>{var r=n(95899);e.exports=function(e){return r(this,e).get(e)}},7238:(e,t,n)=>{var r=n(95899);e.exports=function(e){return r(this,e).has(e)}},38738:(e,t,n)=>{var r=n(95899);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},19383:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},65042:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},2941:(e,t,n)=>{var r=n(16651);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},35718:(e,t,n)=>{var r=n(81822)(Object,"create");e.exports=r},50962:(e,t,n)=>{var r=n(58023)(Object.keys,Object);e.exports=r},21586:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},18125:(e,t,n)=>{e=n.nmd(e);var r=n(39120),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,o=a&&a.exports===i&&r.process,s=function(){try{var e=a&&a.require&&a.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(t){}}();e.exports=s},21258:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},58023:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},11871:(e,t,n)=>{var r=n(79349),i=Math.max;e.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var a=arguments,o=-1,s=i(a.length-t,0),u=Array(s);++o<s;)u[o]=a[t+o];o=-1;for(var l=Array(t+1);++o<t;)l[o]=a[o];return l[t]=n(u),r(e,this,l)}}},77400:(e,t,n)=>{var r=n(39120),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},97494:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}},38639:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},88379:e=>{e.exports=function(e){return this.__data__.has(e)}},43735:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},63132:(e,t,n)=>{var r=n(54459),i=n(49591)(r);e.exports=i},49591:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var i=t(),a=16-(i-r);if(r=i,a>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},7354:(e,t,n)=>{var r=n(36301);e.exports=function(){this.__data__=new r,this.size=0}},5863:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},12367:e=>{e.exports=function(e){return this.__data__.get(e)}},90748:e=>{e.exports=function(e){return this.__data__.has(e)}},97569:(e,t,n)=>{var r=n(36301),i=n(44538),a=n(74554);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(e,t),this.size=n.size,this}},58263:e=>{e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}},64090:(e,t,n)=>{var r=n(46008),i=n(25348),a=n(44088);e.exports=function(e){return i(e)?a(e):r(e)}},23419:(e,t,n)=>{var r=n(2941),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(a,"$1"):n||e)})),t}));e.exports=o},37948:(e,t,n)=>{var r=n(55193);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},76532:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},56127:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},44088:e=>{var t="[\\ud800-\\udfff]",n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",r="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",o="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+n+"|"+r+")"+"?",u="[\\ufe0e\\ufe0f]?",l=u+s+("(?:\\u200d(?:"+[i,a,o].join("|")+")"+u+s+")*"),c="(?:"+[i+n+"?",n,a,o,t].join("|")+")",d=RegExp(r+"(?="+r+")|"+c+l,"g");e.exports=function(e){for(var t=d.lastIndex=0;d.test(e);)++t;return t}},13784:(e,t,n)=>{var r=n(40699);e.exports=function(e){return r(e,4)}},30454:(e,t,n)=>{var r=n(40699);e.exports=function(e){return r(e,5)}},551:e=>{e.exports=function(e){return function(){return e}}},66726:(e,t,n)=>{var r=n(11611),i=n(82846),a=n(91936),o=Math.max,s=Math.min;e.exports=function(e,t,n){var u,l,c,d,h,f,p=0,v=!1,g=!1,y=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=u,r=l;return u=l=void 0,p=t,d=e.apply(r,n)}function b(e){return p=e,h=setTimeout(w,t),v?m(e):d}function x(e){var n=e-f;return void 0===f||n>=t||n<0||g&&e-p>=c}function w(){var e=i();if(x(e))return E(e);h=setTimeout(w,function(e){var n=t-(e-f);return g?s(n,c-(e-p)):n}(e))}function E(e){return h=void 0,y&&u?m(e):(u=l=void 0,d)}function k(){var e=i(),n=x(e);if(u=arguments,l=this,f=e,n){if(void 0===h)return b(f);if(g)return clearTimeout(h),h=setTimeout(w,t),m(f)}return void 0===h&&(h=setTimeout(w,t)),d}return t=a(t)||0,r(n)&&(v=!!n.leading,c=(g="maxWait"in n)?o(a(n.maxWait)||0,t):c,y="trailing"in n?!!n.trailing:y),k.cancel=function(){void 0!==h&&clearTimeout(h),p=0,u=f=l=h=void 0},k.flush=function(){return void 0===h?d:E(i())},k}},70236:(e,t,n)=>{var r=n(1197),i=n(85638),a=n(57535),o=n(13996),s=Object.prototype,u=s.hasOwnProperty,l=r((function(e,t){e=Object(e);var n=-1,r=t.length,l=r>2?t[2]:void 0;for(l&&a(t[0],t[1],l)&&(r=1);++n<r;)for(var c=t[n],d=o(c),h=-1,f=d.length;++h<f;){var p=d[h],v=e[p];(void 0===v||i(v,s[p])&&!u.call(e,p))&&(e[p]=c[p])}return e}));e.exports=l},72856:(e,t,n)=>{e.exports=n(47003)},85638:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},69238:(e,t,n)=>{var r=n(10263),i=n(98129),a=n(89278),o=n(19785);e.exports=function(e,t){return(o(e)?r:i)(e,a(t,3))}},64925:(e,t,n)=>{var r=n(56632)(n(66259));e.exports=r},66259:(e,t,n)=>{var r=n(95372),i=n(89278),a=n(47991),o=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var u=null==n?0:a(n);return u<0&&(u=o(s+u,0)),r(e,i(t,3),u)}},89754:(e,t,n)=>{var r=n(23545);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},47003:(e,t,n)=>{var r=n(80594),i=n(52033),a=n(62079),o=n(19785);e.exports=function(e,t){return(o(e)?r:i)(e,a(t))}},3544:(e,t,n)=>{var r=n(49819),i=n(62079),a=n(13996);e.exports=function(e,t){return null==e?e:r(e,i(t),a)}},99729:(e,t,n)=>{var r=n(79867);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},73915:(e,t,n)=>{var r=n(30124),i=n(731);e.exports=function(e,t){return null!=e&&i(e,t,r)}},79749:(e,t,n)=>{var r=n(21610),i=n(731);e.exports=function(e,t){return null!=e&&i(e,t,r)}},31137:e=>{e.exports=function(e){return e}},2900:(e,t,n)=>{var r=n(55829),i=n(92360),a=Object.prototype,o=a.hasOwnProperty,s=a.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(e){return i(e)&&o.call(e,"callee")&&!s.call(e,"callee")};e.exports=u},19785:e=>{var t=Array.isArray;e.exports=t},80068:(e,t,n)=>{var r=n(28338),i=n(84194);e.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},36468:(e,t,n)=>{var r=n(80068),i=n(92360);e.exports=function(e){return i(e)&&r(e)}},43854:(e,t,n)=>{e=n.nmd(e);var r=n(77400),i=n(57714),a=t&&!t.nodeType&&t,o=a&&e&&!e.nodeType&&e,s=o&&o.exports===a?r.Buffer:void 0,u=(s?s.isBuffer:void 0)||i;e.exports=u},90104:(e,t,n)=>{var r=n(20186),i=n(3533),a=n(2900),o=n(19785),s=n(80068),u=n(43854),l=n(56016),c=n(48519),d=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(o(e)||"string"==typeof e||"function"==typeof e.splice||u(e)||c(e)||a(e)))return!e.length;var t=i(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(l(e))return!r(e).length;for(var n in e)if(d.call(e,n))return!1;return!0}},28338:(e,t,n)=>{var r=n(99736),i=n(11611);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},84194:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},98247:(e,t,n)=>{var r=n(57657),i=n(39334),a=n(18125),o=a&&a.isMap,s=o?i(o):r;e.exports=s},11611:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},92360:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},40861:(e,t,n)=>{var r=n(99736),i=n(2173),a=n(92360),o=Function.prototype,s=Object.prototype,u=o.toString,l=s.hasOwnProperty,c=u.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=l.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==c}},47614:(e,t,n)=>{var r=n(26903),i=n(39334),a=n(18125),o=a&&a.isSet,s=o?i(o):r;e.exports=s},47206:(e,t,n)=>{var r=n(99736),i=n(19785),a=n(92360);e.exports=function(e){return"string"==typeof e||!i(e)&&a(e)&&"[object String]"==r(e)}},55193:(e,t,n)=>{var r=n(99736),i=n(92360);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},48519:(e,t,n)=>{var r=n(26972),i=n(39334),a=n(18125),o=a&&a.isTypedArray,s=o?i(o):r;e.exports=s},92465:e=>{e.exports=function(e){return void 0===e}},50098:(e,t,n)=>{var r=n(98213),i=n(20186),a=n(80068);e.exports=function(e){return a(e)?r(e):i(e)}},13996:(e,t,n)=>{var r=n(98213),i=n(59464),a=n(80068);e.exports=function(e){return a(e)?r(e,!0):i(e)}},31159:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},55807:(e,t,n)=>{var r=n(66070),i=n(89278),a=n(67375),o=n(19785);e.exports=function(e,t){return(o(e)?r:a)(e,i(t,3))}},25389:(e,t,n)=>{var r=n(88799),i=n(26194),a=n(89278);e.exports=function(e,t){var n={};return t=a(t,3),i(e,(function(e,i,a){r(n,i,t(e,i,a))})),n}},7620:(e,t,n)=>{var r=n(58403),i=n(59517),a=n(31137);e.exports=function(e){return e&&e.length?r(e,a,i):void 0}},16651:(e,t,n)=>{var r=n(74554);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},15409:(e,t,n)=>{var r=n(40015),i=n(7270)((function(e,t,n){r(e,t,n)}));e.exports=i},14176:(e,t,n)=>{var r=n(58403),i=n(73818),a=n(31137);e.exports=function(e){return e&&e.length?r(e,a,i):void 0}},70201:(e,t,n)=>{var r=n(58403),i=n(89278),a=n(73818);e.exports=function(e,t){return e&&e.length?r(e,i(t,2),a):void 0}},50344:e=>{e.exports=function(){}},82846:(e,t,n)=>{var r=n(77400);e.exports=function(){return r.Date.now()}},14648:(e,t,n)=>{var r=n(63005),i=n(24288)((function(e,t){return null==e?{}:r(e,t)}));e.exports=i},96001:(e,t,n)=>{var r=n(50517),i=n(10301),a=n(40318),o=n(37948);e.exports=function(e){return a(e)?r(o(e)):i(e)}},4215:(e,t,n)=>{var r=n(55294)();e.exports=r},34172:(e,t,n)=>{var r=n(6446),i=n(52033),a=n(89278),o=n(19356),s=n(19785);e.exports=function(e,t,n){var u=s(e)?r:o,l=arguments.length<3;return u(e,a(t,4),n,l,i)}},47215:(e,t,n)=>{var r=n(78859);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},36417:(e,t,n)=>{var r=n(20186),i=n(3533),a=n(80068),o=n(47206),s=n(64090);e.exports=function(e){if(null==e)return 0;if(a(e))return o(e)?s(e):e.length;var t=i(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},95099:(e,t,n)=>{var r=n(23545),i=n(98497),a=n(1197),o=n(57535),s=a((function(e,t){if(null==e)return[];var n=t.length;return n>1&&o(e,t[0],t[1])?t=[]:n>2&&o(t[0],t[1],t[2])&&(t=[t[0]]),i(e,r(t,1),[])}));e.exports=s},15937:e=>{e.exports=function(){return[]}},57714:e=>{e.exports=function(){return!1}},94919:(e,t,n)=>{var r=n(91936),i=1/0;e.exports=function(e){return e?(e=r(e))===i||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},47991:(e,t,n)=>{var r=n(94919);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},91936:(e,t,n)=>{var r=n(74833),i=n(11611),a=n(55193),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||u.test(e)?l(e.slice(2),n?2:8):o.test(e)?NaN:+e}},40110:(e,t,n)=>{var r=n(66070),i=n(37561),a=n(19785),o=n(55193),s=n(23419),u=n(37948),l=n(65567);e.exports=function(e){return a(e)?r(e,u):o(e)?[e]:i(s(l(e)))}},89328:(e,t,n)=>{var r=n(35159),i=n(13996);e.exports=function(e){return r(e,i(e))}},65567:(e,t,n)=>{var r=n(34282);e.exports=function(e){return null==e?"":r(e)}},42673:(e,t,n)=>{var r=n(80594),i=n(80158),a=n(26194),o=n(89278),s=n(2173),u=n(19785),l=n(43854),c=n(28338),d=n(11611),h=n(48519);e.exports=function(e,t,n){var f=u(e),p=f||l(e)||h(e);if(t=o(t,4),null==n){var v=e&&e.constructor;n=p?f?new v:[]:d(e)&&c(v)?i(s(e)):{}}return(p?r:a)(e,(function(e,r,i){return t(n,e,r,i)})),n}},68946:(e,t,n)=>{var r=n(23545),i=n(1197),a=n(92198),o=n(36468),s=i((function(e){return a(r(e,1,o,!0))}));e.exports=s},46854:(e,t,n)=>{var r=n(65567),i=0;e.exports=function(e){var t=++i;return r(e)+t}},58185:(e,t,n)=>{var r=n(42231),i=n(50098);e.exports=function(e){return null==e?[]:r(e,i(e))}},11775:(e,t,n)=>{var r=n(71928),i=n(5024);e.exports=function(e,t){return i(e||[],t||[],r)}}}]); \ No newline at end of file diff --git a/assets/js/92999a1c.62a505db.js b/assets/js/92999a1c.62a505db.js new file mode 100644 index 00000000000..58ad5572088 --- /dev/null +++ b/assets/js/92999a1c.62a505db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18442],{15310:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":6,"totalCount":52,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/92999a1c.b8df9ede.js b/assets/js/92999a1c.b8df9ede.js deleted file mode 100644 index 9b8f28171b2..00000000000 --- a/assets/js/92999a1c.b8df9ede.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8442],{15310:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":6,"totalCount":51,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.95d45e22.js b/assets/js/935f2afb.95d45e22.js new file mode 100644 index 00000000000..806bf59aba3 --- /dev/null +++ b/assets/js/935f2afb.95d45e22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/docs/","docId":"intro"},{"type":"category","label":"How it works","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Languages","href":"/docs/how-it-works/languages","docId":"how-it-works/languages"},{"type":"link","label":"Project graph","href":"/docs/how-it-works/project-graph","docId":"how-it-works/project-graph"},{"type":"link","label":"Action graph","href":"/docs/how-it-works/action-graph","docId":"how-it-works/action-graph"}],"href":"/docs/how-it-works"},{"type":"category","label":"Getting started","collapsed":false,"collapsible":true,"items":[{"type":"link","label":"Install moon","href":"/docs/install","docId":"install"},{"type":"link","label":"Setup workspace","href":"/docs/setup-workspace","docId":"setup-workspace"},{"type":"link","label":"Setup toolchain","href":"/docs/setup-toolchain","docId":"setup-toolchain"},{"type":"link","label":"Create a project","href":"/docs/create-project","docId":"create-project"},{"type":"link","label":"Create a task","href":"/docs/create-task","docId":"create-task"},{"type":"link","label":"Run a task","href":"/docs/run-task","docId":"run-task"},{"type":"link","label":"Migrate to moon","href":"/docs/migrate-to-moon","docId":"migrate-to-moon"}]},{"type":"category","label":"Concepts","items":[{"type":"link","label":"Cache","href":"/docs/concepts/cache","docId":"concepts/cache"},{"type":"link","label":"File groups","href":"/docs/concepts/file-group","docId":"concepts/file-group"},{"type":"link","label":"File patterns","href":"/docs/concepts/file-pattern","docId":"concepts/file-pattern"},{"type":"link","label":"Query language","href":"/docs/concepts/query-lang","docId":"concepts/query-lang"},{"type":"link","label":"Projects","href":"/docs/concepts/project","docId":"concepts/project"},{"type":"link","label":"Targets","href":"/docs/concepts/target","docId":"concepts/target"},{"type":"link","label":"Tasks","href":"/docs/concepts/task","docId":"concepts/task"},{"type":"link","label":"Task inheritance","href":"/docs/concepts/task-inheritance","docId":"concepts/task-inheritance"},{"type":"link","label":"Tokens","href":"/docs/concepts/token","docId":"concepts/token"},{"type":"link","label":"Toolchain","href":"/docs/concepts/toolchain","docId":"concepts/toolchain"},{"type":"link","label":"Workspace","href":"/docs/concepts/workspace","docId":"concepts/workspace"}],"collapsed":true,"collapsible":true,"href":"/docs/concepts"},{"type":"category","label":"Config files","items":[{"type":"link","label":".moon/workspace.yml","href":"/docs/config/workspace","docId":"config/workspace"},{"type":"link","label":".moon/toolchain.yml","href":"/docs/config/toolchain","docId":"config/toolchain"},{"type":"link","label":".moon/tasks...","href":"/docs/config/tasks","docId":"config/tasks"},{"type":"link","label":"moon.yml","href":"/docs/config/project","docId":"config/project"},{"type":"link","label":"template.yml","href":"/docs/config/template","docId":"config/template"}],"collapsed":true,"collapsible":true,"href":"/docs/config"},{"type":"category","label":"Editors","items":[{"type":"link","label":"VS Code","href":"/docs/editors/vscode","docId":"editors/vscode"}],"collapsed":true,"collapsible":true,"href":"/docs/editors"},{"type":"category","label":"Commands","items":[{"type":"link","label":"Overview","href":"/docs/commands/overview","docId":"commands/overview"},{"type":"link","label":"action-graph","href":"/docs/commands/action-graph","docId":"commands/action-graph"},{"type":"link","label":"bin","href":"/docs/commands/bin","docId":"commands/bin"},{"type":"link","label":"ci","href":"/docs/commands/ci","docId":"commands/ci"},{"type":"link","label":"check","href":"/docs/commands/check","docId":"commands/check"},{"type":"link","label":"clean","href":"/docs/commands/clean","docId":"commands/clean"},{"type":"link","label":"completions","href":"/docs/commands/completions","docId":"commands/completions"},{"type":"category","label":"docker","items":[{"type":"link","label":"prune","href":"/docs/commands/docker/prune","docId":"commands/docker/prune"},{"type":"link","label":"scaffold","href":"/docs/commands/docker/scaffold","docId":"commands/docker/scaffold"},{"type":"link","label":"setup","href":"/docs/commands/docker/setup","docId":"commands/docker/setup"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/docker"},{"type":"link","label":"generate","href":"/docs/commands/generate","docId":"commands/generate"},{"type":"link","label":"init","href":"/docs/commands/init","docId":"commands/init"},{"type":"category","label":"migrate","items":[{"type":"link","label":"from-package-json","href":"/docs/commands/migrate/from-package-json","docId":"commands/migrate/from-package-json"},{"type":"link","label":"from-turborepo","href":"/docs/commands/migrate/from-turborepo","docId":"commands/migrate/from-turborepo"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/migrate"},{"type":"link","label":"project","href":"/docs/commands/project","docId":"commands/project"},{"type":"link","label":"project-graph","href":"/docs/commands/project-graph","docId":"commands/project-graph"},{"type":"category","label":"query","items":[{"type":"link","label":"hash","href":"/docs/commands/query/hash","docId":"commands/query/hash"},{"type":"link","label":"hash-diff","href":"/docs/commands/query/hash-diff","docId":"commands/query/hash-diff"},{"type":"link","label":"projects","href":"/docs/commands/query/projects","docId":"commands/query/projects"},{"type":"link","label":"tasks","href":"/docs/commands/query/tasks","docId":"commands/query/tasks"},{"type":"link","label":"touched-files","href":"/docs/commands/query/touched-files","docId":"commands/query/touched-files"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/query"},{"type":"link","label":"run","href":"/docs/commands/run","docId":"commands/run"},{"type":"link","label":"setup","href":"/docs/commands/setup","docId":"commands/setup"},{"type":"category","label":"sync","items":[{"type":"link","label":"codeowners","href":"/docs/commands/sync/codeowners","docId":"commands/sync/codeowners"},{"type":"link","label":"hooks","href":"/docs/commands/sync/hooks","docId":"commands/sync/hooks"},{"type":"link","label":"projects","href":"/docs/commands/sync/projects","docId":"commands/sync/projects"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/sync"},{"type":"link","label":"task","href":"/docs/commands/task","docId":"commands/task"},{"type":"link","label":"teardown","href":"/docs/commands/teardown","docId":"commands/teardown"},{"type":"link","label":"upgrade","href":"/docs/commands/upgrade","docId":"commands/upgrade"}],"collapsed":true,"collapsible":true,"href":"/docs/commands"},{"type":"link","label":"Cheat sheet","href":"/docs/cheat-sheet","docId":"cheat-sheet"},{"type":"link","label":"Feature comparison","href":"/docs/comparison","docId":"comparison"},{"type":"link","label":"Terminology","href":"/docs/terminology","docId":"terminology"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"faq"},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/moon/releases"}],"guides":[{"type":"link","label":"Continuous integration (CI)","href":"/docs/guides/ci","docId":"guides/ci"},{"type":"link","label":"Code generation","href":"/docs/guides/codegen","docId":"guides/codegen"},{"type":"link","label":"Code owners","href":"/docs/guides/codeowners","docId":"guides/codeowners"},{"type":"link","label":"Debugging a task","href":"/docs/guides/debug-task","docId":"guides/debug-task"},{"type":"link","label":"Docker usage","href":"/docs/guides/docker","docId":"guides/docker"},{"type":"link","label":"Offline mode","href":"/docs/guides/offline-mode","docId":"guides/offline-mode"},{"type":"link","label":"Open source usage","href":"/docs/guides/open-source","docId":"guides/open-source"},{"type":"link","label":"Remote caching","href":"/docs/guides/remote-cache","docId":"guides/remote-cache"},{"type":"link","label":"Root-level project","href":"/docs/guides/root-project","docId":"guides/root-project"},{"type":"link","label":"Sharing workspace configuration","href":"/docs/guides/sharing-config","docId":"guides/sharing-config"},{"type":"link","label":"Webhooks (experimental)","href":"/docs/guides/webhooks","docId":"guides/webhooks"},{"type":"link","label":"VCS hooks","href":"/docs/guides/vcs-hooks","docId":"guides/vcs-hooks"},{"type":"html","value":"<hr />","defaultStyle":true},{"type":"category","label":"JavaScript","collapsed":false,"items":[{"type":"link","label":"Deno handbook","href":"/docs/guides/javascript/deno-handbook","docId":"guides/javascript/deno-handbook"},{"type":"link","label":"Node.js handbook","href":"/docs/guides/javascript/node-handbook","docId":"guides/javascript/node-handbook"},{"type":"link","label":"Task profiling","href":"/docs/guides/profile","docId":"guides/profile"},{"type":"link","label":"TypeScript project references","href":"/docs/guides/javascript/typescript-project-refs","docId":"guides/javascript/typescript-project-refs"},{"type":"category","label":"Examples","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Angular","href":"/docs/guides/examples/angular","docId":"guides/examples/angular"},{"type":"link","label":"Astro","href":"/docs/guides/examples/astro","docId":"guides/examples/astro"},{"type":"link","label":"ESLint","href":"/docs/guides/examples/eslint","docId":"guides/examples/eslint"},{"type":"link","label":"Jest","href":"/docs/guides/examples/jest","docId":"guides/examples/jest"},{"type":"link","label":"Nest","href":"/docs/guides/examples/nest","docId":"guides/examples/nest"},{"type":"link","label":"Next","href":"/docs/guides/examples/next","docId":"guides/examples/next"},{"type":"link","label":"Nuxt","href":"/docs/guides/examples/nuxt","docId":"guides/examples/nuxt"},{"type":"link","label":"Packemon","href":"/docs/guides/examples/packemon","docId":"guides/examples/packemon"},{"type":"link","label":"Prettier","href":"/docs/guides/examples/prettier","docId":"guides/examples/prettier"},{"type":"link","label":"React","href":"/docs/guides/examples/react","docId":"guides/examples/react"},{"type":"link","label":"Remix","href":"/docs/guides/examples/remix","docId":"guides/examples/remix"},{"type":"link","label":"Solid","href":"/docs/guides/examples/solid","docId":"guides/examples/solid"},{"type":"link","label":"Storybook","href":"/docs/guides/examples/storybook","docId":"guides/examples/storybook"},{"type":"link","label":"SvelteKit","href":"/docs/guides/examples/sveltekit","docId":"guides/examples/sveltekit"},{"type":"link","label":"TypeScript","href":"/docs/guides/examples/typescript","docId":"guides/examples/typescript"},{"type":"link","label":"Vite & Vitest","href":"/docs/guides/examples/vite","docId":"guides/examples/vite"},{"type":"link","label":"Vue","href":"/docs/guides/examples/vue","docId":"guides/examples/vue"}],"href":"/docs/guides/node/examples"}],"collapsible":true},{"type":"html","value":"<hr />","defaultStyle":true},{"type":"category","label":"Rust","collapsed":false,"items":[{"type":"link","label":"Handbook","href":"/docs/guides/rust/handbook","docId":"guides/rust/handbook"}],"collapsible":true}],"proto":[{"type":"link","label":"What is proto?","href":"/docs/proto/","docId":"proto/index"},{"type":"link","label":"Install proto","href":"/docs/proto/install","docId":"proto/install"},{"type":"link","label":"Version detection","href":"/docs/proto/detection","docId":"proto/detection"},{"type":"link","label":"Configuration","href":"/docs/proto/config","docId":"proto/config"},{"type":"link","label":"Supported tools","href":"/docs/proto/tools","docId":"proto/tools"},{"type":"category","label":"Plugins","items":[{"type":"link","label":"TOML","href":"/docs/proto/toml-plugin","docId":"proto/toml-plugin"},{"type":"link","label":"WASM","href":"/docs/proto/wasm-plugin","docId":"proto/wasm-plugin"}],"collapsed":true,"collapsible":true,"href":"/docs/proto/plugins"},{"type":"category","label":"Commands","items":[{"type":"link","label":"add-plugin","href":"/docs/proto/commands/add-plugin","docId":"proto/commands/add-plugin"},{"type":"link","label":"alias","href":"/docs/proto/commands/alias","docId":"proto/commands/alias"},{"type":"link","label":"bin","href":"/docs/proto/commands/bin","docId":"proto/commands/bin"},{"type":"link","label":"clean","href":"/docs/proto/commands/clean","docId":"proto/commands/clean"},{"type":"link","label":"completions","href":"/docs/proto/commands/completions","docId":"proto/commands/completions"},{"type":"link","label":"install","href":"/docs/proto/commands/install","docId":"proto/commands/install"},{"type":"link","label":"install-global","href":"/docs/proto/commands/install-global","docId":"proto/commands/install-global"},{"type":"link","label":"list","href":"/docs/proto/commands/list","docId":"proto/commands/list"},{"type":"link","label":"list-global","href":"/docs/proto/commands/list-global","docId":"proto/commands/list-global"},{"type":"link","label":"list-remote","href":"/docs/proto/commands/list-remote","docId":"proto/commands/list-remote"},{"type":"link","label":"outdated","href":"/docs/proto/commands/outdated","docId":"proto/commands/outdated"},{"type":"link","label":"pin","href":"/docs/proto/commands/pin","docId":"proto/commands/pin"},{"type":"link","label":"plugins","href":"/docs/proto/commands/plugins","docId":"proto/commands/plugins"},{"type":"link","label":"remove-plugin","href":"/docs/proto/commands/remove-plugin","docId":"proto/commands/remove-plugin"},{"type":"link","label":"run","href":"/docs/proto/commands/run","docId":"proto/commands/run"},{"type":"link","label":"setup","href":"/docs/proto/commands/setup","docId":"proto/commands/setup"},{"type":"link","label":"tools","href":"/docs/proto/commands/tools","docId":"proto/commands/tools"},{"type":"link","label":"unalias","href":"/docs/proto/commands/unalias","docId":"proto/commands/unalias"},{"type":"link","label":"uninstall","href":"/docs/proto/commands/uninstall","docId":"proto/commands/uninstall"},{"type":"link","label":"uninstall-global","href":"/docs/proto/commands/uninstall-global","docId":"proto/commands/uninstall-global"},{"type":"link","label":"upgrade","href":"/docs/proto/commands/upgrade","docId":"proto/commands/upgrade"},{"type":"link","label":"use","href":"/docs/proto/commands/use","docId":"proto/commands/use"}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQ","href":"/docs/proto/faq","docId":"proto/faq"},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/proto/releases"}]},"docs":{"cheat-sheet":{"id":"cheat-sheet","title":"Cheat sheet","description":"Don\'t have time to read the docs? Here\'s a quick cheat sheet to get you started.","sidebar":"docs"},"commands/action-graph":{"id":"commands/action-graph","title":"action-graph","description":"The moon action-graph [target] (or moon ag) command will generate and serve a visual graph of","sidebar":"docs"},"commands/bin":{"id":"commands/bin","title":"bin","description":"The moon bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"docs"},"commands/check":{"id":"commands/check","title":"check","description":"The moon check [...projects] (or moon c) command will run all","sidebar":"docs"},"commands/ci":{"id":"commands/ci","title":"ci","description":"The moon ci command is a special command that should be ran in a continuous integration (CI)","sidebar":"docs"},"commands/clean":{"id":"commands/clean","title":"clean","description":"The moon clean command will clean the current workspace by deleting stale cache. For the most","sidebar":"docs"},"commands/completions":{"id":"commands/completions","title":"completions","description":"The moon completions command will generate moon command and argument completions for your current","sidebar":"docs"},"commands/docker/prune":{"id":"commands/docker/prune","title":"docker prune","description":"The moon docker prune command will reduce the overall filesize of the Docker environment by","sidebar":"docs"},"commands/docker/scaffold":{"id":"commands/docker/scaffold","title":"docker scaffold","description":"The moon docker scaffold command creates multiple repository skeletons for use","sidebar":"docs"},"commands/docker/setup":{"id":"commands/docker/setup","title":"docker setup","description":"The moon docker setup command will efficiently install dependencies for focused projects. This is","sidebar":"docs"},"commands/generate":{"id":"commands/generate","title":"generate","description":"The moon generate (or moon g) command will generate code (files and folders) from a","sidebar":"docs"},"commands/init":{"id":"commands/init","title":"init","description":"The moon init [dest] command will initialize moon into a repository and scaffold config files by","sidebar":"docs"},"commands/migrate/from-package-json":{"id":"commands/migrate/from-package-json","title":"migrate from-package-json","description":"Use the moon migrate from-package-json sub-command to migrate a project\'s package.json","sidebar":"docs"},"commands/migrate/from-turborepo":{"id":"commands/migrate/from-turborepo","title":"migrate from-turborepo","description":"Use the moon migrate from-turborepo command to migrate a Turborepo powered repository to moon.","sidebar":"docs"},"commands/overview":{"id":"commands/overview","title":"Overview","description":"The following options are available for all moon commands.","sidebar":"docs"},"commands/project":{"id":"commands/project","title":"project","description":"The moon project (or moon p) command will display all available information about a","sidebar":"docs"},"commands/project-graph":{"id":"commands/project-graph","title":"project-graph","description":"The moon project-graph [name] (or moon pg) command will generate and serve a visual graph of all","sidebar":"docs"},"commands/query/hash":{"id":"commands/query/hash","title":"query hash","description":"Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also","sidebar":"docs"},"commands/query/hash-diff":{"id":"commands/query/hash-diff","title":"query hash-diff","description":"Use the moon query hash-diff sub-command to query the content and source differences between 2","sidebar":"docs"},"commands/query/projects":{"id":"commands/query/projects","title":"query projects","description":"Use the moon query projects sub-command to query information about all projects in the project","sidebar":"docs"},"commands/query/tasks":{"id":"commands/query/tasks","title":"query tasks","description":"Use the moon query tasks sub-command to query task information for all projects in the project","sidebar":"docs"},"commands/query/touched-files":{"id":"commands/query/touched-files","title":"query touched-files","description":"Use the moon query touched-files sub-command to query for a list of touched files (added,","sidebar":"docs"},"commands/run":{"id":"commands/run","title":"run","description":"The moon run (or moon r) command will run one or many targets and all of","sidebar":"docs"},"commands/setup":{"id":"commands/setup","title":"setup","description":"The moon setup command can be used to setup the developer and pipeline environments. It achieves","sidebar":"docs"},"commands/sync/codeowners":{"id":"commands/sync/codeowners","title":"sync codeowners","description":"The moon sync codeowners command will manually sync code owners, by aggregating all owners from","sidebar":"docs"},"commands/sync/hooks":{"id":"commands/sync/hooks","title":"sync hooks","description":"The moon sync hooks command will manually sync hooks for the configured","sidebar":"docs"},"commands/sync/projects":{"id":"commands/sync/projects","title":"sync projects","description":"The moon sync projects command will force sync all projects in the workspace to help achieve a","sidebar":"docs"},"commands/task":{"id":"commands/task","title":"task","description":"The moon task (or moon t) command will display information about a task that has been","sidebar":"docs"},"commands/teardown":{"id":"commands/teardown","title":"teardown","description":"The moon teardown command, as its name infers, will teardown and clean the current environment,","sidebar":"docs"},"commands/upgrade":{"id":"commands/upgrade","title":"upgrade","description":"The moon upgrade command can be used to upgrade your current moon binary (if installed globally)","sidebar":"docs"},"comparison":{"id":"comparison","title":"Feature comparison","description":"The following comparisons are not an exhaustive list of features, and may be inaccurate or out of","sidebar":"docs"},"concepts/cache":{"id":"concepts/cache","title":"Cache","description":"moon\'s able to achieve high performance and blazing speeds by implementing a cache that\'s powered by","sidebar":"docs"},"concepts/file-group":{"id":"concepts/file-group","title":"File groups","description":"File groups are a mechanism for grouping similar types of files within a project using","sidebar":"docs"},"concepts/file-pattern":{"id":"concepts/file-pattern","title":"File patterns","description":"Globs","sidebar":"docs"},"concepts/project":{"id":"concepts/project","title":"Projects","description":"A project is a library, application, package, binary, tool, etc, that contains source files, test","sidebar":"docs"},"concepts/query-lang":{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","sidebar":"docs"},"concepts/target":{"id":"concepts/target","title":"Targets","description":"A target is a compound identifier that pairs a scope to a task, separated by a","sidebar":"docs"},"concepts/task":{"id":"concepts/task","title":"Tasks","description":"Tasks are commands that are ran in the context of a project. Underneath the hood, a","sidebar":"docs"},"concepts/task-inheritance":{"id":"concepts/task-inheritance","title":"Task inheritance","description":"Unlike other task runners that require the same tasks to be repeatedly defined for every project,","sidebar":"docs"},"concepts/token":{"id":"concepts/token","title":"Tokens","description":"Tokens are variables and functions that can be used by command,","sidebar":"docs"},"concepts/toolchain":{"id":"concepts/toolchain","title":"Toolchain","description":"The toolchain is an internal layer for downloading, installing, and managing tools (languages,","sidebar":"docs"},"concepts/workspace":{"id":"concepts/workspace","title":"Workspace","description":"A workspace is a directory that contains projects, manages a toolchain,","sidebar":"docs"},"config/project":{"id":"config/project","title":"moon.yml","description":"The moon.yml configuration file is not required but can be used to define additional metadata","sidebar":"docs"},"config/tasks":{"id":"config/tasks","title":".moon/tasks.yml, .moon/tasks/**/*.yml","description":"The .moon/tasks.yml file configures file groups and tasks that are inherited by every project in","sidebar":"docs"},"config/template":{"id":"config/template","title":"template.yml","description":"The template.yml file configures metadata and variables for a template,","sidebar":"docs"},"config/toolchain":{"id":"config/toolchain","title":".moon/toolchain.yml","description":"The .moon/toolchain.yml file configures the toolchain and the workspace development environment.","sidebar":"docs"},"config/workspace":{"id":"config/workspace","title":".moon/workspace.yml","description":"The .moon/workspace.yml file configures projects and services in the workspace. This file is","sidebar":"docs"},"create-project":{"id":"create-project","title":"Create a project","description":"With a workspace, we can now house one or many projects,","sidebar":"docs"},"create-task":{"id":"create-task","title":"Create a task","description":"The primary focus of moon is a task runner, and for it to operate in any capacity, it requires tasks","sidebar":"docs"},"editors/vscode":{"id":"editors/vscode","title":"VS Code extension","description":"Enhance your VS Code experience with our integrated moon console! Whether you\'re a fan of the","sidebar":"docs"},"faq":{"id":"faq","title":"FAQ","description":"General","sidebar":"docs"},"guides/ci":{"id":"guides/ci","title":"Continuous integration (CI)","description":"All companies and projects rely on continuous integration (CI) to ensure high quality code and to","sidebar":"guides"},"guides/codegen":{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","sidebar":"guides"},"guides/codeowners":{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","sidebar":"guides"},"guides/debug-task":{"id":"guides/debug-task","title":"Debugging a task","description":"Running tasks is the most common way to interact with moon, so what do you do","sidebar":"guides"},"guides/docker":{"id":"guides/docker","title":"Docker usage","description":"Using Docker to run your applications? Or build your artifacts? No","sidebar":"guides"},"guides/examples/angular":{"id":"guides/examples/angular","title":"Angular example","description":"In this guide, you\'ll learn how to integrate Angular into moon.","sidebar":"guides"},"guides/examples/astro":{"id":"guides/examples/astro","title":"Astro example","description":"In this guide, you\'ll learn how to integrate Astro.","sidebar":"guides"},"guides/examples/eslint":{"id":"guides/examples/eslint","title":"ESLint example","description":"In this guide, you\'ll learn how to integrate ESLint into moon.","sidebar":"guides"},"guides/examples/jest":{"id":"guides/examples/jest","title":"Jest example","description":"In this guide, you\'ll learn how to integrate Jest into moon.","sidebar":"guides"},"guides/examples/nest":{"id":"guides/examples/nest","title":"Nest example","description":"In this guide, you\'ll learn how to integrate NestJS into moon.","sidebar":"guides"},"guides/examples/next":{"id":"guides/examples/next","title":"Next example","description":"In this guide, you\'ll learn how to integrate Next.js into moon.","sidebar":"guides"},"guides/examples/nuxt":{"id":"guides/examples/nuxt","title":"Nuxt example","description":"In this guide, you\'ll learn how to integrate Nuxt v3, a Vue framework,","sidebar":"guides"},"guides/examples/packemon":{"id":"guides/examples/packemon","title":"Packemon example","description":"In this guide, you\'ll learn how to integrate Packemon into moon. Packemon","sidebar":"guides"},"guides/examples/prettier":{"id":"guides/examples/prettier","title":"Prettier example","description":"In this guide, you\'ll learn how to integrate Prettier into moon.","sidebar":"guides"},"guides/examples/react":{"id":"guides/examples/react","title":"React example","description":"React is an application or library concern, and not a build system one, since the bundling of React","sidebar":"guides"},"guides/examples/remix":{"id":"guides/examples/remix","title":"Remix example","description":"In this guide, you\'ll learn how to integrate Remix into moon.","sidebar":"guides"},"guides/examples/solid":{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","sidebar":"guides"},"guides/examples/storybook":{"id":"guides/examples/storybook","title":"Storybook example","description":"Storybook is a frontend workshop for building UI components and pages in isolation. Thousands of","sidebar":"guides"},"guides/examples/sveltekit":{"id":"guides/examples/sveltekit","title":"SvelteKit example","description":"SvelteKit is built on Svelte, a UI framework that","sidebar":"guides"},"guides/examples/typescript":{"id":"guides/examples/typescript","title":"TypeScript example","description":"In this guide, you\'ll learn how to integrate TypeScript into moon. We\'ll be","sidebar":"guides"},"guides/examples/vite":{"id":"guides/examples/vite","title":"Vite & Vitest example","description":"In this guide, you\'ll learn how to integrate Vite and","sidebar":"guides"},"guides/examples/vue":{"id":"guides/examples/vue","title":"Vue example","description":"Vue is an application or library concern, and not a build system one, since the bundling of Vue is","sidebar":"guides"},"guides/javascript/deno-handbook":{"id":"guides/javascript/deno-handbook","title":"Deno handbook","description":"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we\'ll","sidebar":"guides"},"guides/javascript/node-handbook":{"id":"guides/javascript/node-handbook","title":"Node.js handbook","description":"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using","sidebar":"guides"},"guides/javascript/typescript-eslint":{"id":"guides/javascript/typescript-eslint","title":"typescript-eslint","description":"ESLint integration"},"guides/javascript/typescript-project-refs":{"id":"guides/javascript/typescript-project-refs","title":"TypeScript project references","description":"The ultimate in-depth guide for using TypeScript in a monorepo effectively!","sidebar":"guides"},"guides/offline-mode":{"id":"guides/offline-mode","title":"Offline mode","description":"moon assumes that an internet connection is always available, as we download and install tools into","sidebar":"guides"},"guides/open-source":{"id":"guides/open-source","title":"Open source usage","description":"Although moon was designed for large monorepos, it can also be used for open source projects,","sidebar":"guides"},"guides/profile":{"id":"guides/profile","title":"Task profiling","description":"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!","sidebar":"guides"},"guides/remote-cache":{"id":"guides/remote-cache","title":"Remote caching","description":"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over","sidebar":"guides"},"guides/root-project":{"id":"guides/root-project","title":"Root-level project","description":"Coming from other repositories or task runner, you may be familiar with tasks available at the","sidebar":"guides"},"guides/rust/handbook":{"id":"guides/rust/handbook","title":"Rust handbook","description":"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,","sidebar":"guides"},"guides/sharing-config":{"id":"guides/sharing-config","title":"Sharing workspace configuration","description":"For large companies, open source maintainers, and those that love reusability, more often than not","sidebar":"guides"},"guides/vcs-hooks":{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","sidebar":"guides"},"guides/webhooks":{"id":"guides/webhooks","title":"Webhooks (experimental)","description":"Looking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe","sidebar":"guides"},"how-it-works/action-graph":{"id":"how-it-works/action-graph","title":"Action graph","description":"When you run a task on the command line, we generate an action graph to","sidebar":"docs"},"how-it-works/languages":{"id":"how-it-works/languages","title":"Languages","description":"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a","sidebar":"docs"},"how-it-works/project-graph":{"id":"how-it-works/project-graph","title":"Project graph","description":"The project graph is a representation of all configured","sidebar":"docs"},"install":{"id":"install","title":"Install moon","description":"The following guide can be used to install moon and integrate it into an existing repository (with","sidebar":"docs"},"intro":{"id":"intro","title":"Introduction","description":"moonrepo is a productivity platform that aims to eliminate pain points for both developers and","sidebar":"docs"},"migrate-to-moon":{"id":"migrate-to-moon","title":"Migrate to moon","description":"Now that we\'ve talked about the workspace, projects, tasks, and more, we must talk about something","sidebar":"docs"},"proto/commands/add-plugin":{"id":"proto/commands/add-plugin","title":"add-plugin","description":"The proto add-plugin (or proto ap) command will add the provided plugin ID and","sidebar":"proto"},"proto/commands/alias":{"id":"proto/commands/alias","title":"alias","description":"The proto alias (or proto a) command will define a custom alias that","sidebar":"proto"},"proto/commands/bin":{"id":"proto/commands/bin","title":"bin","description":"The proto bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"proto"},"proto/commands/clean":{"id":"proto/commands/clean","title":"clean","description":"The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it","sidebar":"proto"},"proto/commands/completions":{"id":"proto/commands/completions","title":"completions","description":"The proto completions command will generate proto command and argument completions for your","sidebar":"proto"},"proto/commands/install":{"id":"proto/commands/install","title":"install","description":"The proto install (or proto i) command will download and install a tool by unpacking","sidebar":"proto"},"proto/commands/install-global":{"id":"proto/commands/install-global","title":"install-global","description":"The proto install-global ... (or proto ig) command will install one or many","sidebar":"proto"},"proto/commands/list":{"id":"proto/commands/list","title":"list","description":"The proto list (or proto ls) command will list installed versions by scanning the","sidebar":"proto"},"proto/commands/list-global":{"id":"proto/commands/list-global","title":"list-global","description":"The proto list-global (or proto lsg) command will list installed global dependencies (and","sidebar":"proto"},"proto/commands/list-remote":{"id":"proto/commands/list-remote","title":"list-remote","description":"The proto list-remote (or proto lsr) command will list available versions by resolving","sidebar":"proto"},"proto/commands/outdated":{"id":"proto/commands/outdated","title":"outdated","description":"The proto outdated command will load the closest .prototools file and check for newer versions","sidebar":"proto"},"proto/commands/pin":{"id":"proto/commands/pin","title":"pin","description":"The proto pin command will pin a version (or alias) of a tool. By default it will","sidebar":"proto"},"proto/commands/plugins":{"id":"proto/commands/plugins","title":"plugins","description":"The proto plugins command will list all available and configured plugins. Will load all","sidebar":"proto"},"proto/commands/remove-plugin":{"id":"proto/commands/remove-plugin","title":"remove-plugin","description":"The proto remove-plugin (or proto rp) command will remove the provided plugin ID from to","sidebar":"proto"},"proto/commands/run":{"id":"proto/commands/run","title":"run","description":"The proto run (or proto r) command will run a tool after","sidebar":"proto"},"proto/commands/setup":{"id":"proto/commands/setup","title":"setup","description":"The proto setup command will setup proto in your current shell by modifying an applicable profile","sidebar":"proto"},"proto/commands/tools":{"id":"proto/commands/tools","title":"tools","description":"The proto tools command will list all tools that have been installed, along with their installed","sidebar":"proto"},"proto/commands/unalias":{"id":"proto/commands/unalias","title":"unalias","description":"The proto unalias (or proto ua) command will remove a custom alias for the","sidebar":"proto"},"proto/commands/uninstall":{"id":"proto/commands/uninstall","title":"uninstall","description":"The proto uninstall (or proto ui) command will uninstall and remove a tool from","sidebar":"proto"},"proto/commands/uninstall-global":{"id":"proto/commands/uninstall-global","title":"uninstall-global","description":"The proto uninstall-global ... (or proto ug) command will uninstall one or","sidebar":"proto"},"proto/commands/upgrade":{"id":"proto/commands/upgrade","title":"upgrade","description":"The proto upgrade (or proto up) command can be used to upgrade your current proto binary to the","sidebar":"proto"},"proto/commands/use":{"id":"proto/commands/use","title":"use","description":"The proto use (or proto u) command will download and install all tools and plugins from all","sidebar":"proto"},"proto/config":{"id":"proto/config","title":"Configuration","description":"We support configuration for both projects and users. Both config files are in","sidebar":"proto"},"proto/detection":{"id":"proto/detection","title":"Version detection","description":"The most powerful feature in proto is its contextual version detection, that is triggered with","sidebar":"proto"},"proto/faq":{"id":"proto/faq","title":"FAQ","description":"General","sidebar":"proto"},"proto/index":{"id":"proto/index","title":"What is proto?","description":"proto is a pluggable version manager, a unified toolchain.","sidebar":"proto"},"proto/install":{"id":"proto/install","title":"Install proto","description":"The following guide can be used to install proto into your environment.","sidebar":"proto"},"proto/plugins":{"id":"proto/plugins","title":"Plugins","description":"proto supports a pluggable architecture as a means for consumers to integrate and manage custom","sidebar":"proto"},"proto/toml-plugin":{"id":"proto/toml-plugin","title":"TOML plugin","description":"The TOML plugin is by design, very simple. It\'s a TOML file that describes a schema for the tool,","sidebar":"proto"},"proto/tools":{"id":"proto/tools","title":"Supported tools","description":"Built-in","sidebar":"proto"},"proto/wasm-plugin":{"id":"proto/wasm-plugin","title":"WASM plugin","description":"Plugins can be written in WebAssembly (WASM), a portable binary format.","sidebar":"proto"},"run-task":{"id":"run-task","title":"Run a task","description":"Even though we\'ve created a task, it\'s not useful unless we run it, which is done","sidebar":"docs"},"setup-toolchain":{"id":"setup-toolchain","title":"Setup toolchain","description":"One of moon\'s most powerful features is the toolchain, which manages and","sidebar":"docs"},"setup-workspace":{"id":"setup-workspace","title":"Setup workspace","description":"Once moon has been installed, we must setup the workspace, which is denoted","sidebar":"docs"},"terminology":{"id":"terminology","title":"Terminology","description":"| Term | Description |","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.e4a00393.js b/assets/js/935f2afb.e4a00393.js deleted file mode 100644 index a219b59642e..00000000000 --- a/assets/js/935f2afb.e4a00393.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/docs/","docId":"intro"},{"type":"category","label":"How it works","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Languages","href":"/docs/how-it-works/languages","docId":"how-it-works/languages"},{"type":"link","label":"Project graph","href":"/docs/how-it-works/project-graph","docId":"how-it-works/project-graph"},{"type":"link","label":"Action graph","href":"/docs/how-it-works/action-graph","docId":"how-it-works/action-graph"}],"href":"/docs/how-it-works"},{"type":"category","label":"Getting started","collapsed":false,"collapsible":true,"items":[{"type":"link","label":"Install moon","href":"/docs/install","docId":"install"},{"type":"link","label":"Setup workspace","href":"/docs/setup-workspace","docId":"setup-workspace"},{"type":"link","label":"Setup toolchain","href":"/docs/setup-toolchain","docId":"setup-toolchain"},{"type":"link","label":"Create a project","href":"/docs/create-project","docId":"create-project"},{"type":"link","label":"Create a task","href":"/docs/create-task","docId":"create-task"},{"type":"link","label":"Run a task","href":"/docs/run-task","docId":"run-task"},{"type":"link","label":"Migrate to moon","href":"/docs/migrate-to-moon","docId":"migrate-to-moon"}]},{"type":"category","label":"Concepts","items":[{"type":"link","label":"Cache","href":"/docs/concepts/cache","docId":"concepts/cache"},{"type":"link","label":"File groups","href":"/docs/concepts/file-group","docId":"concepts/file-group"},{"type":"link","label":"File patterns","href":"/docs/concepts/file-pattern","docId":"concepts/file-pattern"},{"type":"link","label":"Query language","href":"/docs/concepts/query-lang","docId":"concepts/query-lang"},{"type":"link","label":"Projects","href":"/docs/concepts/project","docId":"concepts/project"},{"type":"link","label":"Targets","href":"/docs/concepts/target","docId":"concepts/target"},{"type":"link","label":"Tasks","href":"/docs/concepts/task","docId":"concepts/task"},{"type":"link","label":"Task inheritance","href":"/docs/concepts/task-inheritance","docId":"concepts/task-inheritance"},{"type":"link","label":"Tokens","href":"/docs/concepts/token","docId":"concepts/token"},{"type":"link","label":"Toolchain","href":"/docs/concepts/toolchain","docId":"concepts/toolchain"},{"type":"link","label":"Workspace","href":"/docs/concepts/workspace","docId":"concepts/workspace"}],"collapsed":true,"collapsible":true,"href":"/docs/concepts"},{"type":"category","label":"Config files","items":[{"type":"link","label":".moon/workspace.yml","href":"/docs/config/workspace","docId":"config/workspace"},{"type":"link","label":".moon/toolchain.yml","href":"/docs/config/toolchain","docId":"config/toolchain"},{"type":"link","label":".moon/tasks...","href":"/docs/config/tasks","docId":"config/tasks"},{"type":"link","label":"moon.yml","href":"/docs/config/project","docId":"config/project"},{"type":"link","label":"template.yml","href":"/docs/config/template","docId":"config/template"}],"collapsed":true,"collapsible":true,"href":"/docs/config"},{"type":"category","label":"Editors","items":[{"type":"link","label":"VS Code","href":"/docs/editors/vscode","docId":"editors/vscode"}],"collapsed":true,"collapsible":true,"href":"/docs/editors"},{"type":"category","label":"Commands","items":[{"type":"link","label":"Overview","href":"/docs/commands/overview","docId":"commands/overview"},{"type":"link","label":"action-graph","href":"/docs/commands/action-graph","docId":"commands/action-graph"},{"type":"link","label":"bin","href":"/docs/commands/bin","docId":"commands/bin"},{"type":"link","label":"ci","href":"/docs/commands/ci","docId":"commands/ci"},{"type":"link","label":"check","href":"/docs/commands/check","docId":"commands/check"},{"type":"link","label":"clean","href":"/docs/commands/clean","docId":"commands/clean"},{"type":"link","label":"completions","href":"/docs/commands/completions","docId":"commands/completions"},{"type":"category","label":"docker","items":[{"type":"link","label":"prune","href":"/docs/commands/docker/prune","docId":"commands/docker/prune"},{"type":"link","label":"scaffold","href":"/docs/commands/docker/scaffold","docId":"commands/docker/scaffold"},{"type":"link","label":"setup","href":"/docs/commands/docker/setup","docId":"commands/docker/setup"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/docker"},{"type":"link","label":"generate","href":"/docs/commands/generate","docId":"commands/generate"},{"type":"link","label":"init","href":"/docs/commands/init","docId":"commands/init"},{"type":"category","label":"migrate","items":[{"type":"link","label":"from-package-json","href":"/docs/commands/migrate/from-package-json","docId":"commands/migrate/from-package-json"},{"type":"link","label":"from-turborepo","href":"/docs/commands/migrate/from-turborepo","docId":"commands/migrate/from-turborepo"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/migrate"},{"type":"link","label":"project","href":"/docs/commands/project","docId":"commands/project"},{"type":"link","label":"project-graph","href":"/docs/commands/project-graph","docId":"commands/project-graph"},{"type":"category","label":"query","items":[{"type":"link","label":"hash","href":"/docs/commands/query/hash","docId":"commands/query/hash"},{"type":"link","label":"hash-diff","href":"/docs/commands/query/hash-diff","docId":"commands/query/hash-diff"},{"type":"link","label":"projects","href":"/docs/commands/query/projects","docId":"commands/query/projects"},{"type":"link","label":"tasks","href":"/docs/commands/query/tasks","docId":"commands/query/tasks"},{"type":"link","label":"touched-files","href":"/docs/commands/query/touched-files","docId":"commands/query/touched-files"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/query"},{"type":"link","label":"run","href":"/docs/commands/run","docId":"commands/run"},{"type":"link","label":"setup","href":"/docs/commands/setup","docId":"commands/setup"},{"type":"category","label":"sync","items":[{"type":"link","label":"codeowners","href":"/docs/commands/sync/codeowners","docId":"commands/sync/codeowners"},{"type":"link","label":"hooks","href":"/docs/commands/sync/hooks","docId":"commands/sync/hooks"},{"type":"link","label":"projects","href":"/docs/commands/sync/projects","docId":"commands/sync/projects"}],"collapsed":true,"collapsible":true,"href":"/docs/commands/sync"},{"type":"link","label":"task","href":"/docs/commands/task","docId":"commands/task"},{"type":"link","label":"teardown","href":"/docs/commands/teardown","docId":"commands/teardown"},{"type":"link","label":"upgrade","href":"/docs/commands/upgrade","docId":"commands/upgrade"}],"collapsed":true,"collapsible":true,"href":"/docs/commands"},{"type":"link","label":"Cheat sheet","href":"/docs/cheat-sheet","docId":"cheat-sheet"},{"type":"link","label":"Feature comparison","href":"/docs/comparison","docId":"comparison"},{"type":"link","label":"Terminology","href":"/docs/terminology","docId":"terminology"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"faq"},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/moon/releases"}],"guides":[{"type":"link","label":"Continuous integration (CI)","href":"/docs/guides/ci","docId":"guides/ci"},{"type":"link","label":"Code generation","href":"/docs/guides/codegen","docId":"guides/codegen"},{"type":"link","label":"Code owners","href":"/docs/guides/codeowners","docId":"guides/codeowners"},{"type":"link","label":"Debugging a task","href":"/docs/guides/debug-task","docId":"guides/debug-task"},{"type":"link","label":"Docker usage","href":"/docs/guides/docker","docId":"guides/docker"},{"type":"link","label":"Offline mode","href":"/docs/guides/offline-mode","docId":"guides/offline-mode"},{"type":"link","label":"Open source usage","href":"/docs/guides/open-source","docId":"guides/open-source"},{"type":"link","label":"Remote caching","href":"/docs/guides/remote-cache","docId":"guides/remote-cache"},{"type":"link","label":"Root-level project","href":"/docs/guides/root-project","docId":"guides/root-project"},{"type":"link","label":"Sharing workspace configuration","href":"/docs/guides/sharing-config","docId":"guides/sharing-config"},{"type":"link","label":"Webhooks (experimental)","href":"/docs/guides/webhooks","docId":"guides/webhooks"},{"type":"link","label":"VCS hooks","href":"/docs/guides/vcs-hooks","docId":"guides/vcs-hooks"},{"type":"html","value":"<hr />","defaultStyle":true},{"type":"category","label":"JavaScript","collapsed":false,"items":[{"type":"link","label":"Deno handbook","href":"/docs/guides/javascript/deno-handbook","docId":"guides/javascript/deno-handbook"},{"type":"link","label":"Node.js handbook","href":"/docs/guides/javascript/node-handbook","docId":"guides/javascript/node-handbook"},{"type":"link","label":"Task profiling","href":"/docs/guides/profile","docId":"guides/profile"},{"type":"link","label":"TypeScript project references","href":"/docs/guides/javascript/typescript-project-refs","docId":"guides/javascript/typescript-project-refs"},{"type":"category","label":"Examples","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Angular","href":"/docs/guides/examples/angular","docId":"guides/examples/angular"},{"type":"link","label":"Astro","href":"/docs/guides/examples/astro","docId":"guides/examples/astro"},{"type":"link","label":"ESLint","href":"/docs/guides/examples/eslint","docId":"guides/examples/eslint"},{"type":"link","label":"Jest","href":"/docs/guides/examples/jest","docId":"guides/examples/jest"},{"type":"link","label":"Nest","href":"/docs/guides/examples/nest","docId":"guides/examples/nest"},{"type":"link","label":"Next","href":"/docs/guides/examples/next","docId":"guides/examples/next"},{"type":"link","label":"Nuxt","href":"/docs/guides/examples/nuxt","docId":"guides/examples/nuxt"},{"type":"link","label":"Packemon","href":"/docs/guides/examples/packemon","docId":"guides/examples/packemon"},{"type":"link","label":"Prettier","href":"/docs/guides/examples/prettier","docId":"guides/examples/prettier"},{"type":"link","label":"React","href":"/docs/guides/examples/react","docId":"guides/examples/react"},{"type":"link","label":"Remix","href":"/docs/guides/examples/remix","docId":"guides/examples/remix"},{"type":"link","label":"Solid","href":"/docs/guides/examples/solid","docId":"guides/examples/solid"},{"type":"link","label":"Storybook","href":"/docs/guides/examples/storybook","docId":"guides/examples/storybook"},{"type":"link","label":"SvelteKit","href":"/docs/guides/examples/sveltekit","docId":"guides/examples/sveltekit"},{"type":"link","label":"TypeScript","href":"/docs/guides/examples/typescript","docId":"guides/examples/typescript"},{"type":"link","label":"Vite & Vitest","href":"/docs/guides/examples/vite","docId":"guides/examples/vite"},{"type":"link","label":"Vue","href":"/docs/guides/examples/vue","docId":"guides/examples/vue"}],"href":"/docs/guides/node/examples"}],"collapsible":true},{"type":"html","value":"<hr />","defaultStyle":true},{"type":"category","label":"Rust","collapsed":false,"items":[{"type":"link","label":"Handbook","href":"/docs/guides/rust/handbook","docId":"guides/rust/handbook"}],"collapsible":true}],"proto":[{"type":"link","label":"What is proto?","href":"/docs/proto/","docId":"proto/index"},{"type":"link","label":"Install proto","href":"/docs/proto/install","docId":"proto/install"},{"type":"link","label":"Version detection","href":"/docs/proto/detection","docId":"proto/detection"},{"type":"link","label":"Configuration","href":"/docs/proto/config","docId":"proto/config"},{"type":"link","label":"Supported tools","href":"/docs/proto/tools","docId":"proto/tools"},{"type":"category","label":"Plugins","items":[{"type":"link","label":"TOML","href":"/docs/proto/toml-plugin","docId":"proto/toml-plugin"},{"type":"link","label":"WASM","href":"/docs/proto/wasm-plugin","docId":"proto/wasm-plugin"}],"collapsed":true,"collapsible":true,"href":"/docs/proto/plugins"},{"type":"category","label":"Commands","items":[{"type":"link","label":"add-plugin","href":"/docs/proto/commands/add-plugin","docId":"proto/commands/add-plugin"},{"type":"link","label":"alias","href":"/docs/proto/commands/alias","docId":"proto/commands/alias"},{"type":"link","label":"bin","href":"/docs/proto/commands/bin","docId":"proto/commands/bin"},{"type":"link","label":"clean","href":"/docs/proto/commands/clean","docId":"proto/commands/clean"},{"type":"link","label":"completions","href":"/docs/proto/commands/completions","docId":"proto/commands/completions"},{"type":"link","label":"install","href":"/docs/proto/commands/install","docId":"proto/commands/install"},{"type":"link","label":"install-global","href":"/docs/proto/commands/install-global","docId":"proto/commands/install-global"},{"type":"link","label":"list","href":"/docs/proto/commands/list","docId":"proto/commands/list"},{"type":"link","label":"list-global","href":"/docs/proto/commands/list-global","docId":"proto/commands/list-global"},{"type":"link","label":"list-remote","href":"/docs/proto/commands/list-remote","docId":"proto/commands/list-remote"},{"type":"link","label":"outdated","href":"/docs/proto/commands/outdated","docId":"proto/commands/outdated"},{"type":"link","label":"pin","href":"/docs/proto/commands/pin","docId":"proto/commands/pin"},{"type":"link","label":"plugins","href":"/docs/proto/commands/plugins","docId":"proto/commands/plugins"},{"type":"link","label":"remove-plugin","href":"/docs/proto/commands/remove-plugin","docId":"proto/commands/remove-plugin"},{"type":"link","label":"run","href":"/docs/proto/commands/run","docId":"proto/commands/run"},{"type":"link","label":"setup","href":"/docs/proto/commands/setup","docId":"proto/commands/setup"},{"type":"link","label":"tools","href":"/docs/proto/commands/tools","docId":"proto/commands/tools"},{"type":"link","label":"unalias","href":"/docs/proto/commands/unalias","docId":"proto/commands/unalias"},{"type":"link","label":"uninstall","href":"/docs/proto/commands/uninstall","docId":"proto/commands/uninstall"},{"type":"link","label":"uninstall-global","href":"/docs/proto/commands/uninstall-global","docId":"proto/commands/uninstall-global"},{"type":"link","label":"upgrade","href":"/docs/proto/commands/upgrade","docId":"proto/commands/upgrade"},{"type":"link","label":"use","href":"/docs/proto/commands/use","docId":"proto/commands/use"}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQ","href":"/docs/proto/faq","docId":"proto/faq"},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/proto/releases"}]},"docs":{"cheat-sheet":{"id":"cheat-sheet","title":"Cheat sheet","description":"Don\'t have time to read the docs? Here\'s a quick cheat sheet to get you started.","sidebar":"docs"},"commands/action-graph":{"id":"commands/action-graph","title":"action-graph","description":"The moon action-graph [target] (or moon ag) command will generate and serve a visual graph of","sidebar":"docs"},"commands/bin":{"id":"commands/bin","title":"bin","description":"The moon bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"docs"},"commands/check":{"id":"commands/check","title":"check","description":"The moon check [...projects] (or moon c) command will run all","sidebar":"docs"},"commands/ci":{"id":"commands/ci","title":"ci","description":"The moon ci command is a special command that should be ran in a continuous integration (CI)","sidebar":"docs"},"commands/clean":{"id":"commands/clean","title":"clean","description":"The moon clean command will clean the current workspace by deleting stale cache. For the most","sidebar":"docs"},"commands/completions":{"id":"commands/completions","title":"completions","description":"The moon completions command will generate moon command and argument completions for your current","sidebar":"docs"},"commands/docker/prune":{"id":"commands/docker/prune","title":"docker prune","description":"The moon docker prune command will reduce the overall filesize of the Docker environment by","sidebar":"docs"},"commands/docker/scaffold":{"id":"commands/docker/scaffold","title":"docker scaffold","description":"The moon docker scaffold command creates multiple repository skeletons for use","sidebar":"docs"},"commands/docker/setup":{"id":"commands/docker/setup","title":"docker setup","description":"The moon docker setup command will efficiently install dependencies for focused projects. This is","sidebar":"docs"},"commands/generate":{"id":"commands/generate","title":"generate","description":"The moon generate (or moon g) command will generate code (files and folders) from a","sidebar":"docs"},"commands/init":{"id":"commands/init","title":"init","description":"The moon init [dest] command will initialize moon into a repository and scaffold config files by","sidebar":"docs"},"commands/migrate/from-package-json":{"id":"commands/migrate/from-package-json","title":"migrate from-package-json","description":"Use the moon migrate from-package-json sub-command to migrate a project\'s package.json","sidebar":"docs"},"commands/migrate/from-turborepo":{"id":"commands/migrate/from-turborepo","title":"migrate from-turborepo","description":"Use the moon migrate from-turborepo command to migrate a Turborepo powered repository to moon.","sidebar":"docs"},"commands/overview":{"id":"commands/overview","title":"Overview","description":"The following options are available for all moon commands.","sidebar":"docs"},"commands/project":{"id":"commands/project","title":"project","description":"The moon project (or moon p) command will display all available information about a","sidebar":"docs"},"commands/project-graph":{"id":"commands/project-graph","title":"project-graph","description":"The moon project-graph [name] (or moon pg) command will generate and serve a visual graph of all","sidebar":"docs"},"commands/query/hash":{"id":"commands/query/hash","title":"query hash","description":"Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also","sidebar":"docs"},"commands/query/hash-diff":{"id":"commands/query/hash-diff","title":"query hash-diff","description":"Use the moon query hash-diff sub-command to query the content and source differences between 2","sidebar":"docs"},"commands/query/projects":{"id":"commands/query/projects","title":"query projects","description":"Use the moon query projects sub-command to query information about all projects in the project","sidebar":"docs"},"commands/query/tasks":{"id":"commands/query/tasks","title":"query tasks","description":"Use the moon query tasks sub-command to query task information for all projects in the project","sidebar":"docs"},"commands/query/touched-files":{"id":"commands/query/touched-files","title":"query touched-files","description":"Use the moon query touched-files sub-command to query for a list of touched files (added,","sidebar":"docs"},"commands/run":{"id":"commands/run","title":"run","description":"The moon run (or moon r) command will run one or many targets and all of","sidebar":"docs"},"commands/setup":{"id":"commands/setup","title":"setup","description":"The moon setup command can be used to setup the developer and pipeline environments. It achieves","sidebar":"docs"},"commands/sync/codeowners":{"id":"commands/sync/codeowners","title":"sync codeowners","description":"The moon sync codeowners command will manually sync code owners, by aggregating all owners from","sidebar":"docs"},"commands/sync/hooks":{"id":"commands/sync/hooks","title":"sync hooks","description":"The moon sync hooks command will manually sync hooks for the configured","sidebar":"docs"},"commands/sync/projects":{"id":"commands/sync/projects","title":"sync projects","description":"The moon sync projects command will force sync all projects in the workspace to help achieve a","sidebar":"docs"},"commands/task":{"id":"commands/task","title":"task","description":"The moon task (or moon t) command will display information about a task that has been","sidebar":"docs"},"commands/teardown":{"id":"commands/teardown","title":"teardown","description":"The moon teardown command, as its name infers, will teardown and clean the current environment,","sidebar":"docs"},"commands/upgrade":{"id":"commands/upgrade","title":"upgrade","description":"The moon upgrade command can be used to upgrade your current moon binary (if installed globally)","sidebar":"docs"},"comparison":{"id":"comparison","title":"Feature comparison","description":"The following comparisons are not an exhaustive list of features, and may be inaccurate or out of","sidebar":"docs"},"concepts/cache":{"id":"concepts/cache","title":"Cache","description":"moon\'s able to achieve high performance and blazing speeds by implementing a cache that\'s powered by","sidebar":"docs"},"concepts/file-group":{"id":"concepts/file-group","title":"File groups","description":"File groups are a mechanism for grouping similar types of files within a project using","sidebar":"docs"},"concepts/file-pattern":{"id":"concepts/file-pattern","title":"File patterns","description":"Globs","sidebar":"docs"},"concepts/project":{"id":"concepts/project","title":"Projects","description":"A project is a library, application, package, binary, tool, etc, that contains source files, test","sidebar":"docs"},"concepts/query-lang":{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","sidebar":"docs"},"concepts/target":{"id":"concepts/target","title":"Targets","description":"A target is a compound identifier that pairs a scope to a task, separated by a","sidebar":"docs"},"concepts/task":{"id":"concepts/task","title":"Tasks","description":"Tasks are commands that are ran in the context of a project. Underneath the hood, a","sidebar":"docs"},"concepts/task-inheritance":{"id":"concepts/task-inheritance","title":"Task inheritance","description":"Unlike other task runners that require the same tasks to be repeatedly defined for every project,","sidebar":"docs"},"concepts/token":{"id":"concepts/token","title":"Tokens","description":"Tokens are variables and functions that can be used by command,","sidebar":"docs"},"concepts/toolchain":{"id":"concepts/toolchain","title":"Toolchain","description":"The toolchain is an internal layer for downloading, installing, and managing tools (languages,","sidebar":"docs"},"concepts/workspace":{"id":"concepts/workspace","title":"Workspace","description":"A workspace is a directory that contains projects, manages a toolchain,","sidebar":"docs"},"config/project":{"id":"config/project","title":"moon.yml","description":"The moon.yml configuration file is not required but can be used to define additional metadata","sidebar":"docs"},"config/tasks":{"id":"config/tasks","title":".moon/tasks.yml, .moon/tasks/**/*.yml","description":"The .moon/tasks.yml file configures file groups and tasks that are inherited by every project in","sidebar":"docs"},"config/template":{"id":"config/template","title":"template.yml","description":"The template.yml file configures metadata and variables for a template,","sidebar":"docs"},"config/toolchain":{"id":"config/toolchain","title":".moon/toolchain.yml","description":"The .moon/toolchain.yml file configures the toolchain and the workspace development environment.","sidebar":"docs"},"config/workspace":{"id":"config/workspace","title":".moon/workspace.yml","description":"The .moon/workspace.yml file configures projects and services in the workspace. This file is","sidebar":"docs"},"create-project":{"id":"create-project","title":"Create a project","description":"With a workspace, we can now house one or many projects,","sidebar":"docs"},"create-task":{"id":"create-task","title":"Create a task","description":"The primary focus of moon is a task runner, and for it to operate in any capacity, it requires tasks","sidebar":"docs"},"editors/vscode":{"id":"editors/vscode","title":"VS Code extension","description":"Enhance your VS Code experience with our integrated moon console! Whether you\'re a fan of the","sidebar":"docs"},"faq":{"id":"faq","title":"FAQ","description":"General","sidebar":"docs"},"guides/ci":{"id":"guides/ci","title":"Continuous integration (CI)","description":"All companies and projects rely on continuous integration (CI) to ensure high quality code and to","sidebar":"guides"},"guides/codegen":{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","sidebar":"guides"},"guides/codeowners":{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","sidebar":"guides"},"guides/debug-task":{"id":"guides/debug-task","title":"Debugging a task","description":"Running tasks is the most common way to interact with moon, so what do you do","sidebar":"guides"},"guides/docker":{"id":"guides/docker","title":"Docker usage","description":"Using Docker to run your applications? Or build your artifacts? No","sidebar":"guides"},"guides/examples/angular":{"id":"guides/examples/angular","title":"Angular example","description":"In this guide, you\'ll learn how to integrate Angular into moon.","sidebar":"guides"},"guides/examples/astro":{"id":"guides/examples/astro","title":"Astro example","description":"In this guide, you\'ll learn how to integrate Astro.","sidebar":"guides"},"guides/examples/eslint":{"id":"guides/examples/eslint","title":"ESLint example","description":"In this guide, you\'ll learn how to integrate ESLint into moon.","sidebar":"guides"},"guides/examples/jest":{"id":"guides/examples/jest","title":"Jest example","description":"In this guide, you\'ll learn how to integrate Jest into moon.","sidebar":"guides"},"guides/examples/nest":{"id":"guides/examples/nest","title":"Nest example","description":"In this guide, you\'ll learn how to integrate NestJS into moon.","sidebar":"guides"},"guides/examples/next":{"id":"guides/examples/next","title":"Next example","description":"In this guide, you\'ll learn how to integrate Next.js into moon.","sidebar":"guides"},"guides/examples/nuxt":{"id":"guides/examples/nuxt","title":"Nuxt example","description":"In this guide, you\'ll learn how to integrate Nuxt v3, a Vue framework,","sidebar":"guides"},"guides/examples/packemon":{"id":"guides/examples/packemon","title":"Packemon example","description":"In this guide, you\'ll learn how to integrate Packemon into moon. Packemon","sidebar":"guides"},"guides/examples/prettier":{"id":"guides/examples/prettier","title":"Prettier example","description":"In this guide, you\'ll learn how to integrate Prettier into moon.","sidebar":"guides"},"guides/examples/react":{"id":"guides/examples/react","title":"React example","description":"React is an application or library concern, and not a build system one, since the bundling of React","sidebar":"guides"},"guides/examples/remix":{"id":"guides/examples/remix","title":"Remix example","description":"In this guide, you\'ll learn how to integrate Remix into moon.","sidebar":"guides"},"guides/examples/solid":{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","sidebar":"guides"},"guides/examples/storybook":{"id":"guides/examples/storybook","title":"Storybook example","description":"Storybook is a frontend workshop for building UI components and pages in isolation. Thousands of","sidebar":"guides"},"guides/examples/sveltekit":{"id":"guides/examples/sveltekit","title":"SvelteKit example","description":"SvelteKit is built on Svelte, a UI framework that","sidebar":"guides"},"guides/examples/typescript":{"id":"guides/examples/typescript","title":"TypeScript example","description":"In this guide, you\'ll learn how to integrate TypeScript into moon. We\'ll be","sidebar":"guides"},"guides/examples/vite":{"id":"guides/examples/vite","title":"Vite & Vitest example","description":"In this guide, you\'ll learn how to integrate Vite and","sidebar":"guides"},"guides/examples/vue":{"id":"guides/examples/vue","title":"Vue example","description":"Vue is an application or library concern, and not a build system one, since the bundling of Vue is","sidebar":"guides"},"guides/javascript/deno-handbook":{"id":"guides/javascript/deno-handbook","title":"Deno handbook","description":"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we\'ll","sidebar":"guides"},"guides/javascript/node-handbook":{"id":"guides/javascript/node-handbook","title":"Node.js handbook","description":"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using","sidebar":"guides"},"guides/javascript/typescript-eslint":{"id":"guides/javascript/typescript-eslint","title":"typescript-eslint","description":"ESLint integration"},"guides/javascript/typescript-project-refs":{"id":"guides/javascript/typescript-project-refs","title":"TypeScript project references","description":"The ultimate in-depth guide for using TypeScript in a monorepo effectively!","sidebar":"guides"},"guides/offline-mode":{"id":"guides/offline-mode","title":"Offline mode","description":"moon assumes that an internet connection is always available, as we download and install tools into","sidebar":"guides"},"guides/open-source":{"id":"guides/open-source","title":"Open source usage","description":"Although moon was designed for large monorepos, it can also be used for open source projects,","sidebar":"guides"},"guides/profile":{"id":"guides/profile","title":"Task profiling","description":"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!","sidebar":"guides"},"guides/remote-cache":{"id":"guides/remote-cache","title":"Remote caching","description":"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over","sidebar":"guides"},"guides/root-project":{"id":"guides/root-project","title":"Root-level project","description":"Coming from other repositories or task runner, you may be familiar with tasks available at the","sidebar":"guides"},"guides/rust/handbook":{"id":"guides/rust/handbook","title":"Rust handbook","description":"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,","sidebar":"guides"},"guides/sharing-config":{"id":"guides/sharing-config","title":"Sharing workspace configuration","description":"For large companies, open source maintainers, and those that love reusability, more often than not","sidebar":"guides"},"guides/vcs-hooks":{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","sidebar":"guides"},"guides/webhooks":{"id":"guides/webhooks","title":"Webhooks (experimental)","description":"Looking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe","sidebar":"guides"},"how-it-works/action-graph":{"id":"how-it-works/action-graph","title":"Action graph","description":"When you run a task on the command line, we generate an action graph to","sidebar":"docs"},"how-it-works/languages":{"id":"how-it-works/languages","title":"Languages","description":"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a","sidebar":"docs"},"how-it-works/project-graph":{"id":"how-it-works/project-graph","title":"Project graph","description":"The project graph is a representation of all configured","sidebar":"docs"},"install":{"id":"install","title":"Install moon","description":"The following guide can be used to install moon and integrate it into an existing repository (with","sidebar":"docs"},"intro":{"id":"intro","title":"Introduction","description":"moonrepo is a productivity platform that aims to eliminate pain points for both developers and","sidebar":"docs"},"migrate-to-moon":{"id":"migrate-to-moon","title":"Migrate to moon","description":"Now that we\'ve talked about the workspace, projects, tasks, and more, we must talk about something","sidebar":"docs"},"proto/commands/add-plugin":{"id":"proto/commands/add-plugin","title":"add-plugin","description":"The proto add-plugin (or proto ap) command will add the provided plugin ID and","sidebar":"proto"},"proto/commands/alias":{"id":"proto/commands/alias","title":"alias","description":"The proto alias (or proto a) command will define a custom alias that","sidebar":"proto"},"proto/commands/bin":{"id":"proto/commands/bin","title":"bin","description":"The proto bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"proto"},"proto/commands/clean":{"id":"proto/commands/clean","title":"clean","description":"The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it","sidebar":"proto"},"proto/commands/completions":{"id":"proto/commands/completions","title":"completions","description":"The proto completions command will generate proto command and argument completions for your","sidebar":"proto"},"proto/commands/install":{"id":"proto/commands/install","title":"install","description":"The proto install (or proto i) command will download and install a tool by unpacking","sidebar":"proto"},"proto/commands/install-global":{"id":"proto/commands/install-global","title":"install-global","description":"The proto install-global ... (or proto ig) command will install one or many","sidebar":"proto"},"proto/commands/list":{"id":"proto/commands/list","title":"list","description":"The proto list (or proto ls) command will list installed versions by scanning the","sidebar":"proto"},"proto/commands/list-global":{"id":"proto/commands/list-global","title":"list-global","description":"The proto list-global (or proto lsg) command will list installed global dependencies (and","sidebar":"proto"},"proto/commands/list-remote":{"id":"proto/commands/list-remote","title":"list-remote","description":"The proto list-remote (or proto lsr) command will list available versions by resolving","sidebar":"proto"},"proto/commands/outdated":{"id":"proto/commands/outdated","title":"outdated","description":"The proto outdated command will load the closest .prototools file and check for newer versions","sidebar":"proto"},"proto/commands/pin":{"id":"proto/commands/pin","title":"pin","description":"The proto pin command will pin a version (or alias) of a tool. By default it will","sidebar":"proto"},"proto/commands/plugins":{"id":"proto/commands/plugins","title":"plugins","description":"The proto plugins command will list all available and configured plugins. Will load all","sidebar":"proto"},"proto/commands/remove-plugin":{"id":"proto/commands/remove-plugin","title":"remove-plugin","description":"The proto remove-plugin (or proto rp) command will remove the provided plugin ID from to","sidebar":"proto"},"proto/commands/run":{"id":"proto/commands/run","title":"run","description":"The proto run (or proto r) command will run a tool after","sidebar":"proto"},"proto/commands/setup":{"id":"proto/commands/setup","title":"setup","description":"The proto setup command will setup proto in your current shell by modifying an applicable profile","sidebar":"proto"},"proto/commands/tools":{"id":"proto/commands/tools","title":"tools","description":"The proto tools command will list all tools that have been installed, along with their installed","sidebar":"proto"},"proto/commands/unalias":{"id":"proto/commands/unalias","title":"unalias","description":"The proto unalias (or proto ua) command will remove a custom alias for the","sidebar":"proto"},"proto/commands/uninstall":{"id":"proto/commands/uninstall","title":"uninstall","description":"The proto uninstall (or proto ui) command will uninstall and remove a tool from","sidebar":"proto"},"proto/commands/uninstall-global":{"id":"proto/commands/uninstall-global","title":"uninstall-global","description":"The proto uninstall-global ... (or proto ug) command will uninstall one or","sidebar":"proto"},"proto/commands/upgrade":{"id":"proto/commands/upgrade","title":"upgrade","description":"The proto upgrade (or proto up) command can be used to upgrade your current proto binary to the","sidebar":"proto"},"proto/commands/use":{"id":"proto/commands/use","title":"use","description":"The proto use (or proto u) command will download and install all tools and plugins from all","sidebar":"proto"},"proto/config":{"id":"proto/config","title":"Configuration","description":"We support configuration for both projects and users. Both config files are in","sidebar":"proto"},"proto/detection":{"id":"proto/detection","title":"Version detection","description":"The most powerful feature in proto is its contextual version detection, that is triggered with","sidebar":"proto"},"proto/faq":{"id":"proto/faq","title":"FAQ","description":"General","sidebar":"proto"},"proto/index":{"id":"proto/index","title":"What is proto?","description":"proto is a pluggable toolchain manager.","sidebar":"proto"},"proto/install":{"id":"proto/install","title":"Install proto","description":"The following guide can be used to install proto into your environment.","sidebar":"proto"},"proto/plugins":{"id":"proto/plugins","title":"Plugins","description":"proto supports a pluggable architecture as a means for consumers to integrate and manage custom","sidebar":"proto"},"proto/toml-plugin":{"id":"proto/toml-plugin","title":"TOML plugin","description":"The TOML plugin is by design, very simple. It\'s a TOML file that describes a schema for the tool,","sidebar":"proto"},"proto/tools":{"id":"proto/tools","title":"Supported tools","description":"Built-in","sidebar":"proto"},"proto/wasm-plugin":{"id":"proto/wasm-plugin","title":"WASM plugin","description":"Plugins can be written in WebAssembly (WASM), a portable binary format.","sidebar":"proto"},"run-task":{"id":"run-task","title":"Run a task","description":"Even though we\'ve created a task, it\'s not useful unless we run it, which is done","sidebar":"docs"},"setup-toolchain":{"id":"setup-toolchain","title":"Setup toolchain","description":"One of moon\'s most powerful features is the toolchain, which manages and","sidebar":"docs"},"setup-workspace":{"id":"setup-workspace","title":"Setup workspace","description":"Once moon has been installed, we must setup the workspace, which is denoted","sidebar":"docs"},"terminology":{"id":"terminology","title":"Terminology","description":"| Term | Description |","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/937d7adc.7c4d7c9f.js b/assets/js/937d7adc.7c4d7c9f.js new file mode 100644 index 00000000000..a5c5daa42de --- /dev/null +++ b/assets/js/937d7adc.7c4d7c9f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33071],{35318:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=c(r),f=o,y=u["".concat(s,".").concat(f)]||u[f]||m[f]||i;return r?n.createElement(y,a(a({ref:t},l),{},{components:r})):n.createElement(y,a({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=u;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p.mdxType="string"==typeof e?e:o,a[1]=p;for(var c=2;c<i;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},14097:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const i={slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},a=void 0,p={permalink:"/blog/typescript-monorepo",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-21_typescript-monorepo.mdx",source:"@site/blog/2022-11-21_typescript-monorepo.mdx",title:"Integrating TypeScript in a monorepo",description:"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is",date:"2022-11-21T00:00:00.000Z",formattedDate:"November 21, 2022",tags:[{label:"typescript",permalink:"/blog/tags/typescript"},{label:"monorepo",permalink:"/blog/tags/monorepo"}],readingTime:.505,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},prevItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"},nextItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"}},s={authorsImageUrls:[void 0]},c=[],l={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is\na fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we\ntook it upon ourselves to answer this question!"),(0,o.kt)("p",null,"Based on our experience scaling and managing frontend repositories in open source and large\ncompanies like Airbnb and Coinbase, we're happy to\n",(0,o.kt)("a",{parentName:"p",href:"../docs/guides/javascript/typescript-project-refs"},"announce an in-depth guide on using TypeScript project references in a monorepo"),"!"),(0,o.kt)("p",null,"We hope you find this guide useful, and if you have any questions, feel free to discuss them in our\n",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/qCh9MEynv2"},"Discord community"),"!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/937d7adc.ac0053de.js b/assets/js/937d7adc.ac0053de.js deleted file mode 100644 index dba5a9080f0..00000000000 --- a/assets/js/937d7adc.ac0053de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3071],{35318:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=c(r),f=o,y=u["".concat(s,".").concat(f)]||u[f]||m[f]||i;return r?n.createElement(y,a(a({ref:t},l),{},{components:r})):n.createElement(y,a({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=u;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p.mdxType="string"==typeof e?e:o,a[1]=p;for(var c=2;c<i;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},14097:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const i={slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},a=void 0,p={permalink:"/blog/typescript-monorepo",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-21_typescript-monorepo.mdx",source:"@site/blog/2022-11-21_typescript-monorepo.mdx",title:"Integrating TypeScript in a monorepo",description:"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is",date:"2022-11-21T00:00:00.000Z",formattedDate:"November 21, 2022",tags:[{label:"typescript",permalink:"/blog/tags/typescript"},{label:"monorepo",permalink:"/blog/tags/monorepo"}],readingTime:.505,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"typescript-monorepo",title:"Integrating TypeScript in a monorepo",authors:["milesj"],tags:["typescript","monorepo"]},prevItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"},nextItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"}},s={authorsImageUrls:[void 0]},c=[],l={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is\na fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we\ntook it upon ourselves to answer this question!"),(0,o.kt)("p",null,"Based on our experience scaling and managing frontend repositories in open source and large\ncompanies like Airbnb and Coinbase, we're happy to\n",(0,o.kt)("a",{parentName:"p",href:"../docs/guides/javascript/typescript-project-refs"},"announce an in-depth guide on using TypeScript project references in a monorepo"),"!"),(0,o.kt)("p",null,"We hope you find this guide useful, and if you have any questions, feel free to discuss them in our\n",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/qCh9MEynv2"},"Discord community"),"!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/93bce8ec.8355e4dd.js b/assets/js/93bce8ec.8355e4dd.js deleted file mode 100644 index 7928150727b..00000000000 --- a/assets/js/93bce8ec.8355e4dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4859],{34284:e=>{e.exports=JSON.parse('{"label":"generator","permalink":"/blog/tags/generator","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/93bce8ec.f507e5fc.js b/assets/js/93bce8ec.f507e5fc.js new file mode 100644 index 00000000000..c7055def064 --- /dev/null +++ b/assets/js/93bce8ec.f507e5fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64859],{34284:e=>{e.exports=JSON.parse('{"label":"generator","permalink":"/blog/tags/generator","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file diff --git a/assets/js/9529487c.2749a8ed.js b/assets/js/9529487c.2749a8ed.js new file mode 100644 index 00000000000..8b71551ca89 --- /dev/null +++ b/assets/js/9529487c.2749a8ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35537],{40543:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tags","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/9529487c.fa36ef49.js b/assets/js/9529487c.fa36ef49.js deleted file mode 100644 index 53b7a90bcd0..00000000000 --- a/assets/js/9529487c.fa36ef49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5537],{40543:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tags","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/957809ee.29088a3c.js b/assets/js/957809ee.29088a3c.js deleted file mode 100644 index 6dacfc83add..00000000000 --- a/assets/js/957809ee.29088a3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2785],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},57828:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},i=void 0,l={permalink:"/blog/moon-v1.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx",source:"@site/blog/2023-09-05_moon-v1.13.mdx",title:"moon v1.13 - Toolchain now uses WASM plugins",description:"This is a light release that focused primarily on upgrading to the WASM based proto implementation.",date:"2023-09-05T00:00:00.000Z",formattedDate:"September 5, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"}],readingTime:2.76,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},prevItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"},nextItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"}},s={image:r(21445).Z,authorsImageUrls:[void 0]},p=[],m={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a light release that focused primarily on upgrading to the WASM based proto implementation."))}c.isMDXComponent=!0},21445:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.13-a119a59c6b1d80abaf4f3855114d1b48.png"}}]); \ No newline at end of file diff --git a/assets/js/957809ee.31ddf86c.js b/assets/js/957809ee.31ddf86c.js new file mode 100644 index 00000000000..f550e9d2255 --- /dev/null +++ b/assets/js/957809ee.31ddf86c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12785],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},57828:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},i=void 0,l={permalink:"/blog/moon-v1.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx",source:"@site/blog/2023-09-05_moon-v1.13.mdx",title:"moon v1.13 - Toolchain now uses WASM plugins",description:"This is a light release that focused primarily on upgrading to the WASM based proto implementation.",date:"2023-09-05T00:00:00.000Z",formattedDate:"September 5, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"}],readingTime:2.76,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},prevItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"},nextItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"}},s={image:r(21445).Z,authorsImageUrls:[void 0]},p=[],m={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a light release that focused primarily on upgrading to the WASM based proto implementation."))}c.isMDXComponent=!0},21445:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.13-a119a59c6b1d80abaf4f3855114d1b48.png"}}]); \ No newline at end of file diff --git a/assets/js/97279.b60bee5d.js b/assets/js/97279.b60bee5d.js new file mode 100644 index 00000000000..b8d2930a109 --- /dev/null +++ b/assets/js/97279.b60bee5d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97279],{99746:(e,t,u)=>{const n=u(27378).createContext({options:{banner:"",breadcrumbs:!0,gitRefName:"master",minimal:!1,pluginId:"default",scopes:[]},reflections:{}});t.ApiDataContext=n},97279:(e,t,u)=>{function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var u=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=u){var n,r,i,s,a=[],l=!0,o=!1;try{if(i=(u=u.call(e)).next,0===t){if(Object(u)!==u)return;l=!1}else for(;!(l=(n=i.call(u)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(D){o=!0,r=D}finally{try{if(!l&&null!=u.return&&(s=u.return(),Object(s)!==s))return}finally{if(o)throw r}}return a}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var u=Object.prototype.toString.call(e).slice(8,-1);"Object"===u&&e.constructor&&(u=e.constructor.name);if("Map"===u||"Set"===u)return Array.from(e);if("Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return r(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}const i=u(27378),s=u(18335),a=u(12700),l=u(36256),o=u(51165),D=u(603),c=e=>e&&e.__esModule?e:{default:e},h=c(i),p=c(l);s.marked.setOptions({gfm:!0,headerIds:!1,mangle:!1,smartLists:!0,smartypants:!0});const f=/^:{3}([a-z]+)? *(.*)\n/;s.marked.use({extensions:[{name:"admonition",level:"block",start:e=>e.match(f)?.index,tokenizer(e,t){const u=f.exec(e);if(u){const t=u[1]??"info",n=u[2]?u[2].trim():void 0,r=u.index,i=r+u[0].length,s=e.indexOf("\n:::",i),a=s+4,l={type:"admonition",raw:e.slice(r,a),text:e.slice(i,s),title:n,keyword:t,tokens:[]};return this.lexer.blockTokens(l.text,l.tokens),l}}}]});const g={blockquote:"blockquote",br:"br",code:"pre",codespan:"code",def:"span",del:"del",em:"em",escape:"span",hr:"hr",html:"div",paragraph:"p",strong:"strong",table:"table",tablecell:"td",tablerow:"tr"};function d(e){const t=[];let u=0;if(e.forEach((e=>{const n=e.tokens??[];switch(e.type){case"code":t.push(h.default.createElement(p.default.pre,{key:u,className:e.lang&&`language-${e.lang}`},e.text));break;case"codespan":t.push(h.default.createElement(p.default.code,{key:u},e.raw.slice(1,-1)));break;case"heading":{const r=p.default[`h${e.depth}`];t.push(h.default.createElement(r,{key:u},d(n)??e.text));break}case"image":t.push(h.default.createElement(p.default.img,{key:u,alt:e.title,src:e.href}));break;case"link":t.push(h.default.createElement(p.default.a,{key:u,href:e.href,title:e.title},d(n)??e.text));break;case"list":{const r=e.ordered?"ol":"ul";t.push(h.default.createElement(r,{key:u},d(e.items??n)));break}case"list_item":t.push(h.default.createElement("li",{key:u},e.task&&h.default.createElement(h.default.Fragment,null,h.default.createElement("input",{checked:e.checked,type:"checkbox"})," "),d(n)??e.text));break;case"space":t.push(e.raw||" ");break;case"table":t.push(h.default.createElement("table",{key:u},h.default.createElement("thead",null,h.default.createElement("tr",null,e.header.map(((t,u)=>h.default.createElement("th",{key:u,align:e.align[u]},d(t.tokens)))))),h.default.createElement("tbody",null,e.rows.map(((t,u)=>h.default.createElement("tr",{key:u},t.map(((t,n)=>h.default.createElement("td",{key:n,align:e.align[u]},d(t.tokens))))))))));break;case"text":t.push(0===n.length?e.text:h.default.createElement(h.default.Fragment,{key:u},d(n)));break;case"admonition":t.push(h.default.createElement(p.default.admonition,{key:u,title:e.title,type:e.keyword},d(n)??e.text));break;default:{const r=g[e.type]||e.type,i="text"in e?e.text:"";t.push(h.default.createElement(r,{key:u},d(n)??i));break}}u+=1})),0!==t.length)return t}t.Markdown=function(e){let{content:t}=e;const u=o.useReflectionMap(),r=a.useDocsVersion(),l=n(i.useState((()=>s.marked.lexer(D.replaceLinkTokens(t,u,r)))),1)[0];return t?h.default.createElement("div",{className:"tsd-markdown markdown"},d(l)):null}},51165:(e,t,u)=>{const n=u(27378),r=u(99746);t.useReflectionMap=function(){return n.useContext(r.ApiDataContext).reflections}},603:(e,t)=>{function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var u=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=u){var n,r,i,s,a=[],l=!0,o=!1;try{if(i=(u=u.call(e)).next,0===t){if(Object(u)!==u)return;l=!1}else for(;!(l=(n=i.call(u)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(D){o=!0,r=D}finally{try{if(!l&&null!=u.return&&(s=u.return(),Object(s)!==s))return}finally{if(o)throw r}}return a}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var u=Object.prototype.toString.call(e).slice(8,-1);"Object"===u&&e.constructor&&(u=e.constructor.name);if("Map"===u||"Set"===u)return Array.from(e);if("Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}function r(e){let t=e.indexOf("|");return-1===t&&(t=e.search(/\s/)),-1!==t?{caption:e.slice(t+1).replace(/\n+/," ").trim(),target:e.slice(0,Math.max(0,t)).trim()}:{caption:e,target:e}}function i(e){return(t,n,i)=>{const s=r(i),a=s.caption,l=u(s.target.split("."),2),o=l[0],D=l[1],c=function(e,t,u){return Object.values(e).find((e=>e.name===t&&(!u||e.children?.some((e=>e.name===u)))))}(e,o,D),h="linkcode"===n?`\`${a}\``:a;return c?.permalink?`[${h}](${c.permalink}${D?`#${D}`:""})`:h}}t.replaceLinkTokens=function(e,t,u){return e.replace(/{@(link|linkcode|linkplain|apilink)\s+([^}]+?)}/gi,i(t)).replace(/{@doclink\s+([^}]+?)}/gi,function(e){return(t,u)=>{const n=r(u),i=n.caption,s=n.target,a="current"===e.version?"next":e.version;return`[${i}](${e.isLast?`/docs/${s}`:`/docs/${a}/${s}`})`}}(u))}},18335:(e,t)=>{function u(e,t){for(var u=0;u<t.length;u++){var n=t[u];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,(r=n.key,i=void 0,"symbol"==typeof(i=function(e,t){if("object"!=typeof e||null===e)return e;var u=e[Symbol.toPrimitive];if(void 0!==u){var n=u.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(r,"string"))?i:String(i)),n)}var r,i}function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var u=arguments[t];for(var n in u)Object.prototype.hasOwnProperty.call(u,n)&&(e[n]=u[n])}return e},n.apply(this,arguments)}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}function i(e,t){var u="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(u)return(u=u.call(e)).next.bind(u);if(Array.isArray(e)||(u=function(e,t){if(e){if("string"==typeof e)return r(e,t);var u=Object.prototype.toString.call(e).slice(8,-1);return"Object"===u&&e.constructor&&(u=e.constructor.name),"Map"===u||"Set"===u?Array.from(e):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?r(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){u&&(e=u);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}t.defaults={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};var a=/[&<>"']/,l=new RegExp(a.source,"g"),o=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,D=new RegExp(o.source,"g"),c={"&":"&","<":"<",">":">",'"':""","'":"'"},h=function(e){return c[e]};function p(e,t){if(t){if(a.test(e))return e.replace(l,h)}else if(o.test(e))return e.replace(D,h);return e}var f=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function g(e){return e.replace(f,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var d=/(^|[^\[])\^/g;function F(e,t){e="string"==typeof e?e:e.source,t=t||"";var u={replace:function(t,n){return n=(n=n.source||n).replace(d,"$1"),e=e.replace(t,n),u},getRegex:function(){return new RegExp(e,t)}};return u}var k=/[^\w:]/g,A=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function E(e,t,u){if(e){var n;try{n=decodeURIComponent(g(u)).replace(k,"").toLowerCase()}catch(r){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}t&&!A.test(u)&&(u=function(e,t){C[" "+e]||(m.test(e)?C[" "+e]=e+"/":C[" "+e]=v(e,"/",!0));var u=-1===(e=C[" "+e]).indexOf(":");return"//"===t.substring(0,2)?u?t:e.replace(x,"$1")+t:"/"===t.charAt(0)?u?t:e.replace(b,"$1")+t:e+t}(t,u));try{u=encodeURI(u).replace(/%25/g,"%")}catch(r){return null}return u}var C={},m=/^[^:]+:\/*[^/]*$/,x=/^([^:]+:)[\s\S]*$/,b=/^([^:]+:\/*[^/]*)[\s\S]*$/;var B={exec:function(){}};function w(e,t){var u=e.replace(/\|/g,(function(e,t,u){for(var n=!1,r=t;--r>=0&&"\\"===u[r];)n=!n;return n?"|":" |"})).split(/ \|/),n=0;if(u[0].trim()||u.shift(),u.length>0&&!u[u.length-1].trim()&&u.pop(),u.length>t)u.splice(t);else for(;u.length<t;)u.push("");for(;n<u.length;n++)u[n]=u[n].trim().replace(/\\\|/g,"|");return u}function v(e,t,u){var n=e.length;if(0===n)return"";for(var r=0;r<n;){var i=e.charAt(n-r-1);if(i!==t||u){if(i===t||!u)break;r++}else r++}return e.slice(0,n-r)}function y(e,t){if(t<1)return"";for(var u="";t>1;)1&t&&(u+=e),t>>=1,e+=e;return u+e}function _(e,t,u,n){var r=t.href,i=t.title?p(t.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){n.state.inLink=!0;var a={type:"link",raw:u,href:r,title:i,text:s,tokens:n.inlineTokens(s)};return n.state.inLink=!1,a}return{type:"image",raw:u,href:r,title:i,text:p(s)}}var z=function(){function e(e){this.options=e||t.defaults}var u=e.prototype;return u.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}},u.code=function(e){var t=this.rules.block.code.exec(e);if(t){var u=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?u:v(u,"\n")}}},u.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var u=t[0],n=function(e,t){var u=e.match(/^(\s+)(?:```)/);if(null===u)return t;var n=u[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=n.length?e.slice(n.length):e})).join("\n")}(u,t[3]||"");return{type:"code",raw:u,lang:t[2]?t[2].trim().replace(this.rules.inline._escapes,"$1"):t[2],text:n}}},u.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var u=t[2].trim();if(/#$/.test(u)){var n=v(u,"#");this.options.pedantic?u=n.trim():n&&!/ $/.test(n)||(u=n.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:u,tokens:this.lexer.inline(u)}}},u.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},u.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var u=t[0].replace(/^ *>[ \t]?/gm,""),n=this.lexer.state.top;this.lexer.state.top=!0;var r=this.lexer.blockTokens(u);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:r,text:u}}},u.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,a,l,o,D,c,h,p,f=t[1].trim(),g=f.length>1,d={type:"list",raw:"",ordered:g,start:g?+f.slice(0,-1):"",loose:!1,items:[]};f=g?"\\d{1,9}\\"+f.slice(-1):"\\"+f,this.options.pedantic&&(f=g?f:"[*+-]");for(var F=new RegExp("^( {0,3}"+f+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(p=!1,t=F.exec(e))&&!this.rules.block.hr.test(e);){if(u=t[0],e=e.substring(u.length),o=t[2].split("\n",1)[0].replace(/^\t+/,(function(e){return" ".repeat(3*e.length)})),D=e.split("\n",1)[0],this.options.pedantic?(i=2,h=o.trimLeft()):(i=(i=t[2].search(/[^ ]/))>4?1:i,h=o.slice(i),i+=t[1].length),a=!1,!o&&/^ *$/.test(D)&&(u+=D+"\n",e=e.substring(D.length+1),p=!0),!p)for(var k=new RegExp("^ {0,"+Math.min(3,i-1)+"}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))"),A=new RegExp("^ {0,"+Math.min(3,i-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),E=new RegExp("^ {0,"+Math.min(3,i-1)+"}(?:```|~~~)"),C=new RegExp("^ {0,"+Math.min(3,i-1)+"}#");e&&(D=c=e.split("\n",1)[0],this.options.pedantic&&(D=D.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!E.test(D))&&!C.test(D)&&!k.test(D)&&!A.test(e);){if(D.search(/[^ ]/)>=i||!D.trim())h+="\n"+D.slice(i);else{if(a)break;if(o.search(/[^ ]/)>=4)break;if(E.test(o))break;if(C.test(o))break;if(A.test(o))break;h+="\n"+D}a||D.trim()||(a=!0),u+=c+"\n",e=e.substring(c.length+1),o=D.slice(i)}d.loose||(l?d.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(h))&&(r="[ ] "!==n[0],h=h.replace(/^\[[ xX]\] +/,"")),d.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:h}),d.raw+=u}d.items[d.items.length-1].raw=u.trimRight(),d.items[d.items.length-1].text=h.trimRight(),d.raw=d.raw.trimRight();var m=d.items.length;for(s=0;s<m;s++)if(this.lexer.state.top=!1,d.items[s].tokens=this.lexer.blockTokens(d.items[s].text,[]),!d.loose){var x=d.items[s].tokens.filter((function(e){return"space"===e.type})),b=x.length>0&&x.some((function(e){return/\n.*\n/.test(e.raw)}));d.loose=b}if(d.loose)for(s=0;s<m;s++)d.items[s].loose=!0;return d}},u.html=function(e){var t=this.rules.block.html.exec(e);if(t){var u={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};if(this.options.sanitize){var n=this.options.sanitizer?this.options.sanitizer(t[0]):p(t[0]);u.type="paragraph",u.text=n,u.tokens=this.lexer.inline(n)}return u}},u.def=function(e){var t=this.rules.block.def.exec(e);if(t){var u=t[1].toLowerCase().replace(/\s+/g," "),n=t[2]?t[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline._escapes,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline._escapes,"$1"):t[3];return{type:"def",tag:u,raw:t[0],href:n,title:r}}},u.table=function(e){var t=this.rules.block.table.exec(e);if(t){var u={type:"table",header:w(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(u.header.length===u.align.length){u.raw=t[0];var n,r,i,s,a=u.align.length;for(n=0;n<a;n++)/^ *-+: *$/.test(u.align[n])?u.align[n]="right":/^ *:-+: *$/.test(u.align[n])?u.align[n]="center":/^ *:-+ *$/.test(u.align[n])?u.align[n]="left":u.align[n]=null;for(a=u.rows.length,n=0;n<a;n++)u.rows[n]=w(u.rows[n],u.header.length).map((function(e){return{text:e}}));for(a=u.header.length,r=0;r<a;r++)u.header[r].tokens=this.lexer.inline(u.header[r].text);for(a=u.rows.length,r=0;r<a;r++)for(s=u.rows[r],i=0;i<s.length;i++)s[i].tokens=this.lexer.inline(s[i].text);return u}}},u.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}},u.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t){var u="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:u,tokens:this.lexer.inline(u)}}},u.text=function(e){var t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}},u.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:p(t[1])}},u.tag=function(e){var t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^<a /i.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):p(t[0]):t[0]}},u.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var u=t[2].trim();if(!this.options.pedantic&&/^</.test(u)){if(!/>$/.test(u))return;var n=v(u.slice(0,-1),"\\");if((u.length-n.length)%2==0)return}else{var r=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var u=e.length,n=0,r=0;r<u;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&--n<0)return r;return-1}(t[2],"()");if(r>-1){var i=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,i).trim(),t[3]=""}}var s=t[2],a="";if(this.options.pedantic){var l=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(s);l&&(s=l[1],a=l[3])}else a=t[3]?t[3].slice(1,-1):"";return s=s.trim(),/^</.test(s)&&(s=this.options.pedantic&&!/>$/.test(u)?s.slice(1):s.slice(1,-1)),_(t,{href:s?s.replace(this.rules.inline._escapes,"$1"):s,title:a?a.replace(this.rules.inline._escapes,"$1"):a},t[0],this.lexer)}},u.reflink=function(e,t){var u;if((u=this.rules.inline.reflink.exec(e))||(u=this.rules.inline.nolink.exec(e))){var n=(u[2]||u[1]).replace(/\s+/g," ");if(!(n=t[n.toLowerCase()])){var r=u[0].charAt(0);return{type:"text",raw:r,text:r}}return _(u,n,u[0],this.lexer)}},u.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||r&&(""===u||this.rules.inline.punctuation.exec(u))){var i,s,a=n[0].length-1,l=a,o=0,D="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(D.lastIndex=0,t=t.slice(-1*e.length+a);null!=(n=D.exec(t));)if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6])if(s=i.length,n[3]||n[4])l+=s;else if(!((n[5]||n[6])&&a%3)||(a+s)%3){if(!((l-=s)>0)){s=Math.min(s,s+l+o);var c=e.slice(0,a+n.index+(n[0].length-i.length)+s);if(Math.min(a,s)%2){var h=c.slice(1,-1);return{type:"em",raw:c,text:h,tokens:this.lexer.inlineTokens(h)}}var p=c.slice(2,-2);return{type:"strong",raw:c,text:p,tokens:this.lexer.inlineTokens(p)}}}else o+=s}}},u.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var u=t[2].replace(/\n/g," "),n=/[^ ]/.test(u),r=/^ /.test(u)&&/ $/.test(u);return n&&r&&(u=u.substring(1,u.length-1)),u=p(u,!0),{type:"codespan",raw:t[0],text:u}}},u.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},u.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},u.autolink=function(e,t){var u,n,r=this.rules.inline.autolink.exec(e);if(r)return n="@"===r[2]?"mailto:"+(u=p(this.options.mangle?t(r[1]):r[1])):u=p(r[1]),{type:"link",raw:r[0],text:u,href:n,tokens:[{type:"text",raw:u,text:u}]}},u.url=function(e,t){var u;if(u=this.rules.inline.url.exec(e)){var n,r;if("@"===u[2])r="mailto:"+(n=p(this.options.mangle?t(u[0]):u[0]));else{var i;do{i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0]}while(i!==u[0]);n=p(u[0]),r="www."===u[1]?"http://"+u[0]:u[0]}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},u.inlineText=function(e,t){var u,n=this.rules.inline.text.exec(e);if(n)return u=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):p(n[0]):n[0]:p(this.options.smartypants?t(n[0]):n[0]),{type:"text",raw:n[0],text:u}},e}(),$={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:B,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};$.def=F($.def).replace("label",$._label).replace("title",$._title).getRegex(),$.bullet=/(?:[*+-]|\d{1,9}[.)])/,$.listItemStart=F(/^( *)(bull) */).replace("bull",$.bullet).getRegex(),$.list=F($.list).replace(/bull/g,$.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+$.def.source+")").getRegex(),$._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",$._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,$.html=F($.html,"i").replace("comment",$._comment).replace("tag",$._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),$.paragraph=F($._paragraph).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.blockquote=F($.blockquote).replace("paragraph",$.paragraph).getRegex(),$.normal=n({},$),$.gfm=n({},$.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),$.gfm.table=F($.gfm.table).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.gfm.paragraph=F($._paragraph).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",$.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.pedantic=n({},$.normal,{html:F("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",$._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:B,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:F($.normal._paragraph).replace("hr",$.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var S={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:B,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:B,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/};function T(e){return e.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201c").replace(/"/g,"\u201d").replace(/\.{3}/g,"\u2026")}function R(e){var t,u,n="",r=e.length;for(t=0;t<r;t++)u=e.charCodeAt(t),Math.random()>.5&&(u="x"+u.toString(16)),n+="&#"+u+";";return n}S._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",S.punctuation=F(S.punctuation).replace(/punctuation/g,S._punctuation).getRegex(),S.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,S.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g,S._comment=F($._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),S.emStrong.lDelim=F(S.emStrong.lDelim).replace(/punct/g,S._punctuation).getRegex(),S.emStrong.rDelimAst=F(S.emStrong.rDelimAst,"g").replace(/punct/g,S._punctuation).getRegex(),S.emStrong.rDelimUnd=F(S.emStrong.rDelimUnd,"g").replace(/punct/g,S._punctuation).getRegex(),S._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,S._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,S._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,S.autolink=F(S.autolink).replace("scheme",S._scheme).replace("email",S._email).getRegex(),S._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,S.tag=F(S.tag).replace("comment",S._comment).replace("attribute",S._attribute).getRegex(),S._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,S._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,S._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,S.link=F(S.link).replace("label",S._label).replace("href",S._href).replace("title",S._title).getRegex(),S.reflink=F(S.reflink).replace("label",S._label).replace("ref",$._label).getRegex(),S.nolink=F(S.nolink).replace("ref",$._label).getRegex(),S.reflinkSearch=F(S.reflinkSearch,"g").replace("reflink",S.reflink).replace("nolink",S.nolink).getRegex(),S.normal=n({},S),S.pedantic=n({},S.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:F(/^!?\[(label)\]\((.*?)\)/).replace("label",S._label).getRegex(),reflink:F(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",S._label).getRegex()}),S.gfm=n({},S.normal,{escape:F(S.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),S.gfm.url=F(S.gfm.url,"i").replace("email",S.gfm._extended_email).getRegex(),S.breaks=n({},S.gfm,{br:F(S.br).replace("{2,}","*").getRegex(),text:F(S.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var I=function(){function e(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||t.defaults,this.options.tokenizer=this.options.tokenizer||new z,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var u={block:$.normal,inline:S.normal};this.options.pedantic?(u.block=$.pedantic,u.inline=S.pedantic):this.options.gfm&&(u.block=$.gfm,this.options.breaks?u.inline=S.breaks:u.inline=S.gfm),this.tokenizer.rules=u}e.lex=function(t,u){return new e(u).lex(t)},e.lexInline=function(t,u){return new e(u).inlineTokens(t)};var n,r,i,s=e.prototype;return s.lex=function(e){var t;for(e=e.replace(/\r\n|\r/g,"\n"),this.blockTokens(e,this.tokens);t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens},s.blockTokens=function(e,t){var u,n,r,i,s=this;for(void 0===t&&(t=[]),e=this.options.pedantic?e.replace(/\t/g," ").replace(/^ +$/gm,""):e.replace(/^( *)(\t+)/gm,(function(e,t,u){return t+" ".repeat(u.length)}));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(n){return!!(u=n.call({lexer:s},e,t))&&(e=e.substring(u.raw.length),t.push(u),!0)}))))if(u=this.tokenizer.space(e))e=e.substring(u.raw.length),1===u.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(u);else if(u=this.tokenizer.code(e))e=e.substring(u.raw.length),!(n=t[t.length-1])||"paragraph"!==n.type&&"text"!==n.type?t.push(u):(n.raw+="\n"+u.raw,n.text+="\n"+u.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(u=this.tokenizer.fences(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.heading(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.hr(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.blockquote(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.list(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.html(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.def(e))e=e.substring(u.raw.length),!(n=t[t.length-1])||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[u.tag]||(this.tokens.links[u.tag]={href:u.href,title:u.title}):(n.raw+="\n"+u.raw,n.text+="\n"+u.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(u=this.tokenizer.table(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.lheading(e))e=e.substring(u.raw.length),t.push(u);else if(r=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,u=e.slice(1),n=void 0;s.options.extensions.startBlock.forEach((function(e){"number"==typeof(n=e.call({lexer:this},u))&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),this.state.top&&(u=this.tokenizer.paragraph(r)))n=t[t.length-1],i&&"paragraph"===n.type?(n.raw+="\n"+u.raw,n.text+="\n"+u.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(u),i=r.length!==e.length,e=e.substring(u.raw.length);else if(u=this.tokenizer.text(e))e=e.substring(u.raw.length),(n=t[t.length-1])&&"text"===n.type?(n.raw+="\n"+u.raw,n.text+="\n"+u.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(u);else if(e){var a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}throw new Error(a)}return this.state.top=!0,t},s.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},s.inlineTokens=function(e,t){var u,n,r,i=this;void 0===t&&(t=[]);var s,a,l,o=e;if(this.tokens.links){var D=Object.keys(this.tokens.links);if(D.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(o));)D.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,s.index)+"["+y("a",s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(o));)o=o.slice(0,s.index)+"["+y("a",s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(o));)o=o.slice(0,s.index+s[0].length-2)+"++"+o.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex),this.tokenizer.rules.inline.escapedEmSt.lastIndex--;for(;e;)if(a||(l=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(n){return!!(u=n.call({lexer:i},e,t))&&(e=e.substring(u.raw.length),t.push(u),!0)}))))if(u=this.tokenizer.escape(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.tag(e))e=e.substring(u.raw.length),(n=t[t.length-1])&&"text"===u.type&&"text"===n.type?(n.raw+=u.raw,n.text+=u.text):t.push(u);else if(u=this.tokenizer.link(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(u.raw.length),(n=t[t.length-1])&&"text"===u.type&&"text"===n.type?(n.raw+=u.raw,n.text+=u.text):t.push(u);else if(u=this.tokenizer.emStrong(e,o,l))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.codespan(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.br(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.del(e))e=e.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.autolink(e,R))e=e.substring(u.raw.length),t.push(u);else if(this.state.inLink||!(u=this.tokenizer.url(e,R))){if(r=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,u=e.slice(1),n=void 0;i.options.extensions.startInline.forEach((function(e){"number"==typeof(n=e.call({lexer:this},u))&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),u=this.tokenizer.inlineText(r,T))e=e.substring(u.raw.length),"_"!==u.raw.slice(-1)&&(l=u.raw.slice(-1)),a=!0,(n=t[t.length-1])&&"text"===n.type?(n.raw+=u.raw,n.text+=u.text):t.push(u);else if(e){var c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}throw new Error(c)}}else e=e.substring(u.raw.length),t.push(u);return t},n=e,i=[{key:"rules",get:function(){return{block:$,inline:S}}}],(r=null)&&u(n.prototype,r),i&&u(n,i),Object.defineProperty(n,"prototype",{writable:!1}),e}(),O=function(){function e(e){this.options=e||t.defaults}var u=e.prototype;return u.code=function(e,t,u){var n=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,n);null!=r&&r!==e&&(u=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",n?'<pre><code class="'+this.options.langPrefix+p(n)+'">'+(u?e:p(e,!0))+"</code></pre>\n":"<pre><code>"+(u?e:p(e,!0))+"</code></pre>\n"},u.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},u.html=function(e){return e},u.heading=function(e,t,u,n){return this.options.headerIds?"<h"+t+' id="'+(this.options.headerPrefix+n.slug(u))+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},u.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},u.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+"</"+n+">\n"},u.listitem=function(e){return"<li>"+e+"</li>\n"},u.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},u.paragraph=function(e){return"<p>"+e+"</p>\n"},u.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},u.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},u.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+"</"+u+">\n"},u.strong=function(e){return"<strong>"+e+"</strong>"},u.em=function(e){return"<em>"+e+"</em>"},u.codespan=function(e){return"<code>"+e+"</code>"},u.br=function(){return this.options.xhtml?"<br/>":"<br>"},u.del=function(e){return"<del>"+e+"</del>"},u.link=function(e,t,u){if(null===(e=E(this.options.sanitize,this.options.baseUrl,e)))return u;var n='<a href="'+e+'"';return t&&(n+=' title="'+t+'"'),n+=">"+u+"</a>"},u.image=function(e,t,u){if(null===(e=E(this.options.sanitize,this.options.baseUrl,e)))return u;var n='<img src="'+e+'" alt="'+u+'"';return t&&(n+=' title="'+t+'"'),n+=this.options.xhtml?"/>":">"},u.text=function(e){return e},e}(),j=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),q=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u)){n=this.seen[e];do{u=e+"-"+ ++n}while(this.seen.hasOwnProperty(u))}return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});var u=this.serialize(e);return this.getNextSafeSlug(u,t.dryrun)},e}(),Z=function(){function e(e){this.options=e||t.defaults,this.options.renderer=this.options.renderer||new O,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new j,this.slugger=new q}e.parse=function(t,u){return new e(u).parse(t)},e.parseInline=function(t,u){return new e(u).parseInline(t)};var u=e.prototype;return u.parse=function(e,t){void 0===t&&(t=!0);var u,n,r,i,s,a,l,o,D,c,h,p,f,d,F,k,A,E,C,m="",x=e.length;for(u=0;u<x;u++)if(c=e[u],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[c.type])||!1===(C=this.options.extensions.renderers[c.type].call({parser:this},c))&&["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(c.type))switch(c.type){case"space":continue;case"hr":m+=this.renderer.hr();continue;case"heading":m+=this.renderer.heading(this.parseInline(c.tokens),c.depth,g(this.parseInline(c.tokens,this.textRenderer)),this.slugger);continue;case"code":m+=this.renderer.code(c.text,c.lang,c.escaped);continue;case"table":for(o="",l="",i=c.header.length,n=0;n<i;n++)l+=this.renderer.tablecell(this.parseInline(c.header[n].tokens),{header:!0,align:c.align[n]});for(o+=this.renderer.tablerow(l),D="",i=c.rows.length,n=0;n<i;n++){for(l="",s=(a=c.rows[n]).length,r=0;r<s;r++)l+=this.renderer.tablecell(this.parseInline(a[r].tokens),{header:!1,align:c.align[r]});D+=this.renderer.tablerow(l)}m+=this.renderer.table(o,D);continue;case"blockquote":D=this.parse(c.tokens),m+=this.renderer.blockquote(D);continue;case"list":for(h=c.ordered,p=c.start,f=c.loose,i=c.items.length,D="",n=0;n<i;n++)k=(F=c.items[n]).checked,A=F.task,d="",F.task&&(E=this.renderer.checkbox(k),f?F.tokens.length>0&&"paragraph"===F.tokens[0].type?(F.tokens[0].text=E+" "+F.tokens[0].text,F.tokens[0].tokens&&F.tokens[0].tokens.length>0&&"text"===F.tokens[0].tokens[0].type&&(F.tokens[0].tokens[0].text=E+" "+F.tokens[0].tokens[0].text)):F.tokens.unshift({type:"text",text:E}):d+=E),d+=this.parse(F.tokens,f),D+=this.renderer.listitem(d,A,k);m+=this.renderer.list(D,h,p);continue;case"html":m+=this.renderer.html(c.text);continue;case"paragraph":m+=this.renderer.paragraph(this.parseInline(c.tokens));continue;case"text":for(D=c.tokens?this.parseInline(c.tokens):c.text;u+1<x&&"text"===e[u+1].type;)D+="\n"+((c=e[++u]).tokens?this.parseInline(c.tokens):c.text);m+=t?this.renderer.paragraph(D):D;continue;default:var b='Token with "'+c.type+'" type was not found.';if(this.options.silent)return void console.error(b);throw new Error(b)}else m+=C||"";return m},u.parseInline=function(e,t){t=t||this.renderer;var u,n,r,i="",s=e.length;for(u=0;u<s;u++)if(n=e[u],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[n.type])||!1===(r=this.options.extensions.renderers[n.type].call({parser:this},n))&&["escape","html","link","image","strong","em","codespan","br","del","text"].includes(n.type))switch(n.type){case"escape":case"text":i+=t.text(n.text);break;case"html":i+=t.html(n.text);break;case"link":i+=t.link(n.href,n.title,this.parseInline(n.tokens,t));break;case"image":i+=t.image(n.href,n.title,n.text);break;case"strong":i+=t.strong(this.parseInline(n.tokens,t));break;case"em":i+=t.em(this.parseInline(n.tokens,t));break;case"codespan":i+=t.codespan(n.text);break;case"br":i+=t.br();break;case"del":i+=t.del(this.parseInline(n.tokens,t));break;default:var a='Token with "'+n.type+'" type was not found.';if(this.options.silent)return void console.error(a);throw new Error(a)}else i+=r||"";return i},e}(),L=function(){function e(e){this.options=e||t.defaults}var u=e.prototype;return u.preprocess=function(e){return e},u.postprocess=function(e){return e},e}();function P(e,t){return function(u,r,i){"function"==typeof r&&(i=r,r=null);var s=n({},r),a=function(e,t,u){return function(n){if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){var r="<p>An error occurred:</p><pre>"+p(n.message+"",!0)+"</pre>";return t?Promise.resolve(r):u?void u(null,r):r}if(t)return Promise.reject(n);if(!u)throw n;u(n)}}((r=n({},M.defaults,s)).silent,r.async,i);if(null==u)return a(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof u)return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(u)+", string expected"));if(function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}(r),r.hooks&&(r.hooks.options=r),i){var l,o=r.highlight;try{r.hooks&&(u=r.hooks.preprocess(u)),l=e(u,r)}catch(g){return a(g)}var D=function(e){var u;if(!e)try{r.walkTokens&&M.walkTokens(l,r.walkTokens),u=t(l,r),r.hooks&&(u=r.hooks.postprocess(u))}catch(g){e=g}return r.highlight=o,e?a(e):i(null,u)};if(!o||o.length<3)return D();if(delete r.highlight,!l.length)return D();var c=0;return M.walkTokens(l,(function(e){"code"===e.type&&(c++,setTimeout((function(){o(e.text,e.lang,(function(t,u){if(t)return D(t);null!=u&&u!==e.text&&(e.text=u,e.escaped=!0),0===--c&&D()}))}),0))})),void(0===c&&D())}if(r.async)return Promise.resolve(r.hooks?r.hooks.preprocess(u):u).then((function(t){return e(t,r)})).then((function(e){return r.walkTokens?Promise.all(M.walkTokens(e,r.walkTokens)).then((function(){return e})):e})).then((function(e){return t(e,r)})).then((function(e){return r.hooks?r.hooks.postprocess(e):e})).catch(a);try{r.hooks&&(u=r.hooks.preprocess(u));var h=e(u,r);r.walkTokens&&M.walkTokens(h,r.walkTokens);var f=t(h,r);return r.hooks&&(f=r.hooks.postprocess(f)),f}catch(g){return a(g)}}}function M(e,t,u){return P(I.lex,Z.parse)(e,t,u)}L.passThroughHooks=new Set(["preprocess","postprocess"]),M.options=M.setOptions=function(e){var u;return M.defaults=n({},M.defaults,e),u=M.defaults,t.defaults=u,M},M.getDefaults=s,M.defaults=t.defaults,M.use=function(){for(var e=M.defaults.extensions||{renderers:{},childTokens:{}},t=arguments.length,u=new Array(t),r=0;r<t;r++)u[r]=arguments[r];u.forEach((function(t){var u=n({},t);if(u.async=M.defaults.async||u.async||!1,t.extensions&&(t.extensions.forEach((function(t){if(!t.name)throw new Error("extension name required");if(t.renderer){var u=e.renderers[t.name];e.renderers[t.name]=u?function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var i=t.renderer.apply(this,n);return!1===i&&(i=u.apply(this,n)),i}:t.renderer}if(t.tokenizer){if(!t.level||"block"!==t.level&&"inline"!==t.level)throw new Error("extension level must be 'block' or 'inline'");e[t.level]?e[t.level].unshift(t.tokenizer):e[t.level]=[t.tokenizer],t.start&&("block"===t.level?e.startBlock?e.startBlock.push(t.start):e.startBlock=[t.start]:"inline"===t.level&&(e.startInline?e.startInline.push(t.start):e.startInline=[t.start]))}t.childTokens&&(e.childTokens[t.name]=t.childTokens)})),u.extensions=e),t.renderer&&function(){var e=M.defaults.renderer||new O,n=function(u){var n=e[u];e[u]=function(){for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];var a=t.renderer[u].apply(e,i);return!1===a&&(a=n.apply(e,i)),a}};for(var r in t.renderer)n(r);u.renderer=e}(),t.tokenizer&&function(){var e=M.defaults.tokenizer||new z,n=function(u){var n=e[u];e[u]=function(){for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];var a=t.tokenizer[u].apply(e,i);return!1===a&&(a=n.apply(e,i)),a}};for(var r in t.tokenizer)n(r);u.tokenizer=e}(),t.hooks&&function(){var e=M.defaults.hooks||new L,n=function(u){var n=e[u];L.passThroughHooks.has(u)?e[u]=function(r){if(M.defaults.async)return Promise.resolve(t.hooks[u].call(e,r)).then((function(t){return n.call(e,t)}));var i=t.hooks[u].call(e,r);return n.call(e,i)}:e[u]=function(){for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];var a=t.hooks[u].apply(e,i);return!1===a&&(a=n.apply(e,i)),a}};for(var r in t.hooks)n(r);u.hooks=e}(),t.walkTokens){var r=M.defaults.walkTokens;u.walkTokens=function(e){var u=[];return u.push(t.walkTokens.call(this,e)),r&&(u=u.concat(r.call(this,e))),u}}M.setOptions(u)}))},M.walkTokens=function(e,t){for(var u,n=[],r=function(){var e=u.value;switch(n=n.concat(t.call(M,e)),e.type){case"table":for(var r,s=i(e.header);!(r=s()).done;){var a=r.value;n=n.concat(M.walkTokens(a.tokens,t))}for(var l,o=i(e.rows);!(l=o()).done;)for(var D,c=i(l.value);!(D=c()).done;){var h=D.value;n=n.concat(M.walkTokens(h.tokens,t))}break;case"list":n=n.concat(M.walkTokens(e.items,t));break;default:M.defaults.extensions&&M.defaults.extensions.childTokens&&M.defaults.extensions.childTokens[e.type]?M.defaults.extensions.childTokens[e.type].forEach((function(u){n=n.concat(M.walkTokens(e[u],t))})):e.tokens&&(n=n.concat(M.walkTokens(e.tokens,t)))}},s=i(e);!(u=s()).done;)r();return n},M.parseInline=P(I.lexInline,Z.parseInline),M.Parser=Z,M.parser=Z.parse,M.Renderer=O,M.TextRenderer=j,M.Lexer=I,M.lexer=I.lex,M.Tokenizer=z,M.Slugger=q,M.Hooks=L,M.parse=M;var U=M.options,Q=M.setOptions,N=M.use,H=M.walkTokens,X=M.parseInline,V=M,G=Z.parse,J=I.lex;t.Hooks=L,t.Lexer=I,t.Parser=Z,t.Renderer=O,t.Slugger=q,t.TextRenderer=j,t.Tokenizer=z,t.getDefaults=s,t.lexer=J,t.marked=M,t.options=U,t.parse=V,t.parseInline=X,t.parser=G,t.setOptions=Q,t.use=N,t.walkTokens=H}}]); \ No newline at end of file diff --git a/assets/js/976dc663.553bf969.js b/assets/js/976dc663.553bf969.js deleted file mode 100644 index fd41edbdb17..00000000000 --- a/assets/js/976dc663.553bf969.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1109],{70886:e=>{e.exports=JSON.parse('{"label":"life","permalink":"/blog/tags/life","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/976dc663.e191ceae.js b/assets/js/976dc663.e191ceae.js new file mode 100644 index 00000000000..986ff5a3527 --- /dev/null +++ b/assets/js/976dc663.e191ceae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51109],{70886:e=>{e.exports=JSON.parse('{"label":"life","permalink":"/blog/tags/life","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/97878c65.afd1a510.js b/assets/js/97878c65.afd1a510.js new file mode 100644 index 00000000000..99bd8332042 --- /dev/null +++ b/assets/js/97878c65.afd1a510.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10948],{35318:(A,g,I)=>{I.d(g,{Zo:()=>a,kt:()=>o});var C=I(27378);function U(A,g,I){return g in A?Object.defineProperty(A,g,{value:I,enumerable:!0,configurable:!0,writable:!0}):A[g]=I,A}function e(A,g){var I=Object.keys(A);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(A);g&&(C=C.filter((function(g){return Object.getOwnPropertyDescriptor(A,g).enumerable}))),I.push.apply(I,C)}return I}function Q(A){for(var g=1;g<arguments.length;g++){var I=null!=arguments[g]?arguments[g]:{};g%2?e(Object(I),!0).forEach((function(g){U(A,g,I[g])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(I)):e(Object(I)).forEach((function(g){Object.defineProperty(A,g,Object.getOwnPropertyDescriptor(I,g))}))}return A}function F(A,g){if(null==A)return{};var I,C,U=function(A,g){if(null==A)return{};var I,C,U={},e=Object.keys(A);for(C=0;C<e.length;C++)I=e[C],g.indexOf(I)>=0||(U[I]=A[I]);return U}(A,g);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(A);for(C=0;C<e.length;C++)I=e[C],g.indexOf(I)>=0||Object.prototype.propertyIsEnumerable.call(A,I)&&(U[I]=A[I])}return U}var l=C.createContext({}),t=function(A){var g=C.useContext(l),I=g;return A&&(I="function"==typeof A?A(g):Q(Q({},g),A)),I},a=function(A){var g=t(A.components);return C.createElement(l.Provider,{value:g},A.children)},B={inlineCode:"code",wrapper:function(A){var g=A.children;return C.createElement(C.Fragment,{},g)}},n=C.forwardRef((function(A,g){var I=A.components,U=A.mdxType,e=A.originalType,l=A.parentName,a=F(A,["components","mdxType","originalType","parentName"]),n=t(I),o=U,E=n["".concat(l,".").concat(o)]||n[o]||B[o]||e;return I?C.createElement(E,Q(Q({ref:g},a),{},{components:I})):C.createElement(E,Q({ref:g},a))}));function o(A,g){var I=arguments,U=g&&g.mdxType;if("string"==typeof A||U){var e=I.length,Q=new Array(e);Q[0]=n;var F={};for(var l in g)hasOwnProperty.call(g,l)&&(F[l]=g[l]);F.originalType=A,F.mdxType="string"==typeof A?A:U,Q[1]=F;for(var t=2;t<e;t++)Q[t]=I[t];return C.createElement.apply(null,Q)}return C.createElement.apply(null,I)}n.displayName="MDXCreateElement"},3580:(A,g,I)=>{I.d(g,{Z:()=>a});var C,U,e,Q,F,l=I(27378);function t(){return t=Object.assign?Object.assign.bind():function(A){for(var g=1;g<arguments.length;g++){var I=arguments[g];for(var C in I)Object.prototype.hasOwnProperty.call(I,C)&&(A[C]=I[C])}return A},t.apply(this,arguments)}const a=A=>{let{title:g,titleId:I,...a}=A;return l.createElement("svg",t({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 326 100",role:"img","aria-labelledby":I},a),g?l.createElement("title",{id:I},g):null,C||(C=l.createElement("path",{fill:"currentColor",d:"M206.776 22.102c-15.275 0-27.655 12.49-27.655 27.9 0 15.41 12.38 27.9 27.655 27.9s27.656-12.49 27.656-27.9c0-15.41-12.381-27.9-27.656-27.9Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072Zm91.569-44.972c-15.275 0-27.656 12.49-27.656 27.9 0 15.41 12.381 27.9 27.656 27.9 15.274 0 27.655-12.49 27.655-27.9 0-15.41-12.381-27.9-27.655-27.9Zm0 44.972c-9.353 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.339 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072ZM117.07 22.102c-15.275 0-27.655 12.49-27.655 27.9v50h10.732V72.035c4.677 3.663 10.545 5.866 16.923 5.866 15.275 0 27.656-12.49 27.656-27.9 0-15.409-12.381-27.899-27.656-27.899Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.57 17.072-16.923 17.072ZM252.346.002h-10.733v54.366c0 13.003 10.452 23.533 23.328 23.533V67.074c-6.954 0-12.595-5.69-12.595-12.706V27.523h12.595V16.695h-12.595V.002Zm-76.428 22.1c-12.889 0-23.327 10.544-23.327 23.534V77.9h10.732V45.636c0-7.016 5.641-12.706 12.595-12.706V22.102Z"})),l.createElement("mask",{id:"a",width:67,height:68,x:0,y:16,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=l.createElement("path",{fill:"#fff",d:"m66.744 63.6-4.61-14.774a21.975 21.975 0 0 1 0-13.139l4.69-15.044c.804-2.569-1.594-4.988-4.14-4.177l-14.913 4.73a21.421 21.421 0 0 1-13.024 0l-14.645-4.65c-2.6-.824-5.011 1.704-4.1 4.286l2.68 7.623a22.06 22.06 0 0 1-1.233 17.451L.392 78.82c-1.514 2.92 1.648 6.056 4.516 4.461L35.94 66.047a21.553 21.553 0 0 1 17.713-1.46l8.843 3.15c2.56.919 5.065-1.528 4.248-4.137Z"}))),l.createElement("g",{mask:"url(#a)"},l.createElement("mask",{id:"b",width:81,height:82,x:-7,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},e||(e=l.createElement("path",{fill:"#fff",d:"M73.684 9.545H-6.709v80.914h80.393V9.545Z"}))),Q||(Q=l.createElement("g",{mask:"url(#b)"},l.createElement("path",{fill:"url(#c)",d:"M-6.963 9.215h81.037v81.752H-6.963z"})))),F||(F=l.createElement("defs",null,l.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},l.createElement("use",{xlinkHref:"#d",transform:"scale(.00794 .00806)"})),l.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1Qmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozMzoyMS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjMzOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzM6MjEtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xNjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFCQUJBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FPOCtkdk5lcTZKZlc2V1hwU0k4UmFTSyYjeEE7VlMyL0lnSDRTcHpiOW5hSEhtaVRLK2ZSek1HbTQ0RW9XVDh3WnRIL0FDNTFMemhySVc0K3FGMmp0NGdJNmt1c1VVVmZpcHlrWWI3NyYjeEE7SEtkZHBvUXpjRU80T0puL0FIZCtTVVJmbUw1KzBEVmROaTg5NlBZMjJuYTBzdjFPZlRKWlpaTGVhS0l6ZWhjckpzek1xa2NvL2hybSYjeEE7TDRjU1BTZVRqK0pJSDFEbWwybS9tdCtZK3NycE5scGVqYVltc2VZb3BkVDB4TGlhWXdXdWx4MFZKTHNvT1R5U09kaEgycFVlRWppaSYjeEE7THNtaDk3RVpaR3FBcy9jeHJ6ZjVxODErWmZNSGxuUTUxZzBIem5vbXVtMm5uaUgxcTFCbXRmVmhualY2Y2xkUDJXeWNJaUlKNXhJWSYjeEE7VGtaRURsSUZtTjMrWXY1azNjbXZYM2xyUjlQdTlDOHIzRTFsZnRleXl4WGQ1TlpMVzYrckxHREdnQit6ejYvZ0t4amp0WjNMWWNrdCYjeEE7Nkd3ZWkrWE5jdGRlMERUdGF0VlpMZlVyZUs2alIvdEtKVURjVzkxclE1VEtOR202TXJGcGprV1RzVmVZdDUvOHl2ZXBZeE5iZ1N6aSYjeEE7TkxyMHlXNHMvRUg3WEdsUGJPbS9rdkNJOFo0dGh5dnljL05vK0VXOU96bVhBZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjViL09uL25KWHo3NUkvTXpXZkwraUhUN3pUb0k3Y1JKZFFNN3dTU1FJNzhYaWxqNUhrMWZqclRwVEZYcDMvS3p2TXVtZiYjeEE7bEg1UzEyVzNoMXZ6WjVyYXl0TENGQ0xlM2E3MUZHbGo5VWl2Qlk0MVBPbmNkdW9WUzdVZnpxODVlVERyZGg1LzBheU9wMk9sTnJHbCYjeEE7WEdqeXl0YVhTQ1pMY3dONjYrcEc2eVNyeWFsS1YyNlZWVmJmOHdQenExUFZaUExHbGFMb2llWk5IdElidnpMUGR6WElzbzN2SGQ3VyYjeEE7MXR4SHlrYVEyNkRrNVBIbnk3QVZWWXhwbm5EVy9PdjVxK1VOYnNuSGwyOHNkTTFDUHpGWnl4aTYrQ3h2NGt2TFZHMnA2Z1g0WkFLaiYjeEE7NTRxbS93RHl1djhBTWxQTGEvbUxONWQwOWZ5NWVaZjNJbmwvVEMyYlRlZ0xvclQwQ0N4RGNCdjlIeFlxOVVsOG9XTjVxTTk3cVRtNyYjeEE7TWgvZHhib2lKMFZkalUwSHZtZkhYeWhBUmg2YWRnZGZJWXhDQTRRT2ZteFQ4NXZLY3N2NVJhOW8zbDNUNUo3bTVlMmtpczdjUEk3cyYjeEE7THVCbktyVmpzaVYyOE1yR29sUElKVExyTlVaVGllcFZiUDhBSnExRjlGZGF0NWcxUFhCWTI4MXRvME4rOGJMYWllTXhOSjhDcDZzZyYjeEE7UTBETi9TbFJ6ZHdBWUREM2tsVnV2eWhzVzBueTdCWWF2ZWFackhsbTNGcHArczJ2QVN0RnhDdWtzYkJrZFc0MTQrT0l6Ym5iWXFjTyYjeEE7dzMzQ0gvNVVob2Y2Rk52K2xMLzlQRytYVlQ1bE1nTjc5Y1ZTaXYwNGNBcDQrblNsUGZmSHh6ZkxidVh3QlhQZnZkcS81TDIxNWU2ayYjeEE7OWo1aDFMU3RPMTEvVjE3VExSb3hEY3lzQXNzaThsSmlhWUQ5NXgrMTh0c1JtcnB5VTRiNjgyZmFacHRscGVuV3VtMkVRZ3NyT0pJTCYjeEE7YUZhMFdPTlFxcnZ2c0JsUk5tMjBDaFNKd0pRMnBXczExWXpXMFV2b1BNdkQxYWNxQS9hMnFPMldZWmlNaElpNmJzR1FRbUpFWFhSSyYjeEE7YmZ5TDVjamlWWkxjenlMdVpuZGcxZXY3SlVETXVYYWVZblkwM1o5ZGt5R3pzbitZRGh1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdU5hR2hvZXhPNHJpcnhueTcvemk1NUdqdXIzVnZPVHllYk5mMUtaN2k4dXB5OXZBSkpYNXQ2VU1UMUcvd0RNN2UxTyYjeEE7bUtvbjgyUHl5aHV2S3ZranluNWJ0YnV6MHF3OHhXVHRKcDd1WjdLMldLNTVYQ1N2NmpKNmJ5QWgyclEweFZWdlArY2ZkUDFQVDlkRyYjeEE7dStZZFExblc5YnRZOVA4QTB6ZCtrWHRyU0taSnhGQkVpcEd2SjR3V1BmMjNxcW5YbS84QUtaTlo4eE41bDBUWDcveXhyZHhiaXkxRyYjeEE7NTA4b1Z1WUYrd0pJNUFSelQ5aHh1UHVvcWhyTDhqUExHbG55ekxvbDVlYWRkZVczZXR5cnJJOTlEY1NDUzdodmVhMGtFNUJxUlRqWCYjeEE7YnRSVkxFLzV4MjBaZU9sTjVnMVIvSkNYUXZJL0tCa1EyWWNTZXFJaTVYMURDSlBpOU92MDEzeFYvOWs9PC94bXBHSW1nOmltYWdlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L3htcDpUaHVtYm5haWxzPgogICAgICAgICA8eG1wTU06UmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwveG1wTU06UmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjczNzkyNDVjLWMyNDctNGFlMi05OTM1LTk0ZjM4NGJkYjMzNjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3Mzc5MjQ1Yy1jMjQ3LTRhZTItOTkzNS05NGYzODRiZGIzMzY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OGE0ODVjMDgtOTQ4Yi00OWUzLTkyYWItNTk5NWRiODI0YjBhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjhhNDg1YzA4LTk0OGItNDllMy05MmFiLTU5OTVkYjgyNGIwYTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpyZW5kaXRpb25DbGFzcz5kZWZhdWx0PC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzM3OTI0NWMtYzI0Ny00YWUyLTk5MzUtOTRmMzg0YmRiMzM2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjMzOjIxLTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAEP/uAA5BZG9iZQBkwAAAAAH/wAARCAB8AH4DABEAAREBAhEB/8QBogABAAECBwEAAAAAAAAAAAAACgkFCAABAgMEBgcLAQACAgIBBQAAAAAAAAAAAAAACQcIBAUCAQMGCgsQAAAEAQIDBAWMAwAAAAAAAAECAwQFAAYHEhMIERUxCRQWIUIKFxgZGiIjJCUmJygpKjIzNDU2Nzg5OkFDREVGR0hJSlFSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+hEAAQIDAwICBwWJAAAAAAAAAQIDAAQRBQYhBxITMQgVFiJBUWEUI0KDkQkKFxgZGiQlJicoKSoyMzQ1Njc4OTpDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanFyc3R1dnd4eXqBgoSFhoeIiYqSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwB/EiCMSIIxIgiGOt71sGcqE6InQPoWxpzA4dBCCyn/ADkha4t4nFIs4QUB1NaHvUFBUZwqGt1ykenIJF1ndOgNImia1i9Go6ZErKcslq/97mETE1MHOk2HBVtttJGbMLSRRTi1AloGqEt5rmvKWNDme4VzpZUqm3LUQFuLxaQoVSlIOCyDpqJGug1ATRWJUM2IsZXSESwoRtmlzEdhQi4+h/Wv60XQzqCM36J8ffQ1CnKWDTqUTnbC6ieoUzdFKPkfrsEQFuUSg1VQEgielEKopTxdeTInkwvXnLtKyZZuaVTb2XBl3KiuJLJQFnXjXRErrrta5qc3xW0rrWDaFVPSzaXDuJGuHpuu0B09iDXDZCl+lD60rgBUGtFehZk8zmOUPInqACaSE1ZyLaimMoaM5NLSWZ5V1vLqHVc5651r7LNanW+m1JmGB06ABLbM52kI8AtDJ2E1VZ0xhsEuD19PYNwfAi+uZdbUrMU+G6SzGi5NiBLHqgKsp6uDzLcNjpETUOmqrOQkOh6leRUKU6S6qahq8pTGMU4Fr1buQfKzd90omLFm5hsUoqVAmkqBJAIDBWsYg1CkJUBQkAEE+GTV27alFUcYWobNGvg9y1O6geYj0eN1oKgRNtMVI5RmoWw0bDxiqSDmfk2AeuofSqmI6YMCxMz6IEXqBypAgmoZU5RKQDGt0vF5DJtlDtRWbZ9hWu6NF0MlMo/mpXhVK16HmIIqCrPUkJBqqgxjXps+fXway6cacGKpXamlB2GLNaJ9pRqz7M1JZvMVrOWirFikXqNhbFea83SuESgBEXsanG1bxJNNZU1cVVrDXhKUpjV4hSAecrpaiPlJtxaXLwrlbHkqiuiLD71DplLTCigkDEpcfaNSBs83NbsOcOL2a2NqandBhupER2UUbSi1oieiazCZaM2qFcMVIukKsCYhHJxqJOCgQxFI3OArtogdJMBqarRk0XTMYTAemAgks5dHUR8mVhLTMW6qatibBBo6vQmAU41DTOaogng5LjriCAAU0zgrJFlMNcHVUdrgN0HwYj/npRBn5REfkik/Z5zpnpEEqqCDudEeicdWakXEgqpNDRJ05tUQNUiBU0qQgAQoAFcUACyFhXau7dmWMpdyRk5CWNKpl2W2gqlaFWYlOccTiqpxJrUmoW0IFEAAbSOkjLfiMdQxjv8AQyoq0QKDs6mM8qHM5ojNmOsTkEVmate0foFGvMwi8OVBRjFocsAjToOE1Exs64DAAh45eu592772O5Yd6JRqbs5waShryDym2sUW2sbBaCFbCtCQewpIUKK0oVFWVK0NCa0tQihE/wBq2QhcebLqQGekCQOJ0oROhgi3UeFaAoqsvYVEUHCbpoJzHOCKwEOYyhDjJQWWDJnOZKr6PXbeWp6zlJD0q6Ri4wsqCc6gA0RBSptygAKklQASpMa9xGYrN2Ef/9B/EiCMSIIxIggg8air6PxiLR2JqVaJRqJPotEFq4Qqz6IulXjtWuETCFUXWMNvERt8nWyEnL2bJM2dKDNlWGkNoGyQhISkdgAAi4bMu3LsoYaFG0JCRtAkUHhBFLEJZYMdVJjaMEuYMY60xxzhLuCMNwRxThLvJjWvCOCpicshMal8RT1Qs5ZKI0cwKxTlAlkpMaN9McI4SyEmNS6mOKYJd4GNe4mNkQlzBjEUmNsQlyBjslMTNWh7jsUTnTRqmxa0c0FcwCa0eFmcxzJpRRlEYjDyum5BNU0DuGj8SLCUoGVBJKmEQTKAUY1NuzpRVkWDa2YBPpmZhnOFKltSELzVHTICkVTU0TnLpwca4U0mgBj/0X8SIIxIgjEiCCn0cKHTihTRcogUPl0qinNucj5CGhXnGqwF4JYnNx1XKru1S2uQB62VpTqqHLT1xjGEBEXCXAvO1fG5dm3lbOcqalUFelg8nXH04BI115C01CUg0qABQC3VgT6bYsaWtJJqXWgVbRY11Y0gMFhQ0hpaQjykSy8xrG1LcbRiy5gxjrbjjnLLuJMYLqI4ahZd9JjVvIjgqFlkJMah9EU9UtnLJQY0j6N1jgKFlkJMaZ9EcI5ZZCTGpdRHFMWXdBjXOIjYMWXcBjDWiNoSy51jsFET1WiJoaKQqYlE2is9STA87Y/DZoQQTgarkh01Gyz+KuUhpAJarEolHk0hu8JhUh43dKAAJ11amnepM5eKybnME0kpZcy7TSK5hQQ2k7HOQhlStIDNeGJxCdXOHXggbAR//9J/EiCMSIIxIgiFq0oVDUWM7Jg0VWSB7VpwwpxM6OKFFMEUopA1FIjBllCiAKmcxKGxBwnXgJiAnDwrwKNvPe3USb1CYsa0rnvqGiyzyZloY1LboCHQNhmoWhB2Bq8dMcGz3kgtIPyczYzh19pYdRsyleuq2lEqSk7Oq9jsIqRTziVws6JmLMbRiS5hUYzjMcU5Jd1KowHWo4ahJd9Ko1TzUcBQkshCo0z7UU9UlnLJQqNJMNRwFCSyUqjTPtRwTkl30mNS83HFMSXeCo1zjUbJiS7gVGGtuNoSS5gxjqbhedZmoYmoOUBKFtDldOpRCb81mqscSBRZUic5Y6u4nFOciR3FcsKBJwxd0CdeUlcSuACkCuKCVMq17BfjKLa96GznS0zOKDRoASw0EssEgYV0FtuuJxrio4nxh9eiOqWNInwmwj//038SIIxIgjEiCLLbSAwFhGKy/PN88TqjibMXmbHIUakRNUX686YXNtRSvVSUUTr4XOBySvTMme71cJhIJyGnbUbrRmZHK1Iy7Bo1NsTLTmJxQJdx8DAgHbxlBooEYVpnAESPkoedRfeWYb4MfbeQrTxSGlObA8pNpONRhpVoQeYUs4kzALi2qpbCNg6UuYXGI5LxxTp5xLvJVGteYjgqJyyEqjUPsRT1U7OWShUaWYZinqp2cslCo0kwzFPUTlkpVGkfZjhHTziWQlUal1mOKZOXdCo17jMbBk5dwKjDWzFy1Y6oYGosVpGhZNdROnhbScSE6o+IqLIp2CTQKacL1sos2vMJWJmh5GZDEEpgUcFu8TAZYqy33tFzsltr2sk0m1ypl2cATosztylQCtdOh55dINRmoOCuDTrLQpLyq3NjSg6acPqwsKScY8Mj/9R/EiCMSIIxIgiw20iU7m0EoBHmyLupvp9TngkNSZEI3UUdQ+COSzjfLnBYQVSaNHcMagZRKvOCqqRBu4c9dYjUZbFdn8o4tbMrL2fKOrKiVAJW6nQEAUwKlJW5QKwzUrUNeSImTIdY7lo3y23BFWJOWcWVY0CnBoSRhgVKCl0CsKJUdMCIGzI5xJiQci3a5SmwjinRziXdSuNe9LRw1ErO3S76Vxqn5aOAqlLJQuNM/LxT1U84lkoVGkmGIpyqecSyUKjRzDEU9ROzlkpVGkfY044R084lkJVGpdYjiHTziXdCo1zjEbIpy7gVGIpiJgrRGzKTXnZRiohLIrEVg03puTNhy5kHINnCc5Yk8jcZSSc1YjQ6zM002AqEFNRQpVyCBkymEFKS6mjbym7GsO7SFJKH5l+ZWKpzklhCWmiU0KqK20OgHOSklChRRFUeI3nOhoaZ5SJVugAG61O6bpORJf0eIR//1X8SIIxIgjEiCIBa2jRmJRhoruGkHcnWmbMEjqbc3hAwCg/fVcozij6RSmUKBYo+bkRSOU1cqzZoHEpTGMUGO5Cbim5FzkvTyQm3LRKX3tmhFNuWTpcI0KKlAiqXHHE1IAJv3keuCu6V0kPTyM22Z/Ned2aE025aOlihJKlAjXXHHE1IAJs5OjnEpwSuJKelY4aiOcS76Vxq3pWOColnEshC40z8tTYRT1UrO3SyULjSzEvSKcqlZyykLjRTEvFNVSllIXGimJeKeonZ26WSlUaN9jTjgnTlkJVGoeYjimTl3QqNe4xGyKcu5nRiFiJqrRIzhRGHUapoqCgm4QezNnG0CmPaw6RdoR2GREaSupAQYHYtbfX14mc5wEqHamfZi9tVg20nOLam5lhXKKSksuIx06rC3OwIjwK+ksW1S7w0iFJO0pmkbrU7pEyMqOx4NH//1n8SIIxIgi1qte0XRoT0IorYa6qE655AtNiblTPSuG1rSBrF4wnXCByWFQ0xqRQMAOlUa+zlLuRW5WtjfVnbUjOseRo+/UYKzTt22dgdEXSo2LaV7KJiyIXGN9r7NCZRnWNIUmH6jXVZp26aOw28XSo2LaXNlEAh0s4kx5K4Yu7LbSOIdLOJd5K41rsttI4SiVnbpZCVxqn5aOAqlLIQuNLMS1IpyqVnLKQuNHMy+nFMVSs5ZSFxoJmXimqp5xLLQqNBMsbSKcqnLJQqNHMMxwVE5ZCVRp3mI4hk5d4KjWuMxsinLuBUYimYvLrAtEG5vK07MSrr1CFz4teodxSuJTnWtpiJWAoJ166BCVSeDKG05hp65MDVxRNS10GakbdrWmyTWjoac6bs/MnW8aAaAToxOBOEst+gFNepUgVjxu9Vn7arEdKRr7VHB2Lwd4YVQmKSp4haP//XfxIgjEiCIB61TRdUowUV4u/YvDuJozbMpNyaCZFRO0VYM1TFexpEgCCRjzgiBTuCq0pVRa1BM9fUi1zHMkFy03JucxLTDYTbU0A/MkjXgtQ11onToyiiCmpSHNEUng81aLkWyeJuHcaXlZpsIt6cAfmiRrwWsa4ydjtwiiCmpSHNFWmmea20GTs7dKVguJRcYjjHSl3UrjXuy8cJRLOJd9K41T8vFPVSziWShcaSYl6DSimKp2dulloXGgmWNpFMWTs5ZSFR4/MsRTFU7OWWhUePzLG6RTVU7OWUhUaGYZinqElkpVGlfajiHJLvpVGrdajYMSXcCoxFtxvsnTqHPWkQYrHbPWDlB6zcp1wKN3TVUi7ddMRAQA6SqYGC3WYS7b7LM0wuWmEhbDiClSTpFKhRQO0IJEdlTKVpKFCqSKHphhblCqe6NEqhpMOf6JUU7a+acCjy7dvTVFm+iMOQXiLAlOdUwWHvzKoDXmPXCmN3hsxTDfCwF3VvVaN3FlR2xTjrIKtNSELIQs0A4PRmq0hp6Q0hXG0ZQyE+9Jmu3Tik47EA4HsIoewx/9B/EiCLQK2XRiPQyoZKQGDuCpTqogEfQJkYphBeHwMW1Tj8WSEhinSXIg5I3QOAgYirgFC29MZTXkMuQm9d6xaM8kmx7NKHlbJbudVls1wIJSVrGkUozTgqLCajlk6Tfa+gtW0EFVhWSUPrw11x7Oqw0aggpKkqcWMQUozFYLiEASyv7WGXlusbYklyCo7CmqxsHTziXcSqMN1iscNROXfSqNU+xFPVTs5ZKFRpZhjTimLJ2cstCo8fmWNOKUsnZyy0Kjx2aZpWKWsSzt0sxCo8cmmopapLOWWhUePTLWnFOULZyykmNI+3HDOWXfSY1TrcccxZdwGMFaI2xCXKsdkpifC0X1ENScdBacUwHSpDuKG06VBYkIJgMjN+eNrUZaFUKY57vmj7eKGpgpSiUQCurymMZc+pa3ZTZd+5W8bIIatWUGedm9LZrSqbTQVS4oamoJrQgCF8ocgJe1m51PBsw3j08iiT4aUfppf/0X5rrotkVnLlZJu3bpKLuHC6hEkUEUiCoqssqoJU0kkkyiYxjCAFAK8Zc223HXEtNJKnVEAACpJOAAAxJJwAGnHNpp191LLKVLeWoJSlIJUpRNAABiSTgAMSYgDrR1Fk1GKilGpyNVlTzcY0sDmmkoRVKlgUPUVqTsUFSkVRVizpRV0YpygclWAhsAAAMeyX3NFyLosWU8kC1HNvZgih29WBVNRUENpCWwQSDmlQ4OxbNkbuAMnVxpaxX0pFsu7fzRBB2/cAqjOFQQ0kJaBBKTmFQ4ONfB66UiRKdBGKWRWOJQDG2YkuYVHZcbjiKEs5d5Ko1jzUU9UlnbpZKFRpZhmKYsSWUhUaCaZilLJ2csxtUeNzbOnFIXJZyzWzHjE23pxSVi2cs1BjxqaRFNUCWUgxoX0xwThLvpMal1MccwS7oMYK0xtiEudY7BTusS1WihZxA87KMj9Mp7C203ZpNHhgWIVMH76JRhaGlM3FQFFTmbw93SnAhipgBgESicANTLUxn5ZNjWHLqI21rmphScDXMQhoL16lAM5bdRUE1BAOaaRdlMUgSsog8JS4sjDYAJrj00p6b2DD/9Jj9bhotWw9DQsyIU5qc4qI9rMNWqR65VnNNsCdj6xqUTUlitWTYlKcoFVRXcCUaZK3T1kAuZrQXqNvziK2ZZeasVGCphVdBG5dFOkg1SpLdRRcWa1F/J/rUX1N559FbHsbNcFRguaVXQANnoVFPkpNUrQyFCi8YYa6V6oZLSMV0iDNjFlIjppdNjSNvl1EcFYiNg5ZdxJjCdRHBUJZyyEmNQ+3FNWJZyykKjRTLUbkHm1Hp1RVtA5tQaJx6MPT0jSGQhi4iD5c1xCm2bJqKiQgDXmNXUpQt4iAW+XGetWzrHk12har7UtItiqnHFpQgdNUogVOwGmdIR4hbU3IWXKrnbSeal5NA15bighI7CogV2Q0zsIvNmZaOWjZOZkWITniU1ZglVIrU4ZEnq8ajhTlOlUTuG0DRdQlBu4SOYwDa8ZchigU6RRERLBdu6k/cKyZgy1ktTlokEVcQkNNUoahKnSlwqBAHCIIINUrNMa6Xgy5XQlHyxZiJmdoRr6UhtvY1oXClZINBwjCTWoUdj3SO2i3nkmZxbO0WZsxMpWxjNBjU3IrAhWd1MwkQcFYvpxg2bCqAAKpRWMBREamIhSjorP1Lmw1BOrOxptolWvaE+29RNcSnPQxnKpjmnNFcM4aY8KTlvs98AzUg82SccxxLlBsxVLdTtMBtdiLNKJlZArQtDAy60aodxWMwhE4FCPzOLbVQs6YpicXKxYSC0UhjYhiiQTvWzYKcAC4iCac7qZbMml7AluQtNlidUOEMzvjuA1pmjRKNuK2NGlrw6Yqnkkhfi7NsgCWmUIeI4Md27V0zXtdUenVKw6YaWtHlLqY3DsbBpdwRhLEc6DQWLTii0OgMBhzyLxqLvG8OhcLh7dR0+fvnShUW7Vq3SKZRZZZQwAUACWPPT8nZkm7aNoutsSDDZW44shKEISKqUpRwAA0zGI+60w0p99QQ0gElRNAANMk7KEo1jes9LVnqhMjBo6mzGfk6HgzgnouzVK6TbuRJUYXAknhCgVwjA2FcUwkEyQu1VzJmMQxTCrDLjlLRlLvkqes8r1nZRvQZUKGaVJrVx4p3CXV4itFaGlsKAUCBXi9tvC3rULzNdsTYzWwcKjYqpsM49hzQmtCKD//053qOtE57Rcomzkneu4VVhp3R4ZNpucytIxmzD1lU4UgiksUhm9rBTmcqkpS17lwoauATDJl+T26bFy7pytiNpAmggOPkUqt9YBcJIrWlA2k1OuIQK0AhvWS25Etk+uTJ3eaQlM6EByZUKVXMuAF1RIqFZpAbQanbttAqQBHkMvNYkOMwGRHIGMDIgV4WMpdY4RtGCXMRjuCsbSbZd0si2bIquHLhVNBu3QTOsuuuscE0kUUkwMoqqqoYClKUBExhrglyU62y2p11QS0kEkkgAACpJJwAAxJOAEauaU2y0p55SUNISSpRIASAKkknAADEk4CL5aDtYLn3PUYfG6JbhWYE2l6g4NCATIpPV60PSqGStSWTO1m6qqkIhTPAUcInwG1GuEJV+vvqRV3rB0SQuqkWlaqap0SpEqhQwrnAhTwBxo2UoUODXhpxVXKFqR12bDLtnXSSm07VTVOi1pKIUMK54IU+AcduiELHBrw04lToZ0IaHlCGEDBphTcaQZJalM/fGMq8jEUWApQFaJRV2dZ65rzFpip0xUEhEQTIQtuCoF6763mvrO7brxzS31p4MRgltsbJDaQEp2RVQrVTX1KOMUxvTfO8l853bdeGZW+scGpwS22NkhtICU7IqoVKprylHGPSpeKx4vGJEEYkQR4pRKrOlBOi4Vc8/KHU3YtEXBAIePN2xoPOUAIoKyd7igyjCMHImsImBM6x0hExgMUSmMBvPLq5Tr+3LKU3dtOZZlkmugqVorGlQ7cuhbQJGFQkKwFCCARu7NvHbdkUEhMuIaG4Cc5Hciqp7CBXa4Clpj20XtZ6dOlnCM46LMOSVOJyMmc45rHati1wBU0TxCZD56YgV2Kiyhs5ySZWNS2ylstJbclbGdWBipTEwFK2pCJpCa9OpA2keUpym3gCQlTcoojYlC6ndHAN0Ai52g3WX6C1AmmdTDmiiScCqNQcztja6kbnOskNWA6aERd16cIRXTWpFkmCTRFcCEFUhzFAQie/OVq/eULbm8U6o2aFVTLNANMA4UJQnFwgiqVPKcUglWYpIJEeM2veW2Lb12edOgVqEJGajdBwdSmBUVEY0Ii4GUbRoY//9SYCTZId5GJEEYkR1jOzCRHXTFdjGUiOMXV0GqyFRNor2qRd+2tiZmqqpmPHI8gsnEIg2GkMoeAQMSkdvq9NQBIssLZocBGkVOYpiSh+/OWu6dzs+Sl17b7cANGmSChCsaB53g1GINUpz3BhnISCDEB5SdSCuTcTRLOlV6s7xhJoywQW21Y0D72KEYg5yEaI6nDObSFBUSsUI6znQvoMkK5mvBzPJxGbmbuZ1xpQr6OrEUAAWTbqAmk1hjdWurjEapJActcBxOIV8qe30yn3tv0otWs+EWZnVTLtDMaBGkSKlThGwLilUPBubpRQ6/2V6+uUVZatuYDdkhWcmVZBQyCNIqFSpxQ2CnFKoeDc3Sj3WUexGEYkQRiRBGJEEYkQRiRBGJEEYkQRiRBH//VQfWmKB0ToNT+fkbslRmROB04iU04kkk4MzbtnKy6gzecOTpFRLFIQBBLUwOcx29TVuIQKxTJTlAlL83cbU64NX8sgImEEpzipIA0ZKQa6G5WtaABecjYAlrGRTKhJZR7qNKecTrTyjaW5pslIWpSUpG2hKQSS07WudQAOZ6Nwgm3CUoRMkYkQR7rQjrOtE6jKcribEHIzm8VcyDmdUaUMxgaJ0xAFk26gJquomulX1xiNklRIauA4kAa8I+vplOuncZJatZ8rtPNqmXaGe6QdIkVCWwdgXFJqODc7SiLsoGWG5GThBZtyYLlsFAUmVZAW+QdIqFQltJ2CnFJqODQrSiVagzWRKGVCi1SMPm1trPJJJMTxyOoIqMIe5u4ZQ8AgglO0YVyiYCRZYXDslvpFiFMYkqe35y1XrvjnyUuvbBYZJo0ySFrTjQPO4KXgTVKcxs4ZyFEAxQ3KRqQl9r+6JZ0qvVZdxSjRlhRDjicaB97Ba8CaoRobSsM5tRSFRdbKHogaMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSII//1nuzim3N+d0IdwCc8Gh0egr4gFdQ2KNEXjRWkMB0lKmsUwJroKAB0lC0qiShQMQxTAAhn2ZatpWLOotKyX3ZaebOurbUUqFcCKjTBGCkmoUCQQQSDs7Htq1rv2g3a1hzL0paTRqlxpRQoVwIqKVSoYKSapUklKgQSDHNRorHlCaaiUNik33M74cWIvFm54cEYYu2LciaNVAW5n0HdRCmERrhqjhQK4LKvrxGz9xMt18rYW7KWkiSdLTYUF6EtKySaa9mOJRuiB8C42TXUib/AFvuPSNros94sthQc0FaVqJNNezHkt06dbTjug9goV1jOgjCGE3p0xKGRmeD55C4RFytJ2RFu7g7Z44atHhwLCoYwhLR+1BQTFqL0rpIxDCBymtwh4TfDLnf6dmJmyJV1iRl0PON50ugpcUlKlJ4SLW4pCqUOc0W1AiqSMax3fzUkMptoTc5YUk/LWdKtvvNZ8q2pDykJUtA29ccdW2qlDnslpQIBSU4g3noIItkUWzZFJu3bpJoN26CZEkUEUiAmkiikmBU0kkkygUpSgAFAK4JQU44464p11RU6okkk1JJxJJOJJOJJ04ra666+6p55SlvLUVKUokqUompJJxJJxJOJMbsuEcIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCP//Z",id:"d",width:126,height:124}))))}},25132:(A,g,I)=>{I.r(g),I.d(g,{assets:()=>a,contentTitle:()=>l,default:()=>o,frontMatter:()=>F,metadata:()=>t,toc:()=>B});var C=I(25773),U=(I(27378),I(35318)),e=I(76911),Q=I(3580);const F={slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},l=void 0,t={permalink:"/blog/proto",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx",source:"@site/blog/2023-03-09_proto.mdx",title:"Introducing proto, a next-generation toolchain manager!",description:"We are proud to announce the launch of proto, a next-generation toolchain manager for all",date:"2023-03-09T00:00:00.000Z",formattedDate:"March 9, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:1.89,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},prevItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"},nextItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"}},a={image:I(40469).Z,authorsImageUrls:[void 0]},B=[{value:"How to get started?",id:"how-to-get-started",level:2},{value:"Why another version manager?",id:"why-another-version-manager",level:2}],n={toc:B};function o(A){let{components:g,...I}=A;return(0,U.kt)("wrapper",(0,C.Z)({},n,I,{components:g,mdxType:"MDXLayout"}),(0,U.kt)("p",null,"We are proud to announce the launch of ",(0,U.kt)("a",{parentName:"p",href:"/proto"},"proto"),", a next-generation toolchain manager for all\nof your favorite programming languages."),(0,U.kt)("div",{className:"flex justify-center mb-3"},(0,U.kt)(Q.Z,{width:"40%",className:"block",mdxType:"Logo"})),(0,U.kt)("p",null,(0,U.kt)("a",{parentName:"p",href:"/proto"},"proto")," is a Rust based multi-language toolchain manager that will download and install\ntools by version, and immediately make them available on ",(0,U.kt)("inlineCode",{parentName:"p"},"PATH"),". proto is launching with initial\nsupport for ",(0,U.kt)("a",{parentName:"p",href:"https://bun.sh"},"Bun"),", ",(0,U.kt)("a",{parentName:"p",href:"https://deno.land"},"Deno"),", ",(0,U.kt)("a",{parentName:"p",href:"https://nodejs.org"},"Node.js")," (and\nnpm, pnpm, yarn), and ",(0,U.kt)("a",{parentName:"p",href:"https://go.dev"},"Go"),", with more languages on the way!"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-shell"},"proto install node 18\nproto install go 1.20\nproto install deno 1.30\n")),(0,U.kt)("p",null,"Unlike other version managers that pin their global binary to a default version, proto will\n",(0,U.kt)("a",{parentName:"p",href:"/docs/proto/detection"},"contextually detect an applicable version")," from the environment or the\nlanguage's ecosystem (like ",(0,U.kt)("inlineCode",{parentName:"p"},"package.json"),"), ensuring the correct tool is always being ran."),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-shell"},"# Will detect a version before running\nbun run ./script.ts\n")),(0,U.kt)("p",null,"Furthermore, with proto's ",(0,U.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,U.kt)("inlineCode",{parentName:"a"},".prototools"))," file, you can pin versions of all\nrequired tools on a per-project or per-repository basis, allowing for near instant setup of\ndeveloper environments. Perfect for onboarding new developers!"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.12.0"\nyarn = "3.3.0"\n')),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-shell"},"# Install all the things!\nproto use\n")),(0,U.kt)("p",null,"And lastly, ",(0,U.kt)("a",{parentName:"p",href:"/moon"},"moon"),"'s toolchain is built on proto, so if you're using moon, you might as well\nuse proto. This will enable a single toolchain for both tools (in v0.26)!"),(0,U.kt)("div",{class:"flex justify-center"},(0,U.kt)(e.Z,{label:"View documentation",href:"/docs/proto",size:"lg",mdxType:"Button"})),(0,U.kt)("h2",{id:"how-to-get-started"},"How to get started?"),(0,U.kt)("p",null,"In a terminal that supports Bash, run:"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre"},"curl -fsSL https://moonrepo.dev/install/proto.sh | bash\n")),(0,U.kt)("p",null,"In Powershell or Windows Terminal, run:"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre"},"irm https://moonrepo.dev/install/proto.ps1 | iex\n")),(0,U.kt)("p",null,"Jump to the ",(0,U.kt)("a",{parentName:"p",href:"/docs/proto"},"documentation")," for more information on getting started and available\ncommands!"),(0,U.kt)("h2",{id:"why-another-version-manager"},"Why another version manager?"),(0,U.kt)("p",null,"To start, proto powers ",(0,U.kt)("a",{parentName:"p",href:"/moon"},"moon's")," toolchain and integrated developer environment. We believed\nthat moon's toolchain would be extremely beneficial for developers as a whole, and so we extracted\nproto out into a standalone Rust CLI and Rust crates that moon inherits."),(0,U.kt)("p",null,"Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each\nwith different workflows, CLI commands, and configuration files, is a poor developer experience."),(0,U.kt)("p",null,"Our goal is to unify all of these into a single performant interface. A toolchain manager is the\nnext step in the version manager evolution."))}o.isMDXComponent=!0},40469:(A,g,I)=>{I.d(g,{Z:()=>C});const C=I.p+"assets/images/v0-f4d2ad552e3bee8cc7ef8c3e52e2f675.png"}}]); \ No newline at end of file diff --git a/assets/js/97878c65.ce826328.js b/assets/js/97878c65.ce826328.js deleted file mode 100644 index 59dfa6cba50..00000000000 --- a/assets/js/97878c65.ce826328.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[948],{35318:(A,g,I)=>{I.d(g,{Zo:()=>a,kt:()=>o});var C=I(27378);function U(A,g,I){return g in A?Object.defineProperty(A,g,{value:I,enumerable:!0,configurable:!0,writable:!0}):A[g]=I,A}function e(A,g){var I=Object.keys(A);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(A);g&&(C=C.filter((function(g){return Object.getOwnPropertyDescriptor(A,g).enumerable}))),I.push.apply(I,C)}return I}function Q(A){for(var g=1;g<arguments.length;g++){var I=null!=arguments[g]?arguments[g]:{};g%2?e(Object(I),!0).forEach((function(g){U(A,g,I[g])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(I)):e(Object(I)).forEach((function(g){Object.defineProperty(A,g,Object.getOwnPropertyDescriptor(I,g))}))}return A}function F(A,g){if(null==A)return{};var I,C,U=function(A,g){if(null==A)return{};var I,C,U={},e=Object.keys(A);for(C=0;C<e.length;C++)I=e[C],g.indexOf(I)>=0||(U[I]=A[I]);return U}(A,g);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(A);for(C=0;C<e.length;C++)I=e[C],g.indexOf(I)>=0||Object.prototype.propertyIsEnumerable.call(A,I)&&(U[I]=A[I])}return U}var l=C.createContext({}),t=function(A){var g=C.useContext(l),I=g;return A&&(I="function"==typeof A?A(g):Q(Q({},g),A)),I},a=function(A){var g=t(A.components);return C.createElement(l.Provider,{value:g},A.children)},B={inlineCode:"code",wrapper:function(A){var g=A.children;return C.createElement(C.Fragment,{},g)}},n=C.forwardRef((function(A,g){var I=A.components,U=A.mdxType,e=A.originalType,l=A.parentName,a=F(A,["components","mdxType","originalType","parentName"]),n=t(I),o=U,E=n["".concat(l,".").concat(o)]||n[o]||B[o]||e;return I?C.createElement(E,Q(Q({ref:g},a),{},{components:I})):C.createElement(E,Q({ref:g},a))}));function o(A,g){var I=arguments,U=g&&g.mdxType;if("string"==typeof A||U){var e=I.length,Q=new Array(e);Q[0]=n;var F={};for(var l in g)hasOwnProperty.call(g,l)&&(F[l]=g[l]);F.originalType=A,F.mdxType="string"==typeof A?A:U,Q[1]=F;for(var t=2;t<e;t++)Q[t]=I[t];return C.createElement.apply(null,Q)}return C.createElement.apply(null,I)}n.displayName="MDXCreateElement"},3580:(A,g,I)=>{I.d(g,{Z:()=>a});var C,U,e,Q,F,l=I(27378);function t(){return t=Object.assign?Object.assign.bind():function(A){for(var g=1;g<arguments.length;g++){var I=arguments[g];for(var C in I)Object.prototype.hasOwnProperty.call(I,C)&&(A[C]=I[C])}return A},t.apply(this,arguments)}const a=A=>{let{title:g,titleId:I,...a}=A;return l.createElement("svg",t({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 326 100",role:"img","aria-labelledby":I},a),g?l.createElement("title",{id:I},g):null,C||(C=l.createElement("path",{fill:"currentColor",d:"M206.776 22.102c-15.275 0-27.655 12.49-27.655 27.9 0 15.41 12.38 27.9 27.655 27.9s27.656-12.49 27.656-27.9c0-15.41-12.381-27.9-27.656-27.9Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072Zm91.569-44.972c-15.275 0-27.656 12.49-27.656 27.9 0 15.41 12.381 27.9 27.656 27.9 15.274 0 27.655-12.49 27.655-27.9 0-15.41-12.381-27.9-27.655-27.9Zm0 44.972c-9.353 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.339 0 16.923 7.65 16.923 17.072 0 9.435-7.584 17.072-16.923 17.072ZM117.07 22.102c-15.275 0-27.655 12.49-27.655 27.9v50h10.732V72.035c4.677 3.663 10.545 5.866 16.923 5.866 15.275 0 27.656-12.49 27.656-27.9 0-15.409-12.381-27.899-27.656-27.899Zm0 44.972c-9.352 0-16.923-7.65-16.923-17.072 0-9.435 7.584-17.072 16.923-17.072 9.353 0 16.923 7.65 16.923 17.072 0 9.435-7.57 17.072-16.923 17.072ZM252.346.002h-10.733v54.366c0 13.003 10.452 23.533 23.328 23.533V67.074c-6.954 0-12.595-5.69-12.595-12.706V27.523h12.595V16.695h-12.595V.002Zm-76.428 22.1c-12.889 0-23.327 10.544-23.327 23.534V77.9h10.732V45.636c0-7.016 5.641-12.706 12.595-12.706V22.102Z"})),l.createElement("mask",{id:"a",width:67,height:68,x:0,y:16,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},U||(U=l.createElement("path",{fill:"#fff",d:"m66.744 63.6-4.61-14.774a21.975 21.975 0 0 1 0-13.139l4.69-15.044c.804-2.569-1.594-4.988-4.14-4.177l-14.913 4.73a21.421 21.421 0 0 1-13.024 0l-14.645-4.65c-2.6-.824-5.011 1.704-4.1 4.286l2.68 7.623a22.06 22.06 0 0 1-1.233 17.451L.392 78.82c-1.514 2.92 1.648 6.056 4.516 4.461L35.94 66.047a21.553 21.553 0 0 1 17.713-1.46l8.843 3.15c2.56.919 5.065-1.528 4.248-4.137Z"}))),l.createElement("g",{mask:"url(#a)"},l.createElement("mask",{id:"b",width:81,height:82,x:-7,y:9,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},e||(e=l.createElement("path",{fill:"#fff",d:"M73.684 9.545H-6.709v80.914h80.393V9.545Z"}))),Q||(Q=l.createElement("g",{mask:"url(#b)"},l.createElement("path",{fill:"url(#c)",d:"M-6.963 9.215h81.037v81.752H-6.963z"})))),F||(F=l.createElement("defs",null,l.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},l.createElement("use",{xlinkHref:"#d",transform:"scale(.00794 .00806)"})),l.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E1Qmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlByb3RvIC0gTG9nbzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjozMzoyMS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjMzOjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6MzM6MjEtMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD4xNjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFCQUJBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FPOCtkdk5lcTZKZlc2V1hwU0k4UmFTSyYjeEE7VlMyL0lnSDRTcHpiOW5hSEhtaVRLK2ZSek1HbTQ0RW9XVDh3WnRIL0FDNTFMemhySVc0K3FGMmp0NGdJNmt1c1VVVmZpcHlrWWI3NyYjeEE7SEtkZHBvUXpjRU80T0puL0FIZCtTVVJmbUw1KzBEVmROaTg5NlBZMjJuYTBzdjFPZlRKWlpaTGVhS0l6ZWhjckpzek1xa2NvL2hybSYjeEE7TDRjU1BTZVRqK0pJSDFEbWwybS9tdCtZK3NycE5scGVqYVltc2VZb3BkVDB4TGlhWXdXdWx4MFZKTHNvT1R5U09kaEgycFVlRWppaSYjeEE7THNtaDk3RVpaR3FBcy9jeHJ6ZjVxODErWmZNSGxuUTUxZzBIem5vbXVtMm5uaUgxcTFCbXRmVmhualY2Y2xkUDJXeWNJaUlKNXhJWSYjeEE7VGtaRURsSUZtTjMrWXY1azNjbXZYM2xyUjlQdTlDOHIzRTFsZnRleXl4WGQ1TlpMVzYrckxHREdnQit6ejYvZ0t4amp0WjNMWWNrdCYjeEE7Nkd3ZWkrWE5jdGRlMERUdGF0VlpMZlVyZUs2alIvdEtKVURjVzkxclE1VEtOR202TXJGcGprV1RzVmVZdDUvOHl2ZXBZeE5iZ1N6aSYjeEE7TkxyMHlXNHMvRUg3WEdsUGJPbS9rdkNJOFo0dGh5dnljL05vK0VXOU96bVhBZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcjViL09uL25KWHo3NUkvTXpXZkwraUhUN3pUb0k3Y1JKZFFNN3dTU1FJNzhYaWxqNUhrMWZqclRwVEZYcDMvS3p2TXVtZiYjeEE7bEg1UzEyVzNoMXZ6WjVyYXl0TENGQ0xlM2E3MUZHbGo5VWl2Qlk0MVBPbmNkdW9WUzdVZnpxODVlVERyZGg1LzBheU9wMk9sTnJHbCYjeEE7WEdqeXl0YVhTQ1pMY3dONjYrcEc2eVNyeWFsS1YyNlZWVmJmOHdQenExUFZaUExHbGFMb2llWk5IdElidnpMUGR6WElzbzN2SGQ3VyYjeEE7MXR4SHlrYVEyNkRrNVBIbnk3QVZWWXhwbm5EVy9PdjVxK1VOYnNuSGwyOHNkTTFDUHpGWnl4aTYrQ3h2NGt2TFZHMnA2Z1g0WkFLaiYjeEE7NTRxbS93RHl1djhBTWxQTGEvbUxONWQwOWZ5NWVaZjNJbmwvVEMyYlRlZ0xvclQwQ0N4RGNCdjlIeFlxOVVsOG9XTjVxTTk3cVRtNyYjeEE7TWgvZHhib2lKMFZkalUwSHZtZkhYeWhBUmg2YWRnZGZJWXhDQTRRT2ZteFQ4NXZLY3N2NVJhOW8zbDNUNUo3bTVlMmtpczdjUEk3cyYjeEE7THVCbktyVmpzaVYyOE1yR29sUElKVExyTlVaVGllcFZiUDhBSnExRjlGZGF0NWcxUFhCWTI4MXRvME4rOGJMYWllTXhOSjhDcDZzZyYjeEE7UTBETi9TbFJ6ZHdBWUREM2tsVnV2eWhzVzBueTdCWWF2ZWFackhsbTNGcHArczJ2QVN0RnhDdWtzYkJrZFc0MTQrT0l6Ym5iWXFjTyYjeEE7dzMzQ0gvNVVob2Y2Rk52K2xMLzlQRytYVlQ1bE1nTjc5Y1ZTaXYwNGNBcDQrblNsUGZmSHh6ZkxidVh3QlhQZnZkcS81TDIxNWU2ayYjeEE7OWo1aDFMU3RPMTEvVjE3VExSb3hEY3lzQXNzaThsSmlhWUQ5NXgrMTh0c1JtcnB5VTRiNjgyZmFacHRscGVuV3VtMkVRZ3NyT0pJTCYjeEE7YUZhMFdPTlFxcnZ2c0JsUk5tMjBDaFNKd0pRMnBXczExWXpXMFV2b1BNdkQxYWNxQS9hMnFPMldZWmlNaElpNmJzR1FRbUpFWFhSSyYjeEE7YmZ5TDVjamlWWkxjenlMdVpuZGcxZXY3SlVETXVYYWVZblkwM1o5ZGt5R3pzbitZRGh1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdU5hR2hvZXhPNHJpcnhueTcvemk1NUdqdXIzVnZPVHllYk5mMUtaN2k4dXB5OXZBSkpYNXQ2VU1UMUcvd0RNN2UxTyYjeEE7bUtvbjgyUHl5aHV2S3ZranluNWJ0YnV6MHF3OHhXVHRKcDd1WjdLMldLNTVYQ1N2NmpKNmJ5QWgyclEweFZWdlArY2ZkUDFQVDlkRyYjeEE7dStZZFExblc5YnRZOVA4QTB6ZCtrWHRyU0taSnhGQkVpcEd2SjR3V1BmMjNxcW5YbS84QUtaTlo4eE41bDBUWDcveXhyZHhiaXkxRyYjeEE7NTA4b1Z1WUYrd0pJNUFSelQ5aHh1UHVvcWhyTDhqUExHbG55ekxvbDVlYWRkZVczZXR5cnJJOTlEY1NDUzdodmVhMGtFNUJxUlRqWCYjeEE7YnRSVkxFLzV4MjBaZU9sTjVnMVIvSkNYUXZJL0tCa1EyWWNTZXFJaTVYMURDSlBpOU92MDEzeFYvOWs9PC94bXBHSW1nOmltYWdlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L3htcDpUaHVtYm5haWxzPgogICAgICAgICA8eG1wTU06UmVuZGl0aW9uQ2xhc3M+ZGVmYXVsdDwveG1wTU06UmVuZGl0aW9uQ2xhc3M+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjczNzkyNDVjLWMyNDctNGFlMi05OTM1LTk0ZjM4NGJkYjMzNjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3Mzc5MjQ1Yy1jMjQ3LTRhZTItOTkzNS05NGYzODRiZGIzMzY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OGE0ODVjMDgtOTQ4Yi00OWUzLTkyYWItNTk5NWRiODI0YjBhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjhhNDg1YzA4LTk0OGItNDllMy05MmFiLTU5OTVkYjgyNGIwYTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD51dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3PC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpyZW5kaXRpb25DbGFzcz5kZWZhdWx0PC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzM3OTI0NWMtYzI0Ny00YWUyLTk5MzUtOTRmMzg0YmRiMzM2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjMzOjIxLTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAEP/uAA5BZG9iZQBkwAAAAAH/wAARCAB8AH4DABEAAREBAhEB/8QBogABAAECBwEAAAAAAAAAAAAACgkFCAABAgMEBgcLAQACAgIBBQAAAAAAAAAAAAAACQcIBAUCAQMGCgsQAAAEAQIDBAWMAwAAAAAAAAECAwQFAAYHEhMIERUxCRQWIUIKFxgZGiIjJCUmJygpKjIzNDU2Nzg5OkFDREVGR0hJSlFSU1RVVldYWVphYmNkZWZnaGlqcXJzdHV2d3h5eoGCg4SFhoeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1tre4ubrBwsPExcbHyMnK0dLT1NXW19jZ2uHi4+Tl5ufo6erw8fLz9PX29/j5+hEAAQIDAwICBwWJAAAAAAAAAQIDAAQRBQYhBxITMQgVFiJBUWEUI0KDkQkKFxgZGiQlJicoKSoyMzQ1Njc4OTpDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanFyc3R1dnd4eXqBgoSFhoeIiYqSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwB/EiCMSIIxIgiGOt71sGcqE6InQPoWxpzA4dBCCyn/ADkha4t4nFIs4QUB1NaHvUFBUZwqGt1ykenIJF1ndOgNImia1i9Go6ZErKcslq/97mETE1MHOk2HBVtttJGbMLSRRTi1AloGqEt5rmvKWNDme4VzpZUqm3LUQFuLxaQoVSlIOCyDpqJGug1ATRWJUM2IsZXSESwoRtmlzEdhQi4+h/Wv60XQzqCM36J8ffQ1CnKWDTqUTnbC6ieoUzdFKPkfrsEQFuUSg1VQEgielEKopTxdeTInkwvXnLtKyZZuaVTb2XBl3KiuJLJQFnXjXRErrrta5qc3xW0rrWDaFVPSzaXDuJGuHpuu0B09iDXDZCl+lD60rgBUGtFehZk8zmOUPInqACaSE1ZyLaimMoaM5NLSWZ5V1vLqHVc5651r7LNanW+m1JmGB06ABLbM52kI8AtDJ2E1VZ0xhsEuD19PYNwfAi+uZdbUrMU+G6SzGi5NiBLHqgKsp6uDzLcNjpETUOmqrOQkOh6leRUKU6S6qahq8pTGMU4Fr1buQfKzd90omLFm5hsUoqVAmkqBJAIDBWsYg1CkJUBQkAEE+GTV27alFUcYWobNGvg9y1O6geYj0eN1oKgRNtMVI5RmoWw0bDxiqSDmfk2AeuofSqmI6YMCxMz6IEXqBypAgmoZU5RKQDGt0vF5DJtlDtRWbZ9hWu6NF0MlMo/mpXhVK16HmIIqCrPUkJBqqgxjXps+fXway6cacGKpXamlB2GLNaJ9pRqz7M1JZvMVrOWirFikXqNhbFea83SuESgBEXsanG1bxJNNZU1cVVrDXhKUpjV4hSAecrpaiPlJtxaXLwrlbHkqiuiLD71DplLTCigkDEpcfaNSBs83NbsOcOL2a2NqandBhupER2UUbSi1oieiazCZaM2qFcMVIukKsCYhHJxqJOCgQxFI3OArtogdJMBqarRk0XTMYTAemAgks5dHUR8mVhLTMW6qatibBBo6vQmAU41DTOaogng5LjriCAAU0zgrJFlMNcHVUdrgN0HwYj/npRBn5REfkik/Z5zpnpEEqqCDudEeicdWakXEgqpNDRJ05tUQNUiBU0qQgAQoAFcUACyFhXau7dmWMpdyRk5CWNKpl2W2gqlaFWYlOccTiqpxJrUmoW0IFEAAbSOkjLfiMdQxjv8AQyoq0QKDs6mM8qHM5ojNmOsTkEVmate0foFGvMwi8OVBRjFocsAjToOE1Exs64DAAh45eu592772O5Yd6JRqbs5waShryDym2sUW2sbBaCFbCtCQewpIUKK0oVFWVK0NCa0tQihE/wBq2QhcebLqQGekCQOJ0oROhgi3UeFaAoqsvYVEUHCbpoJzHOCKwEOYyhDjJQWWDJnOZKr6PXbeWp6zlJD0q6Ri4wsqCc6gA0RBSptygAKklQASpMa9xGYrN2Ef/9B/EiCMSIIxIggg8air6PxiLR2JqVaJRqJPotEFq4Qqz6IulXjtWuETCFUXWMNvERt8nWyEnL2bJM2dKDNlWGkNoGyQhISkdgAAi4bMu3LsoYaFG0JCRtAkUHhBFLEJZYMdVJjaMEuYMY60xxzhLuCMNwRxThLvJjWvCOCpicshMal8RT1Qs5ZKI0cwKxTlAlkpMaN9McI4SyEmNS6mOKYJd4GNe4mNkQlzBjEUmNsQlyBjslMTNWh7jsUTnTRqmxa0c0FcwCa0eFmcxzJpRRlEYjDyum5BNU0DuGj8SLCUoGVBJKmEQTKAUY1NuzpRVkWDa2YBPpmZhnOFKltSELzVHTICkVTU0TnLpwca4U0mgBj/0X8SIIxIgjEiCCn0cKHTihTRcogUPl0qinNucj5CGhXnGqwF4JYnNx1XKru1S2uQB62VpTqqHLT1xjGEBEXCXAvO1fG5dm3lbOcqalUFelg8nXH04BI115C01CUg0qABQC3VgT6bYsaWtJJqXWgVbRY11Y0gMFhQ0hpaQjykSy8xrG1LcbRiy5gxjrbjjnLLuJMYLqI4ahZd9JjVvIjgqFlkJMah9EU9UtnLJQY0j6N1jgKFlkJMaZ9EcI5ZZCTGpdRHFMWXdBjXOIjYMWXcBjDWiNoSy51jsFET1WiJoaKQqYlE2is9STA87Y/DZoQQTgarkh01Gyz+KuUhpAJarEolHk0hu8JhUh43dKAAJ11amnepM5eKybnME0kpZcy7TSK5hQQ2k7HOQhlStIDNeGJxCdXOHXggbAR//9J/EiCMSIIxIgiFq0oVDUWM7Jg0VWSB7VpwwpxM6OKFFMEUopA1FIjBllCiAKmcxKGxBwnXgJiAnDwrwKNvPe3USb1CYsa0rnvqGiyzyZloY1LboCHQNhmoWhB2Bq8dMcGz3kgtIPyczYzh19pYdRsyleuq2lEqSk7Oq9jsIqRTziVws6JmLMbRiS5hUYzjMcU5Jd1KowHWo4ahJd9Ko1TzUcBQkshCo0z7UU9UlnLJQqNJMNRwFCSyUqjTPtRwTkl30mNS83HFMSXeCo1zjUbJiS7gVGGtuNoSS5gxjqbhedZmoYmoOUBKFtDldOpRCb81mqscSBRZUic5Y6u4nFOciR3FcsKBJwxd0CdeUlcSuACkCuKCVMq17BfjKLa96GznS0zOKDRoASw0EssEgYV0FtuuJxrio4nxh9eiOqWNInwmwj//038SIIxIgjEiCLLbSAwFhGKy/PN88TqjibMXmbHIUakRNUX686YXNtRSvVSUUTr4XOBySvTMme71cJhIJyGnbUbrRmZHK1Iy7Bo1NsTLTmJxQJdx8DAgHbxlBooEYVpnAESPkoedRfeWYb4MfbeQrTxSGlObA8pNpONRhpVoQeYUs4kzALi2qpbCNg6UuYXGI5LxxTp5xLvJVGteYjgqJyyEqjUPsRT1U7OWShUaWYZinqp2cslCo0kwzFPUTlkpVGkfZjhHTziWQlUal1mOKZOXdCo17jMbBk5dwKjDWzFy1Y6oYGosVpGhZNdROnhbScSE6o+IqLIp2CTQKacL1sos2vMJWJmh5GZDEEpgUcFu8TAZYqy33tFzsltr2sk0m1ypl2cATosztylQCtdOh55dINRmoOCuDTrLQpLyq3NjSg6acPqwsKScY8Mj/9R/EiCMSIIxIgiw20iU7m0EoBHmyLupvp9TngkNSZEI3UUdQ+COSzjfLnBYQVSaNHcMagZRKvOCqqRBu4c9dYjUZbFdn8o4tbMrL2fKOrKiVAJW6nQEAUwKlJW5QKwzUrUNeSImTIdY7lo3y23BFWJOWcWVY0CnBoSRhgVKCl0CsKJUdMCIGzI5xJiQci3a5SmwjinRziXdSuNe9LRw1ErO3S76Vxqn5aOAqlLJQuNM/LxT1U84lkoVGkmGIpyqecSyUKjRzDEU9ROzlkpVGkfY044R084lkJVGpdYjiHTziXdCo1zjEbIpy7gVGIpiJgrRGzKTXnZRiohLIrEVg03puTNhy5kHINnCc5Yk8jcZSSc1YjQ6zM002AqEFNRQpVyCBkymEFKS6mjbym7GsO7SFJKH5l+ZWKpzklhCWmiU0KqK20OgHOSklChRRFUeI3nOhoaZ5SJVugAG61O6bpORJf0eIR//1X8SIIxIgjEiCIBa2jRmJRhoruGkHcnWmbMEjqbc3hAwCg/fVcozij6RSmUKBYo+bkRSOU1cqzZoHEpTGMUGO5Cbim5FzkvTyQm3LRKX3tmhFNuWTpcI0KKlAiqXHHE1IAJv3keuCu6V0kPTyM22Z/Ned2aE025aOlihJKlAjXXHHE1IAJs5OjnEpwSuJKelY4aiOcS76Vxq3pWOColnEshC40z8tTYRT1UrO3SyULjSzEvSKcqlZyykLjRTEvFNVSllIXGimJeKeonZ26WSlUaN9jTjgnTlkJVGoeYjimTl3QqNe4xGyKcu5nRiFiJqrRIzhRGHUapoqCgm4QezNnG0CmPaw6RdoR2GREaSupAQYHYtbfX14mc5wEqHamfZi9tVg20nOLam5lhXKKSksuIx06rC3OwIjwK+ksW1S7w0iFJO0pmkbrU7pEyMqOx4NH//1n8SIIxIgi1qte0XRoT0IorYa6qE655AtNiblTPSuG1rSBrF4wnXCByWFQ0xqRQMAOlUa+zlLuRW5WtjfVnbUjOseRo+/UYKzTt22dgdEXSo2LaV7KJiyIXGN9r7NCZRnWNIUmH6jXVZp26aOw28XSo2LaXNlEAh0s4kx5K4Yu7LbSOIdLOJd5K41rsttI4SiVnbpZCVxqn5aOAqlLIQuNLMS1IpyqVnLKQuNHMy+nFMVSs5ZSFxoJmXimqp5xLLQqNBMsbSKcqnLJQqNHMMxwVE5ZCVRp3mI4hk5d4KjWuMxsinLuBUYimYvLrAtEG5vK07MSrr1CFz4teodxSuJTnWtpiJWAoJ166BCVSeDKG05hp65MDVxRNS10GakbdrWmyTWjoac6bs/MnW8aAaAToxOBOEst+gFNepUgVjxu9Vn7arEdKRr7VHB2Lwd4YVQmKSp4haP//XfxIgjEiCIB61TRdUowUV4u/YvDuJozbMpNyaCZFRO0VYM1TFexpEgCCRjzgiBTuCq0pVRa1BM9fUi1zHMkFy03JucxLTDYTbU0A/MkjXgtQ11onToyiiCmpSHNEUng81aLkWyeJuHcaXlZpsIt6cAfmiRrwWsa4ydjtwiiCmpSHNFWmmea20GTs7dKVguJRcYjjHSl3UrjXuy8cJRLOJd9K41T8vFPVSziWShcaSYl6DSimKp2dulloXGgmWNpFMWTs5ZSFR4/MsRTFU7OWWhUePzLG6RTVU7OWUhUaGYZinqElkpVGlfajiHJLvpVGrdajYMSXcCoxFtxvsnTqHPWkQYrHbPWDlB6zcp1wKN3TVUi7ddMRAQA6SqYGC3WYS7b7LM0wuWmEhbDiClSTpFKhRQO0IJEdlTKVpKFCqSKHphhblCqe6NEqhpMOf6JUU7a+acCjy7dvTVFm+iMOQXiLAlOdUwWHvzKoDXmPXCmN3hsxTDfCwF3VvVaN3FlR2xTjrIKtNSELIQs0A4PRmq0hp6Q0hXG0ZQyE+9Jmu3Tik47EA4HsIoewx/9B/EiCLQK2XRiPQyoZKQGDuCpTqogEfQJkYphBeHwMW1Tj8WSEhinSXIg5I3QOAgYirgFC29MZTXkMuQm9d6xaM8kmx7NKHlbJbudVls1wIJSVrGkUozTgqLCajlk6Tfa+gtW0EFVhWSUPrw11x7Oqw0aggpKkqcWMQUozFYLiEASyv7WGXlusbYklyCo7CmqxsHTziXcSqMN1iscNROXfSqNU+xFPVTs5ZKFRpZhjTimLJ2cstCo8fmWNOKUsnZyy0Kjx2aZpWKWsSzt0sxCo8cmmopapLOWWhUePTLWnFOULZyykmNI+3HDOWXfSY1TrcccxZdwGMFaI2xCXKsdkpifC0X1ENScdBacUwHSpDuKG06VBYkIJgMjN+eNrUZaFUKY57vmj7eKGpgpSiUQCurymMZc+pa3ZTZd+5W8bIIatWUGedm9LZrSqbTQVS4oamoJrQgCF8ocgJe1m51PBsw3j08iiT4aUfppf/0X5rrotkVnLlZJu3bpKLuHC6hEkUEUiCoqssqoJU0kkkyiYxjCAFAK8Zc223HXEtNJKnVEAACpJOAAAxJJwAGnHNpp191LLKVLeWoJSlIJUpRNAABiSTgAMSYgDrR1Fk1GKilGpyNVlTzcY0sDmmkoRVKlgUPUVqTsUFSkVRVizpRV0YpygclWAhsAAAMeyX3NFyLosWU8kC1HNvZgih29WBVNRUENpCWwQSDmlQ4OxbNkbuAMnVxpaxX0pFsu7fzRBB2/cAqjOFQQ0kJaBBKTmFQ4ONfB66UiRKdBGKWRWOJQDG2YkuYVHZcbjiKEs5d5Ko1jzUU9UlnbpZKFRpZhmKYsSWUhUaCaZilLJ2csxtUeNzbOnFIXJZyzWzHjE23pxSVi2cs1BjxqaRFNUCWUgxoX0xwThLvpMal1MccwS7oMYK0xtiEudY7BTusS1WihZxA87KMj9Mp7C203ZpNHhgWIVMH76JRhaGlM3FQFFTmbw93SnAhipgBgESicANTLUxn5ZNjWHLqI21rmphScDXMQhoL16lAM5bdRUE1BAOaaRdlMUgSsog8JS4sjDYAJrj00p6b2DD/9Jj9bhotWw9DQsyIU5qc4qI9rMNWqR65VnNNsCdj6xqUTUlitWTYlKcoFVRXcCUaZK3T1kAuZrQXqNvziK2ZZeasVGCphVdBG5dFOkg1SpLdRRcWa1F/J/rUX1N559FbHsbNcFRguaVXQANnoVFPkpNUrQyFCi8YYa6V6oZLSMV0iDNjFlIjppdNjSNvl1EcFYiNg5ZdxJjCdRHBUJZyyEmNQ+3FNWJZyykKjRTLUbkHm1Hp1RVtA5tQaJx6MPT0jSGQhi4iD5c1xCm2bJqKiQgDXmNXUpQt4iAW+XGetWzrHk12har7UtItiqnHFpQgdNUogVOwGmdIR4hbU3IWXKrnbSeal5NA15bighI7CogV2Q0zsIvNmZaOWjZOZkWITniU1ZglVIrU4ZEnq8ajhTlOlUTuG0DRdQlBu4SOYwDa8ZchigU6RRERLBdu6k/cKyZgy1ktTlokEVcQkNNUoahKnSlwqBAHCIIINUrNMa6Xgy5XQlHyxZiJmdoRr6UhtvY1oXClZINBwjCTWoUdj3SO2i3nkmZxbO0WZsxMpWxjNBjU3IrAhWd1MwkQcFYvpxg2bCqAAKpRWMBREamIhSjorP1Lmw1BOrOxptolWvaE+29RNcSnPQxnKpjmnNFcM4aY8KTlvs98AzUg82SccxxLlBsxVLdTtMBtdiLNKJlZArQtDAy60aodxWMwhE4FCPzOLbVQs6YpicXKxYSC0UhjYhiiQTvWzYKcAC4iCac7qZbMml7AluQtNlidUOEMzvjuA1pmjRKNuK2NGlrw6Yqnkkhfi7NsgCWmUIeI4Md27V0zXtdUenVKw6YaWtHlLqY3DsbBpdwRhLEc6DQWLTii0OgMBhzyLxqLvG8OhcLh7dR0+fvnShUW7Vq3SKZRZZZQwAUACWPPT8nZkm7aNoutsSDDZW44shKEISKqUpRwAA0zGI+60w0p99QQ0gElRNAANMk7KEo1jes9LVnqhMjBo6mzGfk6HgzgnouzVK6TbuRJUYXAknhCgVwjA2FcUwkEyQu1VzJmMQxTCrDLjlLRlLvkqes8r1nZRvQZUKGaVJrVx4p3CXV4itFaGlsKAUCBXi9tvC3rULzNdsTYzWwcKjYqpsM49hzQmtCKD//053qOtE57Rcomzkneu4VVhp3R4ZNpucytIxmzD1lU4UgiksUhm9rBTmcqkpS17lwoauATDJl+T26bFy7pytiNpAmggOPkUqt9YBcJIrWlA2k1OuIQK0AhvWS25Etk+uTJ3eaQlM6EByZUKVXMuAF1RIqFZpAbQanbttAqQBHkMvNYkOMwGRHIGMDIgV4WMpdY4RtGCXMRjuCsbSbZd0si2bIquHLhVNBu3QTOsuuuscE0kUUkwMoqqqoYClKUBExhrglyU62y2p11QS0kEkkgAACpJJwAAxJOAEauaU2y0p55SUNISSpRIASAKkknAADEk4CL5aDtYLn3PUYfG6JbhWYE2l6g4NCATIpPV60PSqGStSWTO1m6qqkIhTPAUcInwG1GuEJV+vvqRV3rB0SQuqkWlaqap0SpEqhQwrnAhTwBxo2UoUODXhpxVXKFqR12bDLtnXSSm07VTVOi1pKIUMK54IU+AcduiELHBrw04lToZ0IaHlCGEDBphTcaQZJalM/fGMq8jEUWApQFaJRV2dZ65rzFpip0xUEhEQTIQtuCoF6763mvrO7brxzS31p4MRgltsbJDaQEp2RVQrVTX1KOMUxvTfO8l853bdeGZW+scGpwS22NkhtICU7IqoVKprylHGPSpeKx4vGJEEYkQR4pRKrOlBOi4Vc8/KHU3YtEXBAIePN2xoPOUAIoKyd7igyjCMHImsImBM6x0hExgMUSmMBvPLq5Tr+3LKU3dtOZZlkmugqVorGlQ7cuhbQJGFQkKwFCCARu7NvHbdkUEhMuIaG4Cc5Hciqp7CBXa4Clpj20XtZ6dOlnCM46LMOSVOJyMmc45rHati1wBU0TxCZD56YgV2Kiyhs5ySZWNS2ylstJbclbGdWBipTEwFK2pCJpCa9OpA2keUpym3gCQlTcoojYlC6ndHAN0Ai52g3WX6C1AmmdTDmiiScCqNQcztja6kbnOskNWA6aERd16cIRXTWpFkmCTRFcCEFUhzFAQie/OVq/eULbm8U6o2aFVTLNANMA4UJQnFwgiqVPKcUglWYpIJEeM2veW2Lb12edOgVqEJGajdBwdSmBUVEY0Ii4GUbRoY//9SYCTZId5GJEEYkR1jOzCRHXTFdjGUiOMXV0GqyFRNor2qRd+2tiZmqqpmPHI8gsnEIg2GkMoeAQMSkdvq9NQBIssLZocBGkVOYpiSh+/OWu6dzs+Sl17b7cANGmSChCsaB53g1GINUpz3BhnISCDEB5SdSCuTcTRLOlV6s7xhJoywQW21Y0D72KEYg5yEaI6nDObSFBUSsUI6znQvoMkK5mvBzPJxGbmbuZ1xpQr6OrEUAAWTbqAmk1hjdWurjEapJActcBxOIV8qe30yn3tv0otWs+EWZnVTLtDMaBGkSKlThGwLilUPBubpRQ6/2V6+uUVZatuYDdkhWcmVZBQyCNIqFSpxQ2CnFKoeDc3Sj3WUexGEYkQRiRBGJEEYkQRiRBGJEEYkQRiRBH//VQfWmKB0ToNT+fkbslRmROB04iU04kkk4MzbtnKy6gzecOTpFRLFIQBBLUwOcx29TVuIQKxTJTlAlL83cbU64NX8sgImEEpzipIA0ZKQa6G5WtaABecjYAlrGRTKhJZR7qNKecTrTyjaW5pslIWpSUpG2hKQSS07WudQAOZ6Nwgm3CUoRMkYkQR7rQjrOtE6jKcribEHIzm8VcyDmdUaUMxgaJ0xAFk26gJquomulX1xiNklRIauA4kAa8I+vplOuncZJatZ8rtPNqmXaGe6QdIkVCWwdgXFJqODc7SiLsoGWG5GThBZtyYLlsFAUmVZAW+QdIqFQltJ2CnFJqODQrSiVagzWRKGVCi1SMPm1trPJJJMTxyOoIqMIe5u4ZQ8AgglO0YVyiYCRZYXDslvpFiFMYkqe35y1XrvjnyUuvbBYZJo0ySFrTjQPO4KXgTVKcxs4ZyFEAxQ3KRqQl9r+6JZ0qvVZdxSjRlhRDjicaB97Ba8CaoRobSsM5tRSFRdbKHogaMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSII//1nuzim3N+d0IdwCc8Gh0egr4gFdQ2KNEXjRWkMB0lKmsUwJroKAB0lC0qiShQMQxTAAhn2ZatpWLOotKyX3ZaebOurbUUqFcCKjTBGCkmoUCQQQSDs7Htq1rv2g3a1hzL0paTRqlxpRQoVwIqKVSoYKSapUklKgQSDHNRorHlCaaiUNik33M74cWIvFm54cEYYu2LciaNVAW5n0HdRCmERrhqjhQK4LKvrxGz9xMt18rYW7KWkiSdLTYUF6EtKySaa9mOJRuiB8C42TXUib/AFvuPSNros94sthQc0FaVqJNNezHkt06dbTjug9goV1jOgjCGE3p0xKGRmeD55C4RFytJ2RFu7g7Z44atHhwLCoYwhLR+1BQTFqL0rpIxDCBymtwh4TfDLnf6dmJmyJV1iRl0PON50ugpcUlKlJ4SLW4pCqUOc0W1AiqSMax3fzUkMptoTc5YUk/LWdKtvvNZ8q2pDykJUtA29ccdW2qlDnslpQIBSU4g3noIItkUWzZFJu3bpJoN26CZEkUEUiAmkiikmBU0kkkygUpSgAFAK4JQU44464p11RU6okkk1JJxJJOJJOJJ04ra666+6p55SlvLUVKUokqUompJJxJJxJOJMbsuEcIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCMSIIxIgjEiCP//Z",id:"d",width:126,height:124}))))}},25132:(A,g,I)=>{I.r(g),I.d(g,{assets:()=>a,contentTitle:()=>l,default:()=>o,frontMatter:()=>F,metadata:()=>t,toc:()=>B});var C=I(25773),U=(I(27378),I(35318)),e=I(76911),Q=I(3580);const F={slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},l=void 0,t={permalink:"/blog/proto",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx",source:"@site/blog/2023-03-09_proto.mdx",title:"Introducing proto, a next-generation toolchain manager!",description:"We are proud to announce the launch of proto, a next-generation toolchain manager for all",date:"2023-03-09T00:00:00.000Z",formattedDate:"March 9, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"toolchain",permalink:"/blog/tags/toolchain"}],readingTime:1.89,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto",title:"Introducing proto, a next-generation toolchain manager!",authors:["milesj"],tags:["proto","toolchain"],image:"./img/proto/v0.png"},prevItem:{title:"moon v0.26 - Deeper proto integration, Docker setup, and query commands",permalink:"/blog/v0.26"},nextItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"}},a={image:I(40469).Z,authorsImageUrls:[void 0]},B=[{value:"How to get started?",id:"how-to-get-started",level:2},{value:"Why another version manager?",id:"why-another-version-manager",level:2}],n={toc:B};function o(A){let{components:g,...I}=A;return(0,U.kt)("wrapper",(0,C.Z)({},n,I,{components:g,mdxType:"MDXLayout"}),(0,U.kt)("p",null,"We are proud to announce the launch of ",(0,U.kt)("a",{parentName:"p",href:"/proto"},"proto"),", a next-generation toolchain manager for all\nof your favorite programming languages."),(0,U.kt)("div",{className:"flex justify-center mb-3"},(0,U.kt)(Q.Z,{width:"40%",className:"block",mdxType:"Logo"})),(0,U.kt)("p",null,(0,U.kt)("a",{parentName:"p",href:"/proto"},"proto")," is a Rust based multi-language toolchain manager that will download and install\ntools by version, and immediately make them available on ",(0,U.kt)("inlineCode",{parentName:"p"},"PATH"),". proto is launching with initial\nsupport for ",(0,U.kt)("a",{parentName:"p",href:"https://bun.sh"},"Bun"),", ",(0,U.kt)("a",{parentName:"p",href:"https://deno.land"},"Deno"),", ",(0,U.kt)("a",{parentName:"p",href:"https://nodejs.org"},"Node.js")," (and\nnpm, pnpm, yarn), and ",(0,U.kt)("a",{parentName:"p",href:"https://go.dev"},"Go"),", with more languages on the way!"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-shell"},"proto install node 18\nproto install go 1.20\nproto install deno 1.30\n")),(0,U.kt)("p",null,"Unlike other version managers that pin their global binary to a default version, proto will\n",(0,U.kt)("a",{parentName:"p",href:"/docs/proto/detection"},"contextually detect an applicable version")," from the environment or the\nlanguage's ecosystem (like ",(0,U.kt)("inlineCode",{parentName:"p"},"package.json"),"), ensuring the correct tool is always being ran."),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-shell"},"# Will detect a version before running\nbun run ./script.ts\n")),(0,U.kt)("p",null,"Furthermore, with proto's ",(0,U.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,U.kt)("inlineCode",{parentName:"a"},".prototools"))," file, you can pin versions of all\nrequired tools on a per-project or per-repository basis, allowing for near instant setup of\ndeveloper environments. Perfect for onboarding new developers!"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.12.0"\nyarn = "3.3.0"\n')),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre",className:"language-shell"},"# Install all the things!\nproto use\n")),(0,U.kt)("p",null,"And lastly, ",(0,U.kt)("a",{parentName:"p",href:"/moon"},"moon"),"'s toolchain is built on proto, so if you're using moon, you might as well\nuse proto. This will enable a single toolchain for both tools (in v0.26)!"),(0,U.kt)("div",{class:"flex justify-center"},(0,U.kt)(e.Z,{label:"View documentation",href:"/docs/proto",size:"lg",mdxType:"Button"})),(0,U.kt)("h2",{id:"how-to-get-started"},"How to get started?"),(0,U.kt)("p",null,"In a terminal that supports Bash, run:"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre"},"curl -fsSL https://moonrepo.dev/install/proto.sh | bash\n")),(0,U.kt)("p",null,"In Powershell or Windows Terminal, run:"),(0,U.kt)("pre",null,(0,U.kt)("code",{parentName:"pre"},"irm https://moonrepo.dev/install/proto.ps1 | iex\n")),(0,U.kt)("p",null,"Jump to the ",(0,U.kt)("a",{parentName:"p",href:"/docs/proto"},"documentation")," for more information on getting started and available\ncommands!"),(0,U.kt)("h2",{id:"why-another-version-manager"},"Why another version manager?"),(0,U.kt)("p",null,"To start, proto powers ",(0,U.kt)("a",{parentName:"p",href:"/moon"},"moon's")," toolchain and integrated developer environment. We believed\nthat moon's toolchain would be extremely beneficial for developers as a whole, and so we extracted\nproto out into a standalone Rust CLI and Rust crates that moon inherits."),(0,U.kt)("p",null,"Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each\nwith different workflows, CLI commands, and configuration files, is a poor developer experience."),(0,U.kt)("p",null,"Our goal is to unify all of these into a single performant interface. A toolchain manager is the\nnext step in the version manager evolution."))}o.isMDXComponent=!0},40469:(A,g,I)=>{I.d(g,{Z:()=>C});const C=I.p+"assets/images/v0-f4d2ad552e3bee8cc7ef8c3e52e2f675.png"}}]); \ No newline at end of file diff --git a/assets/js/98738a6c.8c2047bf.js b/assets/js/98738a6c.8c2047bf.js deleted file mode 100644 index c9bd9edca4f..00000000000 --- a/assets/js/98738a6c.8c2047bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4734],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(n),u=a,g=m["".concat(p,".").concat(u)]||m[u]||d[u]||r;return n?o.createElement(g,l(l({ref:t},c),{},{components:n})):o.createElement(g,l({ref:t},c))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<r;s++)l[s]=n[s];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},32369:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var o=n(25773),a=(n(27378),n(35318));const r={slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},l=void 0,i={permalink:"/blog/proto-v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx",source:"@site/blog/2023-09-29_proto-v0.19.mdx",title:"proto v0.19 - Version pinning and outdated checks",description:"In this release, we're improving version pinning and introducing a new command to check for outdated",date:"2023-09-29T00:00:00.000Z",formattedDate:"September 29, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"pin",permalink:"/blog/tags/pin"},{label:"global",permalink:"/blog/tags/global"},{label:"local",permalink:"/blog/tags/local"},{label:"outdated",permalink:"/blog/tags/outdated"}],readingTime:1.92,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},prevItem:{title:"moon v1.15 - Next-generation action graph",permalink:"/blog/moon-v1.15"},nextItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"}},p={image:n(36691).Z,authorsImageUrls:[void 0]},s=[{value:"New <code>proto pin</code> command (breaking)",id:"new-proto-pin-command-breaking",level:2},{value:"New <code>pin-latest</code> setting",id:"new-pin-latest-setting",level:2},{value:"New <code>proto outdated</code> command",id:"new-proto-outdated-command",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"In this release, we're improving version pinning and introducing a new command to check for outdated\nversions."),(0,a.kt)("h2",{id:"new-proto-pin-command-breaking"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"proto pin")," command (breaking)"),(0,a.kt)("p",null,"Before our official v1 release, which is relatively soon, we'll be making some breaking changes with\nthe proto APIs. The first is the introduction of the new ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/pin"},(0,a.kt)("inlineCode",{parentName:"a"},"proto pin")),"\ncommand, which replaces the previous ",(0,a.kt)("inlineCode",{parentName:"p"},"proto local")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"proto global")," commands. We felt this was a\nmuch cleaner change, and far easier to understand than the previous command names."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# v0.18\n$ proto local go 1.20\n$ proto global node 20\n\n# v0.19+\n$ proto pin go 1.20\n$ proto pin node 20 --global\n")),(0,a.kt)("h2",{id:"new-pin-latest-setting"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"pin-latest")," setting"),(0,a.kt)("p",null,"While we're on the subject of pinning versions, we've also introduced a new\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/config#pin-latest"},(0,a.kt)("inlineCode",{parentName:"a"},"pin-latest"))," setting. Do you want the latest version to always be\npinned? Do you forgot to pass ",(0,a.kt)("inlineCode",{parentName:"p"},"--pin")," when installing? Do you forget to run the ",(0,a.kt)("inlineCode",{parentName:"p"},"proto global")," or\n",(0,a.kt)("inlineCode",{parentName:"p"},"proto local")," commands (now ",(0,a.kt)("inlineCode",{parentName:"p"},"proto pin"),")? If you answered yes to any of these questions, then this\nsetting is for you."),(0,a.kt)("p",null,'When enabled, and a tool is installed with the "latest" version, the resolved version will\nautomatically be pinned to the configuration of your choice. For example, say we have the following\nuser config:'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'pin-latest = "local"\n')),(0,a.kt)("p",null,"And we run one of the following commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install go\n$ proto install node latest\n")),(0,a.kt)("p",null,"Then the resolved version of the tool will automatically be set to the ",(0,a.kt)("inlineCode",{parentName:"p"},".prototools")," file in the\ncurrent directory. Handy right?"),(0,a.kt)("h2",{id:"new-proto-outdated-command"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"proto outdated")," command"),(0,a.kt)("p",null,"By request of the community, we're introducing yet another new command,\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/outdated"},(0,a.kt)("inlineCode",{parentName:"a"},"proto outdated")),". If you're familiar with package managers, you can\nprobably guess what this command does! It'll check for newer available versions, for all tools\nconfigured in the closest ",(0,a.kt)("inlineCode",{parentName:"p"},".prototools")," file. Very handy for keeping your tools up to date."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"$ proto outdated\n\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\n")),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.19.0"},"official release")," for a full list\nof changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added ",(0,a.kt)("inlineCode",{parentName:"li"},"PROTO_WASM_LOG")," environment variable to toggle the logging of messages from Extism and WASM\nplugins. Useful for debugging."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"proto install")," to auto-clean stale plugins after a successful installation.")))}d.isMDXComponent=!0},36691:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.19-8de1899b49d54ec36a7294e44f3880ca.png"}}]); \ No newline at end of file diff --git a/assets/js/98738a6c.c50ae379.js b/assets/js/98738a6c.c50ae379.js new file mode 100644 index 00000000000..83e5470ae58 --- /dev/null +++ b/assets/js/98738a6c.c50ae379.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94734],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(n),u=a,g=m["".concat(p,".").concat(u)]||m[u]||d[u]||r;return n?o.createElement(g,l(l({ref:t},c),{},{components:n})):o.createElement(g,l({ref:t},c))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<r;s++)l[s]=n[s];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},32369:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var o=n(25773),a=(n(27378),n(35318));const r={slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},l=void 0,i={permalink:"/blog/proto-v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx",source:"@site/blog/2023-09-29_proto-v0.19.mdx",title:"proto v0.19 - Version pinning and outdated checks",description:"In this release, we're improving version pinning and introducing a new command to check for outdated",date:"2023-09-29T00:00:00.000Z",formattedDate:"September 29, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"pin",permalink:"/blog/tags/pin"},{label:"global",permalink:"/blog/tags/global"},{label:"local",permalink:"/blog/tags/local"},{label:"outdated",permalink:"/blog/tags/outdated"}],readingTime:1.92,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.19",title:"proto v0.19 - Version pinning and outdated checks",authors:["milesj"],tags:["proto","pin","global","local","outdated"],image:"./img/proto/v0.19.png"},prevItem:{title:"moon v1.15 - Next-generation action graph",permalink:"/blog/moon-v1.15"},nextItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"}},p={image:n(36691).Z,authorsImageUrls:[void 0]},s=[{value:"New <code>proto pin</code> command (breaking)",id:"new-proto-pin-command-breaking",level:2},{value:"New <code>pin-latest</code> setting",id:"new-pin-latest-setting",level:2},{value:"New <code>proto outdated</code> command",id:"new-proto-outdated-command",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"In this release, we're improving version pinning and introducing a new command to check for outdated\nversions."),(0,a.kt)("h2",{id:"new-proto-pin-command-breaking"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"proto pin")," command (breaking)"),(0,a.kt)("p",null,"Before our official v1 release, which is relatively soon, we'll be making some breaking changes with\nthe proto APIs. The first is the introduction of the new ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/pin"},(0,a.kt)("inlineCode",{parentName:"a"},"proto pin")),"\ncommand, which replaces the previous ",(0,a.kt)("inlineCode",{parentName:"p"},"proto local")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"proto global")," commands. We felt this was a\nmuch cleaner change, and far easier to understand than the previous command names."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# v0.18\n$ proto local go 1.20\n$ proto global node 20\n\n# v0.19+\n$ proto pin go 1.20\n$ proto pin node 20 --global\n")),(0,a.kt)("h2",{id:"new-pin-latest-setting"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"pin-latest")," setting"),(0,a.kt)("p",null,"While we're on the subject of pinning versions, we've also introduced a new\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/config#pin-latest"},(0,a.kt)("inlineCode",{parentName:"a"},"pin-latest"))," setting. Do you want the latest version to always be\npinned? Do you forgot to pass ",(0,a.kt)("inlineCode",{parentName:"p"},"--pin")," when installing? Do you forget to run the ",(0,a.kt)("inlineCode",{parentName:"p"},"proto global")," or\n",(0,a.kt)("inlineCode",{parentName:"p"},"proto local")," commands (now ",(0,a.kt)("inlineCode",{parentName:"p"},"proto pin"),")? If you answered yes to any of these questions, then this\nsetting is for you."),(0,a.kt)("p",null,'When enabled, and a tool is installed with the "latest" version, the resolved version will\nautomatically be pinned to the configuration of your choice. For example, say we have the following\nuser config:'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'pin-latest = "local"\n')),(0,a.kt)("p",null,"And we run one of the following commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install go\n$ proto install node latest\n")),(0,a.kt)("p",null,"Then the resolved version of the tool will automatically be set to the ",(0,a.kt)("inlineCode",{parentName:"p"},".prototools")," file in the\ncurrent directory. Handy right?"),(0,a.kt)("h2",{id:"new-proto-outdated-command"},"New ",(0,a.kt)("inlineCode",{parentName:"h2"},"proto outdated")," command"),(0,a.kt)("p",null,"By request of the community, we're introducing yet another new command,\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/outdated"},(0,a.kt)("inlineCode",{parentName:"a"},"proto outdated")),". If you're familiar with package managers, you can\nprobably guess what this command does! It'll check for newer available versions, for all tools\nconfigured in the closest ",(0,a.kt)("inlineCode",{parentName:"p"},".prototools")," file. Very handy for keeping your tools up to date."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"$ proto outdated\n\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\n")),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.19.0"},"official release")," for a full list\nof changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added ",(0,a.kt)("inlineCode",{parentName:"li"},"PROTO_WASM_LOG")," environment variable to toggle the logging of messages from Extism and WASM\nplugins. Useful for debugging."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"proto install")," to auto-clean stale plugins after a successful installation.")))}d.isMDXComponent=!0},36691:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.19-8de1899b49d54ec36a7294e44f3880ca.png"}}]); \ No newline at end of file diff --git a/assets/js/98ae4a66.d5cf8e9a.js b/assets/js/98ae4a66.d5cf8e9a.js deleted file mode 100644 index ccbaa382c17..00000000000 --- a/assets/js/98ae4a66.d5cf8e9a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7619],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),g=o,h=c["".concat(s,".").concat(g)]||c[g]||m[g]||a;return n?r.createElement(h,l(l({ref:t},u),{},{components:n})):r.createElement(h,l({ref:t},u))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}c.displayName="MDXCreateElement"},67013:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=n(25773),o=(n(27378),n(35318));const a={slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx",source:"@site/blog/2023-08-11_proto-v0.14.mdx",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",description:"With this release, we've finished our migration to a WASM based plugin architecture.",date:"2023-08-11T00:00:00.000Z",formattedDate:"August 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"},nextItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"}},s={authorsImageUrls:[void 0]},p=[{value:"Full migration to WASM",id:"full-migration-to-wasm",level:2},{value:"Breaking changes for TOML plugins",id:"breaking-changes-for-toml-plugins",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've finished our migration to a WASM based plugin architecture."),(0,o.kt)("h2",{id:"full-migration-to-wasm"},"Full migration to WASM"),(0,o.kt)("p",null,"In ",(0,o.kt)("a",{parentName:"p",href:"./proto-v0.13"},"our last release"),", we migrated the Bun, Deno, and Go plugins to WASM. In this\nrelease, we're excited to announce that we have completed our WASM migration by also converting\nNode.js (and npm, etc) and Rust to WASM plugins. We've also updated our TOML plugin layer to use\nWASM under the hood."),(0,o.kt)("p",null,"With this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the\nconsumers, to build your own plugins! We have plans for additional APIs in the next release,\nprimarily installing and uninstall globals, and a hooks system, so look forward to that! To learn\nmore about our official plugins, check out the their repositories!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/bun-plugin"},"Bun")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/deno-plugin"},"Deno")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/go-plugin"},"Go")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"Node")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/rust-plugin"},"Rust")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/schema-plugin"},"Schema"))),(0,o.kt)("p",null,"This release may seem light, but we\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/pull/161"},"rewrote the entire core")," from the ground up to support\na pure plugin based architecture. This was a lot of work, but our implementation is far easier to\nwork with, and more robust. As part of this process, we improved version and range handling, archive\nunpacking, and much more!"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Because of the rewrite, we may have introduced a few bugs. Please report any issues!")),(0,o.kt)("h2",{id:"breaking-changes-for-toml-plugins"},"Breaking changes for TOML plugins"),(0,o.kt)("p",null,"In preparation for the next release, and as clean up during the rewrite, we've made a few breaking\nchanges to the TOML schema, primarily around global handling. To start, this old code:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'[install]\nglobals-dir = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]\nglobal-args = ["install", "--force", "{dependency}"]\n')),(0,o.kt)("p",null,"Can now be rewritten as:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'[globals]\nlookup-dirs = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]\ninstall-args = ["install", "--force", "{dependency}"]\n')),(0,o.kt)("p",null,"And lastly, the ",(0,o.kt)("inlineCode",{parentName:"p"},"install.unpack")," setting has been removed. We believe our installation layer is\nsmart enough to unpack or move files automatically."),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.14.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Versions defined in ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools")," must be fully-qualified semantic versions. Partial versions\n(missing patch or minor) are no longer supported. This may change in the future based on feedback."),(0,o.kt)("li",{parentName:"ul"},"Tool and plugin names must now be in kebab-case."),(0,o.kt)("li",{parentName:"ul"},"Node",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Yarn 2+ is now installed using ",(0,o.kt)("inlineCode",{parentName:"li"},"@yarnpkg/cli-dist"),". We no longer downgrade to the latest v1."),(0,o.kt)("li",{parentName:"ul"},"Will no longer detect a version from ",(0,o.kt)("inlineCode",{parentName:"li"},"engines")," in ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),"."))),(0,o.kt)("li",{parentName:"ul"},"Rust",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Will now detect a version/channel from ",(0,o.kt)("inlineCode",{parentName:"li"},"rust-toolchain.toml")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"rust-toolchain"),".")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/98ae4a66.fb1f2db8.js b/assets/js/98ae4a66.fb1f2db8.js new file mode 100644 index 00000000000..7bfea2f69e3 --- /dev/null +++ b/assets/js/98ae4a66.fb1f2db8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67619],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),g=o,h=c["".concat(s,".").concat(g)]||c[g]||m[g]||a;return n?r.createElement(h,l(l({ref:t},u),{},{components:n})):r.createElement(h,l({ref:t},u))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}c.displayName="MDXCreateElement"},67013:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=n(25773),o=(n(27378),n(35318));const a={slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},l=void 0,i={permalink:"/blog/proto-v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx",source:"@site/blog/2023-08-11_proto-v0.14.mdx",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",description:"With this release, we've finished our migration to a WASM based plugin architecture.",date:"2023-08-11T00:00:00.000Z",formattedDate:"August 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"},nextItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"}},s={authorsImageUrls:[void 0]},p=[{value:"Full migration to WASM",id:"full-migration-to-wasm",level:2},{value:"Breaking changes for TOML plugins",id:"breaking-changes-for-toml-plugins",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've finished our migration to a WASM based plugin architecture."),(0,o.kt)("h2",{id:"full-migration-to-wasm"},"Full migration to WASM"),(0,o.kt)("p",null,"In ",(0,o.kt)("a",{parentName:"p",href:"./proto-v0.13"},"our last release"),", we migrated the Bun, Deno, and Go plugins to WASM. In this\nrelease, we're excited to announce that we have completed our WASM migration by also converting\nNode.js (and npm, etc) and Rust to WASM plugins. We've also updated our TOML plugin layer to use\nWASM under the hood."),(0,o.kt)("p",null,"With this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the\nconsumers, to build your own plugins! We have plans for additional APIs in the next release,\nprimarily installing and uninstall globals, and a hooks system, so look forward to that! To learn\nmore about our official plugins, check out the their repositories!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/bun-plugin"},"Bun")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/deno-plugin"},"Deno")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/go-plugin"},"Go")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"Node")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/rust-plugin"},"Rust")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/schema-plugin"},"Schema"))),(0,o.kt)("p",null,"This release may seem light, but we\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/pull/161"},"rewrote the entire core")," from the ground up to support\na pure plugin based architecture. This was a lot of work, but our implementation is far easier to\nwork with, and more robust. As part of this process, we improved version and range handling, archive\nunpacking, and much more!"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Because of the rewrite, we may have introduced a few bugs. Please report any issues!")),(0,o.kt)("h2",{id:"breaking-changes-for-toml-plugins"},"Breaking changes for TOML plugins"),(0,o.kt)("p",null,"In preparation for the next release, and as clean up during the rewrite, we've made a few breaking\nchanges to the TOML schema, primarily around global handling. To start, this old code:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'[install]\nglobals-dir = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]\nglobal-args = ["install", "--force", "{dependency}"]\n')),(0,o.kt)("p",null,"Can now be rewritten as:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'[globals]\nlookup-dirs = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]\ninstall-args = ["install", "--force", "{dependency}"]\n')),(0,o.kt)("p",null,"And lastly, the ",(0,o.kt)("inlineCode",{parentName:"p"},"install.unpack")," setting has been removed. We believe our installation layer is\nsmart enough to unpack or move files automatically."),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.14.0"},"official release")," for a full list\nof changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Versions defined in ",(0,o.kt)("inlineCode",{parentName:"li"},".prototools")," must be fully-qualified semantic versions. Partial versions\n(missing patch or minor) are no longer supported. This may change in the future based on feedback."),(0,o.kt)("li",{parentName:"ul"},"Tool and plugin names must now be in kebab-case."),(0,o.kt)("li",{parentName:"ul"},"Node",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Yarn 2+ is now installed using ",(0,o.kt)("inlineCode",{parentName:"li"},"@yarnpkg/cli-dist"),". We no longer downgrade to the latest v1."),(0,o.kt)("li",{parentName:"ul"},"Will no longer detect a version from ",(0,o.kt)("inlineCode",{parentName:"li"},"engines")," in ",(0,o.kt)("inlineCode",{parentName:"li"},"package.json"),"."))),(0,o.kt)("li",{parentName:"ul"},"Rust",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Will now detect a version/channel from ",(0,o.kt)("inlineCode",{parentName:"li"},"rust-toolchain.toml")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"rust-toolchain"),".")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9926.40f41297.js b/assets/js/9926.40f41297.js deleted file mode 100644 index ed99f026aa4..00000000000 --- a/assets/js/9926.40f41297.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9926],{70412:(e,r,t)=>{t.d(r,{C:()=>u,n:()=>s});var o=t(27378),n=t(41763);const a=o.createContext(null);function s(e){let{children:r,content:t,isBlogPostPage:n=!1}=e;const s=function(e){let{content:r,isBlogPostPage:t}=e;return(0,o.useMemo)((()=>({metadata:r.metadata,frontMatter:r.frontMatter,assets:r.assets,toc:r.toc,isBlogPostPage:t})),[r,t])}({content:t,isBlogPostPage:n});return o.createElement(a.Provider,{value:s},r)}function u(){const e=(0,o.useContext)(a);if(null===e)throw new n.i6("BlogPostProvider");return e}},89446:(e,r,t)=>{t.d(r,{b:()=>s,k:()=>u});var o=t(27378),n=t(41763);const a=o.createContext(null);function s(e){let{children:r,content:t}=e;const n=function(e){return(0,o.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(t);return o.createElement(a.Provider,{value:n},r)}function u(){const e=(0,o.useContext)(a);if(null===e)throw new n.i6("DocProvider");return e}},36666:(e,r,t)=>{t.d(r,{D:()=>u,f:()=>l});var o=t(27378),n=t(41763);const a=Symbol("EmptyContext"),s=o.createContext(a);function u(e){let{children:r}=e;const[t,n]=(0,o.useState)(null),a=(0,o.useMemo)((()=>({expandedItem:t,setExpandedItem:n})),[t]);return o.createElement(s.Provider,{value:a},r)}function l(){const e=(0,o.useContext)(s);if(e===a)throw new n.i6("DocSidebarItemsExpandedStateProvider");return e}},69169:(e,r,t)=>{t.d(r,{a:()=>s});var o=t(27378),n=t(83457),a=t(24993);function s(e){let{threshold:r}=e;const[t,s]=(0,o.useState)(!1),u=(0,o.useRef)(!1),{startScroll:l,cancelScroll:i}=(0,n.Ct)();return(0,n.RF)(((e,t)=>{let{scrollY:o}=e;const n=t?.scrollY;n&&(u.current?u.current=!1:o>=n?(i(),s(!1)):o<r?s(!1):o+window.innerHeight<document.documentElement.scrollHeight&&s(!0))})),(0,a.S)((e=>{e.location.hash&&(u.current=!0,s(!1))})),{shown:t,scrollToTop:()=>l(0)}}},81344:(e,r,t)=>{t.d(r,{S:()=>l});var o=t(27378),n=t(20624);function a(e){const r=e.getBoundingClientRect();return r.top===r.bottom?a(e.parentNode):r}function s(e,r){let{anchorTopOffset:t}=r;const o=e.find((e=>a(e).top>=t));if(o){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(a(o))?o:e[e.indexOf(o)-1]??null}return e[e.length-1]??null}function u(){const e=(0,o.useRef)(0),{navbar:{hideOnScroll:r}}=(0,n.L)();return(0,o.useEffect)((()=>{e.current=r?0:document.querySelector(".navbar").clientHeight}),[r]),e}function l(e){const r=(0,o.useRef)(void 0),t=u();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:o,linkActiveClassName:n,minHeadingLevel:a,maxHeadingLevel:u}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(o),l=function(e){let{minHeadingLevel:r,maxHeadingLevel:t}=e;const o=[];for(let n=r;n<=t;n+=1)o.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(o.join()))}({minHeadingLevel:a,maxHeadingLevel:u}),i=s(l,{anchorTopOffset:t.current}),c=e.find((e=>i&&i.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(r.current&&r.current!==e&&r.current.classList.remove(n),e.classList.add(n),r.current=e):e.classList.remove(n)}(e,e===c)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}},95709:(e,r,t)=>{t.r(r),t.d(r,{Collapsible:()=>l.z,ErrorBoundaryError:()=>x.aG,ErrorBoundaryTryAgainButton:()=>x.Cw,ErrorCauseBoundary:()=>x.QW,HtmlClassNameProvider:()=>m.FG,NavbarSecondaryMenuFiller:()=>g.Zo,PageMetadata:()=>m.d,ReactContextError:()=>d.i6,SkipToContentFallbackId:()=>L.u,SkipToContentLink:()=>L.l,ThemeClassNames:()=>i.k,composeProviders:()=>d.Qc,createStorageSlot:()=>n.WA,duplicates:()=>S.l,filterDocCardListItems:()=>s.MN,isMultiColumnFooterLinks:()=>b.a,isRegexpStringMatch:()=>C.F,listStorageKeys:()=>n._f,listTagsByLetters:()=>h.P,prefersReducedMotion:()=>c.n,processAdmonitionProps:()=>E,translateTagsPageTitle:()=>h.M,uniq:()=>S.j,useCollapsible:()=>l.u,useColorMode:()=>f.I,useContextualSearchFilters:()=>a._q,useCurrentSidebarCategory:()=>s.jA,useDocsPreferredVersion:()=>y.J,useEvent:()=>d.zX,useIsomorphicLayoutEffect:()=>d.LI,usePluralForm:()=>u.c,usePrevious:()=>d.D9,usePrismTheme:()=>P.p,useSearchLinkCreator:()=>v.M,useSearchQueryString:()=>v.K,useStorageSlot:()=>n.Nk,useThemeConfig:()=>o.L,useWindowSize:()=>p.i});var o=t(20624),n=t(71819),a=t(13149),s=t(45161),u=t(40689),l=t(80376),i=t(75484),c=t(56903),d=t(41763),m=t(1123),f=t(55421),g=t(63471),p=t(58357),h=t(75846),v=t(53584),b=t(33922),C=t(61503),S=t(70784),P=t(6499),y=t(24453),T=t(27378);function E(e){const{mdxAdmonitionTitle:r,rest:t}=function(e){const r=T.Children.toArray(e),t=r.find((e=>T.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=T.createElement(T.Fragment,null,r.filter((e=>e!==t)));return{mdxAdmonitionTitle:t?.props.children,rest:o}}(e.children),o=e.title??r;return{...e,...o&&{title:o},children:t}}var L=t(39360),x=t(19441)},12700:(e,r,t)=>{t.r(r),t.d(r,{AnnouncementBarProvider:()=>c.pl,BlogPostProvider:()=>l.n,Collapsible:()=>o.Collapsible,ColorModeProvider:()=>g.S,DEFAULT_SEARCH_TAG:()=>v.HX,DocProvider:()=>u.b,DocSidebarItemsExpandedStateProvider:()=>n.D,DocsPreferredVersionContextProvider:()=>i.L5,DocsSidebarProvider:()=>s.b,DocsVersionProvider:()=>a.q,ErrorBoundaryError:()=>o.ErrorBoundaryError,ErrorBoundaryTryAgainButton:()=>o.ErrorBoundaryTryAgainButton,ErrorCauseBoundary:()=>o.ErrorCauseBoundary,HtmlClassNameProvider:()=>o.HtmlClassNameProvider,NavbarProvider:()=>M.V,NavbarSecondaryMenuFiller:()=>o.NavbarSecondaryMenuFiller,PageMetadata:()=>o.PageMetadata,PluginHtmlClassNameProvider:()=>x.VC,ReactContextError:()=>o.ReactContextError,ScrollControllerProvider:()=>E.OC,SkipToContentFallbackId:()=>o.SkipToContentFallbackId,SkipToContentLink:()=>o.SkipToContentLink,ThemeClassNames:()=>o.ThemeClassNames,composeProviders:()=>o.composeProviders,containsLineNumbers:()=>h.nt,createStorageSlot:()=>o.createStorageSlot,docVersionSearchTag:()=>v.os,duplicates:()=>o.duplicates,filterDocCardListItems:()=>o.filterDocCardListItems,findFirstCategoryLink:()=>b.Wl,findSidebarCategory:()=>b.em,getPrismCssVariables:()=>h.QC,isActiveSidebarItem:()=>b._F,isDocsPluginEnabled:()=>b.cE,isMultiColumnFooterLinks:()=>o.isMultiColumnFooterLinks,isRegexpStringMatch:()=>o.isRegexpStringMatch,isSamePath:()=>L.Mg,keyboardFocusedClassName:()=>w.h,listStorageKeys:()=>o.listStorageKeys,listTagsByLetters:()=>o.listTagsByLetters,parseCodeBlockTitle:()=>h.bc,parseLanguage:()=>h.Vo,parseLines:()=>h.nZ,prefersReducedMotion:()=>o.prefersReducedMotion,processAdmonitionProps:()=>o.processAdmonitionProps,splitNavbarItems:()=>M.A,translateTagsPageTitle:()=>o.translateTagsPageTitle,uniq:()=>o.uniq,useAlternatePageUtils:()=>p.l,useAnnouncementBar:()=>c.nT,useBackToTopButton:()=>F.a,useBlogPost:()=>l.C,useCodeWordWrap:()=>D.F,useCollapsible:()=>o.useCollapsible,useColorMode:()=>o.useColorMode,useContextualSearchFilters:()=>o.useContextualSearchFilters,useCurrentSidebarCategory:()=>o.useCurrentSidebarCategory,useDoc:()=>u.k,useDocById:()=>b.xz,useDocRouteMetadata:()=>b.hI,useDocSidebarItemsExpandedState:()=>n.f,useDocsPreferredVersion:()=>o.useDocsPreferredVersion,useDocsPreferredVersionByPluginId:()=>i.Oh,useDocsSidebar:()=>s.V,useDocsVersion:()=>a.E,useDocsVersionCandidates:()=>b.lO,useEvent:()=>o.useEvent,useFilteredAndTreeifiedTOC:()=>T.b,useHideableNavbar:()=>I.c,useHistoryPopHandler:()=>y.Rb,useHistorySelector:()=>y.xL,useHomePageRoute:()=>L.Ns,useIsomorphicLayoutEffect:()=>o.useIsomorphicLayoutEffect,useKeyboardNavigation:()=>w.t,useLayoutDoc:()=>b.vY,useLayoutDocsSidebar:()=>b.oz,useLocalPathname:()=>P.b,useLocationChange:()=>S.S,useLockBodyScroll:()=>B.N,useNavbarMobileSidebar:()=>m.e,useNavbarSecondaryMenu:()=>f.Y,usePluralForm:()=>o.usePluralForm,usePrevious:()=>o.usePrevious,usePrismTheme:()=>o.usePrismTheme,useQueryStringValue:()=>y._X,useScrollController:()=>E.sG,useScrollPosition:()=>E.RF,useScrollPositionBlocker:()=>E.o5,useSearchLinkCreator:()=>o.useSearchLinkCreator,useSearchQueryString:()=>o.useSearchQueryString,useSidebarBreadcrumbs:()=>b.s1,useSmoothScrollTo:()=>E.Ct,useStorageSlot:()=>o.useStorageSlot,useTOCHighlight:()=>k.S,useTabs:()=>d.Y,useThemeConfig:()=>o.useThemeConfig,useTitleFormatter:()=>C.p,useTreeifiedTOC:()=>T.a,useWindowSize:()=>o.useWindowSize});var o=t(95709),n=t(36666),a=t(25611),s=t(52095),u=t(89446),l=t(70412),i=t(24453),c=t(10),d=t(35595),m=t(85536),f=t(15530),g=t(55421),p=t(43714),h=t(90433),v=t(13149),b=t(45161),C=t(99162),S=t(24993),P=t(43511),y=t(30654),T=t(86934),E=t(83457),L=t(8862),x=t(1123),M=t(63211),k=t(81344),I=t(82561),w=t(70174),B=t(37930),D=t(96177),F=t(69169)},35595:(e,r,t)=>{t.d(r,{Y:()=>m});var o=t(27378),n=t(35331),a=t(30654),s=t(70784),u=t(71819);function l(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:r,label:t,attributes:o,default:n}}=e;return{value:r,label:t,attributes:o,default:n}}))}function i(e){const{values:r,children:t}=e;return(0,o.useMemo)((()=>{const e=r??l(t);return function(e){const r=(0,s.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,t])}function c(e){let{value:r,tabValues:t}=e;return t.some((e=>e.value===r))}function d(e){let{queryString:r=!1,groupId:t}=e;const s=(0,n.k6)(),u=function(e){let{queryString:r=!1,groupId:t}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:r,groupId:t});return[(0,a._X)(u),(0,o.useCallback)((e=>{if(!u)return;const r=new URLSearchParams(s.location.search);r.set(u,e),s.replace({...s.location,search:r.toString()})}),[u,s])]}function m(e){const{defaultValue:r,queryString:t=!1,groupId:n}=e,a=i(e),[s,l]=(0,o.useState)((()=>function(e){let{defaultValue:r,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(r){if(!c({value:r,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const o=t.find((e=>e.default))??t[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:r,tabValues:a}))),[m,f]=d({queryString:t,groupId:n}),[g,p]=function(e){let{groupId:r}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(r),[n,a]=(0,u.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:n}),h=(()=>{const e=m??g;return c({value:e,tabValues:a})?e:null})();(0,o.useLayoutEffect)((()=>{h&&l(h)}),[h]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!c({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),f(e),p(e)}),[f,p,a]),tabValues:a}}},75846:(e,r,t)=>{t.d(r,{M:()=>n,P:()=>a});var o=t(99213);const n=()=>(0,o.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function a(e){const r={};return Object.values(e).forEach((e=>{const t=function(e){return e[0].toUpperCase()}(e.label);r[t]??=[],r[t].push(e)})),Object.entries(r).sort(((e,r)=>{let[t]=e,[o]=r;return t.localeCompare(o)})).map((e=>{let[r,t]=e;return{letter:r,tags:t.sort(((e,r)=>e.label.localeCompare(r.label)))}}))}},86934:(e,r,t)=>{t.d(r,{a:()=>a,b:()=>u});var o=t(27378);function n(e){const r=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);r.forEach(((e,r)=>{const o=t.slice(2,e.level);e.parentIndex=Math.max(...o),t[e.level]=r}));const o=[];return r.forEach((e=>{const{parentIndex:t,...n}=e;t>=0?r[t].children.push(n):o.push(n)})),o}function a(e){return(0,o.useMemo)((()=>n(e)),[e])}function s(e){let{toc:r,minHeadingLevel:t,maxHeadingLevel:o}=e;return r.flatMap((e=>{const r=s({toc:e.children,minHeadingLevel:t,maxHeadingLevel:o});return function(e){return e.level>=t&&e.level<=o}(e)?[{...e,children:r}]:r}))}function u(e){let{toc:r,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,o.useMemo)((()=>s({toc:n(r),minHeadingLevel:t,maxHeadingLevel:a})),[r,t,a])}},40689:(e,r,t)=>{t.d(r,{c:()=>i});var o=t(27378),n=t(50353);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((r=>e.includes(r)))}const u={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,n.default)();return(0,o.useMemo)((()=>{try{return function(e){const r=new Intl.PluralRules(e);return{locale:e,pluralForms:s(r.resolvedOptions().pluralCategories),select:e=>r.select(e)}}(e)}catch(r){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${r.message}\n`),u}}),[e])}function i(){const e=l();return{selectMessage:(r,t)=>function(e,r,t){const o=e.split("|");if(1===o.length)return o[0];o.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${o.length}: ${e}`);const n=t.select(r),a=t.pluralForms.indexOf(n);return o[Math.min(a,o.length-1)]}(t,r,e)}}}}]); \ No newline at end of file diff --git a/assets/js/99b94e0d.05c3f6e9.js b/assets/js/99b94e0d.05c3f6e9.js deleted file mode 100644 index 84c03ced813..00000000000 --- a/assets/js/99b94e0d.05c3f6e9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9531],{55513:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ignore","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/99b94e0d.7fed04fe.js b/assets/js/99b94e0d.7fed04fe.js new file mode 100644 index 00000000000..1fb2d0342db --- /dev/null +++ b/assets/js/99b94e0d.7fed04fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89531],{55513:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ignore","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/9c090340.3654d782.js b/assets/js/9c090340.3654d782.js deleted file mode 100644 index aa000c28f43..00000000000 --- a/assets/js/9c090340.3654d782.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7538],{61086:e=>{e.exports=JSON.parse('{"label":"init","permalink":"/blog/tags/init","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/9c090340.836cf266.js b/assets/js/9c090340.836cf266.js new file mode 100644 index 00000000000..4c765e3faf0 --- /dev/null +++ b/assets/js/9c090340.836cf266.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87538],{61086:e=>{e.exports=JSON.parse('{"label":"init","permalink":"/blog/tags/init","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/9d3c1a44.4ff18cc8.js b/assets/js/9d3c1a44.4ff18cc8.js deleted file mode 100644 index 3abd8f0b4f8..00000000000 --- a/assets/js/9d3c1a44.4ff18cc8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5428],{77957:e=>{e.exports=JSON.parse('{"label":"index","permalink":"/blog/tags/index","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/9d3c1a44.96479d33.js b/assets/js/9d3c1a44.96479d33.js new file mode 100644 index 00000000000..990a8cbd745 --- /dev/null +++ b/assets/js/9d3c1a44.96479d33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15428],{77957:e=>{e.exports=JSON.parse('{"label":"index","permalink":"/blog/tags/index","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.997bbe44.js b/assets/js/9e4087bc.997bbe44.js new file mode 100644 index 00000000000..14afce937f5 --- /dev/null +++ b/assets/js/9e4087bc.997bbe44.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53608],{7507:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(27378),l=a(81884),n=a(99213),c=a(1123),i=a(64654);function m(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(l.default,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function s(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e)))))))}function o(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),l=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),m=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:l}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},l))),r.createElement("main",null,m.length>0&&r.createElement(s,{years:m}))))}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.eecb89b0.js b/assets/js/9e4087bc.eecb89b0.js deleted file mode 100644 index fa35ff598b9..00000000000 --- a/assets/js/9e4087bc.eecb89b0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3608],{7507:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(27378),l=a(81884),n=a(99213),c=a(1123),i=a(64654);function m(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(l.default,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function s(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e)))))))}function o(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),l=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),m=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:l}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},l))),r.createElement("main",null,m.length>0&&r.createElement(s,{years:m}))))}}}]); \ No newline at end of file diff --git a/assets/js/9e4ae2cc.62333167.js b/assets/js/9e4ae2cc.62333167.js new file mode 100644 index 00000000000..bc99d3eec5a --- /dev/null +++ b/assets/js/9e4ae2cc.62333167.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75706],{74525:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/run","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/9e4ae2cc.6eb4065e.js b/assets/js/9e4ae2cc.6eb4065e.js deleted file mode 100644 index eb43479a7e1..00000000000 --- a/assets/js/9e4ae2cc.6eb4065e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5706],{74525:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/run","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/9e528cee.4136debd.js b/assets/js/9e528cee.4136debd.js deleted file mode 100644 index c73f38f9b4c..00000000000 --- a/assets/js/9e528cee.4136debd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6633],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),m=p(n),c=o,h=m["".concat(s,".").concat(c)]||m[c]||d[c]||i;return n?a.createElement(h,l(l({ref:t},u),{},{components:n})):a.createElement(h,l({ref:t},u))}));function c(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,l=new Array(i);l[0]=m;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r.mdxType="string"==typeof e?e:o,l[1]=r;for(var p=2;p<i;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},92510:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const i={title:"WASM plugin",sidebar_label:"WASM",toc_max_heading_level:5},l=void 0,r={unversionedId:"proto/wasm-plugin",id:"proto/wasm-plugin",title:"WASM plugin",description:"Plugins can be written in WebAssembly (WASM), a portable binary format.",source:"@site/docs/proto/wasm-plugin.mdx",sourceDirName:"proto",slug:"/proto/wasm-plugin",permalink:"/docs/proto/wasm-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/wasm-plugin.mdx",tags:[],version:"current",frontMatter:{title:"WASM plugin",sidebar_label:"WASM",toc_max_heading_level:5},sidebar:"proto",previous:{title:"TOML",permalink:"/docs/proto/toml-plugin"},next:{title:"add-plugin",permalink:"/docs/proto/commands/add-plugin"}},s={},p=[{value:"Concepts",id:"concepts",level:2},{value:"Virtual paths",id:"virtual-paths",level:3},{value:"Host environment",id:"host-environment",level:3},{value:"Host functions",id:"host-functions",level:3},{value:"Tool ID and context",id:"tool-id-and-context",level:3},{value:"Create a plugin",id:"create-a-plugin",level:2},{value:"Implementing plugin functions",id:"implementing-plugin-functions",level:2},{value:"Registering metadata",id:"registering-metadata",level:3},{value:"Downloading pre-builts",id:"downloading-pre-builts",level:3},{value:"Unpacking an archive",id:"unpacking-an-archive",level:4},{value:"Locating binaries",id:"locating-binaries",level:3},{value:"Loading and resolving versions",id:"loading-and-resolving-versions",level:3},{value:"Detecting versions",id:"detecting-versions",level:3},{value:"Creating shims",id:"creating-shims",level:3},{value:"Global shims",id:"global-shims",level:4},{value:"Installing and uninstalling globals",id:"installing-and-uninstalling-globals",level:3},{value:"Testing",id:"testing",level:2},{value:"Unit tests",id:"unit-tests",level:3},{value:"Testing plugin functions",id:"testing-plugin-functions",level:4},{value:"Generating cases from macros",id:"generating-cases-from-macros",level:4},{value:"Building and publishing",id:"building-and-publishing",level:2},{value:"Manually create releases",id:"manually-create-releases",level:3},{value:"Automate releases",id:"automate-releases",level:3},{value:"Resources",id:"resources",level:2}],u={toc:p};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Plugins can be written in ",(0,o.kt)("a",{parentName:"p",href:"https://webassembly.org/"},"WebAssembly (WASM)"),", a portable binary format.\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\nTypeScript, and more. Because WASM based plugins are powered by a programming language, they\nimplicitly support complex business logic and behavior, have access to a sandboxed file system (via\nWASI), can execute child processes, and much more."),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Since our WASM plugin implementation is still experimental, expect breaking changes to occur in\nnon-major releases.")),(0,o.kt)("h2",{id:"concepts"},"Concepts"),(0,o.kt)("p",null,"Before we begin, let's talk about a few concepts that are critical to WASM and our plugin system."),(0,o.kt)("h3",{id:"virtual-paths"},"Virtual paths"),(0,o.kt)("p",null,"WASM by default does not have access to the host file system, but through ",(0,o.kt)("a",{parentName:"p",href:"https://wasi.dev/"},"WASI"),",\nwe can provide sandboxed access to a pre-defined list of allowed directories. We call this\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/enum.VirtualPath.html"},"virtual paths"),", and all paths\nprovided via function input or context use them."),(0,o.kt)("p",null,"Virtual paths are implemented by mapping a real path (host machine) to a virtual path (guest\nruntime) using file path prefixes. The following prefixes are currently supported:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Real path"),(0,o.kt)("th",{parentName:"tr",align:null},"Virtual path"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"~")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"/home"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"~/.proto")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"/proto"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"CWD"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"/workspace"))))),(0,o.kt)("p",null,"For example, from the context of WASM, you may have a virtual path of ",(0,o.kt)("inlineCode",{parentName:"p"},"/proto/tools/node/1.2.3"),",\nwhich simply maps back to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/node/1.2.3")," on the host machine. However, this should\nalmost always be transparent to you, the developer, and to end users."),(0,o.kt)("p",null,"However, there may be a few cases where you need access to the real path from WASM, for example,\nlogging or executing commands. For this, the real path can be accessed with the\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/enum.VirtualPath.html#method.real_path"},(0,o.kt)("inlineCode",{parentName:"a"},"real_path")),"\nfunction on the ",(0,o.kt)("inlineCode",{parentName:"p"},"VirtualPath")," enum (this is a Rust only feature)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"input.tool_dir.real_path();\n")),(0,o.kt)("h3",{id:"host-environment"},"Host environment"),(0,o.kt)("p",null,"Since WASM executes in its own runtime, it ",(0,o.kt)("em",{parentName:"p"},"does not")," have access to the current host operating\nsystem, architecture, so on and so forth. To bridge this gap, we provide the\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/fn.get_proto_environment.html"},(0,o.kt)("inlineCode",{parentName:"a"},"get_proto_environment")),"\nfunction.\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/struct.HostEnvironment.html"},"Learn more about this type"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"let env = get_proto_environment()?;\n")),(0,o.kt)("p",null,"The host operating system and architecture can be accessed with ",(0,o.kt)("inlineCode",{parentName:"p"},"os")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"arch")," fields respectively.\nBoth fields are an enum in Rust, or a string in other languages."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"if env.os == HostOS::Windows {\n // Windows only\n}\n\nif env.arch == HostArch::Arm64 {\n // aarch64 only\n}\n")),(0,o.kt)("p",null,"Furthermore, the user's home directory (",(0,o.kt)("inlineCode",{parentName:"p"},"~"),") and proto's root directory (",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto"),") can be accessed\nwith the ",(0,o.kt)("inlineCode",{parentName:"p"},"home_dir")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"proto_dir")," fields, both of which are ",(0,o.kt)("a",{parentName:"p",href:"#virtual-paths"},"virtual paths"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"if env.home_dir.join(some_path).exists() {\n // Do something\n}\n")),(0,o.kt)("h3",{id:"host-functions"},"Host functions"),(0,o.kt)("p",null,"WASM is pretty powerful but it can't do everything since it's sandboxed. To work around this, we\nprovide a mechanism known as host functions, which are functions that are implemented on the host\n(in Rust), and can be executed from WASM. The following host functions are currently available:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/latest/proto_pdk/macro.exec_command.html"},(0,o.kt)("inlineCode",{parentName:"a"},"exec_command"))," - Execute a\nsystem command on the host machine, with a provided list of arguments or environment variables."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/latest/proto_pdk/macro.host_log.html"},(0,o.kt)("inlineCode",{parentName:"a"},"host_log"))," - Log a message to\nthe host's stderr. This acts like tracing logs, and is not a general purpose stdout logger.")),(0,o.kt)("p",null,"To use host functions, you'll need to make them available by registering them at the top of your\nRust file (only add the functions you want to use)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[host_fn]\nextern "ExtismHost" {\n fn exec_command(input: Json<ExecCommandInput>) -> Json<ExecCommandOutput>;\n fn host_log(input: Json<HostLogInput>);\n}\n')),(0,o.kt)("p",null,"And then calling the provided ",(0,o.kt)("inlineCode",{parentName:"p"},"exec_command!")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"host_log!")," macros. Each macro supports shorthand\nvariants, and an explicit variant that accepts the input struct."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'exec_command!("which", ["node"]);\nexec_command!(pipe, "npm", ["install"]); // Pipe stdout/stderr\nexec_command!(inherit, "npm", ["install"]); // Inherit stdout/stderr\nexec_command!(ExecCommandInput {\n command: "npm".into(),\n args: vec!["install".into()],\n env_vars: HashMap::new(),\n stream: false,\n});\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'host_log!("Some message");\nhost_log!("Some message with {}", "args");\nhost_log!(HostLogInput::Fields {\n message: "Some message with data".into(),\n data: HashMap::from_iter([\n ("data".into(), serde_json::to_value(data)?),\n ]),\n});\n')),(0,o.kt)("h3",{id:"tool-id-and-context"},"Tool ID and context"),(0,o.kt)("p",null,"When implementing plugin functions, you'll need to access information about the current tool. To get\nthe current tool ID (the key the plugin was configured with), use the\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/fn.get_tool_id.html"},(0,o.kt)("inlineCode",{parentName:"a"},"get_tool_id"))," function."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"let id = get_tool_id();\n")),(0,o.kt)("p",null,"Additionally, we also provide what we call the tool context, which is information that is constantly\nchanging depending on the current step or state of proto's execution. The context cannot be accessed\nwith a stand-alone function, and is instead passed as a ",(0,o.kt)("inlineCode",{parentName:"p"},"context")," field in the input of many plugin\nfunctions."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {\n let version = input.context.version;\n // ...\n}\n")),(0,o.kt)("p",null,"The following fields are available on the\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/struct.ToolContext.html"},"context object"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"env_vars")," - A map of environment variables requested by the\n",(0,o.kt)("a",{parentName:"li",href:"#registering-metadata"},(0,o.kt)("inlineCode",{parentName:"a"},"register_tool"))," function."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"tool_dir")," - A virtual path to the tool's directory for the current version."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"version"),' - The current version or alias. If not resolved, will be "latest".')),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"version"),' field is either a fully-qualified semantic version (1.2.3), an alias ("latest",\n"stable"), or canary ("canary"). Be sure to account for all these variations when implementing\nplugin functions!')),(0,o.kt)("h2",{id:"create-a-plugin"},"Create a plugin"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Although plugins can be written in any language that compiles to WASM, we've only tested Rust. The\nrest of this article assume you're using Rust and Cargo! Refer to ",(0,o.kt)("a",{parentName:"p",href:"https://extism.org/"},"Extism"),"'s\ndocumentation or our official ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/node-plugin"},"Node.js plugin")," for other\nexamples.")),(0,o.kt)("p",null,"To start, create a new crate with Cargo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo new plugin --lib\ncd plugin\n")),(0,o.kt)("p",null,"And set the lib type to ",(0,o.kt)("inlineCode",{parentName:"p"},"cdylib"),", and other settings."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="Cargo.toml"',title:'"Cargo.toml"'},"[lib]\ncrate-type = ['cdylib']\n\n[profile.release]\ncodegen-units = 1\nlto = true\n")),(0,o.kt)("p",null,"Our Rust plugins are powered by ",(0,o.kt)("a",{parentName:"p",href:"https://extism.org/"},"Extism"),", so lets add their PDK and ours as a\ndependency."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo add extism-pdk proto_pdk\n")),(0,o.kt)("p",null,"In all Rust files, we can import both PDKs with the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="src/lib.rs"',title:'"src/lib.rs"'},"use extism_pdk::*;\nuse proto_pdk::*;\n")),(0,o.kt)("p",null,"We can then build the WASM binary. The file will be available at\n",(0,o.kt)("inlineCode",{parentName:"p"},"target/wasm32-wasi/debug/<name>.wasm"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo install cargo-wasi\ncargo wasi build\n")),(0,o.kt)("h2",{id:"implementing-plugin-functions"},"Implementing plugin functions"),(0,o.kt)("p",null,"Plugins are powered by a set of functions that are called from the host, and are annotated with\n",(0,o.kt)("inlineCode",{parentName:"p"},"#[plugin_fn]"),"."),(0,o.kt)("h3",{id:"registering-metadata"},"Registering metadata"),(0,o.kt)("p",null,"The first step in a plugin's life-cycle is to register metadata about the plugin with the\n",(0,o.kt)("inlineCode",{parentName:"p"},"register_tool")," function. This function is called immediately after a plugin is loaded at runtime,\nand must return a human-readable name and plugin type."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn register_tool(_: ()) -> FnResult<Json<ToolMetadataOutput>> {\n Ok(Json(ToolMetadataOutput {\n name: "Node.js".into(),\n type_of: PluginType::Language,\n plugin_version: Some(env!("CARGO_PKG_VERSION").into()),\n ..ToolMetadataOutput::default()\n }))\n}\n')),(0,o.kt)("p",null,"This function also receives the plugin ID as input, allowing for conditional logic based on the ID.\nThe ID is the ",(0,o.kt)("a",{parentName:"p",href:"#enabling-plugins"},"key the plugin was configured with"),", and what is passed to ",(0,o.kt)("inlineCode",{parentName:"p"},"proto"),"\ncommands (e.g. ",(0,o.kt)("inlineCode",{parentName:"p"},"proto install <id>"),")."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn register_tool(Json(input): Json<ToolMetadataInput>) -> FnResult<Json<ToolMetadataOutput>> {\n input.id\n // ...\n}\n")),(0,o.kt)("h3",{id:"downloading-pre-builts"},"Downloading pre-builts"),(0,o.kt)("p",null,"Our plugin layer ",(0,o.kt)("em",{parentName:"p"},"only")," supports downloading pre-built tools, typically as an archive, and does\n",(0,o.kt)("em",{parentName:"p"},"not")," support building from source. The ",(0,o.kt)("inlineCode",{parentName:"p"},"download_prebuilt")," function ",(0,o.kt)("em",{parentName:"p"},"must")," be defined, whichs\nconfigures how the tool should be downloaded and installed."),(0,o.kt)("p",null,"The following fields are available:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"archive_prefix")," - If the tool is distributed as an archive (zip, tar, etc), this is the name of\nthe direct folder within the archive that contains the tool, and will be removed when unpacking\nthe archive. If there is no prefix folder within the archive, this setting can be omitted."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"download_url")," (required) - A secure URL to download the tool/archive."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"download_name")," - File name of the archive to download. If not provided, will attempt to extract\nit from the URL."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"checksum_url")," - A secure URL to download the checksum file for verification. If the tool does not\nsupport checksum verification, this setting can be omitted.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {\n let env = get_proto_environment()?;\n\n check_supported_os_and_arch(\n NAME,\n &env,\n permutations! [\n HostOS::Linux => [HostArch::X64, HostArch::Arm64, HostArch::Arm, HostArch::Powerpc64, HostArch::S390x],\n HostOS::MacOS => [HostArch::X64, HostArch::Arm64],\n HostOS::Windows => [HostArch::X64, HostArch::X86, HostArch::Arm64],\n ],\n )?;\n\n let version = input.context.version;\n let arch = env.arch;\n let os = env.os;\n\n let prefix = match os {\n HostOS::Linux => format!("node-v{version}-linux-{arch}"),\n HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),\n HostOS::Windows => format!("node-v{version}-win-{arch}"),\n other => {\n return Err(PluginError::UnsupportedPlatform("Node.js".into(), other.into()))?;\n }\n };\n\n let filename = if os == HostOS::Windows {\n format!("{prefix}.zip")\n } else {\n format!("{prefix}.tar.xz")\n };\n\n Ok(Json(DownloadPrebuiltOutput {\n archive_prefix: Some(prefix),\n download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),\n download_name: Some(filename),\n checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),\n ..DownloadPrebuiltOutput::default()\n }))\n}\n')),(0,o.kt)("h4",{id:"unpacking-an-archive"},"Unpacking an archive"),(0,o.kt)("p",null,"Our plugin layer will do its best to detect file extensions, unpack the downloaded file (if an\narchive), and install the tool to the correct directory. However, we're unable to account for ",(0,o.kt)("em",{parentName:"p"},"all"),"\nedge cases, so for situations where the install params above are not sufficient, you may define an\n",(0,o.kt)("inlineCode",{parentName:"p"},"unpack_archive")," function."),(0,o.kt)("p",null,"This function receives an input with the following fields:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"input_file")," - Virtual path to the downloaded file. Maps to ",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/temp/<id>/<file>"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"output_dir")," - Virtual directory to unpack the archive into, or copy the binary to. Maps to\n",(0,o.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/<id>/<version>"),".")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn unpack_archive(Json(input): Json<UnpackArchiveInput>) -> FnResult<()> {\n untar(input.input_file, input.output_dir)?;\n Ok(())\n}\n")),(0,o.kt)("h3",{id:"locating-binaries"},"Locating binaries"),(0,o.kt)("p",null,"Even though a tool has been installed, we must inform proto of where to find the binary to execute.\nThis can be achieved with the optional ",(0,o.kt)("inlineCode",{parentName:"p"},"locate_bins")," function. If this function is not defined,\nproto will assume the binary is named ",(0,o.kt)("inlineCode",{parentName:"p"},"<id>")," (",(0,o.kt)("inlineCode",{parentName:"p"},"<id>.exe")," on Windows), relative from the installation\ndirectory."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn locate_bins(Json(_): Json<LocateBinsInput>) -> FnResult<Json<LocateBinsOutput>> {\n let env = get_proto_environment()?;\n\n Ok(Json(LocateBinsOutput {\n bin_path: Some(if env.os == HostOS::Windows {\n "node.exe".into()\n } else {\n "bin/node".into()\n }),\n ..LocateBinsOutput::default()\n }))\n}\n')),(0,o.kt)("p",null,"Furthermore, the ",(0,o.kt)("inlineCode",{parentName:"p"},"locate_bins")," function can define a list of lookups for the globals installation\ndirectory. proto will loop through each lookup, and return the first directory that exists on the\ncurrent file system. proto will also expand environment variables in the format of ",(0,o.kt)("inlineCode",{parentName:"p"},"$VAR_NAME"),". If a\nvariable is not defined, or has an empty value, the lookup will be skipped. To demonstrate this,\nwe'll use ",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/manual@v1.35.0/tools/script_installer"},"Deno"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn locate_bins(Json(_): Json<LocateBinsInput>) -> FnResult<Json<LocateBinsOutput>> {\n Ok(Json(LocateBinsOutput {\n fallback_last_globals_dir: true,\n globals_lookup_dirs: vec!["$DENO_INSTALL_ROOT/bin".into(), "$HOME/.deno/bin".into()],\n ..LocateBinsOutput::default()\n }))\n}\n')),(0,o.kt)("h3",{id:"loading-and-resolving-versions"},"Loading and resolving versions"),(0,o.kt)("p",null,"Now that the tool can be downloaded and installed, we must configure how to resolve available\nversions to actually be installed. To provide a list of versions and language specific aliases, the\n",(0,o.kt)("inlineCode",{parentName:"p"},"load_versions")," function must be defined."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn load_versions(Json(_): Json<LoadVersionsInput>) -> FnResult<Json<LoadVersionsOutput>> {\n let mut output = LoadVersionsOutput::default();\n let response: Vec<NodeDistVersion> = fetch_url("https://nodejs.org/dist/index.json")?;\n\n for (index, item) in response.iter().enumerate() {\n let version = Version::parse(&item.version[1..])?; // Starts with v\n\n if index == 0 {\n output.latest = Some(version.clone());\n }\n\n output.versions.push(version);\n }\n\n Ok(Json(output))\n}\n')),(0,o.kt)("p",null,"Furthermore, we support an optional function named ",(0,o.kt)("inlineCode",{parentName:"p"},"resolve_version"),", that can be defined to\nintercept the version resolution process. This function receives an input with an initial candidate,\neither an alias or version, and can replace it with a new candidate. The candidate must be a valid\nalias or version as defined in ",(0,o.kt)("inlineCode",{parentName:"p"},"load_versions"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn resolve_version(\n Json(input): Json<ResolveVersionInput>,\n) -> FnResult<Json<ResolveVersionOutput>> {\n let mut output = ResolveVersionOutput::default();\n\n if input.initial == "node" {\n output.candidate = Some("latest".into());\n\n } else if input.initial == "lts-*" || input.initial == "lts/*" {\n output.candidate = Some("stable".into());\n\n } else if input.initial.starts_with("lts-") || input.initial.starts_with("lts/") {\n output.candidate = Some(input.initial[4..].to_owned());\n }\n\n Ok(Json(output))\n}\n')),(0,o.kt)("h3",{id:"detecting-versions"},"Detecting versions"),(0,o.kt)("p",null,"And lastly, we can configure how to ",(0,o.kt)("a",{parentName:"p",href:"./detection"},"detect a version")," contextually at runtime, using\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"detect_version_files")," function and optional ",(0,o.kt)("inlineCode",{parentName:"p"},"parse_version_file")," function. The\n",(0,o.kt)("inlineCode",{parentName:"p"},"detect_version_files")," function can return a list of files to locate within a directory."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn detect_version_files(_: ()) -> FnResult<Json<DetectVersionOutput>> {\n Ok(Json(DetectVersionOutput {\n files: vec![\n ".nvmrc".into(),\n ".node-version".into(),\n "package.json".into(),\n ],\n }))\n}\n')),(0,o.kt)("p",null,'By default our plugin layer will assume the version file\'s contents contain the literal version, and\nnothing else, like "1.2.3". If any of the files in the ',(0,o.kt)("inlineCode",{parentName:"p"},"detect_version_files")," list require custom\nparsing (for example, ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," above), you can define the ",(0,o.kt)("inlineCode",{parentName:"p"},"parse_version_file")," function."),(0,o.kt)("p",null,"This function receives the file name and contents as input, and must return the parsed version (if\napplicable)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn parse_version_file(Json(input): Json<ParseVersionFileInput>) -> FnResult<Json<ParseVersionFileOutput>> {\n let mut version = None;\n\n if input.file == "package.json" {\n let json: PackageJson = serde_json::from_str(&input.content)?;\n\n if let Some(engines) = json.engines {\n if let Some(constraint) = engines.get("node") {\n version = Some(constraint.to_owned());\n }\n }\n } else {\n version = Some(input.content.trim().to_owned());\n }\n\n Ok(Json(ParseVersionFileOutput { version }))\n}\n')),(0,o.kt)("h3",{id:"creating-shims"},"Creating shims"),(0,o.kt)("p",null,"Tools within proto wouldn't function without shims, and as such, plugins can register their own\nshims to be created. By default, proto ",(0,o.kt)("em",{parentName:"p"},"will always")," create a global shim of the plugin at\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin/<id>"),", but you can also register additional shims with the ",(0,o.kt)("inlineCode",{parentName:"p"},"create_shims")," function."),(0,o.kt)("h4",{id:"global-shims"},"Global shims"),(0,o.kt)("p",null,"Global shims are optional scripts that are available on ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," as they are generated in the\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," directory, and can be defined with the ",(0,o.kt)("inlineCode",{parentName:"p"},"global_shims")," parameter. This param is a hash\nmap, where the key is the shim file name, and the value is a configuration object."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn create_shims(Json(_): Json<CreateShimsInput>) -> FnResult<Json<CreateShimsOutput>> {\n let env = get_proto_environment()?;\n let mut global_shims = HashMap::new();\n\n global_shims.insert(\n "npx".into(),\n ShimConfig::global_with_alt_bin(if env.os == HostOS::Windows {\n "npx.cmd".into()\n } else {\n "bin/npx".into()\n }),\n );\n\n Ok(Json(CreateShimsOutput {\n global_shims,\n ..CreateShimsOutput::default()\n }))\n}\n')),(0,o.kt)("p",null,"Furthermore, if you'd prefer to ",(0,o.kt)("em",{parentName:"p"},"not")," create a primary global shim at all, enable the\n",(0,o.kt)("inlineCode",{parentName:"p"},"no_primary_global")," field."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn create_shims(Json(_): Json<CreateShimsInput>) -> FnResult<Json<CreateShimsOutput>> {\n Ok(Json(CreateShimsOutput {\n no_primary_global: true,\n ..CreateShimsOutput::default()\n }))\n}\n")),(0,o.kt)("h3",{id:"installing-and-uninstalling-globals"},"Installing and uninstalling globals"),(0,o.kt)("p",null,"Most languages support the concept of installing packages/dependencies globally, and making them\navailable on ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),". proto supports this with the\n",(0,o.kt)("a",{parentName:"p",href:"./commands/install-global"},(0,o.kt)("inlineCode",{parentName:"a"},"proto install-global"))," and\n",(0,o.kt)("a",{parentName:"p",href:"./commands/uninstall-global"},(0,o.kt)("inlineCode",{parentName:"a"},"proto uninstall-global"))," commands, which are simple convenience\nwrappers around the native binary."),(0,o.kt)("p",null,"From the context of the plugin, how globals are installed and uninstalled is implemented with the\n",(0,o.kt)("inlineCode",{parentName:"p"},"install_global")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"uninstall_global")," functions respectively. Both functions receive the\n",(0,o.kt)("inlineCode",{parentName:"p"},"dependency")," to install as input."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn install_global(\n Json(input): Json<InstallGlobalInput>,\n) -> FnResult<Json<InstallGlobalOutput>> {\n let result = exec_command!(inherit, "npm", ["install", "--global", &input.dependency]);\n\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\n}\n\n#[plugin_fn]\npub fn uninstall_global(\n Json(input): Json<UninstallGlobalInput>,\n) -> FnResult<Json<UninstallGlobalOutput>> {\n let result = exec_command!(inherit, "npm", ["uninstall", "--global", &input.dependency]);\n\n Ok(Json(UninstallGlobalOutput::from_exec_command(result)))\n}\n')),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"The best way to test the plugin is to execute it through ",(0,o.kt)("inlineCode",{parentName:"p"},"proto")," directly. To do this, you'll need\nto configure a ",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," file at the root of your plugin's repository that maps the plugin to a\ndebug build:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-toml"},'[plugins]\n<id> = "source:target/wasm32-wasi/debug/<name>.wasm"\n')),(0,o.kt)("p",null,"And everytime you make a change to the plugin, you'll need to rebuild it with:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo wasi build\n")),(0,o.kt)("p",null,"With these 2 pieces in place, you can now execute ",(0,o.kt)("inlineCode",{parentName:"p"},"proto")," commands. Be sure you're running them from\nthe directory with the ",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," file, and that you're passing ",(0,o.kt)("inlineCode",{parentName:"p"},"--log trace"),". Logs are extremely\nhelpful for figuring out what's going on."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"proto --log trace install <id>\nproto --log trace list-remote <id>\n...\n")),(0,o.kt)("h3",{id:"unit-tests"},"Unit tests"),(0,o.kt)("p",null,"Testing WASM plugins is a bit tricky, but we've taken it upon ourselves to streamline this process\nas much as possible with built-in test utilities, and Rust macros for generating common test cases.\nTo begin, install all necessary development dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo add --dev proto_pdk_test_utils starbase_sandbox tokio\n")),(0,o.kt)("p",null,"And as mentioned above, everytime you make a change to the plugin, you'll need to rebuild it with:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo wasi build\n")),(0,o.kt)("h4",{id:"testing-plugin-functions"},"Testing plugin functions"),(0,o.kt)("p",null,"The common test case is simply calling plugin functions with a provided input and asserting the\noutput is correct. This can be achieved by creating a plugin instance with ",(0,o.kt)("inlineCode",{parentName:"p"},"create_plugin")," and\ncalling the appropriate method."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'use proto_pdk_test_utils::*;\nuse starbase_sandbox::create_empty_sandbox;\n\n#[test]\nfn registers_metadata() {\n let sandbox = create_empty_sandbox();\n let plugin = create_plugin("id", sandbox.path());\n\n assert_eq!(\n plugin.register_tool(ToolMetadataInput::default()),\n ToolMetadataOutput {\n name: "Name".into(),\n ..ToolMetadataOutput::default()\n }\n );\n}\n')),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"We suggest using this pattern for static functions that return a deterministic output from a\nprovided input, and not for dynamic functions that make HTTP requests or execute host commands.")),(0,o.kt)("h4",{id:"generating-cases-from-macros"},"Generating cases from macros"),(0,o.kt)("p",null,"To reduce the burden of writing custom tests for common flows, like downloading a pre-built,\nresolving versions, and generating shims, we provide a set of Rust decl macros that will generate\nthe tests for you."),(0,o.kt)("p",null,"To test downloading and installing, use ",(0,o.kt)("inlineCode",{parentName:"p"},"generate_download_install_tests!"),". This macro requires a\nplugin ID and a real version to test with."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'use proto_pdk_test_utils::*;\n\ngenerate_download_install_tests!("id", "1.2.3");\n')),(0,o.kt)("p",null,"To test version resolving, use ",(0,o.kt)("inlineCode",{parentName:"p"},"generate_resolve_versions_tests!"),". This macro requires a plugin ID,\nand a mapping of version/aliases assertions to expectations."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'generate_resolve_versions_tests!("id", {\n "0.4" => "0.4.12",\n "0.5.1" => "0.5.1",\n "stable" => "1.0.0",\n});\n')),(0,o.kt)("p",null,"To test installing and uninstalling globals, use ",(0,o.kt)("inlineCode",{parentName:"p"},"generate_globals_test!"),". This macro requires a\nplugin ID, the dependency to install, and an optional environment variable to the globals directory."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'// Doesn\'t support all use cases! If this doesn\'t work, implement a test case manually.\ngenerate_globals_test!("id", "dependency", "GLOBAL_INSTALL_ROOT");\n')),(0,o.kt)("p",null,"And lastly, to test shims, use ",(0,o.kt)("inlineCode",{parentName:"p"},"generate_global_shims_test!")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"generate_local_shims_test!"),". Both\nmacros require a plugin ID, but also support additional arguments when creating more than 1 shim.\nThese macros generate snapshots using ",(0,o.kt)("a",{parentName:"p",href:"https://insta.rs/"},"Insta"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-rust"},'// Only the single binary\ngenerate_global_shims_test!("id");\n\n// When creating alternate/additional globals\ngenerate_global_shims_test!("id", ["other", "another"]);\n\n// When creating local shims, each file required in the list\ngenerate_local_shims_test!("id", ["a", "b", "c"]);\n')),(0,o.kt)("h2",{id:"building-and-publishing"},"Building and publishing"),(0,o.kt)("p",null,"At this point, you should have a fully working WASM plugin, but to make it available to downstream\nproto users, you'll still need to build and make the ",(0,o.kt)("inlineCode",{parentName:"p"},".wasm")," file available. The easiest solution is\nto publish a GitHub release and include the ",(0,o.kt)("inlineCode",{parentName:"p"},".wasm")," file as an asset."),(0,o.kt)("h3",{id:"manually-create-releases"},"Manually create releases"),(0,o.kt)("p",null,"When your plugin is ready to be published, you can create a release on GitHub using the following\nsteps."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Tag the release and push to GitHub.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git tag v0.0.1\ngit push --tags\n")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Build a release version of the plugin. The file will be available at\n",(0,o.kt)("inlineCode",{parentName:"li"},"target/wasm32-wasi/release/<name>.wasm"),".")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cargo wasi build --release\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"In GitHub, navigate to the tags page, find the new tag, create a new release, and attach the\nbuilt file as an asset.")),(0,o.kt)("h3",{id:"automate-releases"},"Automate releases"),(0,o.kt)("p",null,"Coming soon!"),(0,o.kt)("h2",{id:"resources"},"Resources"),(0,o.kt)("p",null,"Some helpful resources for learning about and building plugins."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Official proto WASM plugins",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/bun-plugin"},"Bun")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/deno-plugin"},"Deno")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/go-plugin"},"Go")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"Node")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"npm, pnpm, yarn")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/python-plugin"},"Python")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/rust-plugin"},"Rust")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/schema-plugin"},"Schema")))),(0,o.kt)("li",{parentName:"ul"},"Plugin development kit",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/"},(0,o.kt)("inlineCode",{parentName:"a"},"proto_pdk")," docs")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk_test_utils/"},(0,o.kt)("inlineCode",{parentName:"a"},"proto_pdk_test_utils")," docs"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e528cee.7dbc7d65.js b/assets/js/9e528cee.7dbc7d65.js new file mode 100644 index 00000000000..a9e54a5a862 --- /dev/null +++ b/assets/js/9e528cee.7dbc7d65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6633],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),m=p(n),c=i,h=m["".concat(s,".").concat(c)]||m[c]||d[c]||o;return n?a.createElement(h,l(l({ref:t},u),{},{components:n})):a.createElement(h,l({ref:t},u))}));function c(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=m;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r.mdxType="string"==typeof e?e:i,l[1]=r;for(var p=2;p<o;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},92510:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={title:"WASM plugin",sidebar_label:"WASM",toc_max_heading_level:5},l=void 0,r={unversionedId:"proto/wasm-plugin",id:"proto/wasm-plugin",title:"WASM plugin",description:"Plugins can be written in WebAssembly (WASM), a portable binary format.",source:"@site/docs/proto/wasm-plugin.mdx",sourceDirName:"proto",slug:"/proto/wasm-plugin",permalink:"/docs/proto/wasm-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/wasm-plugin.mdx",tags:[],version:"current",frontMatter:{title:"WASM plugin",sidebar_label:"WASM",toc_max_heading_level:5},sidebar:"proto",previous:{title:"TOML",permalink:"/docs/proto/toml-plugin"},next:{title:"add-plugin",permalink:"/docs/proto/commands/add-plugin"}},s={},p=[{value:"Concepts",id:"concepts",level:2},{value:"Virtual paths",id:"virtual-paths",level:3},{value:"Host environment",id:"host-environment",level:3},{value:"Host functions",id:"host-functions",level:3},{value:"Environment variables",id:"environment-variables",level:4},{value:"Executing commands",id:"executing-commands",level:4},{value:"Logging",id:"logging",level:4},{value:"Tool ID and context",id:"tool-id-and-context",level:3},{value:"Create a plugin",id:"create-a-plugin",level:2},{value:"Implementing plugin functions",id:"implementing-plugin-functions",level:2},{value:"Registering metadata",id:"registering-metadata",level:3},{value:"Downloading pre-builts",id:"downloading-pre-builts",level:3},{value:"Unpacking an archive",id:"unpacking-an-archive",level:4},{value:"Locating binaries",id:"locating-binaries",level:3},{value:"Loading and resolving versions",id:"loading-and-resolving-versions",level:3},{value:"Detecting versions",id:"detecting-versions",level:3},{value:"Creating shims",id:"creating-shims",level:3},{value:"Global shims",id:"global-shims",level:4},{value:"Installing and uninstalling globals",id:"installing-and-uninstalling-globals",level:3},{value:"Testing",id:"testing",level:2},{value:"Unit tests",id:"unit-tests",level:3},{value:"Testing plugin functions",id:"testing-plugin-functions",level:4},{value:"Generating cases from macros",id:"generating-cases-from-macros",level:4},{value:"Building and publishing",id:"building-and-publishing",level:2},{value:"Building, optimizing, and stripping",id:"building-optimizing-and-stripping",level:3},{value:"Manually create releases",id:"manually-create-releases",level:3},{value:"Automate releases",id:"automate-releases",level:3},{value:"Resources",id:"resources",level:2}],u={toc:p};function d(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Plugins can be written in ",(0,i.kt)("a",{parentName:"p",href:"https://webassembly.org/"},"WebAssembly (WASM)"),", a portable binary format.\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\nTypeScript, and more. Because WASM based plugins are powered by a programming language, they\nimplicitly support complex business logic and behavior, have access to a sandboxed file system (via\nWASI), can execute child processes, and much more."),(0,i.kt)("admonition",{type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"Since our WASM plugin implementation is still experimental, expect breaking changes to occur in\nnon-major releases.")),(0,i.kt)("h2",{id:"concepts"},"Concepts"),(0,i.kt)("p",null,"Before we begin, let's talk about a few concepts that are critical to WASM and our plugin system."),(0,i.kt)("h3",{id:"virtual-paths"},"Virtual paths"),(0,i.kt)("p",null,"WASM by default does not have access to the host file system, but through ",(0,i.kt)("a",{parentName:"p",href:"https://wasi.dev/"},"WASI"),",\nwe can provide sandboxed access to a pre-defined list of allowed directories. We call this\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/enum.VirtualPath.html"},"virtual paths"),", and all paths\nprovided via function input or context use them."),(0,i.kt)("p",null,"Virtual paths are implemented by mapping a real path (host machine) to a virtual path (guest\nruntime) using file path prefixes. The following prefixes are currently supported:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Real path"),(0,i.kt)("th",{parentName:"tr",align:null},"Virtual path"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"~")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"/home"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"~/.proto")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"/proto"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"CWD"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"/workspace"))))),(0,i.kt)("p",null,"For example, from the context of WASM, you may have a virtual path of ",(0,i.kt)("inlineCode",{parentName:"p"},"/proto/tools/node/1.2.3"),",\nwhich simply maps back to ",(0,i.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/node/1.2.3")," on the host machine. However, this should\nalmost always be transparent to you, the developer, and to end users."),(0,i.kt)("p",null,"However, there may be a few cases where you need access to the real path from WASM, for example,\nlogging or executing commands. For this, the real path can be accessed with the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/enum.VirtualPath.html#method.real_path"},(0,i.kt)("inlineCode",{parentName:"a"},"real_path")),"\nfunction on the ",(0,i.kt)("inlineCode",{parentName:"p"},"VirtualPath")," enum (this is a Rust only feature)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"input.tool_dir.real_path();\n")),(0,i.kt)("h3",{id:"host-environment"},"Host environment"),(0,i.kt)("p",null,"Since WASM executes in its own runtime, it ",(0,i.kt)("em",{parentName:"p"},"does not")," have access to the current host operating\nsystem, architecture, so on and so forth. To bridge this gap, we provide the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/fn.get_proto_environment.html"},(0,i.kt)("inlineCode",{parentName:"a"},"get_proto_environment")),"\nfunction.\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/struct.HostEnvironment.html"},"Learn more about this type"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"let env = get_proto_environment()?;\n")),(0,i.kt)("p",null,"The host operating system and architecture can be accessed with ",(0,i.kt)("inlineCode",{parentName:"p"},"os")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"arch")," fields respectively.\nBoth fields are an enum in Rust, or a string in other languages."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"if env.os == HostOS::Windows {\n // Windows only\n}\n\nif env.arch == HostArch::Arm64 {\n // aarch64 only\n}\n")),(0,i.kt)("p",null,"Furthermore, the user's home directory (",(0,i.kt)("inlineCode",{parentName:"p"},"~"),") and proto's root directory (",(0,i.kt)("inlineCode",{parentName:"p"},"~/.proto"),") can be accessed\nwith the ",(0,i.kt)("inlineCode",{parentName:"p"},"home_dir")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"proto_dir")," fields, both of which are ",(0,i.kt)("a",{parentName:"p",href:"#virtual-paths"},"virtual paths"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"if env.home_dir.join(some_path).exists() {\n // Do something\n}\n")),(0,i.kt)("h3",{id:"host-functions"},"Host functions"),(0,i.kt)("p",null,"WASM is pretty powerful but it can't do everything since it's sandboxed. To work around this, we\nprovide a mechanism known as host functions, which are functions that are implemented on the host\n(in Rust), and can be executed from WASM. The following host functions are currently available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/latest/proto_pdk/macro.exec_command.html"},(0,i.kt)("inlineCode",{parentName:"a"},"exec_command"))," - Execute a\nsystem command on the host machine, with a provided list of arguments or environment variables."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/latest/proto_pdk/macro.host_env.html"},(0,i.kt)("inlineCode",{parentName:"a"},"get_env_var"))," - Get an\nenvironment variable value from the host environment."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/latest/proto_pdk/macro.host_log.html"},(0,i.kt)("inlineCode",{parentName:"a"},"host_log"))," - Log a message to\nthe host's stderr. This acts like tracing logs, and is not a general purpose stdout logger."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/latest/proto_pdk/macro.host_env.html"},(0,i.kt)("inlineCode",{parentName:"a"},"set_env_var"))," - Set an\nenvironment variable to the host environment.")),(0,i.kt)("p",null,"To use host functions, you'll need to make them available by registering them at the top of your\nRust file (only add the functions you want to use)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[host_fn]\nextern "ExtismHost" {\n fn exec_command(input: Json<ExecCommandInput>) -> Json<ExecCommandOutput>;\n fn get_env_var(key: &str) -> String;\n fn host_log(input: Json<HostLogInput>);\n fn set_env_var(key: &str, value: &str);\n}\n')),(0,i.kt)("h4",{id:"environment-variables"},"Environment variables"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'// Set a value\nhost_env!("ENV_VAR", "value");\n\n// Get a value (returns an `Option`)\nlet value = host_env!("ENV_VAR");\n')),(0,i.kt)("h4",{id:"executing-commands"},"Executing commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'// Pipe stdout/stderr\nlet result = exec_command!("which", ["node"]);\nlet result = exec_command!(pipe, "npm", ["install"]);\n\n// Inherit stdout/stderr\nexec_command!(inherit, "npm", ["install"]);\n\n// Full control\nexec_command!(ExecCommandInput {\n command: "npm".into(),\n args: vec!["install".into()],\n env_vars: HashMap::new(),\n stream: false,\n});\n')),(0,i.kt)("h4",{id:"logging"},"Logging"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'host_log!("Some message");\nhost_log!("Some message with {}", "args");\n\n// With data\nhost_log!(HostLogInput::Fields {\n message: "Some message with data".into(),\n data: HashMap::from_iter([\n ("data".into(), serde_json::to_value(data)?),\n ]),\n});\n')),(0,i.kt)("h3",{id:"tool-id-and-context"},"Tool ID and context"),(0,i.kt)("p",null,"When implementing plugin functions, you'll need to access information about the current tool. To get\nthe current tool ID (the key the plugin was configured with), use the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/fn.get_tool_id.html"},(0,i.kt)("inlineCode",{parentName:"a"},"get_tool_id"))," function."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"let id = get_tool_id();\n")),(0,i.kt)("p",null,"Additionally, we also provide what we call the tool context, which is information that is constantly\nchanging depending on the current step or state of proto's execution. The context cannot be accessed\nwith a stand-alone function, and is instead passed as a ",(0,i.kt)("inlineCode",{parentName:"p"},"context")," field in the input of many plugin\nfunctions."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {\n let version = input.context.version;\n // ...\n}\n")),(0,i.kt)("p",null,"The following fields are available on the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.rs/proto_pdk/latest/proto_pdk/struct.ToolContext.html"},"context object"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"tool_dir")," - A virtual path to the tool's directory for the current version."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"version"),' - The current version or alias. If not resolved, will be "latest".')),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"},"version"),' field is either a fully-qualified semantic version (1.2.3), an alias ("latest",\n"stable"), or canary ("canary"). Be sure to account for all these variations when implementing\nplugin functions!')),(0,i.kt)("h2",{id:"create-a-plugin"},"Create a plugin"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Although plugins can be written in any language that compiles to WASM, we've only tested Rust. The\nrest of this article assume you're using Rust and Cargo! Refer to ",(0,i.kt)("a",{parentName:"p",href:"https://extism.org/"},"Extism"),"'s\ndocumentation or our official ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/node-plugin"},"Node.js plugin")," for other\nexamples.")),(0,i.kt)("p",null,"To start, create a new crate with Cargo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cargo new plugin --lib\ncd plugin\n")),(0,i.kt)("p",null,"And set the lib type to ",(0,i.kt)("inlineCode",{parentName:"p"},"cdylib"),", and other settings."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="Cargo.toml"',title:'"Cargo.toml"'},'[lib]\ncrate-type = [\'cdylib\']\n\n[profile.release]\ncodegen-units = 1\ndebug = false\nlto = true\nopt-level = "s"\npanic = "abort"\n')),(0,i.kt)("p",null,"Our Rust plugins are powered by ",(0,i.kt)("a",{parentName:"p",href:"https://extism.org/"},"Extism"),", so lets add their PDK and ours as a\ndependency."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cargo add extism-pdk proto_pdk\n")),(0,i.kt)("p",null,"In all Rust files, we can import both PDKs with the following:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust",metastring:'title="src/lib.rs"',title:'"src/lib.rs"'},"use extism_pdk::*;\nuse proto_pdk::*;\n")),(0,i.kt)("p",null,"We can then build the WASM binary. The file will be available at\n",(0,i.kt)("inlineCode",{parentName:"p"},"target/wasm32-wasi/debug/<name>.wasm"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cargo install cargo-wasi\ncargo wasi build\n")),(0,i.kt)("h2",{id:"implementing-plugin-functions"},"Implementing plugin functions"),(0,i.kt)("p",null,"Plugins are powered by a set of functions that are called from the host, and are annotated with\n",(0,i.kt)("inlineCode",{parentName:"p"},"#[plugin_fn]"),"."),(0,i.kt)("h3",{id:"registering-metadata"},"Registering metadata"),(0,i.kt)("p",null,"The first step in a plugin's life-cycle is to register metadata about the plugin with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"register_tool")," function. This function is called immediately after a plugin is loaded at runtime,\nand must return a human-readable name and plugin type."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn register_tool(_: ()) -> FnResult<Json<ToolMetadataOutput>> {\n Ok(Json(ToolMetadataOutput {\n name: "Node.js".into(),\n type_of: PluginType::Language,\n plugin_version: Some(env!("CARGO_PKG_VERSION").into()),\n ..ToolMetadataOutput::default()\n }))\n}\n')),(0,i.kt)("p",null,"This function also receives the plugin ID as input, allowing for conditional logic based on the ID.\nThe ID is the ",(0,i.kt)("a",{parentName:"p",href:"#enabling-plugins"},"key the plugin was configured with"),", and what is passed to ",(0,i.kt)("inlineCode",{parentName:"p"},"proto"),"\ncommands (e.g. ",(0,i.kt)("inlineCode",{parentName:"p"},"proto install <id>"),")."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn register_tool(Json(input): Json<ToolMetadataInput>) -> FnResult<Json<ToolMetadataOutput>> {\n input.id\n // ...\n}\n")),(0,i.kt)("h3",{id:"downloading-pre-builts"},"Downloading pre-builts"),(0,i.kt)("p",null,"Our plugin layer ",(0,i.kt)("em",{parentName:"p"},"only")," supports downloading pre-built tools, typically as an archive, and does\n",(0,i.kt)("em",{parentName:"p"},"not")," support building from source. The ",(0,i.kt)("inlineCode",{parentName:"p"},"download_prebuilt")," function ",(0,i.kt)("em",{parentName:"p"},"must")," be defined, whichs\nconfigures how the tool should be downloaded and installed."),(0,i.kt)("p",null,"The following fields are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"archive_prefix")," - If the tool is distributed as an archive (zip, tar, etc), this is the name of\nthe direct folder within the archive that contains the tool, and will be removed when unpacking\nthe archive. If there is no prefix folder within the archive, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download_url")," (required) - A secure URL to download the tool/archive."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download_name")," - File name of the archive to download. If not provided, will attempt to extract\nit from the URL."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum_url")," - A secure URL to download the checksum file for verification. If the tool does not\nsupport checksum verification, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum_public_key")," - Public key used for verifying checksums. Only used for ",(0,i.kt)("inlineCode",{parentName:"li"},".minisig")," files.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {\n let env = get_proto_environment()?;\n\n check_supported_os_and_arch(\n NAME,\n &env,\n permutations! [\n HostOS::Linux => [HostArch::X64, HostArch::Arm64, HostArch::Arm, HostArch::Powerpc64, HostArch::S390x],\n HostOS::MacOS => [HostArch::X64, HostArch::Arm64],\n HostOS::Windows => [HostArch::X64, HostArch::X86, HostArch::Arm64],\n ],\n )?;\n\n let version = input.context.version;\n let arch = env.arch;\n let os = env.os;\n\n let prefix = match os {\n HostOS::Linux => format!("node-v{version}-linux-{arch}"),\n HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),\n HostOS::Windows => format!("node-v{version}-win-{arch}"),\n other => {\n return Err(PluginError::UnsupportedPlatform("Node.js".into(), other.into()))?;\n }\n };\n\n let filename = if os == HostOS::Windows {\n format!("{prefix}.zip")\n } else {\n format!("{prefix}.tar.xz")\n };\n\n Ok(Json(DownloadPrebuiltOutput {\n archive_prefix: Some(prefix),\n download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),\n download_name: Some(filename),\n checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),\n ..DownloadPrebuiltOutput::default()\n }))\n}\n')),(0,i.kt)("h4",{id:"unpacking-an-archive"},"Unpacking an archive"),(0,i.kt)("p",null,"Our plugin layer will do its best to detect file extensions, unpack the downloaded file (if an\narchive), and install the tool to the correct directory. However, we're unable to account for ",(0,i.kt)("em",{parentName:"p"},"all"),"\nedge cases, so for situations where the install params above are not sufficient, you may define an\n",(0,i.kt)("inlineCode",{parentName:"p"},"unpack_archive")," function."),(0,i.kt)("p",null,"This function receives an input with the following fields:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"input_file")," - Virtual path to the downloaded file. Maps to ",(0,i.kt)("inlineCode",{parentName:"li"},"~/.proto/temp/<id>/<file>"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"output_dir")," - Virtual directory to unpack the archive into, or copy the binary to. Maps to\n",(0,i.kt)("inlineCode",{parentName:"li"},"~/.proto/tools/<id>/<version>"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn unpack_archive(Json(input): Json<UnpackArchiveInput>) -> FnResult<()> {\n untar(input.input_file, input.output_dir)?;\n Ok(())\n}\n")),(0,i.kt)("h3",{id:"locating-binaries"},"Locating binaries"),(0,i.kt)("p",null,"Even though a tool has been installed, we must inform proto of where to find the binary to execute.\nThis can be achieved with the optional ",(0,i.kt)("inlineCode",{parentName:"p"},"locate_bins")," function. If this function is not defined,\nproto will assume the binary is named ",(0,i.kt)("inlineCode",{parentName:"p"},"<id>")," (",(0,i.kt)("inlineCode",{parentName:"p"},"<id>.exe")," on Windows), relative from the installation\ndirectory."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn locate_bins(Json(_): Json<LocateBinsInput>) -> FnResult<Json<LocateBinsOutput>> {\n let env = get_proto_environment()?;\n\n Ok(Json(LocateBinsOutput {\n bin_path: Some(if env.os == HostOS::Windows {\n "node.exe".into()\n } else {\n "bin/node".into()\n }),\n ..LocateBinsOutput::default()\n }))\n}\n')),(0,i.kt)("p",null,"Furthermore, the ",(0,i.kt)("inlineCode",{parentName:"p"},"locate_bins")," function can define a list of lookups for the globals installation\ndirectory. proto will loop through each lookup, and return the first directory that exists on the\ncurrent file system. proto will also expand environment variables in the format of ",(0,i.kt)("inlineCode",{parentName:"p"},"$VAR_NAME"),". If a\nvariable is not defined, or has an empty value, the lookup will be skipped. To demonstrate this,\nwe'll use ",(0,i.kt)("a",{parentName:"p",href:"https://deno.land/manual@v1.35.0/tools/script_installer"},"Deno"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn locate_bins(Json(_): Json<LocateBinsInput>) -> FnResult<Json<LocateBinsOutput>> {\n Ok(Json(LocateBinsOutput {\n fallback_last_globals_dir: true,\n globals_lookup_dirs: vec!["$DENO_INSTALL_ROOT/bin".into(), "$HOME/.deno/bin".into()],\n ..LocateBinsOutput::default()\n }))\n}\n')),(0,i.kt)("h3",{id:"loading-and-resolving-versions"},"Loading and resolving versions"),(0,i.kt)("p",null,"Now that the tool can be downloaded and installed, we must configure how to resolve available\nversions to actually be installed. To provide a list of versions and language specific aliases, the\n",(0,i.kt)("inlineCode",{parentName:"p"},"load_versions")," function must be defined."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn load_versions(Json(_): Json<LoadVersionsInput>) -> FnResult<Json<LoadVersionsOutput>> {\n let mut output = LoadVersionsOutput::default();\n let response: Vec<NodeDistVersion> = fetch_url("https://nodejs.org/dist/index.json")?;\n\n for (index, item) in response.iter().enumerate() {\n let version = Version::parse(&item.version[1..])?; // Starts with v\n\n if index == 0 {\n output.latest = Some(version.clone());\n }\n\n output.versions.push(version);\n }\n\n Ok(Json(output))\n}\n')),(0,i.kt)("p",null,"Furthermore, we support an optional function named ",(0,i.kt)("inlineCode",{parentName:"p"},"resolve_version"),", that can be defined to\nintercept the version resolution process. This function receives an input with an initial candidate,\neither an alias or version, and can replace it with a new candidate. The candidate must be a valid\nalias or version as defined in ",(0,i.kt)("inlineCode",{parentName:"p"},"load_versions"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn resolve_version(\n Json(input): Json<ResolveVersionInput>,\n) -> FnResult<Json<ResolveVersionOutput>> {\n let mut output = ResolveVersionOutput::default();\n\n if input.initial == "node" {\n output.candidate = Some("latest".into());\n\n } else if input.initial == "lts-*" || input.initial == "lts/*" {\n output.candidate = Some("stable".into());\n\n } else if input.initial.starts_with("lts-") || input.initial.starts_with("lts/") {\n output.candidate = Some(input.initial[4..].to_owned());\n }\n\n Ok(Json(output))\n}\n')),(0,i.kt)("h3",{id:"detecting-versions"},"Detecting versions"),(0,i.kt)("p",null,"And lastly, we can configure how to ",(0,i.kt)("a",{parentName:"p",href:"./detection"},"detect a version")," contextually at runtime, using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"detect_version_files")," function and optional ",(0,i.kt)("inlineCode",{parentName:"p"},"parse_version_file")," function. The\n",(0,i.kt)("inlineCode",{parentName:"p"},"detect_version_files")," function can return a list of files to locate within a directory."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn detect_version_files(_: ()) -> FnResult<Json<DetectVersionOutput>> {\n Ok(Json(DetectVersionOutput {\n files: vec![\n ".nvmrc".into(),\n ".node-version".into(),\n "package.json".into(),\n ],\n }))\n}\n')),(0,i.kt)("p",null,'By default our plugin layer will assume the version file\'s contents contain the literal version, and\nnothing else, like "1.2.3". If any of the files in the ',(0,i.kt)("inlineCode",{parentName:"p"},"detect_version_files")," list require custom\nparsing (for example, ",(0,i.kt)("inlineCode",{parentName:"p"},"package.json")," above), you can define the ",(0,i.kt)("inlineCode",{parentName:"p"},"parse_version_file")," function."),(0,i.kt)("p",null,"This function receives the file name and contents as input, and must return the parsed version (if\napplicable)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn parse_version_file(Json(input): Json<ParseVersionFileInput>) -> FnResult<Json<ParseVersionFileOutput>> {\n let mut version = None;\n\n if input.file == "package.json" {\n let json: PackageJson = serde_json::from_str(&input.content)?;\n\n if let Some(engines) = json.engines {\n if let Some(constraint) = engines.get("node") {\n version = Some(constraint.to_owned());\n }\n }\n } else {\n version = Some(input.content.trim().to_owned());\n }\n\n Ok(Json(ParseVersionFileOutput { version }))\n}\n')),(0,i.kt)("h3",{id:"creating-shims"},"Creating shims"),(0,i.kt)("p",null,"Tools within proto wouldn't function without shims, and as such, plugins can register their own\nshims to be created. By default, proto ",(0,i.kt)("em",{parentName:"p"},"will always")," create a global shim of the plugin at\n",(0,i.kt)("inlineCode",{parentName:"p"},"~/.proto/bin/<id>"),", but you can also register additional shims with the ",(0,i.kt)("inlineCode",{parentName:"p"},"create_shims")," function."),(0,i.kt)("h4",{id:"global-shims"},"Global shims"),(0,i.kt)("p",null,"Global shims are optional scripts that are available on ",(0,i.kt)("inlineCode",{parentName:"p"},"PATH")," as they are generated in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," directory, and can be defined with the ",(0,i.kt)("inlineCode",{parentName:"p"},"global_shims")," parameter. This param is a hash\nmap, where the key is the shim file name, and the value is a configuration object."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn create_shims(Json(_): Json<CreateShimsInput>) -> FnResult<Json<CreateShimsOutput>> {\n let env = get_proto_environment()?;\n let mut global_shims = HashMap::new();\n\n global_shims.insert(\n "npx".into(),\n ShimConfig::global_with_alt_bin(if env.os == HostOS::Windows {\n "npx.cmd".into()\n } else {\n "bin/npx".into()\n }),\n );\n\n Ok(Json(CreateShimsOutput {\n global_shims,\n ..CreateShimsOutput::default()\n }))\n}\n')),(0,i.kt)("p",null,"Furthermore, if you'd prefer to ",(0,i.kt)("em",{parentName:"p"},"not")," create a primary global shim at all, enable the\n",(0,i.kt)("inlineCode",{parentName:"p"},"no_primary_global")," field."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},"#[plugin_fn]\npub fn create_shims(Json(_): Json<CreateShimsInput>) -> FnResult<Json<CreateShimsOutput>> {\n Ok(Json(CreateShimsOutput {\n no_primary_global: true,\n ..CreateShimsOutput::default()\n }))\n}\n")),(0,i.kt)("h3",{id:"installing-and-uninstalling-globals"},"Installing and uninstalling globals"),(0,i.kt)("p",null,"Most languages support the concept of installing packages/dependencies globally, and making them\navailable on ",(0,i.kt)("inlineCode",{parentName:"p"},"PATH"),". proto supports this with the\n",(0,i.kt)("a",{parentName:"p",href:"./commands/install-global"},(0,i.kt)("inlineCode",{parentName:"a"},"proto install-global"))," and\n",(0,i.kt)("a",{parentName:"p",href:"./commands/uninstall-global"},(0,i.kt)("inlineCode",{parentName:"a"},"proto uninstall-global"))," commands, which are simple convenience\nwrappers around the native binary."),(0,i.kt)("p",null,"From the context of the plugin, how globals are installed and uninstalled is implemented with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"install_global")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"uninstall_global")," functions respectively. Both functions receive the\n",(0,i.kt)("inlineCode",{parentName:"p"},"dependency")," to install as input."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'#[plugin_fn]\npub fn install_global(\n Json(input): Json<InstallGlobalInput>,\n) -> FnResult<Json<InstallGlobalOutput>> {\n let result = exec_command!(inherit, "npm", ["install", "--global", &input.dependency]);\n\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\n}\n\n#[plugin_fn]\npub fn uninstall_global(\n Json(input): Json<UninstallGlobalInput>,\n) -> FnResult<Json<UninstallGlobalOutput>> {\n let result = exec_command!(inherit, "npm", ["uninstall", "--global", &input.dependency]);\n\n Ok(Json(UninstallGlobalOutput::from_exec_command(result)))\n}\n')),(0,i.kt)("h2",{id:"testing"},"Testing"),(0,i.kt)("p",null,"The best way to test the plugin is to execute it through ",(0,i.kt)("inlineCode",{parentName:"p"},"proto")," directly. To do this, you'll need\nto configure a ",(0,i.kt)("inlineCode",{parentName:"p"},".prototools")," file at the root of your plugin's repository that maps the plugin to a\ndebug build:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml"},'[plugins]\n<id> = "source:target/wasm32-wasi/debug/<name>.wasm"\n')),(0,i.kt)("p",null,"And everytime you make a change to the plugin, you'll need to rebuild it with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cargo wasi build\n")),(0,i.kt)("p",null,"With these 2 pieces in place, you can now execute ",(0,i.kt)("inlineCode",{parentName:"p"},"proto")," commands. Be sure you're running them from\nthe directory with the ",(0,i.kt)("inlineCode",{parentName:"p"},".prototools")," file, and that you're passing ",(0,i.kt)("inlineCode",{parentName:"p"},"--log trace"),". Logs are extremely\nhelpful for figuring out what's going on."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"proto --log trace install <id>\nproto --log trace list-remote <id>\n...\n")),(0,i.kt)("h3",{id:"unit-tests"},"Unit tests"),(0,i.kt)("p",null,"Testing WASM plugins is a bit tricky, but we've taken it upon ourselves to streamline this process\nas much as possible with built-in test utilities, and Rust macros for generating common test cases.\nTo begin, install all necessary development dependencies:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cargo add --dev proto_pdk_test_utils starbase_sandbox tokio\n")),(0,i.kt)("p",null,"And as mentioned above, everytime you make a change to the plugin, you'll need to rebuild it with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"cargo wasi build\n")),(0,i.kt)("h4",{id:"testing-plugin-functions"},"Testing plugin functions"),(0,i.kt)("p",null,"The common test case is simply calling plugin functions with a provided input and asserting the\noutput is correct. This can be achieved by creating a plugin instance with ",(0,i.kt)("inlineCode",{parentName:"p"},"create_plugin")," and\ncalling the appropriate method."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'use proto_pdk_test_utils::*;\nuse starbase_sandbox::create_empty_sandbox;\n\n#[test]\nfn registers_metadata() {\n let sandbox = create_empty_sandbox();\n let plugin = create_plugin("id", sandbox.path());\n\n assert_eq!(\n plugin.register_tool(ToolMetadataInput::default()),\n ToolMetadataOutput {\n name: "Name".into(),\n ..ToolMetadataOutput::default()\n }\n );\n}\n')),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"We suggest using this pattern for static functions that return a deterministic output from a\nprovided input, and not for dynamic functions that make HTTP requests or execute host commands.")),(0,i.kt)("h4",{id:"generating-cases-from-macros"},"Generating cases from macros"),(0,i.kt)("p",null,"To reduce the burden of writing custom tests for common flows, like downloading a pre-built,\nresolving versions, and generating shims, we provide a set of Rust decl macros that will generate\nthe tests for you."),(0,i.kt)("p",null,"To test downloading and installing, use ",(0,i.kt)("inlineCode",{parentName:"p"},"generate_download_install_tests!"),". This macro requires a\nplugin ID and a real version to test with."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'use proto_pdk_test_utils::*;\n\ngenerate_download_install_tests!("id", "1.2.3");\n')),(0,i.kt)("p",null,"To test version resolving, use ",(0,i.kt)("inlineCode",{parentName:"p"},"generate_resolve_versions_tests!"),". This macro requires a plugin ID,\nand a mapping of version/aliases assertions to expectations."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'generate_resolve_versions_tests!("id", {\n "0.4" => "0.4.12",\n "0.5.1" => "0.5.1",\n "stable" => "1.0.0",\n});\n')),(0,i.kt)("p",null,"To test installing and uninstalling globals, use ",(0,i.kt)("inlineCode",{parentName:"p"},"generate_globals_test!"),". This macro requires a\nplugin ID, the dependency to install, and an optional environment variable to the globals directory."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'// Doesn\'t support all use cases! If this doesn\'t work, implement a test case manually.\ngenerate_globals_test!("id", "dependency", "GLOBAL_INSTALL_ROOT");\n')),(0,i.kt)("p",null,"And lastly, to test shims, use ",(0,i.kt)("inlineCode",{parentName:"p"},"generate_global_shims_test!")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"generate_local_shims_test!"),". Both\nmacros require a plugin ID, but also support additional arguments when creating more than 1 shim.\nThese macros generate snapshots using ",(0,i.kt)("a",{parentName:"p",href:"https://insta.rs/"},"Insta"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-rust"},'// Only the single binary\ngenerate_global_shims_test!("id");\n\n// When creating alternate/additional globals\ngenerate_global_shims_test!("id", ["other", "another"]);\n\n// When creating local shims, each file required in the list\ngenerate_local_shims_test!("id", ["a", "b", "c"]);\n')),(0,i.kt)("h2",{id:"building-and-publishing"},"Building and publishing"),(0,i.kt)("p",null,"At this point, you should have a fully working WASM plugin, but to make it available to downstream\nproto users, you'll still need to build and make the ",(0,i.kt)("inlineCode",{parentName:"p"},".wasm")," file available. The easiest solution is\nto publish a GitHub release and include the ",(0,i.kt)("inlineCode",{parentName:"p"},".wasm")," file as an asset."),(0,i.kt)("h3",{id:"building-optimizing-and-stripping"},"Building, optimizing, and stripping"),(0,i.kt)("p",null,"WASM files are pretty fat, even when compiling in release mode. To reduce the size of these files,\nwe can use ",(0,i.kt)("inlineCode",{parentName:"p"},"wasm-opt")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"wasm-strip"),", both of which are provided by\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/WebAssembly"},"WebAssembly"),". The following script is what we use to build our own\nplugins."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="build-wasm"',title:'"build-wasm"'},'#!/usr/bin/env bash\n\ntarget="${CARGO_TARGET_DIR:-target}"\ninput="$target/wasm32-wasi/release/$1.wasm"\noutput="$target/wasm32-wasi/$1.wasm"\n\necho "Building"\n\ncargo build --target wasm32-wasi --release\n\necho "Optimizing"\n\n# https://github.com/WebAssembly/binaryen\n~/binaryen/bin/wasm-opt -Os "$input" --output "$output"\n\necho "Stripping"\n\n# https://github.com/WebAssembly/wabt\n~/wabt/bin/wasm-strip "$output"\n')),(0,i.kt)("h3",{id:"manually-create-releases"},"Manually create releases"),(0,i.kt)("p",null,"When your plugin is ready to be published, you can create a release on GitHub using the following\nsteps."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Tag the release and push to GitHub.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git tag v0.0.1\ngit push --tags\n")),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"Build a release version of the plugin using the ",(0,i.kt)("inlineCode",{parentName:"li"},"build-wasm")," script above. The file will be\navailable at ",(0,i.kt)("inlineCode",{parentName:"li"},"target/wasm32-wasi/<name>.wasm"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"build-wasm <name>\n")),(0,i.kt)("ol",{start:3},(0,i.kt)("li",{parentName:"ol"},"In GitHub, navigate to the tags page, find the new tag, create a new release, and attach the\nbuilt file as an asset.")),(0,i.kt)("h3",{id:"automate-releases"},"Automate releases"),(0,i.kt)("p",null,"Coming soon!"),(0,i.kt)("h2",{id:"resources"},"Resources"),(0,i.kt)("p",null,"Some helpful resources for learning about and building plugins."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Official proto WASM plugins",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/bun-plugin"},"Bun")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/deno-plugin"},"Deno")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/go-plugin"},"Go")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"Node")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"npm, pnpm, yarn")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/python-plugin"},"Python")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/rust-plugin"},"Rust")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/schema-plugin"},"Schema")))),(0,i.kt)("li",{parentName:"ul"},"Plugin development kit",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk/"},(0,i.kt)("inlineCode",{parentName:"a"},"proto_pdk")," docs")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.rs/proto_pdk_test_utils/"},(0,i.kt)("inlineCode",{parentName:"a"},"proto_pdk_test_utils")," docs"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9edb948e.99a0394c.js b/assets/js/9edb948e.99a0394c.js deleted file mode 100644 index a04b4a8226c..00000000000 --- a/assets/js/9edb948e.99a0394c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4436],{35318:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var n=a(27378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(a),d=r,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return a?n.createElement(g,l(l({ref:t},p),{},{components:a})):n.createElement(g,l({ref:t},p))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},39798:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(27378),r=a(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:a,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:a},t)}},33337:(e,t,a)=>{a.d(t,{Z:()=>g});var n=a(25773),r=a(27378),o=a(37140),l=a(83457),i=a(35595),s=a(76457);const c="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:a,selectedValue:i,selectValue:s,tabValues:c}=e;const u=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,a=u.indexOf(t),n=c[a].value;n!==i&&(m(t),s(n))},g=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},c.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:g,onClick:d},l,{className:(0,o.Z)("tabs__item",p,l?.className,{"tabs__item--active":i===t})}),a??t)})))}function m(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",c)},r.createElement(u,(0,n.Z)({},e,t)),r.createElement(m,(0,n.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,a)=>{a.d(t,{Y:()=>m});var n=a(27378),r=a(35331),o=a(30654),l=a(70784),i=a(71819);function s(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function c(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??s(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:a}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,o=c(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[m,d]=u({queryString:a,groupId:r}),[g,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:r}),k=(()=>{const e=m??g;return p({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}},27915:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(27378),r=a(83469),o=a(9619);function l(e){let{text:t}=e;return n.createElement(o.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,a)=>{a.d(t,{Z:()=>u});var n=a(27378),r=a(81884),o=a(25773),l=a(9928),i=a(83469),s=a(31792);const c={discord:l.omb,github:l.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:l.mdU,workspace:i.emM,"workspace-config":i.cRF};function p(e){let{name:t,...a}=e;return n.createElement(s.Z,(0,o.Z)({},a,{icon:c[t]}))}function u(e){let{links:t}=e;return n.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>n.createElement(r.default,{key:e.url,href:e.url,className:"focus:outline-none"},n.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},n.createElement("div",{className:"flex-shrink-0"},n.createElement(p,{size:"lg",name:e.icon})),n.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),r=a(40624),o=a(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:a,text:i,variant:s}=e;return n.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},a&&n.createElement(o.Z,{icon:a,className:"mr-1"}),i)}},9757:(e,t,a)=>{a.d(t,{ZP:()=>s});var n=a(25773),r=(a(27378),a(35318)),o=a(33337),l=a(39798);const i={toc:[]};function s(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"yarn",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".yarnrc.yml"',title:'".yarnrc.yml"'},"# ...\nnodeLinker: 'node-modules'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://yarnpkg.com/features/workspaces"},"Documentation")))),(0,r.kt)(l.Z,{value:"yarn1",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://classic.yarnpkg.com/en/docs/workspaces"},"Documentation")))),(0,r.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.npmjs.com/cli/v8/using-npm/workspaces"},"Documentation")))),(0,r.kt)(l.Z,{value:"pnpm",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="pnpm-workspace.yaml"',title:'"pnpm-workspace.yaml"'},"packages:\n - 'apps/*'\n - 'packages/*'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pnpm.io/workspaces"},"Documentation"))))))}s.isMDXComponent=!0},31901:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>m});var n=a(25773),r=(a(27378),a(35318)),o=(a(33337),a(39798),a(27915)),l=a(9634),i=a(9757);const s={title:"Setup toolchain"},c=void 0,p={unversionedId:"setup-toolchain",id:"setup-toolchain",title:"Setup toolchain",description:"One of moon's most powerful features is the toolchain, which manages and",source:"@site/docs/setup-toolchain.mdx",sourceDirName:".",slug:"/setup-toolchain",permalink:"/docs/setup-toolchain",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/setup-toolchain.mdx",tags:[],version:"current",frontMatter:{title:"Setup toolchain"},sidebar:"docs",previous:{title:"Setup workspace",permalink:"/docs/setup-workspace"},next:{title:"Create a project",permalink:"/docs/create-project"}},u={},m=[{value:"Choosing a package manager",id:"choosing-a-package-manager",level:2},{value:"Enabling workspaces (optional)",id:"enabling-workspaces-optional",level:3},{value:"Configuring Node.js",id:"configuring-nodejs",level:2},{value:"Configuring a package manager",id:"configuring-a-package-manager",level:2},{value:"Adding a package script",id:"adding-a-package-script",level:2},{value:"Next steps",id:"next-steps",level:2}],d={toc:m};function g(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{text:"4 min",mdxType:"HeaderLabel"}),(0,r.kt)("p",null,"One of moon's most powerful features is the ",(0,r.kt)("a",{parentName:"p",href:"./concepts/toolchain"},"toolchain"),", which manages and\nautomatically installs Node.js and other tools. The toolchain is configured with\n",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"This toolchain article is currently Node.js only. If you're using another language, feel free to\nskip to the next article, ",(0,r.kt)("a",{parentName:"p",href:"./create-project"},"creating a project"),".")),(0,r.kt)("h2",{id:"choosing-a-package-manager"},"Choosing a package manager"),(0,r.kt)("p",null,'Before we continue, we should briefly talk about Node.js package managers. To start, moon does not\nreplace a package manager, nor does it apply any "magic" for them to work differently. Instead, moon\nbuilds upon a package manager to provide a robust task runner, assumes a standard ',(0,r.kt)("inlineCode",{parentName:"p"},"node_modules"),"\nlayout and module resolution algorithm, and supports any of the following 3 package managers."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.npmjs.com/"},"npm")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pnpm.io/"},"pnpm")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://yarnpkg.com/"},"Yarn")," (v1, v2+ in ",(0,r.kt)("inlineCode",{parentName:"li"},"node-modules")," linker mode)")),(0,r.kt)("h3",{id:"enabling-workspaces-optional"},"Enabling workspaces (optional)"),(0,r.kt)("p",null,"moon was built with monorepos in mind, and as such, has first-class support for them through package\nworkspaces (but is not a requirement). To utilize workspaces, enable them for your chosen package\nmanager."),(0,r.kt)(i.ZP,{mdxType:"PackageWorkspaces"}),(0,r.kt)("h2",{id:"configuring-nodejs"},"Configuring Node.js"),(0,r.kt)("p",null,"As Node.js is the backbone of a JavaScript based repository, we need to enable its functionality.\nThis is done by defining ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#node"},(0,r.kt)("inlineCode",{parentName:"a"},"node"))," in\n",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". Languages are like plugins, where the existence of a\nsetting enables the plugin, hence why an empty object below is acceptable."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node: {}\n")),(0,r.kt)("p",null,"By default, the language will execute tasks using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"node")," binary available on ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),".\nWhile this works, we suggest using our toolchain that will download, install, and execute tasks with\nthe same version of Node.js across ",(0,r.kt)("em",{parentName:"p"},"all")," machines. To enable the toolchain, simply define the\nversion with ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#version"},(0,r.kt)("inlineCode",{parentName:"a"},"node.version")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n")),(0,r.kt)("p",null,"This setting can be a fully qualified semantic version (preferred), a partial version (missing patch\nor minor), or even an alias (learn more about the\n",(0,r.kt)("a",{parentName:"p",href:"./concepts/toolchain#version-specification"},"version specification"),"). We suggest ",(0,r.kt)("em",{parentName:"p"},"always")," using an\n",(0,r.kt)("a",{parentName:"p",href:"https://nodejs.org/en/about/releases/"},"Active LTS")," version."),(0,r.kt)("p",null,"Let's now run ",(0,r.kt)("a",{parentName:"p",href:"./commands/setup"},(0,r.kt)("inlineCode",{parentName:"a"},"moon setup --log debug"))," to verify that Node.js is downloaded and\ninstalled correctly. Pretty cool right?"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Node.js version can also be customized ",(0,r.kt)("em",{parentName:"p"},"per project")," using the\n",(0,r.kt)("a",{parentName:"p",href:"./config/project#node"},(0,r.kt)("inlineCode",{parentName:"a"},"toolchain.node.version"))," setting in ",(0,r.kt)("a",{parentName:"p",href:"./config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),". This\nsetting exists to support legacy projects that are coupled to an old version and are unable to\nupgrade. We suggest keeping all projects on the same version whenever possible.")),(0,r.kt)("h2",{id:"configuring-a-package-manager"},"Configuring a package manager"),(0,r.kt)("p",null,"Even though Node.js is now installed, we need a package manager to install dependencies. Earlier we\ntalked about ",(0,r.kt)("a",{parentName:"p",href:"./install#choosing-a-package-manager"},"choosing a package manager"),", so let's use that\nchoice here by defining ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#packagemanager"},(0,r.kt)("inlineCode",{parentName:"a"},"node.packageManager")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n packageManager: 'yarn'\n")),(0,r.kt)("p",null,"By default moon will install a stable version of the package manager, but this isn't consistently\nupdated, so we suggest defining a\n",(0,r.kt)("a",{parentName:"p",href:"./concepts/toolchain#version-specification"},"version specification")," for the package manager as well,\nthrough the ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#version-1"},(0,r.kt)("inlineCode",{parentName:"a"},"node.<packageManager>.version"))," setting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n packageManager: 'yarn'\n yarn:\n version: '3.2.0'\n")),(0,r.kt)("p",null,"Once again, let's run ",(0,r.kt)("a",{parentName:"p",href:"./commands/setup"},(0,r.kt)("inlineCode",{parentName:"a"},"moon setup --log debug"))," to verify the package manager is\ninstalled, and also take note that Node.js is ",(0,r.kt)("em",{parentName:"p"},"already")," installed. Based on the example\nconfiguration above, we'll be switching from npm (the default) to yarn."),(0,r.kt)("h2",{id:"adding-a-package-script"},"Adding a package script"),(0,r.kt)("p",null,"For scenarios like CI, ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," can be ran through a root ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," script \u2014 but this comes with\na cost \u2014 which is the overhead of launching Node.js and your chosen package manager to execute the\nRust binary, ",(0,r.kt)("em",{parentName:"p"},"instead of")," executing the Rust binary directly. If this is problematic, feel free to\nuse the global ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," binary."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n // ...\n "moon": "moon",\n // For Yarn 2+\n "moon": "$(yarn bin moon)"\n }\n}\n')),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Yarn 2+ does not support executing Rust binaries through package scripts\n(",(0,r.kt)("a",{parentName:"p",href:"https://github.com/yarnpkg/berry/issues/882"},"issue"),"), so we must access the full binary path and\nexecute on that.")),(0,r.kt)("p",null,"With this script, moon can then be run with ",(0,r.kt)("inlineCode",{parentName:"p"},"npm run moon ...")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn run"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"pnpm run"),")."),(0,r.kt)("h2",{id:"next-steps"},"Next steps"),(0,r.kt)(l.Z,{links:[{icon:"new-project",label:"Create a project",url:"./create-project"},{icon:"toolchain-config",label:(0,r.kt)("span",null,"Configure ",(0,r.kt)("code",null,".moon/toolchain.yml")," further"),url:"./config/toolchain"},{icon:"toolchain",label:"Learn about the toolchain",url:"./concepts/toolchain"}],mdxType:"NextSteps"}))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9edb948e.bc28d624.js b/assets/js/9edb948e.bc28d624.js new file mode 100644 index 00000000000..c8bf8e99fb3 --- /dev/null +++ b/assets/js/9edb948e.bc28d624.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44436],{35318:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var n=a(27378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(a),d=r,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return a?n.createElement(g,l(l({ref:t},p),{},{components:a})):n.createElement(g,l({ref:t},p))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c<o;c++)l[c]=a[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},39798:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(27378),r=a(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:a,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:a},t)}},33337:(e,t,a)=>{a.d(t,{Z:()=>g});var n=a(25773),r=a(27378),o=a(37140),l=a(83457),i=a(35595),s=a(76457);const c="tabList_J5MA",p="tabItem_l0OV";function u(e){let{className:t,block:a,selectedValue:i,selectValue:s,tabValues:c}=e;const u=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,a=u.indexOf(t),n=c[a].value;n!==i&&(m(t),s(n))},g=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},c.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>u.push(e),onKeyDown:g,onClick:d},l,{className:(0,o.Z)("tabs__item",p,l?.className,{"tabs__item--active":i===t})}),a??t)})))}function m(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",c)},r.createElement(u,(0,n.Z)({},e,t)),r.createElement(m,(0,n.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,a)=>{a.d(t,{Y:()=>m});var n=a(27378),r=a(35331),o=a(30654),l=a(70784),i=a(71819);function s(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function c(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??s(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:a}=e;const l=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,o=c(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[m,d]=u({queryString:a,groupId:r}),[g,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,i.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:r}),k=(()=>{const e=m??g;return p({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}},27915:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(27378),r=a(83469),o=a(9619);function l(e){let{text:t}=e;return n.createElement(o.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,a)=>{a.d(t,{Z:()=>u});var n=a(27378),r=a(81884),o=a(25773),l=a(9928),i=a(83469),s=a(31792);const c={discord:l.omb,github:l.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:l.mdU,workspace:i.emM,"workspace-config":i.cRF};function p(e){let{name:t,...a}=e;return n.createElement(s.Z,(0,o.Z)({},a,{icon:c[t]}))}function u(e){let{links:t}=e;return n.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>n.createElement(r.default,{key:e.url,href:e.url,className:"focus:outline-none"},n.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},n.createElement("div",{className:"flex-shrink-0"},n.createElement(p,{size:"lg",name:e.icon})),n.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),r=a(40624),o=a(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:a,text:i,variant:s}=e;return n.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},a&&n.createElement(o.Z,{icon:a,className:"mr-1"}),i)}},9757:(e,t,a)=>{a.d(t,{ZP:()=>s});var n=a(25773),r=(a(27378),a(35318)),o=a(33337),l=a(39798);const i={toc:[]};function s(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"yarn",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".yarnrc.yml"',title:'".yarnrc.yml"'},"# ...\nnodeLinker: 'node-modules'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://yarnpkg.com/features/workspaces"},"Documentation")))),(0,r.kt)(l.Z,{value:"yarn1",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://classic.yarnpkg.com/en/docs/workspaces"},"Documentation")))),(0,r.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "workspaces": ["apps/*", "packages/*"]\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.npmjs.com/cli/v8/using-npm/workspaces"},"Documentation")))),(0,r.kt)(l.Z,{value:"pnpm",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="pnpm-workspace.yaml"',title:'"pnpm-workspace.yaml"'},"packages:\n - 'apps/*'\n - 'packages/*'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pnpm.io/workspaces"},"Documentation"))))))}s.isMDXComponent=!0},31901:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>m});var n=a(25773),r=(a(27378),a(35318)),o=(a(33337),a(39798),a(27915)),l=a(9634),i=a(9757);const s={title:"Setup toolchain"},c=void 0,p={unversionedId:"setup-toolchain",id:"setup-toolchain",title:"Setup toolchain",description:"One of moon's most powerful features is the toolchain, which manages and",source:"@site/docs/setup-toolchain.mdx",sourceDirName:".",slug:"/setup-toolchain",permalink:"/docs/setup-toolchain",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/setup-toolchain.mdx",tags:[],version:"current",frontMatter:{title:"Setup toolchain"},sidebar:"docs",previous:{title:"Setup workspace",permalink:"/docs/setup-workspace"},next:{title:"Create a project",permalink:"/docs/create-project"}},u={},m=[{value:"Choosing a package manager",id:"choosing-a-package-manager",level:2},{value:"Enabling workspaces (optional)",id:"enabling-workspaces-optional",level:3},{value:"Configuring Node.js",id:"configuring-nodejs",level:2},{value:"Configuring a package manager",id:"configuring-a-package-manager",level:2},{value:"Adding a package script",id:"adding-a-package-script",level:2},{value:"Next steps",id:"next-steps",level:2}],d={toc:m};function g(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{text:"4 min",mdxType:"HeaderLabel"}),(0,r.kt)("p",null,"One of moon's most powerful features is the ",(0,r.kt)("a",{parentName:"p",href:"./concepts/toolchain"},"toolchain"),", which manages and\nautomatically installs Node.js and other tools. The toolchain is configured with\n",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),"."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"This toolchain article is currently Node.js only. If you're using another language, feel free to\nskip to the next article, ",(0,r.kt)("a",{parentName:"p",href:"./create-project"},"creating a project"),".")),(0,r.kt)("h2",{id:"choosing-a-package-manager"},"Choosing a package manager"),(0,r.kt)("p",null,'Before we continue, we should briefly talk about Node.js package managers. To start, moon does not\nreplace a package manager, nor does it apply any "magic" for them to work differently. Instead, moon\nbuilds upon a package manager to provide a robust task runner, assumes a standard ',(0,r.kt)("inlineCode",{parentName:"p"},"node_modules"),"\nlayout and module resolution algorithm, and supports any of the following 3 package managers."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.npmjs.com/"},"npm")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://pnpm.io/"},"pnpm")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://yarnpkg.com/"},"Yarn")," (v1, v2+ in ",(0,r.kt)("inlineCode",{parentName:"li"},"node-modules")," linker mode)")),(0,r.kt)("h3",{id:"enabling-workspaces-optional"},"Enabling workspaces (optional)"),(0,r.kt)("p",null,"moon was built with monorepos in mind, and as such, has first-class support for them through package\nworkspaces (but is not a requirement). To utilize workspaces, enable them for your chosen package\nmanager."),(0,r.kt)(i.ZP,{mdxType:"PackageWorkspaces"}),(0,r.kt)("h2",{id:"configuring-nodejs"},"Configuring Node.js"),(0,r.kt)("p",null,"As Node.js is the backbone of a JavaScript based repository, we need to enable its functionality.\nThis is done by defining ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#node"},(0,r.kt)("inlineCode",{parentName:"a"},"node"))," in\n",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),". Languages are like plugins, where the existence of a\nsetting enables the plugin, hence why an empty object below is acceptable."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node: {}\n")),(0,r.kt)("p",null,"By default, the language will execute tasks using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"node")," binary available on ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),".\nWhile this works, we suggest using our toolchain that will download, install, and execute tasks with\nthe same version of Node.js across ",(0,r.kt)("em",{parentName:"p"},"all")," machines. To enable the toolchain, simply define the\nversion with ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#version"},(0,r.kt)("inlineCode",{parentName:"a"},"node.version")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n")),(0,r.kt)("p",null,"This setting can be a fully qualified semantic version (preferred), a partial version (missing patch\nor minor), or even an alias (learn more about the\n",(0,r.kt)("a",{parentName:"p",href:"./concepts/toolchain#version-specification"},"version specification"),"). We suggest ",(0,r.kt)("em",{parentName:"p"},"always")," using an\n",(0,r.kt)("a",{parentName:"p",href:"https://nodejs.org/en/about/releases/"},"Active LTS")," version."),(0,r.kt)("p",null,"Let's now run ",(0,r.kt)("a",{parentName:"p",href:"./commands/setup"},(0,r.kt)("inlineCode",{parentName:"a"},"moon setup --log debug"))," to verify that Node.js is downloaded and\ninstalled correctly. Pretty cool right?"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Node.js version can also be customized ",(0,r.kt)("em",{parentName:"p"},"per project")," using the\n",(0,r.kt)("a",{parentName:"p",href:"./config/project#node"},(0,r.kt)("inlineCode",{parentName:"a"},"toolchain.node.version"))," setting in ",(0,r.kt)("a",{parentName:"p",href:"./config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),". This\nsetting exists to support legacy projects that are coupled to an old version and are unable to\nupgrade. We suggest keeping all projects on the same version whenever possible.")),(0,r.kt)("h2",{id:"configuring-a-package-manager"},"Configuring a package manager"),(0,r.kt)("p",null,"Even though Node.js is now installed, we need a package manager to install dependencies. Earlier we\ntalked about ",(0,r.kt)("a",{parentName:"p",href:"./install#choosing-a-package-manager"},"choosing a package manager"),", so let's use that\nchoice here by defining ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#packagemanager"},(0,r.kt)("inlineCode",{parentName:"a"},"node.packageManager")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n packageManager: 'yarn'\n")),(0,r.kt)("p",null,"By default moon will install a stable version of the package manager, but this isn't consistently\nupdated, so we suggest defining a\n",(0,r.kt)("a",{parentName:"p",href:"./concepts/toolchain#version-specification"},"version specification")," for the package manager as well,\nthrough the ",(0,r.kt)("a",{parentName:"p",href:"./config/toolchain#version-1"},(0,r.kt)("inlineCode",{parentName:"a"},"node.<packageManager>.version"))," setting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '18.0.0'\n packageManager: 'yarn'\n yarn:\n version: '3.2.0'\n")),(0,r.kt)("p",null,"Once again, let's run ",(0,r.kt)("a",{parentName:"p",href:"./commands/setup"},(0,r.kt)("inlineCode",{parentName:"a"},"moon setup --log debug"))," to verify the package manager is\ninstalled, and also take note that Node.js is ",(0,r.kt)("em",{parentName:"p"},"already")," installed. Based on the example\nconfiguration above, we'll be switching from npm (the default) to yarn."),(0,r.kt)("h2",{id:"adding-a-package-script"},"Adding a package script"),(0,r.kt)("p",null,"For scenarios like CI, ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," can be ran through a root ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," script \u2014 but this comes with\na cost \u2014 which is the overhead of launching Node.js and your chosen package manager to execute the\nRust binary, ",(0,r.kt)("em",{parentName:"p"},"instead of")," executing the Rust binary directly. If this is problematic, feel free to\nuse the global ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," binary."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n // ...\n "moon": "moon",\n // For Yarn 2+\n "moon": "$(yarn bin moon)"\n }\n}\n')),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Yarn 2+ does not support executing Rust binaries through package scripts\n(",(0,r.kt)("a",{parentName:"p",href:"https://github.com/yarnpkg/berry/issues/882"},"issue"),"), so we must access the full binary path and\nexecute on that.")),(0,r.kt)("p",null,"With this script, moon can then be run with ",(0,r.kt)("inlineCode",{parentName:"p"},"npm run moon ...")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn run"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"pnpm run"),")."),(0,r.kt)("h2",{id:"next-steps"},"Next steps"),(0,r.kt)(l.Z,{links:[{icon:"new-project",label:"Create a project",url:"./create-project"},{icon:"toolchain-config",label:(0,r.kt)("span",null,"Configure ",(0,r.kt)("code",null,".moon/toolchain.yml")," further"),url:"./config/toolchain"},{icon:"toolchain",label:"Learn about the toolchain",url:"./concepts/toolchain"}],mdxType:"NextSteps"}))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f025583.36080b90.js b/assets/js/9f025583.36080b90.js new file mode 100644 index 00000000000..8ec1955d256 --- /dev/null +++ b/assets/js/9f025583.36080b90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44343],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},35558:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={title:"alias"},i=void 0,l={unversionedId:"proto/commands/alias",id:"proto/commands/alias",title:"alias",description:"The proto alias (or proto a) command will define a custom alias that",source:"@site/docs/proto/commands/alias.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/alias",permalink:"/docs/proto/commands/alias",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/alias.mdx",tags:[],version:"current",frontMatter:{title:"alias"},sidebar:"proto",previous:{title:"add-plugin",permalink:"/docs/proto/commands/add-plugin"},next:{title:"bin",permalink:"/docs/proto/commands/bin"}},s={},p=[{value:"Arguments",id:"arguments",level:3}],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto alias <tool> <label> <version>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto a"),") command will define a custom alias that\nmaps to a specific version for the provided tool. Aliases can be used anywhere a version is\naccepted."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto alias node work 16.16\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<label>")," - Name of the alias. Supports alpanumeric chars."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<version>")," - Version to map to the alias.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f025583.37f6e918.js b/assets/js/9f025583.37f6e918.js deleted file mode 100644 index 4e7910a673e..00000000000 --- a/assets/js/9f025583.37f6e918.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4343],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},35558:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={title:"alias"},i=void 0,l={unversionedId:"proto/commands/alias",id:"proto/commands/alias",title:"alias",description:"The proto alias (or proto a) command will define a custom alias that",source:"@site/docs/proto/commands/alias.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/alias",permalink:"/docs/proto/commands/alias",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/alias.mdx",tags:[],version:"current",frontMatter:{title:"alias"},sidebar:"proto",previous:{title:"add-plugin",permalink:"/docs/proto/commands/add-plugin"},next:{title:"bin",permalink:"/docs/proto/commands/bin"}},s={},p=[{value:"Arguments",id:"arguments",level:3}],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto alias <tool> <label> <version>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto a"),") command will define a custom alias that\nmaps to a specific version for the provided tool. Aliases can be used anywhere a version is\naccepted."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto alias node work 16.16\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<label>")," - Name of the alias. Supports alpanumeric chars."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<version>")," - Version to map to the alias.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f838734.5dcc8b96.js b/assets/js/9f838734.5dcc8b96.js new file mode 100644 index 00000000000..6547acfc334 --- /dev/null +++ b/assets/js/9f838734.5dcc8b96.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93231],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,i),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),i=n(83457),l=n(35595),s=n(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),a=c[n].value;a!==l&&(d(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},i,{className:(0,o.Z)("tabs__item",u,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,l.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",c)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),o=n(30654),i=n(70784),l=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function c(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const i=(0,r.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(l),(0,a.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(i.location.search);t.set(l,e),i.replace({...i.location,search:t.toString()})}),[l,i])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=c(e),[i,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,l.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),h=(()=>{const e=d??f;return u({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return a.createElement(r.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},48764:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>f,frontMatter:()=>s,metadata:()=>u,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),o=n(33337),i=n(39798),l=n(79022);const s={title:"Code owners",toc_max_heading_level:6,tags:["code","owners","codeowners"]},c=void 0,u={unversionedId:"guides/codeowners",id:"guides/codeowners",title:"Code owners",description:"Code owners enables companies to define individuals, teams, or groups that are responsible for code",source:"@site/docs/guides/codeowners.mdx",sourceDirName:"guides",slug:"/guides/codeowners",permalink:"/docs/guides/codeowners",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/codeowners.mdx",tags:[{label:"code",permalink:"/docs/tags/code"},{label:"owners",permalink:"/docs/tags/owners"},{label:"codeowners",permalink:"/docs/tags/codeowners"}],version:"current",frontMatter:{title:"Code owners",toc_max_heading_level:6,tags:["code","owners","codeowners"]},sidebar:"guides",previous:{title:"Code generation",permalink:"/docs/guides/codegen"},next:{title:"Debugging a task",permalink:"/docs/guides/debug-task"}},p={},d=[{value:"Defining owners",id:"defining-owners",level:2},{value:"Project-level",id:"project-level",level:3},{value:"Workspace-level",id:"workspace-level",level:3},{value:"Generating <code>CODEOWNERS</code>",id:"generating-codeowners",level:2},{value:"FAQ",id:"faq",level:2},{value:"What providers or formats are supported?",id:"what-providers-or-formats-are-supported",level:3},{value:"Where does the <code>CODEOWNERS</code> file get created?",id:"where-does-the-codeowners-file-get-created",level:3},{value:"Why are owners defined in <code>moon.yml</code> and not an alternative like <code>OWNERS</code>?",id:"why-are-owners-defined-in-moonyml-and-not-an-alternative-like-owners",level:3}],m={toc:d};function f(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{version:"1.8.0",header:!0,mdxType:"VersionLabel"}),(0,r.kt)("p",null,"Code owners enables companies to define individuals, teams, or groups that are responsible for code\nin a repository. This is useful in ensuring that pull/merge requests are reviewed and approved by a\nspecific set of contributors, before the branch is merged into the base branch."),(0,r.kt)("p",null,"With that being said, moon ",(0,r.kt)("em",{parentName:"p"},"does not")," implement a custom code owners solution, and instead builds\nupon the popular ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," integration in VCS providers, like GitHub, GitLab, and Bitbucket."),(0,r.kt)("h2",{id:"defining-owners"},"Defining owners"),(0,r.kt)("p",null,"With moon, you ",(0,r.kt)("em",{parentName:"p"},"do not")," modify a ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file directly. Instead you define owners ",(0,r.kt)("em",{parentName:"p"},"per project"),"\nwith ",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),", or globally with ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),".\nThese owners are then aggregated and automatically\n",(0,r.kt)("a",{parentName:"p",href:"#generating-codeowners"},"synced to a ",(0,r.kt)("inlineCode",{parentName:"a"},"CODEOWNERS")," file"),"."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"An owner is a user, team, or group unique to your VCS provider. Please refer to your provider's\ndocumentation for the correct format in which to define owners.")),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"For projects, we support an ",(0,r.kt)("a",{parentName:"p",href:"../config/project#owners"},(0,r.kt)("inlineCode",{parentName:"a"},"owners"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," that accepts file patterns/paths and their owners (contributors\nrequired to review), as well as operational settings for minimum required approvals, custom groups,\nand more."),(0,r.kt)("p",null,"Paths configured here are relative from the project root, and will be prefixed with the project\nsource (path from workspace root to project root) when the file is synced."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="packages/components/moon.yml"',title:'"packages/components/moon.yml"'},"owners:\n requiredApprovals: 2\n paths:\n 'src/': ['@frontend', '@design-system']\n '*.config.js': ['@frontend-infra']\n '*.json': ['@frontend-infra']\n")),(0,r.kt)("p",null,"The configuration above would generate the following:"),(0,r.kt)(o.Z,{groupId:"codeowners",defaultValue:"github",values:[{label:"GitHub",value:"github"},{label:"GitLab",value:"gitlab"},{label:"Bitbucket",value:"bitbucket"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"github",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# components\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n"))),(0,r.kt)(i.Z,{value:"gitlab",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".gitlab/CODEOWNERS"',title:'".gitlab/CODEOWNERS"'},"# components\n[components][2]\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n"))),(0,r.kt)(i.Z,{value:"bitbucket",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title="CODEOWNERS"',title:'"CODEOWNERS"'},"# components\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n")))),(0,r.kt)("h3",{id:"workspace-level"},"Workspace-level"),(0,r.kt)("p",null,"Project scoped owners are great but sometimes you need to define owners for files that span across\nall projects, or files at any depth within the repository. With the\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#globalpaths"},(0,r.kt)("inlineCode",{parentName:"a"},"codeowners.globalPaths"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),", you can do just that."),(0,r.kt)("p",null,"Paths configured here are used as-is, allowing for full control of what ownership is applied."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"codeowners:\n globalPaths:\n # All files\n '*': ['@admins']\n # Config folder at any depth\n 'config/': ['@app-platform']\n # GitHub folder at the root\n '/.github/': ['@infra']\n")),(0,r.kt)("p",null,"The configuration above would generate the following at the top of the file (is the same for all\nproviders):"),(0,r.kt)(o.Z,{groupId:"codeowners",defaultValue:"github",values:[{label:"GitHub",value:"github"},{label:"GitLab",value:"gitlab"},{label:"Bitbucket",value:"bitbucket"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"github",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# (workspace)\n* @admins\nconfig/ @app-platform\n/.github/ @infra\n"))),(0,r.kt)(i.Z,{value:"gitlab",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".gitlab/CODEOWNERS"',title:'".gitlab/CODEOWNERS"'},"# (workspace)\n* @admins\nconfig/ @app-platform\n/.github/ @infra\n"))),(0,r.kt)(i.Z,{value:"bitbucket",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title="CODEOWNERS"',title:'"CODEOWNERS"'},"# (workspace)\n* @admins\nconfig/ @app-platform\n/.github/ @infra\n")))),(0,r.kt)("h2",{id:"generating-codeowners"},"Generating ",(0,r.kt)("inlineCode",{parentName:"h2"},"CODEOWNERS")),(0,r.kt)("p",null,"Code owners is an opt-in feature, and as such, the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file can be generated in a few ways.\nThe first is manually, with the ",(0,r.kt)("a",{parentName:"p",href:"../commands/sync/codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},"moon sync codeowners"))," command."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync codeowners\n")),(0,r.kt)("p",null,"While this works, it is a manual process, and can easily be forgotten, resulting in an out-of-date\nfile."),(0,r.kt)("p",null,"An alternative solution is the ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#synconrun"},(0,r.kt)("inlineCode",{parentName:"a"},"codeowners.syncOnRun"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),", that when enabled, moon will automatically\ngenerate a ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file when a ",(0,r.kt)("a",{parentName:"p",href:"../concepts/target"},"target")," is ran."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"codeowners:\n syncOnRun: true\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The format and location of the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file is based on the\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#provider"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.provider"))," setting.")),(0,r.kt)("h2",{id:"faq"},"FAQ"),(0,r.kt)("h3",{id:"what-providers-or-formats-are-supported"},"What providers or formats are supported?"),(0,r.kt)("p",null,"The following providers are supported, based on the ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#provider"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.provider")),"\nsetting."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.atlassian.com/apps/1218598/code-owners-for-bitbucket?tab=overview&hosting=cloud"},"Bitbucket"),"\n(via a 3rd-party app)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners"},"GitHub")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html"},"GitLab")),(0,r.kt)("li",{parentName:"ul"},"Other (very basic syntax)")),(0,r.kt)("h3",{id:"where-does-the-codeowners-file-get-created"},"Where does the ",(0,r.kt)("inlineCode",{parentName:"h3"},"CODEOWNERS")," file get created?"),(0,r.kt)("p",null,"The location of the file is dependent on the configured provider."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"GitHub -> ",(0,r.kt)("inlineCode",{parentName:"li"},".github/CODEOWNERS")),(0,r.kt)("li",{parentName:"ul"},"GitLab -> ",(0,r.kt)("inlineCode",{parentName:"li"},".gitlab/CODEOWNERS")),(0,r.kt)("li",{parentName:"ul"},"Everything else -> ",(0,r.kt)("inlineCode",{parentName:"li"},"CODEOWNERS"))),(0,r.kt)("h3",{id:"why-are-owners-defined-in-moonyml-and-not-an-alternative-like-owners"},"Why are owners defined in ",(0,r.kt)("inlineCode",{parentName:"h3"},"moon.yml")," and not an alternative like ",(0,r.kt)("inlineCode",{parentName:"h3"},"OWNERS"),"?"),(0,r.kt)("p",null,"A very popular pattern for defining owners is through an ",(0,r.kt)("inlineCode",{parentName:"p"},"OWNERS")," file, which can appear in any\nfolder, at any depth, within the repository. All of these files are then aggregated into a single\n",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file."),(0,r.kt)("p",null,"While this is useful for viewing ownership of a folder at a glance, it incurs a massive performance\nhit as we'd have to constantly glob the ",(0,r.kt)("em",{parentName:"p"},"entire")," repository to find all ",(0,r.kt)("inlineCode",{parentName:"p"},"OWNERS")," files. We found it\nbest to define owners in ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml")," instead for the following reasons:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"No performance hit, as we're already loading and parsing these config files."),(0,r.kt)("li",{parentName:"ul"},"Co-locates owners with the rest of moon's configuration."),(0,r.kt)("li",{parentName:"ul"},"Ownership is now a part of the project graph, enabling future features.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f838734.a2b29331.js b/assets/js/9f838734.a2b29331.js deleted file mode 100644 index c6ffad563a3..00000000000 --- a/assets/js/9f838734.a2b29331.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3231],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,i),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),i=n(83457),l=n(35595),s=n(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),a=c[n].value;a!==l&&(d(t),s(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},i,{className:(0,o.Z)("tabs__item",u,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,l.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",c)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),o=n(30654),i=n(70784),l=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function c(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const i=(0,r.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(l),(0,a.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(i.location.search);t.set(l,e),i.replace({...i.location,search:t.toString()})}),[l,i])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=c(e),[i,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,l.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),h=(()=>{const e=d??f;return u({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return a.createElement(r.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},48764:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>f,frontMatter:()=>s,metadata:()=>u,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),o=n(33337),i=n(39798),l=n(79022);const s={title:"Code owners",toc_max_heading_level:6,tags:["code","owners","codeowners"]},c=void 0,u={unversionedId:"guides/codeowners",id:"guides/codeowners",title:"Code owners",description:"Code owners enables companies to define individuals, teams, or groups that are responsible for code",source:"@site/docs/guides/codeowners.mdx",sourceDirName:"guides",slug:"/guides/codeowners",permalink:"/docs/guides/codeowners",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/codeowners.mdx",tags:[{label:"code",permalink:"/docs/tags/code"},{label:"owners",permalink:"/docs/tags/owners"},{label:"codeowners",permalink:"/docs/tags/codeowners"}],version:"current",frontMatter:{title:"Code owners",toc_max_heading_level:6,tags:["code","owners","codeowners"]},sidebar:"guides",previous:{title:"Code generation",permalink:"/docs/guides/codegen"},next:{title:"Debugging a task",permalink:"/docs/guides/debug-task"}},p={},d=[{value:"Defining owners",id:"defining-owners",level:2},{value:"Project-level",id:"project-level",level:3},{value:"Workspace-level",id:"workspace-level",level:3},{value:"Generating <code>CODEOWNERS</code>",id:"generating-codeowners",level:2},{value:"FAQ",id:"faq",level:2},{value:"What providers or formats are supported?",id:"what-providers-or-formats-are-supported",level:3},{value:"Where does the <code>CODEOWNERS</code> file get created?",id:"where-does-the-codeowners-file-get-created",level:3},{value:"Why are owners defined in <code>moon.yml</code> and not an alternative like <code>OWNERS</code>?",id:"why-are-owners-defined-in-moonyml-and-not-an-alternative-like-owners",level:3}],m={toc:d};function f(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{version:"1.8.0",header:!0,mdxType:"VersionLabel"}),(0,r.kt)("p",null,"Code owners enables companies to define individuals, teams, or groups that are responsible for code\nin a repository. This is useful in ensuring that pull/merge requests are reviewed and approved by a\nspecific set of contributors, before the branch is merged into the base branch."),(0,r.kt)("p",null,"With that being said, moon ",(0,r.kt)("em",{parentName:"p"},"does not")," implement a custom code owners solution, and instead builds\nupon the popular ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," integration in VCS providers, like GitHub, GitLab, and Bitbucket."),(0,r.kt)("h2",{id:"defining-owners"},"Defining owners"),(0,r.kt)("p",null,"With moon, you ",(0,r.kt)("em",{parentName:"p"},"do not")," modify a ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file directly. Instead you define owners ",(0,r.kt)("em",{parentName:"p"},"per project"),"\nwith ",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),", or globally with ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),".\nThese owners are then aggregated and automatically\n",(0,r.kt)("a",{parentName:"p",href:"#generating-codeowners"},"synced to a ",(0,r.kt)("inlineCode",{parentName:"a"},"CODEOWNERS")," file"),"."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"An owner is a user, team, or group unique to your VCS provider. Please refer to your provider's\ndocumentation for the correct format in which to define owners.")),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"For projects, we support an ",(0,r.kt)("a",{parentName:"p",href:"../config/project#owners"},(0,r.kt)("inlineCode",{parentName:"a"},"owners"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," that accepts file patterns/paths and their owners (contributors\nrequired to review), as well as operational settings for minimum required approvals, custom groups,\nand more."),(0,r.kt)("p",null,"Paths configured here are relative from the project root, and will be prefixed with the project\nsource (path from workspace root to project root) when the file is synced."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="packages/components/moon.yml"',title:'"packages/components/moon.yml"'},"owners:\n requiredApprovals: 2\n paths:\n 'src/': ['@frontend', '@design-system']\n '*.config.js': ['@frontend-infra']\n '*.json': ['@frontend-infra']\n")),(0,r.kt)("p",null,"The configuration above would generate the following:"),(0,r.kt)(o.Z,{groupId:"codeowners",defaultValue:"github",values:[{label:"GitHub",value:"github"},{label:"GitLab",value:"gitlab"},{label:"Bitbucket",value:"bitbucket"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"github",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# components\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n"))),(0,r.kt)(i.Z,{value:"gitlab",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".gitlab/CODEOWNERS"',title:'".gitlab/CODEOWNERS"'},"# components\n[components][2]\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n"))),(0,r.kt)(i.Z,{value:"bitbucket",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title="CODEOWNERS"',title:'"CODEOWNERS"'},"# components\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n")))),(0,r.kt)("h3",{id:"workspace-level"},"Workspace-level"),(0,r.kt)("p",null,"Project scoped owners are great but sometimes you need to define owners for files that span across\nall projects, or files at any depth within the repository. With the\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#globalpaths"},(0,r.kt)("inlineCode",{parentName:"a"},"codeowners.globalPaths"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),", you can do just that."),(0,r.kt)("p",null,"Paths configured here are used as-is, allowing for full control of what ownership is applied."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"codeowners:\n globalPaths:\n # All files\n '*': ['@admins']\n # Config folder at any depth\n 'config/': ['@app-platform']\n # GitHub folder at the root\n '/.github/': ['@infra']\n")),(0,r.kt)("p",null,"The configuration above would generate the following at the top of the file (is the same for all\nproviders):"),(0,r.kt)(o.Z,{groupId:"codeowners",defaultValue:"github",values:[{label:"GitHub",value:"github"},{label:"GitLab",value:"gitlab"},{label:"Bitbucket",value:"bitbucket"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"github",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# (workspace)\n* @admins\nconfig/ @app-platform\n/.github/ @infra\n"))),(0,r.kt)(i.Z,{value:"gitlab",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".gitlab/CODEOWNERS"',title:'".gitlab/CODEOWNERS"'},"# (workspace)\n* @admins\nconfig/ @app-platform\n/.github/ @infra\n"))),(0,r.kt)(i.Z,{value:"bitbucket",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title="CODEOWNERS"',title:'"CODEOWNERS"'},"# (workspace)\n* @admins\nconfig/ @app-platform\n/.github/ @infra\n")))),(0,r.kt)("h2",{id:"generating-codeowners"},"Generating ",(0,r.kt)("inlineCode",{parentName:"h2"},"CODEOWNERS")),(0,r.kt)("p",null,"Code owners is an opt-in feature, and as such, the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file can be generated in a few ways.\nThe first is manually, with the ",(0,r.kt)("a",{parentName:"p",href:"../commands/sync/codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},"moon sync codeowners"))," command."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync codeowners\n")),(0,r.kt)("p",null,"While this works, it is a manual process, and can easily be forgotten, resulting in an out-of-date\nfile."),(0,r.kt)("p",null,"An alternative solution is the ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#synconrun"},(0,r.kt)("inlineCode",{parentName:"a"},"codeowners.syncOnRun"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),", that when enabled, moon will automatically\ngenerate a ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file when a ",(0,r.kt)("a",{parentName:"p",href:"../concepts/target"},"target")," is ran."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"codeowners:\n syncOnRun: true\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The format and location of the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file is based on the\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#provider"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.provider"))," setting.")),(0,r.kt)("h2",{id:"faq"},"FAQ"),(0,r.kt)("h3",{id:"what-providers-or-formats-are-supported"},"What providers or formats are supported?"),(0,r.kt)("p",null,"The following providers are supported, based on the ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#provider"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.provider")),"\nsetting."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.atlassian.com/apps/1218598/code-owners-for-bitbucket?tab=overview&hosting=cloud"},"Bitbucket"),"\n(via a 3rd-party app)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners"},"GitHub")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.gitlab.com/ee/user/project/codeowners/reference.html"},"GitLab")),(0,r.kt)("li",{parentName:"ul"},"Other (very basic syntax)")),(0,r.kt)("h3",{id:"where-does-the-codeowners-file-get-created"},"Where does the ",(0,r.kt)("inlineCode",{parentName:"h3"},"CODEOWNERS")," file get created?"),(0,r.kt)("p",null,"The location of the file is dependent on the configured provider."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"GitHub -> ",(0,r.kt)("inlineCode",{parentName:"li"},".github/CODEOWNERS")),(0,r.kt)("li",{parentName:"ul"},"GitLab -> ",(0,r.kt)("inlineCode",{parentName:"li"},".gitlab/CODEOWNERS")),(0,r.kt)("li",{parentName:"ul"},"Everything else -> ",(0,r.kt)("inlineCode",{parentName:"li"},"CODEOWNERS"))),(0,r.kt)("h3",{id:"why-are-owners-defined-in-moonyml-and-not-an-alternative-like-owners"},"Why are owners defined in ",(0,r.kt)("inlineCode",{parentName:"h3"},"moon.yml")," and not an alternative like ",(0,r.kt)("inlineCode",{parentName:"h3"},"OWNERS"),"?"),(0,r.kt)("p",null,"A very popular pattern for defining owners is through an ",(0,r.kt)("inlineCode",{parentName:"p"},"OWNERS")," file, which can appear in any\nfolder, at any depth, within the repository. All of these files are then aggregated into a single\n",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file."),(0,r.kt)("p",null,"While this is useful for viewing ownership of a folder at a glance, it incurs a massive performance\nhit as we'd have to constantly glob the ",(0,r.kt)("em",{parentName:"p"},"entire")," repository to find all ",(0,r.kt)("inlineCode",{parentName:"p"},"OWNERS")," files. We found it\nbest to define owners in ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml")," instead for the following reasons:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"No performance hit, as we're already loading and parsing these config files."),(0,r.kt)("li",{parentName:"ul"},"Co-locates owners with the rest of moon's configuration."),(0,r.kt)("li",{parentName:"ul"},"Ownership is now a part of the project graph, enabling future features.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9ff86157.54c7cec4.js b/assets/js/9ff86157.54c7cec4.js new file mode 100644 index 00000000000..93ba1ba13cf --- /dev/null +++ b/assets/js/9ff86157.54c7cec4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38830],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},p=Object.keys(e);for(n=0;n<p.length;n++)r=p[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(n=0;n<p.length;n++)r=p[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),l=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=l(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,p=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=l(r),m=o,y=f["".concat(i,".").concat(m)]||f[m]||u[m]||p;return r?n.createElement(y,a(a({ref:t},s),{},{components:r})):n.createElement(y,a({ref:t},s))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var p=r.length,a=new Array(p);a[0]=f;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var l=2;l<p;l++)a[l]=r[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},24158:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>a,default:()=>l,frontMatter:()=>p,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const p={},a=void 0,c=[],i={toc:c};function l(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/github/workflow/status/moonrepo/moon/Moon",alt:"build status"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/v/@moonrepo/types",alt:"npm version"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/l/@moonrepo/types",alt:"npm license"})),(0,o.kt)("p",null,"Reusable TypeScript types for moon projects, tasks, and configurations."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9ff86157.a9b98ed2.js b/assets/js/9ff86157.a9b98ed2.js deleted file mode 100644 index 260e258a0cb..00000000000 --- a/assets/js/9ff86157.a9b98ed2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8830],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},p=Object.keys(e);for(n=0;n<p.length;n++)r=p[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(n=0;n<p.length;n++)r=p[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),l=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=l(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,p=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=l(r),m=o,y=f["".concat(i,".").concat(m)]||f[m]||u[m]||p;return r?n.createElement(y,a(a({ref:t},s),{},{components:r})):n.createElement(y,a({ref:t},s))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var p=r.length,a=new Array(p);a[0]=f;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var l=2;l<p;l++)a[l]=r[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},24158:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>a,default:()=>l,frontMatter:()=>p,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const p={},a=void 0,c=[],i={toc:c};function l(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/github/workflow/status/moonrepo/moon/Moon",alt:"build status"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/v/@moonrepo/types",alt:"npm version"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/l/@moonrepo/types",alt:"npm license"})),(0,o.kt)("p",null,"Reusable TypeScript types for moon projects, tasks, and configurations."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a0d8b188.05b6a8dd.js b/assets/js/a0d8b188.05b6a8dd.js deleted file mode 100644 index 58577cca223..00000000000 --- a/assets/js/a0d8b188.05b6a8dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5547],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),m=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return a.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),u=m(n),c=r,f=u["".concat(p,".").concat(c)]||u[c]||d[c]||i;return n?a.createElement(f,l(l({ref:t},s),{},{components:n})):a.createElement(f,l({ref:t},s))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var m=2;m<i;m++)l[m]=n[m];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(83469),i=n(31792);function l(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(i.Z,{icon:r.dT$}))}},9785:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{text:t="Required"}=e;return a.createElement(r.Z,{text:t,variant:"failure",className:"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:p}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?l[p]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},96927:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>m,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),i=n(32189),l=n(9785);const o={title:"template.yml",toc_max_heading_level:6},p=void 0,m={unversionedId:"config/template",id:"config/template",title:"template.yml",description:"The template.yml file configures metadata and variables for a template,",source:"@site/docs/config/template.mdx",sourceDirName:"config",slug:"/config/template",permalink:"/docs/config/template",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/template.mdx",tags:[],version:"current",frontMatter:{title:"template.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:"moon.yml",permalink:"/docs/config/project"},next:{title:"Editors",permalink:"/docs/editors"}},s={},d=[{value:"<code>title</code><RequiredLabel />",id:"title",level:2},{value:"<code>description</code><RequiredLabel />",id:"description",level:2},{value:"<code>variables</code>",id:"variables",level:2},{value:"<code>default</code><RequiredLabel />",id:"default",level:3},{value:'<code>prompt</code><RequiredLabel text="Required for enums" />',id:"prompt",level:3},{value:"<code>type</code><RequiredLabel />",id:"type",level:3},{value:"Numbers & strings",id:"numbers--strings",level:3},{value:"<code>required</code>",id:"required",level:3},{value:"Enums",id:"enums",level:3},{value:"<code>multiple</code>",id:"multiple",level:3},{value:"<code>values</code><RequiredLabel />",id:"values",level:3},{value:"Frontmatter",id:"frontmatter",level:2},{value:"<code>force</code>",id:"force",level:3},{value:"<code>to</code>",id:"to",level:3},{value:"<code>skip</code>",id:"skip",level:3}],u={toc:d};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"template.yml")," file configures metadata and variables for a template,\n",(0,r.kt)("a",{parentName:"p",href:"../guides/codegen"},"used by the generator"),", and must exist at the root of a named template folder."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"$schema: 'https://moonrepo.dev/schemas/template.json'\n")),(0,r.kt)("h2",{id:"title"},(0,r.kt)("inlineCode",{parentName:"h2"},"title"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateConfig#title",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"A human readable title that will be displayed during the ",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate")),"\nprocess."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"title: 'npm package'\n")),(0,r.kt)("h2",{id:"description"},(0,r.kt)("inlineCode",{parentName:"h2"},"description"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateConfig#description",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"A description of why the template exists, what its purpose is, and any other relevant information."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"description: |\n Scaffolds the initial structure for an npm package,\n including source and test folders, a package.json, and more.\n")),(0,r.kt)("h2",{id:"variables"},(0,r.kt)("inlineCode",{parentName:"h2"},"variables")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateConfig#variables",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"A mapping of variables that will be interpolated into all template files and file system paths when\n",(0,r.kt)("a",{parentName:"p",href:"https://tera.netlify.app/docs/#variables"},"rendering with Tera"),". The map key is the variable name\n(in camelCase or snake_case), while the value is a configuration object, as described with the\nsettings below."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n name:\n type: 'string'\n default: ''\n required: true\n prompt: 'Package name?'\n")),(0,r.kt)("h3",{id:"default"},(0,r.kt)("inlineCode",{parentName:"h3"},"default"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateVariableConfig#default",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"The default value of the variable. When ",(0,r.kt)("inlineCode",{parentName:"p"},"--defaults")," is passed to\n",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate"))," or ",(0,r.kt)("a",{parentName:"p",href:"#prompt"},(0,r.kt)("inlineCode",{parentName:"a"},"prompt"))," is not defined, the default value\nwill be used, otherwise the user will be prompted to enter a custom value."),(0,r.kt)("h3",{id:"prompt"},(0,r.kt)("inlineCode",{parentName:"h3"},"prompt"),(0,r.kt)(l.Z,{text:"Required for enums",mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateVariableConfig#prompt",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"When defined, will prompt the user with a message in the terminal to input a custom value, otherwise\n",(0,r.kt)("a",{parentName:"p",href:"#default"},(0,r.kt)("inlineCode",{parentName:"a"},"default"))," will be used."),(0,r.kt)("h3",{id:"type"},(0,r.kt)("inlineCode",{parentName:"h3"},"type"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)("p",null,"The type of value for the variable. Accepts ",(0,r.kt)("inlineCode",{parentName:"p"},"boolean"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"string"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"number"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"enum"),". Floats ",(0,r.kt)("em",{parentName:"p"},"are\nnot supported"),", use strings instead."),(0,r.kt)("h3",{id:"numbers--strings"},"Numbers & strings"),(0,r.kt)("p",null,"Your basic primitives."),(0,r.kt)("h3",{id:"required"},(0,r.kt)("inlineCode",{parentName:"h3"},"required")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateVariableConfig#required",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Marks the variable as required during ",(0,r.kt)("em",{parentName:"p"},"prompting only"),". For strings, will error for empty values\n(",(0,r.kt)("inlineCode",{parentName:"p"},"''"),"). For numbers, will error for zero's (",(0,r.kt)("inlineCode",{parentName:"p"},"0"),")."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n age:\n type: 'number'\n default: 0\n required: true\n prompt: 'Age?'\n")),(0,r.kt)("h3",{id:"enums"},"Enums"),(0,r.kt)("p",null,"An enum is an explicit list of string values that a user can choose from."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n color:\n type: 'enum'\n values: ['red', 'green', 'blue', 'purple']\n default: 'purple'\n prompt: 'Favorite color?'\n")),(0,r.kt)("h3",{id:"multiple"},(0,r.kt)("inlineCode",{parentName:"h3"},"multiple")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateEnumVariableConfig#multiple",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Allows multiple values to be chosen during prompting. In the template, an array or strings will be\nrendered, otherwise when not-multiple, a single string will be."),(0,r.kt)("h3",{id:"values"},(0,r.kt)("inlineCode",{parentName:"h3"},"values"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateEnumVariableConfig#values",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"List of explicit values to choose from. Can either be defined with a string, which acts as a value\nand label, or as an object, which defines an explicit value and label."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n color:\n type: 'enum'\n values:\n - 'red'\n # OR\n - value: 'red'\n label: 'Red \ud83d\udd34'\n # ...\n")),(0,r.kt)("h2",{id:"frontmatter"},"Frontmatter"),(0,r.kt)("p",null,"The following settings ",(0,r.kt)("em",{parentName:"p"},"are not")," available in ",(0,r.kt)("inlineCode",{parentName:"p"},"template.yml"),", but can be defined as frontmatter at\nthe top of a template file. View the ",(0,r.kt)("a",{parentName:"p",href:"../guides/codegen#frontmatter"},"code generation guide")," for more\ninformation."),(0,r.kt)("h3",{id:"force"},(0,r.kt)("inlineCode",{parentName:"h3"},"force")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateFrontmatterConfig#force",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"When enabled, will always overwrite a file of the same name at the destination path, and will bypass\nany prompting in the terminal."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"---\nforce: true\n---\n\nSome template content!\n")),(0,r.kt)("h3",{id:"to"},(0,r.kt)("inlineCode",{parentName:"h3"},"to")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateFrontmatterConfig#to",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines a custom file path, relative from the destination root, in which to create the file. This\nwill override the file path within the template folder, and allow for conditional rendering and\nengine filters to be used."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% set component_name = name | pascal_case %}\n\n---\nto: components/{{ component_name }}.tsx\n---\n\nexport function {{ component_name }}() {\n return <div />;\n}\n")),(0,r.kt)("h3",{id:"skip"},(0,r.kt)("inlineCode",{parentName:"h3"},"skip")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateFrontmatterConfig#skip",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"When enabled, the template file will be skipped while writing to the destination path. This setting\ncan be used to conditionally render a file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},'---\nskip: {{ name == "someCondition" }}\n---\n\nSome template content!\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a0d8b188.2f8d6aa5.js b/assets/js/a0d8b188.2f8d6aa5.js new file mode 100644 index 00000000000..43025d02788 --- /dev/null +++ b/assets/js/a0d8b188.2f8d6aa5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[25547],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),m=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return a.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),u=m(n),c=r,f=u["".concat(p,".").concat(c)]||u[c]||d[c]||i;return n?a.createElement(f,l(l({ref:t},s),{},{components:n})):a.createElement(f,l({ref:t},s))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var m=2;m<i;m++)l[m]=n[m];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(83469),i=n(31792);function l(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(i.Z,{icon:r.dT$}))}},9785:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{text:t="Required"}=e;return a.createElement(r.Z,{text:t,variant:"failure",className:"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:p}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?l[p]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},96927:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>m,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),i=n(32189),l=n(9785);const o={title:"template.yml",toc_max_heading_level:6},p=void 0,m={unversionedId:"config/template",id:"config/template",title:"template.yml",description:"The template.yml file configures metadata and variables for a template,",source:"@site/docs/config/template.mdx",sourceDirName:"config",slug:"/config/template",permalink:"/docs/config/template",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/template.mdx",tags:[],version:"current",frontMatter:{title:"template.yml",toc_max_heading_level:6},sidebar:"docs",previous:{title:"moon.yml",permalink:"/docs/config/project"},next:{title:"Editors",permalink:"/docs/editors"}},s={},d=[{value:"<code>title</code><RequiredLabel />",id:"title",level:2},{value:"<code>description</code><RequiredLabel />",id:"description",level:2},{value:"<code>variables</code>",id:"variables",level:2},{value:"<code>default</code><RequiredLabel />",id:"default",level:3},{value:'<code>prompt</code><RequiredLabel text="Required for enums" />',id:"prompt",level:3},{value:"<code>type</code><RequiredLabel />",id:"type",level:3},{value:"Numbers & strings",id:"numbers--strings",level:3},{value:"<code>required</code>",id:"required",level:3},{value:"Enums",id:"enums",level:3},{value:"<code>multiple</code>",id:"multiple",level:3},{value:"<code>values</code><RequiredLabel />",id:"values",level:3},{value:"Frontmatter",id:"frontmatter",level:2},{value:"<code>force</code>",id:"force",level:3},{value:"<code>to</code>",id:"to",level:3},{value:"<code>skip</code>",id:"skip",level:3}],u={toc:d};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"template.yml")," file configures metadata and variables for a template,\n",(0,r.kt)("a",{parentName:"p",href:"../guides/codegen"},"used by the generator"),", and must exist at the root of a named template folder."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"$schema: 'https://moonrepo.dev/schemas/template.json'\n")),(0,r.kt)("h2",{id:"title"},(0,r.kt)("inlineCode",{parentName:"h2"},"title"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateConfig#title",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"A human readable title that will be displayed during the ",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate")),"\nprocess."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"title: 'npm package'\n")),(0,r.kt)("h2",{id:"description"},(0,r.kt)("inlineCode",{parentName:"h2"},"description"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateConfig#description",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"A description of why the template exists, what its purpose is, and any other relevant information."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"description: |\n Scaffolds the initial structure for an npm package,\n including source and test folders, a package.json, and more.\n")),(0,r.kt)("h2",{id:"variables"},(0,r.kt)("inlineCode",{parentName:"h2"},"variables")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateConfig#variables",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"A mapping of variables that will be interpolated into all template files and file system paths when\n",(0,r.kt)("a",{parentName:"p",href:"https://tera.netlify.app/docs/#variables"},"rendering with Tera"),". The map key is the variable name\n(in camelCase or snake_case), while the value is a configuration object, as described with the\nsettings below."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n name:\n type: 'string'\n default: ''\n required: true\n prompt: 'Package name?'\n")),(0,r.kt)("h3",{id:"default"},(0,r.kt)("inlineCode",{parentName:"h3"},"default"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateVariableConfig#default",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"The default value of the variable. When ",(0,r.kt)("inlineCode",{parentName:"p"},"--defaults")," is passed to\n",(0,r.kt)("a",{parentName:"p",href:"../commands/generate"},(0,r.kt)("inlineCode",{parentName:"a"},"moon generate"))," or ",(0,r.kt)("a",{parentName:"p",href:"#prompt"},(0,r.kt)("inlineCode",{parentName:"a"},"prompt"))," is not defined, the default value\nwill be used, otherwise the user will be prompted to enter a custom value."),(0,r.kt)("h3",{id:"prompt"},(0,r.kt)("inlineCode",{parentName:"h3"},"prompt"),(0,r.kt)(l.Z,{text:"Required for enums",mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateVariableConfig#prompt",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"When defined, will prompt the user with a message in the terminal to input a custom value, otherwise\n",(0,r.kt)("a",{parentName:"p",href:"#default"},(0,r.kt)("inlineCode",{parentName:"a"},"default"))," will be used."),(0,r.kt)("h3",{id:"type"},(0,r.kt)("inlineCode",{parentName:"h3"},"type"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)("p",null,"The type of value for the variable. Accepts ",(0,r.kt)("inlineCode",{parentName:"p"},"boolean"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"string"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"number"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"enum"),". Floats ",(0,r.kt)("em",{parentName:"p"},"are\nnot supported"),", use strings instead."),(0,r.kt)("h3",{id:"numbers--strings"},"Numbers & strings"),(0,r.kt)("p",null,"Your basic primitives."),(0,r.kt)("h3",{id:"required"},(0,r.kt)("inlineCode",{parentName:"h3"},"required")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateVariableConfig#required",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Marks the variable as required during ",(0,r.kt)("em",{parentName:"p"},"prompting only"),". For strings, will error for empty values\n(",(0,r.kt)("inlineCode",{parentName:"p"},"''"),"). For numbers, will error for zero's (",(0,r.kt)("inlineCode",{parentName:"p"},"0"),")."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n age:\n type: 'number'\n default: 0\n required: true\n prompt: 'Age?'\n")),(0,r.kt)("h3",{id:"enums"},"Enums"),(0,r.kt)("p",null,"An enum is an explicit list of string values that a user can choose from."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n color:\n type: 'enum'\n values: ['red', 'green', 'blue', 'purple']\n default: 'purple'\n prompt: 'Favorite color?'\n")),(0,r.kt)("h3",{id:"multiple"},(0,r.kt)("inlineCode",{parentName:"h3"},"multiple")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateEnumVariableConfig#multiple",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Allows multiple values to be chosen during prompting. In the template, an array or strings will be\nrendered, otherwise when not-multiple, a single string will be."),(0,r.kt)("h3",{id:"values"},(0,r.kt)("inlineCode",{parentName:"h3"},"values"),(0,r.kt)(l.Z,{mdxType:"RequiredLabel"})),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateEnumVariableConfig#values",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"List of explicit values to choose from. Can either be defined with a string, which acts as a value\nand label, or as an object, which defines an explicit value and label."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="template.yml"',title:'"template.yml"'},"variables:\n color:\n type: 'enum'\n values:\n - 'red'\n # OR\n - value: 'red'\n label: 'Red \ud83d\udd34'\n # ...\n")),(0,r.kt)("h2",{id:"frontmatter"},"Frontmatter"),(0,r.kt)("p",null,"The following settings ",(0,r.kt)("em",{parentName:"p"},"are not")," available in ",(0,r.kt)("inlineCode",{parentName:"p"},"template.yml"),", but can be defined as frontmatter at\nthe top of a template file. View the ",(0,r.kt)("a",{parentName:"p",href:"../guides/codegen#frontmatter"},"code generation guide")," for more\ninformation."),(0,r.kt)("h3",{id:"force"},(0,r.kt)("inlineCode",{parentName:"h3"},"force")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateFrontmatterConfig#force",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"When enabled, will always overwrite a file of the same name at the destination path, and will bypass\nany prompting in the terminal."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"---\nforce: true\n---\n\nSome template content!\n")),(0,r.kt)("h3",{id:"to"},(0,r.kt)("inlineCode",{parentName:"h3"},"to")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateFrontmatterConfig#to",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines a custom file path, relative from the destination root, in which to create the file. This\nwill override the file path within the template folder, and allow for conditional rendering and\nengine filters to be used."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},"{% set component_name = name | pascal_case %}\n\n---\nto: components/{{ component_name }}.tsx\n---\n\nexport function {{ component_name }}() {\n return <div />;\n}\n")),(0,r.kt)("h3",{id:"skip"},(0,r.kt)("inlineCode",{parentName:"h3"},"skip")),(0,r.kt)(i.Z,{to:"/api/types/interface/TemplateFrontmatterConfig#skip",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"When enabled, the template file will be skipped while writing to the destination path. This setting\ncan be used to conditionally render a file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig"},'---\nskip: {{ name == "someCondition" }}\n---\n\nSome template content!\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a18798d1.6786a819.js b/assets/js/a18798d1.6786a819.js deleted file mode 100644 index f67adf02642..00000000000 --- a/assets/js/a18798d1.6786a819.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7460],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(r),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||a;return r?n.createElement(f,l(l({ref:t},p),{},{components:r})):n.createElement(f,l({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=r[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},92912:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={title:"unalias"},l=void 0,i={unversionedId:"proto/commands/unalias",id:"proto/commands/unalias",title:"unalias",description:"The proto unalias (or proto ua) command will remove a custom alias for the",source:"@site/docs/proto/commands/unalias.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/unalias",permalink:"/docs/proto/commands/unalias",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/unalias.mdx",tags:[],version:"current",frontMatter:{title:"unalias"},sidebar:"proto",previous:{title:"tools",permalink:"/docs/proto/commands/tools"},next:{title:"uninstall",permalink:"/docs/proto/commands/uninstall"}},s={},c=[{value:"Arguments",id:"arguments",level:3}],p={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto unalias <tool> <label>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ua"),") command will remove a custom alias for the\nprovided tool."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto unalias node work\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<label>")," - Name of the alias. Supports alpanumeric chars.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a18798d1.be912ea9.js b/assets/js/a18798d1.be912ea9.js new file mode 100644 index 00000000000..3568bd24430 --- /dev/null +++ b/assets/js/a18798d1.be912ea9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27460],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(r),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||a;return r?n.createElement(f,l(l({ref:t},p),{},{components:r})):n.createElement(f,l({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=r[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},92912:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={title:"unalias"},l=void 0,i={unversionedId:"proto/commands/unalias",id:"proto/commands/unalias",title:"unalias",description:"The proto unalias (or proto ua) command will remove a custom alias for the",source:"@site/docs/proto/commands/unalias.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/unalias",permalink:"/docs/proto/commands/unalias",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/unalias.mdx",tags:[],version:"current",frontMatter:{title:"unalias"},sidebar:"proto",previous:{title:"tools",permalink:"/docs/proto/commands/tools"},next:{title:"uninstall",permalink:"/docs/proto/commands/uninstall"}},s={},c=[{value:"Arguments",id:"arguments",level:3}],p={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto unalias <tool> <label>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ua"),") command will remove a custom alias for the\nprovided tool."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto unalias node work\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<label>")," - Name of the alias. Supports alpanumeric chars.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a20401e4.8ab92f76.js b/assets/js/a20401e4.8ab92f76.js deleted file mode 100644 index a12cb3bad8e..00000000000 --- a/assets/js/a20401e4.8ab92f76.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[969],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return n?o.createElement(f,l(l({ref:t},c),{},{components:n})):o.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},96681:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={title:"install"},l=void 0,i={unversionedId:"proto/commands/install",id:"proto/commands/install",title:"install",description:"The proto install (or proto i) command will download and install a tool by unpacking",source:"@site/docs/proto/commands/install.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/install",permalink:"/docs/proto/commands/install",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/install.mdx",tags:[],version:"current",frontMatter:{title:"install"},sidebar:"proto",previous:{title:"completions",permalink:"/docs/proto/commands/completions"},next:{title:"install-global",permalink:"/docs/proto/commands/install-global"}},s={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto install <tool>")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"proto i"),") command will download and install a tool by unpacking\ntheir archive to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<tool>"),". If the tool has already been installed, the command will\nexit early."),(0,r.kt)("p",null,"The command is also smart enough to resolve partial versions, so 1, 1.2, and 1.2.3 are all\nacceptable. It even supports aliases when applicable, like ",(0,r.kt)("inlineCode",{parentName:"p"},"latest"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"next"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"beta"),", etc. To install\na canary release, use ",(0,r.kt)("inlineCode",{parentName:"p"},"--canary"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install deno 1.31\n$ proto install deno --canary\n")),(0,r.kt)("p",null,"Some tools run ",(0,r.kt)("a",{parentName:"p",href:"../tools"},"post-install hooks")," that support arbitrary arguments that can be passed\nafter ",(0,r.kt)("inlineCode",{parentName:"p"},"--"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install go -- --no-gobin\n")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[version]"),' - Version of tool. Defaults to "latest".'),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[-- <args>]")," - Additional arguments to pass to post-install hooks.")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--canary")," - Install a canary (next, nightly, etc) version."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--pin")," - Pin the resolved version as the global default.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a20401e4.a0c49a35.js b/assets/js/a20401e4.a0c49a35.js new file mode 100644 index 00000000000..ee710189eb3 --- /dev/null +++ b/assets/js/a20401e4.a0c49a35.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70969],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return n?o.createElement(f,l(l({ref:t},c),{},{components:n})):o.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},96681:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={title:"install"},l=void 0,i={unversionedId:"proto/commands/install",id:"proto/commands/install",title:"install",description:"The proto install (or proto i) command will download and install a tool by unpacking",source:"@site/docs/proto/commands/install.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/install",permalink:"/docs/proto/commands/install",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/install.mdx",tags:[],version:"current",frontMatter:{title:"install"},sidebar:"proto",previous:{title:"completions",permalink:"/docs/proto/commands/completions"},next:{title:"install-global",permalink:"/docs/proto/commands/install-global"}},s={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto install <tool>")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"proto i"),") command will download and install a tool by unpacking\ntheir archive to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<tool>"),". If the tool has already been installed, the command will\nexit early."),(0,r.kt)("p",null,"The command is also smart enough to resolve partial versions, so 1, 1.2, and 1.2.3 are all\nacceptable. It even supports aliases when applicable, like ",(0,r.kt)("inlineCode",{parentName:"p"},"latest"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"next"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"beta"),", etc. To install\na canary release, use ",(0,r.kt)("inlineCode",{parentName:"p"},"--canary"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install deno 1.31\n$ proto install deno --canary\n")),(0,r.kt)("p",null,"Some tools run ",(0,r.kt)("a",{parentName:"p",href:"../tools"},"post-install hooks")," that support arbitrary arguments that can be passed\nafter ",(0,r.kt)("inlineCode",{parentName:"p"},"--"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install go -- --no-gobin\n")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[version]"),' - Version of tool. Defaults to "latest".'),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[-- <args>]")," - Additional arguments to pass to post-install hooks.")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--canary")," - Install a canary (next, nightly, etc) version."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--pin")," - Pin the resolved version as the global default, and create a symlink in ",(0,r.kt)("inlineCode",{parentName:"li"},"~/.proto/bin"),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a219b733.79c5b378.js b/assets/js/a219b733.79c5b378.js deleted file mode 100644 index 3c23a138ff1..00000000000 --- a/assets/js/a219b733.79c5b378.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7749],{35318:(e,n,o)=>{o.d(n,{Zo:()=>p,kt:()=>f});var t=o(27378);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function a(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,t)}return o}function s(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?a(Object(o),!0).forEach((function(n){r(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function i(e,n){if(null==e)return{};var o,t,r=function(e,n){if(null==e)return{};var o,t,r={},a=Object.keys(e);for(t=0;t<a.length;t++)o=a[t],n.indexOf(o)>=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)o=a[t],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=t.createContext({}),c=function(e){var n=t.useContext(l),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},p=function(e){var n=c(e.components);return t.createElement(l.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var o=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(o),f=r,u=m["".concat(l,".").concat(f)]||m[f]||d[f]||a;return o?t.createElement(u,s(s({ref:n},p),{},{components:o})):t.createElement(u,s({ref:n},p))}));function f(e,n){var o=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=o.length,s=new Array(a);s[0]=m;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var c=2;c<a;c++)s[c]=o[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,o)}m.displayName="MDXCreateElement"},11558:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=o(25773),r=(o(27378),o(35318));const a={title:"docker scaffold",sidebar_label:"scaffold"},s=void 0,i={unversionedId:"commands/docker/scaffold",id:"commands/docker/scaffold",title:"docker scaffold",description:"The moon docker scaffold command creates multiple repository skeletons for use",source:"@site/docs/commands/docker/scaffold.mdx",sourceDirName:"commands/docker",slug:"/commands/docker/scaffold",permalink:"/docs/commands/docker/scaffold",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/docker/scaffold.mdx",tags:[],version:"current",frontMatter:{title:"docker scaffold",sidebar_label:"scaffold"},sidebar:"docs",previous:{title:"prune",permalink:"/docs/commands/docker/prune"},next:{title:"setup",permalink:"/docs/commands/docker/setup"}},l={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"How it works",id:"how-it-works",level:2},{value:"Workspace",id:"workspace",level:3},{value:"Sources",id:"sources",level:3}],p={toc:c};function d(e){let{components:n,...o}=e;return(0,r.kt)("wrapper",(0,t.Z)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon docker scaffold <...projects>")," command creates multiple repository skeletons for use\nwithin ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s to effectively take advantage of Docker's layer caching. It utilizes the\n",(0,r.kt)("a",{parentName:"p",href:"../../config/workspace#projects"},"project graph")," to copy all critical files, like manifest, lockfiles, and configuration."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Scaffold a skeleton to .moon/docker\n$ moon docker scaffold <project>\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the official ",(0,r.kt)("a",{parentName:"p",href:"../../guides/docker"},"Docker usage guide")," for a more in-depth example of how to\nutilize this command.")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<...names>")," - List of project names or aliases to scaffold sources for, as defined in\n",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#projects"},(0,r.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--include")," - Additional files to include in the ",(0,r.kt)("a",{parentName:"li",href:"#sources"},"sources")," skeleton. Accepts a list of\nfile globs relative from the workspace root.")),(0,r.kt)("h2",{id:"how-it-works"},"How it works"),(0,r.kt)("p",null,"This command may seem like magic, but it's relative simple thanks to moon's infrastructure and its\nproject graph. When the command is ran, we generate 2 skeleton structures in ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/docker")," (be sure\nto gitignore this). One for the workspace, and the other for sources."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Because scaffolding uses the project graph, it requires all projects with a ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," to be\n",(0,r.kt)("a",{parentName:"p",href:"../../config/workspace#projects"},"configured in moon"),". Otherwise, moon will fail to copy all required files and builds may\nfail.")),(0,r.kt)("h3",{id:"workspace"},"Workspace"),(0,r.kt)("p",null,"The workspace skeleton mirrors the project folder structure of the repository 1:1, and only copies\nfiles required for dependencies to install. This is typically manifests (",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"), lockfiles\n(",(0,r.kt)("inlineCode",{parentName:"p"},"yarn.lock"),", etc), other critical configs, and ",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," itself. This is necessary for package\nmanagers to install dependencies (otherwise they will fail), and for dependencies to be layer cached\nin Docker."),(0,r.kt)("p",null,"An example of this skeleton using Yarn may look like the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},".moon/docker/workspace/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 .yarn/\n\u251c\u2500\u2500 apps/\n\u2502 \u251c\u2500\u2500 client/\n\u2502 \u2502 \u2514\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 server/\n\u2502 \u2514\u2500\u2500 package.json\n\u251c\u2500\u2500 packages/\n\u2502 \u251c\u2500\u2500 foo/\n\u2502 \u2502 \u2514\u2500\u2500 package.json\n\u2502 \u251c\u2500\u2500 bar/\n\u2502 \u2502 \u2514\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 baz/\n\u2502 \u2514\u2500\u2500 package.json\n\u251c\u2500\u2500 .yarnrc.yml\n\u251c\u2500\u2500 package.json\n\u2514\u2500\u2500 yarn.lock\n")),(0,r.kt)("h3",{id:"sources"},"Sources"),(0,r.kt)("p",null,"The sources skeleton is not a 1:1 mirror of the repository, and instead is the source files of a\nproject (passed as an argument to the command), and all of its dependencies. This allows\n",(0,r.kt)("a",{parentName:"p",href:"../run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," and other commands to work within the ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),", and avoid having to\n",(0,r.kt)("inlineCode",{parentName:"p"},"COPY . .")," the entire repository."),(0,r.kt)("p",null,"Using our example workspace above, our sources skeleton would look like the following, assuming our\n",(0,r.kt)("inlineCode",{parentName:"p"},"client")," project is passed as an argument, and this project depends on the ",(0,r.kt)("inlineCode",{parentName:"p"},"foo")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"baz")," projects."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},".moon/docker/sources/\n\u251c\u2500\u2500 apps/\n\u2502 \u2514\u2500\u2500 client/\n| \u251c\u2500\u2500 src/\n| \u251c\u2500\u2500 tests/\n| \u251c\u2500\u2500 public/\n| \u251c\u2500\u2500 package.json\n| \u251c\u2500\u2500 tsconfig.json\n\u2502 \u2514\u2500\u2500 (anything else)\n\u2514\u2500\u2500 packages/\n \u251c\u2500\u2500 foo/\n \u2502 \u251c\u2500\u2500 lib/\n \u2502 \u251c\u2500\u2500 src/\n \u2502 \u251c\u2500\u2500 package.json\n \u2502 \u251c\u2500\u2500 tsconfig.json\n \u2502 \u2514\u2500\u2500 (anything else)\n \u2514\u2500\u2500 baz/\n \u251c\u2500\u2500 lib/\n \u251c\u2500\u2500 src/\n \u251c\u2500\u2500 package.json\n \u251c\u2500\u2500 tsconfig.json\n \u2514\u2500\u2500 (anything else)\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a219b733.a43da68e.js b/assets/js/a219b733.a43da68e.js new file mode 100644 index 00000000000..6ca7e965eeb --- /dev/null +++ b/assets/js/a219b733.a43da68e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97749],{35318:(e,n,o)=>{o.d(n,{Zo:()=>p,kt:()=>f});var t=o(27378);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function a(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,t)}return o}function s(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?a(Object(o),!0).forEach((function(n){r(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function i(e,n){if(null==e)return{};var o,t,r=function(e,n){if(null==e)return{};var o,t,r={},a=Object.keys(e);for(t=0;t<a.length;t++)o=a[t],n.indexOf(o)>=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)o=a[t],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=t.createContext({}),c=function(e){var n=t.useContext(l),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},p=function(e){var n=c(e.components);return t.createElement(l.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var o=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=c(o),f=r,u=m["".concat(l,".").concat(f)]||m[f]||d[f]||a;return o?t.createElement(u,s(s({ref:n},p),{},{components:o})):t.createElement(u,s({ref:n},p))}));function f(e,n){var o=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=o.length,s=new Array(a);s[0]=m;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var c=2;c<a;c++)s[c]=o[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,o)}m.displayName="MDXCreateElement"},11558:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=o(25773),r=(o(27378),o(35318));const a={title:"docker scaffold",sidebar_label:"scaffold"},s=void 0,i={unversionedId:"commands/docker/scaffold",id:"commands/docker/scaffold",title:"docker scaffold",description:"The moon docker scaffold command creates multiple repository skeletons for use",source:"@site/docs/commands/docker/scaffold.mdx",sourceDirName:"commands/docker",slug:"/commands/docker/scaffold",permalink:"/docs/commands/docker/scaffold",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/docker/scaffold.mdx",tags:[],version:"current",frontMatter:{title:"docker scaffold",sidebar_label:"scaffold"},sidebar:"docs",previous:{title:"prune",permalink:"/docs/commands/docker/prune"},next:{title:"setup",permalink:"/docs/commands/docker/setup"}},l={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"How it works",id:"how-it-works",level:2},{value:"Workspace",id:"workspace",level:3},{value:"Sources",id:"sources",level:3}],p={toc:c};function d(e){let{components:n,...o}=e;return(0,r.kt)("wrapper",(0,t.Z)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon docker scaffold <...projects>")," command creates multiple repository skeletons for use\nwithin ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s to effectively take advantage of Docker's layer caching. It utilizes the\n",(0,r.kt)("a",{parentName:"p",href:"../../config/workspace#projects"},"project graph")," to copy all critical files, like manifest, lockfiles, and configuration."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Scaffold a skeleton to .moon/docker\n$ moon docker scaffold <project>\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the official ",(0,r.kt)("a",{parentName:"p",href:"../../guides/docker"},"Docker usage guide")," for a more in-depth example of how to\nutilize this command.")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<...names>")," - List of project names or aliases to scaffold sources for, as defined in\n",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#projects"},(0,r.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--include")," - Additional files to include in the ",(0,r.kt)("a",{parentName:"li",href:"#sources"},"sources")," skeleton. Accepts a list of\nfile globs relative from the workspace root.")),(0,r.kt)("h2",{id:"how-it-works"},"How it works"),(0,r.kt)("p",null,"This command may seem like magic, but it's relative simple thanks to moon's infrastructure and its\nproject graph. When the command is ran, we generate 2 skeleton structures in ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/docker")," (be sure\nto gitignore this). One for the workspace, and the other for sources."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Because scaffolding uses the project graph, it requires all projects with a ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," to be\n",(0,r.kt)("a",{parentName:"p",href:"../../config/workspace#projects"},"configured in moon"),". Otherwise, moon will fail to copy all required files and builds may\nfail.")),(0,r.kt)("h3",{id:"workspace"},"Workspace"),(0,r.kt)("p",null,"The workspace skeleton mirrors the project folder structure of the repository 1:1, and only copies\nfiles required for dependencies to install. This is typically manifests (",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"), lockfiles\n(",(0,r.kt)("inlineCode",{parentName:"p"},"yarn.lock"),", etc), other critical configs, and ",(0,r.kt)("inlineCode",{parentName:"p"},".moon")," itself. This is necessary for package\nmanagers to install dependencies (otherwise they will fail), and for dependencies to be layer cached\nin Docker."),(0,r.kt)("p",null,"An example of this skeleton using Yarn may look like the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},".moon/docker/workspace/\n\u251c\u2500\u2500 .moon/\n\u251c\u2500\u2500 .yarn/\n\u251c\u2500\u2500 apps/\n\u2502 \u251c\u2500\u2500 client/\n\u2502 \u2502 \u2514\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 server/\n\u2502 \u2514\u2500\u2500 package.json\n\u251c\u2500\u2500 packages/\n\u2502 \u251c\u2500\u2500 foo/\n\u2502 \u2502 \u2514\u2500\u2500 package.json\n\u2502 \u251c\u2500\u2500 bar/\n\u2502 \u2502 \u2514\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 baz/\n\u2502 \u2514\u2500\u2500 package.json\n\u251c\u2500\u2500 .yarnrc.yml\n\u251c\u2500\u2500 package.json\n\u2514\u2500\u2500 yarn.lock\n")),(0,r.kt)("h3",{id:"sources"},"Sources"),(0,r.kt)("p",null,"The sources skeleton is not a 1:1 mirror of the repository, and instead is the source files of a\nproject (passed as an argument to the command), and all of its dependencies. This allows\n",(0,r.kt)("a",{parentName:"p",href:"../run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," and other commands to work within the ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),", and avoid having to\n",(0,r.kt)("inlineCode",{parentName:"p"},"COPY . .")," the entire repository."),(0,r.kt)("p",null,"Using our example workspace above, our sources skeleton would look like the following, assuming our\n",(0,r.kt)("inlineCode",{parentName:"p"},"client")," project is passed as an argument, and this project depends on the ",(0,r.kt)("inlineCode",{parentName:"p"},"foo")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"baz")," projects."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},".moon/docker/sources/\n\u251c\u2500\u2500 apps/\n\u2502 \u2514\u2500\u2500 client/\n| \u251c\u2500\u2500 src/\n| \u251c\u2500\u2500 tests/\n| \u251c\u2500\u2500 public/\n| \u251c\u2500\u2500 package.json\n| \u251c\u2500\u2500 tsconfig.json\n\u2502 \u2514\u2500\u2500 (anything else)\n\u2514\u2500\u2500 packages/\n \u251c\u2500\u2500 foo/\n \u2502 \u251c\u2500\u2500 lib/\n \u2502 \u251c\u2500\u2500 src/\n \u2502 \u251c\u2500\u2500 package.json\n \u2502 \u251c\u2500\u2500 tsconfig.json\n \u2502 \u2514\u2500\u2500 (anything else)\n \u2514\u2500\u2500 baz/\n \u251c\u2500\u2500 lib/\n \u251c\u2500\u2500 src/\n \u251c\u2500\u2500 package.json\n \u251c\u2500\u2500 tsconfig.json\n \u2514\u2500\u2500 (anything else)\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a26a8dd3.68858f97.js b/assets/js/a26a8dd3.68858f97.js new file mode 100644 index 00000000000..c96dd146119 --- /dev/null +++ b/assets/js/a26a8dd3.68858f97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77838],{35318:(e,r,n)=>{n.d(r,{Zo:()=>d,kt:()=>u});var t=n(27378);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function c(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=t.createContext({}),p=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):c(c({},r),e)),n},d=function(e){var r=p(e.components);return t.createElement(l.Provider,{value:r},e.children)},m={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},s=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),s=p(n),u=o,f=s["".concat(l,".").concat(u)]||s[u]||m[u]||a;return n?t.createElement(f,c(c({ref:r},d),{},{components:n})):t.createElement(f,c({ref:r},d))}));function u(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,c=new Array(a);c[0]=s;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p<a;p++)c[p]=n[p];return t.createElement.apply(null,c)}return t.createElement.apply(null,n)}s.displayName="MDXCreateElement"},61643:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var t=n(25773),o=(n(27378),n(35318));const a={title:"docker prune",sidebar_label:"prune"},c=void 0,i={unversionedId:"commands/docker/prune",id:"commands/docker/prune",title:"docker prune",description:"The moon docker prune command will reduce the overall filesize of the Docker environment by",source:"@site/docs/commands/docker/prune.mdx",sourceDirName:"commands/docker",slug:"/commands/docker/prune",permalink:"/docs/commands/docker/prune",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/docker/prune.mdx",tags:[],version:"current",frontMatter:{title:"docker prune",sidebar_label:"prune"},sidebar:"docs",previous:{title:"docker",permalink:"/docs/commands/docker"},next:{title:"scaffold",permalink:"/docs/commands/docker/scaffold"}},l={},p=[],d={toc:p};function m(e){let{components:r,...n}=e;return(0,o.kt)("wrapper",(0,t.Z)({},d,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon docker prune")," command will reduce the overall filesize of the Docker environment by\ninstalling production only dependencies for projects that were scaffolded, and removing any\napplicable extraneous files."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon docker prune\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"View the official ",(0,o.kt)("a",{parentName:"p",href:"../../guides/docker"},"Docker usage guide")," for a more in-depth example of how to\nutilize this command.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This command ",(0,o.kt)("em",{parentName:"p"},"must be")," ran after ",(0,o.kt)("a",{parentName:"p",href:"./scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," and is typically ran within a\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a26a8dd3.699d2c09.js b/assets/js/a26a8dd3.699d2c09.js deleted file mode 100644 index b0c2aab3013..00000000000 --- a/assets/js/a26a8dd3.699d2c09.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7838],{35318:(e,r,n)=>{n.d(r,{Zo:()=>d,kt:()=>u});var t=n(27378);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function c(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=t.createContext({}),p=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):c(c({},r),e)),n},d=function(e){var r=p(e.components);return t.createElement(l.Provider,{value:r},e.children)},m={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},s=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),s=p(n),u=o,f=s["".concat(l,".").concat(u)]||s[u]||m[u]||a;return n?t.createElement(f,c(c({ref:r},d),{},{components:n})):t.createElement(f,c({ref:r},d))}));function u(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,c=new Array(a);c[0]=s;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p<a;p++)c[p]=n[p];return t.createElement.apply(null,c)}return t.createElement.apply(null,n)}s.displayName="MDXCreateElement"},61643:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var t=n(25773),o=(n(27378),n(35318));const a={title:"docker prune",sidebar_label:"prune"},c=void 0,i={unversionedId:"commands/docker/prune",id:"commands/docker/prune",title:"docker prune",description:"The moon docker prune command will reduce the overall filesize of the Docker environment by",source:"@site/docs/commands/docker/prune.mdx",sourceDirName:"commands/docker",slug:"/commands/docker/prune",permalink:"/docs/commands/docker/prune",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/docker/prune.mdx",tags:[],version:"current",frontMatter:{title:"docker prune",sidebar_label:"prune"},sidebar:"docs",previous:{title:"docker",permalink:"/docs/commands/docker"},next:{title:"scaffold",permalink:"/docs/commands/docker/scaffold"}},l={},p=[],d={toc:p};function m(e){let{components:r,...n}=e;return(0,o.kt)("wrapper",(0,t.Z)({},d,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon docker prune")," command will reduce the overall filesize of the Docker environment by\ninstalling production only dependencies for projects that were scaffolded, and removing any\napplicable extraneous files."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon docker prune\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"View the official ",(0,o.kt)("a",{parentName:"p",href:"../../guides/docker"},"Docker usage guide")," for a more in-depth example of how to\nutilize this command.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"This command ",(0,o.kt)("em",{parentName:"p"},"must be")," ran after ",(0,o.kt)("a",{parentName:"p",href:"./scaffold"},(0,o.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," and is typically ran within a\n",(0,o.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a33962b9.6b62fb1f.js b/assets/js/a33962b9.6b62fb1f.js new file mode 100644 index 00000000000..949398aa654 --- /dev/null +++ b/assets/js/a33962b9.6b62fb1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82763],{35318:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),c=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=c(e.components);return r.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(t),g=o,d=m["".concat(l,".").concat(g)]||m[g]||u[g]||i;return t?r.createElement(d,a(a({ref:n},p),{},{components:t})):r.createElement(d,a({ref:n},p))}));function g(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,a[1]=s;for(var c=2;c<i;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},67714:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=t(25773),o=(t(27378),t(35318));const i={title:"Sharing workspace configuration"},a=void 0,s={unversionedId:"guides/sharing-config",id:"guides/sharing-config",title:"Sharing workspace configuration",description:"For large companies, open source maintainers, and those that love reusability, more often than not",source:"@site/docs/guides/sharing-config.mdx",sourceDirName:"guides",slug:"/guides/sharing-config",permalink:"/docs/guides/sharing-config",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/sharing-config.mdx",tags:[],version:"current",frontMatter:{title:"Sharing workspace configuration"},sidebar:"guides",previous:{title:"Root-level project",permalink:"/docs/guides/root-project"},next:{title:"Webhooks (experimental)",permalink:"/docs/guides/webhooks"}},l={},c=[{value:"Versioning",id:"versioning",level:2},{value:"Using versioned filenames",id:"using-versioned-filenames",level:3},{value:"Using branches, tags, or commits",id:"using-branches-tags-or-commits",level:3}],p={toc:c};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"For large companies, open source maintainers, and those that love reusability, more often than not\nyou'll want to use the same configuration across all repositories for consistency. This helps reduce\nthe maintenance burden while ensuring a similar developer experience."),(0,o.kt)("p",null,"To help streamline this process, moon provides an ",(0,o.kt)("inlineCode",{parentName:"p"},"extends")," setting in both\n",(0,o.kt)("a",{parentName:"p",href:"../config/workspace#extends"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),",\n",(0,o.kt)("a",{parentName:"p",href:"../config/toolchain#extends"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and\n",(0,o.kt)("a",{parentName:"p",href:"../config/tasks#extends"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),". This setting requires a HTTPS URL ",(0,o.kt)("em",{parentName:"p"},"or")," relative file\nsystem path that points to a valid YAML document for the configuration in question."),(0,o.kt)("p",null,'A great way to share configuration is by using GitHub\'s "raw file view", as demonstrated below using\nour very own ',(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/examples"},"examples repository"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"extends: 'https://raw.githubusercontent.com/moonrepo/examples/master/.moon/tasks.yml'\n")),(0,o.kt)("h2",{id:"versioning"},"Versioning"),(0,o.kt)("p",null,'Inheriting an upstream configuration can be dangerous, as the settings may change at any point,\nresulting in broken builds. To mitigate this, you can used a "versioned" upstream configuration,\nwhich is ideally a fixed point in time. How this is implemented is up to you or your company, but we\nsuggest the following patterns:'),(0,o.kt)("h3",{id:"using-versioned-filenames"},"Using versioned filenames"),(0,o.kt)("p",null,"A rudimentary solution is to append a version to the upstream filename. When the file is modified, a\nnew version should be created, while the previous version remains untouched."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff"},"-extends: '../shared/project.yml'\n+extends: '../shared/project-v1.yml'\n")),(0,o.kt)("h3",{id:"using-branches-tags-or-commits"},"Using branches, tags, or commits"),(0,o.kt)("p",null,"When using a version control platform, like GitHub above, you can reference the upstream\nconfiguration through a branch, tag, commit, or sha. Since these are a reference point in time, they\nare relatively safe."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff"},"-extends: 'https://raw.githubusercontent.com/moonrepo/examples/master/.moon/tasks.yml'\n+extends: 'https://raw.githubusercontent.com/moonrepo/examples/c3f10160bcd16b48b8d4d21b208bb50f6b09bd96/.moon/tasks.yml'\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a33962b9.b30fc7e1.js b/assets/js/a33962b9.b30fc7e1.js deleted file mode 100644 index aa9478bdfbb..00000000000 --- a/assets/js/a33962b9.b30fc7e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2763],{35318:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>g});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),c=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=c(e.components);return r.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(t),g=o,d=m["".concat(l,".").concat(g)]||m[g]||u[g]||i;return t?r.createElement(d,a(a({ref:n},p),{},{components:t})):r.createElement(d,a({ref:n},p))}));function g(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,a[1]=s;for(var c=2;c<i;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},67714:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=t(25773),o=(t(27378),t(35318));const i={title:"Sharing workspace configuration"},a=void 0,s={unversionedId:"guides/sharing-config",id:"guides/sharing-config",title:"Sharing workspace configuration",description:"For large companies, open source maintainers, and those that love reusability, more often than not",source:"@site/docs/guides/sharing-config.mdx",sourceDirName:"guides",slug:"/guides/sharing-config",permalink:"/docs/guides/sharing-config",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/sharing-config.mdx",tags:[],version:"current",frontMatter:{title:"Sharing workspace configuration"},sidebar:"guides",previous:{title:"Root-level project",permalink:"/docs/guides/root-project"},next:{title:"Webhooks (experimental)",permalink:"/docs/guides/webhooks"}},l={},c=[{value:"Versioning",id:"versioning",level:2},{value:"Using versioned filenames",id:"using-versioned-filenames",level:3},{value:"Using branches, tags, or commits",id:"using-branches-tags-or-commits",level:3}],p={toc:c};function u(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"For large companies, open source maintainers, and those that love reusability, more often than not\nyou'll want to use the same configuration across all repositories for consistency. This helps reduce\nthe maintenance burden while ensuring a similar developer experience."),(0,o.kt)("p",null,"To help streamline this process, moon provides an ",(0,o.kt)("inlineCode",{parentName:"p"},"extends")," setting in both\n",(0,o.kt)("a",{parentName:"p",href:"../config/workspace#extends"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),",\n",(0,o.kt)("a",{parentName:"p",href:"../config/toolchain#extends"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and\n",(0,o.kt)("a",{parentName:"p",href:"../config/tasks#extends"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),". This setting requires a HTTPS URL ",(0,o.kt)("em",{parentName:"p"},"or")," relative file\nsystem path that points to a valid YAML document for the configuration in question."),(0,o.kt)("p",null,'A great way to share configuration is by using GitHub\'s "raw file view", as demonstrated below using\nour very own ',(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/examples"},"examples repository"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"extends: 'https://raw.githubusercontent.com/moonrepo/examples/master/.moon/tasks.yml'\n")),(0,o.kt)("h2",{id:"versioning"},"Versioning"),(0,o.kt)("p",null,'Inheriting an upstream configuration can be dangerous, as the settings may change at any point,\nresulting in broken builds. To mitigate this, you can used a "versioned" upstream configuration,\nwhich is ideally a fixed point in time. How this is implemented is up to you or your company, but we\nsuggest the following patterns:'),(0,o.kt)("h3",{id:"using-versioned-filenames"},"Using versioned filenames"),(0,o.kt)("p",null,"A rudimentary solution is to append a version to the upstream filename. When the file is modified, a\nnew version should be created, while the previous version remains untouched."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff"},"-extends: '../shared/project.yml'\n+extends: '../shared/project-v1.yml'\n")),(0,o.kt)("h3",{id:"using-branches-tags-or-commits"},"Using branches, tags, or commits"),(0,o.kt)("p",null,"When using a version control platform, like GitHub above, you can reference the upstream\nconfiguration through a branch, tag, commit, or sha. Since these are a reference point in time, they\nare relatively safe."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-diff"},"-extends: 'https://raw.githubusercontent.com/moonrepo/examples/master/.moon/tasks.yml'\n+extends: 'https://raw.githubusercontent.com/moonrepo/examples/c3f10160bcd16b48b8d4d21b208bb50f6b09bd96/.moon/tasks.yml'\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a452709a.186febfe.js b/assets/js/a452709a.186febfe.js deleted file mode 100644 index d4c5dae1de4..00000000000 --- a/assets/js/a452709a.186febfe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6526],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),m=c(r),d=o,f=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=r[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},19107:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={title:"use"},l=void 0,i={unversionedId:"proto/commands/use",id:"proto/commands/use",title:"use",description:"The proto use (or proto u) command will download and install all tools and plugins from all",source:"@site/docs/proto/commands/use.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/use",permalink:"/docs/proto/commands/use",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/use.mdx",tags:[],version:"current",frontMatter:{title:"use"},sidebar:"proto",previous:{title:"upgrade",permalink:"/docs/proto/commands/upgrade"},next:{title:"FAQ",permalink:"/docs/proto/faq"}},p={},c=[],s={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto use")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto u"),") command will download and install ",(0,o.kt)("em",{parentName:"p"},"all")," tools and plugins from all\nparent ",(0,o.kt)("a",{parentName:"p",href:"../config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," configuration files, and any ",(0,o.kt)("a",{parentName:"p",href:"../detection"},"versions detected")," in\nthe current working directory."),(0,o.kt)("p",null,"If ",(0,o.kt)("a",{parentName:"p",href:"../config#user-configuration"},(0,o.kt)("inlineCode",{parentName:"a"},"auto-clean"))," is enabled, the command will also remove any stale\nor unused tools."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto use\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a452709a.6e05ece5.js b/assets/js/a452709a.6e05ece5.js new file mode 100644 index 00000000000..35a67ed818b --- /dev/null +++ b/assets/js/a452709a.6e05ece5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46526],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),m=c(r),d=o,f=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c<a;c++)l[c]=r[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},19107:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={title:"use"},l=void 0,i={unversionedId:"proto/commands/use",id:"proto/commands/use",title:"use",description:"The proto use (or proto u) command will download and install all tools and plugins from all",source:"@site/docs/proto/commands/use.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/use",permalink:"/docs/proto/commands/use",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/use.mdx",tags:[],version:"current",frontMatter:{title:"use"},sidebar:"proto",previous:{title:"upgrade",permalink:"/docs/proto/commands/upgrade"},next:{title:"FAQ",permalink:"/docs/proto/faq"}},p={},c=[],s={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto use")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto u"),") command will download and install ",(0,o.kt)("em",{parentName:"p"},"all")," tools and plugins from all\nparent ",(0,o.kt)("a",{parentName:"p",href:"../config"},(0,o.kt)("inlineCode",{parentName:"a"},".prototools"))," configuration files, and any ",(0,o.kt)("a",{parentName:"p",href:"../detection"},"versions detected")," in\nthe current working directory."),(0,o.kt)("p",null,"If ",(0,o.kt)("a",{parentName:"p",href:"../config#user-configuration"},(0,o.kt)("inlineCode",{parentName:"a"},"auto-clean"))," is enabled, the command will also remove any stale\nor unused tools."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto use\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a581e456.2797b077.js b/assets/js/a581e456.2797b077.js deleted file mode 100644 index d2c911cea0b..00000000000 --- a/assets/js/a581e456.2797b077.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2778],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return n?r.createElement(g,i(i({ref:t},p),{},{components:n})):r.createElement(g,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var u=2;u<o;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function i(e){let{children:t,hidden:n,className:i}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,i),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var r=n(25773),a=n(27378),o=n(37140),i=n(83457),l=n(35595),s=n(76457);const u="tabList_J5MA",p="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),r=u[n].value;r!==l&&(d(t),s(r))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},i,{className:(0,o.Z)("tabs__item",p,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,l.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",u)},a.createElement(c,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),i=n(70784),l=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const i=(0,a.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(l),(0,r.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(i.location.search);t.set(l,e),i.replace({...i.location,search:t.toString()})}),[l,i])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=u(e),[i,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=c({queryString:n,groupId:a}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,l.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=d??g;return p({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),f(e)}),[m,f,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(27378),a=n(30780),o=n(39798),i=n(33337);function l(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=l(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=l(e,!0,!0),n+=s(e,!0)),r.createElement(i.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(o.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},l(e,!1,!1))),r.createElement(o.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(o.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(o.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(83469),o=n(31792);function i(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(o.Z,{icon:a.dT$}))}},4496:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=n(36642),i=n(32189);const l={title:"ESLint example",sidebar_label:"ESLint"},s=void 0,u={unversionedId:"guides/examples/eslint",id:"guides/examples/eslint",title:"ESLint example",description:"In this guide, you'll learn how to integrate ESLint into moon.",source:"@site/docs/guides/examples/eslint.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/eslint",permalink:"/docs/guides/examples/eslint",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/eslint.mdx",tags:[],version:"current",frontMatter:{title:"ESLint example",sidebar_label:"ESLint"},sidebar:"guides",previous:{title:"Astro",permalink:"/docs/guides/examples/astro"},next:{title:"Jest",permalink:"/docs/guides/examples/jest"}},p={},c=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Sharing",id:"sharing",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to lint a single file or folder?",id:"how-to-lint-a-single-file-or-folder",level:3},{value:"Should we use <code>overrides</code>?",id:"should-we-use-overrides",level:3}],d={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(i.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L59",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/"},"ESLint")," into moon."),(0,a.kt)("p",null,"Begin by installing ",(0,a.kt)("inlineCode",{parentName:"p"},"eslint")," and any plugins in your root. We suggest using the same version across\nthe entire repository."),(0,a.kt)(o.Z,{dep:"eslint eslint-config-moon",dev:!0,mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Since linting is a universal workflow, add a ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task to\n",(0,a.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n lint:\n command:\n - 'eslint'\n # Support other extensions\n - '--ext'\n - '.js,.jsx,.ts,.tsx'\n # Always fix and run extra checks\n - '--fix'\n - '--report-unused-disable-directives'\n # Dont fail if a project has nothing to lint\n - '--no-error-on-unmatched-pattern'\n # Do fail if we encounter a fatal error\n - '--exit-on-fatal-error'\n # Only 1 ignore file is supported, so use the root\n - '--ignore-path'\n - '@in(4)'\n # Run in current dir\n - '.'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Other config files\n - '*.config.*'\n # Project configs, any format, any depth\n - '**/.eslintrc.*'\n # Root configs, any format\n - '/.eslintignore'\n - '/.eslintrc.*'\n")),(0,a.kt)("p",null,"Projects can extend this task and provide additional parameters if need be, for example."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n args:\n # Enable caching for this project\n - '--cache'\n")),(0,a.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,a.kt)("p",null,"If you're using the ",(0,a.kt)("a",{parentName:"p",href:"https://typescript-eslint.io"},(0,a.kt)("inlineCode",{parentName:"a"},"@typescript-eslint"))," packages, and want to\nenable type-safety based lint rules, we suggest something similar to the official\n",(0,a.kt)("a",{parentName:"p",href:"https://typescript-eslint.io/docs/linting/monorepo"},"monorepo configuration"),"."),(0,a.kt)("p",null,"Create a ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.eslint.json")," in your repository root, extend your shared compiler options (we use\n",(0,a.kt)("a",{parentName:"p",href:"./typescript"},(0,a.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json")),"), and include all your project files."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.eslint.json"',title:'"tsconfig.eslint.json"'},'{\n "extends": "./tsconfig.options.json",\n "compilerOptions": {\n "emitDeclarationOnly": false,\n "noEmit": true\n },\n "include": ["apps/**/*", "packages/**/*"]\n}\n')),(0,a.kt)("p",null,"Append the following inputs to your ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n lint:\n # ...\n inputs:\n # TypeScript support\n - 'types/**/*'\n - 'tsconfig.json'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n")),(0,a.kt)("p",null,"And lastly, add ",(0,a.kt)("inlineCode",{parentName:"p"},"parserOptions")," to your ",(0,a.kt)("a",{parentName:"p",href:"#root-level"},"root-level config"),"."),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("h3",{id:"root-level"},"Root-level"),(0,a.kt)("p",null,"The root-level ESLint config is ",(0,a.kt)("em",{parentName:"p"},"required"),", as ESLint traverses upwards from each file to find\nconfigurations, and this denotes the stopping point. It's also used to define rules for the ",(0,a.kt)("em",{parentName:"p"},"entire"),"\nrepository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n root: true, // Required!\n extends: ['moon'],\n rules: {\n 'no-console': 'error',\n },\n\n // TypeScript support\n parser: '@typescript-eslint/parser',\n parserOptions: {\n project: 'tsconfig.eslint.json',\n tsconfigRootDir: __dirname,\n },\n};\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},".eslintignore")," file must also be defined at the root, as\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/docs/user-guide/configuring/ignoring-code#the-eslintignore-file"},"only 1 ignore file"),"\ncan exist in a repository. We ensure this ignore file is used by passing ",(0,a.kt)("inlineCode",{parentName:"p"},"--ignore-path")," above."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title=".eslintignore"',title:'".eslintignore"'},"node_modules/\n*.min.js\n*.map\n*.snap\n")),(0,a.kt)("h3",{id:"project-level"},"Project-level"),(0,a.kt)("p",null,"A project-level ESLint config can be utilized by creating a ",(0,a.kt)("inlineCode",{parentName:"p"},".eslintrc.<json|js|cjs|yml>")," in the\nproject root. This is optional, but necessary when defining rules and ignore patterns unique to the\nproject."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/.eslintrc.js"',title:'"<project>/.eslintrc.js"'},"module.exports = {\n // Patterns to ignore (alongside the root .eslintignore)\n ignorePatterns: ['build', 'lib'],\n // Project specific rules\n rules: {\n 'no-console': 'off',\n },\n};\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files"},(0,a.kt)("inlineCode",{parentName:"a"},"extends")),"\nsetting should ",(0,a.kt)("strong",{parentName:"p"},"not")," extend the root-level config, as ESLint will automatically merge configs\nwhile traversing upwards!")),(0,a.kt)("h3",{id:"sharing"},"Sharing"),(0,a.kt)("p",null,"To share configuration across projects, you have 3 options:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Define settings in the ",(0,a.kt)("a",{parentName:"li",href:"#root-level"},"root-level config"),". This only applies to the parent\nrepository."),(0,a.kt)("li",{parentName:"ul"},"Create and publish an\n",(0,a.kt)("a",{parentName:"li",href:"https://eslint.org/docs/developer-guide/shareable-configs#using-a-shareable-config"},(0,a.kt)("inlineCode",{parentName:"a"},"eslint-config")),"\nor ",(0,a.kt)("a",{parentName:"li",href:"https://eslint.org/docs/developer-guide/working-with-plugins"},(0,a.kt)("inlineCode",{parentName:"a"},"eslint-plugin"))," npm package.\nThis can be used in any repository."),(0,a.kt)("li",{parentName:"ul"},"A combination of 1 and 2.")),(0,a.kt)("p",null,"For options 2 and 3, if you're utilizing package workspaces, create a local package with the\nfollowing content."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="packages/eslint-config-company/index.js"',title:'"packages/eslint-config-company/index.js"'},"module.exports = {\n extends: ['airbnb'],\n};\n")),(0,a.kt)("p",null,"Within your root-level ESLint config, you can extend this package to inherit the settings."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n extends: 'eslint-config-company',\n};\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"When using this approach, the package must be built and symlinked into ",(0,a.kt)("inlineCode",{parentName:"p"},"node_modules")," ",(0,a.kt)("em",{parentName:"p"},"before")," the\nlinter will run correctly. Take this into account when going down this path!")),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h3",{id:"how-to-lint-a-single-file-or-folder"},"How to lint a single file or folder?"),(0,a.kt)("p",null,"Unfortunately, this isn't currently possible, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"eslint")," binary itself requires a file or\nfolder path to operate on, and in the task above we pass ",(0,a.kt)("inlineCode",{parentName:"p"},".")," (current directory). If this was not\npassed, then nothing would be linted."),(0,a.kt)("p",null,"This has the unintended side-effect of not being able to filter down lintable targets by passing\narbitrary file paths. This is something we hope to resolve in the future."),(0,a.kt)("p",null,"To work around this limitation, you can create another lint task."),(0,a.kt)("h3",{id:"should-we-use-overrides"},"Should we use ",(0,a.kt)("inlineCode",{parentName:"h3"},"overrides"),"?"),(0,a.kt)("p",null,"Projects should define their own rules using an ESLint config in their project root. However, if you\nwant to avoid touching many ESLint configs (think migrations), then\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-based-on-glob-patterns"},"overrides in the root"),"\nare a viable option. Otherwise, we highly encourage project-level configs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n // ...\n overrides: [\n // Only apply to apps \"foo\" and \"bar\", but not others\n {\n files: ['apps/foo/**/*', 'apps/bar/**/*'],\n rules: {\n 'no-magic-numbers': 'off',\n },\n },\n ],\n};\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a581e456.38e8baea.js b/assets/js/a581e456.38e8baea.js new file mode 100644 index 00000000000..07d712ace31 --- /dev/null +++ b/assets/js/a581e456.38e8baea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92778],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return n?r.createElement(g,i(i({ref:t},p),{},{components:n})):r.createElement(g,i({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var u=2;u<o;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function i(e){let{children:t,hidden:n,className:i}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,i),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var r=n(25773),a=n(27378),o=n(37140),i=n(83457),l=n(35595),s=n(76457);const u="tabList_J5MA",p="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),r=u[n].value;r!==l&&(d(t),s(r))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},i,{className:(0,o.Z)("tabs__item",p,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,l.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",u)},a.createElement(c,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),i=n(70784),l=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const i=(0,a.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(l),(0,r.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(i.location.search);t.set(l,e),i.replace({...i.location,search:t.toString()})}),[l,i])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=u(e),[i,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=c({queryString:n,groupId:a}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,l.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=d??g;return p({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),f(e)}),[m,f,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(27378),a=n(30780),o=n(39798),i=n(33337);function l(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=l(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=l(e,!0,!0),n+=s(e,!0)),r.createElement(i.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(o.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},l(e,!1,!1))),r.createElement(o.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(o.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(o.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(83469),o=n(31792);function i(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(o.Z,{icon:a.dT$}))}},4496:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=n(36642),i=n(32189);const l={title:"ESLint example",sidebar_label:"ESLint"},s=void 0,u={unversionedId:"guides/examples/eslint",id:"guides/examples/eslint",title:"ESLint example",description:"In this guide, you'll learn how to integrate ESLint into moon.",source:"@site/docs/guides/examples/eslint.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/eslint",permalink:"/docs/guides/examples/eslint",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/eslint.mdx",tags:[],version:"current",frontMatter:{title:"ESLint example",sidebar_label:"ESLint"},sidebar:"guides",previous:{title:"Astro",permalink:"/docs/guides/examples/astro"},next:{title:"Jest",permalink:"/docs/guides/examples/jest"}},p={},c=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Sharing",id:"sharing",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to lint a single file or folder?",id:"how-to-lint-a-single-file-or-folder",level:3},{value:"Should we use <code>overrides</code>?",id:"should-we-use-overrides",level:3}],d={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(i.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L59",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/"},"ESLint")," into moon."),(0,a.kt)("p",null,"Begin by installing ",(0,a.kt)("inlineCode",{parentName:"p"},"eslint")," and any plugins in your root. We suggest using the same version across\nthe entire repository."),(0,a.kt)(o.Z,{dep:"eslint eslint-config-moon",dev:!0,mdxType:"AddDepsTabs"}),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"Since linting is a universal workflow, add a ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task to\n",(0,a.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n lint:\n command:\n - 'eslint'\n # Support other extensions\n - '--ext'\n - '.js,.jsx,.ts,.tsx'\n # Always fix and run extra checks\n - '--fix'\n - '--report-unused-disable-directives'\n # Dont fail if a project has nothing to lint\n - '--no-error-on-unmatched-pattern'\n # Do fail if we encounter a fatal error\n - '--exit-on-fatal-error'\n # Only 1 ignore file is supported, so use the root\n - '--ignore-path'\n - '@in(4)'\n # Run in current dir\n - '.'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Other config files\n - '*.config.*'\n # Project configs, any format, any depth\n - '**/.eslintrc.*'\n # Root configs, any format\n - '/.eslintignore'\n - '/.eslintrc.*'\n")),(0,a.kt)("p",null,"Projects can extend this task and provide additional parameters if need be, for example."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n args:\n # Enable caching for this project\n - '--cache'\n")),(0,a.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,a.kt)("p",null,"If you're using the ",(0,a.kt)("a",{parentName:"p",href:"https://typescript-eslint.io"},(0,a.kt)("inlineCode",{parentName:"a"},"@typescript-eslint"))," packages, and want to\nenable type-safety based lint rules, we suggest something similar to the official\n",(0,a.kt)("a",{parentName:"p",href:"https://typescript-eslint.io/docs/linting/monorepo"},"monorepo configuration"),"."),(0,a.kt)("p",null,"Create a ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.eslint.json")," in your repository root, extend your shared compiler options (we use\n",(0,a.kt)("a",{parentName:"p",href:"./typescript"},(0,a.kt)("inlineCode",{parentName:"a"},"tsconfig.options.json")),"), and include all your project files."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.eslint.json"',title:'"tsconfig.eslint.json"'},'{\n "extends": "./tsconfig.options.json",\n "compilerOptions": {\n "emitDeclarationOnly": false,\n "noEmit": true\n },\n "include": ["apps/**/*", "packages/**/*"]\n}\n')),(0,a.kt)("p",null,"Append the following inputs to your ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n lint:\n # ...\n inputs:\n # TypeScript support\n - 'types/**/*'\n - 'tsconfig.json'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n")),(0,a.kt)("p",null,"And lastly, add ",(0,a.kt)("inlineCode",{parentName:"p"},"parserOptions")," to your ",(0,a.kt)("a",{parentName:"p",href:"#root-level"},"root-level config"),"."),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("h3",{id:"root-level"},"Root-level"),(0,a.kt)("p",null,"The root-level ESLint config is ",(0,a.kt)("em",{parentName:"p"},"required"),", as ESLint traverses upwards from each file to find\nconfigurations, and this denotes the stopping point. It's also used to define rules for the ",(0,a.kt)("em",{parentName:"p"},"entire"),"\nrepository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n root: true, // Required!\n extends: ['moon'],\n rules: {\n 'no-console': 'error',\n },\n\n // TypeScript support\n parser: '@typescript-eslint/parser',\n parserOptions: {\n project: 'tsconfig.eslint.json',\n tsconfigRootDir: __dirname,\n },\n};\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},".eslintignore")," file must also be defined at the root, as\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/docs/user-guide/configuring/ignoring-code#the-eslintignore-file"},"only 1 ignore file"),"\ncan exist in a repository. We ensure this ignore file is used by passing ",(0,a.kt)("inlineCode",{parentName:"p"},"--ignore-path")," above."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title=".eslintignore"',title:'".eslintignore"'},"node_modules/\n*.min.js\n*.map\n*.snap\n")),(0,a.kt)("h3",{id:"project-level"},"Project-level"),(0,a.kt)("p",null,"A project-level ESLint config can be utilized by creating a ",(0,a.kt)("inlineCode",{parentName:"p"},".eslintrc.<json|js|cjs|yml>")," in the\nproject root. This is optional, but necessary when defining rules and ignore patterns unique to the\nproject."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/.eslintrc.js"',title:'"<project>/.eslintrc.js"'},"module.exports = {\n // Patterns to ignore (alongside the root .eslintignore)\n ignorePatterns: ['build', 'lib'],\n // Project specific rules\n rules: {\n 'no-console': 'off',\n },\n};\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files"},(0,a.kt)("inlineCode",{parentName:"a"},"extends")),"\nsetting should ",(0,a.kt)("strong",{parentName:"p"},"not")," extend the root-level config, as ESLint will automatically merge configs\nwhile traversing upwards!")),(0,a.kt)("h3",{id:"sharing"},"Sharing"),(0,a.kt)("p",null,"To share configuration across projects, you have 3 options:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Define settings in the ",(0,a.kt)("a",{parentName:"li",href:"#root-level"},"root-level config"),". This only applies to the parent\nrepository."),(0,a.kt)("li",{parentName:"ul"},"Create and publish an\n",(0,a.kt)("a",{parentName:"li",href:"https://eslint.org/docs/developer-guide/shareable-configs#using-a-shareable-config"},(0,a.kt)("inlineCode",{parentName:"a"},"eslint-config")),"\nor ",(0,a.kt)("a",{parentName:"li",href:"https://eslint.org/docs/developer-guide/working-with-plugins"},(0,a.kt)("inlineCode",{parentName:"a"},"eslint-plugin"))," npm package.\nThis can be used in any repository."),(0,a.kt)("li",{parentName:"ul"},"A combination of 1 and 2.")),(0,a.kt)("p",null,"For options 2 and 3, if you're utilizing package workspaces, create a local package with the\nfollowing content."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="packages/eslint-config-company/index.js"',title:'"packages/eslint-config-company/index.js"'},"module.exports = {\n extends: ['airbnb'],\n};\n")),(0,a.kt)("p",null,"Within your root-level ESLint config, you can extend this package to inherit the settings."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n extends: 'eslint-config-company',\n};\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"When using this approach, the package must be built and symlinked into ",(0,a.kt)("inlineCode",{parentName:"p"},"node_modules")," ",(0,a.kt)("em",{parentName:"p"},"before")," the\nlinter will run correctly. Take this into account when going down this path!")),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h3",{id:"how-to-lint-a-single-file-or-folder"},"How to lint a single file or folder?"),(0,a.kt)("p",null,"Unfortunately, this isn't currently possible, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"eslint")," binary itself requires a file or\nfolder path to operate on, and in the task above we pass ",(0,a.kt)("inlineCode",{parentName:"p"},".")," (current directory). If this was not\npassed, then nothing would be linted."),(0,a.kt)("p",null,"This has the unintended side-effect of not being able to filter down lintable targets by passing\narbitrary file paths. This is something we hope to resolve in the future."),(0,a.kt)("p",null,"To work around this limitation, you can create another lint task."),(0,a.kt)("h3",{id:"should-we-use-overrides"},"Should we use ",(0,a.kt)("inlineCode",{parentName:"h3"},"overrides"),"?"),(0,a.kt)("p",null,"Projects should define their own rules using an ESLint config in their project root. However, if you\nwant to avoid touching many ESLint configs (think migrations), then\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-based-on-glob-patterns"},"overrides in the root"),"\nare a viable option. Otherwise, we highly encourage project-level configs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'title=".eslintrc.js"',title:'".eslintrc.js"'},"module.exports = {\n // ...\n overrides: [\n // Only apply to apps \"foo\" and \"bar\", but not others\n {\n files: ['apps/foo/**/*', 'apps/bar/**/*'],\n rules: {\n 'no-magic-numbers': 'off',\n },\n },\n ],\n};\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a5a57258.5ac91281.js b/assets/js/a5a57258.5ac91281.js deleted file mode 100644 index 1f105a21e02..00000000000 --- a/assets/js/a5a57258.5ac91281.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2192],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(n),d=i,g=c["".concat(l,".").concat(d)]||c[d]||u[d]||o;return n?a.createElement(g,r(r({ref:t},m),{},{components:n})):a.createElement(g,r({ref:t},m))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,r[1]=s;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},43843:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>m});var a=n(25773),i=(n(27378),n(35318)),o=n(76911);const r={slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},s=void 0,l={permalink:"/blog/moon-v1.10",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx",source:"@site/blog/2023-07-10_moon-v1.10.mdx",title:"moon v1.10 - Mid-year quality of life improvements",description:"Instead of launching a large feature this release, we're focusing on quality of life and developer",date:"2023-07-10T00:00:00.000Z",formattedDate:"July 10, 2023",tags:[{label:"quality",permalink:"/blog/tags/quality"},{label:"life",permalink:"/blog/tags/life"},{label:"qol",permalink:"/blog/tags/qol"},{label:"ignore",permalink:"/blog/tags/ignore"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"vcs",permalink:"/blog/tags/vcs"},{label:"ci",permalink:"/blog/tags/ci"},{label:"debug",permalink:"/blog/tags/debug"}],readingTime:3.6,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},prevItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"},nextItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"}},p={image:n(76703).Z,authorsImageUrls:[void 0]},m=[{value:"Quality improvements",id:"quality-improvements",level:2},{value:"Potential breaking changes",id:"potential-breaking-changes",level:3},{value:"Ignore hashing input files",id:"ignore-hashing-input-files",level:3},{value:"Customize base and head revision",id:"customize-base-and-head-revision",level:3},{value:"New debugging a task guide",id:"new-debugging-a-task-guide",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:m};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Instead of launching a large feature this release, we're focusing on quality of life and developer\nexperience improvements."),(0,i.kt)("h2",{id:"quality-improvements"},"Quality improvements"),(0,i.kt)("p",null,"In the past 6 months, we've released over 16 versions of moon, with our official v1.0 release among\nthem. This is extremely impressive and we're very proud of the progress we've made. To continue this\ntrend, we'll be starting a new initiative that will land quality of life improvements (instead of\nmajor features) every 6 months, starting with this release!"),(0,i.kt)("h3",{id:"potential-breaking-changes"},"Potential breaking changes"),(0,i.kt)("p",null,"While APIs haven't changed, we have introduced some fixes for edge case that could be considered\nbreaking, but for the most part, these changes probably won't affect you. With that being said..."),(0,i.kt)("p",null,"The first fix is that tasks configured with the same ",(0,i.kt)("inlineCode",{parentName:"p"},"outputs")," location (including glob overlap)\nwill now error. This is extremely problematic for caching and hydration, as multiple tasks all\nwriting to the same output will inflate the tarball, and cause unwanted side effects. To demonstrate\nthis, the following is now an error:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n command: 'foo build'\n outputs:\n - 'dist'\n\n compile:\n command: 'bar compile'\n outputs:\n - 'dist'\n")),(0,i.kt)("p",null,"The other fix, which primarily applies to ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/check"},(0,i.kt)("inlineCode",{parentName:"a"},"moon check")),",\nis that a target will be skipped if one of its dependencies failed or has also been skipped.\nPreviously the target would attempt to run and most likely fail since it relied on artifacts from\nits dependencies (which don't exist). Another benefit of this change is that runs should be much\nfaster, as we're not wasting time running targets that we know will fail, which is great for CI."),(0,i.kt)("h3",{id:"ignore-hashing-input-files"},"Ignore hashing input files"),(0,i.kt)("p",null,"We're introducing 2 new settings to ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace"},(0,i.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml"))," that'll provide\nmore control over the hashing flow, ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace#ignorepatterns"},(0,i.kt)("inlineCode",{parentName:"a"},"hasher.ignorePatterns")),"\nand ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace#ignoremissingpatterns"},(0,i.kt)("inlineCode",{parentName:"a"},"hasher.ignoreMissingPatterns")),"."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"ignorePatterns")," setting can be used to entirely ignore a file (using glob patterns) from being\nhashed, and in turn, exclude it as an input source. For example, say we want to ignore all image\nfiles."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"hasher:\n ignorePatterns:\n - '**/*.{png,svg}'\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"ignoreMissingPatterns")," setting pairs with\n",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace#warnonmissinginputs"},(0,i.kt)("inlineCode",{parentName:"a"},"hasher.warnOnMissingInputs")),". When enabled, moon will\nlog a warning to the terminal that an input is missing. This is useful for uncovering\nmisconfigurations, but can be quite noisy when inputs are truly optional. This new setting can be\nused to filter these warnings."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"hasher:\n warnOnMissingInputs: true\n ignoreMissingPatterns:\n - '**/.eslintrc.*'\n - '**/*.config.*'\n")),(0,i.kt)("h3",{id:"customize-base-and-head-revision"},"Customize base and head revision"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," command has always supported customizing the Git base and head revisions through\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"--base")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"--head")," options respectively. This was a requirement for running CI effectively,\nby comparing across branches or commits. However, the ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,i.kt)("inlineCode",{parentName:"a"},"moon run"))," did not support this, as\nthis command was designed to primarily be run locally, but it turns out, y'all are using it in CI\ntoo!"),(0,i.kt)("p",null,"To improve the effectiveness of ",(0,i.kt)("inlineCode",{parentName:"p"},"moon run")," in CI, we've made the following improvements, all of\nwhich require the ",(0,i.kt)("inlineCode",{parentName:"p"},"--remote")," option to be passed."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Added support for ",(0,i.kt)("inlineCode",{parentName:"li"},"MOON_BASE")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"MOON_HEAD")," environment variables, for customizing the base and\nhead revisions respectively (also supported in ",(0,i.kt)("inlineCode",{parentName:"li"},"moon ci"),"). If not defined, will use the default\nbranch and ",(0,i.kt)("inlineCode",{parentName:"li"},"HEAD"),"."),(0,i.kt)("li",{parentName:"ul"},"When the current branch is the default branch, the base revision will be the previous commit.\nUseful for commits landing on master/main.")),(0,i.kt)("h2",{id:"new-debugging-a-task-guide"},"New debugging a task guide"),(0,i.kt)("p",null,"Running tasks is the most common way to interact with moon, so what do you do when your task isn't\nworking as expected? Diagnose it of course! However, diagnosing the root cause of a broken task can\nbe quite daunting:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Is configuration wrong?"),(0,i.kt)("li",{parentName:"ul"},"What about inheritance? Or merging?"),(0,i.kt)("li",{parentName:"ul"},"Is the task platform correct?"),(0,i.kt)("li",{parentName:"ul"},"Were tokens expanded correctly?"),(0,i.kt)("li",{parentName:"ul"},"What about variable substitution?"),(0,i.kt)("li",{parentName:"ul"},"So on and so forth...")),(0,i.kt)("p",null,"To help answer these questions, we're excited to publish an\n",(0,i.kt)("a",{parentName:"p",href:"/docs/guides/debug-task"},"in-depth guide for debugging a task"),"! These steps are the same steps we\nuse internally to diagnose reported issues, or help the Discord community. We hope you find this\nguide extremely beneficial!"),(0,i.kt)("div",{class:"flex justify-center"},(0,i.kt)(o.Z,{label:"View debugging a task guide",href:"/docs/guides/debug-task",size:"lg",mdxType:"Button"})),(0,i.kt)("h2",{id:"other-changes"},"Other changes"),(0,i.kt)("p",null,"View the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.10.0"},"official release")," for a full list\nof changes."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Updated ",(0,i.kt)("a",{parentName:"li",href:"/docs/commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," to include a summary of all failed actions."),(0,i.kt)("li",{parentName:"ul"},"Updated the run report to include stderr/stdout for all attempts.")))}c.isMDXComponent=!0},76703:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.10-53b156788cb2d411508597208ffd8fea.png"}}]); \ No newline at end of file diff --git a/assets/js/a5a57258.accd49df.js b/assets/js/a5a57258.accd49df.js new file mode 100644 index 00000000000..7b830a61855 --- /dev/null +++ b/assets/js/a5a57258.accd49df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82192],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(n),d=i,g=c["".concat(l,".").concat(d)]||c[d]||u[d]||o;return n?a.createElement(g,r(r({ref:t},m),{},{components:n})):a.createElement(g,r({ref:t},m))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,r[1]=s;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},43843:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>m});var a=n(25773),i=(n(27378),n(35318)),o=n(76911);const r={slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},s=void 0,l={permalink:"/blog/moon-v1.10",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx",source:"@site/blog/2023-07-10_moon-v1.10.mdx",title:"moon v1.10 - Mid-year quality of life improvements",description:"Instead of launching a large feature this release, we're focusing on quality of life and developer",date:"2023-07-10T00:00:00.000Z",formattedDate:"July 10, 2023",tags:[{label:"quality",permalink:"/blog/tags/quality"},{label:"life",permalink:"/blog/tags/life"},{label:"qol",permalink:"/blog/tags/qol"},{label:"ignore",permalink:"/blog/tags/ignore"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"vcs",permalink:"/blog/tags/vcs"},{label:"ci",permalink:"/blog/tags/ci"},{label:"debug",permalink:"/blog/tags/debug"}],readingTime:3.6,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},prevItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"},nextItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"}},p={image:n(76703).Z,authorsImageUrls:[void 0]},m=[{value:"Quality improvements",id:"quality-improvements",level:2},{value:"Potential breaking changes",id:"potential-breaking-changes",level:3},{value:"Ignore hashing input files",id:"ignore-hashing-input-files",level:3},{value:"Customize base and head revision",id:"customize-base-and-head-revision",level:3},{value:"New debugging a task guide",id:"new-debugging-a-task-guide",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:m};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Instead of launching a large feature this release, we're focusing on quality of life and developer\nexperience improvements."),(0,i.kt)("h2",{id:"quality-improvements"},"Quality improvements"),(0,i.kt)("p",null,"In the past 6 months, we've released over 16 versions of moon, with our official v1.0 release among\nthem. This is extremely impressive and we're very proud of the progress we've made. To continue this\ntrend, we'll be starting a new initiative that will land quality of life improvements (instead of\nmajor features) every 6 months, starting with this release!"),(0,i.kt)("h3",{id:"potential-breaking-changes"},"Potential breaking changes"),(0,i.kt)("p",null,"While APIs haven't changed, we have introduced some fixes for edge case that could be considered\nbreaking, but for the most part, these changes probably won't affect you. With that being said..."),(0,i.kt)("p",null,"The first fix is that tasks configured with the same ",(0,i.kt)("inlineCode",{parentName:"p"},"outputs")," location (including glob overlap)\nwill now error. This is extremely problematic for caching and hydration, as multiple tasks all\nwriting to the same output will inflate the tarball, and cause unwanted side effects. To demonstrate\nthis, the following is now an error:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n command: 'foo build'\n outputs:\n - 'dist'\n\n compile:\n command: 'bar compile'\n outputs:\n - 'dist'\n")),(0,i.kt)("p",null,"The other fix, which primarily applies to ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/check"},(0,i.kt)("inlineCode",{parentName:"a"},"moon check")),",\nis that a target will be skipped if one of its dependencies failed or has also been skipped.\nPreviously the target would attempt to run and most likely fail since it relied on artifacts from\nits dependencies (which don't exist). Another benefit of this change is that runs should be much\nfaster, as we're not wasting time running targets that we know will fail, which is great for CI."),(0,i.kt)("h3",{id:"ignore-hashing-input-files"},"Ignore hashing input files"),(0,i.kt)("p",null,"We're introducing 2 new settings to ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace"},(0,i.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml"))," that'll provide\nmore control over the hashing flow, ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace#ignorepatterns"},(0,i.kt)("inlineCode",{parentName:"a"},"hasher.ignorePatterns")),"\nand ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace#ignoremissingpatterns"},(0,i.kt)("inlineCode",{parentName:"a"},"hasher.ignoreMissingPatterns")),"."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"ignorePatterns")," setting can be used to entirely ignore a file (using glob patterns) from being\nhashed, and in turn, exclude it as an input source. For example, say we want to ignore all image\nfiles."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"hasher:\n ignorePatterns:\n - '**/*.{png,svg}'\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"ignoreMissingPatterns")," setting pairs with\n",(0,i.kt)("a",{parentName:"p",href:"/docs/config/workspace#warnonmissinginputs"},(0,i.kt)("inlineCode",{parentName:"a"},"hasher.warnOnMissingInputs")),". When enabled, moon will\nlog a warning to the terminal that an input is missing. This is useful for uncovering\nmisconfigurations, but can be quite noisy when inputs are truly optional. This new setting can be\nused to filter these warnings."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"hasher:\n warnOnMissingInputs: true\n ignoreMissingPatterns:\n - '**/.eslintrc.*'\n - '**/*.config.*'\n")),(0,i.kt)("h3",{id:"customize-base-and-head-revision"},"Customize base and head revision"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," command has always supported customizing the Git base and head revisions through\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"--base")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"--head")," options respectively. This was a requirement for running CI effectively,\nby comparing across branches or commits. However, the ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,i.kt)("inlineCode",{parentName:"a"},"moon run"))," did not support this, as\nthis command was designed to primarily be run locally, but it turns out, y'all are using it in CI\ntoo!"),(0,i.kt)("p",null,"To improve the effectiveness of ",(0,i.kt)("inlineCode",{parentName:"p"},"moon run")," in CI, we've made the following improvements, all of\nwhich require the ",(0,i.kt)("inlineCode",{parentName:"p"},"--remote")," option to be passed."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Added support for ",(0,i.kt)("inlineCode",{parentName:"li"},"MOON_BASE")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"MOON_HEAD")," environment variables, for customizing the base and\nhead revisions respectively (also supported in ",(0,i.kt)("inlineCode",{parentName:"li"},"moon ci"),"). If not defined, will use the default\nbranch and ",(0,i.kt)("inlineCode",{parentName:"li"},"HEAD"),"."),(0,i.kt)("li",{parentName:"ul"},"When the current branch is the default branch, the base revision will be the previous commit.\nUseful for commits landing on master/main.")),(0,i.kt)("h2",{id:"new-debugging-a-task-guide"},"New debugging a task guide"),(0,i.kt)("p",null,"Running tasks is the most common way to interact with moon, so what do you do when your task isn't\nworking as expected? Diagnose it of course! However, diagnosing the root cause of a broken task can\nbe quite daunting:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Is configuration wrong?"),(0,i.kt)("li",{parentName:"ul"},"What about inheritance? Or merging?"),(0,i.kt)("li",{parentName:"ul"},"Is the task platform correct?"),(0,i.kt)("li",{parentName:"ul"},"Were tokens expanded correctly?"),(0,i.kt)("li",{parentName:"ul"},"What about variable substitution?"),(0,i.kt)("li",{parentName:"ul"},"So on and so forth...")),(0,i.kt)("p",null,"To help answer these questions, we're excited to publish an\n",(0,i.kt)("a",{parentName:"p",href:"/docs/guides/debug-task"},"in-depth guide for debugging a task"),"! These steps are the same steps we\nuse internally to diagnose reported issues, or help the Discord community. We hope you find this\nguide extremely beneficial!"),(0,i.kt)("div",{class:"flex justify-center"},(0,i.kt)(o.Z,{label:"View debugging a task guide",href:"/docs/guides/debug-task",size:"lg",mdxType:"Button"})),(0,i.kt)("h2",{id:"other-changes"},"Other changes"),(0,i.kt)("p",null,"View the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.10.0"},"official release")," for a full list\nof changes."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Updated ",(0,i.kt)("a",{parentName:"li",href:"/docs/commands/ci"},(0,i.kt)("inlineCode",{parentName:"a"},"moon ci"))," to include a summary of all failed actions."),(0,i.kt)("li",{parentName:"ul"},"Updated the run report to include stderr/stdout for all attempts.")))}c.isMDXComponent=!0},76703:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.10-53b156788cb2d411508597208ffd8fea.png"}}]); \ No newline at end of file diff --git a/assets/js/a641c963.91b2c095.js b/assets/js/a641c963.91b2c095.js deleted file mode 100644 index 7e1246ae6e1..00000000000 --- a/assets/js/a641c963.91b2c095.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3931],{35318:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),m=c(n),u=r,f=m["".concat(l,".").concat(u)]||m[u]||p[u]||i;return n?o.createElement(f,a(a({ref:t},d),{},{components:n})):o.createElement(f,a({ref:t},d))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var c=2;c<i;c++)a[c]=n[c];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},27915:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(27378),r=n(83469),i=n(9619);function a(e){let{text:t}=e;return o.createElement(i.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var o=n(27378),r=n(40624),i=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return o.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?a[l]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(i.Z,{icon:n,className:"mr-1"}),s)}},322:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var o=n(25773),r=(n(27378),n(35318)),i=n(27915);const a={title:"Version detection",toc_max_heading_level:6},s=void 0,l={unversionedId:"proto/detection",id:"proto/detection",title:"Version detection",description:"The most powerful feature in proto is its contextual version detection, that is triggered with",source:"@site/docs/proto/detection.mdx",sourceDirName:"proto",slug:"/proto/detection",permalink:"/docs/proto/detection",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/detection.mdx",tags:[],version:"current",frontMatter:{title:"Version detection",toc_max_heading_level:6},sidebar:"proto",previous:{title:"Install proto",permalink:"/docs/proto/install"},next:{title:"Configuration",permalink:"/docs/proto/config"}},c={},d=[{value:"1. Version is explicitly passed as a command line argument",id:"1-version-is-explicitly-passed-as-a-command-line-argument",level:4},{value:"2. Version is provided with the <code>PROTO_*_VERSION</code> environment variable",id:"2-version-is-provided-with-the-proto__version-environment-variable",level:4},{value:"3. Version is located by traversing the file system",id:"3-version-is-located-by-traversing-the-file-system",level:4},{value:"3.1. Version is defined locally in <code>.prototools</code>",id:"31-version-is-defined-locally-in-prototools",level:5},{value:"3.2. Version is defined in the tool's ecosystem",id:"32-version-is-defined-in-the-tools-ecosystem",level:5},{value:"4. Version is defined globally",id:"4-version-is-defined-globally",level:4},{value:"5. Version <em>could not</em> be detected",id:"5-version-could-not-be-detected",level:4}],p={toc:d};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,r.kt)("p",null,"The most powerful feature in proto is its contextual version detection, that is triggered with\n",(0,r.kt)("a",{parentName:"p",href:"./commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"proto run")),", ",(0,r.kt)("a",{parentName:"p",href:"./commands/bin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto bin")),", or when a shim is executed. So what\ndoes this mean exactly? Before a tool in proto's toolchain can be executed, we need to determine the\nversion of the tool to execute with. If a detected version exists locally, we proceed using that\nbinary, otherwise we fail with a missing installation error."),(0,r.kt)("p",null,"When detecting a version, the following steps are checked, in the order as listed:"),(0,r.kt)("h4",{id:"1-version-is-explicitly-passed-as-a-command-line-argument"},"1. Version is explicitly passed as a command line argument"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ proto run node 18.0.0\n")),(0,r.kt)("h4",{id:"2-version-is-provided-with-the-proto__version-environment-variable"},"2. Version is provided with the ",(0,r.kt)("inlineCode",{parentName:"h4"},"PROTO_*_VERSION")," environment variable"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ PROTO_NODE_VERSION=18.0.0 proto run node\n")),(0,r.kt)("h4",{id:"3-version-is-located-by-traversing-the-file-system"},"3. Version is located by traversing the file system"),(0,r.kt)("p",null,"This step will attempt to find a configuration or manifest file in the current working directory,\nand traverse upwards through parent directories until a file is found."),(0,r.kt)("h5",{id:"31-version-is-defined-locally-in-prototools"},"3.1. Version is defined locally in ",(0,r.kt)("inlineCode",{parentName:"h5"},".prototools")),(0,r.kt)("p",null,"A ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools"),' file was found and a version entry exists for the current tool. This is also known\nas a "local version" and can be created with ',(0,r.kt)("a",{parentName:"p",href:"./commands/pin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto pin")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.0.0"\n')),(0,r.kt)("h5",{id:"32-version-is-defined-in-the-tools-ecosystem"},"3.2. Version is defined in the tool's ecosystem"),(0,r.kt)("p",null,"Depending on the tool, a version is extracted from a found file unique to that tool's ecosystem.\nThis includes version manager configs (",(0,r.kt)("inlineCode",{parentName:"p"},".nvmrc"),", etc), manifest files (",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),", etc), and\nmore."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title=".nvmrc"',title:'".nvmrc"'},"18.0.0\n")),(0,r.kt)("h4",{id:"4-version-is-defined-globally"},"4. Version is defined globally"),(0,r.kt)("p",null,'As the last check, we look for a "global version" that was pinned with\n',(0,r.kt)("a",{parentName:"p",href:"./commands/pin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto pin --global")),". This version is stored at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/*/manifest.json"),"."),(0,r.kt)("h4",{id:"5-version-could-not-be-detected"},"5. Version ",(0,r.kt)("em",{parentName:"h4"},"could not")," be detected"),(0,r.kt)("p",null,"If all the previous steps have failed, then we could not detect an applicable version, and the\nprocess will fail."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a641c963.fc36d55b.js b/assets/js/a641c963.fc36d55b.js new file mode 100644 index 00000000000..96460db361d --- /dev/null +++ b/assets/js/a641c963.fc36d55b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[73931],{35318:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>u});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),m=c(n),u=r,f=m["".concat(l,".").concat(u)]||m[u]||p[u]||i;return n?o.createElement(f,a(a({ref:t},d),{},{components:n})):o.createElement(f,a({ref:t},d))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var c=2;c<i;c++)a[c]=n[c];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},27915:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(27378),r=n(83469),i=n(9619);function a(e){let{text:t}=e;return o.createElement(i.Z,{text:t,icon:r.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var o=n(27378),r=n(40624),i=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return o.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?a[l]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(i.Z,{icon:n,className:"mr-1"}),s)}},322:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var o=n(25773),r=(n(27378),n(35318)),i=n(27915);const a={title:"Version detection",toc_max_heading_level:6},s=void 0,l={unversionedId:"proto/detection",id:"proto/detection",title:"Version detection",description:"The most powerful feature in proto is its contextual version detection, that is triggered with",source:"@site/docs/proto/detection.mdx",sourceDirName:"proto",slug:"/proto/detection",permalink:"/docs/proto/detection",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/detection.mdx",tags:[],version:"current",frontMatter:{title:"Version detection",toc_max_heading_level:6},sidebar:"proto",previous:{title:"Install proto",permalink:"/docs/proto/install"},next:{title:"Configuration",permalink:"/docs/proto/config"}},c={},d=[{value:"1. Version is explicitly passed as a command line argument",id:"1-version-is-explicitly-passed-as-a-command-line-argument",level:4},{value:"2. Version is provided with the <code>PROTO_*_VERSION</code> environment variable",id:"2-version-is-provided-with-the-proto__version-environment-variable",level:4},{value:"3. Version is located by traversing the file system",id:"3-version-is-located-by-traversing-the-file-system",level:4},{value:"3.1. Version is defined locally in <code>.prototools</code>",id:"31-version-is-defined-locally-in-prototools",level:5},{value:"3.2. Version is defined in the tool's ecosystem",id:"32-version-is-defined-in-the-tools-ecosystem",level:5},{value:"4. Version is defined globally",id:"4-version-is-defined-globally",level:4},{value:"5. Version <em>could not</em> be detected",id:"5-version-could-not-be-detected",level:4}],p={toc:d};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,r.kt)("p",null,"The most powerful feature in proto is its contextual version detection, that is triggered with\n",(0,r.kt)("a",{parentName:"p",href:"./commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"proto run")),", ",(0,r.kt)("a",{parentName:"p",href:"./commands/bin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto bin")),", or when a shim is executed. So what\ndoes this mean exactly? Before a tool in proto's toolchain can be executed, we need to determine the\nversion of the tool to execute with. If a detected version exists locally, we proceed using that\nbinary, otherwise we fail with a missing installation error."),(0,r.kt)("p",null,"When detecting a version, the following steps are checked, in the order as listed:"),(0,r.kt)("h4",{id:"1-version-is-explicitly-passed-as-a-command-line-argument"},"1. Version is explicitly passed as a command line argument"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ proto run node 18.0.0\n")),(0,r.kt)("h4",{id:"2-version-is-provided-with-the-proto__version-environment-variable"},"2. Version is provided with the ",(0,r.kt)("inlineCode",{parentName:"h4"},"PROTO_*_VERSION")," environment variable"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ PROTO_NODE_VERSION=18.0.0 proto run node\n")),(0,r.kt)("h4",{id:"3-version-is-located-by-traversing-the-file-system"},"3. Version is located by traversing the file system"),(0,r.kt)("p",null,"This step will attempt to find a configuration or manifest file in the current working directory,\nand traverse upwards through parent directories until a file is found."),(0,r.kt)("h5",{id:"31-version-is-defined-locally-in-prototools"},"3.1. Version is defined locally in ",(0,r.kt)("inlineCode",{parentName:"h5"},".prototools")),(0,r.kt)("p",null,"A ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools"),' file was found and a version entry exists for the current tool. This is also known\nas a "local version" and can be created with ',(0,r.kt)("a",{parentName:"p",href:"./commands/pin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto pin")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'node = "18.0.0"\n')),(0,r.kt)("h5",{id:"32-version-is-defined-in-the-tools-ecosystem"},"3.2. Version is defined in the tool's ecosystem"),(0,r.kt)("p",null,"Depending on the tool, a version is extracted from a found file unique to that tool's ecosystem.\nThis includes version manager configs (",(0,r.kt)("inlineCode",{parentName:"p"},".nvmrc"),", etc), manifest files (",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),", etc), and\nmore."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title=".nvmrc"',title:'".nvmrc"'},"18.0.0\n")),(0,r.kt)("h4",{id:"4-version-is-defined-globally"},"4. Version is defined globally"),(0,r.kt)("p",null,'As the last check, we look for a "global version" that was pinned with\n',(0,r.kt)("a",{parentName:"p",href:"./commands/pin"},(0,r.kt)("inlineCode",{parentName:"a"},"proto pin --global")),". This version is stored at ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/*/manifest.json"),"."),(0,r.kt)("h4",{id:"5-version-could-not-be-detected"},"5. Version ",(0,r.kt)("em",{parentName:"h4"},"could not")," be detected"),(0,r.kt)("p",null,"If all the previous steps have failed, then we could not detect an applicable version, and the\nprocess will fail."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a6746ab5.82de9a64.js b/assets/js/a6746ab5.82de9a64.js new file mode 100644 index 00000000000..5fa4708271a --- /dev/null +++ b/assets/js/a6746ab5.82de9a64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51705],{35318:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>c});var o=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?l(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):l(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,o,a=function(e,n){if(null==e)return{};var t,o,a={},l=Object.keys(e);for(o=0;o<l.length;o++)t=l[o],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)t=l[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=p(e.components);return o.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(t),c=a,g=d["".concat(s,".").concat(c)]||d[c]||m[c]||l;return t?o.createElement(g,r(r({ref:n},u),{},{components:t})):o.createElement(g,r({ref:n},u))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var l=t.length,r=new Array(l);r[0]=d;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,r[1]=i;for(var p=2;p<l;p++)r[p]=t[p];return o.createElement.apply(null,r)}return o.createElement.apply(null,t)}d.displayName="MDXCreateElement"},8618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var o=t(25773),a=(t(27378),t(35318));const l={slug:"proto-v0.5",title:"proto v0.5 - Version aliasing and global binaries",authors:["milesj"],tags:["proto","alias","globals"],image:"./img/proto/v0.5.png"},r=void 0,i={permalink:"/blog/proto-v0.5",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-06_proto-v0.5.mdx",source:"@site/blog/2023-04-06_proto-v0.5.mdx",title:"proto v0.5 - Version aliasing and global binaries",description:"With this release, we're providing solutions for installing globals and using aliases.",date:"2023-04-06T00:00:00.000Z",formattedDate:"April 6, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"alias",permalink:"/blog/tags/alias"},{label:"globals",permalink:"/blog/tags/globals"}],readingTime:1.89,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.5",title:"proto v0.5 - Version aliasing and global binaries",authors:["milesj"],tags:["proto","alias","globals"],image:"./img/proto/v0.5.png"},prevItem:{title:"proto v0.6 - Unused cleaning and improved global binaries",permalink:"/blog/proto-v0.6"},nextItem:{title:"moon v1.1 - Task debugging and improvements",permalink:"/blog/moon-v1.1"}},s={image:t(24864).Z,authorsImageUrls:[void 0]},p=[{value:"Install global binaries",id:"install-global-binaries",level:2},{value:"Bun, Deno, Go, Rust",id:"bun-deno-go-rust",level:3},{value:"Node.js, npm, pnpm, yarn",id:"nodejs-npm-pnpm-yarn",level:3},{value:"Custom version aliases",id:"custom-version-aliases",level:2}],u={toc:p};function m(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're providing solutions for installing globals and using aliases."),(0,a.kt)("h2",{id:"install-global-binaries"},"Install global binaries"),(0,a.kt)("p",null,"Installing global binaries (packages, modules, etc) is a common task for developers, and proto now\nprovides a solution for this workflow with the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/install-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto install-global"))," command. Continue reading for more\ninformation."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Global install directories will need to be added manually to your ",(0,a.kt)("inlineCode",{parentName:"p"},"PATH")," from your shell.")),(0,a.kt)("h3",{id:"bun-deno-go-rust"},"Bun, Deno, Go, Rust"),(0,a.kt)("p",null,"All of these languages provide a built-in solution for installing global binaries to a shared\nlocation, regardless of the language's current version. Because of this, proto will simply call\ntheir install commands under the hood."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install-global rust cargo-release\n\n# Same as\n$ cargo install cargo-release --force\n")),(0,a.kt)("p",null,"Globals will be installed to the following locations:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Bun"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.bun/bin")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Deno"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.deno/bin")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Go"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/go/bin")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Rust"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.cargo/bin"))),(0,a.kt)("h3",{id:"nodejs-npm-pnpm-yarn"},"Node.js, npm, pnpm, yarn"),(0,a.kt)("p",null,"Unfortunately, the Node.js ecosystem is pretty fractured when it comes to installing global\nbinaries. Each package manager provides their own solution for installing globals, and each has\ntheir own quirks. The problem is further exacerbated by the fact that globals are tied to Node.js\nversion, so if you switch versions, you lose all your previous globals!"),(0,a.kt)("p",null,"To work around this, proto standardizes the global installation process for Node.js, but requires\nall globals to be installed through proto. You can no longer use ",(0,a.kt)("inlineCode",{parentName:"p"},"npm install -g"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"pnpm add -g"),", so\non and so forth, and must use:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install-global node webpack-cli\n")),(0,a.kt)("p",null,"Globals will be installed to a shared location, ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/node/globals/bin"),", and will persist\nacross versions!"),(0,a.kt)("h2",{id:"custom-version-aliases"},"Custom version aliases"),(0,a.kt)("p",null,"We are excited to announce 2 new commands that enable you to define custom version aliases,\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/alias"},(0,a.kt)("inlineCode",{parentName:"a"},"proto alias"))," and ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/unalias"},(0,a.kt)("inlineCode",{parentName:"a"},"proto unalias")),".\nAliasing of versions is a feature that allows you to assign a custom name or label to a specific\nversion of a tool."),(0,a.kt)("p",null,'For example, instead of using the version number, you can assign a label such as "work" or\n"personal" to a version. This makes it easier to remember and manage different versions.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto alias node work 16.16\n$ proto alias node personal 18\n")),(0,a.kt)("p",null,"Aliases can be used anywhere a version is accepted, for example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto bin node work\n$ proto install node personal\n")))}m.isMDXComponent=!0},24864:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/v0.5-239b258e475257305a2e2c2094e6a356.png"}}]); \ No newline at end of file diff --git a/assets/js/a6746ab5.a6ec2c4c.js b/assets/js/a6746ab5.a6ec2c4c.js deleted file mode 100644 index 023a7e927ec..00000000000 --- a/assets/js/a6746ab5.a6ec2c4c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1705],{35318:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>c});var o=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?l(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):l(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,o,a=function(e,n){if(null==e)return{};var t,o,a={},l=Object.keys(e);for(o=0;o<l.length;o++)t=l[o],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)t=l[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),p=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=p(e.components);return o.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(t),c=a,g=d["".concat(s,".").concat(c)]||d[c]||m[c]||l;return t?o.createElement(g,r(r({ref:n},u),{},{components:t})):o.createElement(g,r({ref:n},u))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var l=t.length,r=new Array(l);r[0]=d;var i={};for(var s in n)hasOwnProperty.call(n,s)&&(i[s]=n[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,r[1]=i;for(var p=2;p<l;p++)r[p]=t[p];return o.createElement.apply(null,r)}return o.createElement.apply(null,t)}d.displayName="MDXCreateElement"},8618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var o=t(25773),a=(t(27378),t(35318));const l={slug:"proto-v0.5",title:"proto v0.5 - Version aliasing and global binaries",authors:["milesj"],tags:["proto","alias","globals"],image:"./img/proto/v0.5.png"},r=void 0,i={permalink:"/blog/proto-v0.5",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-06_proto-v0.5.mdx",source:"@site/blog/2023-04-06_proto-v0.5.mdx",title:"proto v0.5 - Version aliasing and global binaries",description:"With this release, we're providing solutions for installing globals and using aliases.",date:"2023-04-06T00:00:00.000Z",formattedDate:"April 6, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"alias",permalink:"/blog/tags/alias"},{label:"globals",permalink:"/blog/tags/globals"}],readingTime:1.89,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.5",title:"proto v0.5 - Version aliasing and global binaries",authors:["milesj"],tags:["proto","alias","globals"],image:"./img/proto/v0.5.png"},prevItem:{title:"proto v0.6 - Unused cleaning and improved global binaries",permalink:"/blog/proto-v0.6"},nextItem:{title:"moon v1.1 - Task debugging and improvements",permalink:"/blog/moon-v1.1"}},s={image:t(24864).Z,authorsImageUrls:[void 0]},p=[{value:"Install global binaries",id:"install-global-binaries",level:2},{value:"Bun, Deno, Go, Rust",id:"bun-deno-go-rust",level:3},{value:"Node.js, npm, pnpm, yarn",id:"nodejs-npm-pnpm-yarn",level:3},{value:"Custom version aliases",id:"custom-version-aliases",level:2}],u={toc:p};function m(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're providing solutions for installing globals and using aliases."),(0,a.kt)("h2",{id:"install-global-binaries"},"Install global binaries"),(0,a.kt)("p",null,"Installing global binaries (packages, modules, etc) is a common task for developers, and proto now\nprovides a solution for this workflow with the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/install-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto install-global"))," command. Continue reading for more\ninformation."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Global install directories will need to be added manually to your ",(0,a.kt)("inlineCode",{parentName:"p"},"PATH")," from your shell.")),(0,a.kt)("h3",{id:"bun-deno-go-rust"},"Bun, Deno, Go, Rust"),(0,a.kt)("p",null,"All of these languages provide a built-in solution for installing global binaries to a shared\nlocation, regardless of the language's current version. Because of this, proto will simply call\ntheir install commands under the hood."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install-global rust cargo-release\n\n# Same as\n$ cargo install cargo-release --force\n")),(0,a.kt)("p",null,"Globals will be installed to the following locations:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Bun"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.bun/bin")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Deno"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.deno/bin")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Go"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/go/bin")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Rust"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.cargo/bin"))),(0,a.kt)("h3",{id:"nodejs-npm-pnpm-yarn"},"Node.js, npm, pnpm, yarn"),(0,a.kt)("p",null,"Unfortunately, the Node.js ecosystem is pretty fractured when it comes to installing global\nbinaries. Each package manager provides their own solution for installing globals, and each has\ntheir own quirks. The problem is further exacerbated by the fact that globals are tied to Node.js\nversion, so if you switch versions, you lose all your previous globals!"),(0,a.kt)("p",null,"To work around this, proto standardizes the global installation process for Node.js, but requires\nall globals to be installed through proto. You can no longer use ",(0,a.kt)("inlineCode",{parentName:"p"},"npm install -g"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"pnpm add -g"),", so\non and so forth, and must use:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install-global node webpack-cli\n")),(0,a.kt)("p",null,"Globals will be installed to a shared location, ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/node/globals/bin"),", and will persist\nacross versions!"),(0,a.kt)("h2",{id:"custom-version-aliases"},"Custom version aliases"),(0,a.kt)("p",null,"We are excited to announce 2 new commands that enable you to define custom version aliases,\n",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/alias"},(0,a.kt)("inlineCode",{parentName:"a"},"proto alias"))," and ",(0,a.kt)("a",{parentName:"p",href:"/docs/proto/commands/unalias"},(0,a.kt)("inlineCode",{parentName:"a"},"proto unalias")),".\nAliasing of versions is a feature that allows you to assign a custom name or label to a specific\nversion of a tool."),(0,a.kt)("p",null,'For example, instead of using the version number, you can assign a label such as "work" or\n"personal" to a version. This makes it easier to remember and manage different versions.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto alias node work 16.16\n$ proto alias node personal 18\n")),(0,a.kt)("p",null,"Aliases can be used anywhere a version is accepted, for example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto bin node work\n$ proto install node personal\n")))}m.isMDXComponent=!0},24864:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/v0.5-239b258e475257305a2e2c2094e6a356.png"}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.6df45cd0.js b/assets/js/a6aa9e1f.6df45cd0.js deleted file mode 100644 index 2c14c379349..00000000000 --- a/assets/js/a6aa9e1f.6df45cd0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3089],{63462:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(27378),l=a(37140),r=a(50353),i=a(1123),o=a(75484),s=a(55228),c=a(20013),m=a(60505),g=a(2134);function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,r.default)(),{blogDescription:l,blogTitle:o,permalink:s}=t,c="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:c,description:l}),n.createElement(m.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:l}=e;return n.createElement(s.Z,{sidebar:l},n.createElement(g.Z,{items:a}),n.createElement(c.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(p,e),n.createElement(d,e))}},20013:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),l=a(99213),r=a(44022);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(r.Z,{permalink:i,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},2134:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),l=a(70412),r=a(25532);function i(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},44022:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),l=a(40624),r=a(83469),i=a(31792),o=a(90728);function s(e){let{permalink:t,title:a,isNext:s}=e;return n.createElement("div",{className:(0,l.Z)("flex-1",s?"text-right":"text-left")},n.createElement(o.Z,{weight:"bold",to:t},!s&&n.createElement(i.Z,{className:"mr-1 icon-previous",icon:r.A35}),a,s&&n.createElement(i.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.a99bc49b.js b/assets/js/a6aa9e1f.a99bc49b.js new file mode 100644 index 00000000000..f0275273ae6 --- /dev/null +++ b/assets/js/a6aa9e1f.a99bc49b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93089],{63462:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(27378),l=a(37140),r=a(50353),i=a(1123),o=a(75484),s=a(55228),c=a(20013),m=a(60505),g=a(2134);function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,r.default)(),{blogDescription:l,blogTitle:o,permalink:s}=t,c="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:c,description:l}),n.createElement(m.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:l}=e;return n.createElement(s.Z,{sidebar:l},n.createElement(g.Z,{items:a}),n.createElement(c.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(p,e),n.createElement(d,e))}},20013:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),l=a(99213),r=a(44022);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(r.Z,{permalink:i,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},2134:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(27378),l=a(70412),r=a(25532);function i(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},44022:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(27378),l=a(40624),r=a(83469),i=a(31792),o=a(90728);function s(e){let{permalink:t,title:a,isNext:s}=e;return n.createElement("div",{className:(0,l.Z)("flex-1",s?"text-right":"text-left")},n.createElement(o.Z,{weight:"bold",to:t},!s&&n.createElement(i.Z,{className:"mr-1 icon-previous",icon:r.A35}),a,s&&n.createElement(i.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/a6d9fcee.6ddfcff9.js b/assets/js/a6d9fcee.6ddfcff9.js new file mode 100644 index 00000000000..10c1dd0a049 --- /dev/null +++ b/assets/js/a6d9fcee.6ddfcff9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29958],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(r),f=a,g=u["".concat(l,".").concat(f)]||u[f]||m[f]||o;return r?n.createElement(g,i(i({ref:t},p),{},{components:r})):n.createElement(g,i({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s<o;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:i="center",padding:c="1rem"}=e;return n.createElement("div",{style:{marginBottom:c,marginTop:c,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},91038:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(88109);const o={slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},i=void 0,c={permalink:"/blog/v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-14_v0.19.mdx",source:"@site/blog/2022-11-14_v0.19.mdx",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",description:"With this release, we've focused heavily on our remote caching architecture. Since this is a massive",date:"2022-11-14T00:00:00.000Z",formattedDate:"November 14, 2022",tags:[{label:"affected",permalink:"/blog/tags/affected"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"},{label:"dep-graph",permalink:"/blog/tags/dep-graph"}],readingTime:2.895,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},prevItem:{title:"Integrating TypeScript in a monorepo",permalink:"/blog/typescript-monorepo"},nextItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"}},l={image:r(66620).Z,authorsImageUrls:[void 0]},s=[],p={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've focused heavily on our remote caching architecture. Since this is a massive\ntask that requires much work behind the scenes, this overall release is rather light."))}m.isMDXComponent=!0},66620:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.19-78b0dde00a078efefe909e6acefe73a7.png"}}]); \ No newline at end of file diff --git a/assets/js/a6d9fcee.bb5fad90.js b/assets/js/a6d9fcee.bb5fad90.js deleted file mode 100644 index 58a3a20d6d8..00000000000 --- a/assets/js/a6d9fcee.bb5fad90.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9958],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(r),f=a,g=u["".concat(l,".").concat(f)]||u[f]||m[f]||o;return r?n.createElement(g,i(i({ref:t},p),{},{components:r})):n.createElement(g,i({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s<o;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:i="center",padding:c="1rem"}=e;return n.createElement("div",{style:{marginBottom:c,marginTop:c,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},91038:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(88109);const o={slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},i=void 0,c={permalink:"/blog/v0.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-14_v0.19.mdx",source:"@site/blog/2022-11-14_v0.19.mdx",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",description:"With this release, we've focused heavily on our remote caching architecture. Since this is a massive",date:"2022-11-14T00:00:00.000Z",formattedDate:"November 14, 2022",tags:[{label:"affected",permalink:"/blog/tags/affected"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"},{label:"dep-graph",permalink:"/blog/tags/dep-graph"}],readingTime:2.895,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.19",title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",authors:["milesj"],tags:["affected","remote-cache","dep-graph"],image:"./img/v0.19.png"},prevItem:{title:"Integrating TypeScript in a monorepo",permalink:"/blog/typescript-monorepo"},nextItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"}},l={image:r(66620).Z,authorsImageUrls:[void 0]},s=[],p={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've focused heavily on our remote caching architecture. Since this is a massive\ntask that requires much work behind the scenes, this overall release is rather light."))}m.isMDXComponent=!0},66620:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.19-78b0dde00a078efefe909e6acefe73a7.png"}}]); \ No newline at end of file diff --git a/assets/js/a701d349.28d5925f.js b/assets/js/a701d349.28d5925f.js new file mode 100644 index 00000000000..5d9cf07b181 --- /dev/null +++ b/assets/js/a701d349.28d5925f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33068],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},l=Object.keys(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=o,f=u["".concat(s,".").concat(d)]||u[d]||p[d]||l;return r?n.createElement(f,a(a({ref:t},m),{},{components:r})):n.createElement(f,a({ref:t},m))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<l;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},47049:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const l={title:"list-remote"},a=void 0,i={unversionedId:"proto/commands/list-remote",id:"proto/commands/list-remote",title:"list-remote",description:"The proto list-remote (or proto lsr) command will list available versions by resolving",source:"@site/docs/proto/commands/list-remote.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/list-remote",permalink:"/docs/proto/commands/list-remote",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/list-remote.mdx",tags:[],version:"current",frontMatter:{title:"list-remote"},sidebar:"proto",previous:{title:"list-global",permalink:"/docs/proto/commands/list-global"},next:{title:"outdated",permalink:"/docs/proto/commands/outdated"}},s={},c=[{value:"Arguments",id:"arguments",level:3}],m={toc:c};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto list-remote <tool>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto lsr"),") command will list available versions by resolving\nversions from the tool's remote release manifest."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto list-remote node\n...\n18.10.0\n18.11.0\n18.12.0\n18.12.1\n18.13.0\n18.14.0\n18.14.1\n18.14.2\n19.0.0\n19.0.1\n19.1.0\n19.2.0\n19.3.0\n19.4.0\n19.5.0\n19.6.0\n19.6.1\n19.7.0\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a701d349.637b0614.js b/assets/js/a701d349.637b0614.js deleted file mode 100644 index f5e3ba7e8e5..00000000000 --- a/assets/js/a701d349.637b0614.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3068],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},l=Object.keys(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=o,f=u["".concat(s,".").concat(d)]||u[d]||p[d]||l;return r?n.createElement(f,a(a({ref:t},m),{},{components:r})):n.createElement(f,a({ref:t},m))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var c=2;c<l;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},47049:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const l={title:"list-remote"},a=void 0,i={unversionedId:"proto/commands/list-remote",id:"proto/commands/list-remote",title:"list-remote",description:"The proto list-remote (or proto lsr) command will list available versions by resolving",source:"@site/docs/proto/commands/list-remote.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/list-remote",permalink:"/docs/proto/commands/list-remote",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/list-remote.mdx",tags:[],version:"current",frontMatter:{title:"list-remote"},sidebar:"proto",previous:{title:"list-global",permalink:"/docs/proto/commands/list-global"},next:{title:"outdated",permalink:"/docs/proto/commands/outdated"}},s={},c=[{value:"Arguments",id:"arguments",level:3}],m={toc:c};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto list-remote <tool>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto lsr"),") command will list available versions by resolving\nversions from the tool's remote release manifest."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto list-remote node\n...\n18.10.0\n18.11.0\n18.12.0\n18.12.1\n18.13.0\n18.14.0\n18.14.1\n18.14.2\n19.0.0\n19.0.1\n19.1.0\n19.2.0\n19.3.0\n19.4.0\n19.5.0\n19.6.0\n19.6.1\n19.7.0\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.2ebb91ff.js b/assets/js/a7023ddc.2ebb91ff.js deleted file mode 100644 index 74ae37844a4..00000000000 --- a/assets/js/a7023ddc.2ebb91ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1713],{53457:l=>{l.exports=JSON.parse('[{"label":"action","permalink":"/blog/tags/action","count":2},{"label":"dependency","permalink":"/blog/tags/dependency","count":1},{"label":"graph","permalink":"/blog/tags/graph","count":3},{"label":"pipeline","permalink":"/blog/tags/pipeline","count":2},{"label":"railway","permalink":"/blog/tags/railway","count":1},{"label":"proto","permalink":"/blog/tags/proto","count":21},{"label":"pin","permalink":"/blog/tags/pin","count":1},{"label":"global","permalink":"/blog/tags/global","count":2},{"label":"local","permalink":"/blog/tags/local","count":1},{"label":"outdated","permalink":"/blog/tags/outdated","count":1},{"label":"run","permalink":"/blog/tags/run","count":1},{"label":"target","permalink":"/blog/tags/target","count":2},{"label":"toolchain","permalink":"/blog/tags/toolchain","count":7},{"label":"version","permalink":"/blog/tags/version","count":1},{"label":"ci","permalink":"/blog/tags/ci","count":3},{"label":"shorthand","permalink":"/blog/tags/shorthand","count":1},{"label":"http","permalink":"/blog/tags/http","count":1},{"label":"registry","permalink":"/blog/tags/registry","count":1},{"label":"index","permalink":"/blog/tags/index","count":1},{"label":"plugin","permalink":"/blog/tags/plugin","count":6},{"label":"tool","permalink":"/blog/tags/tool","count":1},{"label":"canary","permalink":"/blog/tags/canary","count":1},{"label":"python","permalink":"/blog/tags/python","count":1},{"label":"tasks","permalink":"/blog/tags/tasks","count":6},{"label":"wasm","permalink":"/blog/tags/wasm","count":5},{"label":"inheritance","permalink":"/blog/tags/inheritance","count":2},{"label":"project-graph","permalink":"/blog/tags/project-graph","count":2},{"label":"project","permalink":"/blog/tags/project","count":3},{"label":"quality","permalink":"/blog/tags/quality","count":1},{"label":"life","permalink":"/blog/tags/life","count":1},{"label":"qol","permalink":"/blog/tags/qol","count":1},{"label":"ignore","permalink":"/blog/tags/ignore","count":1},{"label":"hasher","permalink":"/blog/tags/hasher","count":3},{"label":"vcs","permalink":"/blog/tags/vcs","count":2},{"label":"debug","permalink":"/blog/tags/debug","count":1},{"label":"git","permalink":"/blog/tags/git","count":1},{"label":"hooks","permalink":"/blog/tags/hooks","count":1},{"label":"task","permalink":"/blog/tags/task","count":1},{"label":"shim","permalink":"/blog/tags/shim","count":1},{"label":"logging","permalink":"/blog/tags/logging","count":1},{"label":"source","permalink":"/blog/tags/source","count":1},{"label":"code","permalink":"/blog/tags/code","count":1},{"label":"owners","permalink":"/blog/tags/owners","count":1},{"label":"ownership","permalink":"/blog/tags/ownership","count":1},{"label":"config","permalink":"/blog/tags/config","count":4},{"label":"errors","permalink":"/blog/tags/errors","count":2},{"label":"github","permalink":"/blog/tags/github","count":2},{"label":"rfc","permalink":"/blog/tags/rfc","count":1},{"label":"log","permalink":"/blog/tags/log","count":1},{"label":"rust","permalink":"/blog/tags/rust","count":2},{"label":"lang","permalink":"/blog/tags/lang","count":3},{"label":"tier","permalink":"/blog/tags/tier","count":1},{"label":"query","permalink":"/blog/tags/query","count":3},{"label":"tag","permalink":"/blog/tags/tag","count":1},{"label":"alias","permalink":"/blog/tags/alias","count":2},{"label":"detect","permalink":"/blog/tags/detect","count":1},{"label":"schema","permalink":"/blog/tags/schema","count":1},{"label":"toml","permalink":"/blog/tags/toml","count":1},{"label":"plugins","permalink":"/blog/tags/plugins","count":1},{"label":"tags","permalink":"/blog/tags/tags","count":2},{"label":"globals","permalink":"/blog/tags/globals","count":2},{"label":"clean","permalink":"/blog/tags/clean","count":1},{"label":"tokens","permalink":"/blog/tags/tokens","count":2},{"label":"projects","permalink":"/blog/tags/projects","count":2},{"label":"constraints","permalink":"/blog/tags/constraints","count":1},{"label":"env-vars","permalink":"/blog/tags/env-vars","count":1},{"label":"npm","permalink":"/blog/tags/npm","count":1},{"label":"go","permalink":"/blog/tags/go","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":2},{"label":"hash","permalink":"/blog/tags/hash","count":1},{"label":"deno","permalink":"/blog/tags/deno","count":1},{"label":"moonbase","permalink":"/blog/tags/moonbase","count":4},{"label":"offline","permalink":"/blog/tags/offline","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"remote-cache","permalink":"/blog/tags/remote-cache","count":3},{"label":"survey","permalink":"/blog/tags/survey","count":1},{"label":"migrate","permalink":"/blog/tags/migrate","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"runner","permalink":"/blog/tags/runner","count":4},{"label":"language","permalink":"/blog/tags/language","count":1},{"label":"cache","permalink":"/blog/tags/cache","count":1},{"label":"hydration","permalink":"/blog/tags/hydration","count":1},{"label":"generator","permalink":"/blog/tags/generator","count":4},{"label":"typescript","permalink":"/blog/tags/typescript","count":2},{"label":"monorepo","permalink":"/blog/tags/monorepo","count":1},{"label":"affected","permalink":"/blog/tags/affected","count":1},{"label":"dep-graph","permalink":"/blog/tags/dep-graph","count":1},{"label":"init","permalink":"/blog/tags/init","count":1},{"label":"node","permalink":"/blog/tags/node","count":2},{"label":"notifier","permalink":"/blog/tags/notifier","count":1},{"label":"editors","permalink":"/blog/tags/editors","count":2},{"label":"vscode","permalink":"/blog/tags/vscode","count":2}]')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.3d2c7ca4.js b/assets/js/a7023ddc.3d2c7ca4.js new file mode 100644 index 00000000000..6ed60d7cd67 --- /dev/null +++ b/assets/js/a7023ddc.3d2c7ca4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11713],{53457:l=>{l.exports=JSON.parse('[{"label":"proto","permalink":"/blog/tags/proto","count":22},{"label":"bin","permalink":"/blog/tags/bin","count":1},{"label":"shim","permalink":"/blog/tags/shim","count":2},{"label":"checksum","permalink":"/blog/tags/checksum","count":1},{"label":"action","permalink":"/blog/tags/action","count":2},{"label":"dependency","permalink":"/blog/tags/dependency","count":1},{"label":"graph","permalink":"/blog/tags/graph","count":3},{"label":"pipeline","permalink":"/blog/tags/pipeline","count":2},{"label":"railway","permalink":"/blog/tags/railway","count":1},{"label":"pin","permalink":"/blog/tags/pin","count":1},{"label":"global","permalink":"/blog/tags/global","count":2},{"label":"local","permalink":"/blog/tags/local","count":1},{"label":"outdated","permalink":"/blog/tags/outdated","count":1},{"label":"run","permalink":"/blog/tags/run","count":1},{"label":"target","permalink":"/blog/tags/target","count":2},{"label":"toolchain","permalink":"/blog/tags/toolchain","count":7},{"label":"version","permalink":"/blog/tags/version","count":1},{"label":"ci","permalink":"/blog/tags/ci","count":3},{"label":"shorthand","permalink":"/blog/tags/shorthand","count":1},{"label":"http","permalink":"/blog/tags/http","count":1},{"label":"registry","permalink":"/blog/tags/registry","count":1},{"label":"index","permalink":"/blog/tags/index","count":1},{"label":"plugin","permalink":"/blog/tags/plugin","count":6},{"label":"tool","permalink":"/blog/tags/tool","count":1},{"label":"canary","permalink":"/blog/tags/canary","count":1},{"label":"python","permalink":"/blog/tags/python","count":1},{"label":"tasks","permalink":"/blog/tags/tasks","count":6},{"label":"wasm","permalink":"/blog/tags/wasm","count":5},{"label":"inheritance","permalink":"/blog/tags/inheritance","count":2},{"label":"project-graph","permalink":"/blog/tags/project-graph","count":2},{"label":"project","permalink":"/blog/tags/project","count":3},{"label":"quality","permalink":"/blog/tags/quality","count":1},{"label":"life","permalink":"/blog/tags/life","count":1},{"label":"qol","permalink":"/blog/tags/qol","count":1},{"label":"ignore","permalink":"/blog/tags/ignore","count":1},{"label":"hasher","permalink":"/blog/tags/hasher","count":3},{"label":"vcs","permalink":"/blog/tags/vcs","count":2},{"label":"debug","permalink":"/blog/tags/debug","count":1},{"label":"git","permalink":"/blog/tags/git","count":1},{"label":"hooks","permalink":"/blog/tags/hooks","count":1},{"label":"task","permalink":"/blog/tags/task","count":1},{"label":"logging","permalink":"/blog/tags/logging","count":1},{"label":"source","permalink":"/blog/tags/source","count":1},{"label":"code","permalink":"/blog/tags/code","count":1},{"label":"owners","permalink":"/blog/tags/owners","count":1},{"label":"ownership","permalink":"/blog/tags/ownership","count":1},{"label":"config","permalink":"/blog/tags/config","count":4},{"label":"errors","permalink":"/blog/tags/errors","count":2},{"label":"github","permalink":"/blog/tags/github","count":2},{"label":"rfc","permalink":"/blog/tags/rfc","count":1},{"label":"log","permalink":"/blog/tags/log","count":1},{"label":"rust","permalink":"/blog/tags/rust","count":2},{"label":"lang","permalink":"/blog/tags/lang","count":3},{"label":"tier","permalink":"/blog/tags/tier","count":1},{"label":"query","permalink":"/blog/tags/query","count":3},{"label":"tag","permalink":"/blog/tags/tag","count":1},{"label":"alias","permalink":"/blog/tags/alias","count":2},{"label":"detect","permalink":"/blog/tags/detect","count":1},{"label":"schema","permalink":"/blog/tags/schema","count":1},{"label":"toml","permalink":"/blog/tags/toml","count":1},{"label":"plugins","permalink":"/blog/tags/plugins","count":1},{"label":"tags","permalink":"/blog/tags/tags","count":2},{"label":"globals","permalink":"/blog/tags/globals","count":2},{"label":"clean","permalink":"/blog/tags/clean","count":1},{"label":"tokens","permalink":"/blog/tags/tokens","count":2},{"label":"projects","permalink":"/blog/tags/projects","count":2},{"label":"constraints","permalink":"/blog/tags/constraints","count":1},{"label":"env-vars","permalink":"/blog/tags/env-vars","count":1},{"label":"npm","permalink":"/blog/tags/npm","count":1},{"label":"go","permalink":"/blog/tags/go","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":2},{"label":"hash","permalink":"/blog/tags/hash","count":1},{"label":"deno","permalink":"/blog/tags/deno","count":1},{"label":"moonbase","permalink":"/blog/tags/moonbase","count":4},{"label":"offline","permalink":"/blog/tags/offline","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"remote-cache","permalink":"/blog/tags/remote-cache","count":3},{"label":"survey","permalink":"/blog/tags/survey","count":1},{"label":"migrate","permalink":"/blog/tags/migrate","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"runner","permalink":"/blog/tags/runner","count":4},{"label":"language","permalink":"/blog/tags/language","count":1},{"label":"cache","permalink":"/blog/tags/cache","count":1},{"label":"hydration","permalink":"/blog/tags/hydration","count":1},{"label":"generator","permalink":"/blog/tags/generator","count":4},{"label":"typescript","permalink":"/blog/tags/typescript","count":2},{"label":"monorepo","permalink":"/blog/tags/monorepo","count":1},{"label":"affected","permalink":"/blog/tags/affected","count":1},{"label":"dep-graph","permalink":"/blog/tags/dep-graph","count":1},{"label":"init","permalink":"/blog/tags/init","count":1},{"label":"node","permalink":"/blog/tags/node","count":2},{"label":"notifier","permalink":"/blog/tags/notifier","count":1},{"label":"editors","permalink":"/blog/tags/editors","count":2},{"label":"vscode","permalink":"/blog/tags/vscode","count":2}]')}}]); \ No newline at end of file diff --git a/assets/js/a86b7c98.221edfea.js b/assets/js/a86b7c98.221edfea.js new file mode 100644 index 00000000000..3bca6a33d7f --- /dev/null +++ b/assets/js/a86b7c98.221edfea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30827],{17091:e=>{e.exports=JSON.parse('{"label":"schema","permalink":"/blog/tags/schema","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/a86b7c98.c77b1c37.js b/assets/js/a86b7c98.c77b1c37.js deleted file mode 100644 index d463215d000..00000000000 --- a/assets/js/a86b7c98.c77b1c37.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[827],{17091:e=>{e.exports=JSON.parse('{"label":"schema","permalink":"/blog/tags/schema","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/a88c4343.87047bd7.js b/assets/js/a88c4343.87047bd7.js new file mode 100644 index 00000000000..e4c983e0e8a --- /dev/null +++ b/assets/js/a88c4343.87047bd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68282],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:l}=e;return r.createElement(a.Z,{text:`v${l}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},70390:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const l={title:"query projects",sidebar_label:"projects"},i=void 0,s={unversionedId:"commands/query/projects",id:"commands/query/projects",title:"query projects",description:"Use the moon query projects sub-command to query information about all projects in the project",source:"@site/docs/commands/query/projects.mdx",sourceDirName:"commands/query",slug:"/commands/query/projects",permalink:"/docs/commands/query/projects",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/projects.mdx",tags:[],version:"current",frontMatter:{title:"query projects",sidebar_label:"projects"},sidebar:"docs",previous:{title:"hash-diff",permalink:"/docs/commands/query/hash-diff"},next:{title:"tasks",permalink:"/docs/commands/query/tasks"}},p={},c=[{value:"Affected projects",id:"affected-projects",level:3},{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Filters",id:"filters",level:4}],u={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query projects")," sub-command to query information about all projects in the project\ngraph. The project list can be filtered by passing a ",(0,a.kt)("a",{parentName:"p",href:"../../concepts/query-lang"},"query statement")," as\nan argument, or by using ",(0,a.kt)("a",{parentName:"p",href:"#options"},"options")," arguments."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'# Find all projects\n$ moon query projects\n\n# Find all projects with an id that matches "react"\n$ moon query projects --id react\n$ moon query projects "project~react"\n\n# Find all projects with a `lint` or `build` task\n$ moon query projects --tasks "lint|build"\n$ moon query projects "task=[lint,build]"\n')),(0,a.kt)("p",null,"By default, this will output a list of projects in the format of\n",(0,a.kt)("inlineCode",{parentName:"p"},"<id> | <source> | <type> | <language>"),", separated by new lines."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"web | apps/web | application | typescript\n")),(0,a.kt)("p",null,"The projects can also be output in JSON (",(0,a.kt)("a",{parentName:"p",href:"/api/types/interface/Project"},"which contains all data"),") by\npassing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the following structure:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"{\n projects: Project[],\n options: QueryOptions,\n}\n")),(0,a.kt)("h3",{id:"affected-projects"},"Affected projects"),(0,a.kt)("p",null,"This command can also be used to query for affected projects, based on the state of the VCS working\ntree. For advanced control, you can also pass the results of ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query touched-files")," to stdin."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# Find all affected projects\n$ moon query projects --affected\n\n# Find all affected projects using the results of another query\n$ moon query touched-files | moon query projects --affected\n")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[query]")," - An optional ",(0,a.kt)("a",{parentName:"li",href:"../../concepts/query-lang"},"query statement")," to filter projects with. When\nprovided, all ",(0,a.kt)("a",{parentName:"li",href:"#filters"},"filter options")," are ignored. ",(0,a.kt)(o.Z,{version:"1.4.0",mdxType:"VersionLabel"}))),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--affected")," - Filter projects that have been affected by touched files. This will only filter\nbased on files, and ",(0,a.kt)("em",{parentName:"li"},"does not")," include upstream or downstream dependencies."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the projects in JSON format.")),(0,a.kt)("h4",{id:"filters"},"Filters"),(0,a.kt)("p",null,"All option values are case-insensitive regex patterns."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--alias <regex>")," - Filter projects that match this alias."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--id <regex>")," - Filter projects that match this ID/name."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--language <regex>")," - Filter projects of this programming language."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--source <regex>")," - Filter projects that match this source path."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--tags <regex>")," - Filter projects that have the following tags."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--tasks <regex>")," - Filter projects that have the following tasks."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--type <regex>")," - Filter project of this type.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a88c4343.b34f49bf.js b/assets/js/a88c4343.b34f49bf.js deleted file mode 100644 index 263f45d5edc..00000000000 --- a/assets/js/a88c4343.b34f49bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8282],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:l}=e;return r.createElement(a.Z,{text:`v${l}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},70390:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const l={title:"query projects",sidebar_label:"projects"},i=void 0,s={unversionedId:"commands/query/projects",id:"commands/query/projects",title:"query projects",description:"Use the moon query projects sub-command to query information about all projects in the project",source:"@site/docs/commands/query/projects.mdx",sourceDirName:"commands/query",slug:"/commands/query/projects",permalink:"/docs/commands/query/projects",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/projects.mdx",tags:[],version:"current",frontMatter:{title:"query projects",sidebar_label:"projects"},sidebar:"docs",previous:{title:"hash-diff",permalink:"/docs/commands/query/hash-diff"},next:{title:"tasks",permalink:"/docs/commands/query/tasks"}},p={},c=[{value:"Affected projects",id:"affected-projects",level:3},{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Filters",id:"filters",level:4}],u={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query projects")," sub-command to query information about all projects in the project\ngraph. The project list can be filtered by passing a ",(0,a.kt)("a",{parentName:"p",href:"../../concepts/query-lang"},"query statement")," as\nan argument, or by using ",(0,a.kt)("a",{parentName:"p",href:"#options"},"options")," arguments."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'# Find all projects\n$ moon query projects\n\n# Find all projects with an id that matches "react"\n$ moon query projects --id react\n$ moon query projects "project~react"\n\n# Find all projects with a `lint` or `build` task\n$ moon query projects --tasks "lint|build"\n$ moon query projects "task=[lint,build]"\n')),(0,a.kt)("p",null,"By default, this will output a list of projects in the format of\n",(0,a.kt)("inlineCode",{parentName:"p"},"<id> | <source> | <type> | <language>"),", separated by new lines."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"web | apps/web | application | typescript\n")),(0,a.kt)("p",null,"The projects can also be output in JSON (",(0,a.kt)("a",{parentName:"p",href:"/api/types/interface/Project"},"which contains all data"),") by\npassing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the following structure:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"{\n projects: Project[],\n options: QueryOptions,\n}\n")),(0,a.kt)("h3",{id:"affected-projects"},"Affected projects"),(0,a.kt)("p",null,"This command can also be used to query for affected projects, based on the state of the VCS working\ntree. For advanced control, you can also pass the results of ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query touched-files")," to stdin."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# Find all affected projects\n$ moon query projects --affected\n\n# Find all affected projects using the results of another query\n$ moon query touched-files | moon query projects --affected\n")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[query]")," - An optional ",(0,a.kt)("a",{parentName:"li",href:"../../concepts/query-lang"},"query statement")," to filter projects with. When\nprovided, all ",(0,a.kt)("a",{parentName:"li",href:"#filters"},"filter options")," are ignored. ",(0,a.kt)(o.Z,{version:"1.4.0",mdxType:"VersionLabel"}))),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--affected")," - Filter projects that have been affected by touched files. This will only filter\nbased on files, and ",(0,a.kt)("em",{parentName:"li"},"does not")," include upstream or downstream dependencies."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the projects in JSON format.")),(0,a.kt)("h4",{id:"filters"},"Filters"),(0,a.kt)("p",null,"All option values are case-insensitive regex patterns."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--alias <regex>")," - Filter projects that match this alias."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--id <regex>")," - Filter projects that match this ID/name."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--language <regex>")," - Filter projects of this programming language."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--source <regex>")," - Filter projects that match this source path."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--tags <regex>")," - Filter projects that have the following tags."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--tasks <regex>")," - Filter projects that have the following tasks."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--type <regex>")," - Filter project of this type.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a91ae4c2.0660e320.js b/assets/js/a91ae4c2.0660e320.js deleted file mode 100644 index f2926a13bb4..00000000000 --- a/assets/js/a91ae4c2.0660e320.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8005],{10877:e=>{e.exports=JSON.parse('{"label":"target","permalink":"/blog/tags/target","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/a91ae4c2.1f753d81.js b/assets/js/a91ae4c2.1f753d81.js new file mode 100644 index 00000000000..66731bb90d1 --- /dev/null +++ b/assets/js/a91ae4c2.1f753d81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68005],{10877:e=>{e.exports=JSON.parse('{"label":"target","permalink":"/blog/tags/target","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/a9e1900f.9b72440e.js b/assets/js/a9e1900f.9b72440e.js deleted file mode 100644 index 68f2481e3d4..00000000000 --- a/assets/js/a9e1900f.9b72440e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6009],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=o,g=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(g,i(i({ref:t},c),{},{components:n})):r.createElement(g,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:i}=e;return r.createElement(o.Z,{text:`v${i}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),a=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?i[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),l)}},60930:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const i={title:"plugins"},l=void 0,p={unversionedId:"proto/commands/plugins",id:"proto/commands/plugins",title:"plugins",description:"The proto plugins command will list all available and configured plugins. Will load all",source:"@site/docs/proto/commands/plugins.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/plugins",permalink:"/docs/proto/commands/plugins",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/plugins.mdx",tags:[],version:"current",frontMatter:{title:"plugins"},sidebar:"proto",previous:{title:"pin",permalink:"/docs/proto/commands/pin"},next:{title:"remove-plugin",permalink:"/docs/proto/commands/remove-plugin"}},s={},c=[{value:"Options",id:"options",level:3}],u={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.14.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto plugins")," command will list all available and configured plugins. Will load all\n",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," traversing upwards, and the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"$ proto plugins\n\nbun - Bun v1.2\n Source: https://github.com/moonrepo/bun-plugin/releases/latest/download/bun_plugin.wasm\n\ndeno - Deno v2.0\n GitHub: moonrepo/deno-plugin\n Tag: latest\n\ngo - Go v0.1\n GitHub: moonrepo/go-plugin\n Tag: latest\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--json")," - Print the list in JSON format.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a9e1900f.e707fb4b.js b/assets/js/a9e1900f.e707fb4b.js new file mode 100644 index 00000000000..31e3b64ac0d --- /dev/null +++ b/assets/js/a9e1900f.e707fb4b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26009],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(n),d=o,g=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(g,i(i({ref:t},c),{},{components:n})):r.createElement(g,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(27378),o=n(9619);function a(e){let{header:t,inline:n,updated:a,version:i}=e;return r.createElement(o.Z,{text:`v${i}`,variant:a?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(40624),a=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:p}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?i[p]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),l)}},60930:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var r=n(25773),o=(n(27378),n(35318)),a=n(79022);const i={title:"plugins"},l=void 0,p={unversionedId:"proto/commands/plugins",id:"proto/commands/plugins",title:"plugins",description:"The proto plugins command will list all available and configured plugins. Will load all",source:"@site/docs/proto/commands/plugins.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/plugins",permalink:"/docs/proto/commands/plugins",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/plugins.mdx",tags:[],version:"current",frontMatter:{title:"plugins"},sidebar:"proto",previous:{title:"pin",permalink:"/docs/proto/commands/pin"},next:{title:"remove-plugin",permalink:"/docs/proto/commands/remove-plugin"}},s={},c=[{value:"Options",id:"options",level:3}],u={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"0.14.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto plugins")," command will list all available and configured plugins. Will load all\n",(0,o.kt)("inlineCode",{parentName:"p"},".prototools")," traversing upwards, and the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml")," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"$ proto plugins\n\nbun - Bun v1.2\n Source: https://github.com/moonrepo/bun-plugin/releases/latest/download/bun_plugin.wasm\n\ndeno - Deno v2.0\n GitHub: moonrepo/deno-plugin\n Tag: latest\n\ngo - Go v0.1\n GitHub: moonrepo/go-plugin\n Tag: latest\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--json")," - Print the list in JSON format.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/aa431e4a.23b241ea.js b/assets/js/aa431e4a.23b241ea.js new file mode 100644 index 00000000000..edea48a095a --- /dev/null +++ b/assets/js/aa431e4a.23b241ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23512],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,g=m["".concat(p,".").concat(d)]||m[d]||c[d]||a;return n?r.createElement(g,i(i({ref:t},s),{},{components:n})):r.createElement(g,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(83469),a=n(31792);function i(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(a.Z,{icon:o.dT$}))}},12690:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>s});var r=n(25773),o=(n(27378),n(35318)),a=n(32189);const i={title:"Nuxt example",sidebar_label:"Nuxt"},l=void 0,p={unversionedId:"guides/examples/nuxt",id:"guides/examples/nuxt",title:"Nuxt example",description:"In this guide, you'll learn how to integrate Nuxt v3, a Vue framework,",source:"@site/docs/guides/examples/nuxt.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/nuxt",permalink:"/docs/guides/examples/nuxt",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/nuxt.mdx",tags:[],version:"current",frontMatter:{title:"Nuxt example",sidebar_label:"Nuxt"},sidebar:"guides",previous:{title:"Next",permalink:"/docs/guides/examples/next"},next:{title:"Packemon",permalink:"/docs/guides/examples/packemon"}},u={},s=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Testing",id:"testing",level:2}],c={toc:s};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/nuxt-app",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,o.kt)("a",{parentName:"p",href:"https://nuxt.com"},"Nuxt v3"),", a ",(0,o.kt)("a",{parentName:"p",href:"./vue"},"Vue")," framework,\ninto moon."),(0,o.kt)("p",null,"Begin by creating a new Nuxt project at a specified folder path (this should not be created in the\nworkspace root, unless a polyrepo)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npx nuxi init <project>\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"View the ",(0,o.kt)("a",{parentName:"p",href:"https://nuxt.com/docs/getting-started/installation"},"official Nuxt docs")," for a more\nin-depth guide to getting started!")),(0,o.kt)("h2",{id:"setup"},"Setup"),(0,o.kt)("p",null,"Since Nuxt is per-project, the associated moon tasks should be defined in each project's\n",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"fileGroups:\n nuxt:\n - 'assets/**/*'\n - 'components/**/*'\n - 'composables/**/*'\n - 'content/**/*'\n - 'layouts/**/*'\n - 'middleware/**/*'\n - 'pages/**/*'\n - 'plugins/**/*'\n - 'public/**/*'\n - 'server/**/*'\n - 'utils/**/*'\n - '.nuxtignore'\n - 'app.config.*'\n - 'app.vue'\n - 'nuxt.config.*'\n\ntasks:\n nuxt:\n command: 'nuxt'\n local: true\n\n # Production build\n build:\n command: 'nuxt build'\n inputs:\n - '@group(nuxt)'\n outputs:\n - '.nuxt'\n - '.output'\n\n # Development server\n dev:\n command: 'nuxt dev'\n local: true\n\n # Preview production build locally\n preview:\n command: 'nuxt preview'\n deps:\n - '~:build'\n local: true\n")),(0,o.kt)("p",null,"Be sure to keep the ",(0,o.kt)("inlineCode",{parentName:"p"},"postinstall")," script in your project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/package.json"',title:'"<project>/package.json"'},'{\n // ...\n "scripts": {\n "postinstall": "nuxt prepare"\n }\n}\n')),(0,o.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,o.kt)("p",null,"Refer to our ",(0,o.kt)("a",{parentName:"p",href:"./vue#eslint-integration"},"Vue documentation")," for more information on linting."),(0,o.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,o.kt)("p",null,"Nuxt requires ",(0,o.kt)("inlineCode",{parentName:"p"},"vue-tsc")," for typechecking, so refer to our\n",(0,o.kt)("a",{parentName:"p",href:"./vue#typescript-integration"},"Vue documentation")," for more information."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"root-level"},"Root-level"),(0,o.kt)("p",null,"We suggest ",(0,o.kt)("em",{parentName:"p"},"against")," root-level configuration, as Nuxt should be installed per-project, and the\n",(0,o.kt)("inlineCode",{parentName:"p"},"nuxt")," command expects the configuration to live relative to the project root."),(0,o.kt)("h3",{id:"project-level"},"Project-level"),(0,o.kt)("p",null,"When creating a new Nuxt project, a\n",(0,o.kt)("a",{parentName:"p",href:"https://v3.nuxtjs.org/api/configuration/nuxt-config"},(0,o.kt)("inlineCode",{parentName:"a"},"nuxt.config.ts"))," is created, and ",(0,o.kt)("em",{parentName:"p"},"must")," exist\nin the project root. This allows each project to configure Next.js for their needs."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/nuxt.config.ts"',title:'"<project>/nuxt.config.ts"'},"export default defineNuxtConfig({});\n")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"Nuxt supports testing through ",(0,o.kt)("a",{parentName:"p",href:"https://jestjs.io/"},"Jest")," or ",(0,o.kt)("a",{parentName:"p",href:"https://vitest.dev/"},"Vitest"),". Refer to\nour ",(0,o.kt)("a",{parentName:"p",href:"./jest"},"Jest documentation")," or ",(0,o.kt)("a",{parentName:"p",href:"./vite"},"Vitest documentation")," for more information on testing."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/aa431e4a.ca5ac251.js b/assets/js/aa431e4a.ca5ac251.js deleted file mode 100644 index 3e0f845ed3a..00000000000 --- a/assets/js/aa431e4a.ca5ac251.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3512],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,g=m["".concat(p,".").concat(d)]||m[d]||c[d]||a;return n?r.createElement(g,i(i({ref:t},s),{},{components:n})):r.createElement(g,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(83469),a=n(31792);function i(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(a.Z,{icon:o.dT$}))}},12690:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>s});var r=n(25773),o=(n(27378),n(35318)),a=n(32189);const i={title:"Nuxt example",sidebar_label:"Nuxt"},l=void 0,p={unversionedId:"guides/examples/nuxt",id:"guides/examples/nuxt",title:"Nuxt example",description:"In this guide, you'll learn how to integrate Nuxt v3, a Vue framework,",source:"@site/docs/guides/examples/nuxt.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/nuxt",permalink:"/docs/guides/examples/nuxt",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/nuxt.mdx",tags:[],version:"current",frontMatter:{title:"Nuxt example",sidebar_label:"Nuxt"},sidebar:"guides",previous:{title:"Next",permalink:"/docs/guides/examples/next"},next:{title:"Packemon",permalink:"/docs/guides/examples/packemon"}},u={},s=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Testing",id:"testing",level:2}],c={toc:s};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/nuxt-app",mdxType:"HeadingApiLink"}),(0,o.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,o.kt)("a",{parentName:"p",href:"https://nuxt.com"},"Nuxt v3"),", a ",(0,o.kt)("a",{parentName:"p",href:"./vue"},"Vue")," framework,\ninto moon."),(0,o.kt)("p",null,"Begin by creating a new Nuxt project at a specified folder path (this should not be created in the\nworkspace root, unless a polyrepo)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npx nuxi init <project>\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"View the ",(0,o.kt)("a",{parentName:"p",href:"https://nuxt.com/docs/getting-started/installation"},"official Nuxt docs")," for a more\nin-depth guide to getting started!")),(0,o.kt)("h2",{id:"setup"},"Setup"),(0,o.kt)("p",null,"Since Nuxt is per-project, the associated moon tasks should be defined in each project's\n",(0,o.kt)("a",{parentName:"p",href:"../../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"fileGroups:\n nuxt:\n - 'assets/**/*'\n - 'components/**/*'\n - 'composables/**/*'\n - 'content/**/*'\n - 'layouts/**/*'\n - 'middleware/**/*'\n - 'pages/**/*'\n - 'plugins/**/*'\n - 'public/**/*'\n - 'server/**/*'\n - 'utils/**/*'\n - '.nuxtignore'\n - 'app.config.*'\n - 'app.vue'\n - 'nuxt.config.*'\n\ntasks:\n nuxt:\n command: 'nuxt'\n local: true\n\n # Production build\n build:\n command: 'nuxt build'\n inputs:\n - '@group(nuxt)'\n outputs:\n - '.nuxt'\n - '.output'\n\n # Development server\n dev:\n command: 'nuxt dev'\n local: true\n\n # Preview production build locally\n preview:\n command: 'nuxt preview'\n deps:\n - '~:build'\n local: true\n")),(0,o.kt)("p",null,"Be sure to keep the ",(0,o.kt)("inlineCode",{parentName:"p"},"postinstall")," script in your project's ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/package.json"',title:'"<project>/package.json"'},'{\n // ...\n "scripts": {\n "postinstall": "nuxt prepare"\n }\n}\n')),(0,o.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,o.kt)("p",null,"Refer to our ",(0,o.kt)("a",{parentName:"p",href:"./vue#eslint-integration"},"Vue documentation")," for more information on linting."),(0,o.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,o.kt)("p",null,"Nuxt requires ",(0,o.kt)("inlineCode",{parentName:"p"},"vue-tsc")," for typechecking, so refer to our\n",(0,o.kt)("a",{parentName:"p",href:"./vue#typescript-integration"},"Vue documentation")," for more information."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"root-level"},"Root-level"),(0,o.kt)("p",null,"We suggest ",(0,o.kt)("em",{parentName:"p"},"against")," root-level configuration, as Nuxt should be installed per-project, and the\n",(0,o.kt)("inlineCode",{parentName:"p"},"nuxt")," command expects the configuration to live relative to the project root."),(0,o.kt)("h3",{id:"project-level"},"Project-level"),(0,o.kt)("p",null,"When creating a new Nuxt project, a\n",(0,o.kt)("a",{parentName:"p",href:"https://v3.nuxtjs.org/api/configuration/nuxt-config"},(0,o.kt)("inlineCode",{parentName:"a"},"nuxt.config.ts"))," is created, and ",(0,o.kt)("em",{parentName:"p"},"must")," exist\nin the project root. This allows each project to configure Next.js for their needs."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/nuxt.config.ts"',title:'"<project>/nuxt.config.ts"'},"export default defineNuxtConfig({});\n")),(0,o.kt)("h2",{id:"testing"},"Testing"),(0,o.kt)("p",null,"Nuxt supports testing through ",(0,o.kt)("a",{parentName:"p",href:"https://jestjs.io/"},"Jest")," or ",(0,o.kt)("a",{parentName:"p",href:"https://vitest.dev/"},"Vitest"),". Refer to\nour ",(0,o.kt)("a",{parentName:"p",href:"./jest"},"Jest documentation")," or ",(0,o.kt)("a",{parentName:"p",href:"./vite"},"Vitest documentation")," for more information on testing."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/aacc3e35.1e5d6269.js b/assets/js/aacc3e35.1e5d6269.js deleted file mode 100644 index 5bb30373033..00000000000 --- a/assets/js/aacc3e35.1e5d6269.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2702],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>b});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),p=s(r),b=a,d=p["".concat(i,".").concat(b)]||p[b]||m[b]||o;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=p;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u.mdxType="string"==typeof e?e:a,l[1]=u;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),u=r(35595),i=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:r,selectedValue:u,selectValue:i,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),b=e=>{const t=e.currentTarget,r=m.indexOf(t),n=s[r].value;n!==u&&(p(t),i(n))},d=e=>{let t=null;switch(e.key){case"Enter":b(e);break;case"ArrowRight":{const r=m.indexOf(e.currentTarget)+1;t=m[r]??m[0];break}case"ArrowLeft":{const r=m.indexOf(e.currentTarget)-1;t=m[r]??m[m.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>m.push(e),onKeyDown:d,onClick:b},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":u===t})}),r??t)})))}function p(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function b(e){const t=(0,u.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(m,(0,n.Z)({},e,t)),a.createElement(p,(0,n.Z)({},e,t)))}function d(e){const t=(0,i.Z)();return a.createElement(b,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>p});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),u=r(71819);function i(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??i(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(u),(0,n.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(l.location.search);t.set(u,e),l.replace({...l.location,search:t.toString()})}),[u,l])]}function p(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[p,b]=m({queryString:r,groupId:a}),[d,f]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=p??d;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),b(e),f(e)}),[b,f,o]),tabValues:o}}},42479:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>u,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798),r(76911);const o={slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},l=void 0,u={permalink:"/blog/v0.24",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx",source:"@site/blog/2023-02-13_v0.24.mdx",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",description:"With this release, we've polished our CLI experience and improved task interoperability.",date:"2023-02-13T00:00:00.000Z",formattedDate:"February 13, 2023",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"platform",permalink:"/blog/tags/platform"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"}],readingTime:4.28,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"},{name:"James Pozdena",title:"Founder, developer",url:"https://github.com/jpoz",imageURL:"/img/authors/james.jpg",key:"jpoz"}],frontMatter:{slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},prevItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"},nextItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"}},i={image:r(8304).Z,authorsImageUrls:[void 0,void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've polished our CLI experience and improved task interoperability."))}m.isMDXComponent=!0},8304:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.24-0e225eaeb8b3c60cc26907770c589000.png"}}]); \ No newline at end of file diff --git a/assets/js/aacc3e35.38985873.js b/assets/js/aacc3e35.38985873.js new file mode 100644 index 00000000000..855a74fef69 --- /dev/null +++ b/assets/js/aacc3e35.38985873.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92702],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>b});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),p=s(r),b=a,d=p["".concat(i,".").concat(b)]||p[b]||m[b]||o;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=p;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u.mdxType="string"==typeof e?e:a,l[1]=u;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),u=r(35595),i=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:r,selectedValue:u,selectValue:i,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),b=e=>{const t=e.currentTarget,r=m.indexOf(t),n=s[r].value;n!==u&&(p(t),i(n))},d=e=>{let t=null;switch(e.key){case"Enter":b(e);break;case"ArrowRight":{const r=m.indexOf(e.currentTarget)+1;t=m[r]??m[0];break}case"ArrowLeft":{const r=m.indexOf(e.currentTarget)-1;t=m[r]??m[m.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>m.push(e),onKeyDown:d,onClick:b},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":u===t})}),r??t)})))}function p(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function b(e){const t=(0,u.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(m,(0,n.Z)({},e,t)),a.createElement(p,(0,n.Z)({},e,t)))}function d(e){const t=(0,i.Z)();return a.createElement(b,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>p});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),u=r(71819);function i(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??i(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(u),(0,n.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(l.location.search);t.set(u,e),l.replace({...l.location,search:t.toString()})}),[u,l])]}function p(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[p,b]=m({queryString:r,groupId:a}),[d,f]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=p??d;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),b(e),f(e)}),[b,f,o]),tabValues:o}}},42479:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>u,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798),r(76911);const o={slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},l=void 0,u={permalink:"/blog/v0.24",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx",source:"@site/blog/2023-02-13_v0.24.mdx",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",description:"With this release, we've polished our CLI experience and improved task interoperability.",date:"2023-02-13T00:00:00.000Z",formattedDate:"February 13, 2023",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"platform",permalink:"/blog/tags/platform"},{label:"moonbase",permalink:"/blog/tags/moonbase"},{label:"remote-cache",permalink:"/blog/tags/remote-cache"}],readingTime:4.28,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"},{name:"James Pozdena",title:"Founder, developer",url:"https://github.com/jpoz",imageURL:"/img/authors/james.jpg",key:"jpoz"}],frontMatter:{slug:"v0.24",title:"moon v0.24 - Remote caching, interactive tasks, query improvements, and more",authors:["milesj","jpoz"],tags:["project","platform","moonbase","remote-cache"],image:"./img/v0.24.png"},prevItem:{title:"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more",permalink:"/blog/v0.25"},nextItem:{title:"Remote caching is now publicly available through moonbase",permalink:"/blog/moonbase"}},i={image:r(8304).Z,authorsImageUrls:[void 0,void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've polished our CLI experience and improved task interoperability."))}m.isMDXComponent=!0},8304:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.24-0e225eaeb8b3c60cc26907770c589000.png"}}]); \ No newline at end of file diff --git a/assets/js/ac1be023.2175f94c.js b/assets/js/ac1be023.2175f94c.js new file mode 100644 index 00000000000..e5897d00bc3 --- /dev/null +++ b/assets/js/ac1be023.2175f94c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83075],{51491:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hydration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ac1be023.d3efe7ac.js b/assets/js/ac1be023.d3efe7ac.js deleted file mode 100644 index e17908e127b..00000000000 --- a/assets/js/ac1be023.d3efe7ac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3075],{51491:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hydration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ad536080.7fe83a3c.js b/assets/js/ad536080.7fe83a3c.js new file mode 100644 index 00000000000..ab79e619c73 --- /dev/null +++ b/assets/js/ad536080.7fe83a3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65077],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||r;return n?a.createElement(f,i(i({ref:t},c),{},{components:n})):a.createElement(f,i({ref:t},c))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},27915:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(83469),r=n(9619);function i(e){let{text:t}=e;return a.createElement(r.Z,{text:t,icon:o.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},87129:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(40624),r=n(81884),i=n(30658);function l(e){let{cols:t=3}=e;return a.createElement("div",{className:(0,o.Z)("grid gap-4 px-4",6===t?"grid-cols-6":"grid-cols-3")},a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#bun"},a.createElement("img",{src:"/img/tools/bun.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#deno"},a.createElement("img",{src:"/img/tools/deno.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#go"},a.createElement("img",{src:"/img/tools/go.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#node"},a.createElement("img",{src:"/img/tools/node.svg",width:"100%",className:"inline-block"})),a.createElement(i.ZP,{className:"m-0",variant:"muted"},"+ npm, pnpm, yarn")),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#python"},a.createElement("img",{src:"/img/tools/python.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#rust"},a.createElement("img",{src:"/img/tools/rust.svg",width:"100%",className:"inline-block"}))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(40624),r=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(r.Z,{icon:n,className:"mr-1"}),l)}},16621:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>m});var a=n(25773),o=(n(27378),n(35318)),r=n(27915),i=n(87129);const l={title:"What is proto?"},s=void 0,p={unversionedId:"proto/index",id:"proto/index",title:"What is proto?",description:"proto is a pluggable version manager, a unified toolchain.",source:"@site/docs/proto/index.mdx",sourceDirName:"proto",slug:"/proto/",permalink:"/docs/proto/",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/index.mdx",tags:[],version:"current",frontMatter:{title:"What is proto?"},sidebar:"proto",next:{title:"Install proto",permalink:"/docs/proto/install"}},c={},m=[{value:"Why proto?",id:"why-proto",level:2},{value:"Features",id:"features",level:3},{value:"How does it work?",id:"how-does-it-work",level:2},{value:"Shims",id:"shims",level:3},{value:"Binaries",id:"binaries",level:3},{value:"Supported tools",id:"supported-tools",level:2},{value:"Supported targets",id:"supported-targets",level:2},{value:"Roadmap",id:"roadmap",level:2}],d={toc:m};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(r.Z,{text:"3 min",mdxType:"HeaderLabel"}),(0,o.kt)("p",null,"proto is a pluggable version manager, a unified toolchain."),(0,o.kt)("p",null,"If you're unfamiliar with the concept of a toolchain, a toolchain is a collection of tools that are\ndownloaded, installed, and managed by version through a single interface. In the context of proto's\ntoolchain, a tool is either a programming language, a dependency/package manager for a language, or\na custom implementation provided by a plugin. It's the next step in the version manager evolution."),(0,o.kt)("h2",{id:"why-proto"},"Why proto?"),(0,o.kt)("p",null,"proto was designed to be a modern and holistic version manager for all of your favorite programming\nlanguages. We believe a single tool that works the same across every language is better than\nmultiple ad-hoc tools. While we only support a handful of languages today, we aim to support many\nmore in the future!"),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"proto powers ",(0,o.kt)("a",{parentName:"p",href:"/moon"},"moon"),"'s toolchain, enabling a single source of truth for both tools!")),(0,o.kt)("h3",{id:"features"},"Features"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Lightspeed! With Rust and WASM, we can guarantee exceptional performance."),(0,o.kt)("li",{parentName:"ul"},"Multi-language. A single CLI for managing versions for all of your languages."),(0,o.kt)("li",{parentName:"ul"},"Cross-platform, for a consistent experience across machines and teams."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./proto/detection"},"Contextual version detection"),", ensuring the correct version of a tool is\nalways used."),(0,o.kt)("li",{parentName:"ul"},"Checksum verification, ensuring a tool came from a trusted source."),(0,o.kt)("li",{parentName:"ul"},"Detects and infers from a language's ecosystem for maximum compatibility."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./proto/plugins"},"Pluggable architecture"),", allowing for custom tooling.")),(0,o.kt)("h2",{id:"how-does-it-work"},"How does it work?"),(0,o.kt)("p",null,"The toolchain is a ",(0,o.kt)("inlineCode",{parentName:"p"},".proto")," directory within the current user's home directory, e.g., ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto"),"."),(0,o.kt)("p",null,"The first step in a tool's life-cycle is being downloaded to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/temp"),". Downloads are\ntypically an archive that can be unpacked into a target directory. Once downloaded, we verify the\ndownloaded file by running a checksum. If this check fails for ",(0,o.kt)("em",{parentName:"p"},"any reason"),", the tool is unusable,\nand the process is aborted."),(0,o.kt)("p",null,"After a successful verification, the last step in the tool's life-cycle can begin, installation.\nDepending on the type of download, the installation process may differ. For archives, we unpack the\ntool to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<name>/<version>"),". In the future, we'll support building from source."),(0,o.kt)("p",null,"From here, we make these tools globally available by prepending ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/shims")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin"),"\nto ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," (typically as part of your shell profile). Continue reading for more about these folders."),(0,o.kt)("h3",{id:"shims"},"Shims"),(0,o.kt)("p",null,"proto is powered the by industry standard concept of shims. For each tool installed in proto, a shim\nfile will exist at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/shims/<tool>"),". Shims ",(0,o.kt)("em",{parentName:"p"},"are not")," symlinks to the tool's binary, but are\nthin wrappers around ",(0,o.kt)("a",{parentName:"p",href:"./proto/commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"proto run")),", enabling\n",(0,o.kt)("a",{parentName:"p",href:"./proto/detection"},"automatic version detection")," on every invocation!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you'd prefer to ",(0,o.kt)("em",{parentName:"p"},"not use")," shims, remove the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/shims")," directory from ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," in your shell\nprofile.")),(0,o.kt)("h3",{id:"binaries"},"Binaries"),(0,o.kt)("p",null,"Alternatively, we also support a non-shim based approach, which creates symlinks to a tool's primary\nexecutable. For each tool installed in proto, a symlink will exist at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin/<tool>"),"."),(0,o.kt)("p",null,"The version of a tool that's symlinked ",(0,o.kt)("em",{parentName:"p"},"is not")," dynamic, and is manually created by pinning the\nchosen version with ",(0,o.kt)("a",{parentName:"p",href:"./proto/commands/install"},(0,o.kt)("inlineCode",{parentName:"a"},"proto install --pin")),". This also happens\nautomatically the first time a tool is installed."),(0,o.kt)("h2",{id:"supported-tools"},"Supported tools"),(0,o.kt)("p",null,"The following tools are ",(0,o.kt)("a",{parentName:"p",href:"./proto/tools"},"officially supported")," in proto via moonrepo. Additional\ntools can be supported through ",(0,o.kt)("a",{parentName:"p",href:"./proto/plugins"},"third-party plugins"),"."),(0,o.kt)(i.Z,{cols:6,mdxType:"ToolsGrid"}),(0,o.kt)("h2",{id:"supported-targets"},"Supported targets"),(0,o.kt)("p",null,"Because proto is written in Rust, we only support targets that are explicitly compiled for, which\nare currently:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"left"},"Operating system"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Architecture"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Target"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"macOS 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Intel"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"x86_64-apple-darwin"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"macOS 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"ARM"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"aarch64-apple-darwin"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Linux 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Intel GNU"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"x86_64-unknown-linux-gnu"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Windows 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Intel"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"x86_64-pc-windows-msvc"))))),(0,o.kt)("h2",{id:"roadmap"},"Roadmap"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Linux ARM/musl support."),(0,o.kt)("li",{parentName:"ul"},"Build from source for existing languages."),(0,o.kt)("li",{parentName:"ul"},"New languages.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ad536080.ca5d2959.js b/assets/js/ad536080.ca5d2959.js deleted file mode 100644 index d13e38f89b2..00000000000 --- a/assets/js/ad536080.ca5d2959.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5077],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,g=d["".concat(s,".").concat(u)]||d[u]||m[u]||r;return n?a.createElement(g,l(l({ref:t},c),{},{components:n})):a.createElement(g,l({ref:t},c))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,l=new Array(r);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<r;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),o=n(83469),r=n(9619);function l(e){let{text:t}=e;return a.createElement(r.Z,{text:t,icon:o.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},87129:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(40624),r=n(81884),l=n(30658);function i(e){let{cols:t=3}=e;return a.createElement("div",{className:(0,o.Z)("grid gap-4 px-4",6===t?"grid-cols-6":"grid-cols-3")},a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#bun"},a.createElement("img",{src:"/img/tools/bun.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#deno"},a.createElement("img",{src:"/img/tools/deno.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#go"},a.createElement("img",{src:"/img/tools/go.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#node"},a.createElement("img",{src:"/img/tools/node.svg",width:"100%",className:"inline-block"})),a.createElement(l.ZP,{className:"m-0",variant:"muted"},"+ npm, pnpm, yarn")),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#python"},a.createElement("img",{src:"/img/tools/python.svg",width:"100%",className:"inline-block"}))),a.createElement("div",{className:"text-center"},a.createElement(r.default,{href:"/docs/proto/tools#rust"},a.createElement("img",{src:"/img/tools/rust.svg",width:"100%",className:"inline-block"}))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),o=n(40624),r=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return a.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(r.Z,{icon:n,className:"mr-1"}),i)}},16621:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>m});var a=n(25773),o=(n(27378),n(35318)),r=n(27915),l=n(87129);const i={title:"What is proto?"},s=void 0,p={unversionedId:"proto/index",id:"proto/index",title:"What is proto?",description:"proto is a pluggable toolchain manager.",source:"@site/docs/proto/index.mdx",sourceDirName:"proto",slug:"/proto/",permalink:"/docs/proto/",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/index.mdx",tags:[],version:"current",frontMatter:{title:"What is proto?"},sidebar:"proto",next:{title:"Install proto",permalink:"/docs/proto/install"}},c={},m=[{value:"Why proto?",id:"why-proto",level:2},{value:"Features",id:"features",level:3},{value:"How does it work?",id:"how-does-it-work",level:2},{value:"Shims",id:"shims",level:3},{value:"Supported tools",id:"supported-tools",level:2},{value:"Supported targets",id:"supported-targets",level:2},{value:"Roadmap",id:"roadmap",level:2}],d={toc:m};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(r.Z,{text:"3 min",mdxType:"HeaderLabel"}),(0,o.kt)("p",null,"proto is a pluggable toolchain manager."),(0,o.kt)("p",null,"If you're unfamiliar with the concept of a toolchain, a toolchain is a collection of tools that are\ndownloaded, installed, and managed by version through a single interface. In the context of proto's\ntoolchain, a tool is either a programming language, or a dependency/package manager for a language,\nor a custom implementation provided by a plugin. It's the next step in the version manager\nevolution."),(0,o.kt)("h2",{id:"why-proto"},"Why proto?"),(0,o.kt)("p",null,"proto was designed to be a modern and holistic version manager for all of your favorite programming\nlanguages. We believe a single tool that works the same across every language is better than\nmultiple ad-hoc tools. While we only support a handful of languages today, we aim to support many\nmore in the future!"),(0,o.kt)("admonition",{type:"success"},(0,o.kt)("p",{parentName:"admonition"},"proto powers ",(0,o.kt)("a",{parentName:"p",href:"/moon"},"moon"),"'s toolchain, enabling a single source of truth for both tools!")),(0,o.kt)("h3",{id:"features"},"Features"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Lightspeed! With Rust and WASM, we can guarantee exceptional performance."),(0,o.kt)("li",{parentName:"ul"},"Multi-language. A single CLI for managing versions for all of your languages."),(0,o.kt)("li",{parentName:"ul"},"Cross-platform, for a consistent experience across machines and teams."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./proto/detection"},"Contextual version detection"),", ensuring the correct version of a tool is\nalways used."),(0,o.kt)("li",{parentName:"ul"},"Checksum verification, ensuring a tool came from a trusted source."),(0,o.kt)("li",{parentName:"ul"},"Detects and infers from a language's ecosystem for maximum compatibility."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./proto/plugins"},"Pluggable architecture"),", allowing for custom tooling.")),(0,o.kt)("h2",{id:"how-does-it-work"},"How does it work?"),(0,o.kt)("p",null,"The toolchain is a ",(0,o.kt)("inlineCode",{parentName:"p"},".proto")," directory within the current user's home directory, e.g., ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto"),"."),(0,o.kt)("p",null,"The first step in a tool's life-cycle is being downloaded to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/temp"),". Downloads are\ntypically an archive that can be unpacked into a target directory. Once downloaded, we verify the\ndownloaded file by running a checksum. If this check fails for ",(0,o.kt)("em",{parentName:"p"},"any reason"),", the tool is unusable,\nand the process is aborted."),(0,o.kt)("p",null,"After a successful verification, the last step in the tool's life-cycle can begin, installation.\nDepending on the type of download, the installation process may differ. For archives, we unpack the\ntool to ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<name>/<version>"),". In the future, we'll support building from source."),(0,o.kt)("p",null,"From here, we make these tools globally available by prepending ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," to ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," (typically\nas part of your shell profile). Continue reading for more about this bin folder."),(0,o.kt)("h3",{id:"shims"},"Shims"),(0,o.kt)("p",null,"proto is powered the by industry standard concept of shims. For each tool installed in proto, a shim\nfile will exist at ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin/<tool>"),". Shims ",(0,o.kt)("em",{parentName:"p"},"are not")," symlinks to the tool's binary, but are\nthin wrappers around ",(0,o.kt)("a",{parentName:"p",href:"./proto/commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"proto run")),", enabling\n",(0,o.kt)("a",{parentName:"p",href:"./proto/detection"},"automatic version detection")," on every invocation!"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," directory ",(0,o.kt)("em",{parentName:"p"},"should")," be in your ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," if proto was setup correctly. If not, run\nthe ",(0,o.kt)("a",{parentName:"p",href:"./proto/commands/setup"},(0,o.kt)("inlineCode",{parentName:"a"},"proto setup"))," command, or add the path manually.")),(0,o.kt)("h2",{id:"supported-tools"},"Supported tools"),(0,o.kt)("p",null,"The following tools are ",(0,o.kt)("a",{parentName:"p",href:"./proto/tools"},"officially supported")," in proto via moonrepo. Additional\ntools can be supported through ",(0,o.kt)("a",{parentName:"p",href:"./proto/plugins"},"third-party plugins"),"."),(0,o.kt)(l.Z,{cols:6,mdxType:"ToolsGrid"}),(0,o.kt)("h2",{id:"supported-targets"},"Supported targets"),(0,o.kt)("p",null,"Because proto is written in Rust, we only support targets that are explicitly compiled for, which\nare currently:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"left"},"Operating system"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Architecture"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Target"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"macOS 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Intel"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"x86_64-apple-darwin"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"macOS 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"ARM"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"aarch64-apple-darwin"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Linux 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Intel GNU"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"x86_64-unknown-linux-gnu"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Windows 64-bit"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Intel"),(0,o.kt)("td",{parentName:"tr",align:"left"},(0,o.kt)("inlineCode",{parentName:"td"},"x86_64-pc-windows-msvc"))))),(0,o.kt)("h2",{id:"roadmap"},"Roadmap"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Linux ARM/musl support."),(0,o.kt)("li",{parentName:"ul"},"Build from source for existing languages."),(0,o.kt)("li",{parentName:"ul"},"New languages.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/affd832d.23f5c49b.js b/assets/js/affd832d.23f5c49b.js new file mode 100644 index 00000000000..0784d61d46d --- /dev/null +++ b/assets/js/affd832d.23f5c49b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29453],{72067:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ownership","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/affd832d.5decf110.js b/assets/js/affd832d.5decf110.js deleted file mode 100644 index 475d5ba184a..00000000000 --- a/assets/js/affd832d.5decf110.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9453],{72067:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/ownership","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b03b3eac.a427b525.js b/assets/js/b03b3eac.a427b525.js new file mode 100644 index 00000000000..662f8f4ab56 --- /dev/null +++ b/assets/js/b03b3eac.a427b525.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35334],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),h=r,u=d["".concat(l,".").concat(h)]||d[h]||m[h]||a;return n?o.createElement(u,i(i({ref:t},c),{},{components:n})):o.createElement(u,i({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},86963:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={slug:"v0.16",title:"moon v0.16 - Per-project tool versions and TypeScript improvements",authors:["milesj"],tags:["toolchain","runner","generator","typescript","node"],image:"./img/v0.16.png"},i=void 0,s={permalink:"/blog/v0.16",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-06_v0.16.mdx",source:"@site/blog/2022-10-06_v0.16.mdx",title:"moon v0.16 - Per-project tool versions and TypeScript improvements",description:"With this release, we've landed a long standing request of supporting project-level overrides for",date:"2022-10-06T00:00:00.000Z",formattedDate:"October 6, 2022",tags:[{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"runner",permalink:"/blog/tags/runner"},{label:"generator",permalink:"/blog/tags/generator"},{label:"typescript",permalink:"/blog/tags/typescript"},{label:"node",permalink:"/blog/tags/node"}],readingTime:3.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.16",title:"moon v0.16 - Per-project tool versions and TypeScript improvements",authors:["milesj"],tags:["toolchain","runner","generator","typescript","node"],image:"./img/v0.16.png"},prevItem:{title:"New VS Code extension!",permalink:"/blog/vscode-extension"},nextItem:{title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",permalink:"/blog/v0.15"}},l={image:n(99050).Z,authorsImageUrls:[void 0]},p=[{value:"Per-project tool version overrides",id:"per-project-tool-version-overrides",level:2},{value:"Per-project dependency installs",id:"per-project-dependency-installs",level:2},{value:"TypeScript improvements",id:"typescript-improvements",level:2},{value:"Routing <code>outDir</code> to the cache",id:"routing-outdir-to-the-cache",level:3},{value:"Mapping project references as <code>paths</code>",id:"mapping-project-references-as-paths",level:3},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've landed a long standing request of supporting project-level overrides for\ntools configured in the workspace, as well as some quality of life improvements for TypeScript."),(0,r.kt)("h2",{id:"per-project-tool-version-overrides"},"Per-project tool version overrides"),(0,r.kt)("p",null,"Since moons inception, our ",(0,r.kt)("a",{parentName:"p",href:"../docs/concepts/toolchain"},"toolchain")," has only supported a single\nversion of a tool (Node.js), as we wanted to embrace the single version policy and encourage all\nconsumers to keep their tooling version consistent across all projects for reliability. While this\nworks flawlessly, it's not entirely realistic, as many companies have legacy projects that are stuck\non older versions for whatever reason, and integrating them into moon was rather difficult."),(0,r.kt)("p",null,"Well no more! We've refactored our toolchain to support tool overrides on a project-by-project\nbasis. Since we only support Node.js at the moment, this can be achieved with the new\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#node"},(0,r.kt)("inlineCode",{parentName:"a"},"workspace.node.version"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("p",null,"For example, if your workspace Node.js version is configured as v18."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"node:\n version: '18.0.0'\n")),(0,r.kt)("p",null,"You can now override this version at the project-level. Let's go with v14."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n node:\n version: '14.0.0'\n")),(0,r.kt)("p",null,"When running a task from a project with overrides, the toolchain will download, install, and\nconfigure the new version behind the scenes. This new version will then be used to install\ndependencies and execute the tasks commands."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Although we now support overriding the tool version, the workspace configured package manager\n(",(0,r.kt)("inlineCode",{parentName:"p"},"node.packageManager"),") and associated version cannot be overridden. This is unlikely to change.")),(0,r.kt)("h2",{id:"per-project-dependency-installs"},"Per-project dependency installs"),(0,r.kt)("p",null,"Because of the toolchain refactor above, we now support per-project dependency installs as a welcome\nside-effect. This is a necessary step in supporting new languages, especially for those that don't\ninstall dependencies in the workspace for all projects, and must install them per project."),(0,r.kt)("p",null,"This also means that moon now supports non-",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," workspaces! If your repository ",(0,r.kt)("em",{parentName:"p"},"is not"),"\nusing npm/pnpm/yarn workspaces, or a project ",(0,r.kt)("em",{parentName:"p"},"is not")," listed within the workspaces glob list,\ndependencies will be installed within the project."),(0,r.kt)("h2",{id:"typescript-improvements"},"TypeScript improvements"),(0,r.kt)("h3",{id:"routing-outdir-to-the-cache"},"Routing ",(0,r.kt)("inlineCode",{parentName:"h3"},"outDir")," to the cache"),(0,r.kt)("p",null,"A requirement for using project references is that each project must compile declarations (",(0,r.kt)("inlineCode",{parentName:"p"},".d.ts"),")\nso that consumers/dependents can resolve type information. While this makes sense, it becomes rather\nunfortunate as each project folder is now littered with the declaration outputs, which are typically\ngitignored."),(0,r.kt)("p",null,"To improve this experience, we're introducing a new setting\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/toolchain#routeoutdirtocache"},(0,r.kt)("inlineCode",{parentName:"a"},"typescript.routeOutDirToCache")),", that will update the\n",(0,r.kt)("inlineCode",{parentName:"p"},"outDir")," compiler option of ",(0,r.kt)("em",{parentName:"p"},"all")," projects to route to moon's cache directory (which should already\nbe gitignored). This will standardize the use of project references for the entire repository."),(0,r.kt)("p",null,'For example, a project at "packages/components" will route to the following output directory:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "outDir": "../../.moon/cache/types/packages/components"\n }\n}\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"If you require declarations to live within the project, for example an npm package that ships\ntypes, you should introduce an additional configuration to handle this, like\n",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json"),".")),(0,r.kt)("h3",{id:"mapping-project-references-as-paths"},"Mapping project references as ",(0,r.kt)("inlineCode",{parentName:"h3"},"paths")),(0,r.kt)("p",null,"moon automatically keeps TypeScript project references in sync with the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/toolchain#syncprojectreferences"},(0,r.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting, which\nis great, but we can take it further. With the new\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/toolchain#syncprojectreferencestopaths"},(0,r.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferencesToPaths")),"\nsetting, project references (either synced or explicitly defined) will ",(0,r.kt)("em",{parentName:"p"},"also")," be mapped to the\n",(0,r.kt)("inlineCode",{parentName:"p"},"paths")," compiler option, automating the list of import aliases."),(0,r.kt)("p",null,"For example, if a reference has the package name ",(0,r.kt)("inlineCode",{parentName:"p"},"@brand/components"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"paths")," will be mapped\nwith:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "paths": {\n "@brand/components": ["../shared/components/src/index.ts"],\n "@brand/components/*": ["../shared/components/src/*"]\n }\n },\n "references": [\n {\n "path": "../shared/components"\n }\n ]\n}\n')),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.16.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Template files can now be suffixed with ",(0,r.kt)("inlineCode",{parentName:"li"},".tera")," or ",(0,r.kt)("inlineCode",{parentName:"li"},".twig")," for\n",(0,r.kt)("a",{parentName:"li",href:"../docs/guides/codegen#file-extensions"},"syntax highlighting"),"."),(0,r.kt)("li",{parentName:"ul"},"We now display more commands and information when running tasks."),(0,r.kt)("li",{parentName:"ul"},"Declare implicit task dependencies with a new\n",(0,r.kt)("a",{parentName:"li",href:"../docs/config/workspace#implicitdeps"},(0,r.kt)("inlineCode",{parentName:"a"},"runner.implicitDeps"))," setting.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.17 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Webhooks for important pipeline events (for real this time)!"),(0,r.kt)("li",{parentName:"ul"},"YAML anchors and references in config files."),(0,r.kt)("li",{parentName:"ul"},"And ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon/issues/356"},"many more"),"...")))}m.isMDXComponent=!0},99050:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.16-59818abc1e7c124baa536d87936ee00b.png"}}]); \ No newline at end of file diff --git a/assets/js/b03b3eac.e806946d.js b/assets/js/b03b3eac.e806946d.js deleted file mode 100644 index 0b788f4e244..00000000000 --- a/assets/js/b03b3eac.e806946d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5334],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),h=r,u=d["".concat(l,".").concat(h)]||d[h]||m[h]||a;return n?o.createElement(u,i(i({ref:t},c),{},{components:n})):o.createElement(u,i({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},86963:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={slug:"v0.16",title:"moon v0.16 - Per-project tool versions and TypeScript improvements",authors:["milesj"],tags:["toolchain","runner","generator","typescript","node"],image:"./img/v0.16.png"},i=void 0,s={permalink:"/blog/v0.16",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-06_v0.16.mdx",source:"@site/blog/2022-10-06_v0.16.mdx",title:"moon v0.16 - Per-project tool versions and TypeScript improvements",description:"With this release, we've landed a long standing request of supporting project-level overrides for",date:"2022-10-06T00:00:00.000Z",formattedDate:"October 6, 2022",tags:[{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"runner",permalink:"/blog/tags/runner"},{label:"generator",permalink:"/blog/tags/generator"},{label:"typescript",permalink:"/blog/tags/typescript"},{label:"node",permalink:"/blog/tags/node"}],readingTime:3.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.16",title:"moon v0.16 - Per-project tool versions and TypeScript improvements",authors:["milesj"],tags:["toolchain","runner","generator","typescript","node"],image:"./img/v0.16.png"},prevItem:{title:"New VS Code extension!",permalink:"/blog/vscode-extension"},nextItem:{title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",permalink:"/blog/v0.15"}},l={image:n(99050).Z,authorsImageUrls:[void 0]},p=[{value:"Per-project tool version overrides",id:"per-project-tool-version-overrides",level:2},{value:"Per-project dependency installs",id:"per-project-dependency-installs",level:2},{value:"TypeScript improvements",id:"typescript-improvements",level:2},{value:"Routing <code>outDir</code> to the cache",id:"routing-outdir-to-the-cache",level:3},{value:"Mapping project references as <code>paths</code>",id:"mapping-project-references-as-paths",level:3},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've landed a long standing request of supporting project-level overrides for\ntools configured in the workspace, as well as some quality of life improvements for TypeScript."),(0,r.kt)("h2",{id:"per-project-tool-version-overrides"},"Per-project tool version overrides"),(0,r.kt)("p",null,"Since moons inception, our ",(0,r.kt)("a",{parentName:"p",href:"../docs/concepts/toolchain"},"toolchain")," has only supported a single\nversion of a tool (Node.js), as we wanted to embrace the single version policy and encourage all\nconsumers to keep their tooling version consistent across all projects for reliability. While this\nworks flawlessly, it's not entirely realistic, as many companies have legacy projects that are stuck\non older versions for whatever reason, and integrating them into moon was rather difficult."),(0,r.kt)("p",null,"Well no more! We've refactored our toolchain to support tool overrides on a project-by-project\nbasis. Since we only support Node.js at the moment, this can be achieved with the new\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#node"},(0,r.kt)("inlineCode",{parentName:"a"},"workspace.node.version"))," setting in\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("p",null,"For example, if your workspace Node.js version is configured as v18."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"node:\n version: '18.0.0'\n")),(0,r.kt)("p",null,"You can now override this version at the project-level. Let's go with v14."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n node:\n version: '14.0.0'\n")),(0,r.kt)("p",null,"When running a task from a project with overrides, the toolchain will download, install, and\nconfigure the new version behind the scenes. This new version will then be used to install\ndependencies and execute the tasks commands."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Although we now support overriding the tool version, the workspace configured package manager\n(",(0,r.kt)("inlineCode",{parentName:"p"},"node.packageManager"),") and associated version cannot be overridden. This is unlikely to change.")),(0,r.kt)("h2",{id:"per-project-dependency-installs"},"Per-project dependency installs"),(0,r.kt)("p",null,"Because of the toolchain refactor above, we now support per-project dependency installs as a welcome\nside-effect. This is a necessary step in supporting new languages, especially for those that don't\ninstall dependencies in the workspace for all projects, and must install them per project."),(0,r.kt)("p",null,"This also means that moon now supports non-",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," workspaces! If your repository ",(0,r.kt)("em",{parentName:"p"},"is not"),"\nusing npm/pnpm/yarn workspaces, or a project ",(0,r.kt)("em",{parentName:"p"},"is not")," listed within the workspaces glob list,\ndependencies will be installed within the project."),(0,r.kt)("h2",{id:"typescript-improvements"},"TypeScript improvements"),(0,r.kt)("h3",{id:"routing-outdir-to-the-cache"},"Routing ",(0,r.kt)("inlineCode",{parentName:"h3"},"outDir")," to the cache"),(0,r.kt)("p",null,"A requirement for using project references is that each project must compile declarations (",(0,r.kt)("inlineCode",{parentName:"p"},".d.ts"),")\nso that consumers/dependents can resolve type information. While this makes sense, it becomes rather\nunfortunate as each project folder is now littered with the declaration outputs, which are typically\ngitignored."),(0,r.kt)("p",null,"To improve this experience, we're introducing a new setting\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/toolchain#routeoutdirtocache"},(0,r.kt)("inlineCode",{parentName:"a"},"typescript.routeOutDirToCache")),", that will update the\n",(0,r.kt)("inlineCode",{parentName:"p"},"outDir")," compiler option of ",(0,r.kt)("em",{parentName:"p"},"all")," projects to route to moon's cache directory (which should already\nbe gitignored). This will standardize the use of project references for the entire repository."),(0,r.kt)("p",null,'For example, a project at "packages/components" will route to the following output directory:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "outDir": "../../.moon/cache/types/packages/components"\n }\n}\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"If you require declarations to live within the project, for example an npm package that ships\ntypes, you should introduce an additional configuration to handle this, like\n",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.build.json"),".")),(0,r.kt)("h3",{id:"mapping-project-references-as-paths"},"Mapping project references as ",(0,r.kt)("inlineCode",{parentName:"h3"},"paths")),(0,r.kt)("p",null,"moon automatically keeps TypeScript project references in sync with the\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/toolchain#syncprojectreferences"},(0,r.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," setting, which\nis great, but we can take it further. With the new\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/toolchain#syncprojectreferencestopaths"},(0,r.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferencesToPaths")),"\nsetting, project references (either synced or explicitly defined) will ",(0,r.kt)("em",{parentName:"p"},"also")," be mapped to the\n",(0,r.kt)("inlineCode",{parentName:"p"},"paths")," compiler option, automating the list of import aliases."),(0,r.kt)("p",null,"For example, if a reference has the package name ",(0,r.kt)("inlineCode",{parentName:"p"},"@brand/components"),", the ",(0,r.kt)("inlineCode",{parentName:"p"},"paths")," will be mapped\nwith:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/tsconfig.json"',title:'"<project>/tsconfig.json"'},'{\n // ...\n "compilerOptions": {\n // ...\n "paths": {\n "@brand/components": ["../shared/components/src/index.ts"],\n "@brand/components/*": ["../shared/components/src/*"]\n }\n },\n "references": [\n {\n "path": "../shared/components"\n }\n ]\n}\n')),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.16.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Template files can now be suffixed with ",(0,r.kt)("inlineCode",{parentName:"li"},".tera")," or ",(0,r.kt)("inlineCode",{parentName:"li"},".twig")," for\n",(0,r.kt)("a",{parentName:"li",href:"../docs/guides/codegen#file-extensions"},"syntax highlighting"),"."),(0,r.kt)("li",{parentName:"ul"},"We now display more commands and information when running tasks."),(0,r.kt)("li",{parentName:"ul"},"Declare implicit task dependencies with a new\n",(0,r.kt)("a",{parentName:"li",href:"../docs/config/workspace#implicitdeps"},(0,r.kt)("inlineCode",{parentName:"a"},"runner.implicitDeps"))," setting.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.17 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Webhooks for important pipeline events (for real this time)!"),(0,r.kt)("li",{parentName:"ul"},"YAML anchors and references in config files."),(0,r.kt)("li",{parentName:"ul"},"And ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon/issues/356"},"many more"),"...")))}m.isMDXComponent=!0},99050:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.16-59818abc1e7c124baa536d87936ee00b.png"}}]); \ No newline at end of file diff --git a/assets/js/b072568e.114a1c83.js b/assets/js/b072568e.114a1c83.js deleted file mode 100644 index 459309c716d..00000000000 --- a/assets/js/b072568e.114a1c83.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2433],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),s=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(u.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=s(r),f=a,d=p["".concat(u,".").concat(f)]||p[f]||m[f]||o;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=p;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),i=r(35595),u=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:r,selectedValue:i,selectValue:u,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),f=e=>{const t=e.currentTarget,r=m.indexOf(t),n=s[r].value;n!==i&&(p(t),u(n))},d=e=>{let t=null;switch(e.key){case"Enter":f(e);break;case"ArrowRight":{const r=m.indexOf(e.currentTarget)+1;t=m[r]??m[0];break}case"ArrowLeft":{const r=m.indexOf(e.currentTarget)-1;t=m[r]??m[m.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>m.push(e),onKeyDown:d,onClick:f},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),r??t)})))}function p(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function f(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(m,(0,n.Z)({},e,t)),a.createElement(p,(0,n.Z)({},e,t)))}function d(e){const t=(0,u.Z)();return a.createElement(f,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>p});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),i=r(71819);function u(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??u(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function p(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[p,f]=m({queryString:r,groupId:a}),[d,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=p??d;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&u(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),f(e),b(e)}),[f,b,o]),tabValues:o}}},3688:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798);const o={slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},l=void 0,i={permalink:"/blog/v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-21_v0.17.mdx",source:"@site/blog/2022-10-21_v0.17.mdx",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",description:"With this release, we're landing the first iteration of our notifier service, starting with",date:"2022-10-21T00:00:00.000Z",formattedDate:"October 21, 2022",tags:[{label:"notifier",permalink:"/blog/tags/notifier"},{label:"runner",permalink:"/blog/tags/runner"},{label:"config",permalink:"/blog/tags/config"},{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:3.18,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},prevItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"},nextItem:{title:"New VS Code extension!",permalink:"/blog/vscode-extension"}},u={image:r(41249).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're landing the first iteration of our notifier service, starting with\nwebhooks! We've also spent some time working on quality of life improvements."))}m.isMDXComponent=!0},41249:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.17-b3ee056e98fbfd5e347375782f5dd335.png"}}]); \ No newline at end of file diff --git a/assets/js/b072568e.ffc8c841.js b/assets/js/b072568e.ffc8c841.js new file mode 100644 index 00000000000..94884e4ceda --- /dev/null +++ b/assets/js/b072568e.ffc8c841.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32433],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),s=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(u.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=s(r),f=a,d=p["".concat(u,".").concat(f)]||p[f]||m[f]||o;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=p;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),i=r(35595),u=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function m(e){let{className:t,block:r,selectedValue:i,selectValue:u,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),f=e=>{const t=e.currentTarget,r=m.indexOf(t),n=s[r].value;n!==i&&(p(t),u(n))},d=e=>{let t=null;switch(e.key){case"Enter":f(e);break;case"ArrowRight":{const r=m.indexOf(e.currentTarget)+1;t=m[r]??m[0];break}case"ArrowLeft":{const r=m.indexOf(e.currentTarget)-1;t=m[r]??m[m.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>m.push(e),onKeyDown:d,onClick:f},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),r??t)})))}function p(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function f(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(m,(0,n.Z)({},e,t)),a.createElement(p,(0,n.Z)({},e,t)))}function d(e){const t=(0,u.Z)();return a.createElement(f,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>p});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),i=r(71819);function u(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??u(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function p(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[p,f]=m({queryString:r,groupId:a}),[d,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=p??d;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&u(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),f(e),b(e)}),[f,b,o]),tabValues:o}}},3688:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798);const o={slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},l=void 0,i={permalink:"/blog/v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-21_v0.17.mdx",source:"@site/blog/2022-10-21_v0.17.mdx",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",description:"With this release, we're landing the first iteration of our notifier service, starting with",date:"2022-10-21T00:00:00.000Z",formattedDate:"October 21, 2022",tags:[{label:"notifier",permalink:"/blog/tags/notifier"},{label:"runner",permalink:"/blog/tags/runner"},{label:"config",permalink:"/blog/tags/config"},{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:3.18,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.17",title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",authors:["milesj"],tags:["notifier","runner","config","editors","vscode"],image:"./img/v0.17.png"},prevItem:{title:"moon v0.18 - Improved configuration and initialization flow",permalink:"/blog/v0.18"},nextItem:{title:"New VS Code extension!",permalink:"/blog/vscode-extension"}},u={image:r(41249).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we're landing the first iteration of our notifier service, starting with\nwebhooks! We've also spent some time working on quality of life improvements."))}m.isMDXComponent=!0},41249:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.17-b3ee056e98fbfd5e347375782f5dd335.png"}}]); \ No newline at end of file diff --git a/assets/js/b0cf9b20.32752660.js b/assets/js/b0cf9b20.32752660.js new file mode 100644 index 00000000000..470231fce09 --- /dev/null +++ b/assets/js/b0cf9b20.32752660.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60499],{57812:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/dep-graph","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b0cf9b20.707a5ff9.js b/assets/js/b0cf9b20.707a5ff9.js deleted file mode 100644 index 350f9428d12..00000000000 --- a/assets/js/b0cf9b20.707a5ff9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[499],{57812:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/dep-graph","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b0e766b4.51a2f42a.js b/assets/js/b0e766b4.51a2f42a.js deleted file mode 100644 index 18eb3c0cbc6..00000000000 --- a/assets/js/b0e766b4.51a2f42a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2949],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),m=s(r),d=a,f=m["".concat(i,".").concat(d)]||m[d]||p[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u.mdxType="string"==typeof e?e:a,l[1]=u;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),u=r(35595),i=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:u,selectValue:i,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,r=p.indexOf(t),n=s[r].value;n!==u&&(m(t),i(n))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":u===t})}),r??t)})))}function m(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,u.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(p,(0,n.Z)({},e,t)),a.createElement(m,(0,n.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return a.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>m});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),u=r(71819);function i(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??i(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(u),(0,n.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(l.location.search);t.set(u,e),l.replace({...l.location,search:t.toString()})}),[u,l])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:r,groupId:a}),[f,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=m??f;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),b(e)}),[d,b,o]),tabValues:o}}},60992:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>u,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798);const o={slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},l=void 0,u={permalink:"/blog/v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-26_v0.15.mdx",source:"@site/blog/2022-09-26_v0.15.mdx",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",description:"With this release, we've focused heavily on Docker integration and enhancing the Dockerfile",date:"2022-09-26T00:00:00.000Z",formattedDate:"September 26, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"docker",permalink:"/blog/tags/docker"}],readingTime:3.495,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},prevItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"},nextItem:{title:"moon v0.14 - Code generation and implicit dependencies",permalink:"/blog/v0.14"}},i={image:r(10818).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've focused heavily on Docker integration and enhancing the ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\nworkflow, as well as some minor quality of life improvements for template files and run reports."))}p.isMDXComponent=!0},10818:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.15-df3082f5cae38090b567718791719d91.png"}}]); \ No newline at end of file diff --git a/assets/js/b0e766b4.ff5fa677.js b/assets/js/b0e766b4.ff5fa677.js new file mode 100644 index 00000000000..e36eaf0c7f4 --- /dev/null +++ b/assets/js/b0e766b4.ff5fa677.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12949],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),m=s(r),d=a,f=m["".concat(i,".").concat(d)]||m[d]||p[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u.mdxType="string"==typeof e?e:a,l[1]=u;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},39798:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:r,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:r},t)}},33337:(e,t,r)=>{r.d(t,{Z:()=>f});var n=r(25773),a=r(27378),o=r(37140),l=r(83457),u=r(35595),i=r(76457);const s="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:r,selectedValue:u,selectValue:i,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,r=p.indexOf(t),n=s[r].value;n!==u&&(m(t),i(n))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=p.indexOf(e.currentTarget)+1;t=p[r]??p[0];break}case"ArrowLeft":{const r=p.indexOf(e.currentTarget)-1;t=p[r]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},t)},s.map((e=>{let{value:t,label:r,attributes:l}=e;return a.createElement("li",(0,n.Z)({role:"tab",tabIndex:u===t?0:-1,"aria-selected":u===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":u===t})}),r??t)})))}function m(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function d(e){const t=(0,u.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",s)},a.createElement(p,(0,n.Z)({},e,t)),a.createElement(m,(0,n.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return a.createElement(d,(0,n.Z)({key:String(t)},e))}},35595:(e,t,r)=>{r.d(t,{Y:()=>m});var n=r(27378),a=r(35331),o=r(30654),l=r(70784),u=r(71819);function i(e){return function(e){return n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}function s(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??i(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function c(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const l=(0,a.k6)(),u=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,o._X)(u),(0,n.useCallback)((e=>{if(!u)return;const t=new URLSearchParams(l.location.search);t.set(u,e),l.replace({...l.location,search:t.toString()})}),[u,l])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=s(e),[l,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:r,groupId:a}),[f,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=m??f;return c({value:e,tabValues:o})?e:null})();(0,n.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),b(e)}),[d,b,o]),tabValues:o}}},60992:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>u,toc:()=>s});var n=r(25773),a=(r(27378),r(35318));r(33337),r(39798);const o={slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},l=void 0,u={permalink:"/blog/v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-26_v0.15.mdx",source:"@site/blog/2022-09-26_v0.15.mdx",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",description:"With this release, we've focused heavily on Docker integration and enhancing the Dockerfile",date:"2022-09-26T00:00:00.000Z",formattedDate:"September 26, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"docker",permalink:"/blog/tags/docker"}],readingTime:3.495,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},prevItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"},nextItem:{title:"moon v0.14 - Code generation and implicit dependencies",permalink:"/blog/v0.14"}},i={image:r(10818).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"With this release, we've focused heavily on Docker integration and enhancing the ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\nworkflow, as well as some minor quality of life improvements for template files and run reports."))}p.isMDXComponent=!0},10818:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.15-df3082f5cae38090b567718791719d91.png"}}]); \ No newline at end of file diff --git a/assets/js/b104f86f.2359f042.js b/assets/js/b104f86f.2359f042.js new file mode 100644 index 00000000000..25e4ecb0504 --- /dev/null +++ b/assets/js/b104f86f.2359f042.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84536],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),d=s(n),u=o,f=d["".concat(l,".").concat(u)]||d[u]||p[u]||a;return n?r.createElement(f,i(i({ref:t},m),{},{components:n})):r.createElement(f,i({ref:t},m))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},20626:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var r=n(25773),o=(n(27378),n(35318));const a={title:"teardown"},i=void 0,c={unversionedId:"commands/teardown",id:"commands/teardown",title:"teardown",description:"The moon teardown command, as its name infers, will teardown and clean the current environment,",source:"@site/docs/commands/teardown.mdx",sourceDirName:"commands",slug:"/commands/teardown",permalink:"/docs/commands/teardown",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/teardown.mdx",tags:[],version:"current",frontMatter:{title:"teardown"},sidebar:"docs",previous:{title:"task",permalink:"/docs/commands/task"},next:{title:"upgrade",permalink:"/docs/commands/upgrade"}},l={},s=[],m={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon teardown")," command, as its name infers, will teardown and clean the current environment,\nopposite the ",(0,o.kt)("a",{parentName:"p",href:"./setup"},(0,o.kt)("inlineCode",{parentName:"a"},"setup"))," command. It achieves this by doing the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Uninstalling all configured tools in the toolchain."),(0,o.kt)("li",{parentName:"ul"},"Removing any download or temporary files/folders.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon teardown\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b104f86f.966c57a6.js b/assets/js/b104f86f.966c57a6.js deleted file mode 100644 index 5f76b811161..00000000000 --- a/assets/js/b104f86f.966c57a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4536],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),d=s(n),u=o,f=d["".concat(l,".").concat(u)]||d[u]||p[u]||a;return n?r.createElement(f,i(i({ref:t},m),{},{components:n})):r.createElement(f,i({ref:t},m))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},20626:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var r=n(25773),o=(n(27378),n(35318));const a={title:"teardown"},i=void 0,c={unversionedId:"commands/teardown",id:"commands/teardown",title:"teardown",description:"The moon teardown command, as its name infers, will teardown and clean the current environment,",source:"@site/docs/commands/teardown.mdx",sourceDirName:"commands",slug:"/commands/teardown",permalink:"/docs/commands/teardown",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/teardown.mdx",tags:[],version:"current",frontMatter:{title:"teardown"},sidebar:"docs",previous:{title:"task",permalink:"/docs/commands/task"},next:{title:"upgrade",permalink:"/docs/commands/upgrade"}},l={},s=[],m={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon teardown")," command, as its name infers, will teardown and clean the current environment,\nopposite the ",(0,o.kt)("a",{parentName:"p",href:"./setup"},(0,o.kt)("inlineCode",{parentName:"a"},"setup"))," command. It achieves this by doing the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Uninstalling all configured tools in the toolchain."),(0,o.kt)("li",{parentName:"ul"},"Removing any download or temporary files/folders.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon teardown\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b1144183.2294c876.js b/assets/js/b1144183.2294c876.js new file mode 100644 index 00000000000..23bd6753e6d --- /dev/null +++ b/assets/js/b1144183.2294c876.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47822],{42234:e=>{e.exports=JSON.parse('{"label":"tag","permalink":"/blog/tags/tag","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b1144183.b5af15dd.js b/assets/js/b1144183.b5af15dd.js deleted file mode 100644 index 1a84ead856e..00000000000 --- a/assets/js/b1144183.b5af15dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7822],{42234:e=>{e.exports=JSON.parse('{"label":"tag","permalink":"/blog/tags/tag","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b15686f4.1fb40b3a.js b/assets/js/b15686f4.1fb40b3a.js new file mode 100644 index 00000000000..fa6dec6df59 --- /dev/null +++ b/assets/js/b15686f4.1fb40b3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64147],{19687:s=>{s.exports=JSON.parse('{"label":"hooks","permalink":"/docs/tags/hooks","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b15686f4.5241c7ad.js b/assets/js/b15686f4.5241c7ad.js deleted file mode 100644 index 79401269feb..00000000000 --- a/assets/js/b15686f4.5241c7ad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4147],{19687:s=>{s.exports=JSON.parse('{"label":"hooks","permalink":"/docs/tags/hooks","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b184781f.1add21f8.js b/assets/js/b184781f.1add21f8.js deleted file mode 100644 index 113b5bbbebb..00000000000 --- a/assets/js/b184781f.1add21f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6911],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),g=c(r),m=a,f=g["".concat(s,".").concat(m)]||g[m]||u[m]||o;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:i="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},9619:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(40624),o=r(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:r,text:l,variant:s}=e;return n.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},r&&n.createElement(o.Z,{icon:r,className:"mr-1"}),l)}},16858:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(25773),a=(r(27378),r(35318));r(9619),r(88109);const o={slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},i=void 0,l={permalink:"/blog/v0.21",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx",source:"@site/blog/2022-12-19_v0.21.mdx",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",description:"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered",date:"2022-12-19T00:00:00.000Z",formattedDate:"December 19, 2022",tags:[{label:"runner",permalink:"/blog/tags/runner"},{label:"language",permalink:"/blog/tags/language"},{label:"platform",permalink:"/blog/tags/platform"},{label:"cache",permalink:"/blog/tags/cache"},{label:"graph",permalink:"/blog/tags/graph"}],readingTime:4.255,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},prevItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"},nextItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"}},s={image:r(99851).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\nsystem! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of\nlife improvements."))}u.isMDXComponent=!0},99851:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.21-a2807b8b9cbc5e05fe2d8cb2b78050ed.png"}}]); \ No newline at end of file diff --git a/assets/js/b184781f.effa9a83.js b/assets/js/b184781f.effa9a83.js new file mode 100644 index 00000000000..eb5c9536f90 --- /dev/null +++ b/assets/js/b184781f.effa9a83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26911],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),g=c(r),m=a,f=g["".concat(s,".").concat(m)]||g[m]||u[m]||o;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:o,align:i="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:a,title:o,className:"inline-block"}))}},9619:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(40624),o=r(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:r,text:l,variant:s}=e;return n.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},r&&n.createElement(o.Z,{icon:r,className:"mr-1"}),l)}},16858:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(25773),a=(r(27378),r(35318));r(9619),r(88109);const o={slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},i=void 0,l={permalink:"/blog/v0.21",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx",source:"@site/blog/2022-12-19_v0.21.mdx",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",description:"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered",date:"2022-12-19T00:00:00.000Z",formattedDate:"December 19, 2022",tags:[{label:"runner",permalink:"/blog/tags/runner"},{label:"language",permalink:"/blog/tags/language"},{label:"platform",permalink:"/blog/tags/platform"},{label:"cache",permalink:"/blog/tags/cache"},{label:"graph",permalink:"/blog/tags/graph"}],readingTime:4.255,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.21",title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",authors:["milesj"],tags:["runner","language","platform","cache","graph"],image:"./img/v0.21.png"},prevItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"},nextItem:{title:"moon v0.20 - Toolchain, caching, and hydration improvements",permalink:"/blog/v0.20"}},s={image:r(99851).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we're very excited to announce our tiered\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\nsystem! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of\nlife improvements."))}u.isMDXComponent=!0},99851:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.21-a2807b8b9cbc5e05fe2d8cb2b78050ed.png"}}]); \ No newline at end of file diff --git a/assets/js/b1c60aef.5563057d.js b/assets/js/b1c60aef.5563057d.js new file mode 100644 index 00000000000..93fe3eda79f --- /dev/null +++ b/assets/js/b1c60aef.5563057d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58074],{81077:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/errors","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b1c60aef.605ca59d.js b/assets/js/b1c60aef.605ca59d.js deleted file mode 100644 index 8dd97b244b3..00000000000 --- a/assets/js/b1c60aef.605ca59d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8074],{81077:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/errors","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.7f94790f.js b/assets/js/b2b675dd.7f94790f.js deleted file mode 100644 index 838171798c4..00000000000 --- a/assets/js/b2b675dd.7f94790f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":6,"totalCount":51,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.e1a8dc10.js b/assets/js/b2b675dd.e1a8dc10.js new file mode 100644 index 00000000000..48ac9a501c2 --- /dev/null +++ b/assets/js/b2b675dd.e1a8dc10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":6,"totalCount":52,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2d692e7.b94c42f7.js b/assets/js/b2d692e7.b94c42f7.js deleted file mode 100644 index 69a8cff2e80..00000000000 --- a/assets/js/b2d692e7.b94c42f7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9716],{7085:e=>{e.exports=JSON.parse('{"name":"docusaurus-theme-search-algolia","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b2d692e7.d932d43a.js b/assets/js/b2d692e7.d932d43a.js new file mode 100644 index 00000000000..6c62ebac989 --- /dev/null +++ b/assets/js/b2d692e7.d932d43a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[79716],{7085:e=>{e.exports=JSON.parse('{"name":"docusaurus-theme-search-algolia","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.2413f90d.js b/assets/js/b2f554cd.2413f90d.js new file mode 100644 index 00000000000..eb4c0581237 --- /dev/null +++ b/assets/js/b2f554cd.2413f90d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"proto-v0.20","metadata":{"permalink":"/blog/proto-v0.20","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-20_proto-v0.20.mdx","source":"@site/blog/2023-10-20_proto-v0.20.mdx","title":"proto v0.20 - New shims and binaries management","description":"In this release, we\'re reworking how shims and binaries work.","date":"2023-10-20T00:00:00.000Z","formattedDate":"October 20, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"bin","permalink":"/blog/tags/bin"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"checksum","permalink":"/blog/tags/checksum"}],"readingTime":2.91,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.20","title":"proto v0.20 - New shims and binaries management","authors":["milesj"],"tags":["proto","bin","shim","checksum"]},"nextItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"}},"content":"In this release, we\'re reworking how shims and binaries work.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shims _and_ Binaries (breaking)\\n\\nSince proto\'s inception, we\'ve used shims as a way to execute installed tools. This allowed us to\\nwrap the underlying tool binary to provide additional functionality, such as automatic version\\ndetection, runtime hooks, and more. However, this approach has some limitations, such as:\\n\\n- Shims are forced onto you and there\'s no way to use proto without shims.\\n- Shims are slower than executing the native binary, upwards of 10x slower. While this equates in\\n milliseconds, it can be noticeable dependending on the tool.\\n- For Windows, our shim files are `.cmd` _and not_ `.exe`. This causes a lot of weird and unexpected\\n problems when an environment expects a real executable, or uses a hard-coded `.exe` extension.\\n\\nTo remedy this, we\'re introducing both a shim and non-shim approach, which has resulted in a pretty\\nbig breaking change. Shims are now generated in `~/.proto/shims` (instead of `~/.proto/bin`), while\\n`~/.proto/bin` will now store symlinks to native binaries. To migrate to this new pattern, we\'re\\nintroducing a new `proto migrate` command (this only needs to be ran once).\\n\\n```shell\\n$ proto upgrade\\n$ proto migrate v0.20 --log debug\\n```\\n\\n### How it works\\n\\nWhen installing proto for the first time, or running the `proto migrate` command, we prepend `PATH`\\nwith `$PROTO_HOME/shims:$PROTO_HOME/bin`. This allows shims to be executed _first_ and fallthrough\\nto native binaries if a shim does not exist (for example, `.exe` on Windows).\\n\\nFurthermore, if you\'d prefer to _only use_ shims, or _only use_ binaries, you can update `PATH` and\\nremove the unwanted directory path.\\n\\nAnd lastly, if shims are causing problems, you can now easily reference the native binaries\\ndirectly. This was rather complicated before.\\n\\n### Comparison\\n\\n| | Shims | Binaries |\\n| -------------------- | ---------------------------- | ----------------------------------------------------------------------- |\\n| **Location** | `~/.proto/shims` | `~/.proto/bin` |\\n| **Created as** | Scripts that run `proto run` | Symlinks to the native binary |\\n| **Version executed** | Detects version at runtime | Last version that was installed + pinned |\\n| **Supported for** | All tools | Only tools that support native execution (may not work for `.js` files) |\\n\\n## Support for minisign checksums\\n\\nWhen proto installs a tool, it runs a process known as checksum verification, where we ensure the\\ndownload hasn\'t been modified maliciously in anyway. Historically we only supported SHA256\\nchecksums, but now, we also support the new [minisign](https://jedisct1.github.io/minisign/) tool,\\nused by popular tools like [Zig](https://ziglang.org/).\\n\\nIf you\'re building a plugin for a tool that uses minisign, you can use the new\\n[`checksum_public_key`](/docs/proto/wasm-plugin#downloading-pre-builts) (WASM) or\\n[`install.checksum-public-key`](/docs/proto/toml-plugin#downloading-and-installing) (TOML) field to\\nprovide the public key for use in verification.\\n\\nWhen the checksum URL ends in a `.minisig` extension, proto will automatically use minisign for\\nchecksum verification!\\n\\n```toml\\n[install]\\nchecksum-url = \\"https://domain.com/some/path/to/checksum.minisig\\"\\nchecksum-public-key = \\"untrusted comment: ...\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.20.0) for a full list\\nof changes.\\n\\n- Updated `proto use` to install tools in parallel.\\n- Updated `proto plugins` and `proto tools` to load plugins in parallel.\\n- Updated `proto run` to error when the tool attempts to self-upgrade outside of proto.\\n- Rust plugin\\n - Will now attempt to install `rustup` if it does not exist on the current machine.\\n - Will now respect the `RUSTUP_HOME` environment variable when locating the `.rustup` store.\\n- Schema plugin\\n - Added `install.checksum_public_key` for defining the public key used to verify checksums.\\n - Added `metadata.self_upgrade_commands` for defining which sub-commands should be blocked for\\n self-upgrades."},{"id":"moon-v1.15","metadata":{"permalink":"/blog/moon-v1.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx","source":"@site/blog/2023-10-09_moon-v1.15.mdx","title":"moon v1.15 - Next-generation action graph","description":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the","date":"2023-10-09T00:00:00.000Z","formattedDate":"October 9, 2023","tags":[{"label":"action","permalink":"/blog/tags/action"},{"label":"dependency","permalink":"/blog/tags/dependency"},{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"railway","permalink":"/blog/tags/railway"}],"readingTime":4.62,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.15","title":"moon v1.15 - Next-generation action graph","authors":["milesj"],"tags":["action","dependency","graph","pipeline","railway"],"image":"./img/moon/v1.15.png"},"prevItem":{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"},"nextItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"}},"content":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the\\ndependency graph.\\n\\n\x3c!--truncate--\x3e\\n\\n## Hello action graph, goodbye dependency graph\\n\\nFor the past few months, we\'ve been working on a rewrite of our action pipeline, which consists of\\nthe project graph, dependency graph, task executor, process pipeline, and more. It\'s a slow process,\\nwith many different pieces that must land in sequence, but we\'re almost done. The next step in this\\nprocess is the [introduction of the new action graph](/docs/how-it-works/action-graph), which\\nreplaces the previous dependency graph.\\n\\nFor the most part, the graphs work in a similar fashion, but since we rewrote it from the ground up,\\nwe were able to resolve any discrepancies and performance issues. The biggest changes between the\\nnew and old graphs are:\\n\\n- All actions now depend on the `SyncWorkspace` action, instead of this action running arbitrarily.\\n- Cleaned up dependency chains between actions, greatly reducing the number of nodes in the graph.\\n- Renamed `RunTarget` to `RunTask`, including interactive and persistent variants.\\n- And lastly, we ditched our batched task approach for a ready queue. Continue reading for more\\n information!\\n\\n### A new performant thread pool\\n\\nIn the old dependency graph, when we\'d execute a task, we\'d order the graph topologically and then\\ngroup actions into batches (or buckets) based on their dependency chains. Batches would then be\\nexecuted in order within the thread pool. This approach worked well, but had one major flaw: it\\nwasn\'t as performant as could be. For example, if our thread pool size was 12, and a batch only had\\n2 tasks in it, what were the other 10 threads doing? Absolutely nothing. They were sitting idly,\\nwaiting for a task.\\n\\nAnd now with the new action graph, we take full advantage of all threads in the pool. Instead of the\\nbatched approach above, we now use a topological task-ready queue, where a thread without work (or\\nis waiting for work) can poll the graph for a new task to run. A task is considered ready to run if\\nit either has no dependencies, or all of its dependencies (in the chain) have been ran.\\n\\nFor large graphs, this should result in a significant performance improvement!\\n\\n### Automatic dependency linking (breaking)\\n\\nBecause of these graph changes, we do have a minor \\"breaking change\\". Tasks that depend (via `deps`)\\non other tasks from arbitrary projects (the parent project doesn\'t implicitly or explicitly depend\\non the other project), not including the root-level project, will now automatically mark that other\\nproject as a \\"peer\\" dependency (if not already configured with `dependsOn`). For example, \\"b\\"\\nbecomes a peer dependency for \\"a\\".\\n\\n```yaml title=\\"a/moon.yml\\"\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nNow internally becomes:\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'peer\'\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nIf you\'d prefer this dependency to _not be_ a peer, you can explicitly configure it with a different\\nscope. For Node.js projects, the \\"build\\" scope can be used as a no-op replacement.\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'build\' # production, development\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nWe\'re marking this as a breaking change as this could subtly introduce cycles in the project graph\\nthat weren\'t present before, and for Node.js projects, this may inject `peerDependencies`. However,\\nthis change was necessary to ensure accurate dependency chains in the graph.\\n\\n## New `moonrepo/setup-toolchain` GitHub action\\n\\nWe\'ve begun a process to deprecate the\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action) and\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) GitHub actions, and instead, combine\\nand replace them with a new [moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain)\\naction. Why a new action instead of fixing the others?\\n\\nThe biggest problem was that both previous actions shared about 90% of the same code, but were\\nslightly different in how they installed the binaries and cached the toolchain. It was was also\\nconfusing for consumers to understand and know which action to use (because they shouldn\'t be used\\ntogether).\\n\\nTo remedy this, we\'re prototyping the new\\n[moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain) action, which has been\\nworking quite well. It aims to solve the following:\\n\\n- Installs `proto` globally so that installed tools can also be executed globally.\\n- Conditionally installs `moon` globally if the repository is using moon (attempts to detect a\\n `.moon` directory).\\n- Caches the toolchain (`~/.proto`) so subsequent runs are faster.\\n- Hashes `.prototools` and `.moon/toolchain.yml` files to generate a unique cache key.\\n- Cleans the toolchain before caching to remove unused or stale tools.\\n- Can auto-install tools when used.\\n\\n```diff\\n# ...\\njobs:\\n ci:\\n name: CI\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n- - uses: moonrepo/setup-moon-action@v1\\n+ - uses: moonrepo/setup-toolchain@v0\\n```\\n\\n## Now supported in Railway\\n\\nIf you\'re a big fan of [Railway](https://railway.app/) (like we are), and you\'re deploying a Node.js\\nbacked application, then you\'ll be happy to hear that Railway now officially and natively supports\\nmoon! We spent some time over the past month\\n[integrating moon support into their Nixpacks architecture](https://nixpacks.com/docs/providers/node).\\n\\nTo make use of this, set the `NIXPACKS_MOON_APP_NAME` environment variable to the name of your moon\\nproject that you want to be deployed. This will then automatically run `moon run <app>:build` and\\n`moon run <app>:start` respectively. To customize the task names, you can set the\\n`NIXPACKS_MOON_BUILD_TASK` and `NIXPACKS_MOON_START_TASK` environment variables.\\n\\n:::info\\n\\nThis is currently only supported for Node.js projects, but will be expanded to other languages in\\nthe future!\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.15.0) for a full list\\nof changes.\\n\\n- Added a `moon action-graph` command.\\n- Added a `--dependents` argument to `moon action-graph`.\\n- Added the ability to skip non-`RunTask` actions using environment variables.\\n- Deprecated the `moon dep-graph` command."},{"id":"proto-v0.19","metadata":{"permalink":"/blog/proto-v0.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx","source":"@site/blog/2023-09-29_proto-v0.19.mdx","title":"proto v0.19 - Version pinning and outdated checks","description":"In this release, we\'re improving version pinning and introducing a new command to check for outdated","date":"2023-09-29T00:00:00.000Z","formattedDate":"September 29, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"pin","permalink":"/blog/tags/pin"},{"label":"global","permalink":"/blog/tags/global"},{"label":"local","permalink":"/blog/tags/local"},{"label":"outdated","permalink":"/blog/tags/outdated"}],"readingTime":1.92,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.19","title":"proto v0.19 - Version pinning and outdated checks","authors":["milesj"],"tags":["proto","pin","global","local","outdated"],"image":"./img/proto/v0.19.png"},"prevItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},"nextItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"}},"content":"In this release, we\'re improving version pinning and introducing a new command to check for outdated\\nversions.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto pin` command (breaking)\\n\\nBefore our official v1 release, which is relatively soon, we\'ll be making some breaking changes with\\nthe proto APIs. The first is the introduction of the new [`proto pin`](/docs/proto/commands/pin)\\ncommand, which replaces the previous `proto local` and `proto global` commands. We felt this was a\\nmuch cleaner change, and far easier to understand than the previous command names.\\n\\n```shell\\n# v0.18\\n$ proto local go 1.20\\n$ proto global node 20\\n\\n# v0.19+\\n$ proto pin go 1.20\\n$ proto pin node 20 --global\\n```\\n\\n## New `pin-latest` setting\\n\\nWhile we\'re on the subject of pinning versions, we\'ve also introduced a new\\n[`pin-latest`](/docs/proto/config#pin-latest) setting. Do you want the latest version to always be\\npinned? Do you forgot to pass `--pin` when installing? Do you forget to run the `proto global` or\\n`proto local` commands (now `proto pin`)? If you answered yes to any of these questions, then this\\nsetting is for you.\\n\\nWhen enabled, and a tool is installed with the \\"latest\\" version, the resolved version will\\nautomatically be pinned to the configuration of your choice. For example, say we have the following\\nuser config:\\n\\n```toml title=\\"~/.proto/config.toml\\"\\npin-latest = \\"local\\"\\n```\\n\\nAnd we run one of the following commands:\\n\\n```shell\\n$ proto install go\\n$ proto install node latest\\n```\\n\\nThen the resolved version of the tool will automatically be set to the `.prototools` file in the\\ncurrent directory. Handy right?\\n\\n## New `proto outdated` command\\n\\nBy request of the community, we\'re introducing yet another new command,\\n[`proto outdated`](/docs/proto/commands/outdated). If you\'re familiar with package managers, you can\\nprobably guess what this command does! It\'ll check for newer available versions, for all tools\\nconfigured in the closest `.prototools` file. Very handy for keeping your tools up to date.\\n\\n```\\n$ proto outdated\\n\\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.19.0) for a full list\\nof changes.\\n\\n- Added `PROTO_WASM_LOG` environment variable to toggle the logging of messages from Extism and WASM\\n plugins. Useful for debugging.\\n- Updated `proto install` to auto-clean stale plugins after a successful installation."},{"id":"moon-v1.14","metadata":{"permalink":"/blog/moon-v1.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-25_moon-v1.14.mdx","source":"@site/blog/2023-09-25_moon-v1.14.mdx","title":"moon v1.14 - Improvements to running targets and toolchain versions","description":"In this release, we\'ve focused on loosening restrictions to improve the overall developer","date":"2023-09-25T00:00:00.000Z","formattedDate":"September 25, 2023","tags":[{"label":"run","permalink":"/blog/tags/run"},{"label":"target","permalink":"/blog/tags/target"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"version","permalink":"/blog/tags/version"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"shorthand","permalink":"/blog/tags/shorthand"}],"readingTime":2.665,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.14","title":"moon v1.14 - Improvements to running targets and toolchain versions","authors":["milesj"],"tags":["run","target","toolchain","version","ci","shorthand"],"image":"./img/moon/v1.14.png"},"prevItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},"nextItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"}},"content":"In this release, we\'ve focused on loosening restrictions to improve the overall developer\\nexperience.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shorthand for `moon run`\\n\\nThis has been a long requested feature and we\'re happy to finally deliver it! You can now omit the\\n\\"run\\" keyword for the [`moon run`](/docs/commands/run) command, just so long as the first non-option\\nargument is a target (must contain a `:`).\\n\\n```shell\\n# v1.13\\n$ moon run app:build\\n\\n# v1.14+\\n$ moon app:build\\n```\\n\\n## Choose targets for `moon ci`\\n\\nWhen we initially built [`moon ci`](/docs/commands/ci), we wanted a solution that simply ran\\neverything in CI that _should be ran_, taking care of all the complicated logic to determine\\naffected tasks, comparing Git branches, gathering targets, partitioning across jobs, etc... And it\\ndoes just that, and it does it well!\\n\\nHowever, one major caveat to using `moon ci` is that it runs _every task_ in the workspace (assuming\\nthey\'re affected). This has been quite a blocker for adoption as teams may want fine-grained control\\nof their CI. For example, running build tasks in one job, lint tasks in another, so on and so forth.\\n\\nIn this release, we\'ve made the necessary changes to allow these workflows, by supporting a list of\\ntargets for `moon ci`, similar to how `moon run` works. If no targets are provide, the existing \\"run\\neverything\\" logic will be used.\\n\\n```shell\\n# v1.13\\n$ moon ci\\n\\n# v1.14+\\n$ moon ci :build :lint :etc\\n```\\n\\nSplitting targets across jobs is demonstrated with the following GitHub Action workflow:\\n\\n```yaml title=\\".github/workflows/ci.yml\\"\\nname: \'CI\'\\non:\\n push:\\n branches:\\n - \'master\'\\n pull_request:\\njobs:\\n build:\\n name: \'Build\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :build\'\\n format-lint:\\n name: \'Format + Lint\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :format :lint\'\\n test:\\n name: \'Test\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :test\'\\n```\\n\\n## Configure partial toolchain versions\\n\\nSince moon\'s inception, our [integrated toolchain](/docs/concepts/toolchain) required fully\\nqualified semantic versions (major.minor.patch) for tools. This was by design to ensure that we\\ncould provide a consistent, reliable, and deterministic experience for all users. This solved the\\nproblem of \\"Is X using the correct version of Y?\\".\\n\\nHowever, this also meant that we were unable to support partial versions (major.minor) of tools,\\nwhich is a common use case and request for many users. Over the last few months, we\'ve made immense\\nprogress in [proto](/proto) on how it parses, resolves, and evaluates versions, known as the\\n[version specification](https://crates.io/crates/version_spec).\\n\\nWe felt the time was right to pull these changes into moon, and as such, all `version` fields in\\n[`.moon/toolchain.yml`](/docs/config/toolchain) now support partial versions, version\\nrequirements/ranges, and even aliases!\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n version: \'20.7\' # ~20.7\\n npm:\\n version: \'^9\'\\n\\nrust:\\n version: \'stable\'\\n```\\n\\n:::info\\n\\nLearn more about how this works under the hood in the\\n[official version specification documentation](/docs/concepts/toolchain#version-specification).\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.14.0) for a full list\\nof changes.\\n\\n- Added `packemon`, `sveltekit`, `vite`, `vitest` to\\n [moonrepo/moon-configs](https://github.com/moonrepo/moon-configs).\\n- Updated `.moon/tasks` to support nested folders, for better organization of task files.\\n- Improved handling of certificates and proxies.\\n- Updated to proto v0.18."},{"id":"proto-v0.18","metadata":{"permalink":"/blog/proto-v0.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx","source":"@site/blog/2023-09-18_proto-v0.18.mdx","title":"proto v0.18 - List installed tools and configure HTTP client","description":"Today we\'ve got a small release that includes some helpful features.","date":"2023-09-18T00:00:00.000Z","formattedDate":"September 18, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"http","permalink":"/blog/tags/http"},{"label":"registry","permalink":"/blog/tags/registry"},{"label":"index","permalink":"/blog/tags/index"}],"readingTime":1.83,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.18","title":"proto v0.18 - List installed tools and configure HTTP client","authors":["milesj"],"tags":["proto","http","registry","index"],"image":"./img/proto/v0.18.png"},"prevItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},"nextItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"}},"content":"Today we\'ve got a small release that includes some helpful features.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto tools` command\\n\\nAre you curious what tools you have installed? And more specifically, which versions? What about\\nconfigured aliases? Until now, you had to manually check the `~/.proto/tools` directory for this\\ninformation, but now, you can simply run [`proto tools`](/docs/proto/commands/tools) to get a list\\nof all installed tools.\\n\\nThis command will list all tools that have been installed, along with their installed versions,\\nrelevant timestamps, available aliases, and store location.\\n\\n```shell\\n$ proto tools\\ngo - Go\\n Store: ~/.proto/tools/go\\n Versions:\\n 1.20.0 - installed 08/24/23, last used 09/18/23\\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\\n\\nnode - Node.js\\n Store: ~/.proto/tools/node\\n Aliases:\\n ~20 = stable\\n Versions:\\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\\n 18.14.0 - installed 09/04/23, last used 09/04/23\\n 18.17.1 - installed 09/04/23, last used 09/04/23\\n 19.0.0 - installed 09/03/23\\n 20.0.0 - installed 09/03/23\\n 20.6.0 - installed 09/04/23, last used 09/18/23\\n```\\n\\n> This information can also be represented as JSON by passing the `--json` flag.\\n\\n## New `[http]` user settings\\n\\nFurthermore, we\'ve added a new [`[http]` setting to `~/.proto/config.toml`](/docs/proto/config#http)\\nthat allows you to configure aspects of the HTTP client, which is primarily used for downloading\\ntools.\\n\\nThis may useful if you\'re behind a proxy, a VPN, or corporate network, and certain requests and\\ncertificates are blocked.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\n[http]\\nproxies = [\\"http://intra.net/proxy\\"]\\nroot-cert = \\"/path/to/root/cert.pem\\"\\n```\\n\\n## Index for third-party tools\\n\\nNow that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a\\nthird-party index, a registry of all available tools. We\'ve updated the official\\n[Supported tools](/docs/proto/tools) documentation to now include third-party tools.\\n\\nAt this time, the list of tools is powered by a JS/JSON object,\\n[which can be found here](https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx).\\nIn the future, we may move this to a database, add filtering, sorting, and everything else necessary\\nfor showcasing tools maintained by the community!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.18.0) for a full list\\nof changes.\\n\\n- For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML,\\n which may cause breakages depending on a version mismatch between proto and the plugin."},{"id":"proto-v0.17","metadata":{"permalink":"/blog/proto-v0.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx","source":"@site/blog/2023-09-11_proto-v0.17.mdx","title":"proto v0.17 - Experimental Python support and canary releases","description":"This release implements two long requested features, Python language support and canary releases.","date":"2023-09-11T00:00:00.000Z","formattedDate":"September 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"tool","permalink":"/blog/tags/tool"},{"label":"canary","permalink":"/blog/tags/canary"},{"label":"python","permalink":"/blog/tags/python"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.17","title":"proto v0.17 - Experimental Python support and canary releases","authors":["milesj"],"tags":["proto","plugin","tool","canary","python"],"image":"./img/proto/v0.17.png"},"prevItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"},"nextItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"}},"content":"This release implements two long requested features, Python language support and canary releases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Experimental Python support\\n\\nIt\'s been quite a while since we\'ve introduced a new language into proto, and we\'re excited to\\nannounce the highly requested language, Python! Since Python is now an\\n[officially supported language](https://github.com/moonrepo/python-plugin), installing Python (and\\npip) is as simple as:\\n\\n```shell\\n$ proto install python\\n```\\n\\nHowever, we\'re marking language support as experimental for the time being. We expect our\\nimplementation to work for modern Python versions, but may not work for older versions, especially\\nPython 2. The reasons for this are as follows:\\n\\n- proto will install pre-built binaries from\\n [indygreg/python-build-standalone](https://github.com/indygreg/python-build-standalone). This is\\n an unofficial project, and _does not_ support all Python versions.\\n- If [`python-build`](https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md) is\\n available, we\'ll attempt to use it to build + install Python. This currently requires `pyenv` to\\n be installed, and _does not_ work on Windows.\\n- Furthermore, we only support `cpython` at the moment, and do not support `pypy`, `jython`, or\\n other Python implementations. It\'s unknown whether this functionality should be in the core Python\\n plugin, or another plugin entirely.\\n\\nIn a future proto version, we want to support a true \\"build from source\\" approach for all tools.\\nOnce that functionality has landed, we can properly support Python on all platforms, but until then,\\nlet us know how this works for you!\\n\\n## Install canary releases\\n\\nA canary release is a mechanism for rolling out new features and changes to a small subset of users,\\nwithout it being an official release on an official channel. This allows users to opt-in and test\\nfunctionality if they so choose. Canary releases are not meant to be used in production, and may\\ncontain bugs or breaking changes. A canary is similar to a nightly (or weekly) release, depending on\\nthe tool.\\n\\nWe now support this workflow in proto. To install a canary release, simply use the\\n[`--canary` flag when installing a tool](/docs/proto/commands/install):\\n\\n```shell\\n$ proto install <tool> --canary\\n```\\n\\nThis will install the latest canary release to `~/.proto/tools/<tool>/canary`, and _only_ the latest\\nrelease can be used. Re-installing with `--canary` will overwrite the previous canary installation.\\n\\nHowever, because we [detect a version to run with at runtime](/docs/proto/detection), how should you\\nactually run canary? The easiest way is to prefix the shim with an environment variable:\\n\\n```shell\\n$ PROTO_BUN_VERSION=canary bun ./index.ts\\n```\\n\\nOr to explicitly configure the version in [`.prototools`](/docs/proto/config):\\n\\n```toml\\nbun = \\"canary\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.17.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated the following locations to support partial versions and aliases:\\n - Tool versions in `.prototools`.\\n - Pinning a default version with `proto install --pin`.\\n - Setting global version with `proto global`.\\n - Setting local version with `proto local`.\\n- Node, npm, pnpm, and yarn will again extract a version from `package.json` engines."},{"id":"moon-v1.13","metadata":{"permalink":"/blog/moon-v1.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx","source":"@site/blog/2023-09-05_moon-v1.13.mdx","title":"moon v1.13 - Toolchain now uses WASM plugins","description":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.","date":"2023-09-05T00:00:00.000Z","formattedDate":"September 5, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"}],"readingTime":2.76,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.13","title":"moon v1.13 - Toolchain now uses WASM plugins","authors":["milesj"],"tags":["tasks","proto","wasm"],"image":"./img/moon/v1.13.png"},"prevItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"},"nextItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"}},"content":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.\\n\\n\x3c!--truncate--\x3e\\n\\n## proto upgrade and WASM plugins\\n\\nOver the last few months, we\'ve made immense strides on [proto](/proto), our multi-language\\ntoolchain. For those of you unaware, moon\'s toolchain is built on top of proto, and we accomplish\\nthis by utilizing the same Rust code between both tools.\\n\\nHowever, moon has been locked to [proto v0.12](/blog/proto-v0.12), which was a purely Rust based\\nimplementation. With the release of [proto v0.13](/blog/proto-v0.13) and onward, proto has moved to\\na WASM based plugin architecture (with the core still in Rust), which allows us to support more\\nlanguages, and enables developers to write plugins in non-Rust languages.\\n\\nAnd since our WASM plugins have stabilized by [proto v0.16](/blog/proto-v0.16), we felt it was time\\nto finally upgrade moon\'s implementation to the latest and greatest. So what does this mean exactly?\\nA few things:\\n\\n- If you\'re using moon\'s [toolchain](/docs/config/toolchain) (like `node`), we will now download the\\n [Node.js WASM plugins](https://github.com/moonrepo/node-plugin) in the background (to\\n `~/.proto/plugins`).\\n- These plugins are in charge of downloading and installing the Node.js, npm, pnpm, or yarn version\\n specified in your toolchain configuration.\\n- The entire plugin flow is now logged to the console, so you can see what\'s happening behind the\\n scenes.\\n- In the future (most likely moon v2), our platform and language integration will also be powered by\\n WASM plugins. This enables you to build your own custom plugins!\\n\\n:::info\\n\\nThis entire process should be transparent to all users, and you should not notice any changes.\\nHowever, in case this upgrade causes issues, we wanted to isolate it from other changes, hence the\\nlight release!\\n\\n:::\\n\\n## Allow tasks to fail\\n\\n\\"Allow tasks to fail?\\" You ask yourself. \\"Doesn\'t that defeat the point of a task runner?\\" You\\nquestion further. \\"You\'re not wrong!\\" We reply. These questions assume a perfect repository state,\\nwhere all tasks either pass or fail, and there\'s no middle ground. In reality, very rarely is that\\ntrue, and we want to support those stuck in the middle, such as:\\n\\n- In a heavy migration and it\'s known that a task is currently broken.\\n- The task is flaky but you\'ve been unable to find the root cause.\\n- Upstream dependencies have published a backwards incompatible change, and you\'re waiting on a fix.\\n- And of course, in the middle of adopting moon!\\n\\nFor situations where a task consistently or sometimes fails, but you don\'t want it to fail the\\nentire pipeline (especially in CI), you can enable the new\\n[`allowFailure` task option](/docs/config/project#allowfailure).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n typecheck:\\n command: \'tsc --build\'\\n options:\\n allowFailure: true\\n```\\n\\nWhen enabled, failing tasks will no longer bail [`moon run`](/docs/commands/run) early, nor will it\\nexit [`moon ci`](/docs/commands/ci) with a non-zero exit code. However, we still built guard rails\\naround this feature, as we don\'t want to encourage bad practices, and one of these guard rails is\\nthat tasks that enable `allowFailure` _cannot_ be depended on by other tasks, as we cannot guarantee\\nthat it\'s side-effect free.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.13.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated `runner.archivableTargets` to support tag scoped targets.\\n- Updated `moon query tasks --affected` to filter based on affected task, instead of affected\\n project."},{"id":"proto-v0.16","metadata":{"permalink":"/blog/proto-v0.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx","source":"@site/blog/2023-09-04_proto-v0.16.mdx","title":"proto v0.16 - Add, remove, and purge plugins","description":"This release adds functionality for managing plugins and purging the proto store.","date":"2023-09-04T00:00:00.000Z","formattedDate":"September 4, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.445,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.16","title":"proto v0.16 - Add, remove, and purge plugins","authors":["milesj"],"tags":["proto","plugin"]},"prevItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"},"nextItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"}},"content":"This release adds functionality for managing plugins and purging the proto store.\\n\\n\x3c!--truncate--\x3e\\n\\n## Add and remove plugins\\n\\nNow that proto has fully embraced a plugin based architecture, we thought it\'d be nice to support\\nthe management of these plugins through the CLI. This release adds two new commands:\\n[`proto add-plugin`](/docs/proto/commands/add-plugin) and\\n[`proto remove-plugin`](/docs/proto/commands/remove-plugin).\\n\\nAdding a plugin requires a unique ID and what we call a locator, which is a string that dictates\\nwhere to locate and download the plugin from. Here\'s an example for Node.js, but this isn\'t\\nnecessary as it\'s built-in:\\n\\n```shell\\n$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\\n```\\n\\nAdditionally, removing a plugin is even easier.\\n\\n```shell\\n$ proto remove-plugin node\\n```\\n\\n## Purge tools and plugins\\n\\nproto has supported cleaning for quite some time through the\\n[`proto clean`](/docs/proto/commands/clean) command (and the\\n[`auto-clean` setting](/docs/proto/config#user-configuration)), which would automatically delete\\ninstalled tool versions and temporary files that are older then a specific timeframe. This helps to\\nfree up disk space for unused or rarely used tools.\\n\\nIn this release, we\'re expanding the `clean` command\'s functionality with a concept known as\\npurging, which will \\"delete entirely\\". The first being the new `--purge` option, which will delete a\\ntool, its manifest, _all_ installed versions, and the entire `~/.proto/tools/<id>` directory.\\n\\n```shell\\n# Delete all traces of Node.js\\n$ proto clean --purge node\\n```\\n\\nAdditionaly, a new `--purge-plugins` option can be used to delete all downloaded plugins (the\\n`~/.proto/plugins` directory). Useful for house keeping or if you want to start fresh.\\n\\n```shell\\n$ proto clean --purge-plugins\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.16.0) for a full list\\nof changes.\\n\\n- Added folder locking during tool installation to avoid colliding processes.\\n- Renamed `PROTO_ROOT` to `PROTO_HOME`, but we\'ll support `PROTO_ROOT` for the time being."},{"id":"proto-v0.15","metadata":{"permalink":"/blog/proto-v0.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx","source":"@site/blog/2023-08-23_proto-v0.15.mdx","title":"proto v0.15 - Install and uninstall globals","description":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.","date":"2023-08-23T00:00:00.000Z","formattedDate":"August 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"global","permalink":"/blog/tags/global"}],"readingTime":1.48,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.15","title":"proto v0.15 - Install and uninstall globals","authors":["milesj"],"tags":["proto","wasm","plugin","global"]},"prevItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"},"nextItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"}},"content":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.\\n\\n\x3c!--truncate--\x3e\\n\\n## Uninstall global dependencies\\n\\nproto has supported [installing globals since v0.5](./proto-v0.5), but there\'s been no way to\\nuninstall an existing global, until now! In this release, we\'re introducing the\\n[`proto uninstall-global`](/docs/proto/commands/uninstall-global) command, which will do just that!\\nThe API is exactly the same as its installation counter-part.\\n\\n```shell\\nproto install-global node prettier\\n\\n# On second thought, nevermind...\\nproto uninstall-global node prettier\\n```\\n\\n### WASM functions\\n\\nImplementing this command was rather straight forward, but most of the work went into supporting\\n[`install_global` and `uninstall_global`](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\nfunctions for WASM plugins, and then updating all existing plugins! For those of you writing your\\nown plugins, here\'s an example of what the Rust code looks like:\\n\\n```rust\\n#[plugin_fn]\\npub fn install_global(\\n Json(input): Json<InstallGlobalInput>,\\n) -> FnResult<Json<InstallGlobalOutput>> {\\n let result = exec_command!(inherit, \\"npm\\", [\\"install\\", \\"--global\\", &input.dependency]);\\n\\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\\n}\\n```\\n\\n### TOML setting\\n\\nWe\'ve also updated our TOML plugins to support uninstalling globals through the new\\n[`globals.uninstall-args`](/docs/proto/toml-plugin#global-packages) setting. Hopefully the name is\\nself explanatory, but it\'s a list of arguments passed to the tool\'s binary, that\'ll uninstall the\\nglobal.\\n\\n```toml\\n# ...\\n\\n[globals]\\ninstall-args = [\\"install\\", \\"--global\\", \\"{dependency}\\"]\\nuninstall-args = [\\"uninstall\\", \\"--global\\", \\"{dependency}\\"]\\n```\\n\\n## Improved WASM documentation\\n\\nWith each release we\'re slowly stabilizing the WASM and TOML APIs for an official v1 release (which\\nis soon), and with this, it requires more documentation. As part of this release, we\'ve done a giant\\npolish pass on our WASM documentation, and have included the following sections:\\n\\n- [Virtual paths](/docs/proto/wasm-plugin#virtual-paths)\\n- [Host environment](/docs/proto/wasm-plugin#host-environment)\\n- [Host functions](/docs/proto/wasm-plugin#host-functions)\\n- [Tool ID and context](/docs/proto/wasm-plugin#tool-id-and-context)\\n- [Installing and uninstalling globals](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.15.0) for a full list\\nof changes.\\n\\n- Major WASM API improvements, including backwards incompatible changes."},{"id":"moon-v1.12","metadata":{"permalink":"/blog/moon-v1.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx","source":"@site/blog/2023-08-21_moon-v1.12.mdx","title":"moon v1.12 - Task improvements: extending, interactive, and more","description":"In this release, we focused heavily on improving tasks, its configuration, and related systems.","date":"2023-08-21T00:00:00.000Z","formattedDate":"August 21, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":3.32,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.12","title":"moon v1.12 - Task improvements: extending, interactive, and more","authors":["milesj"],"tags":["tasks","inheritance"],"image":"./img/moon/v1.12.png"},"prevItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"},"nextItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"}},"content":"In this release, we focused heavily on improving tasks, its configuration, and related systems.\\n\\n\x3c!--truncate--\x3e\\n\\n## Extending sibling or inherited tasks\\n\\nThree months ago, we posted an\\n[RFC on how to support task extending / task variants](https://github.com/moonrepo/moon/issues/849).\\nOn paper this doesn\'t sound like a hard problem to solve, but internally it would of been an uphill\\nbattle to implement. Thanks to previous releases from the past few months, and the rewrite of the\\nproject graph, task builder, and more, this implementation was a breeze. To finalize the RFC, we\\nwent with option 2, by adding a new `extends` field to task configurations.\\n\\nWith this new addition, we can now rewrite this old configuration, which was needlessly\\nrepetitive...\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n command: \'eslint . --fix\'\\n local: true\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n```\\n\\nInto the following configuration.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n extends: \'lint\'\\n args: \'--fix\'\\n local: true\\n```\\n\\nWe\'re very happy with this solution, as it\'s far more readable, maintainable, and doesn\'t introduce\\nyet another paradigm to learn. Our goal was to be as familiar as possible, while providing extensive\\nfunctionality behind the scenes, which we believe to have achieved.\\n\\nSome other interesting facts around task extending:\\n\\n- When extending a task, [merge strategies](/docs/concepts/task-inheritance#merge-strategies) are\\n applied in a similar fashion to inheritance.\\n- Inherited tasks can be extended from by project-level tasks.\\n- It\'s possible to create multiple extended chains.\\n\\n## Configure tasks as interactive\\n\\nSix months ago, we added support for [interactive tasks in v0.24](./v0.24#interactive-tasks), but\\nonly if certain conditions were met: if only 1 target is running, they are considered interactive,\\nor if the `--interactive` option was passed to [`moon run`](/docs/commands/run). However, we believe\\nit nice to support interactive tasks through task configuration directly, but it required some\\nthought into how this would work within the dependency graph and pipeline, as only 1 task can\\ninteract with stdin at a time.\\n\\nWe solved this problem by reworking our dependency graph so that interactive tasks are isolated from\\nother actions in the graph, and are not run in parallel with other actions. This will result in\\nlonger dependency chains, but results in a working stdin solution.\\n\\nTo mark a task as interactive, enable the [`options.interactive`](/docs/config/project#interactive)\\nsetting.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n init:\\n command: \'init-app\'\\n options:\\n interactive: true\\n```\\n\\n## Tokens in enviroment variables\\n\\nUp until now, [token functions and variables](/docs/concepts/token) were only supported in task\\ncommands, args, inputs, and outputs, but not environment variables... why? Honestly, there was no\\nreal reason they weren\'t supported, it simply never crossed our mind! But thanks to requests from\\nthe community, both token functions and variables are now supported in task\\n[`env`](/docs/config/project#env-1).\\n\\nThis is great for propagating moon values to other systems. For example, say you want to use moon\\nproject names for Sentry, keeping a 1:1 mapping.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n start:\\n command: \'run-server\'\\n env:\\n SENTRY_PROJECT: \'$project\'\\n```\\n\\nIf you\'re familiar with tokens, you may be asking yourself, \\"How do token functions work since they\\nexpand to a list of paths?\\" That\'s a great question! When token functions are used in an environment\\nvariable, like `@group(sources)`, the list of paths will be joined with a comma (`,`).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n # ...\\n env:\\n SRCS: \'@group(sources)\'\\n```\\n\\nSince the environment variable is simply a string, you could parse it with your language of choice\\nto extract the list of paths.\\n\\n```js\\nconst paths = process.env.SRCS.split(\',\');\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.12.0) for a full list\\nof changes.\\n\\n- Added git worktree support.\\n- Updated task `outputs` to support negated globs.\\n- Will now log a warning to the console if a configuration file uses the `.yaml` extension."},{"id":"proto-v0.14","metadata":{"permalink":"/blog/proto-v0.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx","source":"@site/blog/2023-08-11_proto-v0.14.mdx","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","description":"With this release, we\'ve finished our migration to a WASM based plugin architecture.","date":"2023-08-11T00:00:00.000Z","formattedDate":"August 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.14","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"},"nextItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"}},"content":"With this release, we\'ve finished our migration to a WASM based plugin architecture.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full migration to WASM\\n\\nIn [our last release](./proto-v0.13), we migrated the Bun, Deno, and Go plugins to WASM. In this\\nrelease, we\'re excited to announce that we have completed our WASM migration by also converting\\nNode.js (and npm, etc) and Rust to WASM plugins. We\'ve also updated our TOML plugin layer to use\\nWASM under the hood.\\n\\nWith this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the\\nconsumers, to build your own plugins! We have plans for additional APIs in the next release,\\nprimarily installing and uninstall globals, and a hooks system, so look forward to that! To learn\\nmore about our official plugins, check out the their repositories!\\n\\n- [Bun](https://github.com/moonrepo/bun-plugin)\\n- [Deno](https://github.com/moonrepo/deno-plugin)\\n- [Go](https://github.com/moonrepo/go-plugin)\\n- [Node](https://github.com/moonrepo/node-plugin)\\n- [Rust](https://github.com/moonrepo/rust-plugin)\\n- [Schema](https://github.com/moonrepo/schema-plugin)\\n\\nThis release may seem light, but we\\n[rewrote the entire core](https://github.com/moonrepo/proto/pull/161) from the ground up to support\\na pure plugin based architecture. This was a lot of work, but our implementation is far easier to\\nwork with, and more robust. As part of this process, we improved version and range handling, archive\\nunpacking, and much more!\\n\\n> Because of the rewrite, we may have introduced a few bugs. Please report any issues!\\n\\n## Breaking changes for TOML plugins\\n\\nIn preparation for the next release, and as clean up during the rewrite, we\'ve made a few breaking\\nchanges to the TOML schema, primarily around global handling. To start, this old code:\\n\\n```toml\\n[install]\\nglobals-dir = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\nglobal-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nCan now be rewritten as:\\n\\n```toml\\n[globals]\\nlookup-dirs = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\ninstall-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nAnd lastly, the `install.unpack` setting has been removed. We believe our installation layer is\\nsmart enough to unpack or move files automatically.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.14.0) for a full list\\nof changes.\\n\\n- Versions defined in `.prototools` must be fully-qualified semantic versions. Partial versions\\n (missing patch or minor) are no longer supported. This may change in the future based on feedback.\\n- Tool and plugin names must now be in kebab-case.\\n- Node\\n - Yarn 2+ is now installed using `@yarnpkg/cli-dist`. We no longer downgrade to the latest v1.\\n - Will no longer detect a version from `engines` in `package.json`.\\n- Rust\\n - Will now detect a version/channel from `rust-toolchain.toml` and `rust-toolchain`."},{"id":"moon-v1.11","metadata":{"permalink":"/blog/moon-v1.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx","source":"@site/blog/2023-07-31_moon-v1.11.mdx","title":"moon v1.11 - Next-generation project graph","description":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of","date":"2023-07-31T00:00:00.000Z","formattedDate":"July 31, 2023","tags":[{"label":"project-graph","permalink":"/blog/tags/project-graph"},{"label":"project","permalink":"/blog/tags/project"}],"readingTime":4.095,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.11","title":"moon v1.11 - Next-generation project graph","authors":["milesj"],"tags":["project-graph","project"],"image":"./img/moon/v1.11.png"},"prevItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"},"nextItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"}},"content":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of\\nmoon.\\n\\n\x3c!--truncate--\x3e\\n\\n## New project graph\\n\\nOne of the first features that was built for moon was the project graph, as this was required to\\ndetermine relationships between tasks and projects. Its initial implementation was rather simple, as\\nit was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project\\ngraph, and overtime, it has accrued a lot of cruft and technical debt.\\n\\nOne of the biggest pain points has been the project graph cache, and correctly invalidating the\\ncache for all necessary scenarios. If you\'ve been using moon for a long time, you\'re probably aware\\nof all the hot fixes and patches that have been released. Another problem with the cache, is that it\\nincluded hard-coded [file system paths](https://github.com/moonrepo/moon/issues/937) and\\n[environment variables](https://github.com/moonrepo/moon/issues/896), both of which would not\\ninvalidate the cache when changed.\\n\\nWe felt it was time to rebuild the project graph from the ground up. Some of this work has already\\nlanded in [previous releases](./moon-v1.9#rewritten-task-inheritance).\\n\\n### Old implementation\\n\\nFor those of you who are interested in the technical details, here\'s a quick overview of how the old\\nproject graph worked. To start, the graph was composed around the following phases:\\n\\n- **Build** - Projects are loaded into the graph (nodes), relationships are linked (edges),\\n configurations are read, tasks are inherited, and platform/language rules are applied.\\n- **Expand** - In all tasks, token variables and functions are expanded/substituted, dependencies\\n are expanded (`^:deps`, etc), `.env` files are read (when applicable), so on and so forth.\\n- **Validate** - Enforces project and task boundaries and constraints.\\n\\nThis is quite a lot of work, and it was all done in _a single pass_. What this means is that for\\neach project loaded into the graph, we would recursively build -> expand -> validate, until all\\nprojects have been loaded, synchronously at once in the same thread. Because this is a rather\\nexpensive operation, the project graph cache was introduced to avoid having to do this work on every\\nrun.\\n\\nMakes sense, right? For the most part yes, but there is a core problem with the solution above, and\\nif you\'ve noticed it already, amazing! The problem is that out of these 3 phases, only the build\\nphase is truly cacheable, as the expand and validate phases are far too dynamic and dependent on the\\nenvironment. This means that the cache is only partially effective, and in some cases, entirely\\nbroken.\\n\\nAnother unrelated problem with this solution, is that because everything is built in a single pass,\\nadvanced functionality that requires multiple passes is not possible and has been stuck on the\\nbacklog.\\n\\n### New implementation\\n\\nFor backwards compatibility, the new project graph works in a similar manner, but has none of the\\nshortcomings of the old implementation (hopefully). To start, the new project graph still has the\\nsame 3 phases, but they are _no longer processed in a single pass_, instead...\\n\\nThe build phase is now asynchronous, enabling deeper interoperability with the rest of the\\nasync-aware codebase. However, the critical change is that the project graph cache is now written\\n_after_ the build phase (and read _before_), instead of after the entire graph being generated.\\n\\n> The new cache file is `.moon/cache/states/partialProjectGraph.json`, and is named partial because\\n> tasks have not been expanded. Use `moon project-graph --json` for a fully expanded graph.\\n\\nThe expand phase has changed quite a bit. Instead of expanding everything at once, projects and\\ntasks are only expanded when they are needed. For example, if only running a single target, we\'ll\\nnow only expand that project and task, instead of _everything_ in the graph. With this change, you\\nshould potentially see performance increases, unless you\'re using `moon ci` or `moon check --all`.\\n\\nAnd lastly, validation is still the same, but has been reworked so that we can easily extend it with\\nmore validation rules in the future.\\n\\n### Unlocked features\\n\\nWith these changes to building and expanding, we\'ve unlocked a few new features that were not\\npossible before.\\n\\n- Task dependencies can now reference tag based targets. For example, say we want to build all React\\n projects before starting our application.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n deps:\\n - \'#react:build\'\\n```\\n\\n- Task commands and arguments will now substitute environment variables, by first checking `env`,\\n then those from the system.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'docker build --build-arg pkg=$PKG_NAME\'\\n env:\\n PKG_NAME: \'foo-bar\'\\n```\\n\\n- Project dependencies can now mark relationships as `build`. This is only applicable for languages\\n that support build dependencies, like Rust.\\n\\n```yaml title=\\"moon.yml\\"\\ndependsOn:\\n - id: \'foo\'\\n scope: \'build\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.11.0) for a full list\\nof changes.\\n\\n- Identifiers (project names, file groups, etc) can now be prefixed with underscores (`_`).\\n- Added Poetry detection support for Python projects.\\n- Added an `experiments` setting to `.moon/workspace.yml`."},{"id":"proto-v0.13","metadata":{"permalink":"/blog/proto-v0.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx","source":"@site/blog/2023-07-21_proto-v0.13.mdx","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","description":"With this release, we\'re embracing WASM even further.","date":"2023-07-21T00:00:00.000Z","formattedDate":"July 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2.195,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.13","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"},"nextItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"}},"content":"With this release, we\'re embracing WASM even further.\\n\\n\x3c!--truncate--\x3e\\n\\n## Core migration to WASM\\n\\nNow that WASM plugin support is up and running, we\'ve hit a non-ideal situation where we have\\nmultiple competing implementations for \\"tools\\" in proto. We currently have 3 different approaches:\\n\\n- Tools implemented in Rust and built into proto\'s core.\\n- TOML based plugins, with a simple Rust based wrapper.\\n- WASM based plugins.\\n\\nThis is far too many implementations to support, and makes it extremely difficult to add new\\nfeatures for tools, as it affects all 3. To remedy this situation, we\'ve decided to migrate all core\\ntools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will\\nstill be Rust, but will be slowly migrated into a truly pluggable architecture.\\n\\nTo test drive and experiment with this solution, we\'ve migrated\\n[Bun](https://github.com/moonrepo/bun-plugin), [Deno](https://github.com/moonrepo/deno-plugin), and\\n[Go](https://github.com/moonrepo/go-plugin) into WASM plugins, and starting with this release, they\\nare purely powered by WASM and have been removed entirely from the Rust implementation.\\n\\nIn the next release, we hope to migrate Node.js and Rust as well. And in a future release, the TOML\\nplugins will be compiled into\\n[`.wat` files](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format)\\nand loaded as WASM plugins. From here, we will have a single tool implementation, and can implement\\nsome really exciting features!\\n\\n## New `github:` plugin configuration\\n\\nAlongside the `source:` configuration strategy, plugins can now be configured with the `github:`\\nstrategy to locate WASM files from GitHub releases. For example, the `bun_plugin.wasm` file will be\\ndownloaded from our\\n[`bun-plugin`\'s latest release](https://github.com/moonrepo/bun-plugin/releases).\\n\\n[Learn more about this new locator scope!](/docs/proto/plugins#github)\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nbun = \\"github:moonrepo/bun-plugin\\"\\n```\\n\\n> Bun support is built into proto, there is merely an example!\\n\\n## New `proto plugins` commands\\n\\nWith the advent of plugins, we thought it would be nice to know which plugins are actually\\nconfigured and in use, without having to manually search config files across the file system, and as\\nsuch, have added a new [`proto plugins`](/docs/proto/commands/plugins) command.\\n\\nThis command is simple. It will list all plugins that are currently configured for the current\\nproject, by loading all `.prototools` files up the tree, and loading the user\\n`~/.proto/config.toml`.\\n\\n```shell\\n$ proto plugins\\nbun - Bun\\n GitHub: moonrepo/bun-plugin\\n Tag: latest\\n\\ndeno - Deno\\n GitHub: moonrepo/deno-plugin\\n Tag: latest\\n\\ngo - Go\\n GitHub: moonrepo/go-plugin\\n Tag: latest\\n```\\n\\n[Learn more about this new command!](/docs/proto/commands/plugins)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.13.0) for a full list\\nof changes.\\n\\n- Added documentation for writing [unit tests for WASM plugins](/docs/proto/wasm-plugin#unit-tests).\\n- Updated `proto clean` and `proto use` to load and merge all `.prototools` from the current\\n directory and upwards.\\n- Many WASM API improvements."},{"id":"moon-v1.10","metadata":{"permalink":"/blog/moon-v1.10","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx","source":"@site/blog/2023-07-10_moon-v1.10.mdx","title":"moon v1.10 - Mid-year quality of life improvements","description":"Instead of launching a large feature this release, we\'re focusing on quality of life and developer","date":"2023-07-10T00:00:00.000Z","formattedDate":"July 10, 2023","tags":[{"label":"quality","permalink":"/blog/tags/quality"},{"label":"life","permalink":"/blog/tags/life"},{"label":"qol","permalink":"/blog/tags/qol"},{"label":"ignore","permalink":"/blog/tags/ignore"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"debug","permalink":"/blog/tags/debug"}],"readingTime":3.6,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.10","title":"moon v1.10 - Mid-year quality of life improvements","authors":["milesj"],"tags":["quality","life","qol","ignore","hasher","vcs","ci","debug"],"image":"./img/moon/v1.10.png"},"prevItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"},"nextItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nInstead of launching a large feature this release, we\'re focusing on quality of life and developer\\nexperience improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Quality improvements\\n\\nIn the past 6 months, we\'ve released over 16 versions of moon, with our official v1.0 release among\\nthem. This is extremely impressive and we\'re very proud of the progress we\'ve made. To continue this\\ntrend, we\'ll be starting a new initiative that will land quality of life improvements (instead of\\nmajor features) every 6 months, starting with this release!\\n\\n### Potential breaking changes\\n\\nWhile APIs haven\'t changed, we have introduced some fixes for edge case that could be considered\\nbreaking, but for the most part, these changes probably won\'t affect you. With that being said...\\n\\nThe first fix is that tasks configured with the same `outputs` location (including glob overlap)\\nwill now error. This is extremely problematic for caching and hydration, as multiple tasks all\\nwriting to the same output will inflate the tarball, and cause unwanted side effects. To demonstrate\\nthis, the following is now an error:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'foo build\'\\n outputs:\\n - \'dist\'\\n\\n compile:\\n command: \'bar compile\'\\n outputs:\\n - \'dist\'\\n```\\n\\nThe other fix, which primarily applies to [`moon ci`][ci] and [`moon check`](/docs/commands/check),\\nis that a target will be skipped if one of its dependencies failed or has also been skipped.\\nPreviously the target would attempt to run and most likely fail since it relied on artifacts from\\nits dependencies (which don\'t exist). Another benefit of this change is that runs should be much\\nfaster, as we\'re not wasting time running targets that we know will fail, which is great for CI.\\n\\n### Ignore hashing input files\\n\\nWe\'re introducing 2 new settings to [`.moon/workspace.yml`](/docs/config/workspace) that\'ll provide\\nmore control over the hashing flow, [`hasher.ignorePatterns`](/docs/config/workspace#ignorepatterns)\\nand [`hasher.ignoreMissingPatterns`](/docs/config/workspace#ignoremissingpatterns).\\n\\nThe `ignorePatterns` setting can be used to entirely ignore a file (using glob patterns) from being\\nhashed, and in turn, exclude it as an input source. For example, say we want to ignore all image\\nfiles.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nhasher:\\n ignorePatterns:\\n - \'**/*.{png,svg}\'\\n```\\n\\nThe `ignoreMissingPatterns` setting pairs with\\n[`hasher.warnOnMissingInputs`](/docs/config/workspace#warnonmissinginputs). When enabled, moon will\\nlog a warning to the terminal that an input is missing. This is useful for uncovering\\nmisconfigurations, but can be quite noisy when inputs are truly optional. This new setting can be\\nused to filter these warnings.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nhasher:\\n warnOnMissingInputs: true\\n ignoreMissingPatterns:\\n - \'**/.eslintrc.*\'\\n - \'**/*.config.*\'\\n```\\n\\n### Customize base and head revision\\n\\nThe [`moon ci`][ci] command has always supported customizing the Git base and head revisions through\\nthe `--base` and `--head` options respectively. This was a requirement for running CI effectively,\\nby comparing across branches or commits. However, the [`moon run`][run] did not support this, as\\nthis command was designed to primarily be run locally, but it turns out, y\'all are using it in CI\\ntoo!\\n\\nTo improve the effectiveness of `moon run` in CI, we\'ve made the following improvements, all of\\nwhich require the `--remote` option to be passed.\\n\\n- Added support for `MOON_BASE` and `MOON_HEAD` environment variables, for customizing the base and\\n head revisions respectively (also supported in `moon ci`). If not defined, will use the default\\n branch and `HEAD`.\\n- When the current branch is the default branch, the base revision will be the previous commit.\\n Useful for commits landing on master/main.\\n\\n## New debugging a task guide\\n\\nRunning tasks is the most common way to interact with moon, so what do you do when your task isn\'t\\nworking as expected? Diagnose it of course! However, diagnosing the root cause of a broken task can\\nbe quite daunting:\\n\\n- Is configuration wrong?\\n- What about inheritance? Or merging?\\n- Is the task platform correct?\\n- Were tokens expanded correctly?\\n- What about variable substitution?\\n- So on and so forth...\\n\\nTo help answer these questions, we\'re excited to publish an\\n[in-depth guide for debugging a task](/docs/guides/debug-task)! These steps are the same steps we\\nuse internally to diagnose reported issues, or help the Discord community. We hope you find this\\nguide extremely beneficial!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View debugging a task guide\\" href=\\"/docs/guides/debug-task\\" size=\\"lg\\" />\\n</div>\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.10.0) for a full list\\nof changes.\\n\\n- Updated [`moon ci`][ci] to include a summary of all failed actions.\\n- Updated the run report to include stderr/stdout for all attempts.\\n\\n[ci]: /docs/commands/ci\\n[run]: /docs/commands/run"},{"id":"proto-v0.12","metadata":{"permalink":"/blog/proto-v0.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx","source":"@site/blog/2023-07-07_proto-v0.12.mdx","title":"proto v0.12 - Experimental WASM plugins","description":"After months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.","date":"2023-07-07T00:00:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.885,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.12","title":"proto v0.12 - Experimental WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"},"nextItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nAfter months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.\\n\\n\x3c!--truncate--\x3e\\n\\n## WASM plugins\\n\\nThree months ago, we [published an RFC](https://github.com/moonrepo/proto/issues/73) for supporting\\nplugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional\\ntools, instead of them being built into proto core (which is very time consuming).\\n\\nTwo months ago, we released support for [TOML plugins](/docs/proto/toml-plugin). These are very\\nsimple plugins powered by static configuration files. They\'re great for simple tools like CLIs and\\npre-built languages, as everything is powered by static HTTP URLs and file names. However, sometimes\\nyou need dynamic control...\\n\\nAnd after 2 months of development, and help from the [Extism team](https://extism.org/), we\'re\\nexcited to announce initial support for WASM plugins. WASM is a portable binary format, with\\nsandboxed access to the file system (via WASI), and the ability to execute processes and fetch URLs.\\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\\nTypeScript, and more. This removes the requirement of writing Rust and contributing to proto\\ndirectly!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View WASM plugin guide\\" href=\\"/docs/proto/wasm-plugin\\" size=\\"lg\\" />\\n</div>\\n\\n### Using WASM plugins\\n\\nOnce the `.wasm` file is publicly available for download, we can configure it as a plugin in\\n[`.prototools`](/docs/proto/config).\\n\\n```toml\\n[plugins]\\nmy-plugin = \\"source:https://domain.com/path/to/wasm/plugin.wasm\\"\\n```\\n\\nAnd execute all `proto` commands using the configured plugin identifier.\\n\\n```shell\\nproto install my-plugin\\n```\\n\\n### Example implementation\\n\\nThe official guide above walks you through creating a plugin, but to demonstrate the power of WASM\\nplugins, here\'s an example function that defines parameters for downloading and installing Node.js.\\nThis is written in Rust and using Extism\'s official PDK.\\n\\n```rust\\n#[plugin_fn]\\npub fn download_prebuilt(\\n Json(input): Json<DownloadPrebuiltInput>,\\n) -> FnResult<Json<DownloadPrebuiltOutput>> {\\n let version = input.env.version;\\n let arch = input.env.arch;\\n\\n let prefix = match input.env.os {\\n HostOS::Linux => format!(\\"node-v{version}-linux-{arch}\\"),\\n HostOS::MacOS => format!(\\"node-v{version}-darwin-{arch}\\"),\\n HostOS::Windows => format!(\\"node-v{version}-win-{arch}\\"),\\n other => {\\n return Err(PluginError::UnsupportedPlatform {\\n tool: NAME.into(),\\n platform: format!(\\"{:?}\\", other),\\n })?;\\n }\\n };\\n\\n let filename = if input.env.os == HostOS::Windows {\\n format!(\\"{prefix}.zip\\")\\n } else {\\n format!(\\"{prefix}.tar.xz\\")\\n };\\n\\n Ok(Json(DownloadPrebuiltOutput {\\n archive_prefix: Some(prefix),\\n download_url: format!(\\"https://nodejs.org/dist/v{version}/{filename}\\"),\\n download_name: Some(filename),\\n checksum_url: Some(format!(\\"https://nodejs.org/dist/v{version}/SHASUMS256.txt\\")),\\n ..DownloadPrebuiltOutput::default()\\n }))\\n}\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.12.0) for a full list\\nof changes."},{"id":"moon-v1.9","metadata":{"permalink":"/blog/moon-v1.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx","source":"@site/blog/2023-06-26_moon-v1.9.mdx","title":"moon v1.9 - VCS hooks management and improved task inheritance","description":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete","date":"2023-06-26T00:00:00.000Z","formattedDate":"June 26, 2023","tags":[{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"git","permalink":"/blog/tags/git"},{"label":"hooks","permalink":"/blog/tags/hooks"},{"label":"task","permalink":"/blog/tags/task"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":2.625,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.9","title":"moon v1.9 - VCS hooks management and improved task inheritance","authors":["milesj"],"tags":["vcs","git","hooks","task","inheritance"],"image":"./img/moon/v1.9.png"},"prevItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"},"nextItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"}},"content":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete\\nrewrite of our task inheritance layer.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for VCS hooks\\n\\nIn our last release, we added support for [code ownership](./moon-v1.8), to better help teams manage\\ntheir code review and approval workflows. To continue this trend of \\"features all companies require\\nbut don\'t have a good solution for\\", we\'re adding support for VCS hooks,\\n[starting with Git](https://git-scm.com/docs/githooks).\\n\\nIf you\'re unfamiliar with Git hooks, they\'re a mechanism for running scripts before or after certain\\nGit events. For example, before a commit is added, before pushing, or after merging. Hooks can be\\nused for such situations as:\\n\\n- Ensuring commit messages abide by a certain format.\\n- Ensuring affected project\'s source code pass linting and formatting checks.\\n- Validating configuration files.\\n- And much more!\\n\\n:::info\\n\\nFor more information, view our official in-depth [VCS hooks guide](/docs/guides/vcs-hooks)!\\n\\n:::\\n\\n### New `vcs` settings\\n\\nTo support hooks, we\'re introducing the `vcs.hooks` and `vcs.syncHooks` settings to\\n[`.moon/workspace.yml`](/docs/config/workspace). The former is where you configure the list of\\ncommands to run, grouped by hook type.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nvcs:\\n hooks:\\n pre-commit:\\n - \'pre-commit run\'\\n - \'moon run :lint --affected\'\\n```\\n\\nThe latter will automatically create and sync hooks with the local VCS checkout, enabling them going\\nforward. [Learn more about enabling hooks](/docs/guides/vcs-hooks#enabling-hooks), and choosing the\\napproach that works best for you or your team!\\n\\n### New `moon sync hooks` command\\n\\nAlthough moon can [automatically create](/docs/config/workspace#synchooksonrun) hooks when running a\\ntarget, this may be undesirable or abrasive for some developers. Instead, we also support an opt-in\\nsolution through the [`moon sync hooks`](/docs/commands/sync/hooks) command, which will manually\\ncreate the hooks.\\n\\n```shell\\n$ moon sync hooks\\n```\\n\\n## Rewritten task inheritance\\n\\nOne of the most complicated systems in moon is the task inheritance layer. On the surface, it sounds\\nrather simple, but internally it was very complicated. For common use cases, it worked very well,\\nbut for advanced use cases, how a task was \\"inherited and merged\\" was sometimes undefined behavior.\\n\\nOver the past year, we\'ve introduced many new features, such as\\n[implicit dependencies and inputs](./v0.23), [tag-based task inheritance](./moon-v1.2),\\n[project-level environment variables](./v0.23#project-level-environment-variables),\\n[custom languages](./v0.25#custom-project-language) and\\n[platforms](./v0.24#project-level-task-platform), and so much more. Each of these new features would\\nthrow yet another facet to be aware of during the task inheritance model, and over the past year, it\\nhas become rather unwieldy.\\n\\nTo rectify this situation before it becomes worse, we rewrote our\\n[project, task](https://github.com/moonrepo/moon/pull/921), and\\n[task inheritance](https://github.com/moonrepo/moon/pull/939) layers from the ground-up using a new\\nbuilder pattern, including writing all new unit tests, to properly and efficiently account for all\\nedge cases.\\n\\nGoing forward, tasks should be far more accurate and deterministic. If you encounter any weirdness,\\nit\'s either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not\\naccounted for in our current unit test suite. Please report them either way!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.9.0) for a full list of\\nchanges.\\n\\n- Added `--clean` and `--force` flags to `moon sync codeowners` command.\\n- Updated `moon init` to detect VCS providers and resolve fully-qualified tool versions.\\n- Improved VCS file handling, caching, and performance."},{"id":"proto-v0.11","metadata":{"permalink":"/blog/proto-v0.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-25_proto-v0.11.mdx","source":"@site/blog/2023-06-25_proto-v0.11.mdx","title":"proto v0.11 - New shims and better logging","description":"This is a small release that improves shims and logs.","date":"2023-06-25T00:00:00.000Z","formattedDate":"June 25, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"logging","permalink":"/blog/tags/logging"}],"readingTime":1.04,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.11","title":"proto v0.11 - New shims and better logging","authors":["milesj"],"tags":["proto","shim","logging"]},"prevItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"},"nextItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"}},"content":"This is a small release that improves shims and logs.\\n\\n\x3c!--truncate--\x3e\\n\\n## New and improved shims\\n\\nThe core facet of proto is our shims found at `~/.proto/bin`. They exist purely to re-route tool\\nexecutions internally to proto, so that we can detect the correct version of these tools to run.\\nHowever, maintaining and creating these shims has historically been very complicated. So we chose to\\nrewrite them from the ground-up!\\n\\nAll tools should continue to function exactly as they did before, if not better. Furthermore,\\nbecause of this new shim layer, we\'re now able to create what we call \\"secondary shims\\", like\\n[`bunx` for Bun](https://bun.sh/docs/cli/bunx), `pnpx` for pnpm, and `yarnpkg` for Yarn.\\n\\n## Better logging\\n\\nproto has supported logging since its initial release behind the `PROTO_LOG` environment variable.\\nHowever, this variable wasn\'t heavily documented, nor easily discoverable. So as an alternative, we\\nnow support a global `--log` option, which can be passed to any `proto` command.\\n\\n```shell\\n$ proto install node --log trace\\n```\\n\\nOn top of this, we also ran an audit of all our log calls, to improve messaging, include additional\\ninformation, rework applicable levels, and more. They should be far more readable!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.11.0) for a full list\\nof changes."},{"id":"moon-v1.8","metadata":{"permalink":"/blog/moon-v1.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx","source":"@site/blog/2023-06-12_moon-v1.8.mdx","title":"moon v1.8 - Code owners and shared configuration","description":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code","date":"2023-06-12T00:00:00.000Z","formattedDate":"June 12, 2023","tags":[{"label":"source","permalink":"/blog/tags/source"},{"label":"code","permalink":"/blog/tags/code"},{"label":"owners","permalink":"/blog/tags/owners"},{"label":"ownership","permalink":"/blog/tags/ownership"}],"readingTime":3.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.8","title":"moon v1.8 - Code owners and shared configuration","authors":["milesj"],"tags":["source","code","owners","ownership"],"image":"./img/moon/v1.8.png"},"prevItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"},"nextItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"}},"content":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code\\nownership, and sharing task configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for code ownership\\n\\nAn important workflow for companies of any size is reviewing code, and ensuring the right people are\\nreviewing and approving that code. This is especially true for large companies with hundreds of\\ndevelopers, or many distinct teams working in a single codebase.\\n\\nPopular VCS providers like [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/), and\\n[Bitbucket](https://bitbucket.org/product/) provide built-in features to handle such workflows,\\naptly named code owners. They all achieve this through a similar mechanism, a single `CODEOWNERS`\\nfile that maps file system paths to owners (users, teams, groups, etc). These owners are then\\nrequired to approve a pull/merge request because it can be merged into the base branch.\\n\\n:::info\\n\\nFor more information, view our official in-depth [code owners guide](/docs/guides/codeowners)!\\n\\n:::\\n\\n### Generate a `CODEOWNERS`\\n\\nManaging the `CODEOWNERS` file manually can be a tedious task, especially when you have hundreds of\\nprojects. To help with this, moon can generate the `CODEOWNERS` file for you,\\n[based on project owners](#new-project-owners-setting), formatted to your VCS provider of choice.\\nThis helps to avoid an out-of-date ownership file!\\n\\nWe\'re introducing a few new workspace settings to handle this, the first is\\n[`codeowners`](/docs/config/workspace#codeowners), which enables and configure code ownership as a\\nwhole, and the second is [`vcs.provider`](/docs/config/workspace#provider), which determines the VCS\\nprovider to generate the file for (and unlocks future features).\\n\\n```yaml title=\\".moon/workspace.yml\\"\\ncodeowners:\\n syncOnRun: true\\n globalPaths:\\n \'*\': [\'@admins\']\\n\\nvcs:\\n manager: \'git\'\\n provider: \'github\'\\n```\\n\\nThe settings above will generate the following file:\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# (workspace)\\n* @admins\\n```\\n\\nWhile this looks very simple, it really shines once projects start adding their own granular code\\nownership. Continue reading for more information!\\n\\n### New project `owners` setting\\n\\nTo make use of code owners, you\'ll need to define an [`owners`](/docs/config/project#owners) setting\\nin a project\'s [`moon.yml`](/docs/config/project) file. This setting requires a list/map of owners\\n(contributors required to review) associated to file paths/patterns, relative from the current\\nproject\'s root.\\n\\n```yaml title=\\"packages/components/moon.yml\\"\\nowners:\\n paths:\\n \'src/\': [\'@frontend\', \'@design-system\']\\n \'*.config.js\': [\'@frontend-infra\']\\n \'*.json\': [\'@frontend-infra\']\\n```\\n\\nThese paths will then be prefixed with the project source when\\n[generating the `CODEOWNERS`](#generate-a-codeowners) file.\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# components\\n/packages/components/src/ @frontend @design-system\\n/packages/components/*.config.js @frontend-infra\\n/packages/components/*.json @frontend-infra\\n```\\n\\n### New `moon sync codeowners` command\\n\\nAlthough moon can [automatically generate](/docs/config/workspace#synconrun) the `CODEOWNERS` file\\nwhen running a target, there may be situations where this is disabled, or teams/developers would\\nlike to generate the file manually. To handle this, we\'re providing the\\n[`moon sync codeowners`](/docs/commands/sync/codeowners) command, which will trigger the generation\\nprocess.\\n\\n```shell\\n$ moon sync codeowners\\n```\\n\\n## Community-driven task configuration\\n\\nA powerful but often overlooked feature of moon is the ability to\\n[share and extend task configuration](/docs/guides/sharing-config) from remote sources. This is\\nextremely useful in...\\n\\n- Providing a single source of truth for configuration.\\n- Reducing task duplication across projects.\\n- Ensuring tasks are battle-tested and ready for use.\\n\\nThe other upside of this approach is that configuration can be _community-driven_! To support this\\nas a first-class feature, we\'re launching the\\n[`moon-configs` repository](https://github.com/moonrepo/moon-configs), a collection of task\\nconfigurations for popular programming languages, frameworks, libraries, and more! As of now, the\\nrepository is kind of empty, but we\'re hoping to grow it over time, so feel free to contribute!\\n\\nIf you\'re curious how this works in practice, we\'ll use our Rust configuration as an example. The\\nentire system is based around [tag inheritance](/docs/concepts/task-inheritance), where a project\\ncan inherit tasks from a remote source, and then extend or override them as needed. For example,\\ncreate the tag-based config:\\n\\n```yaml title=\\".moon/tasks/tag-rust.yml\\"\\nextends: \'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml\'\\n```\\n\\nAnd then in Rust projects that you\'d like to inherit these tasks, add the following tags:\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntags: [\'rust\']\\n```\\n\\nIt\'s as simple as that!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.8.0) for a full list of\\nchanges.\\n\\n- Added a new action to the graph, `SyncWorkspace`, that\'ll be used for workspace-level checks.\\n- Added `MOON_OUTPUT_STYLE` and `MOON_RETRY_COUNT` environment variables."},{"id":"moon-v1.7","metadata":{"permalink":"/blog/moon-v1.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx","source":"@site/blog/2023-05-30_moon-v1.7.mdx","title":"moon v1.7 - Next-generation configuration and errors","description":"With this release, we\'ve rewritten configuration from the ground up, improved error messages, and","date":"2023-05-30T00:00:00.000Z","formattedDate":"May 30, 2023","tags":[{"label":"config","permalink":"/blog/tags/config"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.7","title":"moon v1.7 - Next-generation configuration and errors","authors":["milesj"],"tags":["config","errors"],"image":"./img/moon/v1.7.png"},"prevItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"},"nextItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve rewritten configuration from the ground up, improved error messages, and\\nstarted work on diagnostics!\\n\\n\x3c!--truncate--\x3e\\n\\n## Configuration rewrite\\n\\nIf you\'ve ever written Rust before, you may be familiar with the state of configuration crates in\\nthe ecosystem. There\'s only 2 viable choices to choose from, and we\'ve been using 1 of them.\\nHowever, it\'s been a constant source of friction for our use cases, and didn\'t support features that\\nwe\'ve needed (built-in validation, file extending, and more).\\n\\nAfter researching our options, and attempting to contribute upstream, we decided to build our own\\nconfiguration solution, unique to moonrepo\'s projects. As such, we\'re excited to announce\\n[schematic](https://github.com/moonrepo/schematic), the most powerful configuration crate in the\\nRust ecosystem, with built-in features like:\\n\\n- Strict parsing with serde (serilization, deserialization).\\n- Code frames in errors (when applicable).\\n- Source file/URL extending.\\n- Partial file parsing and merging.\\n- Field-level merge strategies.\\n- Recursive validation.\\n- Dynamic default and env var values.\\n- And much more!\\n\\nWe\'ve spent the last few weeks building this crate from the ground up, and migrating the moon\\ncodebase to it. It\'s been quite a feat, but we\'re very excited for what it has to offer already, and\\nwhat\'s to come!\\n\\n### Strict parsing\\n\\nWhen we fail to parse a configuration file, we now include a descriptive message of the failure, and\\nthe file that failed to parse. Typically this will be for unknown fields and invalid value types.\\n\\n<Image src={require(\'./img/moon/v1.7/parse-unknown.png\')} width=\\"90%\\" />\\n<Image src={require(\'./img/moon/v1.7/parse-type.png\')} width=\\"90%\\" />\\n\\n> We hope this bubbles up typos and incorrectly nested settings!\\n\\n### Recursive validation\\n\\nPreviously when validation would fail, we\'d return on the first error and ignore subsequent errors.\\nThis is a non-ideal experience as you\'d have to constantly run `moon` commands until all validation\\nissues have been resolved.\\n\\nNow we aggregate all validation errors, even from deeply nested fields, and present them together.\\n\\n<Image src={require(\'./img/moon/v1.7/validate.png\')} width=\\"90%\\" />\\n\\n### What\'s next?\\n\\nSince [schematic](https://github.com/moonrepo/schematic) is very young, and it hasn\'t been tested\\nheavily in the ecosystem, we expect bugs and weird edge cases to popup. If you encounter any issues,\\nplease report them immediately so that we can fix them as soon as possible!\\n\\nWith that being said, we\'ll continue to improve parsing, error messages, and unique functionality,\\nlike code frames within errors. Here\'s an example for a basic JSON file.\\n\\n<Image src={require(\'./img/moon/v1.7/code-frame.png\')} width=\\"90%\\" />\\n\\n## Better errors\\n\\nYou may have noticed the errors in the screenshots above look quite different than what we\'ve\\nrendered until now, and you are correct. Going forward, all errors will be rendered by the wonderful\\nRust crate, [miette](https://crates.io/crates/miette).\\n\\nWe\'ve introduced this crate to handle _all_ errors and diagnostics within moon, not just\\nconfiguration. So expect a much better developer experience moving forward!\\n\\n<Image src={require(\'./img/moon/v1.7/errors.png\')} width=\\"90%\\" />\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.7.0) for a full list of\\nchanges.\\n\\n- Added support for npm lockfile v3 format."},{"id":"proto-v0.9","metadata":{"permalink":"/blog/proto-v0.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx","source":"@site/blog/2023-05-23_proto-v0.9.mdx","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","description":"This is a small release that provides many internal improvements.","date":"2023-05-23T00:00:00.000Z","formattedDate":"May 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"action","permalink":"/blog/tags/action"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":1.68,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.9","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","authors":["milesj"],"tags":["proto","action","github"],"image":"./img/proto/v0.9.png"},"prevItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"},"nextItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"}},"content":"This is a small release that provides many internal improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `moonrepo/setup-proto` GitHub action\\n\\nIf you\'re using proto in GitHub Actions and would love to automate the workflow as much as possible,\\nwell look no further, as we\'re introducing the\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) action. Thanks to\\n[Tom Davidson](https://github.com/tomdavidson) for the initial spike of work!\\n\\nThis action will automatically install the `proto` binary globally, and cache the toolchain at\\n`~/.proto` (be sure to run `proto use` to download and install tools).\\n\\n```yaml\\n# ...\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n - uses: \'moonrepo/setup-proto@v0\'\\n - run: \'proto use\'\\n```\\n\\n> If you\'re using moon, be sure to use\\n> [moonrepo/setup-moon](https://github.com/moonrepo/setup-moon-action) instead.\\n\\n## Added `install.unpack` to TOML plugin\\n\\nOur [TOML plugins](./proto-v0.7#toml-plugins) have been quite popular, and the community has been\\nusing them to much success. However, the plugin assumed that all downloaded files are archives (tar,\\nzip) and will attempt to unpack them based on file extension. This is not always the case, as some\\ndownloads are just raw executables.\\n\\nBecause of this, unpacking would sometimes fail, or we\'d be unable to extract the correct file\\nextension. To work around this limitation, we\'re introducing a new setting, `install.unpack`, that\\ncontrols whether the downloaded file should be unpacked or not. By default this setting is `true`.\\n\\nHere\'s an example using [moon](/moon).\\n\\n```toml\\n# ...\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\nunpack = false\\n```\\n\\n## Initial support for `node-gyp`\\n\\nThe [`node-gyp` binary](https://github.com/nodejs/node-gyp) is required for building Node.js native\\naddons, and was previously not supported in proto. We will now create a `node-gyp` binary in\\n`~/.proto/bin` when the `npm` tool is installed. Why npm? Because `node-gyp` comes packaged with npm\\ninstead of Node.js... for some reason.\\n\\nWith that being said, this is currently experimental, as we haven\'t tested it thoroughly, and are\\nunaware of all the possible edge cases. So keep that in mind!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.9.0) for a full list\\nof changes."},{"id":"moon-v1.6","metadata":{"permalink":"/blog/moon-v1.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx","source":"@site/blog/2023-05-15_moon-v1.6.mdx","title":"moon v1.6 - Persistent tasks and task extending RFC","description":"In this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending","date":"2023-05-15T00:00:00.000Z","formattedDate":"May 15, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"rfc","permalink":"/blog/tags/rfc"},{"label":"log","permalink":"/blog/tags/log"}],"readingTime":3.155,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.6","title":"moon v1.6 - Persistent tasks and task extending RFC","authors":["milesj"],"tags":["tasks","rfc","log"],"image":"./img/moon/v1.6.png"},"prevItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"},"nextItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nIn this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending\\ntasks.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Task extending/variants\\n\\nBefore we dive into this release, we want to briefly talk about a new RFC that we\'re looking for\\nfeedback on, [task extending/variants](https://github.com/moonrepo/moon/issues/849). This is a\\nfeature that has been top-of-mind since moon\'s inception, but we haven\'t had the foundation in place\\nto support it, nor what the API should look like.\\n\\nThe gist of the RFC is that we want to support tasks that extend other tasks with additional\\narguments. This is a common workflow with npm scripts:\\n\\n```json\\n{\\n \\"scripts\\": {\\n \\"lint\\": \\"eslint .\\",\\n \\"lint:fix\\": \\"npm run lint --fix\\"\\n }\\n}\\n```\\n\\nAs consumers of moon, we\'d appreciate any feedback on the RFC before we move forward!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View RFC\\" href=\\"https://github.com/moonrepo/moon/issues/849\\" size=\\"lg\\" />\\n</div>\\n\\n## Persistent tasks\\n\\nTasks that never complete, like servers and watchers, are known as persistent tasks. Historically we\\nhad support for these kinds of tasks through the [`local`](/docs/config/project#local) setting in\\n[`moon.yml`](/docs/config/project). This setting would modify the task for continuous execution by\\ndisabling caching, streaming output, and not running in CI.\\n\\nWhile this worked for the most part, there was one scenario that was still problematic, and that was\\nrunning multiple persistent tasks in parallel. Depending on the task dependency chain, sometimes\\nthese tasks would _not_ run in parallel, some may never start (blocked on another tasks), or the\\norder of nodes in the graph is non-ideal. A great example of this can be found in this\\n[discussion thread](https://github.com/moonrepo/moon/discussions/830).\\n\\nTo mitigate this problem, we\'re introducing a new task option,\\n[`persistent`](/docs/config/project#persistent) (which is also enabled by the `local` setting). When\\na task is marked as persistent, it will always _run last and in parallel_ within the dependency\\ngraph, after all dependencies (from all other persistent tasks) have completed.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n local: true\\n # OR\\n options:\\n persistent: true\\n```\\n\\nThis is a perfect solution to running multiple development servers and tools in watch mode:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'noop\'\\n deps:\\n - \'frontend:dev\'\\n - \'backend:dev\'\\n - \'database:start\'\\n - \'tailwind:watch\'\\n```\\n\\n## Logging migration\\n\\nThis is more of a heads up than anything, but we\'ve started an internal Rust migration from the old\\n[log](https://crates.io/crates/log) crate to the new [tracing](https://crates.io/crates/tracing)\\ncrate. Tracing provides is with far more information, metrics, and instrumentation, which we hope to\\ntake advantage of in the future.\\n\\nThis will be an ongoing migration that will last for many releases, and during this time while we\\nsupport both `log` and `tracing` in unison, the logs will be a bit noisy. We\'ll be working to clean\\nup the logs as we gradually convert the codebase.\\n\\nAnd lastly, the move to `tracing` has also caused the log output to change. For example, in the log\\nexcerpt below, all messages with \\"log\\" after the date are the old `log` crate, while the others with\\ndistinct module names are the new `tracing` crate.\\n\\n```log\\n[DEBUG 14:44:19] moon_process::command_inspector Running command git status --porcelain --untracked-files -z env_vars={} working_dir=\\"~/Projects/moon\\"\\n[DEBUG 14:44:19] log Filtering based on touched status \\"all\\" log.target=\\"moon:query:touched-files\\" log.module_path=\\"moon_cli::queries::touched_files\\" log.file=\\"crates/cli/src/queries/touched_files.rs\\" log.line=85\\n[DEBUG 14:44:19] log Creating dependency graph log.target=\\"moon:dep-graph\\" log.module_path=\\"moon_dep_graph::dep_builder\\" log.file=\\"crates/core/dep-graph/src/dep_builder.rs\\" log.line=35\\n[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target=\\"moon:action-pipeline\\" log.module_path=\\"moon_action_pipeline::pipeline\\" log.file=\\"crates/core/action-pipeline/src/pipeline.rs\\" log.line=93\\n[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target=\\"moon:action:setup-tool\\" log.module_path=\\"moon_action_pipeline::actions::setup_tool\\" log.file=\\"crates/core/action-pipeline/src/actions/setup_tool.rs\\" log.line=26\\n[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for \\"20.0.0\\"\\n[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.6.0) for a full list of\\nchanges.\\n\\n- Updated long running processes to log a checkpoint indicating it\'s still running.\\n- Reworked file groups to use workspace relative paths, instead of project relative.\\n- Reworked processes to better handle command line arguments, shells, and piped stdin input."},{"id":"moon-v1.5","metadata":{"permalink":"/blog/moon-v1.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx","source":"@site/blog/2023-05-08_moon-v1.5.mdx","title":"moon v1.5 - Rust tier 2 and 3 support","description":"With this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.","date":"2023-05-08T00:00:00.000Z","formattedDate":"May 8, 2023","tags":[{"label":"rust","permalink":"/blog/tags/rust"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tier","permalink":"/blog/tags/tier"}],"readingTime":2.765,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.5","title":"moon v1.5 - Rust tier 2 and 3 support","authors":["milesj"],"tags":["rust","lang","tier"],"image":"./img/moon/v1.5.png"},"prevItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"},"nextItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.\\n\\n\x3c!--truncate--\x3e\\n\\nAs big fans of Rust (moon is written in it), we\'re stoked to finally add full language support, and\\nto integrate our first non-JavaScript language! This release is rather massive, and required a ton\\nof internal work, most of which we\'ll skip over.\\n\\nInstead we\'ll only talk about the key features that you, the consumers, will actually care about. To\\nstart, we\'ve started working on a Rust handbook, that outlines how to enable Rust, what kind of\\nintegrations we support, and a handful of common questions.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View Rust handbook\\" href=\\"/docs/guides/rust/handbook\\" size=\\"lg\\" />\\n</div>\\n\\n## New `rust` configurations\\n\\nLanguages in\\n[moon are enabled through configuration](/docs/how-it-works/languages#enabling-a-language) blocks in\\n[`.moon/toolchain.yml`](/docs/config/toolchain), and Rust is no different. We now support a\\n[`rust`](/docs/config/toolchain#rust) toolchain setting\\n([view all available settings](/docs/config/toolchain#rust)).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nrust:\\n\\tversion: \'1.69.0\'\\n```\\n\\nWhen the `rust` setting is defined, it will enable the language and\\n[deep platform integration](/docs/how-it-works/languages#tier-2--platform), and when the `version`\\nfield is defined, it will further enable\\n[toolchain support](/docs/how-it-works/languages#tier-3--toolchain). Both of these features provide\\nheavy automation, improving the overall developer experience.\\n\\nThis is fantastic, but what if another Rust project in the monorepo requires a different toolchain\\nchannel/version? If so, they can use the new [`toolchain.rust`](/docs/config/project#rust) setting\\nin [`moon.yml`](/docs/config/project) to define project-level overrides.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntoolchain:\\n\\trust:\\n\\t\\tversion: \'1.58.0\'\\n```\\n\\n## New `rust` task platform\\n\\nThe main benefit of Rust language support is that tasks can be ran within the context of our\\n[Rust platform integration](/docs/how-it-works/languages#tier-2--platform). This can easily be done\\nby setting the project\'s [`language`](/docs/config/project#language) to \\"rust\\" in\\n[`moon.yml`](/docs/config/project).\\n\\nThis will set the [`platform`](/docs/config/project#platform-1) of all tasks within the project to\\n\\"rust\\", unless they have been explicitly configured to something else.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nlanguage: \'rust\'\\ntype: \'application\'\\n```\\n\\nIf you\'re mixing languages within a single project, and can\'t use the `language` setting above, you\\ncan define `platform` on the task directly.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntasks:\\n\\tbuild:\\n\\t\\tcommand: \'cargo build\'\\n\\t\\tplatform: \'rust\'\\n```\\n\\n> We also attempt to detect this automatially by comparing command names and checking for the\\n> existence of files like `Cargo.toml`.\\n\\n## Updated `moon init` command\\n\\nAs part of this release, we\'ve also updated the [`moon init`](/docs/commands/init) command to\\nsupport initializing Rust. By default, the command will prompt you on whether to install Rust or\\nnot, otherwise, when `--yes` is passed, the language will be installed if a `Cargo.toml` file is\\ndetected in the destination directory.\\n\\nIf you already have a moon workspace, you can pass `--tool rust` to install Rust into the workspace.\\n\\n```shell\\n$ moon init --tool rust\\n```\\n\\n## Updated `moon docker` commands\\n\\nAnd lastly, we also want to provide a great [`Dockerfile` experience](/docs/guides/docker) when\\nusing Rust. The [`moon docker scaffold`](/docs/commands/docker/scaffold) command has been updated to\\ncopy `Cargo.toml`, `Cargo.lock`, `rust-toolchain.toml`, and other Rust/Cargo related files. When\\nusing Cargo workspaces, nested `Cargo.toml` files are also scaffolded.\\n\\n```docker\\nRUN moon docker scaffold rust-app\\n```\\n\\nFurthermore, we\'ve also updated the [`moon docker prune`](/docs/commands/docker/scaffold) command to\\nremove the entire `target` directory, greatly reducing the size of the image. Pruning makes the\\nassumption that it\'s being ran _after_ a release profile has been built.\\n\\n```docker\\nRUN moon run rust-app:build-release\\nRUN moon docker prune\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.5.0) for a full list of\\nchanges."},{"id":"moon-v1.4","metadata":{"permalink":"/blog/moon-v1.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx","source":"@site/blog/2023-05-01_moon-v1.4.mdx","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","description":"With this release, we\'re bringing further improvements to tags and MQL.","date":"2023-05-01T00:00:00.000Z","formattedDate":"May 1, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tag","permalink":"/blog/tags/tag"},{"label":"alias","permalink":"/blog/tags/alias"}],"readingTime":1.73,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.4","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","authors":["milesj"],"tags":["query","lang","tag","alias"],"image":"./img/moon/v1.4.png"},"prevItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"},"nextItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"}},"content":"With this release, we\'re bringing further improvements to tags and MQL.\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets by tag with `#tag:task`\\n\\nWe love our community, as you all continuously suggest new and awesome features that haven\'t crossed\\nour minds. One such feature was the ability to run tasks for all projects with a tag,\\n[suggested by @theoephraim](https://github.com/moonrepo/moon/issues/803), which is now possible with\\nthe new [tag scope](/docs/concepts/target#by-tag), `#tag:task`.\\n\\nAs an example, we can easily lint all projects that have the `frontend` tag.\\n\\n```shell\\n$ moon run \'#frontend:lint\'\\n```\\n\\n> Because `#` is special syntax and denotes a comment, the target will need to be quoted to work\\n> correctly!\\n\\n## Updated `moon query` commands to support MQL\\n\\nLast week we announced [MQL](./moon-v1.3#run-targets-based-on-a-query), a custom query language for\\napplying filters to moon\'s project graph, primarily through the [`moon run`](/docs/commands/run)\\ncommand. We plan to slowly integrate MQL throughout moon as it provides an easy to use API, and an\\noverall better developer experience.\\n\\nAs such, we\'ve updated both [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query tasks`](/docs/commands/query/tasks) to support MQL statements as an optional first\\nargument. Totally makes sense that query commands would support MQL!\\n\\n```shell\\n# Find all projects with a `lint` or `build` task\\n$ moon query projects \\"task=[lint,build]\\"\\n\\n# Find all tasks with an id that starts with \\"dev\\"\\n$ moon query tasks \\"task~dev-*\\"\\n```\\n\\n## Deprecated `node.aliasPackageNames` setting\\n\\nmoon project\'s support the [concept of aliasing](/docs/concepts/project#aliases), where\\nlanguage/ecosystem specific names are used alongside moon\'s. For example, the `name` field from\\n`package.json`. However, aliasing was off by default for Node.js projects and had to be explicitly\\nenabled with the `node.aliasPackageNames` setting.\\n\\nIn an effort to streamline moon adoption for Node.js codebases, we\'re deprecating that setting, and\\ninstead will now always inherit the `package.json` name as an alias. For example, if you\'re package\\nname was `@company/utils`, you can now run a target like so:\\n\\n```shell\\n$ moon run @company/utils:build\\n```\\n\\n> This setting is now a no-op and can be removed from your configuration.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.4.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.8."},{"id":"proto-v0.8","metadata":{"permalink":"/blog/proto-v0.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx","source":"@site/blog/2023-04-28_proto-v0.8.mdx","title":"proto v0.8 - Version detection and installation improvements","description":"In this release, we\'re dropping some quality of life workflow improvements.","date":"2023-04-28T00:00:00.000Z","formattedDate":"April 28, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"detect","permalink":"/blog/tags/detect"}],"readingTime":1.295,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.8","title":"proto v0.8 - Version detection and installation improvements","authors":["milesj"],"tags":["proto","detect"],"image":"./img/proto/v0.8.png"},"prevItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"},"nextItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"}},"content":"In this release, we\'re dropping some quality of life workflow improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Built-in detection for `proto use`\\n\\nThe [`proto use`](/docs/proto/commands/use) command is extremely useful for bootstrapping your\\ndevelopment environment with all necessary tooling, but it had a hard requirement on the\\n[`.prototools`](/docs/proto/config) configuration file. But what if you\'re already using non-proto\\nversion files, like `.nvmrc` or `.dvmrc`? Or maybe manifest settings, like `packageManager` or\\n`engines` in `package.json`?\\n\\nGreat questions, and we agree! As such, we\'ve updated `proto use` to _also_ detect a version from\\nthe environment for the current working directory. We suggest using `.prototools`, but feel free to\\nconfigure your environments as you so choose!\\n\\n```shell\\n# Install all the things!\\n$ proto use\\n```\\n\\n## Smarter version detection\\n\\nOne of proto\'s best features is its [contextual version detection](/docs/proto/detection), but it\\ndid have 1 shortcoming. When we detected a partial version, like `1.2`, we\'d resolve to a fully\\nqualified version with the latest patch version (e.g. `1.2.3`). While this worked in most cases,\\neverytime a new patch was released upstream (e.g. `1.2.4`), proto would error and require a manual\\ninstall of this new version. This was pretty annoying as `1.2.3` and `1.2.4` are likely to be\\ncompatible, and both satisfy the `1.2` version constraint.\\n\\nTo mitigate this scenario, we\'ve updated the version detection to scan the locally installed\\nversions _first_ when encountering a partial version. This solves the problem above by allowing\\n`1.2.3` to satisfy the requirement, instead of forcing an install of `1.2.4`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.8.0) for a full list\\nof changes."},{"id":"moon-v1.3","metadata":{"permalink":"/blog/moon-v1.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx","source":"@site/blog/2023-04-24_moon-v1.3.mdx","title":"moon v1.3 - Advanced run targeting and an official proto plugin","description":"After many months of design and development, we\'re finally introducing MQL, our own unique query","date":"2023-04-24T00:00:00.000Z","formattedDate":"April 24, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"schema","permalink":"/blog/tags/schema"},{"label":"toml","permalink":"/blog/tags/toml"},{"label":"target","permalink":"/blog/tags/target"}],"readingTime":2.35,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.3","title":"moon v1.3 - Advanced run targeting and an official proto plugin","authors":["milesj"],"tags":["query","lang","proto","schema","toml","target"],"image":"./img/moon/v1.3.png"},"prevItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"},"nextItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"}},"content":"After many months of design and development, we\'re finally introducing MQL, our own unique query\\nlanguage!\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets based on a query\\n\\nOur [`moon run`](/docs/commands/run) command is pretty powerful. It allows you to run targets in\\none, many, or all projects. It also supports running multiple targets in parallel. However, it\\nwasn\'t powerful enough, as it couldn\'t run the following types of scenarios:\\n\\n- Run a target in projects of a specific language.\\n- Run a target in libraries or applications.\\n- Run a target based on project file system path.\\n- Run a target in projects with a matching tag.\\n- Run a target in projects that match a keyword.\\n- Run a target in projects based on AND or OR conditions.\\n- Or a combination of these.\\n- And many more!\\n\\nSupporting all of these scenarios through CLI arguments just feels like bad design, and would result\\nin a poor developer experience. There had to be a better way to support this! So we set out to solve\\nthis problem, and after much thought, we\'re stoked to introduce\\n[MQL, a query language unique to moon](/docs/concepts/query-lang).\\n\\nWith MQL, you can now run scenarios like \\"I want to build all Node.js libraries\\", or \\"I want to lint\\nand test all Rust projects\\". Simply pass an unscoped target and a query to the `run` command:\\n\\n```shell\\n$ moon run :build --query \\"taskPlatform=node && projectType=library\\"\\n\\n$ moon run :lint :test --query \\"language=rust\\"\\n```\\n\\nThis is only the first iteration of MQL and it\'s already quite powerful. Expect additional fields,\\nfeatures, and functionality in the future!\\n\\n## Plugin support for proto\\n\\nEarlier this week we announced [plugin support for proto](./proto-v0.7), starting with a TOML based\\nplugin. This is great as it allows _any_ kind of versioned tool to be managed in proto\'s toolchain,\\nso why not moon? Starting with this release, you can now install and manage moon _from_ proto, using\\nour officially maintained TOML plugin.\\n\\nIn your `.prototools` or `~/.proto/config.toml` file, add the following snippet:\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nmoon = \\"source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml\\"\\n```\\n\\nAnd as easy as that, you can now use `moon` as a tool within any `proto` command. For example:\\n\\n```shell\\n$ proto install moon 1.3.0\\n$ proto list-remote moon\\n$ proto bin moon\\n```\\n\\nFurthermore, with proto, we can now pin the version of moon on a per-project basis. Perfect for\\nenforcing the same version for all developers on your team!\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.3.0\\"\\n```\\n\\n> When using this approach, be sure `~/proto/.bin` is in your `PATH`, and takes precedence over\\n> `~/.moon/bin`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.3.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.7.\\n- Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders.\\n- Updated config loading to be strict and error on unknown fields for non-root fields."},{"id":"proto-v0.7","metadata":{"permalink":"/blog/proto-v0.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx","source":"@site/blog/2023-04-21_proto-v0.7.mdx","title":"proto v0.7 - First step towards plugins","description":"With this release, we\'re very excited to announce our initial support for plugins in proto!","date":"2023-04-21T00:00:00.000Z","formattedDate":"April 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugins","permalink":"/blog/tags/plugins"}],"readingTime":2.36,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.7","title":"proto v0.7 - First step towards plugins","authors":["milesj"],"tags":["proto","plugins"],"image":"./img/proto/v0.7.png"},"prevItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"},"nextItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"}},"content":"With this release, we\'re very excited to announce our initial support for plugins in proto!\\n\\n\x3c!--truncate--\x3e\\n\\n## Initial plugins architecture\\n\\nLast week we posted an [RFC for a new plugins architecture](./proto-v0.6#rfc-plugins-system) for\\nproto. We believe plugins will unlock an array of capabilities for proto, will enable the community\\nto add their own custom integrations, and the ability for tools to be managed within proto\'s\\ntoolchain.\\n\\nWe were very excited for this RFC, and couldn\'t wait, so we spent the last week prototyping\\nimplementations. We got the basics of downloading, installing, and enabling a plugin at _runtime_\\nworking incredibly fast. However, implementing the entire RFC in 1 release would have taken too\\nlong, and we wanted to avoid dropping such a large feature in a single release. Because of this,\\nwe\'ve only implemented [TOML plugins](/docs/proto/plugins#toml-plugin) in this release, and will\\nimplement WASM plugins in a future release.\\n\\n### TOML plugins\\n\\nYou may be asking yourself, aren\'t plugins typically code? For the most part, yes, but after\\nbuilding a \\"version manager\\" for multiple languages, we\'ve come to the realization that many tools\\ncan simply be supported through a basic configuration file.\\n\\nAt minimum, tools require the following pieces to be managed:\\n\\n- Where and how to download the tool\\n- How to install/unpack the tool\\n- How to resolve available versions to install\\n- How to execute the tool\'s binary\\n\\nAll 4 of these pieces can be solved with a configuration file, and as such, we opted to support a\\n[TOML schema based plugin](/docs/proto/plugins#toml-plugin) as an alternative to a code based\\nplugin. The other benefits of a schema is that it\'s _easy to write, read, and maintain_, doesn\'t\\nrequire any code, and doesn\'t force you into a specific programming language.\\n\\nTo demonstate how this plugin works, here\'s an example of a [moon](/moon) TOML schema.\\n\\n```toml title=\\"moon-schema.toml\\"\\nname = \\"moon\\"\\ntype = \\"cli\\"\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\n\\n[resolve]\\ngit-url = \\"https://github.com/moonrepo/moon\\"\\n```\\n\\nVery simple right? With this, you can now configure moon as a plugin within proto.\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.2.0\\"\\n\\n[plugins]\\nmoon = \\"source:./path/to/moon-schema.toml\\"\\n```\\n\\nAnd ultimately manage every version of moon through proto! Because moon is now a plugin, every\\ncommand in proto that accepts a `<tool>` argument, will now accept `moon` as a valid tool.\\n\\n```shell\\n$ proto install moon 1.2.0\\n$ proto list-remote moon\\n$ proto use\\n```\\n\\nLearn more about [TOML plugins in the official docs](/docs/proto/plugins#toml-plugin)!\\n\\n## Cleaning improvements\\n\\nLast week we introduced the [`proto clean`](/docs/proto/commands/clean) command that will\\nautomatically delete stale and unused tools from the toolchain. This week we\'ve implemented a few\\nimprovements to the cleaning process:\\n\\n- Added a `--yes` option to [`proto clean`](/docs/proto/commands/clean), allowing prompts to be\\n bypassed.\\n- Added a `auto-clean` setting to `~/.proto/config.toml`, enabling automatic cleaning when\\n [`proto use`](/docs/proto/commands/use) is ran."},{"id":"moon-v1.2","metadata":{"permalink":"/blog/moon-v1.2","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx","source":"@site/blog/2023-04-17_moon-v1.2.mdx","title":"moon v1.2 - Tag based task inheritance","description":"In this small release, we\'re improving our task inheritance and performance.","date":"2023-04-17T00:00:00.000Z","formattedDate":"April 17, 2023","tags":[{"label":"tags","permalink":"/blog/tags/tags"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.2","title":"moon v1.2 - Tag based task inheritance","authors":["milesj"],"tags":["tags","tasks"],"image":"./img/moon/v1.2.png"},"prevItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"},"nextItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"}},"content":"In this small release, we\'re improving our task inheritance and performance.\\n\\n\x3c!--truncate--\x3e\\n\\n## Task inheritance based on project tags\\n\\nIn v0.23 we introduced [scoped task inheritance](/blog/v0.23#improved-task-inheritance-model) by\\nproject type/language, and in v1.0 we introduced [project tagging](/blog/moon-v1.0#project-tagging),\\nbut what if we combined both of these features? In this release, you can now define workspace-level\\ntasks _by tag_ that\'ll be inherited by all projects with that tag.\\n\\nTo demonstrate this, say you have a monorepo composed of multiple [Astro](https://astro.build)\\napplications, each duplicating the same Astro tasks. Instead of duplicating, define an `astro` tag\\nin each project\'s [`moon.yml`](/docs/config/project#tags).\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nlanguage: \'typescript\'\\ntype: \'application\'\\ntags: [\'astro\']\\n```\\n\\nAnd then create a new tasks configuration at `.moon/tasks/tag-astro.yml` with the following\\ncontents:\\n\\n```yaml title=\\".moon/tasks/tag-astro.yml\\"\\nfileGroups:\\n\\tastro:\\n\\t\\t- \'public/**/*\'\\n\\t\\t- \'src/**/*\'\\n\\t\\t- \'astro.config.*\'\\n\\t\\t- \'tsconfig.json\'\\n\\ntasks:\\n\\tastro:\\n\\t\\tcommand: \'astro\'\\n\\t\\tlocal: true\\n\\n\\t# Development server\\n\\tdev:\\n\\t\\tcommand: \'astro dev\'\\n\\t\\tlocal: true\\n\\n\\t# Production build\\n\\tbuild:\\n\\t\\tcommand: \'astro build\'\\n\\t\\tinputs: [\'@group(astro)\']\\n\\t\\toutputs: [\'dist\']\\n\\n\\t# Check .astro files\\n\\tcheck:\\n\\t\\tcommand: \'astro check\'\\n\\t\\tinputs: [\'@group(astro)\']\\n\\t\\tdeps: [\'typecheck\']\\n\\n\\t# Preview production build locally\\n\\tpreview:\\n\\t\\tcommand: \'astro preview\'\\n\\t\\tdeps: [\'build\']\\n\\t\\tlocal: true\\n```\\n\\nEach of these Astro applications will now inherit all 5 tasks and the file group automatically! This\\nhelps to greatly reduce maintenance overhead and help enforce consistency across projects. Jump to\\nthe official [task inheritance docs](/docs/concepts/task-inheritance) for more information on tag\\nbased inheritance.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.2.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.6.\\n- Improvements to file system operations.\\n- Minor improvements to performance."},{"id":"proto-v0.6","metadata":{"permalink":"/blog/proto-v0.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx","source":"@site/blog/2023-04-13_proto-v0.6.mdx","title":"proto v0.6 - Unused cleaning and improved global binaries","description":"With this release, we\'re expanding on our global binary support and providing quality of life","date":"2023-04-13T00:00:00.000Z","formattedDate":"April 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"globals","permalink":"/blog/tags/globals"},{"label":"clean","permalink":"/blog/tags/clean"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.6","title":"proto v0.6 - Unused cleaning and improved global binaries","authors":["milesj"],"tags":["proto","globals","clean","errors"],"image":"./img/proto/v0.6.png"},"prevItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"},"nextItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re expanding on our global binary support and providing quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Plugins system\\n\\nSince proto\'s inception, plugins have been top of mind, but runtime based plugins in Rust are\\n_difficult_. The only viable solution to this problem is WASM, but most developers have never used\\nWASM before, nor are they familiar with WASM tooling (myself included).\\n\\nHowever, we\'re at a point in proto\'s life-cycle where the core is rather stable, and it\'s time to\\nstart investigating plugin support. To this end, we\'ve introduced a small RFC outlining how plugins\\nwill be used, enabled, and implemented. It\'s not very in-depth as we want to avoid implementation\\ndetails, but from a consumers perspective, we want to ensure that it makes sense.\\n\\nWe\'d very much appreciate it if you could take a look at the RFC and provide feedback. If you have\\nany experience in Rust runtime plugins, we\'d love to hear your thoughts as well.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View RFC\\" href=\\"https://github.com/moonrepo/proto/issues/73\\" size=\\"lg\\" />\\n</div>\\n\\n## Cleaning stale and unused tools\\n\\nIs your `~/.proto` installation growing out of control? Are there old versions of tools that you\\ndon\'t use anymore? Or versions you never used? Unsure if you\'re using a tool at all or still need\\nit?\\n\\nTo help avoid these questions and problems, we\'re introducing a new command that will uninstall\\nstale and unused tools, [`proto clean`](/docs/proto/commands/clean). When ran, the command will\\nlaunch an interactive session and scan the file system for old tools, prompting you to remove them.\\n\\n```shell\\n$ proto clean\\n```\\n\\nBy default the command will uninstall tools that haven\'t been used in over 30 days, but this can be\\ncustomized with the `--days` option.\\n\\n:::info\\n\\nTools installed before v0.6 will most likely be considered stale, as we weren\'t tracking install and\\nlast used timestamps. However, everything will work as intended after running a tool or simply\\nmoving forward from this point.\\n\\n:::\\n\\n## Global binary improvements\\n\\nIn our [previous release](./proto-v0.5), we announced the\\n[`proto install-global`](/docs/proto/commands/install-global) command for installing global\\ndependencies that are unique per tool. Thanks to the community, this command has been updated to\\nsupport installing multiple globals at once!\\n\\n```shell\\n$ proto install-global node typescript webpack-cli\\n```\\n\\nOn top of this, we\'re also introducing another command that was requested by the community,\\n[`proto list-global`](/docs/proto/commands/list-global), that can be used to list all currently\\ninstalled globals.\\n\\n```shell\\n$ proto list-global node\\ntsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc\\ntsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver\\n```\\n\\n## Better error messages\\n\\nWe\'ve spent most of the past week working on a new internal architecture called\\n[Starbase](https://github.com/moonrepo/starbase), which will be the new foundation for proto and\\nmoon moving forward. One of the major benefits of this new architecture is a rewritten error system\\nthat provides more context and better error messages.\\n\\nHere\'s an example of this, albeit with a contrived situation:\\n\\n<Image src={require(\'./img/proto/v0.6-errors.png\')} width=\\"90%\\" />"},{"id":"proto-v0.5","metadata":{"permalink":"/blog/proto-v0.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-06_proto-v0.5.mdx","source":"@site/blog/2023-04-06_proto-v0.5.mdx","title":"proto v0.5 - Version aliasing and global binaries","description":"With this release, we\'re providing solutions for installing globals and using aliases.","date":"2023-04-06T00:00:00.000Z","formattedDate":"April 6, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"alias","permalink":"/blog/tags/alias"},{"label":"globals","permalink":"/blog/tags/globals"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.5","title":"proto v0.5 - Version aliasing and global binaries","authors":["milesj"],"tags":["proto","alias","globals"],"image":"./img/proto/v0.5.png"},"prevItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"},"nextItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"}},"content":"With this release, we\'re providing solutions for installing globals and using aliases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Install global binaries\\n\\nInstalling global binaries (packages, modules, etc) is a common task for developers, and proto now\\nprovides a solution for this workflow with the\\n[`proto install-global`](/docs/proto/commands/install-global) command. Continue reading for more\\ninformation.\\n\\n:::info\\n\\nGlobal install directories will need to be added manually to your `PATH` from your shell.\\n\\n:::\\n\\n### Bun, Deno, Go, Rust\\n\\nAll of these languages provide a built-in solution for installing global binaries to a shared\\nlocation, regardless of the language\'s current version. Because of this, proto will simply call\\ntheir install commands under the hood.\\n\\n```shell\\n$ proto install-global rust cargo-release\\n\\n# Same as\\n$ cargo install cargo-release --force\\n```\\n\\nGlobals will be installed to the following locations:\\n\\n- **Bun**: `~/.bun/bin`\\n- **Deno**: `~/.deno/bin`\\n- **Go**: `~/go/bin`\\n- **Rust**: `~/.cargo/bin`\\n\\n### Node.js, npm, pnpm, yarn\\n\\nUnfortunately, the Node.js ecosystem is pretty fractured when it comes to installing global\\nbinaries. Each package manager provides their own solution for installing globals, and each has\\ntheir own quirks. The problem is further exacerbated by the fact that globals are tied to Node.js\\nversion, so if you switch versions, you lose all your previous globals!\\n\\nTo work around this, proto standardizes the global installation process for Node.js, but requires\\nall globals to be installed through proto. You can no longer use `npm install -g`, `pnpm add -g`, so\\non and so forth, and must use:\\n\\n```shell\\n$ proto install-global node webpack-cli\\n```\\n\\nGlobals will be installed to a shared location, `~/.proto/tools/node/globals/bin`, and will persist\\nacross versions!\\n\\n## Custom version aliases\\n\\nWe are excited to announce 2 new commands that enable you to define custom version aliases,\\n[`proto alias`](/docs/proto/commands/alias) and [`proto unalias`](/docs/proto/commands/unalias).\\nAliasing of versions is a feature that allows you to assign a custom name or label to a specific\\nversion of a tool.\\n\\nFor example, instead of using the version number, you can assign a label such as \\"work\\" or\\n\\"personal\\" to a version. This makes it easier to remember and manage different versions.\\n\\n```shell\\n$ proto alias node work 16.16\\n$ proto alias node personal 18\\n```\\n\\nAliases can be used anywhere a version is accepted, for example:\\n\\n```shell\\n$ proto bin node work\\n$ proto install node personal\\n```"},{"id":"moon-v1.1","metadata":{"permalink":"/blog/moon-v1.1","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx","source":"@site/blog/2023-04-03_moon-v1.1.mdx","title":"moon v1.1 - Task debugging and improvements","description":"With this release, we\'re introducing some quality of life task improvements.","date":"2023-04-03T00:00:00.000Z","formattedDate":"April 3, 2023","tags":[{"label":"tokens","permalink":"/blog/tags/tokens"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.775,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.1","title":"moon v1.1 - Task debugging and improvements","authors":["milesj"],"tags":["tokens","tasks"],"image":"./img/moon/v1.1.png"},"prevItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"},"nextItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"}},"content":"With this release, we\'re introducing some quality of life task improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Token variable support in task commands\\n\\nmoon supports a concept known as [tokens](/docs/concepts/token) where values are injected into tasks\\nduring project graph creation. This allows for dynamic values in your tasks, such as the current\\nproject language, or the current task name, and is crucial for task inheritance to work.\\n\\nHowever, tokens were only supported by task args, inputs, and outputs, but not commands... until\\nnow. Commands can now use token variables (but not token functions). For example, this is useful for\\nreferencing shared scripts from the workspace root.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n\\tprecheck:\\n\\t\\tcommand: \'$workspaceRoot/scripts/precheck.sh\'\\n```\\n\\n## Run targets in closest project\\n\\nThe [`moon run`](/docs/commands/run) command can run targets in an array of different formats, but\\nwas unable to run targets based on the current working directory. Well no more! You can now run\\ntasks from the closest project based on file path by omitting `:` from the target name.\\n\\n```shell\\n$ cd packages/components\\n\\n# Runs `components:build` internally\\n$ moon run build\\n```\\n\\n## View resolved task information\\n\\nDebugging task issues can be a quite a pain, as there can be many points of failure. Are inputs too\\ngreedy? Are outputs not being created? Does it exist at all? To help with this, you can now view\\ntask information by running [`moon task <target>`](/docs/commands/task).\\n\\n```shell\\n$ moon task app:build\\n```\\n\\nThis command will display _resolved_ information, including inherited settings, and path resolved\\ninputs and outputs. Here\'s an example:\\n\\n```\\nRUNTIME:BUILD\\n\\nID: build\\nProject: runtime\\nPlatform: node\\nType: build\\n\\nPROCESS\\n\\nCommand: packemon build --addFiles --addExports --declaration\\nEnvironment variables:\\n - NODE_ENV = production\\nWorking directory: /Projects/moon/packages/runtime\\nRuns dependencies: Concurrently\\nRuns in CI: Yes\\n\\nDEPENDS ON\\n\\n - types:build\\n\\nINPUTS\\n\\n - .moon/*.yml\\n - packages/runtime/src/**/*\\n - packages/runtime/tsconfig.*.json\\n - packages/runtime/types/**/*\\n - packages/runtime/package.json\\n - packages/runtime/tsconfig.json\\n - tsconfig.options.json\\n\\nOUTPUTS\\n\\n - packages/runtime/cjs\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.1.0) for a full list of\\nchanges.\\n\\n- Support pnpm v8\'s new lockfile format.\\n- Better handling for task\'s that execute the `moon` binary.\\n- Updated `noop` tasks to be cacheable, so that they can be used for cache hit early returns."},{"id":"proto-v0.4","metadata":{"permalink":"/blog/proto-v0.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-31_proto-v0.4.mdx","source":"@site/blog/2023-03-31_proto-v0.4.mdx","title":"proto v0.4 - Rust support, user configs, and more","description":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.","date":"2023-03-31T00:00:00.000Z","formattedDate":"March 31, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"rust","permalink":"/blog/tags/rust"},{"label":"config","permalink":"/blog/tags/config"}],"readingTime":1.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.4","title":"proto v0.4 - Rust support, user configs, and more","authors":["milesj"],"tags":["proto","rust","config"],"image":"./img/proto/v0.4.png"},"prevItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"},"nextItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"}},"content":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Rust language support\\n\\nWe\'re very excited to announce support for the [Rust language](https://www.rust-lang.org/) in proto.\\nThis is our first language addition since the initial release, and we\'re very happy with how it\\nturned out.\\n\\n```shell\\n$ proto install rust stable\\n```\\n\\nFor those of you unfamiliar with Rust, Rust provides its own toolchain manager through\\n[`rustup`](https://rustup.rs/) \u2014 a very powerful one at that. We don\'t want to reinvent the wheel\\nhere, so instead of downloading and installing Rust into proto\'s toolchain, we chose to call\\n`rustup` commands under the hood. Because of this, Rust support in proto requires Rust/Cargo to be\\npre-installed on your system. Jump to the [docs for more information](/docs/proto/tools#rust).\\n\\nAll in all, the cool thing about supporting Rust in proto is that you can standardize all your tools\\nin a single config for [`proto use`](/docs/proto/commands/use).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.2.0\\"\\nrust = \\"1.68.0\\"\\n```\\n\\n## New user configuration\\n\\nWe have a long list of ideas and features that would be cool to support in proto, but not as the\\ndefault functionality. Because of this, we required a way for users to opt-in to this functionality,\\nand have landed on a new user configuration located at `~/.proto/config.toml`.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\nauto-install = true\\n```\\n\\nThis new configuration only supports a single setting (for now), `auto-install`, that when enabled,\\nwill automatically install a missing tool for the detected version when running\\n[`proto run`](/docs/proto/commands/run) (or a shim).\\n\\n## New `proto upgrade` command\\n\\nWe now provide a [`proto upgrade`](/docs/proto/commands/upgrade) command for upgrading proto itself.\\nThis will download the latest version and replace the binary at `~/.proto/bin/proto`.\\n\\n```shell\\n$ proto upgrade\\n```"},{"id":"moon-v1.0","metadata":{"permalink":"/blog/moon-v1.0","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx","source":"@site/blog/2023-03-27_moon-v1.0.mdx","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","description":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve","date":"2023-03-27T00:00:00.000Z","formattedDate":"March 27, 2023","tags":[{"label":"projects","permalink":"/blog/tags/projects"},{"label":"constraints","permalink":"/blog/tags/constraints"},{"label":"tags","permalink":"/blog/tags/tags"},{"label":"env-vars","permalink":"/blog/tags/env-vars"},{"label":"tokens","permalink":"/blog/tags/tokens"}],"readingTime":4.745,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.0","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","authors":["milesj"],"tags":["projects","constraints","tags","env-vars","tokens"],"image":"./img/moon/v1.0.png"},"prevItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"},"nextItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"}},"content":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve\\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## The road to v1\\n\\nIt\'s been 10 months since moon launched publicly, and since that time we have landed 501 pull\\nrequests, fixed 100\'s of bugs, made 16 breaking changes, released 26 versions, and have been used by\\ncompanies like Ikea, SumUp, Depot, and Gallery. It\'s been a wild ride, and we\'re excited to finally\\nreach a stable v1 release.\\n\\n## Project boundaries with constraints\\n\\nOne feature that moon has not supported, but is critical for large monorepos, is project boundaries.\\nA project boundary is a concept that enforces a strict relationship between projects, and is a\\ncommon pattern in monorepos. For example, a project may only be allowed to depend on projects with a\\n[specific tag](#enforce-relationships-with-tags), or a project of a specific type.\\n\\nmoon now supports this functionality through the new\\n[`constraints`](/docs/config/workspace#constraints) setting in\\n[`.moon/workspace.yml`](/docs/config/workspace). The primary constraint we\'re introducing is\\n[`enforceProjectTypeRelationships`](/docs/config/workspace#enforceprojecttyperelationships), which\\nenforces relationships between projects based on their [`type`](/docs/config/project#type) field.\\n\\nFor example, an application can only depend on library or tool based projects, but _not_ other\\napplications (this is a code smell). This setting is enabled by default!\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nconstraints:\\n enforceProjectTypeRelationships: true\\n```\\n\\nAnd that\'s not all, continue reading for more information on tag based constraints!\\n\\n## Project tagging\\n\\nEveryone is familiar with the concept of tagging, and moon\'s implementation is no different. Tags\\nare a simple mechanism for categorizing projects, and can be defined through the\\n[`tags`](/docs/config/project#tags) setting in [`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntags:\\n - \'react\'\\n - \'prisma\'\\n```\\n\\nTags can be used to group projects together for easier querying, enforcing of project boundaries,\\napplying constraints, and more in the future. Tags will become a staple for maintaining repositories\\nat scale. Continue reading for more information!\\n\\n### Querying projects by tag\\n\\nThe first integration with tags is project querying. You can now query for projects by tag using the\\nnew `--tags` option in the [`moon query projects`](/docs/commands/query/projects) command. For\\nexample, say you want to find all projects that are tagged with `vue` or `trpc`:\\n\\n```shell\\n$ moon query projects --tags \'vue|trpc\'\\n```\\n\\n### Enforce relationships with tags\\n\\nAnother feature of tags is enforcing relationships between projects using our new\\n[`constraints`](#project-constraints) setting. When a tagged constraint is defined, it requires all\\n[dependencies](/docs/concepts/project#dependencies) of a tagged project to require 1 of the\\nconfigured tags, otherwise an error is thrown during project graph creation.\\n\\nTo demonstrate this, take the following configuration:\\n\\n```yaml title=\\".moon/workspace.yml\\" {2,3}\\nconstraints:\\n tagRelationships:\\n next: [\'react\', \'trpc\']\\n```\\n\\nThis dictates that all dependencies of a project with the `next` tag, must declare either `react`,\\n`trpc`, or `next` in their own tags. This is great for crafting a monorepo with strict project\\nboundaries!\\n\\n## Shells for system tasks\\n\\nUp until now, all executed tasks would not be wrapped in a shell for 1 reason, to ensure tasks are\\ndeterministic. A major goal for moon is that tasks are deterministic and easily reproducible across\\nall machines. Shells break this guarantee, as they can introduce subtle bugs that are difficult to\\ndiagnose, and may differ wildly between developers and machines.\\n\\nHowever in practice, not supporting shells has been a major pain point for many users, and for the\\nmost part, most system tasks typically run common commands or execute pre-defined scripts. The\\nchance of a non-deterministic build is very small. As such, we\'ve decided to make a compromise, and\\nallow shells for [system tasks](/docs/config/project#platform-1), but not for language based tasks.\\n\\nFor example, the following tasks:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'echo $PWD\'\\n platform: \'system\'\\n global:\\n command: \'bin-on-path\'\\n platform: \'system\'\\n```\\n\\nWould now be executed as `/bin/sh -c \'echo $PWD\'` and `/bin/sh -c \'bin-on-path\'` on Unix platforms\\nrespectively. On Windows, we execute tasks with `pwsh.exe -c` and pass arguments via stdin.\\n\\nWe\'re also taking this a step further, by introducing a new task option called\\n[`shell`](/docs/config/project#shell), that can be used to toggle the shell wrapping on or off. When\\nturned off, this allows you to customize and execute the shell as you please.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'bash -c \\"echo $PWD\\"\'\\n platform: \'system\'\\n options:\\n shell: false\\n```\\n\\n## Environment variable substitution\\n\\nmoon supports granular environment variables through the project-level\\n[`env`](/docs/config/project#env) setting, task-level [`env`](/docs/config/project#env-1) setting,\\nand the task [`envFile`](/docs/config/project#envfile) option. We\'re expanding their functionality\\nwith variable substitution, allowing the value of another environment variable to be interpolated\\nusing the syntax `${VAR_NAME}`. This is especially useful for composing complex environment\\nvariables.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'app start\'\\n env:\\n APP_TARGET: \'${REGION}-${ENVIRONMENT}\'\\n```\\n\\nThe same substitution syntax can also be used within `.env` files.\\n\\n```toml title=\\".env\\"\\nAPP_TARGET=\\"${REGION}-${ENVIRONMENT}\\"\\n```\\n\\n## Date/time token variables\\n\\n[Tokens](/docs/concepts/token) are a mechanism used in task configuration for dynamically injecting\\nvalues from the current project or task, especially when task inheritance is involved. Tokens have\\nexisted since moon\'s inception, without much change... until now.\\n\\nWe\'re excited to introduce a new set of tokens for referencing the\\n[current date or time](/docs/concepts/token#datetime): `$date`, `$time`, `$datetime`, and\\n`$timestamp`. With these new tokens, you\'re now able to implement clever or unusual solutions, like\\ngrouping builds or deploys based on the current timestamp.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n deploy:\\n command: \'app deploy --output ./build/$timestamp\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.0.0) for a full list of\\nchanges.\\n\\n- Added a `hasher.warnOnMissingInputs` setting to `.moon/workspace.yml`.\\n- Added a `$projectAlias` task token.\\n- Added a `telemetry` setting to `.moon/workspace.yml`.\\n- Updated the new version check to only run on the `check`, `ci`, `run`, and `sync` commands.\\n\\n## What\'s next?\\n\\nExpect the following in the v1.1 release!\\n\\n- Polish and stability initiatives.\\n- Task inheritance based on tags.\\n- Deno tier 3 support."},{"id":"proto-v0.3","metadata":{"permalink":"/blog/proto-v0.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx","source":"@site/blog/2023-03-15_proto-v0.3.mdx","title":"proto v0.3 - Improved npm, go, and version requirement support","description":"With this release, we\'re improving some workflows and version detection logic based on initial","date":"2023-03-15T00:00:00.000Z","formattedDate":"March 15, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"npm","permalink":"/blog/tags/npm"},{"label":"go","permalink":"/blog/tags/go"}],"readingTime":1.395,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.3","title":"proto v0.3 - Improved npm, go, and version requirement support","authors":["milesj"],"tags":["proto","npm","go"],"image":"./img/proto/v0.3.png"},"prevItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"},"nextItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"}},"content":"With this release, we\'re improving some workflows and version detection logic based on initial\\nfeedback.\\n\\n\x3c!--truncate--\x3e\\n\\n## Bundled npm support\\n\\nAfter Node.js is installed, the version of npm that came bundled with that Node.js version will also\\nbe installed into proto. This functionality can be skipped by passing `--no-bundled-npm` during\\ninstallation.\\n\\n```shell\\n$ proto install node -- --no-bundled-npm\\n```\\n\\nTo further expand upon this, `bundled` is now considered a built-in alias, and will be used during\\nversion detection. When encountered, we\'ll first detect the version of Node.js running, and infer\\nthe npm version from there.\\n\\n```shell\\n$ proto global npm bundled\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Automatic `GOBIN` setup\\n\\nAfter Go is installed, we\'ll now inject a `GOBIN` environment variable into your shell, pointing to\\n`~/go/bin`, if it doesn\'t already exist. This variable will be used to locate Go binaries across all\\ninstalled versions, and help to avoid binary not found errors.\\n\\nThis functionality can be skipped by passing `--no-gobin` during installation.\\n\\n```shell\\n$ proto install go -- --no-gobin\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Better version requirement detection\\n\\nPreviously when proto encounted a version requirement (`^`, `~`, `>=`, etc) during version\\ndetection, we would attempt to resolve a version that satisfied the requirement based on versions\\navailable in the remote manifest (what\'s been officially released). While this worked, it would\\nresult in far too many local installs as that satisfied version constantly changed.\\n\\nInstead, we now satisfy the version requirement based on versions that have been installed locally\\nto `~/.proto/tools`. If no version matches, detection will simply move on to the next case, and\\neventually fallback to the global default version."},{"id":"v0.26","metadata":{"permalink":"/blog/v0.26","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-13_v0.26.mdx","source":"@site/blog/2023-03-13_v0.26.mdx","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","description":"With this release, we\'re providing deeper integration with our new proto toolchain","date":"2023-03-13T00:00:00.000Z","formattedDate":"March 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"docker","permalink":"/blog/tags/docker"},{"label":"query","permalink":"/blog/tags/query"},{"label":"hash","permalink":"/blog/tags/hash"}],"readingTime":3.29,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.26","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","authors":["milesj"],"tags":["proto","docker","query","hash"],"image":"./img/v0.26.png"},"prevItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"},"nextItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWith this release, we\'re providing deeper integration with our new [proto](/proto) toolchain\\nmanager, better Docker support, and new query commands for debugging.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full proto toolchain integration\\n\\n<div className=\\"float-right ml-4 mb-1\\" style={{ width: \'50%\' }}>\\n <Logo />\\n</div>\\n\\nEarlier this week we announced [proto](/proto), our own toolchain manager, and an attempt at a next\\ngeneration version manager for multiple languages. proto was originally moon\'s toolchain layer, but\\nwe felt it best to extract it out into a stand-alone tool for everyone to use, especially those not\\nusing moon!\\n\\nNow that proto has been released, we\'ve updated moon\'s Rust internals to utilize proto\'s latest Rust\\ncrates. For the most part, everything will continue to work the same. However, the biggest change is\\nthat the toolchain has moved from `~/.moon` to `~/.proto`, and will result in tools being\\nre-downloaded and installed. Feel free to delete the old `~/.moon` directory manually.\\n\\nFurthermore, we\'ve added first-class support for the new [`.prototools`](/docs/proto/config)\\nconfiguration file. If this file is found in the workspace root, we\'ll automatically enable the\\ntools in our toolchain, and inject the versions (when not defined in `.moon/toolchain.yml`).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.0.0\\"\\npnpm = \\"7.29.0\\"\\n```\\n\\n## New `moon docker setup` command\\n\\nmoon has provided [built-in `Dockerfile` support](/docs/guides/docker) since v0.15 (11 versions\\nago!) and we\'ve always encouraged the use of the [`moon setup`](/docs/commands/setup) command to\\nsetup the toolchain and install project dependencies. Here\'s an example of a moon powered\\n`Dockerfile`:\\n\\n```docker\\nFROM node:latest\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n# Copy workspace skeleton\\nCOPY ./.moon/docker/workspace .\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy source files\\nCOPY ./.moon/docker/sources .\\n\\n# Build something\\nRUN moon run app:build\\n\\n# Prune workspace\\nRUN moon docker prune\\n\\nCMD [\\"moon\\", \\"run\\", \\"app:start\\"]\\n```\\n\\nHowever, over the course of these 11 releases since v0.15, we refactored the `moon setup` command to\\nonly setup the toolchain, and _no longer_ install project dependencies. We inadvertently broke our\\nDocker integration. This was an oversight on our part.\\n\\nTo rectify this situation, we\'re introducing a new\\n[`moon docker setup`](/docs/commands/docker/setup) command that will efficiently install\\ndependencies for projects focused/affected within the `Dockerfile`. This is a much better solution\\nthan before, and you should see improved Docker layer caching!\\n\\n```diff\\n-RUN moon setup\\n+RUN moon docker setup\\n```\\n\\n## New `moon query hash` command\\n\\nWhen moon runs a task, we generate a unique hash representing the state of that run. When something\\ngoes wrong however, and the hash is different than what you expect, debugging why is rather\\nnon-trivial and requires a lot of internal knowledge. We\'re looking to reduce this burden, by\\nintroducing the new [`moon query hash`](/docs/commands/query/hash) command.\\n\\n```shell\\n$ moon query hash 0b55b234\\n```\\n\\nThis command will print the contents of the hash manifest, which is all inputs and sources used to\\ngenerate the unique hash. From here you can use this output to investigate what\'s actually\\nhappening.\\n\\n```json\\n{\\n \\"command\\": \\"build\\",\\n \\"args\\": [\\"./build\\"]\\n // ...\\n}\\n```\\n\\n## New `moon query hash-diff` command\\n\\nExpanding on the new command above, we\'re also introducing the\\n[`moon query hash-diff`](/docs/commands/query/hash-diff) command, which can be used to compute the\\ndifference between 2 hashes. Perfect in understanding what has changed between ran tasks.\\n\\n```shell\\n$ moon query hash-diff 0b55b234 2388552f\\n```\\n\\nWhen ran, the command will print out the differences as highlighted lines. If you use `git diff`,\\nthis will feel familiar to you.\\n\\n```diff\\n{\\n\\t\\"command\\": \\"build\\",\\n\\t\\"args\\": [\\n+\\t\\t\\"./dist\\"\\n-\\t\\t\\"./build\\"\\n\\t],\\n\\t...\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.26.0) for a\\nfull list of changes.\\n\\n- A handful of critical bug fixes.\\n- Targets that generate an empty hash are now considered a failure, as they may be an edge case not\\n accounted for.\\n\\n## What\'s next?\\n\\nExpect the following in the v1 release!\\n\\n- Officially release a v1!\\n- Project tagging and constraints."},{"id":"proto","metadata":{"permalink":"/blog/proto","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx","source":"@site/blog/2023-03-09_proto.mdx","title":"Introducing proto, a next-generation toolchain manager!","description":"We are proud to announce the launch of proto, a next-generation toolchain manager for all","date":"2023-03-09T00:00:00.000Z","formattedDate":"March 9, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto","title":"Introducing proto, a next-generation toolchain manager!","authors":["milesj"],"tags":["proto","toolchain"],"image":"./img/proto/v0.png"},"prevItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"},"nextItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWe are proud to announce the launch of [proto](/proto), a next-generation toolchain manager for all\\nof your favorite programming languages.\\n\\n\x3c!--truncate--\x3e\\n\\n<div className=\\"flex justify-center mb-3\\">\\n <Logo width=\\"40%\\" className=\\"block\\" />\\n</div>\\n\\n[proto](/proto) is a Rust based multi-language toolchain manager that will download and install\\ntools by version, and immediately make them available on `PATH`. proto is launching with initial\\nsupport for [Bun](https://bun.sh), [Deno](https://deno.land), [Node.js](https://nodejs.org) (and\\nnpm, pnpm, yarn), and [Go](https://go.dev), with more languages on the way!\\n\\n```shell\\nproto install node 18\\nproto install go 1.20\\nproto install deno 1.30\\n```\\n\\nUnlike other version managers that pin their global binary to a default version, proto will\\n[contextually detect an applicable version](/docs/proto/detection) from the environment or the\\nlanguage\'s ecosystem (like `package.json`), ensuring the correct tool is always being ran.\\n\\n```shell\\n# Will detect a version before running\\nbun run ./script.ts\\n```\\n\\nFurthermore, with proto\'s [`.prototools`](/docs/proto/config) file, you can pin versions of all\\nrequired tools on a per-project or per-repository basis, allowing for near instant setup of\\ndeveloper environments. Perfect for onboarding new developers!\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.12.0\\"\\nyarn = \\"3.3.0\\"\\n```\\n\\n```shell\\n# Install all the things!\\nproto use\\n```\\n\\nAnd lastly, [moon](/moon)\'s toolchain is built on proto, so if you\'re using moon, you might as well\\nuse proto. This will enable a single toolchain for both tools (in v0.26)!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View documentation\\" href=\\"/docs/proto\\" size=\\"lg\\" />\\n</div>\\n\\n## How to get started?\\n\\nIn a terminal that supports Bash, run:\\n\\n```\\ncurl -fsSL https://moonrepo.dev/install/proto.sh | bash\\n```\\n\\nIn Powershell or Windows Terminal, run:\\n\\n```\\nirm https://moonrepo.dev/install/proto.ps1 | iex\\n```\\n\\nJump to the [documentation](/docs/proto) for more information on getting started and available\\ncommands!\\n\\n## Why another version manager?\\n\\nTo start, proto powers [moon\'s](/moon) toolchain and integrated developer environment. We believed\\nthat moon\'s toolchain would be extremely beneficial for developers as a whole, and so we extracted\\nproto out into a standalone Rust CLI and Rust crates that moon inherits.\\n\\nFurthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each\\nwith different workflows, CLI commands, and configuration files, is a poor developer experience.\\n\\nOur goal is to unify all of these into a single performant interface. A toolchain manager is the\\nnext step in the version manager evolution."},{"id":"v0.25","metadata":{"permalink":"/blog/v0.25","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx","source":"@site/blog/2023-02-27_v0.25.mdx","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","description":"With this release, we\'re landing Deno, our first supported language besides Node.js, and improving","date":"2023-02-27T00:00:00.000Z","formattedDate":"February 27, 2023","tags":[{"label":"deno","permalink":"/blog/tags/deno"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"offline","permalink":"/blog/tags/offline"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":4.475,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.25","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","authors":["milesj"],"tags":["deno","toolchain","moonbase","offline","github"],"image":"./img/v0.25.png"},"prevItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"},"nextItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re landing Deno, our first supported language besides Node.js, and improving\\ninteroperability of languages as a whole.\\n\\n\x3c!--truncate--\x3e\\n\\n## Deno tier 2 support (experimental)\\n\\nThree months ago we announced our [new tiered support structure](./v0.21) for languages, and as of\\ntoday, we\'re happy to announce that our second language to reach tier 2 is\\n[Deno](https://deno.land)! With tier 2 support, we now analyze Deno specific configuration files\\n(like `deno.json`) to infer dependencies and relationships, as well as utilize this information for\\ninputs and hashing purposes. With that being said, we\'re marking this release as experimental until\\nwe fine tune the implementation, and iron out all the bugs.\\n\\nTo get started with using Deno, enable the new [`deno`](/docs/config/toolchain#deno) setting in\\n[`.moon/toolchain.yml`](/docs/config/toolchain). At this time, we don\'t have many settings to\\nconfigure, so simply defining an empty object is enough to enable the Deno platform! Learn more\\nabout this in our [Deno handbook](/docs/guides/javascript/deno-handbook).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ndeno: {}\\n```\\n\\nOnce enabled, you can start using `deno` commands in your moon tasks. moon will automatically set\\nthe [`platform`](/docs/config/project#platform-1) to \\"deno\\" when using a deno command.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'deno fmt\'\\n```\\n\\n:::info\\n\\nBecause this is only tier 2 support, moon _does not_ download and install Deno into its toolchain.\\nmoon expects the `deno` binary to exist in the current environment.\\n\\n:::\\n\\nFurthermore, if you\'re working a project that is composed of multiple JavaScript runtimes, like\\nDeno, Bun, or Node.js, you can set the default `platform` for all tasks at the project-level.\\n\\n```yaml title=\\"moon.yml\\"\\nplatform: \'deno\'\\nlanguage: \'typescript\'\\ntype: \'application\'\\n```\\n\\nWe\'re very excited for this release as it paves the way for future language integrations, and\\nenables additional JavaScript runtimes!\\n\\n## CI insights in moonbase\\n\\nWe\'ve spent the last few weeks implementing a new [moonbase](https://moonrepo.app) feature called CI\\ninsights, where we track all CI runs (via [`moon ci`](/docs/commands/ci)), and all actions (tasks)\\nthat have ran based on affected files. In the future these insights will help catch regressions,\\nalert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and\\nrepositories.\\n\\n<Image src={require(\'./img/v0.25/runs-list.png\')} width=\\"90%\\" />\\n\\nWith this initial release, we track touched files, which targets are affected based on those files,\\nan estimation on how much time was saved or lost, the actions that ran and their final status,\\noutlined as a timeline.\\n\\n<Image src={require(\'./img/v0.25/run-detail.png\')} width=\\"90%\\" />\\n\\nInsights are enabled by default if you\'re using moonbase in your CI pipeline, and start using moon\\nv0.25! You can disable insights gathering from your\\n[organization settings page](https://moonrepo.app).\\n\\n## Offline mode\\n\\nmoon assumes that an internet connection is always available, as we download and install tools into\\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\\nWhile this is useful, having a constant internet connection isn\'t always viable.\\n\\nIn this release, we now check for an active internet connection and bypass certain workflows when\\napplicable.\\n[Jump to the official guide on offline mode for more information](/docs/guides/offline-mode)!\\n\\n## Custom project `language`\\n\\nProject\'s have always been able to define a [`language`](/docs/config/project#language) in\\n[`moon.yml`](/docs/config/project) that denotes the primary programming language for the project.\\nHistorically this has been a strict enum of supported values, and could _not_ be customized for\\nother languages. With the introduction of\\n[language driven task inheritance](./v0.23#new-scoped-tasks-with-moontasksyml), we felt like\\nrevisiting this setting, and as such, you\'re now able to define _any_ language in this setting,\\nwhich also feeds into the task inheritance system.\\n\\n```yaml title=\\"moon.yml\\"\\nlanguage: \'kotlin\'\\n```\\n\\nWith this change, `.moon/tasks/kotlin-application.yml`, `.moon/tasks/dotnet.yml`, and other\\nvariations are now possible! However, besides task inheritance, other functionality like platform\\ndetection, and Dockerfile support are not enabled.\\n\\n## Project-level TypeScript settings (breaking)\\n\\nOur TypeScript integration supports many automated workflows, like syncing project references, and\\nrouting `outDir` to our shared cache. This is wonderful for the majority, but for the handful of\\nprojects where these settings were not viable, there was no simple way to disable or opt out of the\\nfunctionality.\\n\\nWell no more, projects can now override the workspace-level TypeScript settings\\n`routeOutDirToCache`, `syncProjectReferences`, and `syncProjectReferencesToPaths` through the\\n[`toolchain.typescript`](/docs/config/project#typescript) setting in\\n[`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntoolchain:\\n\\ttypescript:\\n\\t\\trouteOutDirToCache: false\\n```\\n\\nBecause this setting was changed from a boolean to an object, the old pattern of disabling\\nTypescript must now use the `disabled` setting.\\n\\n```yaml title=\\"moon.yml\\"\\n# Old\\ntoolchain:\\n\\ttypescript: false\\n\\n# new\\ntoolchain:\\n\\ttypescript:\\n\\t\\tdisabled: true\\n```\\n\\n## New `moonrepo/setup-moon-action` GitHub action\\n\\nIf you\'re using GitHub Actions as your CI pipeline, we\'ve introducing a new action called\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action), that will install the\\n`moon` binary globally, and will cache (and restore) the moon toolchain.\\n\\nWith this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps\\naround setting up Node.js, and install dependencies.\\n\\n```yaml\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n - uses: moonrepo/setup-moon-action@v1\\n - run: moon ci\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.25.0) for a\\nfull list of changes.\\n\\n- Updated project, task, and target identifiers to support periods (`.`).\\n- Refactored glob matching to use workspace relative paths instead of absolute. Please report an\\n issue if hashing or affected detection is now inaccurate.\\n- We now build against older operating systems in an attempt to solve GLIBC version errors.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.26 release!\\n\\n- Officially release proto!\\n- Improved Deno interoperability."},{"id":"v0.24","metadata":{"permalink":"/blog/v0.24","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx","source":"@site/blog/2023-02-13_v0.24.mdx","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","description":"With this release, we\'ve polished our CLI experience and improved task interoperability.","date":"2023-02-13T00:00:00.000Z","formattedDate":"February 13, 2023","tags":[{"label":"project","permalink":"/blog/tags/project"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":4.28,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"v0.24","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","authors":["milesj","jpoz"],"tags":["project","platform","moonbase","remote-cache"],"image":"./img/v0.24.png"},"prevItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"},"nextItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'ve polished our CLI experience and improved task interoperability.\\n\\n\x3c!--truncate--\x3e\\n\\n## Remote caching now available\\n\\nIf you missed our announcement earlier this week,\\n[remote caching is now publicly available through our new service moonbase](/blog/moonbase)! If\\nyou\'re looking to speed up your CI pipelines and share build artifacts between runs, moonbase can\\nhelp.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"Try moonbase for free!\\" href=\\"https://moonrepo.app\\" size=\\"lg\\" />\\n</div>\\n\\n## Project-level task platform\\n\\nIn our previous release, [v0.23](./v0.23#project-level-environment-variables), we added support for\\nproject-level environment variables. This is great as it helps to reduce duplication for projects\\nwith many tasks. On that note, we wondered which configuration field we could apply similar\\ntreatment, and as such, we\'ve added a project-level [`platform`](/docs/config/project#platform)\\nsetting.\\n\\nWhen this setting is defined, all task\'s within the current project that have _not explicitly_\\nconfigured their `platform`, will inherit the project-level platform. If neither settings are\\ndefined, we\'ll attempt to detect the correct platform based on the state of the project.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\n# Will set non-explicit task\'s platform to node\\nplatform: \'node\'\\n\\ntasks:\\n\\t# Will be node\\n dev: # ...\\n\\n\\t# Will be node\\n build: # ...\\n\\n\\t# Will be system\\n serve:\\n # ...\\n platform: \'system\'\\n```\\n\\n> This setting is _extremely useful_ for projects that contain multiple languages. Even more so once\\n> we land Bun and Deno support, as we\'ll need a way to differentiate JavaScript/TypeScript projects!\\n\\n## Interactive tasks\\n\\nWhen moon executes a task, it streams both stdout and stderr to the terminal _and_ captures the\\noutput for later use. We do this for 2 reasons:\\n\\n- We store stdout.log and stderr.log files in a tarball archive.\\n- We replay this captured output when executing a task that has been cached.\\n\\nWhile this works, our approach is non-standard. Streams are either piped or inherited, not both!\\nBecause of our custom abstraction around streams and output capturing, it disrupts stdin, breaking\\nall interactive commands. If you tried to run a task that prompted you with a question and were\\nunable to answer it, this is why!\\n\\nTo remedy this shortcoming, we\'re approaching this from 2 angles. The first is that all tasks marked\\nas [`local`](/docs/config/project#local) (or have caching disabled) will no longer capture streamed\\noutput, and will instead stream natively, allowing interactivity out of the box, but only when\\nthey\'re the only task being ran. This will cover the majority of use cases.\\n\\nFor the remaining use cases, we\'re introducing a new `--interactive` flag for\\n[`moon run`](/docs/commands/run). When this flag is provided, it will force the target into an\\ninteractive mode.\\n\\n```shell\\n$ moon run app:new --interactive\\n```\\n\\n## Improved `moon query` commands (breaking)\\n\\nThe [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query touched-files`](/docs/commands/query/touched-files) commands are useful for building\\ncustom solutions and integrations on top of moon, but they weren\'t developer friendly as they output\\nlarge JSON blobs. To remedy this, we\'ve updated both commands to output a simple human readable\\nformat by default, and moved the JSON output behind a `--json` flag.\\n\\nFor example, `moon query touched-files` now outputs a list of absolute file paths separated by new\\nlines.\\n\\n```\\n$ moon query touched-files\\n/moon/website/docs/commands/query/projects.mdx\\n/moon/crates/cli/tests/query_test.rs\\n/moon/crates/cli/src/commands/query.rs\\n/moon/website/blog/2023-02-13_v0.24.mdx\\n```\\n\\nWhile `moon query projects` now outputs a list of project separated by new lines, where each line\\ncontains the project name, source, type, and language.\\n\\n```\\n$ moon query projects\\nreport | packages/report | library | typescript\\nruntime | packages/runtime | library | typescript\\ntypes | packages/types | library | typescript\\nvisualizer | packages/visualizer | library | typescript\\nwebsite | website | application | typescript\\n```\\n\\nWe had 2 goals in mind for this change, the first was to make it easily readable, and the second was\\nfor the default output to be easily parseable. We believe we\'ve accomplished these goals!\\n\\n## New `moon query tasks` command\\n\\nTo expand on the query improvements above, we wanted to provide a way to also query for tasks,\\nanswering the question of \\"What tasks exists and for what projects?\\". And with this, we\'re\\nintroducing a new [`moon query tasks`](/docs/commands/query/tasks) command!\\n\\n```\\n$ moon query tasks\\ntypes\\n\\t:build | packemon\\n\\t:format | prettier\\n\\t:lint | eslint\\n\\t:test | jest\\n\\t:typecheck | tsc\\nreport\\n\\t:build | packemon\\n\\t:format | prettier\\n\\t:lint | eslint\\n\\t:test | jest\\n\\t:typecheck | tsc\\n...\\n```\\n\\n## Shell completions\\n\\nAuto-completion in your terminal increases productivity, which we\'re a massive fan of. To help\\nsupport this, we\'re introducing the [`moon completions`](/docs/commands/completions) command, which\\ngenerates the appropriate command completions for your current shell.\\n\\nThis command writes to stdout, which can then be redirected to a file of your choice. Be sure to\\nconfigure your shell profile to load the completions!\\n\\n```shell\\n$ moon completions > ~/.bash_completion.d/moon.sh\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0) for a\\nfull list of changes.\\n\\n- Added [TypeScript v5](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/)\\n support.\\n- Added a `hasher.walkStrategy` setting to `.moon/workspace.yml`.\\n- Updated task `outputs` to support token functions (`@group`, `@globs`, etc).\\n- Reworked our comparison/baseline estimations calcuations.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.25 release!\\n\\n- Deno tier 2 support.\\n- CI insights and metrics within moonbase.\\n- Project-level TypeScript settings."},{"id":"moonbase","metadata":{"permalink":"/blog/moonbase","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-08_moonbase.mdx","source":"@site/blog/2023-02-08_moonbase.mdx","title":"Remote caching is now publicly available through moonbase","description":"We are proud to announce the launch of moonbase remote caching \u2013 a new solution that","date":"2023-02-08T00:00:00.000Z","formattedDate":"February 8, 2023","tags":[{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":1.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"moonbase","title":"Remote caching is now publicly available through moonbase","authors":["milesj","jpoz"],"tags":["moonbase","remote-cache"]},"prevItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"},"nextItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\nimport Logo from \'../static/brand/moonbase/logo.svg\';\\n\\nWe are proud to announce the launch of [moonbase](/moonbase) remote caching \u2013 a new solution that\\nhelps moon developers streamline their build processes and save time.\\n\\n\x3c!--truncate--\x3e\\n\\n<div className=\\"flex justify-center mb-3\\">\\n <Logo width=\\"65%\\" className=\\"block\\" />\\n</div>\\n\\nRemote caching allows developers to cache artifacts across builds, improving the efficiency of their\\nContinuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts\\nwhen moon is run with moonbase [remote caching enabled](/docs/guides/remote-cache). In the event\\nthat a CI run is executed with identical code, the cached artifacts are automatically pulled down,\\nreducing the time required to complete the build. In our tests, we have seen significant\\nimprovements in CI times, upwards of 90%.\\n\\n## What is moonbase?\\n\\nYou may be asking yourself, what is moonbase? [moonbase](/moonbase) is a new cloud service that\\nwe\'ve been working on to solve an array of problems in regards to repository and continous\\nintegration health.\\n\\n<Image src={require(\'../static/img/home/org.png\')} width=\\"80%\\" />\\n\\nThe first problem on this list is [remote caching](/docs/guides/remote-cache), which has been in a\\nbeta program for the past few months. We want to thank all the beta participants for testing our\\nsystems!\\n\\nWe\'ll also be launching CI insights in the next few weeks. This is a system where we track all your\\nCI runs (via `moon ci`), and all moon tasks (actions) that ran within each job. We use this\\ninformation to track the health of your pipelines, catch regressions, alert on flakiness, and more!\\nBut don\'t worry, this feature is opt-in.\\n\\nWe\'re very excited for moonbase! We have a massive roadmap ahead of us, but we\'re sure y\'all will\\nenjoy everything that it has to offer.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"Try moonbase for free!\\" href=\\"https://moonrepo.app\\" size=\\"lg\\" />\\n</div>\\n\\n## New homepage and product pages\\n\\nAs part of this release, we\'ve updated our homepage, and added new product pages for both\\n[moon](/moon) and [moonbase](/moonbase). This includes new logos and typography, which we\'re very\\nexcited for! This is only the beginning, as we\'re also working on additional behind the scenes\\nproducts. Stay tuned!"},{"id":"v0.23","metadata":{"permalink":"/blog/v0.23","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx","source":"@site/blog/2023-01-30_v0.23.mdx","title":"moon v0.23 - Scoped task inheritance, and project config updates","description":"With this release, we\'re launching the next iteration of our task inheritance model, as well as","date":"2023-01-30T00:00:00.000Z","formattedDate":"January 30, 2023","tags":[{"label":"survey","permalink":"/blog/tags/survey"},{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"projects","permalink":"/blog/tags/projects"}],"readingTime":5.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.23","title":"moon v0.23 - Scoped task inheritance, and project config updates","authors":["milesj"],"tags":["survey","tasks","projects"],"image":"./img/v0.23.png"},"prevItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"},"nextItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re launching the next iteration of our task inheritance model, as well as\\nquality of life improvements for project configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Developer survey\\n\\nBefore we dive into this new release, we have a quick survey for everyone. We know how everyone\\nfeels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice\\nquestions.\\n\\nWe\'re looking for feedback on moon itself, what features you\'re looking for, what you currently do\\nnot like, how you\'re currently using monorepos, your development workflows, so on and so forth. We\'d\\nvery much appreciate it if you could engage with this survey!\\n\\n<div class=\\"flex justify-center\\">\\n <Button\\n label=\\"Take survey!\\"\\n href=\\"https://a.sprig.com/UE1SOG1zV3o5SzdRfnNpZDpmOTQ5MjU1Yy1jYTZlLTRmYjQtOTRjZi0wMzZlZjExN2JjZDg=\\"\\n size=\\"lg\\"\\n />\\n</div>\\n\\n## Improved task inheritance model\\n\\nOne of the guiding principles behind moon is to simplify repository maintenance, with task\\nmanagement being top of list. We weren\'t happy with the current state of things, as every build\\nsystem and task runner that exists always opted for per-project task management, which is a massive\\namount of overhead and tech debt in the long run. To combat this, moon was designed from the\\nground-up using a task inheritance model, where \\"global\\" tasks were defined in\\n[`.moon/project.yml`](/docs/config/tasks), with per-project tasks still being an option with\\n[`moon.yml`](/docs/config/project).\\n\\nWhile inheritance worked great, it did have some shortcomings, such as:\\n\\n- With the addition of [new programming languages](/blog/v0.21), there\'s no way to easily define\\n tasks for specific languages, that should only be inherited by specific projects.\\n- There\'s no way to differentiate tasks between applications or libraries, as they typically have\\n different build/compilation systems.\\n- All of the problems above can be \\"solved\\" with\\n [`workspace.inheritedTasks`](/docs/config/project#inheritedtasks) in all projects, but it\'s a\\n maintenance headache.\\n\\nWe\'ve been documenting a solution to these problems for many months now, and we\'re very excited to\\nfinally release our new and improved task inheritance model that solves all of the problems above,\\nand opens the doors for future enhancements! Keep reading for more information.\\n\\n### New `.moon/tasks.yml` (breaking)\\n\\nTo start, we renamed `.moon/project.yml` to `.moon/tasks.yml` as we want to emphasize that this\\nconfiguration file is for task inheritance functionality only. However, the semantics of this file\\nhas _not_ changed, and is still \\"tasks to be inherited by _all_ projects\\".\\n\\n```yaml title=\\".moon/tasks.yml\\"\\n$schema: \'https://moonrepo.dev/schemas/tasks.json\'\\n\\ntasks:\\n # ...\\n```\\n\\n> We\'ll automatically rename this file for you when running a `moon` command!\\n\\n### New scoped tasks with `.moon/tasks/*.yml`\\n\\nThe biggest change to task inheritance is that tasks can now be scoped by a project\'s\\n[`language`](/docs/config/project#language) or [`type`](/docs/config/project#type) using the new\\n`.moon/tasks/<language>.yml` or `.moon/tasks/<language>-<type>.yml` configuration files! Jump to the\\n[official documentation on task inheritance](/docs/concepts/task-inheritance) for more information\\non how scoping works, the lookup order of files, and much more.\\n\\nAs a demonstration, you can scope tasks to Node.js projects with `.moon/tasks/node.yml`, Rust\\napplications with `.moon/tasks/rust-application.yml`, Go libraries with\\n`.moon/tasks/go-library.yml`, Ruby scripts with `.moon/tasks/ruby-tool.yml`, so on and so forth!\\n\\nWe\'re very excited for this feature, as it\'s something we personally needed, and we\'re sure you all\\ndo as well. It also future proofs moon for new programming languages, additional implicit scenarios\\nto handle, and yet to be discovered functionality.\\n\\n<Tabs\\n groupId=\\"scoped-task\\"\\n defaultValue=\\"node\\"\\n values={[\\n { label: \'Node\', value: \'node\' },\\n { label: \'Go\', value: \'go\' },\\n { label: \'PHP\', value: \'php\' },\\n { label: \'Python\', value: \'python\' },\\n { label: \'Ruby\', value: \'ruby\' },\\n { label: \'Rust\', value: \'rust\' },\\n ]}\\n>\\n<TabItem value=\\"node\\">\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'prettier --write .\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"go\\">\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'go fmt\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"php\\">\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'phpcbf .\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"python\\">\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'pylint .\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"ruby\\">\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'rubocop -l\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"rust\\">\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'cargo fmt --all --check\'\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n### Moved `implicitDeps` and `implicitInputs` (breaking)\\n\\nTo standardize inheritance and expansion related functionality, we\'ve moved the\\n`runner.implicitDeps` and `runner.implicitInputs` settings from `.moon/workspace.yml` to\\n[`.moon/tasks.yml`](/docs/config/tasks#implicitdeps) and\\n[`.moon/tasks/*.yml`](/docs/config/tasks#implicitinputs) and removed the `runner` prefix.\\n\\nThis allows for implicits to also be scoped accordingly and granularly. For example, projects can\\nnow inherit dependency manager related files as implicit inputs on a per-language basis:\\n\\n<Tabs\\n groupId=\\"scoped-task\\"\\n defaultValue=\\"node\\"\\n values={[\\n { label: \'Node\', value: \'node\' },\\n { label: \'Go\', value: \'go\' },\\n { label: \'PHP\', value: \'php\' },\\n { label: \'Python\', value: \'python\' },\\n { label: \'Ruby\', value: \'ruby\' },\\n { label: \'Rust\', value: \'rust\' },\\n ]}\\n>\\n<TabItem value=\\"node\\">\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\nimplicitInputs:\\n\\t- \'package.json\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"go\\">\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\nimplicitInputs:\\n\\t- \'go.mod\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"php\\">\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\nimplicitInputs:\\n\\t- \'composer.json\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"python\\">\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\nimplicitInputs:\\n\\t- \'pyproject.toml\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"ruby\\">\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\nimplicitInputs:\\n\\t- \'Gemfile\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"rust\\">\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\nimplicitInputs:\\n\\t- \'Cargo.toml\'\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n## Project-level environment variables\\n\\nSince moon\'s inception, tasks can be configured with pre-defined environment variables using the\\n[`env`](/docs/config/project#env-1) setting. These variables would then be passed to the command\\nduring execution. This works perfectly for encapsulation, but becomes tedious when the same\\nvariables are repeated for multiple tasks.\\n\\nTo remedy this, environment variables can now be defined at the top of\\n[`moon.yml`](/docs/config/project) using the top-level [`env`](/docs/config/project#env) setting.\\nVariables defined at the top-level will be inherited by all tasks in the current project, but will\\nnot override task-level variables of the same name.\\n\\nTo demonstrate this, the following config:\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntasks:\\n dev:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n build:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n serve:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n```\\n\\nCan be rewritten as:\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nenv:\\n TARGET_ENV: \'development\'\\n\\ntasks:\\n dev:\\n # ...\\n\\n build:\\n # ...\\n\\n serve:\\n # ...\\n```\\n\\n## Globs in task outputs\\n\\nAnother feature that\'s been around since moon\'s inception is task\\n[`outputs`](/docs/config/project#outputs), which only supported relative files and folders. For\\nhistorical reasons, it was the easiest solution at the time, but in practice, supporting more\\ngranular control is better.\\n\\nAs such, task `outputs` now support glob patterns as well! This is perfect for restricting and\\nfiltering down which files are cached in the artifact. However, be aware that during hydration (a\\ncache hit), all files _not matching the glob_ will be deleted, so ensure that critical files _do_\\nmatch.\\n\\nTo demonstrate this, if building a JavaScript project, you may want to include `.js` and `.css`\\nfiles, but exclude everything else (`.map`, etc).\\n\\n```yaml title=\\"moon.yml\\" {4,5}\\ntasks:\\n build:\\n command: \'webpack\'\\n outputs:\\n - \'build/**/*.{js,css}\'\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.23.0) for a\\nfull list of changes.\\n\\n- Updated `moon migrate from-turborepo` to preserve globs in outputs.\\n- Updated project graph to no longer cache when there\'s no VCS root.\\n- Updated pnpm to use the new `pnpm dedupe` command when the version is >= 7.26.0.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.24 release!\\n\\n- New `moon query tasks` command.\\n- New per-project `platform` setting.\\n- Token support in task `outputs`.\\n- TypeScript v5 support."},{"id":"v0.22","metadata":{"permalink":"/blog/v0.22","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx","source":"@site/blog/2023-01-16_v0.22.mdx","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","description":"It\'s the first release of the year, and with this release, we\'re landing some quality of life","date":"2023-01-16T00:00:00.000Z","formattedDate":"January 16, 2023","tags":[{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"migrate","permalink":"/blog/tags/migrate"}],"readingTime":2.805,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.22","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","authors":["milesj"],"tags":["graph","pipeline","hasher","migrate"],"image":"./img/v0.22.png"},"prevItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"},"nextItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nIt\'s the first release of the year, and with this release, we\'re landing some quality of life\\ninfrastructure and workflow improvements!\\n\\n\x3c!--truncate--\x3e\\n\\n## New action pipeline\\n\\nWhen running targets, we generate a graph of actions to execute in order within the action runner.\\nAn action is one of \\"setup toolchain\\", \\"install dependencies\\", \\"run target\\", so on and so forth. Our\\naction runner would then spawn threads for every action using the [Tokio](https://tokio.rs/)\\nruntime. While this worked great, concurrency was entirely abstracted away from us.\\n\\nTo mitigate this problem, we\'ve implemented a new system for executing actions known as the action\\npipeline (or simply pipeline), which implements a dynamically scaling thread pool on top of Tokio.\\nThis provides us with more control over concurrency, starting with the new `--concurrency` option,\\nwhich restricts the number of threads (or CPU cores).\\n\\n```shell\\n$ moon run :build --concurrency 2\\n```\\n\\n## Expanded hashing functionality\\n\\nWhen we run targets in the pipeline, we hash a collection of inputs to calculate whether to continue\\nrunning or to exit early. This functionality has been extremely beneficial for optimizing the\\npipeline, and so, we\'ve expanded the hasher for other use cases. To start, the following 2 workflows\\nnow utilize the hasher:\\n\\n- When determining to auto-install dependencies (`npm install`, etc), we now hash all production,\\n development, and peer dependencies from applicable manifests (`package.json`). This has resulted\\n in more accurate installs, as we\'re no longer inadvertently installing when a non-dependency field\\n is modified in a manifest. On top of this, will still take into account lockfile modified\\n timestamps.\\n- When generating the project graph, we now hash all sources, aliases, and configuration files, to\\n determine whether to load the project graph from the local cache.\\n\\n## Project graph is now cached\\n\\nBecause of the hashing improvements above, we\'re now able to cache the entirety of the project graph\\ninto local cache. Depending on how many projects are in your workspace, you may see performance\\nimprovements on subsequent runs as we\'re no longer re-building the project graph over and over\\neverytime the `moon` binary is ran.\\n\\n## Migrate from Turborepo\\n\\nTurborepo is a popular task runner for Node.js based monorepos, but doesn\'t support all the\\nfunctionality that moon does. If you\'re looking to prototype moon, or migrate from Turborepo to moon\\nholistically, we now support a new command\\n[`moon migrate from-turborepo`](/docs/commands/migrate/from-turborepo).\\n\\nThis command will migrate the `turbo.json` file to moon applicable configuration files!\\n\\n```shell\\n$ moon migrate from-turborepo\\n```\\n\\n## Breaking changes\\n\\n### Renamed events\\n\\nBecause of the runner -> pipeline changes above, the `runner.*` [webhook](/docs/guides/webhooks)\\nevents were renamed to `pipeline.*`.\\n\\n### Updated CLI options\\n\\nRenamed the `--upstream` option to `--remote`, to better align with Git terminology, and removed the\\n`--report` option from `moon check` and `moon run` commands. Reports are now always created.\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.22.0) for a\\nfull list of changes.\\n\\n- Added Bun as a tier 1 language (doesn\'t do much at the moment).\\n- Added a [`versionConstraint` setting](/docs/config/workspace#versionconstraint) in\\n `.moon/workspace.yml` that enforces a requirement on the running moon binary.\\n- Updated the [`project` fields](/docs/config/project#project) in `moon.yml` to be optional,\\n excluding `description`.\\n- Internal improvements to remote caching and artifact uploading.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.23 release!\\n\\n- Improved task inheritance workflow.\\n- Glob support in task `outputs`.\\n- Project-level environment variables."},{"id":"2023-roadmap","metadata":{"permalink":"/blog/2023-roadmap","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx","source":"@site/blog/2023-01-04_2023-roadmap.mdx","title":"What\'s in store for 2023","description":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long","date":"2023-01-04T00:00:00.000Z","formattedDate":"January 4, 2023","tags":[{"label":"roadmap","permalink":"/blog/tags/roadmap"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":5.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"2023-roadmap","title":"What\'s in store for 2023","authors":["milesj"],"tags":["roadmap","moonbase","proto","toolchain"]},"prevItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"},"nextItem":{"title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","permalink":"/blog/v0.21"}},"content":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long\\nroadmap.\\n\\n\x3c!--truncate--\x3e\\n\\n## Year 2022 in review\\n\\nThe original concept and\\n[first commit of moon](https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d)\\n(codenamed monolith) landed October 23rd, 2021. Eight months later, we\\n[launched an alpha of moon](https://twitter.com/tothemoonrepo/status/1527467865200136192) to the\\npublic on May 19th, 2022. Since then, we\'ve landed 21 amazing releases based on feedback from the\\ncommunity and our long-term vision, with some such features as:\\n\\n- Linux musl, macOS silicon, and ARM support\\n- Full Node.js/JavaScript ecosystem support\\n- End-to-end caching and hashing of build artifacts\\n- Streamlined configuration\\n- Improved developer experience\\n- Massive performance improvements\\n- Automatic cache cleaning\\n- Code generation / scaffolding\\n- Dockerfile integration\\n- Remote caching\\n- New langauage agnostic toolchain\\n- Onboarding of 5 new languages: Rust, Go, PHP, Python, Ruby\\n- Rewritten project and dependency graphs\\n- Project-level toolchain overrides\\n- Project specific caching\\n- VSCode extension\\n- 2 GitHub actions\\n- ...and so much more!\\n\\nWe\'re very proud with the quality and amount of features we\'ve released in a 7 month timeframe. On\\ntop of this, our [GitHub stars](https://github.com/moonrepo/moon/stargazers) have steadily passed\\nthe 1k mark, [npm](https://www.npmjs.com/package/@moonrepo/cli) downloads are 500 a week and\\ngrowing, and our [Twitter](https://twitter.com/tothemoonrepo) isn\'t doing too bad. This is only the\\nstart, and we\'re not planning to go anywhere!\\n\\n## Path to an official v1 release\\n\\nA common question we receive is \\"When is v1 going to be released?\\", as some consumers are weary of\\nusing a \\"beta\\" tool. We definitely understand, and as such, have posted a\\n[high-level overview](https://github.com/moonrepo/moon/issues/491) of what we\'re hoping to land\\nbefore we tag an official v1 release. It basically boils down to landing breaking changes (mainly\\naround configuration) before v1, so that we avoid bumping to a v2 or v3 unnecessarily. We also want\\nto land our [toolchain changes](#proto) and [remote caching](#moonbase) improvements before then.\\n\\nOur current timeframe is by end of Q1, if not, early Q2.\\n\\n## Launching moonbase\\n\\nWe haven\'t mentioned this name publicly yet, but now seems like the perfect time! For the past 6\\nmonths we\'ve been working a new web application and service called moonbase, which pairs nicely with\\nmoon, as it provides additional functionality that can only be achieved by persisting information\\nacross runs.\\n\\nTo start, this service provides [remote caching](/docs/guides/remote-cache), which we\'re already\\nusing in production. At this point in time, objects are stored in our moonrepo S3 buckets, but one\\nof our major goals is to support storing objects in your private buckets, supporting additional\\ncloud providers like Google Cloud and Azure, and in the long-term, a self-hosted / on-premises\\nsolution.\\n\\nBut that\'s not all! moonbase will integrate deeply with [continuous integration](/docs/guides/ci)\\npipelines to generate insights, capture metrics, and provide near real-time dashboards. Our goal is\\nto provide a holistic overview of your entire repository.\\n\\nmoonbase with publicly available remote caching is slated for end of Q1. CI integration is\\ntentatively slated for Q2. We have even more features that we\'ll reveal in the future, so stay\\ntuned!\\n\\n## Launching proto\\n\\nAnother tool we haven\'t mentioned yet is proto (name still in flux). proto is a standardized version\\nmanager for programming languages and dependency managers. We\'ve basically extracted our\\n[toolchain](/docs/concepts/toolchain) into a standalone library, as it\'s super beneficial for\\nprojects and developers not using moon. It provides all the functionality you\'d expect from a\\nversion manager:\\n\\n- Downloading and installing specific versions\\n- Automatic version detection\\n- Updating PATH with the applicable version\\n- Generating shims\\n- Pinning shell, local, and global versions\\n\\nSo how\'s this different from existing version managers like nvm or volta? To start, it\'s written in\\nRust so it\'s _fast_ and doesn\'t suffer from being Bash only. Because of this, it\'s also\\nmulti-platform and will work on Windows. But the biggest different is that proto is language\\nagnostic and will support multiple languages. To start, it supports Node.js and Deno, but will be\\nexpanded to support our other toolchain languages like Bun, PHP, Ruby, and Python. Another cool\\nfeature is that it also manages versions of dependency managers like npm, yarn, and pnpm!\\n\\nWe\'re planning to launch proto at the start of Q2.\\n\\n## Expanding language support\\n\\nOur initial goal for moon was to provide a first-class build system for the frontend ecosystem that\\nfocused heavily on automation and the developer experience. We believe we\'ve accomplished this goal,\\nbut of course, nothing is ever actually complete, and so JavaScript, TypeScript, and Node.js support\\nwill continually be improved.\\n\\nHowever, that\'s not the entirety of the frontend ecosystem, as [Deno](https://deno.land/) and\\n[Bun](https://bun.sh/) have been gaining traction this past year, and of course, moon will support\\nboth of them as first-class platforms by end of year.\\n\\nFuthermore, we recently landed tier 1 support for 5 new languages: Rust, Ruby, PHP, Python, and Go.\\nOur end of year goal for these languages is to provide full tier 2 support. Tier 3 support is still\\nan unknown, as we need to investigate the best possible way to integrate these languages into the\\ntoolchain (this work is ongoing). We\'ll also add new languages based on demand.\\n\\nWith all that being said, this is our tenative timeline around\\n[language support](/docs#supported-languages) (which may shift at any time):\\n\\n- **Q1**\\n - Tier 1 support for Bun.\\n - Tier 2 support for Deno.\\n- **Q2**\\n - Tier 2 support for Bun, PHP.\\n - Tier 3 support for Deno.\\n- **Q3**\\n - Tier 2 support for Ruby, Python.\\n - Tier 3 support for Bun.\\n- **Q4**\\n - Tier 2 support for Rust, Go.\\n\\n## Supporting release workflows\\n\\nmoon currently excels at organizing projects, running tasks, and building artifacts, but it has no\\nsupport for release workflows. This is everything from capturing changes, bumping versions,\\ngenerating changelogs, and publishing to upstream registries. If you use\\n[Lerna](https://github.com/lerna/lerna) or [changesets](https://github.com/changesets/changesets),\\nyou should be very familiar with this workflow.\\n\\nSince moon supports monorepos and has in-depth knowledge of the project graph, we can support\\nrelease workflows with ease. Our goal is to support this workflow (for all languages) from start to\\nfinish by end of year, ideally much sooner than that!\\n\\n## More repository management tooling\\n\\nThe other aspect of moon is that it\'s a repository management tool as well as a build system. We\\nwant to embrace this even further by providing explicit functionality or automation when applicable.\\nSome examples of this are in-repository secrets management, git hooks management, code ownership and\\nquality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much\\nmore."},{"id":"v0.21","metadata":{"permalink":"/blog/v0.21","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx","source":"@site/blog/2022-12-19_v0.21.mdx","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","description":"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered","date":"2022-12-19T00:00:00.000Z","formattedDate":"December 19, 2022","tags":[{"label":"runner","permalink":"/blog/tags/runner"},{"label":"language","permalink":"/blog/tags/language"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"cache","permalink":"/blog/tags/cache"},{"label":"graph","permalink":"/blog/tags/graph"}],"readingTime":4.255,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.21","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","authors":["milesj"],"tags":["runner","language","platform","cache","graph"],"image":"./img/v0.21.png"},"prevItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"},"nextItem":{"title":"moon v0.20 - Toolchain, caching, and hydration improvements","permalink":"/blog/v0.20"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nHappy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered\\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\\nsystem! On top of this, we\'ve worked heavily on bug fixing, optimizations, and overall quality of\\nlife improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New tiered language support\\n\\nThe most common question we receive is whether we plan to support additional languages besides\\nNode.js, with Rust, Deno, and Bun being top of that list. Adding new languages is non-trivial, as we\\nneed to build abstractions that support and integrate with the language\'s ecosystem, primarily\\ndependency managers and resolution algorithms.\\n\\nThis is a very large upfront cost, with a huge time and resource commitment. To reduce this burden,\\nwe\'re introducing a tiered support structure, so that languages can be incrementally integrated into\\nmoon and adopted by consumers.\\n\\nThe tiers break down as follows:\\n\\n-  <Label text=\\"Tier 0\\" variant=\\"failure\\" />   **No direct integration** - Tool is not\\n directly supported in moon, but can still be ran using the\\n [\\"system\\" task platform](../docs/faq#can-we-run-other-languages), which expects the tool to exist\\n in the current environment.\\n-  <Label text=\\"Tier 1\\" variant=\\"warning\\" />   **Project categorization** - Projects can\\n configure their primary [language in `moon.yml`](../docs/config/project#language), and have a\\n dedicated Rust crate for metadata.\\n-  <Label text=\\"Tier 2\\" variant=\\"info\\" />   **Ecosystem platformization** - moon deeply\\n integrates with the language\'s ecosystem by parsing manifests, lockfiles, and other semantic files\\n to infer dependencies, tasks, and other necessary information.\\n-  <Label text=\\"Tier 3\\" variant=\\"success\\" />   **Toolchain integration** - Language is\\n directly supported in the toolchain, configured in\\n [`.moon/toolchain.yml`](../docs/config/toolchain), and will automatically be downloaded and\\n installed.\\n\\nTo learn more about our currently supported languages and their tiers,\\n[jump to the official documentation](/docs#supported-languages).\\n\\n> One important facet we\'d like to express, is that _all_ languages and tools fall into tier 0. Feel\\n> free to use anything you\'d like as a task command!\\n\\n## Basic support for Go, PHP, Python, Ruby, and, Rust\\n\\nAs announced above, we now incrementally support new languages, and have integrated the following 5\\nlanguages with tier 1 support: Go, PHP, Python, Ruby, and, Rust! Start using these languages today\\nby setting the [`language`](../docs/config/project#language) field in `moon.yml`, or by letting moon\\ninfer the language based on files in the project root (for example, `Cargo.toml` is Rust).\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nlanguage: \'rust\'\\n\\ntasks:\\n build:\\n command: \'cargo build\'\\n inputs:\\n - \'src/**/*\'\\n - \'Cargo.toml\'\\n test:\\n command: \'cargo test\'\\n inputs:\\n - \'src/**/*\'\\n - \'tests/**/*\'\\n - \'Cargo.toml\'\\n```\\n\\n> Because these languages are tier 1, moon _does not_ install the language automatically, and will\\n> require the command to already exist in the environment. Furthermore, the project language will\\n> automatically set all task\'s `platform` to \\"system\\", at least until it\'s supported directly in the\\n> toolchain.\\n\\n## Interactive project and dependency graphs\\n\\nThanks to the amazing contribution from [Diptesh Choudhuri](https://github.com/IgnisDa), we now have\\ninteractive project and dependency graphs when running the\\n[`moon project-graph`](../docs/commands/project-graph) and\\n[`moon dep-graph`](../docs/commands/action-graph) commands respectively.\\n\\nThis is only the first iteration of these graphs. Expect more advanced features in the future, like\\nfiltering, node/edge inspection, exporting, and more!\\n\\n<Image src={require(\'./img/v0.21/graph.png\')} width=\\"80%\\" />\\n\\n## New `--updateCache` command line option\\n\\nOur caching layer is pretty powerful, as it helps to avoid tasks from running unnecessarily.\\nHowever, there are situations where you need to refresh or force update the cache outside of the\\n[`inputs`](../docs/config/project#inputs) list. This is currently achieved with the\\n[`--cache`](../docs/commands/overview#caching) option, like `moon --cache off run ...`, but this is\\nnon-ideal for a few reasons:\\n\\n1. It disables _all caching_, which means dependency installs/dedupes will continually be ran. This\\n adds a lot of unwanted overhead.\\n2. It requires you to backspace in the terminal to add the option _before_ `run` or `check`, as it\'s\\n a global option. A little tedious but important for experience.\\n\\nSo to work around these limitations, we\'ve added a new `--updateCache` (or `-u`) to both\\n[`moon run`](../docs/commands/run) and [`moon check`](../docs/commands/run), which will bypass\\nreading any existing cache items, but will force update the cache base on the latest run.\\n\\n```shell\\n$ moon run app:build --updateCache\\n```\\n\\n## New multi-status affected filtering\\n\\nWe support running tasks based on affected files using the\\n[`moon run --affected`](../docs/commands/run) command, which is great for reducing the amount of\\ntasks being ran, and for applying code quality tooling like Git hooks. However, you were only able\\nto apply a single status filter, like \\"deleted\\" or \\"modified\\", which was non-ideal... but no more!\\n\\nYou can now apply multiple statuses by passing the `--status` option multiple times.\\n\\n```shell\\n$ moon run :lint --affected --status modified --status added\\n```\\n\\nThis pairs nicely with the recent\\n[`affectedFiles` task option](../docs/config/project#affectedfiles) changes!\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.21.0) for a\\nfull list of changes.\\n\\n- Refactored project and dependency graphs for improved performance.\\n- Added args and env var variants to the `affectedFiles` task option.\\n- Added `--minimal` to `moon init` for quick scaffolding and prototyping.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.22 release!\\n\\n- Generalized hashing for use in any context (improved deps installation).\\n- More work on language integrations."},{"id":"v0.20","metadata":{"permalink":"/blog/v0.20","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-29_v0.20.mdx","source":"@site/blog/2022-11-29_v0.20.mdx","title":"moon v0.20 - Toolchain, caching, and hydration improvements","description":"With this release, we\'ve focused heavily on future proofing our toolchain and how it integrates with","date":"2022-11-29T00:00:00.000Z","formattedDate":"November 29, 2022","tags":[{"label":"hydration","permalink":"/blog/tags/hydration"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"generator","permalink":"/blog/tags/generator"},{"label":"runner","permalink":"/blog/tags/runner"}],"readingTime":3.79,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.20","title":"moon v0.20 - Toolchain, caching, and hydration improvements","authors":["milesj"],"tags":["hydration","toolchain","generator","runner"],"image":"./img/v0.20.png"},"prevItem":{"title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","permalink":"/blog/v0.21"},"nextItem":{"title":"Integrating TypeScript in a monorepo","permalink":"/blog/typescript-monorepo"}},"content":"With this release, we\'ve focused heavily on future proofing our toolchain and how it integrates with\\nmoon. We\'ve also landed a handful of quality of life improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Breaking changes\\n\\nTo start, we have a few breaking changes this release to be aware of!\\n\\n### Moved toolchain settings\\n\\nThe [`.moon/workspace.yml`](../docs/config/workspace) config file was getting rather bloated and\\ncomplicated, as it contained the projects list, settings for each toolchain language, and settings\\nfor each supported service (runner, generator, etc). Furthermore, this file will keep getting larger\\nwith each new language and service we support.\\n\\nTo future proof moon, and to land as many breaking changes before an official v1, we\'ve decided to\\nmove toolchain specific settings into a new file, [`.moon/toolchain.yml`](../docs/config/toolchain).\\nThis new file will house all language and dependency manager specific settings.\\n\\nTo migrate, move the `node` and `typescript` settings from `.moon/workspace.yml` to\\n`.moon/toolchain.yml`.\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n # ...\\n\\ntypescript:\\n # ...\\n```\\n\\n### Moved project-level overrides\\n\\nContinuing with the changes above, we\'ve also moved the `workspace.node` and `workspace.typescript`\\nfrom [`moon.yml`](../docs/config/project) into a new parent field, `toolchain`. We think this makes\\nmore sense.\\n\\n```yaml title=\\"moon.yml\\"\\n# Before\\nworkspace:\\n node:\\n version: \'...\'\\n\\n# After\\ntoolchain:\\n node:\\n version: \'...\'\\n```\\n\\n## Future of the toolchain\\n\\nWe\'re really proud of our toolchain, as it avoids an array problems that developers deal with on a\\nday to day basis, primarily around running tasks using the wrong version of Node.js or their chosen\\npackage manager. While we\'re in the process of supporting additional languages, starting with\\n[Deno](https://deno.land/), we had an idea... Since this is basically a better \\"version manager for\\ntools\\", why not extract this out into something else?\\n\\nAnd that\'s what we plan to do! Before we do so, we\'ve had to make some architectural changes, many\\nof which have landed in this release. During this process, we were able to implement an even better\\ntoolchain, polish many of the edge cases, and improve performance! Stay tuned for more information\\non this new tool!\\n\\n## Increased output hydration by 8-10x\\n\\nIn moon, hydration is the concept of unpacking an existing hashed artifact into a\\n[task\'s outputs](../docs/config/project#outputs) during a cache hit. In our previous implementation,\\nwe would delete all existing outputs before unpacking the archive to ensure a clean slate and to\\navoid stale files. While this worked, it wasn\'t the most performant, taking about 280ms for 1,000\\nfiles (which is still reasonably fast!).\\n\\nIn our new implementation, we now utilize a smart file tree diffing algorithm that will only unpack\\nfiles _with different content_, and will automatically remove stale files in the process. This has\\nresulted in a 10x performance increase, taking about 30ms! Multiply this by many projects, the\\nresults should be very apparent.\\n\\nWe hope you enjoy this improvement, as it\'s the first of many to come!\\n\\n## Cache any and all targets\\n\\nBy default, all [targets](../docs/concepts/target) that produce outputs are cached and archived. For\\ntargets that _do not_ produce outputs, like testing, linting, and typechecking, these are not\\ncached. This will result in slower CI times as they are continuously ran, even if nothing has\\nchanged. However with our new [remote caching](../docs/guides/remote-cache) layer, we can skip these\\nfrom running entirely!\\n\\nTo achieve this, we\'ve added a new setting to [`.moon/workspace.yml`](../docs/config/workspace)\\ncalled [`runner.archivableTargets`](../docs/config/workspace#archivabletargets). This setting\\naccepts a list of targets that should be archived, regardless of whether or not they produce\\noutputs.\\n\\nFor example, if we want to cache and archive testing, linting, and typechecking, we can define the\\nfollowing:\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nrunner:\\n archivableTargets:\\n - \':lint\'\\n - \':test\'\\n - \':typecheck\'\\n```\\n\\n## Path handling in generator templates\\n\\nOur code generation is powered by [Tera](https://tera.netlify.app/docs/#built-ins), a templating\\nengine with a ton of built-in utilities. However, it does not provide utilities for file paths, and\\nas such, we now provide `path_join` and `path_relative` filters.\\n\\n```twig\\n{{ some_path | path_relative(from = workspace_root) }}\\n```\\n\\nWe also now inject variables for the working directory, destination, and workspace root. This will\\nhelp with custom paths, especially within frontmatter!\\n[View the codegen docs for more information](../docs/guides/codegen#variables).\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.20.0) for a\\nfull list of changes.\\n\\n- Added `vcs.remoteCandidates` to `.moon/workspace.yml` to customize the remotes for Git to query\\n against.\\n- Added support for `moduleSuffixes` and `moduleDetection` in TypeScript `tsconfig.json` compiler\\n options.\\n- YAML files will now respect the closest `.editorconfig` file.\\n- Refactored terminal output for bette readability.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.21 release!\\n\\n- An interactive dependency and project graph visualizer.\\n- A more performant project graph.\\n- More quality of life improvements for affected files."},{"id":"typescript-monorepo","metadata":{"permalink":"/blog/typescript-monorepo","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-21_typescript-monorepo.mdx","source":"@site/blog/2022-11-21_typescript-monorepo.mdx","title":"Integrating TypeScript in a monorepo","description":"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is","date":"2022-11-21T00:00:00.000Z","formattedDate":"November 21, 2022","tags":[{"label":"typescript","permalink":"/blog/tags/typescript"},{"label":"monorepo","permalink":"/blog/tags/monorepo"}],"readingTime":0.505,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"typescript-monorepo","title":"Integrating TypeScript in a monorepo","authors":["milesj"],"tags":["typescript","monorepo"]},"prevItem":{"title":"moon v0.20 - Toolchain, caching, and hydration improvements","permalink":"/blog/v0.20"},"nextItem":{"title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","permalink":"/blog/v0.19"}},"content":"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is\\na fair question, as there\'s no in-depth source of truth, or one perfect way of doing it. However, we\\ntook it upon ourselves to answer this question!\\n\\n\x3c!--truncate--\x3e\\n\\nBased on our experience scaling and managing frontend repositories in open source and large\\ncompanies like Airbnb and Coinbase, we\'re happy to\\n[announce an in-depth guide on using TypeScript project references in a monorepo](../docs/guides/javascript/typescript-project-refs)!\\n\\nWe hope you find this guide useful, and if you have any questions, feel free to discuss them in our\\n[Discord community](https://discord.gg/qCh9MEynv2)!"},{"id":"v0.19","metadata":{"permalink":"/blog/v0.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-14_v0.19.mdx","source":"@site/blog/2022-11-14_v0.19.mdx","title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","description":"With this release, we\'ve focused heavily on our remote caching architecture. Since this is a massive","date":"2022-11-14T00:00:00.000Z","formattedDate":"November 14, 2022","tags":[{"label":"affected","permalink":"/blog/tags/affected"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"},{"label":"dep-graph","permalink":"/blog/tags/dep-graph"}],"readingTime":2.895,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.19","title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","authors":["milesj"],"tags":["affected","remote-cache","dep-graph"],"image":"./img/v0.19.png"},"prevItem":{"title":"Integrating TypeScript in a monorepo","permalink":"/blog/typescript-monorepo"},"nextItem":{"title":"moon v0.18 - Improved configuration and initialization flow","permalink":"/blog/v0.18"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve focused heavily on our remote caching architecture. Since this is a massive\\ntask that requires much work behind the scenes, this overall release is rather light.\\n\\n\x3c!--truncate--\x3e\\n\\n## Remote caching beta\\n\\nA major request for moon is to support remote caching. This is a critical feature that allows\\nartifacts to be shared across machines and environments, by storing them in a cloud storage\\nprovider, like AWS S3.\\n\\nWe\'ve been working on this feature for months, primarily behind the scenes building the necessary\\nservices and tools, and we\'ve finally reached a point where we could integrate it with moon\\ndirectly! However, since this feature is very complex, it\'s not yet available to the public, but\\nwhile you wait, you can sign up for beta access! Jump over to the\\n[official remote caching documentation for more information](../docs/guides/remote-cache)!\\n\\nWe\'ll be working on remote caching through every release, continually polishing the implementation,\\nsupporting new features, enabling new regions, calculating pricing, so on and so forth. So stay\\ntuned!\\n\\n## Affected files filtering\\n\\nWe\'ve spent a good portion of this release working on affected detection for projects and tasks,\\nprimarily through `--affected`, and have uncovered and fixed a handful of edge cases. With that\\nbeing said, we asked ourselves, \\"How could we improve the developer experience even more\\"? What\\nabout passing the affected files list to the running task?\\n\\nAnd that\'s exactly what we\'ve done through the new task option\\n[`affectedFiles`](../docs/config/project#affectedfiles)! This option works in unison with the\\n`--affected` option, enabling some awesome functionality. Given the following config:\\n\\n```yaml title=\\"moon.yml\\" {6}\\ntasks:\\n lint:\\n command: \'eslint\'\\n options:\\n affectedFiles: true\\n```\\n\\nWhen we run this task _without_ `--affected`, it will append an argument for the current directory\\n(`.`). This will lint the entire project.\\n\\n```shell\\n# moon run project:lint\\neslint .\\n```\\n\\nHowever, when we run this task _with_ `--affected`, and have have touched files in the working tree,\\nit will now append an argument for each file that matches the task\'s `inputs`. This will now only\\nlint the provided files, _instead_ of the entire project.\\n\\n```shell\\n# moon run project:lint --affected\\neslint ./file.ts ./another/file.ts\\n```\\n\\nThis functionality is _perfect_ pre-commit hooks, and as such, we\'ve added a\\n[guide for utilizing this pattern with Git hooks](../docs/guides/vcs-hooks)!\\n\\n## Dependency graph optimizations\\n\\nOur dependency graph determines which targets to run, what tools to install, projects to sync, and\\nin which order. It\'s a very complex directed acyclic graph, and has only gotten more complicated\\nover the year, especially with the introduction of project-level tool overrides.\\n\\nWe decided to rewrite the dependency graph from the ground up to mitigate many of these issues,\\noptimize nodes and edges, reduce the number of data cloning, and to increase the overall\\nperformance. Everything will still work exactly the same (all of our existing tests passed with no\\nissue)!\\n\\nOn top of this, we\'ve also migrated the internals of moon to a new hashing algorithm that should see\\na 5-10% increase in performance!\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.19.0) for a\\nfull list of changes.\\n\\n- Package managers in the toolchain are now installed in isolation, instead of through Node.js.\\n- JSON files will now respect the closest `.editorconfig` file.\\n- Webhook payloads now include information about the running CI/CD environment.\\n- Generator can now merge JSON/YAML template files.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.20 release!\\n\\n- Continuation of remote caching work!\\n- Performance improvements for output hydration.\\n- Toolchain improvements."},{"id":"v0.18","metadata":{"permalink":"/blog/v0.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-31_v0.18.mdx","source":"@site/blog/2022-10-31_v0.18.mdx","title":"moon v0.18 - Improved configuration and initialization flow","description":"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we\'ve focused heavily on our internals and","date":"2022-10-31T00:00:00.000Z","formattedDate":"October 31, 2022","tags":[{"label":"project","permalink":"/blog/tags/project"},{"label":"config","permalink":"/blog/tags/config"},{"label":"init","permalink":"/blog/tags/init"},{"label":"node","permalink":"/blog/tags/node"}],"readingTime":2.09,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.18","title":"moon v0.18 - Improved configuration and initialization flow","authors":["milesj"],"tags":["project","config","init","node"],"image":"./img/v0.18.png"},"prevItem":{"title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","permalink":"/blog/v0.19"},"nextItem":{"title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","permalink":"/blog/v0.17"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nHappy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we\'ve focused heavily on our internals and\\nbenchmarking performance metrics, so it\'s rather light on new features, but we still have some to\\nshow!\\n\\n\x3c!--truncate--\x3e\\n\\n## Improved projects configuration\\n\\nWhen moon initially launched, it required defining all\\n[`projects`](../docs/config/workspace#projects) using a map. In v0.3, we added support for globs to\\nease the burden of defining many projects. At this point, you had to choose between the 2 patterns,\\nwhich wasn\'t always ideal.\\n\\nTo improve upon this, you can now define a map _and_ globs using a 3rd pattern, like so.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nprojects:\\n globs:\\n - \'apps/*\'\\n - \'packages/*\'\\n sources:\\n www: \'www\'\\n```\\n\\n## Improved `moon init` flow\\n\\nThe `moon init` command hasn\'t changed much since our v0.1 release, and with many new features and\\nconfigurations over these last 18 releases, the initialization flow has fallen quite behind. We felt\\nit was the perfect time to modernize this command a bit.\\n\\nOn top of automatically detecting settings from the environment, the command will also now prompt\\nyou with additional questions while configuring Node.js or TypeScript. Here\'s an example of this\\nflow:\\n\\n<Image src={require(\'./img/v0.18/init-flow.png\')} width=\\"80%\\" />\\n\\nFurthermore, the command also supports enabling a new tool (appending configuration to\\n`.moon/workspace.yml`) into an _existing_ moon repository, by running `moon init --tool <name>`.\\n\\n## Customize `node` execution arguments\\n\\nmoon manages the Node.js binary in our toolchain, and runs all Node.js based tasks using this\\nbinary, instead of relying on the binary found in the developer\'s environment. Because of this, how\\n`node` is executed is abstracted away from end users.\\n\\nWhat if you wanted to use an [experimental loader](https://nodejs.org/api/esm.html#loaders) and\\nexecute TypeScript code at _runtime_? Or to preserve symlinks? Well, you couldn\'t... but no longer,\\nas we\'ve added a new setting, [`node.binExecArgs`](../docs/config/toolchain#binexecargs), that\\nallows additional `node` [CLI arguments](https://nodejs.org/api/cli.html#options) to be defined,\\nthat will be passed to _all_ executions.\\n\\n```yaml title=\\".moon/workspace.yml\\" {2-4}\\nnode:\\n binExecArgs:\\n - \'--loader\'\\n - \'@boost/module/loader\'\\n```\\n\\n> Learn more about the\\n> [Boost module loader](https://boostlib.dev/docs/module#ecmascript-module-loaders)!\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.18.0) for a\\nfull list of changes.\\n\\n- Default Node.js version has been updated to v18.12 (the new LTS) from v16.17.\\n- Updated the `moon check` command to support an `--all` flag.\\n- Improvements to how we store stdout/stderr logs for ran targets.\\n- Work tree dirty checks when running migration commands.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.19 release!\\n\\n- Laying the groundwork for _remote caching_!\\n- An in-repo secrets management layer.\\n- Performance and affected improvements."},{"id":"v0.17","metadata":{"permalink":"/blog/v0.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-21_v0.17.mdx","source":"@site/blog/2022-10-21_v0.17.mdx","title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","description":"With this release, we\'re landing the first iteration of our notifier service, starting with","date":"2022-10-21T00:00:00.000Z","formattedDate":"October 21, 2022","tags":[{"label":"notifier","permalink":"/blog/tags/notifier"},{"label":"runner","permalink":"/blog/tags/runner"},{"label":"config","permalink":"/blog/tags/config"},{"label":"editors","permalink":"/blog/tags/editors"},{"label":"vscode","permalink":"/blog/tags/vscode"}],"readingTime":3.18,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.17","title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","authors":["milesj"],"tags":["notifier","runner","config","editors","vscode"],"image":"./img/v0.17.png"},"prevItem":{"title":"moon v0.18 - Improved configuration and initialization flow","permalink":"/blog/v0.18"},"nextItem":{"title":"New VS Code extension!","permalink":"/blog/vscode-extension"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\nWith this release, we\'re landing the first iteration of our notifier service, starting with\\nwebhooks! We\'ve also spent some time working on quality of life improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Breaking changes\\n\\nTo start, we have a few breaking changes this release to be aware of!\\n\\n### Minor changes to ID formatting\\n\\nAn ID refers to many things \u2014 project names, task names, target segments, so on and so forth. When\\nparsing these values, we format them to remove unwanted characters, as these IDs are used in many\\ncontexts, many of which need to be strict.\\n\\nPreviously, we would remove unwanted characters entirely. Instead, we now replace them with dashes\\n(`-`) for better readability. Take the following for example:\\n\\n| ID | Old | New |\\n| :--------- | :-------- | :--------- |\\n| domain.com | domaincom | domain-com |\\n| build:esm | buildesm | build-esm |\\n\\n### Task `type` has been renamed to `platform`\\n\\nThis setting was renamed for a few reasons. To start, tasks actually have a\\n[type internally](../docs/concepts/task#types) that is not configured, but is inferred based on\\nwhat\'s configured. This was a bit confusing.\\n\\nAnd secondly, our toolchain refers to language integrations as platforms, and since this setting\\ndetermines which tool to run with, we wanted to align on the platform terminology.\\n\\n<Tabs\\n groupId=\\"task-type\\"\\n defaultValue=\\"before\\"\\n values={[\\n { label: \'Before\', value: \'before\' },\\n { label: \'After\', value: \'after\' },\\n ]}\\n>\\n<TabItem value=\\"before\\">\\n\\n```yaml\\ntasks:\\n clean:\\n command: \'rm -rf ./dist\'\\n type: \'system\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"after\\">\\n\\n```yaml\\ntasks:\\n clean:\\n command: \'rm -rf ./dist\'\\n platform: \'system\'\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n> Because of this change, the `$taskType` token was also renamed to `$taskPlatform`!\\n\\n## Webhook events (experimental)\\n\\nLooking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe\\nyou want to send Slack or Discord notifications? With our new notifier system, this is now possible\\nthrough webhooks!\\n\\nSimply enable the [`notifier.webhookUrl`](../docs/config/workspace#webhookurl) setting to start\\nreceiving events from your CI environments.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nnotifier:\\n webhookUrl: \'https://api.company.com/some/endpoint\'\\n```\\n\\n> View the [official guide on webhooks](../docs/guides/webhooks) for a full list of events and an\\n> example payload structure!\\n\\n## YAML anchors and aliases\\n\\nWe\'ve updated our YAML configuration files to support extended syntax,\\n[anchors (`&`) and aliases (`*`)](https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/).\\nWith this new syntax, you\'re now able to reduce the amount of duplication required in your config\\nfiles, especially when declaring tasks, as demonstrated below!\\n\\n<Tabs\\n groupId=\\"yaml\\"\\n defaultValue=\\"before\\"\\n values={[\\n { label: \'Before\', value: \'before\' },\\n { label: \'After\', value: \'after\' },\\n ]}\\n>\\n<TabItem value=\\"before\\">\\n\\n```yaml\\ntasks:\\n astro:\\n command: \'astro\'\\n local: true\\n\\n dev:\\n command: \'astro dev\'\\n inputs:\\n - \'@group(astro)\'\\n local: true\\n\\n build:\\n command: \'astro build\'\\n inputs:\\n - \'@group(astro)\'\\n outputs:\\n - \'dist\'\\n\\n check:\\n command: \'astro check\'\\n inputs:\\n - \'@group(astro)\'\\n deps:\\n - \'~:typecheck\'\\n\\n preview:\\n command: \'astro preview\'\\n inputs:\\n - \'@group(astro)\'\\n deps:\\n - \'~:build\'\\n local: true\\n```\\n\\n</TabItem>\\n<TabItem value=\\"after\\">\\n\\n```yaml\\n_astro: &astro\\n command: \'astro\'\\n inputs:\\n - \'@group(astro)\'\\n\\ntasks:\\n dev:\\n <<: *astro\\n args: \'dev\'\\n local: true\\n\\n build:\\n <<: *astro\\n args: \'build\'\\n outputs:\\n - \'dist\'\\n\\n check:\\n <<: *astro\\n args: \'check\'\\n\\n preview:\\n <<: *astro\\n args: \'preview\'\\n deps:\\n - \'~:build\'\\n local: true\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n## VS Code extension\\n\\nIf you missed the [announcement earlier this week](./vscode-extension), we released the initial\\nversion of our new VS Code extension! Give it a try and\\n[refer to the documentation](../docs/editors/vscode) for more information.\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.17.0) for a\\nfull list of changes.\\n\\n- Increased runtime performance and reduced memory consumption.\\n- Template enum variables can now define objects for their\\n [`values`](../docs/config/template#values).\\n- Task `deps` can now omit the `~:` prefix for tasks within the current project.\\n- The `moon check` command can now use the `--report` option.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.18 release!\\n\\n- Workflow improvements for `moon init`.\\n- Benchmarks and performance tuning.\\n- Individual stdout/stderr log files when running tasks."},{"id":"vscode-extension","metadata":{"permalink":"/blog/vscode-extension","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-17_vscode-extension.mdx","source":"@site/blog/2022-10-17_vscode-extension.mdx","title":"New VS Code extension!","description":"We\'re very excited to announce the initial release of our Visual Studio Code extension!","date":"2022-10-17T00:00:00.000Z","formattedDate":"October 17, 2022","tags":[{"label":"editors","permalink":"/blog/tags/editors"},{"label":"vscode","permalink":"/blog/tags/vscode"}],"readingTime":0.645,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"vscode-extension","title":"New VS Code extension!","authors":["milesj"],"tags":["editors","vscode"]},"prevItem":{"title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","permalink":"/blog/v0.17"},"nextItem":{"title":"moon v0.16 - Per-project tool versions and TypeScript improvements","permalink":"/blog/v0.16"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWe\'re very excited to announce the initial release of our Visual Studio Code extension!\\n\\n\x3c!--truncate--\x3e\\n\\nIf you\'re a huge VS Code fan like us, you most likely use extensions in your everyday workflow. We\\nwant to enhance this experience by providing a fully integrated and interactive moon console! Here\'s\\na preview of what it looks like:\\n\\n<Image src={require(\'../docs/editors/vscode/projects-view.png\')} width=\\"40%\\" />\\n\\nExcited?? Want to learn more? Check out the official\\n[moonrepo.moon-console](https://marketplace.visualstudio.com/items?itemName=moonrepo.moon-console)\\nmarketplace page, or read the [official documentation](../docs/editors/vscode). This is only the\\nfirst iteration of the extension. Expect more advanced features in the future, like...\\n\\n- Schema validation for configuration files\\n- Autocompletion for configuration files\\n- Automatic running/building of projects in the background\\n- File type association\\n- Integrated language server\\n- And much more!"},{"id":"v0.16","metadata":{"permalink":"/blog/v0.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-06_v0.16.mdx","source":"@site/blog/2022-10-06_v0.16.mdx","title":"moon v0.16 - Per-project tool versions and TypeScript improvements","description":"With this release, we\'ve landed a long standing request of supporting project-level overrides for","date":"2022-10-06T00:00:00.000Z","formattedDate":"October 6, 2022","tags":[{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"runner","permalink":"/blog/tags/runner"},{"label":"generator","permalink":"/blog/tags/generator"},{"label":"typescript","permalink":"/blog/tags/typescript"},{"label":"node","permalink":"/blog/tags/node"}],"readingTime":3.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.16","title":"moon v0.16 - Per-project tool versions and TypeScript improvements","authors":["milesj"],"tags":["toolchain","runner","generator","typescript","node"],"image":"./img/v0.16.png"},"prevItem":{"title":"New VS Code extension!","permalink":"/blog/vscode-extension"},"nextItem":{"title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","permalink":"/blog/v0.15"}},"content":"With this release, we\'ve landed a long standing request of supporting project-level overrides for\\ntools configured in the workspace, as well as some quality of life improvements for TypeScript.\\n\\n\x3c!--truncate--\x3e\\n\\n## Per-project tool version overrides\\n\\nSince moons inception, our [toolchain](../docs/concepts/toolchain) has only supported a single\\nversion of a tool (Node.js), as we wanted to embrace the single version policy and encourage all\\nconsumers to keep their tooling version consistent across all projects for reliability. While this\\nworks flawlessly, it\'s not entirely realistic, as many companies have legacy projects that are stuck\\non older versions for whatever reason, and integrating them into moon was rather difficult.\\n\\nWell no more! We\'ve refactored our toolchain to support tool overrides on a project-by-project\\nbasis. Since we only support Node.js at the moment, this can be achieved with the new\\n[`workspace.node.version`](../docs/config/project#node) setting in\\n[`moon.yml`](../docs/config/project).\\n\\nFor example, if your workspace Node.js version is configured as v18.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nnode:\\n version: \'18.0.0\'\\n```\\n\\nYou can now override this version at the project-level. Let\'s go with v14.\\n\\n```yml title=\\"<project>/moon.yml\\"\\nworkspace:\\n node:\\n version: \'14.0.0\'\\n```\\n\\nWhen running a task from a project with overrides, the toolchain will download, install, and\\nconfigure the new version behind the scenes. This new version will then be used to install\\ndependencies and execute the tasks commands.\\n\\n> Although we now support overriding the tool version, the workspace configured package manager\\n> (`node.packageManager`) and associated version cannot be overridden. This is unlikely to change.\\n\\n## Per-project dependency installs\\n\\nBecause of the toolchain refactor above, we now support per-project dependency installs as a welcome\\nside-effect. This is a necessary step in supporting new languages, especially for those that don\'t\\ninstall dependencies in the workspace for all projects, and must install them per project.\\n\\nThis also means that moon now supports non-`package.json` workspaces! If your repository _is not_\\nusing npm/pnpm/yarn workspaces, or a project _is not_ listed within the workspaces glob list,\\ndependencies will be installed within the project.\\n\\n## TypeScript improvements\\n\\n### Routing `outDir` to the cache\\n\\nA requirement for using project references is that each project must compile declarations (`.d.ts`)\\nso that consumers/dependents can resolve type information. While this makes sense, it becomes rather\\nunfortunate as each project folder is now littered with the declaration outputs, which are typically\\ngitignored.\\n\\nTo improve this experience, we\'re introducing a new setting\\n[`typescript.routeOutDirToCache`](../docs/config/toolchain#routeoutdirtocache), that will update the\\n`outDir` compiler option of _all_ projects to route to moon\'s cache directory (which should already\\nbe gitignored). This will standardize the use of project references for the entire repository.\\n\\nFor example, a project at \\"packages/components\\" will route to the following output directory:\\n\\n```json title=\\"<project>/tsconfig.json\\"\\n{\\n // ...\\n \\"compilerOptions\\": {\\n // ...\\n \\"outDir\\": \\"../../.moon/cache/types/packages/components\\"\\n }\\n}\\n```\\n\\n> If you require declarations to live within the project, for example an npm package that ships\\n> types, you should introduce an additional configuration to handle this, like\\n> `tsconfig.build.json`.\\n\\n### Mapping project references as `paths`\\n\\nmoon automatically keeps TypeScript project references in sync with the\\n[`typescript.syncProjectReferences`](../docs/config/toolchain#syncprojectreferences) setting, which\\nis great, but we can take it further. With the new\\n[`typescript.syncProjectReferencesToPaths`](../docs/config/toolchain#syncprojectreferencestopaths)\\nsetting, project references (either synced or explicitly defined) will _also_ be mapped to the\\n`paths` compiler option, automating the list of import aliases.\\n\\nFor example, if a reference has the package name `@brand/components`, the `paths` will be mapped\\nwith:\\n\\n```json title=\\"<project>/tsconfig.json\\"\\n{\\n // ...\\n \\"compilerOptions\\": {\\n // ...\\n \\"paths\\": {\\n \\"@brand/components\\": [\\"../shared/components/src/index.ts\\"],\\n \\"@brand/components/*\\": [\\"../shared/components/src/*\\"]\\n }\\n },\\n \\"references\\": [\\n {\\n \\"path\\": \\"../shared/components\\"\\n }\\n ]\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.16.0) for a\\nfull list of changes.\\n\\n- Template files can now be suffixed with `.tera` or `.twig` for\\n [syntax highlighting](../docs/guides/codegen#file-extensions).\\n- We now display more commands and information when running tasks.\\n- Declare implicit task dependencies with a new\\n [`runner.implicitDeps`](../docs/config/workspace#implicitdeps) setting.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.17 release!\\n\\n- Webhooks for important pipeline events (for real this time)!\\n- YAML anchors and references in config files.\\n- And [many more](https://github.com/moonrepo/moon/issues/356)..."},{"id":"v0.15","metadata":{"permalink":"/blog/v0.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-26_v0.15.mdx","source":"@site/blog/2022-09-26_v0.15.mdx","title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","description":"With this release, we\'ve focused heavily on Docker integration and enhancing the Dockerfile","date":"2022-09-26T00:00:00.000Z","formattedDate":"September 26, 2022","tags":[{"label":"generator","permalink":"/blog/tags/generator"},{"label":"docker","permalink":"/blog/tags/docker"}],"readingTime":3.495,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.15","title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","authors":["milesj"],"tags":["generator","docker"],"image":"./img/v0.15.png"},"prevItem":{"title":"moon v0.16 - Per-project tool versions and TypeScript improvements","permalink":"/blog/v0.16"},"nextItem":{"title":"moon v0.14 - Code generation and implicit dependencies","permalink":"/blog/v0.14"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\nWith this release, we\'ve focused heavily on Docker integration and enhancing the `Dockerfile`\\nworkflow, as well as some minor quality of life improvements for template files and run reports.\\n\\n\x3c!--truncate--\x3e\\n\\n## 1,000 \u2b50\ufe0f\ud83c\udf1f\u2b50\ufe0f!\\n\\nBefore we dive into the release, we want to thank everyone for the initial support, as we passed\\n[1,000 stars on GitHub](https://github.com/moonrepo/moon) earlier this week! moon was announced back\\nin June, and to reach this milestone in roughly 3 months is very exciting. We greatly appreciate the\\nsupport, and to everyone that is using moon and providing feedback, we thank you from the bottom of\\nour hearts!\\n\\nWe have a very long roadmap ahead of us, but are very excited to bring all of these features to you,\\nand to improve the overall developer experience for your monorepos! Here\'s to 10,000 stars!\\n\\n## First-class Docker support\\n\\n[Docker](https://www.docker.com/) is a very popular tool that is typically a part of a developers\\nworkflow, but is also a very tedious one, as `Dockerfile`s have to be manually curated for every\\nproject. We aim to mitigate this problem by supporting Docker as a first-class feature, and by\\nintroducing 2 new commands, [`moon docker scaffold`](../docs/commands/docker/scaffold) and\\n[`moon docker prune`](../docs/commands/docker/prune).\\n\\nThese commands will automate a `Dockerfile` as much as possible to effectively take advantage of\\nDocker\'s layer caching, multi-staged builds, to reduce the amount of manual `COPY` commands, to\\nreduce the overall size of the container or image, and much more. To demonstrate this, compare the\\nbefore and after `Dockerfile`s below!\\n\\n<Tabs\\n groupId=\\"dockerfile\\"\\n defaultValue=\\"before\\"\\n values={[\\n { label: \'Before\', value: \'before\' },\\n { label: \'After\', value: \'after\' },\\n ]}\\n>\\n<TabItem value=\\"before\\">\\n\\n```docker\\nFROM node:latest\\n\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n# Copy moon files\\nCOPY ./.moon ./.moon\\n\\n# Copy all package.json\'s and lockfiles\\nCOPY ./packages/cli/package.json ./packages/cli/package.json\\nCOPY ./packages/core-linux-arm64-gnu/package.json ./packages/core-linux-arm64-gnu/package.json\\nCOPY ./packages/core-linux-arm64-musl/package.json ./packages/core-linux-arm64-musl/package.json\\nCOPY ./packages/core-linux-x64-gnu/package.json ./packages/core-linux-x64-gnu/package.json\\nCOPY ./packages/core-linux-x64-musl/package.json ./packages/core-linux-x64-musl/package.json\\nCOPY ./packages/core-macos-arm64/package.json ./packages/core-macos-arm64/package.json\\nCOPY ./packages/core-macos-x64/package.json ./packages/core-macos-x64/package.json\\nCOPY ./packages/core-windows-x64-msvc/package.json ./packages/core-windows-x64-msvc/package.json\\nCOPY ./packages/runtime/package.json ./packages/runtime/package.json\\nCOPY ./packages/types/package.json ./packages/types/package.json\\nCOPY ./package.json ./package.json\\nCOPY ./yarn.lock ./yarn.lock\\nCOPY ./.yarn ./.yarn\\nCOPY ./.yarnrc.yml ./yarnrc.yml\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy project and required files\\nCOPY ./packages/types ./packages/types\\nCOPY ./packages/runtime ./packages/runtime\\n# COPY . .\\n\\n# Build the target\\nRUN moon run runtime:build\\n```\\n\\n</TabItem>\\n<TabItem value=\\"after\\">\\n\\n```docker\\n#### BASE\\nFROM node:latest AS base\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n#### WORKSPACE\\nFROM base AS workspace\\nWORKDIR /app\\n\\n# Copy entire repository and scaffold\\nCOPY . .\\nRUN moon docker scaffold runtime\\n\\n#### BUILD\\nFROM base AS build\\nWORKDIR /app\\n\\n# Copy workspace skeleton\\nCOPY --from=workspace /app/.moon/docker/workspace .\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy source files\\nCOPY --from=workspace /app/.moon/docker/sources .\\n\\n# Build the target\\nRUN moon run runtime:build\\n\\n# Prune workspace\\nRUN moon docker prune\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n> View the official [Docker usage guide](../docs/guides/docker) for an in-depth walkthrough of all\\n> these new features!\\n\\n## Frontmatter for template files\\n\\nWe released [templates and the generator in v0.14](./v0.14) for quick and easy code generation.\\nSince it was the initial release, it provided the bare minimum of features for common workflows.\\nWe\'ll continually improve this system over each release, and have done just that for this release,\\nas all template files now support [frontmatter](../docs/guides/codegen#frontmatter)! Frontmatter is\\na mechanism for declaring _per-file configuration_, and is denoted by `---` delimiters at the top of\\nthe file.\\n\\nThis allows you to do some really cool stuff, like overriding the destination path of the file using\\nthe `to` field, as well as taking full advantage of Tera\'s filters and conditional rendering!\\n\\n```twig title=\\"templates/react/components/base.tsx\\"\\n{% set component_name = name | pascal_case %}\\n\\n---\\nto: components/{{ component_name }}.tsx\\n---\\n\\nexport function {{ component_name }}() {\\n\\treturn <div />;\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.15.0) for a\\nfull list of changes.\\n\\n- Run reports (via `--report`) now include additional information, like the total duration, and\\n estimated time savings.\\n - The [moonrepo/run-report-action](https://github.com/marketplace/actions/moon-ci-run-reports) has\\n been updated with this information.\\n- Improved pnpm integration for Go/Rust binaries shipped in node modules.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.16 release!\\n\\n- Quality of life improvements for TypeScript.\\n- Per-project overrides for language/tool versions."},{"id":"v0.14","metadata":{"permalink":"/blog/v0.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-13_v0.14.mdx","source":"@site/blog/2022-09-13_v0.14.mdx","title":"moon v0.14 - Code generation and implicit dependencies","description":"With this release, we\'ve landed some new features that have been requested multiple times since","date":"2022-09-13T00:00:00.000Z","formattedDate":"September 13, 2022","tags":[{"label":"generator","permalink":"/blog/tags/generator"},{"label":"project-graph","permalink":"/blog/tags/project-graph"},{"label":"ci","permalink":"/blog/tags/ci"}],"readingTime":1.715,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.14","title":"moon v0.14 - Code generation and implicit dependencies","authors":["milesj"],"tags":["generator","project-graph","ci"]},"prevItem":{"title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","permalink":"/blog/v0.15"},"nextItem":{"title":"moon v0.13 - Hashing and toolchain improvements","permalink":"/blog/v0.13"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve landed some new features that have been requested multiple times since\\nlaunch. A code generation and template scaffolding layer, as well as implicit dependency scanning\\nfor the project graph!\\n\\n\x3c!--truncate--\x3e\\n\\n## New `moon generate` command\\n\\nCode generation is the staple of any large company or repository. Want to spin up a new application?\\nWhat about an npm package? Or maybe third-party integrations? Avoid copy-and-pasting existing code,\\nand instead generate it with the new `moon generate` command, which is powered by our new generator\\nsystem.\\n\\nThe generator will locate a template by name on the file system (\\"npm-package\\" in the example\\nbelow), prompt and interpolate variables, render the files with [Tera](https://tera.netlify.app/) (a\\nRust based template engine), and write the files to the target destination.\\n\\n```shell\\n# Generate code from a template to a target directory\\n$ moon generate npm-package ./packages/example\\n```\\n\\nLearn more about [code generation in the official guide](../docs/guides/codegen)!\\n\\n## Implicit dependency scanning\\n\\nThis has been a request since moon\'s official release, and it\'s finally here! Up until now, if you\\nwanted project-to-project dependency relationships, you had to explicitly declare them with\\n[`dependsOn`](../docs/config/project#dependson). But thanks to a\\n[ton of](https://github.com/moonrepo/moon/pull/288)\\n[infrastructure](https://github.com/moonrepo/moon/pull/249) and\\n[platform](https://github.com/moonrepo/moon/pull/277) changes, we can now infer implicit\\ndependencies automatically!\\n\\nWe still suggest using explicit dependencies, as it provides more\\n[automation like project syncing](../docs/concepts/project#dependencies), but implicit is great for\\nadoption and migration purposes.\\n\\n## Report CI runs on pull requests\\n\\nWe\'re fans of continuous and easily accessible feedback, and as such, have released a new GitHub\\naction, [`moonrepo/run-report-action`](https://github.com/marketplace/actions/moon-ci-run-reports),\\nwhich reports the results of [`moon ci`](../docs/commands/ci) as a pull request comment. The report\\nlooks something like the following:\\n\\n<Image src={require(\'../static/img/github/run-report.png\')} width=\\"60%\\" />\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.14.0) for a\\nfull list of changes.\\n\\n- When running in a Docker container, caching is disabled in an effort to greatly reduce the size of\\n the image.\\n- Updated `moon setup` to also install Node.js dependencies.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.15 release!\\n\\n- Major Docker workflow improvements!\\n- Frontmatter configuration within template files."},{"id":"v0.13","metadata":{"permalink":"/blog/v0.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-01_v0.13.mdx","source":"@site/blog/2022-09-01_v0.13.mdx","title":"moon v0.13 - Hashing and toolchain improvements","description":"With this release, we\'ve landed some improvements to our smart hashing, and paved the road for","date":"2022-09-01T00:00:00.000Z","formattedDate":"September 1, 2022","tags":[{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":2.995,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.13","title":"moon v0.13 - Hashing and toolchain improvements","authors":["milesj"],"tags":["hasher","toolchain"]},"prevItem":{"title":"moon v0.14 - Code generation and implicit dependencies","permalink":"/blog/v0.14"}},"content":"With this release, we\'ve landed some improvements to our smart hashing, and paved the road for\\nadditional languagues and tooling.\\n\\n\x3c!--truncate--\x3e\\n\\n## Node.js is now optional\\n\\nTitle may seem confusing at first, but don\'t worry, everything is fine! For some context, moon has\\nbeen designed to be language agnostic as we plan to support more than JavaScript in the future.\\nHowever, some aspects of the codebase were hard-coded for JavaScript and made the assumption that\\nJavaScript will always be used, with one such aspect being the\\n[`node`](../docs/config/workspace#node) setting in\\n[`.moon/workspace.yml`](../docs/config/workspace).\\n\\nWe\'ve reworked this setting to be optional, which allows a repository to opt out of JavaScript.\\nRight now, this basically does nothing as we do not support other languages yet, but we felt it\\nnecessary to report it anyways! A side-effect of this change is that actions in the runner have been\\nrenamed, for example, `SetupToolchain` -> `SetupNodeToolchain`.\\n\\n## Improved hashing accuracy\\n\\nOur [smart hashing layer](../docs/concepts/cache#hashing) is pretty powerful, but was not entirely\\naccurate. Up until now, when hashing a Node.js project, we\'d include the `dependencies`,\\n`devDependencies`, and `peerDependencies` versions located within the project\'s `package.json` as\\nhash inputs. This was great, because if a dependency was explicitly upgraded in the `package.json`,\\nit would invalidate the previous hashes as the version number changed.\\n\\nHowever, what if the dependency was implicitly upgraded by another project, but the `package.json`\\nwas not modified? These kind of transitive changes were currently ignored by moon, but no longer, as\\nmoon will now resolve all `package.json` dependencies to the resolved version found in the root\\nlockfile (`package-lock.json`, `yarn.lock`, etc)!\\n\\nAt moon, we believe in providing consumers with the ability to configure to their needs, and as\\nsuch, have added a new [`hasher`](../docs/config/workspace#hasher) setting to\\n[`.moon/workspace.yml`](../docs/config/workspace). This setting will allow you to choose between the\\n2 hashing patterns above!\\n\\n## New `moon check` command\\n\\nIf you\'re like us, you\'re constantly testing, linting, typechecking, so on and so forth, a project\\nwhile developing. This was rather cumbersome, as you either had to use separate run commands\\n(`moon run project:test`, `moon run project:lint`, etc), or use the multi-run approach\\n(`moon run project:test project:lint`). Both approaches were not ideal for rapid development.\\n\\nTo simplify this process, we\'ve added a new [`moon check`](../docs/commands/check) command, that\\nwill automatically run _all_ build and test tasks for a project (or many projects)! Local and non-CI\\ntasks will _not_ be ran.\\n\\n```shell\\n# Check project at current working directory\\n$ moon check\\n\\n# Check project by name\\n$ moon check app\\n\\n# Check multiple projects by name\\n$ moon check client server\\n```\\n\\n## New `@moonrepo/types` package\\n\\nWe have many ideas for moon specific npm packages that we plan to release, but before we do that, we\\nneed to ensure all of them are built with the correct interfaces. To solve this, we are shipping a\\nnew package, [@moonrepo/types](https://www.npmjs.com/package/@moonrepo/types), that simply publishes\\nTypeScript declarations. It contains everything from project and task shapes, configuration\\nstructures, runner information, and more.\\n\\n```ts\\nimport type { ProjectConfig } from \'@moonrepo/types\';\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.13.0) for a\\nfull list of changes.\\n\\n- The runner will now fail with an error if a task has defined `outputs` but an output was not\\n created after the task is executed. This change was made so that artifacts are deterministic.\\n- The `actionRunner` setting in [`.moon/workspace.yml`](../docs/config/workspace) was renamed to\\n `runner`.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.14 release!\\n\\n- A `moon generate` command to generate new projects, files, scaffolding, and more from pre-defined\\n templates.\\n- Implicit dependency discovery. moon will now scan manifest files and determine project\\n relationships."}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.65473cef.js b/assets/js/b2f554cd.65473cef.js deleted file mode 100644 index 2bfd3a45d9f..00000000000 --- a/assets/js/b2f554cd.65473cef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"moon-v1.15","metadata":{"permalink":"/blog/moon-v1.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx","source":"@site/blog/2023-10-09_moon-v1.15.mdx","title":"moon v1.15 - Next-generation action graph","description":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the","date":"2023-10-09T00:00:00.000Z","formattedDate":"October 9, 2023","tags":[{"label":"action","permalink":"/blog/tags/action"},{"label":"dependency","permalink":"/blog/tags/dependency"},{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"railway","permalink":"/blog/tags/railway"}],"readingTime":4.62,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.15","title":"moon v1.15 - Next-generation action graph","authors":["milesj"],"tags":["action","dependency","graph","pipeline","railway"],"image":"./img/moon/v1.15.png"},"nextItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"}},"content":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the\\ndependency graph.\\n\\n\x3c!--truncate--\x3e\\n\\n## Hello action graph, goodbye dependency graph\\n\\nFor the past few months, we\'ve been working on a rewrite of our action pipeline, which consists of\\nthe project graph, dependency graph, task executor, process pipeline, and more. It\'s a slow process,\\nwith many different pieces that must land in sequence, but we\'re almost done. The next step in this\\nprocess is the [introduction of the new action graph](/docs/how-it-works/action-graph), which\\nreplaces the previous dependency graph.\\n\\nFor the most part, the graphs work in a similar fashion, but since we rewrote it from the ground up,\\nwe were able to resolve any discrepancies and performance issues. The biggest changes between the\\nnew and old graphs are:\\n\\n- All actions now depend on the `SyncWorkspace` action, instead of this action running arbitrarily.\\n- Cleaned up dependency chains between actions, greatly reducing the number of nodes in the graph.\\n- Renamed `RunTarget` to `RunTask`, including interactive and persistent variants.\\n- And lastly, we ditched our batched task approach for a ready queue. Continue reading for more\\n information!\\n\\n### A new performant thread pool\\n\\nIn the old dependency graph, when we\'d execute a task, we\'d order the graph topologically and then\\ngroup actions into batches (or buckets) based on their dependency chains. Batches would then be\\nexecuted in order within the thread pool. This approach worked well, but had one major flaw: it\\nwasn\'t as performant as could be. For example, if our thread pool size was 12, and a batch only had\\n2 tasks in it, what were the other 10 threads doing? Absolutely nothing. They were sitting idly,\\nwaiting for a task.\\n\\nAnd now with the new action graph, we take full advantage of all threads in the pool. Instead of the\\nbatched approach above, we now use a topological task-ready queue, where a thread without work (or\\nis waiting for work) can poll the graph for a new task to run. A task is considered ready to run if\\nit either has no dependencies, or all of its dependencies (in the chain) have been ran.\\n\\nFor large graphs, this should result in a significant performance improvement!\\n\\n### Automatic dependency linking (breaking)\\n\\nBecause of these graph changes, we do have a minor \\"breaking change\\". Tasks that depend (via `deps`)\\non other tasks from arbitrary projects (the parent project doesn\'t implicitly or explicitly depend\\non the other project), not including the root-level project, will now automatically mark that other\\nproject as a \\"peer\\" dependency (if not already configured with `dependsOn`). For example, \\"b\\"\\nbecomes a peer dependency for \\"a\\".\\n\\n```yaml title=\\"a/moon.yml\\"\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nNow internally becomes:\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'peer\'\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nIf you\'d prefer this dependency to _not be_ a peer, you can explicitly configure it with a different\\nscope. For Node.js projects, the \\"build\\" scope can be used as a no-op replacement.\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'build\' # production, development\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nWe\'re marking this as a breaking change as this could subtly introduce cycles in the project graph\\nthat weren\'t present before, and for Node.js projects, this may inject `peerDependencies`. However,\\nthis change was necessary to ensure accurate dependency chains in the graph.\\n\\n## New `moonrepo/setup-toolchain` GitHub action\\n\\nWe\'ve begun a process to deprecate the\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action) and\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) GitHub actions, and instead, combine\\nand replace them with a new [moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain)\\naction. Why a new action instead of fixing the others?\\n\\nThe biggest problem was that both previous actions shared about 90% of the same code, but were\\nslightly different in how they installed the binaries and cached the toolchain. It was was also\\nconfusing for consumers to understand and know which action to use (because they shouldn\'t be used\\ntogether).\\n\\nTo remedy this, we\'re prototyping the new\\n[moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain) action, which has been\\nworking quite well. It aims to solve the following:\\n\\n- Installs `proto` globally so that installed tools can also be executed globally.\\n- Conditionally installs `moon` globally if the repository is using moon (attempts to detect a\\n `.moon` directory).\\n- Caches the toolchain (`~/.proto`) so subsequent runs are faster.\\n- Hashes `.prototools` and `.moon/toolchain.yml` files to generate a unique cache key.\\n- Cleans the toolchain before caching to remove unused or stale tools.\\n- Can auto-install tools when used.\\n\\n```diff\\n# ...\\njobs:\\n ci:\\n name: CI\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n- - uses: moonrepo/setup-moon-action@v1\\n+ - uses: moonrepo/setup-toolchain@v0\\n```\\n\\n## Now supported in Railway\\n\\nIf you\'re a big fan of [Railway](https://railway.app/) (like we are), and you\'re deploying a Node.js\\nbacked application, then you\'ll be happy to hear that Railway now officially and natively supports\\nmoon! We spent some time over the past month\\n[integrating moon support into their Nixpacks architecture](https://nixpacks.com/docs/providers/node).\\n\\nTo make use of this, set the `NIXPACKS_MOON_APP_NAME` environment variable to the name of your moon\\nproject that you want to be deployed. This will then automatically run `moon run <app>:build` and\\n`moon run <app>:start` respectively. To customize the task names, you can set the\\n`NIXPACKS_MOON_BUILD_TASK` and `NIXPACKS_MOON_START_TASK` environment variables.\\n\\n:::info\\n\\nThis is currently only supported for Node.js projects, but will be expanded to other languages in\\nthe future!\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.15.0) for a full list\\nof changes.\\n\\n- Added a `moon action-graph` command.\\n- Added a `--dependents` argument to `moon action-graph`.\\n- Added the ability to skip non-`RunTask` actions using environment variables.\\n- Deprecated the `moon dep-graph` command."},{"id":"proto-v0.19","metadata":{"permalink":"/blog/proto-v0.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx","source":"@site/blog/2023-09-29_proto-v0.19.mdx","title":"proto v0.19 - Version pinning and outdated checks","description":"In this release, we\'re improving version pinning and introducing a new command to check for outdated","date":"2023-09-29T00:00:00.000Z","formattedDate":"September 29, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"pin","permalink":"/blog/tags/pin"},{"label":"global","permalink":"/blog/tags/global"},{"label":"local","permalink":"/blog/tags/local"},{"label":"outdated","permalink":"/blog/tags/outdated"}],"readingTime":1.92,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.19","title":"proto v0.19 - Version pinning and outdated checks","authors":["milesj"],"tags":["proto","pin","global","local","outdated"],"image":"./img/proto/v0.19.png"},"prevItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},"nextItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"}},"content":"In this release, we\'re improving version pinning and introducing a new command to check for outdated\\nversions.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto pin` command (breaking)\\n\\nBefore our official v1 release, which is relatively soon, we\'ll be making some breaking changes with\\nthe proto APIs. The first is the introduction of the new [`proto pin`](/docs/proto/commands/pin)\\ncommand, which replaces the previous `proto local` and `proto global` commands. We felt this was a\\nmuch cleaner change, and far easier to understand than the previous command names.\\n\\n```shell\\n# v0.18\\n$ proto local go 1.20\\n$ proto global node 20\\n\\n# v0.19+\\n$ proto pin go 1.20\\n$ proto pin node 20 --global\\n```\\n\\n## New `pin-latest` setting\\n\\nWhile we\'re on the subject of pinning versions, we\'ve also introduced a new\\n[`pin-latest`](/docs/proto/config#pin-latest) setting. Do you want the latest version to always be\\npinned? Do you forgot to pass `--pin` when installing? Do you forget to run the `proto global` or\\n`proto local` commands (now `proto pin`)? If you answered yes to any of these questions, then this\\nsetting is for you.\\n\\nWhen enabled, and a tool is installed with the \\"latest\\" version, the resolved version will\\nautomatically be pinned to the configuration of your choice. For example, say we have the following\\nuser config:\\n\\n```toml title=\\"~/.proto/config.toml\\"\\npin-latest = \\"local\\"\\n```\\n\\nAnd we run one of the following commands:\\n\\n```shell\\n$ proto install go\\n$ proto install node latest\\n```\\n\\nThen the resolved version of the tool will automatically be set to the `.prototools` file in the\\ncurrent directory. Handy right?\\n\\n## New `proto outdated` command\\n\\nBy request of the community, we\'re introducing yet another new command,\\n[`proto outdated`](/docs/proto/commands/outdated). If you\'re familiar with package managers, you can\\nprobably guess what this command does! It\'ll check for newer available versions, for all tools\\nconfigured in the closest `.prototools` file. Very handy for keeping your tools up to date.\\n\\n```\\n$ proto outdated\\n\\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.19.0) for a full list\\nof changes.\\n\\n- Added `PROTO_WASM_LOG` environment variable to toggle the logging of messages from Extism and WASM\\n plugins. Useful for debugging.\\n- Updated `proto install` to auto-clean stale plugins after a successful installation."},{"id":"moon-v1.14","metadata":{"permalink":"/blog/moon-v1.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-25_moon-v1.14.mdx","source":"@site/blog/2023-09-25_moon-v1.14.mdx","title":"moon v1.14 - Improvements to running targets and toolchain versions","description":"In this release, we\'ve focused on loosening restrictions to improve the overall developer","date":"2023-09-25T00:00:00.000Z","formattedDate":"September 25, 2023","tags":[{"label":"run","permalink":"/blog/tags/run"},{"label":"target","permalink":"/blog/tags/target"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"version","permalink":"/blog/tags/version"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"shorthand","permalink":"/blog/tags/shorthand"}],"readingTime":2.665,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.14","title":"moon v1.14 - Improvements to running targets and toolchain versions","authors":["milesj"],"tags":["run","target","toolchain","version","ci","shorthand"],"image":"./img/moon/v1.14.png"},"prevItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},"nextItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"}},"content":"In this release, we\'ve focused on loosening restrictions to improve the overall developer\\nexperience.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shorthand for `moon run`\\n\\nThis has been a long requested feature and we\'re happy to finally deliver it! You can now omit the\\n\\"run\\" keyword for the [`moon run`](/docs/commands/run) command, just so long as the first non-option\\nargument is a target (must contain a `:`).\\n\\n```shell\\n# v1.13\\n$ moon run app:build\\n\\n# v1.14+\\n$ moon app:build\\n```\\n\\n## Choose targets for `moon ci`\\n\\nWhen we initially built [`moon ci`](/docs/commands/ci), we wanted a solution that simply ran\\neverything in CI that _should be ran_, taking care of all the complicated logic to determine\\naffected tasks, comparing Git branches, gathering targets, partitioning across jobs, etc... And it\\ndoes just that, and it does it well!\\n\\nHowever, one major caveat to using `moon ci` is that it runs _every task_ in the workspace (assuming\\nthey\'re affected). This has been quite a blocker for adoption as teams may want fine-grained control\\nof their CI. For example, running build tasks in one job, lint tasks in another, so on and so forth.\\n\\nIn this release, we\'ve made the necessary changes to allow these workflows, by supporting a list of\\ntargets for `moon ci`, similar to how `moon run` works. If no targets are provide, the existing \\"run\\neverything\\" logic will be used.\\n\\n```shell\\n# v1.13\\n$ moon ci\\n\\n# v1.14+\\n$ moon ci :build :lint :etc\\n```\\n\\nSplitting targets across jobs is demonstrated with the following GitHub Action workflow:\\n\\n```yaml title=\\".github/workflows/ci.yml\\"\\nname: \'CI\'\\non:\\n push:\\n branches:\\n - \'master\'\\n pull_request:\\njobs:\\n build:\\n name: \'Build\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :build\'\\n format-lint:\\n name: \'Format + Lint\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :format :lint\'\\n test:\\n name: \'Test\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :test\'\\n```\\n\\n## Configure partial toolchain versions\\n\\nSince moon\'s inception, our [integrated toolchain](/docs/concepts/toolchain) required fully\\nqualified semantic versions (major.minor.patch) for tools. This was by design to ensure that we\\ncould provide a consistent, reliable, and deterministic experience for all users. This solved the\\nproblem of \\"Is X using the correct version of Y?\\".\\n\\nHowever, this also meant that we were unable to support partial versions (major.minor) of tools,\\nwhich is a common use case and request for many users. Over the last few months, we\'ve made immense\\nprogress in [proto](/proto) on how it parses, resolves, and evaluates versions, known as the\\n[version specification](https://crates.io/crates/version_spec).\\n\\nWe felt the time was right to pull these changes into moon, and as such, all `version` fields in\\n[`.moon/toolchain.yml`](/docs/config/toolchain) now support partial versions, version\\nrequirements/ranges, and even aliases!\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n version: \'20.7\' # ~20.7\\n npm:\\n version: \'^9\'\\n\\nrust:\\n version: \'stable\'\\n```\\n\\n:::info\\n\\nLearn more about how this works under the hood in the\\n[official version specification documentation](/docs/concepts/toolchain#version-specification).\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.14.0) for a full list\\nof changes.\\n\\n- Added `packemon`, `sveltekit`, `vite`, `vitest` to\\n [moonrepo/moon-configs](https://github.com/moonrepo/moon-configs).\\n- Updated `.moon/tasks` to support nested folders, for better organization of task files.\\n- Improved handling of certificates and proxies.\\n- Updated to proto v0.18."},{"id":"proto-v0.18","metadata":{"permalink":"/blog/proto-v0.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx","source":"@site/blog/2023-09-18_proto-v0.18.mdx","title":"proto v0.18 - List installed tools and configure HTTP client","description":"Today we\'ve got a small release that includes some helpful features.","date":"2023-09-18T00:00:00.000Z","formattedDate":"September 18, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"http","permalink":"/blog/tags/http"},{"label":"registry","permalink":"/blog/tags/registry"},{"label":"index","permalink":"/blog/tags/index"}],"readingTime":1.83,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.18","title":"proto v0.18 - List installed tools and configure HTTP client","authors":["milesj"],"tags":["proto","http","registry","index"],"image":"./img/proto/v0.18.png"},"prevItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},"nextItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"}},"content":"Today we\'ve got a small release that includes some helpful features.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto tools` command\\n\\nAre you curious what tools you have installed? And more specifically, which versions? What about\\nconfigured aliases? Until now, you had to manually check the `~/.proto/tools` directory for this\\ninformation, but now, you can simply run [`proto tools`](/docs/proto/commands/tools) to get a list\\nof all installed tools.\\n\\nThis command will list all tools that have been installed, along with their installed versions,\\nrelevant timestamps, available aliases, and store location.\\n\\n```shell\\n$ proto tools\\ngo - Go\\n Store: ~/.proto/tools/go\\n Versions:\\n 1.20.0 - installed 08/24/23, last used 09/18/23\\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\\n\\nnode - Node.js\\n Store: ~/.proto/tools/node\\n Aliases:\\n ~20 = stable\\n Versions:\\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\\n 18.14.0 - installed 09/04/23, last used 09/04/23\\n 18.17.1 - installed 09/04/23, last used 09/04/23\\n 19.0.0 - installed 09/03/23\\n 20.0.0 - installed 09/03/23\\n 20.6.0 - installed 09/04/23, last used 09/18/23\\n```\\n\\n> This information can also be represented as JSON by passing the `--json` flag.\\n\\n## New `[http]` user settings\\n\\nFurthermore, we\'ve added a new [`[http]` setting to `~/.proto/config.toml`](/docs/proto/config#http)\\nthat allows you to configure aspects of the HTTP client, which is primarily used for downloading\\ntools.\\n\\nThis may useful if you\'re behind a proxy, a VPN, or corporate network, and certain requests and\\ncertificates are blocked.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\n[http]\\nproxies = [\\"http://intra.net/proxy\\"]\\nroot-cert = \\"/path/to/root/cert.pem\\"\\n```\\n\\n## Index for third-party tools\\n\\nNow that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a\\nthird-party index, a registry of all available tools. We\'ve updated the official\\n[Supported tools](/docs/proto/tools) documentation to now include third-party tools.\\n\\nAt this time, the list of tools is powered by a JS/JSON object,\\n[which can be found here](https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx).\\nIn the future, we may move this to a database, add filtering, sorting, and everything else necessary\\nfor showcasing tools maintained by the community!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.18.0) for a full list\\nof changes.\\n\\n- For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML,\\n which may cause breakages depending on a version mismatch between proto and the plugin."},{"id":"proto-v0.17","metadata":{"permalink":"/blog/proto-v0.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx","source":"@site/blog/2023-09-11_proto-v0.17.mdx","title":"proto v0.17 - Experimental Python support and canary releases","description":"This release implements two long requested features, Python language support and canary releases.","date":"2023-09-11T00:00:00.000Z","formattedDate":"September 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"tool","permalink":"/blog/tags/tool"},{"label":"canary","permalink":"/blog/tags/canary"},{"label":"python","permalink":"/blog/tags/python"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.17","title":"proto v0.17 - Experimental Python support and canary releases","authors":["milesj"],"tags":["proto","plugin","tool","canary","python"],"image":"./img/proto/v0.17.png"},"prevItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"},"nextItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"}},"content":"This release implements two long requested features, Python language support and canary releases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Experimental Python support\\n\\nIt\'s been quite a while since we\'ve introduced a new language into proto, and we\'re excited to\\nannounce the highly requested language, Python! Since Python is now an\\n[officially supported language](https://github.com/moonrepo/python-plugin), installing Python (and\\npip) is as simple as:\\n\\n```shell\\n$ proto install python\\n```\\n\\nHowever, we\'re marking language support as experimental for the time being. We expect our\\nimplementation to work for modern Python versions, but may not work for older versions, especially\\nPython 2. The reasons for this are as follows:\\n\\n- proto will install pre-built binaries from\\n [indygreg/python-build-standalone](https://github.com/indygreg/python-build-standalone). This is\\n an unofficial project, and _does not_ support all Python versions.\\n- If [`python-build`](https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md) is\\n available, we\'ll attempt to use it to build + install Python. This currently requires `pyenv` to\\n be installed, and _does not_ work on Windows.\\n- Furthermore, we only support `cpython` at the moment, and do not support `pypy`, `jython`, or\\n other Python implementations. It\'s unknown whether this functionality should be in the core Python\\n plugin, or another plugin entirely.\\n\\nIn a future proto version, we want to support a true \\"build from source\\" approach for all tools.\\nOnce that functionality has landed, we can properly support Python on all platforms, but until then,\\nlet us know how this works for you!\\n\\n## Install canary releases\\n\\nA canary release is a mechanism for rolling out new features and changes to a small subset of users,\\nwithout it being an official release on an official channel. This allows users to opt-in and test\\nfunctionality if they so choose. Canary releases are not meant to be used in production, and may\\ncontain bugs or breaking changes. A canary is similar to a nightly (or weekly) release, depending on\\nthe tool.\\n\\nWe now support this workflow in proto. To install a canary release, simply use the\\n[`--canary` flag when installing a tool](/docs/proto/commands/install):\\n\\n```shell\\n$ proto install <tool> --canary\\n```\\n\\nThis will install the latest canary release to `~/.proto/tools/<tool>/canary`, and _only_ the latest\\nrelease can be used. Re-installing with `--canary` will overwrite the previous canary installation.\\n\\nHowever, because we [detect a version to run with at runtime](/docs/proto/detection), how should you\\nactually run canary? The easiest way is to prefix the shim with an environment variable:\\n\\n```shell\\n$ PROTO_BUN_VERSION=canary bun ./index.ts\\n```\\n\\nOr to explicitly configure the version in [`.prototools`](/docs/proto/config):\\n\\n```toml\\nbun = \\"canary\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.17.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated the following locations to support partial versions and aliases:\\n - Tool versions in `.prototools`.\\n - Pinning a default version with `proto install --pin`.\\n - Setting global version with `proto global`.\\n - Setting local version with `proto local`.\\n- Node, npm, pnpm, and yarn will again extract a version from `package.json` engines."},{"id":"moon-v1.13","metadata":{"permalink":"/blog/moon-v1.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx","source":"@site/blog/2023-09-05_moon-v1.13.mdx","title":"moon v1.13 - Toolchain now uses WASM plugins","description":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.","date":"2023-09-05T00:00:00.000Z","formattedDate":"September 5, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"}],"readingTime":2.76,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.13","title":"moon v1.13 - Toolchain now uses WASM plugins","authors":["milesj"],"tags":["tasks","proto","wasm"],"image":"./img/moon/v1.13.png"},"prevItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"},"nextItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"}},"content":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.\\n\\n\x3c!--truncate--\x3e\\n\\n## proto upgrade and WASM plugins\\n\\nOver the last few months, we\'ve made immense strides on [proto](/proto), our multi-language\\ntoolchain. For those of you unaware, moon\'s toolchain is built on top of proto, and we accomplish\\nthis by utilizing the same Rust code between both tools.\\n\\nHowever, moon has been locked to [proto v0.12](/blog/proto-v0.12), which was a purely Rust based\\nimplementation. With the release of [proto v0.13](/blog/proto-v0.13) and onward, proto has moved to\\na WASM based plugin architecture (with the core still in Rust), which allows us to support more\\nlanguages, and enables developers to write plugins in non-Rust languages.\\n\\nAnd since our WASM plugins have stabilized by [proto v0.16](/blog/proto-v0.16), we felt it was time\\nto finally upgrade moon\'s implementation to the latest and greatest. So what does this mean exactly?\\nA few things:\\n\\n- If you\'re using moon\'s [toolchain](/docs/config/toolchain) (like `node`), we will now download the\\n [Node.js WASM plugins](https://github.com/moonrepo/node-plugin) in the background (to\\n `~/.proto/plugins`).\\n- These plugins are in charge of downloading and installing the Node.js, npm, pnpm, or yarn version\\n specified in your toolchain configuration.\\n- The entire plugin flow is now logged to the console, so you can see what\'s happening behind the\\n scenes.\\n- In the future (most likely moon v2), our platform and language integration will also be powered by\\n WASM plugins. This enables you to build your own custom plugins!\\n\\n:::info\\n\\nThis entire process should be transparent to all users, and you should not notice any changes.\\nHowever, in case this upgrade causes issues, we wanted to isolate it from other changes, hence the\\nlight release!\\n\\n:::\\n\\n## Allow tasks to fail\\n\\n\\"Allow tasks to fail?\\" You ask yourself. \\"Doesn\'t that defeat the point of a task runner?\\" You\\nquestion further. \\"You\'re not wrong!\\" We reply. These questions assume a perfect repository state,\\nwhere all tasks either pass or fail, and there\'s no middle ground. In reality, very rarely is that\\ntrue, and we want to support those stuck in the middle, such as:\\n\\n- In a heavy migration and it\'s known that a task is currently broken.\\n- The task is flaky but you\'ve been unable to find the root cause.\\n- Upstream dependencies have published a backwards incompatible change, and you\'re waiting on a fix.\\n- And of course, in the middle of adopting moon!\\n\\nFor situations where a task consistently or sometimes fails, but you don\'t want it to fail the\\nentire pipeline (especially in CI), you can enable the new\\n[`allowFailure` task option](/docs/config/project#allowfailure).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n typecheck:\\n command: \'tsc --build\'\\n options:\\n allowFailure: true\\n```\\n\\nWhen enabled, failing tasks will no longer bail [`moon run`](/docs/commands/run) early, nor will it\\nexit [`moon ci`](/docs/commands/ci) with a non-zero exit code. However, we still built guard rails\\naround this feature, as we don\'t want to encourage bad practices, and one of these guard rails is\\nthat tasks that enable `allowFailure` _cannot_ be depended on by other tasks, as we cannot guarantee\\nthat it\'s side-effect free.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.13.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated `runner.archivableTargets` to support tag scoped targets.\\n- Updated `moon query tasks --affected` to filter based on affected task, instead of affected\\n project."},{"id":"proto-v0.16","metadata":{"permalink":"/blog/proto-v0.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx","source":"@site/blog/2023-09-04_proto-v0.16.mdx","title":"proto v0.16 - Add, remove, and purge plugins","description":"This release adds functionality for managing plugins and purging the proto store.","date":"2023-09-04T00:00:00.000Z","formattedDate":"September 4, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.445,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.16","title":"proto v0.16 - Add, remove, and purge plugins","authors":["milesj"],"tags":["proto","plugin"]},"prevItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"},"nextItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"}},"content":"This release adds functionality for managing plugins and purging the proto store.\\n\\n\x3c!--truncate--\x3e\\n\\n## Add and remove plugins\\n\\nNow that proto has fully embraced a plugin based architecture, we thought it\'d be nice to support\\nthe management of these plugins through the CLI. This release adds two new commands:\\n[`proto add-plugin`](/docs/proto/commands/add-plugin) and\\n[`proto remove-plugin`](/docs/proto/commands/remove-plugin).\\n\\nAdding a plugin requires a unique ID and what we call a locator, which is a string that dictates\\nwhere to locate and download the plugin from. Here\'s an example for Node.js, but this isn\'t\\nnecessary as it\'s built-in:\\n\\n```shell\\n$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\\n```\\n\\nAdditionally, removing a plugin is even easier.\\n\\n```shell\\n$ proto remove-plugin node\\n```\\n\\n## Purge tools and plugins\\n\\nproto has supported cleaning for quite some time through the\\n[`proto clean`](/docs/proto/commands/clean) command (and the\\n[`auto-clean` setting](/docs/proto/config#user-configuration)), which would automatically delete\\ninstalled tool versions and temporary files that are older then a specific timeframe. This helps to\\nfree up disk space for unused or rarely used tools.\\n\\nIn this release, we\'re expanding the `clean` command\'s functionality with a concept known as\\npurging, which will \\"delete entirely\\". The first being the new `--purge` option, which will delete a\\ntool, its manifest, _all_ installed versions, and the entire `~/.proto/tools/<id>` directory.\\n\\n```shell\\n# Delete all traces of Node.js\\n$ proto clean --purge node\\n```\\n\\nAdditionaly, a new `--purge-plugins` option can be used to delete all downloaded plugins (the\\n`~/.proto/plugins` directory). Useful for house keeping or if you want to start fresh.\\n\\n```shell\\n$ proto clean --purge-plugins\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.16.0) for a full list\\nof changes.\\n\\n- Added folder locking during tool installation to avoid colliding processes.\\n- Renamed `PROTO_ROOT` to `PROTO_HOME`, but we\'ll support `PROTO_ROOT` for the time being."},{"id":"proto-v0.15","metadata":{"permalink":"/blog/proto-v0.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx","source":"@site/blog/2023-08-23_proto-v0.15.mdx","title":"proto v0.15 - Install and uninstall globals","description":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.","date":"2023-08-23T00:00:00.000Z","formattedDate":"August 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"global","permalink":"/blog/tags/global"}],"readingTime":1.48,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.15","title":"proto v0.15 - Install and uninstall globals","authors":["milesj"],"tags":["proto","wasm","plugin","global"]},"prevItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"},"nextItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"}},"content":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.\\n\\n\x3c!--truncate--\x3e\\n\\n## Uninstall global dependencies\\n\\nproto has supported [installing globals since v0.5](./proto-v0.5), but there\'s been no way to\\nuninstall an existing global, until now! In this release, we\'re introducing the\\n[`proto uninstall-global`](/docs/proto/commands/uninstall-global) command, which will do just that!\\nThe API is exactly the same as its installation counter-part.\\n\\n```shell\\nproto install-global node prettier\\n\\n# On second thought, nevermind...\\nproto uninstall-global node prettier\\n```\\n\\n### WASM functions\\n\\nImplementing this command was rather straight forward, but most of the work went into supporting\\n[`install_global` and `uninstall_global`](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\nfunctions for WASM plugins, and then updating all existing plugins! For those of you writing your\\nown plugins, here\'s an example of what the Rust code looks like:\\n\\n```rust\\n#[plugin_fn]\\npub fn install_global(\\n Json(input): Json<InstallGlobalInput>,\\n) -> FnResult<Json<InstallGlobalOutput>> {\\n let result = exec_command!(inherit, \\"npm\\", [\\"install\\", \\"--global\\", &input.dependency]);\\n\\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\\n}\\n```\\n\\n### TOML setting\\n\\nWe\'ve also updated our TOML plugins to support uninstalling globals through the new\\n[`globals.uninstall-args`](/docs/proto/toml-plugin#global-packages) setting. Hopefully the name is\\nself explanatory, but it\'s a list of arguments passed to the tool\'s binary, that\'ll uninstall the\\nglobal.\\n\\n```toml\\n# ...\\n\\n[globals]\\ninstall-args = [\\"install\\", \\"--global\\", \\"{dependency}\\"]\\nuninstall-args = [\\"uninstall\\", \\"--global\\", \\"{dependency}\\"]\\n```\\n\\n## Improved WASM documentation\\n\\nWith each release we\'re slowly stabilizing the WASM and TOML APIs for an official v1 release (which\\nis soon), and with this, it requires more documentation. As part of this release, we\'ve done a giant\\npolish pass on our WASM documentation, and have included the following sections:\\n\\n- [Virtual paths](/docs/proto/wasm-plugin#virtual-paths)\\n- [Host environment](/docs/proto/wasm-plugin#host-environment)\\n- [Host functions](/docs/proto/wasm-plugin#host-functions)\\n- [Tool ID and context](/docs/proto/wasm-plugin#tool-id-and-context)\\n- [Installing and uninstalling globals](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.15.0) for a full list\\nof changes.\\n\\n- Major WASM API improvements, including backwards incompatible changes."},{"id":"moon-v1.12","metadata":{"permalink":"/blog/moon-v1.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx","source":"@site/blog/2023-08-21_moon-v1.12.mdx","title":"moon v1.12 - Task improvements: extending, interactive, and more","description":"In this release, we focused heavily on improving tasks, its configuration, and related systems.","date":"2023-08-21T00:00:00.000Z","formattedDate":"August 21, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":3.32,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.12","title":"moon v1.12 - Task improvements: extending, interactive, and more","authors":["milesj"],"tags":["tasks","inheritance"],"image":"./img/moon/v1.12.png"},"prevItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"},"nextItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"}},"content":"In this release, we focused heavily on improving tasks, its configuration, and related systems.\\n\\n\x3c!--truncate--\x3e\\n\\n## Extending sibling or inherited tasks\\n\\nThree months ago, we posted an\\n[RFC on how to support task extending / task variants](https://github.com/moonrepo/moon/issues/849).\\nOn paper this doesn\'t sound like a hard problem to solve, but internally it would of been an uphill\\nbattle to implement. Thanks to previous releases from the past few months, and the rewrite of the\\nproject graph, task builder, and more, this implementation was a breeze. To finalize the RFC, we\\nwent with option 2, by adding a new `extends` field to task configurations.\\n\\nWith this new addition, we can now rewrite this old configuration, which was needlessly\\nrepetitive...\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n command: \'eslint . --fix\'\\n local: true\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n```\\n\\nInto the following configuration.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n extends: \'lint\'\\n args: \'--fix\'\\n local: true\\n```\\n\\nWe\'re very happy with this solution, as it\'s far more readable, maintainable, and doesn\'t introduce\\nyet another paradigm to learn. Our goal was to be as familiar as possible, while providing extensive\\nfunctionality behind the scenes, which we believe to have achieved.\\n\\nSome other interesting facts around task extending:\\n\\n- When extending a task, [merge strategies](/docs/concepts/task-inheritance#merge-strategies) are\\n applied in a similar fashion to inheritance.\\n- Inherited tasks can be extended from by project-level tasks.\\n- It\'s possible to create multiple extended chains.\\n\\n## Configure tasks as interactive\\n\\nSix months ago, we added support for [interactive tasks in v0.24](./v0.24#interactive-tasks), but\\nonly if certain conditions were met: if only 1 target is running, they are considered interactive,\\nor if the `--interactive` option was passed to [`moon run`](/docs/commands/run). However, we believe\\nit nice to support interactive tasks through task configuration directly, but it required some\\nthought into how this would work within the dependency graph and pipeline, as only 1 task can\\ninteract with stdin at a time.\\n\\nWe solved this problem by reworking our dependency graph so that interactive tasks are isolated from\\nother actions in the graph, and are not run in parallel with other actions. This will result in\\nlonger dependency chains, but results in a working stdin solution.\\n\\nTo mark a task as interactive, enable the [`options.interactive`](/docs/config/project#interactive)\\nsetting.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n init:\\n command: \'init-app\'\\n options:\\n interactive: true\\n```\\n\\n## Tokens in enviroment variables\\n\\nUp until now, [token functions and variables](/docs/concepts/token) were only supported in task\\ncommands, args, inputs, and outputs, but not environment variables... why? Honestly, there was no\\nreal reason they weren\'t supported, it simply never crossed our mind! But thanks to requests from\\nthe community, both token functions and variables are now supported in task\\n[`env`](/docs/config/project#env-1).\\n\\nThis is great for propagating moon values to other systems. For example, say you want to use moon\\nproject names for Sentry, keeping a 1:1 mapping.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n start:\\n command: \'run-server\'\\n env:\\n SENTRY_PROJECT: \'$project\'\\n```\\n\\nIf you\'re familiar with tokens, you may be asking yourself, \\"How do token functions work since they\\nexpand to a list of paths?\\" That\'s a great question! When token functions are used in an environment\\nvariable, like `@group(sources)`, the list of paths will be joined with a comma (`,`).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n # ...\\n env:\\n SRCS: \'@group(sources)\'\\n```\\n\\nSince the environment variable is simply a string, you could parse it with your language of choice\\nto extract the list of paths.\\n\\n```js\\nconst paths = process.env.SRCS.split(\',\');\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.12.0) for a full list\\nof changes.\\n\\n- Added git worktree support.\\n- Updated task `outputs` to support negated globs.\\n- Will now log a warning to the console if a configuration file uses the `.yaml` extension."},{"id":"proto-v0.14","metadata":{"permalink":"/blog/proto-v0.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx","source":"@site/blog/2023-08-11_proto-v0.14.mdx","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","description":"With this release, we\'ve finished our migration to a WASM based plugin architecture.","date":"2023-08-11T00:00:00.000Z","formattedDate":"August 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.14","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"},"nextItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"}},"content":"With this release, we\'ve finished our migration to a WASM based plugin architecture.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full migration to WASM\\n\\nIn [our last release](./proto-v0.13), we migrated the Bun, Deno, and Go plugins to WASM. In this\\nrelease, we\'re excited to announce that we have completed our WASM migration by also converting\\nNode.js (and npm, etc) and Rust to WASM plugins. We\'ve also updated our TOML plugin layer to use\\nWASM under the hood.\\n\\nWith this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the\\nconsumers, to build your own plugins! We have plans for additional APIs in the next release,\\nprimarily installing and uninstall globals, and a hooks system, so look forward to that! To learn\\nmore about our official plugins, check out the their repositories!\\n\\n- [Bun](https://github.com/moonrepo/bun-plugin)\\n- [Deno](https://github.com/moonrepo/deno-plugin)\\n- [Go](https://github.com/moonrepo/go-plugin)\\n- [Node](https://github.com/moonrepo/node-plugin)\\n- [Rust](https://github.com/moonrepo/rust-plugin)\\n- [Schema](https://github.com/moonrepo/schema-plugin)\\n\\nThis release may seem light, but we\\n[rewrote the entire core](https://github.com/moonrepo/proto/pull/161) from the ground up to support\\na pure plugin based architecture. This was a lot of work, but our implementation is far easier to\\nwork with, and more robust. As part of this process, we improved version and range handling, archive\\nunpacking, and much more!\\n\\n> Because of the rewrite, we may have introduced a few bugs. Please report any issues!\\n\\n## Breaking changes for TOML plugins\\n\\nIn preparation for the next release, and as clean up during the rewrite, we\'ve made a few breaking\\nchanges to the TOML schema, primarily around global handling. To start, this old code:\\n\\n```toml\\n[install]\\nglobals-dir = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\nglobal-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nCan now be rewritten as:\\n\\n```toml\\n[globals]\\nlookup-dirs = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\ninstall-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nAnd lastly, the `install.unpack` setting has been removed. We believe our installation layer is\\nsmart enough to unpack or move files automatically.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.14.0) for a full list\\nof changes.\\n\\n- Versions defined in `.prototools` must be fully-qualified semantic versions. Partial versions\\n (missing patch or minor) are no longer supported. This may change in the future based on feedback.\\n- Tool and plugin names must now be in kebab-case.\\n- Node\\n - Yarn 2+ is now installed using `@yarnpkg/cli-dist`. We no longer downgrade to the latest v1.\\n - Will no longer detect a version from `engines` in `package.json`.\\n- Rust\\n - Will now detect a version/channel from `rust-toolchain.toml` and `rust-toolchain`."},{"id":"moon-v1.11","metadata":{"permalink":"/blog/moon-v1.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx","source":"@site/blog/2023-07-31_moon-v1.11.mdx","title":"moon v1.11 - Next-generation project graph","description":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of","date":"2023-07-31T00:00:00.000Z","formattedDate":"July 31, 2023","tags":[{"label":"project-graph","permalink":"/blog/tags/project-graph"},{"label":"project","permalink":"/blog/tags/project"}],"readingTime":4.095,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.11","title":"moon v1.11 - Next-generation project graph","authors":["milesj"],"tags":["project-graph","project"],"image":"./img/moon/v1.11.png"},"prevItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"},"nextItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"}},"content":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of\\nmoon.\\n\\n\x3c!--truncate--\x3e\\n\\n## New project graph\\n\\nOne of the first features that was built for moon was the project graph, as this was required to\\ndetermine relationships between tasks and projects. Its initial implementation was rather simple, as\\nit was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project\\ngraph, and overtime, it has accrued a lot of cruft and technical debt.\\n\\nOne of the biggest pain points has been the project graph cache, and correctly invalidating the\\ncache for all necessary scenarios. If you\'ve been using moon for a long time, you\'re probably aware\\nof all the hot fixes and patches that have been released. Another problem with the cache, is that it\\nincluded hard-coded [file system paths](https://github.com/moonrepo/moon/issues/937) and\\n[environment variables](https://github.com/moonrepo/moon/issues/896), both of which would not\\ninvalidate the cache when changed.\\n\\nWe felt it was time to rebuild the project graph from the ground up. Some of this work has already\\nlanded in [previous releases](./moon-v1.9#rewritten-task-inheritance).\\n\\n### Old implementation\\n\\nFor those of you who are interested in the technical details, here\'s a quick overview of how the old\\nproject graph worked. To start, the graph was composed around the following phases:\\n\\n- **Build** - Projects are loaded into the graph (nodes), relationships are linked (edges),\\n configurations are read, tasks are inherited, and platform/language rules are applied.\\n- **Expand** - In all tasks, token variables and functions are expanded/substituted, dependencies\\n are expanded (`^:deps`, etc), `.env` files are read (when applicable), so on and so forth.\\n- **Validate** - Enforces project and task boundaries and constraints.\\n\\nThis is quite a lot of work, and it was all done in _a single pass_. What this means is that for\\neach project loaded into the graph, we would recursively build -> expand -> validate, until all\\nprojects have been loaded, synchronously at once in the same thread. Because this is a rather\\nexpensive operation, the project graph cache was introduced to avoid having to do this work on every\\nrun.\\n\\nMakes sense, right? For the most part yes, but there is a core problem with the solution above, and\\nif you\'ve noticed it already, amazing! The problem is that out of these 3 phases, only the build\\nphase is truly cacheable, as the expand and validate phases are far too dynamic and dependent on the\\nenvironment. This means that the cache is only partially effective, and in some cases, entirely\\nbroken.\\n\\nAnother unrelated problem with this solution, is that because everything is built in a single pass,\\nadvanced functionality that requires multiple passes is not possible and has been stuck on the\\nbacklog.\\n\\n### New implementation\\n\\nFor backwards compatibility, the new project graph works in a similar manner, but has none of the\\nshortcomings of the old implementation (hopefully). To start, the new project graph still has the\\nsame 3 phases, but they are _no longer processed in a single pass_, instead...\\n\\nThe build phase is now asynchronous, enabling deeper interoperability with the rest of the\\nasync-aware codebase. However, the critical change is that the project graph cache is now written\\n_after_ the build phase (and read _before_), instead of after the entire graph being generated.\\n\\n> The new cache file is `.moon/cache/states/partialProjectGraph.json`, and is named partial because\\n> tasks have not been expanded. Use `moon project-graph --json` for a fully expanded graph.\\n\\nThe expand phase has changed quite a bit. Instead of expanding everything at once, projects and\\ntasks are only expanded when they are needed. For example, if only running a single target, we\'ll\\nnow only expand that project and task, instead of _everything_ in the graph. With this change, you\\nshould potentially see performance increases, unless you\'re using `moon ci` or `moon check --all`.\\n\\nAnd lastly, validation is still the same, but has been reworked so that we can easily extend it with\\nmore validation rules in the future.\\n\\n### Unlocked features\\n\\nWith these changes to building and expanding, we\'ve unlocked a few new features that were not\\npossible before.\\n\\n- Task dependencies can now reference tag based targets. For example, say we want to build all React\\n projects before starting our application.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n deps:\\n - \'#react:build\'\\n```\\n\\n- Task commands and arguments will now substitute environment variables, by first checking `env`,\\n then those from the system.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'docker build --build-arg pkg=$PKG_NAME\'\\n env:\\n PKG_NAME: \'foo-bar\'\\n```\\n\\n- Project dependencies can now mark relationships as `build`. This is only applicable for languages\\n that support build dependencies, like Rust.\\n\\n```yaml title=\\"moon.yml\\"\\ndependsOn:\\n - id: \'foo\'\\n scope: \'build\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.11.0) for a full list\\nof changes.\\n\\n- Identifiers (project names, file groups, etc) can now be prefixed with underscores (`_`).\\n- Added Poetry detection support for Python projects.\\n- Added an `experiments` setting to `.moon/workspace.yml`."},{"id":"proto-v0.13","metadata":{"permalink":"/blog/proto-v0.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx","source":"@site/blog/2023-07-21_proto-v0.13.mdx","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","description":"With this release, we\'re embracing WASM even further.","date":"2023-07-21T00:00:00.000Z","formattedDate":"July 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2.195,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.13","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"},"nextItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"}},"content":"With this release, we\'re embracing WASM even further.\\n\\n\x3c!--truncate--\x3e\\n\\n## Core migration to WASM\\n\\nNow that WASM plugin support is up and running, we\'ve hit a non-ideal situation where we have\\nmultiple competing implementations for \\"tools\\" in proto. We currently have 3 different approaches:\\n\\n- Tools implemented in Rust and built into proto\'s core.\\n- TOML based plugins, with a simple Rust based wrapper.\\n- WASM based plugins.\\n\\nThis is far too many implementations to support, and makes it extremely difficult to add new\\nfeatures for tools, as it affects all 3. To remedy this situation, we\'ve decided to migrate all core\\ntools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will\\nstill be Rust, but will be slowly migrated into a truly pluggable architecture.\\n\\nTo test drive and experiment with this solution, we\'ve migrated\\n[Bun](https://github.com/moonrepo/bun-plugin), [Deno](https://github.com/moonrepo/deno-plugin), and\\n[Go](https://github.com/moonrepo/go-plugin) into WASM plugins, and starting with this release, they\\nare purely powered by WASM and have been removed entirely from the Rust implementation.\\n\\nIn the next release, we hope to migrate Node.js and Rust as well. And in a future release, the TOML\\nplugins will be compiled into\\n[`.wat` files](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format)\\nand loaded as WASM plugins. From here, we will have a single tool implementation, and can implement\\nsome really exciting features!\\n\\n## New `github:` plugin configuration\\n\\nAlongside the `source:` configuration strategy, plugins can now be configured with the `github:`\\nstrategy to locate WASM files from GitHub releases. For example, the `bun_plugin.wasm` file will be\\ndownloaded from our\\n[`bun-plugin`\'s latest release](https://github.com/moonrepo/bun-plugin/releases).\\n\\n[Learn more about this new locator scope!](/docs/proto/plugins#github)\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nbun = \\"github:moonrepo/bun-plugin\\"\\n```\\n\\n> Bun support is built into proto, there is merely an example!\\n\\n## New `proto plugins` commands\\n\\nWith the advent of plugins, we thought it would be nice to know which plugins are actually\\nconfigured and in use, without having to manually search config files across the file system, and as\\nsuch, have added a new [`proto plugins`](/docs/proto/commands/plugins) command.\\n\\nThis command is simple. It will list all plugins that are currently configured for the current\\nproject, by loading all `.prototools` files up the tree, and loading the user\\n`~/.proto/config.toml`.\\n\\n```shell\\n$ proto plugins\\nbun - Bun\\n GitHub: moonrepo/bun-plugin\\n Tag: latest\\n\\ndeno - Deno\\n GitHub: moonrepo/deno-plugin\\n Tag: latest\\n\\ngo - Go\\n GitHub: moonrepo/go-plugin\\n Tag: latest\\n```\\n\\n[Learn more about this new command!](/docs/proto/commands/plugins)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.13.0) for a full list\\nof changes.\\n\\n- Added documentation for writing [unit tests for WASM plugins](/docs/proto/wasm-plugin#unit-tests).\\n- Updated `proto clean` and `proto use` to load and merge all `.prototools` from the current\\n directory and upwards.\\n- Many WASM API improvements."},{"id":"moon-v1.10","metadata":{"permalink":"/blog/moon-v1.10","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx","source":"@site/blog/2023-07-10_moon-v1.10.mdx","title":"moon v1.10 - Mid-year quality of life improvements","description":"Instead of launching a large feature this release, we\'re focusing on quality of life and developer","date":"2023-07-10T00:00:00.000Z","formattedDate":"July 10, 2023","tags":[{"label":"quality","permalink":"/blog/tags/quality"},{"label":"life","permalink":"/blog/tags/life"},{"label":"qol","permalink":"/blog/tags/qol"},{"label":"ignore","permalink":"/blog/tags/ignore"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"debug","permalink":"/blog/tags/debug"}],"readingTime":3.6,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.10","title":"moon v1.10 - Mid-year quality of life improvements","authors":["milesj"],"tags":["quality","life","qol","ignore","hasher","vcs","ci","debug"],"image":"./img/moon/v1.10.png"},"prevItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"},"nextItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nInstead of launching a large feature this release, we\'re focusing on quality of life and developer\\nexperience improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Quality improvements\\n\\nIn the past 6 months, we\'ve released over 16 versions of moon, with our official v1.0 release among\\nthem. This is extremely impressive and we\'re very proud of the progress we\'ve made. To continue this\\ntrend, we\'ll be starting a new initiative that will land quality of life improvements (instead of\\nmajor features) every 6 months, starting with this release!\\n\\n### Potential breaking changes\\n\\nWhile APIs haven\'t changed, we have introduced some fixes for edge case that could be considered\\nbreaking, but for the most part, these changes probably won\'t affect you. With that being said...\\n\\nThe first fix is that tasks configured with the same `outputs` location (including glob overlap)\\nwill now error. This is extremely problematic for caching and hydration, as multiple tasks all\\nwriting to the same output will inflate the tarball, and cause unwanted side effects. To demonstrate\\nthis, the following is now an error:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'foo build\'\\n outputs:\\n - \'dist\'\\n\\n compile:\\n command: \'bar compile\'\\n outputs:\\n - \'dist\'\\n```\\n\\nThe other fix, which primarily applies to [`moon ci`][ci] and [`moon check`](/docs/commands/check),\\nis that a target will be skipped if one of its dependencies failed or has also been skipped.\\nPreviously the target would attempt to run and most likely fail since it relied on artifacts from\\nits dependencies (which don\'t exist). Another benefit of this change is that runs should be much\\nfaster, as we\'re not wasting time running targets that we know will fail, which is great for CI.\\n\\n### Ignore hashing input files\\n\\nWe\'re introducing 2 new settings to [`.moon/workspace.yml`](/docs/config/workspace) that\'ll provide\\nmore control over the hashing flow, [`hasher.ignorePatterns`](/docs/config/workspace#ignorepatterns)\\nand [`hasher.ignoreMissingPatterns`](/docs/config/workspace#ignoremissingpatterns).\\n\\nThe `ignorePatterns` setting can be used to entirely ignore a file (using glob patterns) from being\\nhashed, and in turn, exclude it as an input source. For example, say we want to ignore all image\\nfiles.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nhasher:\\n ignorePatterns:\\n - \'**/*.{png,svg}\'\\n```\\n\\nThe `ignoreMissingPatterns` setting pairs with\\n[`hasher.warnOnMissingInputs`](/docs/config/workspace#warnonmissinginputs). When enabled, moon will\\nlog a warning to the terminal that an input is missing. This is useful for uncovering\\nmisconfigurations, but can be quite noisy when inputs are truly optional. This new setting can be\\nused to filter these warnings.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nhasher:\\n warnOnMissingInputs: true\\n ignoreMissingPatterns:\\n - \'**/.eslintrc.*\'\\n - \'**/*.config.*\'\\n```\\n\\n### Customize base and head revision\\n\\nThe [`moon ci`][ci] command has always supported customizing the Git base and head revisions through\\nthe `--base` and `--head` options respectively. This was a requirement for running CI effectively,\\nby comparing across branches or commits. However, the [`moon run`][run] did not support this, as\\nthis command was designed to primarily be run locally, but it turns out, y\'all are using it in CI\\ntoo!\\n\\nTo improve the effectiveness of `moon run` in CI, we\'ve made the following improvements, all of\\nwhich require the `--remote` option to be passed.\\n\\n- Added support for `MOON_BASE` and `MOON_HEAD` environment variables, for customizing the base and\\n head revisions respectively (also supported in `moon ci`). If not defined, will use the default\\n branch and `HEAD`.\\n- When the current branch is the default branch, the base revision will be the previous commit.\\n Useful for commits landing on master/main.\\n\\n## New debugging a task guide\\n\\nRunning tasks is the most common way to interact with moon, so what do you do when your task isn\'t\\nworking as expected? Diagnose it of course! However, diagnosing the root cause of a broken task can\\nbe quite daunting:\\n\\n- Is configuration wrong?\\n- What about inheritance? Or merging?\\n- Is the task platform correct?\\n- Were tokens expanded correctly?\\n- What about variable substitution?\\n- So on and so forth...\\n\\nTo help answer these questions, we\'re excited to publish an\\n[in-depth guide for debugging a task](/docs/guides/debug-task)! These steps are the same steps we\\nuse internally to diagnose reported issues, or help the Discord community. We hope you find this\\nguide extremely beneficial!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View debugging a task guide\\" href=\\"/docs/guides/debug-task\\" size=\\"lg\\" />\\n</div>\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.10.0) for a full list\\nof changes.\\n\\n- Updated [`moon ci`][ci] to include a summary of all failed actions.\\n- Updated the run report to include stderr/stdout for all attempts.\\n\\n[ci]: /docs/commands/ci\\n[run]: /docs/commands/run"},{"id":"proto-v0.12","metadata":{"permalink":"/blog/proto-v0.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx","source":"@site/blog/2023-07-07_proto-v0.12.mdx","title":"proto v0.12 - Experimental WASM plugins","description":"After months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.","date":"2023-07-07T00:00:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.885,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.12","title":"proto v0.12 - Experimental WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"prevItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"},"nextItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nAfter months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.\\n\\n\x3c!--truncate--\x3e\\n\\n## WASM plugins\\n\\nThree months ago, we [published an RFC](https://github.com/moonrepo/proto/issues/73) for supporting\\nplugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional\\ntools, instead of them being built into proto core (which is very time consuming).\\n\\nTwo months ago, we released support for [TOML plugins](/docs/proto/toml-plugin). These are very\\nsimple plugins powered by static configuration files. They\'re great for simple tools like CLIs and\\npre-built languages, as everything is powered by static HTTP URLs and file names. However, sometimes\\nyou need dynamic control...\\n\\nAnd after 2 months of development, and help from the [Extism team](https://extism.org/), we\'re\\nexcited to announce initial support for WASM plugins. WASM is a portable binary format, with\\nsandboxed access to the file system (via WASI), and the ability to execute processes and fetch URLs.\\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\\nTypeScript, and more. This removes the requirement of writing Rust and contributing to proto\\ndirectly!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View WASM plugin guide\\" href=\\"/docs/proto/wasm-plugin\\" size=\\"lg\\" />\\n</div>\\n\\n### Using WASM plugins\\n\\nOnce the `.wasm` file is publicly available for download, we can configure it as a plugin in\\n[`.prototools`](/docs/proto/config).\\n\\n```toml\\n[plugins]\\nmy-plugin = \\"source:https://domain.com/path/to/wasm/plugin.wasm\\"\\n```\\n\\nAnd execute all `proto` commands using the configured plugin identifier.\\n\\n```shell\\nproto install my-plugin\\n```\\n\\n### Example implementation\\n\\nThe official guide above walks you through creating a plugin, but to demonstrate the power of WASM\\nplugins, here\'s an example function that defines parameters for downloading and installing Node.js.\\nThis is written in Rust and using Extism\'s official PDK.\\n\\n```rust\\n#[plugin_fn]\\npub fn download_prebuilt(\\n Json(input): Json<DownloadPrebuiltInput>,\\n) -> FnResult<Json<DownloadPrebuiltOutput>> {\\n let version = input.env.version;\\n let arch = input.env.arch;\\n\\n let prefix = match input.env.os {\\n HostOS::Linux => format!(\\"node-v{version}-linux-{arch}\\"),\\n HostOS::MacOS => format!(\\"node-v{version}-darwin-{arch}\\"),\\n HostOS::Windows => format!(\\"node-v{version}-win-{arch}\\"),\\n other => {\\n return Err(PluginError::UnsupportedPlatform {\\n tool: NAME.into(),\\n platform: format!(\\"{:?}\\", other),\\n })?;\\n }\\n };\\n\\n let filename = if input.env.os == HostOS::Windows {\\n format!(\\"{prefix}.zip\\")\\n } else {\\n format!(\\"{prefix}.tar.xz\\")\\n };\\n\\n Ok(Json(DownloadPrebuiltOutput {\\n archive_prefix: Some(prefix),\\n download_url: format!(\\"https://nodejs.org/dist/v{version}/{filename}\\"),\\n download_name: Some(filename),\\n checksum_url: Some(format!(\\"https://nodejs.org/dist/v{version}/SHASUMS256.txt\\")),\\n ..DownloadPrebuiltOutput::default()\\n }))\\n}\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.12.0) for a full list\\nof changes."},{"id":"moon-v1.9","metadata":{"permalink":"/blog/moon-v1.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx","source":"@site/blog/2023-06-26_moon-v1.9.mdx","title":"moon v1.9 - VCS hooks management and improved task inheritance","description":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete","date":"2023-06-26T00:00:00.000Z","formattedDate":"June 26, 2023","tags":[{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"git","permalink":"/blog/tags/git"},{"label":"hooks","permalink":"/blog/tags/hooks"},{"label":"task","permalink":"/blog/tags/task"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":2.625,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.9","title":"moon v1.9 - VCS hooks management and improved task inheritance","authors":["milesj"],"tags":["vcs","git","hooks","task","inheritance"],"image":"./img/moon/v1.9.png"},"prevItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"},"nextItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"}},"content":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete\\nrewrite of our task inheritance layer.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for VCS hooks\\n\\nIn our last release, we added support for [code ownership](./moon-v1.8), to better help teams manage\\ntheir code review and approval workflows. To continue this trend of \\"features all companies require\\nbut don\'t have a good solution for\\", we\'re adding support for VCS hooks,\\n[starting with Git](https://git-scm.com/docs/githooks).\\n\\nIf you\'re unfamiliar with Git hooks, they\'re a mechanism for running scripts before or after certain\\nGit events. For example, before a commit is added, before pushing, or after merging. Hooks can be\\nused for such situations as:\\n\\n- Ensuring commit messages abide by a certain format.\\n- Ensuring affected project\'s source code pass linting and formatting checks.\\n- Validating configuration files.\\n- And much more!\\n\\n:::info\\n\\nFor more information, view our official in-depth [VCS hooks guide](/docs/guides/vcs-hooks)!\\n\\n:::\\n\\n### New `vcs` settings\\n\\nTo support hooks, we\'re introducing the `vcs.hooks` and `vcs.syncHooks` settings to\\n[`.moon/workspace.yml`](/docs/config/workspace). The former is where you configure the list of\\ncommands to run, grouped by hook type.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nvcs:\\n hooks:\\n pre-commit:\\n - \'pre-commit run\'\\n - \'moon run :lint --affected\'\\n```\\n\\nThe latter will automatically create and sync hooks with the local VCS checkout, enabling them going\\nforward. [Learn more about enabling hooks](/docs/guides/vcs-hooks#enabling-hooks), and choosing the\\napproach that works best for you or your team!\\n\\n### New `moon sync hooks` command\\n\\nAlthough moon can [automatically create](/docs/config/workspace#synchooksonrun) hooks when running a\\ntarget, this may be undesirable or abrasive for some developers. Instead, we also support an opt-in\\nsolution through the [`moon sync hooks`](/docs/commands/sync/hooks) command, which will manually\\ncreate the hooks.\\n\\n```shell\\n$ moon sync hooks\\n```\\n\\n## Rewritten task inheritance\\n\\nOne of the most complicated systems in moon is the task inheritance layer. On the surface, it sounds\\nrather simple, but internally it was very complicated. For common use cases, it worked very well,\\nbut for advanced use cases, how a task was \\"inherited and merged\\" was sometimes undefined behavior.\\n\\nOver the past year, we\'ve introduced many new features, such as\\n[implicit dependencies and inputs](./v0.23), [tag-based task inheritance](./moon-v1.2),\\n[project-level environment variables](./v0.23#project-level-environment-variables),\\n[custom languages](./v0.25#custom-project-language) and\\n[platforms](./v0.24#project-level-task-platform), and so much more. Each of these new features would\\nthrow yet another facet to be aware of during the task inheritance model, and over the past year, it\\nhas become rather unwieldy.\\n\\nTo rectify this situation before it becomes worse, we rewrote our\\n[project, task](https://github.com/moonrepo/moon/pull/921), and\\n[task inheritance](https://github.com/moonrepo/moon/pull/939) layers from the ground-up using a new\\nbuilder pattern, including writing all new unit tests, to properly and efficiently account for all\\nedge cases.\\n\\nGoing forward, tasks should be far more accurate and deterministic. If you encounter any weirdness,\\nit\'s either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not\\naccounted for in our current unit test suite. Please report them either way!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.9.0) for a full list of\\nchanges.\\n\\n- Added `--clean` and `--force` flags to `moon sync codeowners` command.\\n- Updated `moon init` to detect VCS providers and resolve fully-qualified tool versions.\\n- Improved VCS file handling, caching, and performance."},{"id":"proto-v0.11","metadata":{"permalink":"/blog/proto-v0.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-25_proto-v0.11.mdx","source":"@site/blog/2023-06-25_proto-v0.11.mdx","title":"proto v0.11 - New shims and better logging","description":"This is a small release that improves shims and logs.","date":"2023-06-25T00:00:00.000Z","formattedDate":"June 25, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"logging","permalink":"/blog/tags/logging"}],"readingTime":1.04,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.11","title":"proto v0.11 - New shims and better logging","authors":["milesj"],"tags":["proto","shim","logging"]},"prevItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"},"nextItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"}},"content":"This is a small release that improves shims and logs.\\n\\n\x3c!--truncate--\x3e\\n\\n## New and improved shims\\n\\nThe core facet of proto is our shims found at `~/.proto/bin`. They exist purely to re-route tool\\nexecutions internally to proto, so that we can detect the correct version of these tools to run.\\nHowever, maintaining and creating these shims has historically been very complicated. So we chose to\\nrewrite them from the ground-up!\\n\\nAll tools should continue to function exactly as they did before, if not better. Furthermore,\\nbecause of this new shim layer, we\'re now able to create what we call \\"secondary shims\\", like\\n[`bunx` for Bun](https://bun.sh/docs/cli/bunx), `pnpx` for pnpm, and `yarnpkg` for Yarn.\\n\\n## Better logging\\n\\nproto has supported logging since its initial release behind the `PROTO_LOG` environment variable.\\nHowever, this variable wasn\'t heavily documented, nor easily discoverable. So as an alternative, we\\nnow support a global `--log` option, which can be passed to any `proto` command.\\n\\n```shell\\n$ proto install node --log trace\\n```\\n\\nOn top of this, we also ran an audit of all our log calls, to improve messaging, include additional\\ninformation, rework applicable levels, and more. They should be far more readable!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.11.0) for a full list\\nof changes."},{"id":"moon-v1.8","metadata":{"permalink":"/blog/moon-v1.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx","source":"@site/blog/2023-06-12_moon-v1.8.mdx","title":"moon v1.8 - Code owners and shared configuration","description":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code","date":"2023-06-12T00:00:00.000Z","formattedDate":"June 12, 2023","tags":[{"label":"source","permalink":"/blog/tags/source"},{"label":"code","permalink":"/blog/tags/code"},{"label":"owners","permalink":"/blog/tags/owners"},{"label":"ownership","permalink":"/blog/tags/ownership"}],"readingTime":3.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.8","title":"moon v1.8 - Code owners and shared configuration","authors":["milesj"],"tags":["source","code","owners","ownership"],"image":"./img/moon/v1.8.png"},"prevItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"},"nextItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"}},"content":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code\\nownership, and sharing task configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for code ownership\\n\\nAn important workflow for companies of any size is reviewing code, and ensuring the right people are\\nreviewing and approving that code. This is especially true for large companies with hundreds of\\ndevelopers, or many distinct teams working in a single codebase.\\n\\nPopular VCS providers like [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/), and\\n[Bitbucket](https://bitbucket.org/product/) provide built-in features to handle such workflows,\\naptly named code owners. They all achieve this through a similar mechanism, a single `CODEOWNERS`\\nfile that maps file system paths to owners (users, teams, groups, etc). These owners are then\\nrequired to approve a pull/merge request because it can be merged into the base branch.\\n\\n:::info\\n\\nFor more information, view our official in-depth [code owners guide](/docs/guides/codeowners)!\\n\\n:::\\n\\n### Generate a `CODEOWNERS`\\n\\nManaging the `CODEOWNERS` file manually can be a tedious task, especially when you have hundreds of\\nprojects. To help with this, moon can generate the `CODEOWNERS` file for you,\\n[based on project owners](#new-project-owners-setting), formatted to your VCS provider of choice.\\nThis helps to avoid an out-of-date ownership file!\\n\\nWe\'re introducing a few new workspace settings to handle this, the first is\\n[`codeowners`](/docs/config/workspace#codeowners), which enables and configure code ownership as a\\nwhole, and the second is [`vcs.provider`](/docs/config/workspace#provider), which determines the VCS\\nprovider to generate the file for (and unlocks future features).\\n\\n```yaml title=\\".moon/workspace.yml\\"\\ncodeowners:\\n syncOnRun: true\\n globalPaths:\\n \'*\': [\'@admins\']\\n\\nvcs:\\n manager: \'git\'\\n provider: \'github\'\\n```\\n\\nThe settings above will generate the following file:\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# (workspace)\\n* @admins\\n```\\n\\nWhile this looks very simple, it really shines once projects start adding their own granular code\\nownership. Continue reading for more information!\\n\\n### New project `owners` setting\\n\\nTo make use of code owners, you\'ll need to define an [`owners`](/docs/config/project#owners) setting\\nin a project\'s [`moon.yml`](/docs/config/project) file. This setting requires a list/map of owners\\n(contributors required to review) associated to file paths/patterns, relative from the current\\nproject\'s root.\\n\\n```yaml title=\\"packages/components/moon.yml\\"\\nowners:\\n paths:\\n \'src/\': [\'@frontend\', \'@design-system\']\\n \'*.config.js\': [\'@frontend-infra\']\\n \'*.json\': [\'@frontend-infra\']\\n```\\n\\nThese paths will then be prefixed with the project source when\\n[generating the `CODEOWNERS`](#generate-a-codeowners) file.\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# components\\n/packages/components/src/ @frontend @design-system\\n/packages/components/*.config.js @frontend-infra\\n/packages/components/*.json @frontend-infra\\n```\\n\\n### New `moon sync codeowners` command\\n\\nAlthough moon can [automatically generate](/docs/config/workspace#synconrun) the `CODEOWNERS` file\\nwhen running a target, there may be situations where this is disabled, or teams/developers would\\nlike to generate the file manually. To handle this, we\'re providing the\\n[`moon sync codeowners`](/docs/commands/sync/codeowners) command, which will trigger the generation\\nprocess.\\n\\n```shell\\n$ moon sync codeowners\\n```\\n\\n## Community-driven task configuration\\n\\nA powerful but often overlooked feature of moon is the ability to\\n[share and extend task configuration](/docs/guides/sharing-config) from remote sources. This is\\nextremely useful in...\\n\\n- Providing a single source of truth for configuration.\\n- Reducing task duplication across projects.\\n- Ensuring tasks are battle-tested and ready for use.\\n\\nThe other upside of this approach is that configuration can be _community-driven_! To support this\\nas a first-class feature, we\'re launching the\\n[`moon-configs` repository](https://github.com/moonrepo/moon-configs), a collection of task\\nconfigurations for popular programming languages, frameworks, libraries, and more! As of now, the\\nrepository is kind of empty, but we\'re hoping to grow it over time, so feel free to contribute!\\n\\nIf you\'re curious how this works in practice, we\'ll use our Rust configuration as an example. The\\nentire system is based around [tag inheritance](/docs/concepts/task-inheritance), where a project\\ncan inherit tasks from a remote source, and then extend or override them as needed. For example,\\ncreate the tag-based config:\\n\\n```yaml title=\\".moon/tasks/tag-rust.yml\\"\\nextends: \'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml\'\\n```\\n\\nAnd then in Rust projects that you\'d like to inherit these tasks, add the following tags:\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntags: [\'rust\']\\n```\\n\\nIt\'s as simple as that!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.8.0) for a full list of\\nchanges.\\n\\n- Added a new action to the graph, `SyncWorkspace`, that\'ll be used for workspace-level checks.\\n- Added `MOON_OUTPUT_STYLE` and `MOON_RETRY_COUNT` environment variables."},{"id":"moon-v1.7","metadata":{"permalink":"/blog/moon-v1.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx","source":"@site/blog/2023-05-30_moon-v1.7.mdx","title":"moon v1.7 - Next-generation configuration and errors","description":"With this release, we\'ve rewritten configuration from the ground up, improved error messages, and","date":"2023-05-30T00:00:00.000Z","formattedDate":"May 30, 2023","tags":[{"label":"config","permalink":"/blog/tags/config"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.7","title":"moon v1.7 - Next-generation configuration and errors","authors":["milesj"],"tags":["config","errors"],"image":"./img/moon/v1.7.png"},"prevItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"},"nextItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve rewritten configuration from the ground up, improved error messages, and\\nstarted work on diagnostics!\\n\\n\x3c!--truncate--\x3e\\n\\n## Configuration rewrite\\n\\nIf you\'ve ever written Rust before, you may be familiar with the state of configuration crates in\\nthe ecosystem. There\'s only 2 viable choices to choose from, and we\'ve been using 1 of them.\\nHowever, it\'s been a constant source of friction for our use cases, and didn\'t support features that\\nwe\'ve needed (built-in validation, file extending, and more).\\n\\nAfter researching our options, and attempting to contribute upstream, we decided to build our own\\nconfiguration solution, unique to moonrepo\'s projects. As such, we\'re excited to announce\\n[schematic](https://github.com/moonrepo/schematic), the most powerful configuration crate in the\\nRust ecosystem, with built-in features like:\\n\\n- Strict parsing with serde (serilization, deserialization).\\n- Code frames in errors (when applicable).\\n- Source file/URL extending.\\n- Partial file parsing and merging.\\n- Field-level merge strategies.\\n- Recursive validation.\\n- Dynamic default and env var values.\\n- And much more!\\n\\nWe\'ve spent the last few weeks building this crate from the ground up, and migrating the moon\\ncodebase to it. It\'s been quite a feat, but we\'re very excited for what it has to offer already, and\\nwhat\'s to come!\\n\\n### Strict parsing\\n\\nWhen we fail to parse a configuration file, we now include a descriptive message of the failure, and\\nthe file that failed to parse. Typically this will be for unknown fields and invalid value types.\\n\\n<Image src={require(\'./img/moon/v1.7/parse-unknown.png\')} width=\\"90%\\" />\\n<Image src={require(\'./img/moon/v1.7/parse-type.png\')} width=\\"90%\\" />\\n\\n> We hope this bubbles up typos and incorrectly nested settings!\\n\\n### Recursive validation\\n\\nPreviously when validation would fail, we\'d return on the first error and ignore subsequent errors.\\nThis is a non-ideal experience as you\'d have to constantly run `moon` commands until all validation\\nissues have been resolved.\\n\\nNow we aggregate all validation errors, even from deeply nested fields, and present them together.\\n\\n<Image src={require(\'./img/moon/v1.7/validate.png\')} width=\\"90%\\" />\\n\\n### What\'s next?\\n\\nSince [schematic](https://github.com/moonrepo/schematic) is very young, and it hasn\'t been tested\\nheavily in the ecosystem, we expect bugs and weird edge cases to popup. If you encounter any issues,\\nplease report them immediately so that we can fix them as soon as possible!\\n\\nWith that being said, we\'ll continue to improve parsing, error messages, and unique functionality,\\nlike code frames within errors. Here\'s an example for a basic JSON file.\\n\\n<Image src={require(\'./img/moon/v1.7/code-frame.png\')} width=\\"90%\\" />\\n\\n## Better errors\\n\\nYou may have noticed the errors in the screenshots above look quite different than what we\'ve\\nrendered until now, and you are correct. Going forward, all errors will be rendered by the wonderful\\nRust crate, [miette](https://crates.io/crates/miette).\\n\\nWe\'ve introduced this crate to handle _all_ errors and diagnostics within moon, not just\\nconfiguration. So expect a much better developer experience moving forward!\\n\\n<Image src={require(\'./img/moon/v1.7/errors.png\')} width=\\"90%\\" />\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.7.0) for a full list of\\nchanges.\\n\\n- Added support for npm lockfile v3 format."},{"id":"proto-v0.9","metadata":{"permalink":"/blog/proto-v0.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx","source":"@site/blog/2023-05-23_proto-v0.9.mdx","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","description":"This is a small release that provides many internal improvements.","date":"2023-05-23T00:00:00.000Z","formattedDate":"May 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"action","permalink":"/blog/tags/action"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":1.68,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.9","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","authors":["milesj"],"tags":["proto","action","github"],"image":"./img/proto/v0.9.png"},"prevItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"},"nextItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"}},"content":"This is a small release that provides many internal improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `moonrepo/setup-proto` GitHub action\\n\\nIf you\'re using proto in GitHub Actions and would love to automate the workflow as much as possible,\\nwell look no further, as we\'re introducing the\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) action. Thanks to\\n[Tom Davidson](https://github.com/tomdavidson) for the initial spike of work!\\n\\nThis action will automatically install the `proto` binary globally, and cache the toolchain at\\n`~/.proto` (be sure to run `proto use` to download and install tools).\\n\\n```yaml\\n# ...\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n - uses: \'moonrepo/setup-proto@v0\'\\n - run: \'proto use\'\\n```\\n\\n> If you\'re using moon, be sure to use\\n> [moonrepo/setup-moon](https://github.com/moonrepo/setup-moon-action) instead.\\n\\n## Added `install.unpack` to TOML plugin\\n\\nOur [TOML plugins](./proto-v0.7#toml-plugins) have been quite popular, and the community has been\\nusing them to much success. However, the plugin assumed that all downloaded files are archives (tar,\\nzip) and will attempt to unpack them based on file extension. This is not always the case, as some\\ndownloads are just raw executables.\\n\\nBecause of this, unpacking would sometimes fail, or we\'d be unable to extract the correct file\\nextension. To work around this limitation, we\'re introducing a new setting, `install.unpack`, that\\ncontrols whether the downloaded file should be unpacked or not. By default this setting is `true`.\\n\\nHere\'s an example using [moon](/moon).\\n\\n```toml\\n# ...\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\nunpack = false\\n```\\n\\n## Initial support for `node-gyp`\\n\\nThe [`node-gyp` binary](https://github.com/nodejs/node-gyp) is required for building Node.js native\\naddons, and was previously not supported in proto. We will now create a `node-gyp` binary in\\n`~/.proto/bin` when the `npm` tool is installed. Why npm? Because `node-gyp` comes packaged with npm\\ninstead of Node.js... for some reason.\\n\\nWith that being said, this is currently experimental, as we haven\'t tested it thoroughly, and are\\nunaware of all the possible edge cases. So keep that in mind!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.9.0) for a full list\\nof changes."},{"id":"moon-v1.6","metadata":{"permalink":"/blog/moon-v1.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx","source":"@site/blog/2023-05-15_moon-v1.6.mdx","title":"moon v1.6 - Persistent tasks and task extending RFC","description":"In this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending","date":"2023-05-15T00:00:00.000Z","formattedDate":"May 15, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"rfc","permalink":"/blog/tags/rfc"},{"label":"log","permalink":"/blog/tags/log"}],"readingTime":3.155,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.6","title":"moon v1.6 - Persistent tasks and task extending RFC","authors":["milesj"],"tags":["tasks","rfc","log"],"image":"./img/moon/v1.6.png"},"prevItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"},"nextItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nIn this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending\\ntasks.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Task extending/variants\\n\\nBefore we dive into this release, we want to briefly talk about a new RFC that we\'re looking for\\nfeedback on, [task extending/variants](https://github.com/moonrepo/moon/issues/849). This is a\\nfeature that has been top-of-mind since moon\'s inception, but we haven\'t had the foundation in place\\nto support it, nor what the API should look like.\\n\\nThe gist of the RFC is that we want to support tasks that extend other tasks with additional\\narguments. This is a common workflow with npm scripts:\\n\\n```json\\n{\\n \\"scripts\\": {\\n \\"lint\\": \\"eslint .\\",\\n \\"lint:fix\\": \\"npm run lint --fix\\"\\n }\\n}\\n```\\n\\nAs consumers of moon, we\'d appreciate any feedback on the RFC before we move forward!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View RFC\\" href=\\"https://github.com/moonrepo/moon/issues/849\\" size=\\"lg\\" />\\n</div>\\n\\n## Persistent tasks\\n\\nTasks that never complete, like servers and watchers, are known as persistent tasks. Historically we\\nhad support for these kinds of tasks through the [`local`](/docs/config/project#local) setting in\\n[`moon.yml`](/docs/config/project). This setting would modify the task for continuous execution by\\ndisabling caching, streaming output, and not running in CI.\\n\\nWhile this worked for the most part, there was one scenario that was still problematic, and that was\\nrunning multiple persistent tasks in parallel. Depending on the task dependency chain, sometimes\\nthese tasks would _not_ run in parallel, some may never start (blocked on another tasks), or the\\norder of nodes in the graph is non-ideal. A great example of this can be found in this\\n[discussion thread](https://github.com/moonrepo/moon/discussions/830).\\n\\nTo mitigate this problem, we\'re introducing a new task option,\\n[`persistent`](/docs/config/project#persistent) (which is also enabled by the `local` setting). When\\na task is marked as persistent, it will always _run last and in parallel_ within the dependency\\ngraph, after all dependencies (from all other persistent tasks) have completed.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n local: true\\n # OR\\n options:\\n persistent: true\\n```\\n\\nThis is a perfect solution to running multiple development servers and tools in watch mode:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'noop\'\\n deps:\\n - \'frontend:dev\'\\n - \'backend:dev\'\\n - \'database:start\'\\n - \'tailwind:watch\'\\n```\\n\\n## Logging migration\\n\\nThis is more of a heads up than anything, but we\'ve started an internal Rust migration from the old\\n[log](https://crates.io/crates/log) crate to the new [tracing](https://crates.io/crates/tracing)\\ncrate. Tracing provides is with far more information, metrics, and instrumentation, which we hope to\\ntake advantage of in the future.\\n\\nThis will be an ongoing migration that will last for many releases, and during this time while we\\nsupport both `log` and `tracing` in unison, the logs will be a bit noisy. We\'ll be working to clean\\nup the logs as we gradually convert the codebase.\\n\\nAnd lastly, the move to `tracing` has also caused the log output to change. For example, in the log\\nexcerpt below, all messages with \\"log\\" after the date are the old `log` crate, while the others with\\ndistinct module names are the new `tracing` crate.\\n\\n```log\\n[DEBUG 14:44:19] moon_process::command_inspector Running command git status --porcelain --untracked-files -z env_vars={} working_dir=\\"~/Projects/moon\\"\\n[DEBUG 14:44:19] log Filtering based on touched status \\"all\\" log.target=\\"moon:query:touched-files\\" log.module_path=\\"moon_cli::queries::touched_files\\" log.file=\\"crates/cli/src/queries/touched_files.rs\\" log.line=85\\n[DEBUG 14:44:19] log Creating dependency graph log.target=\\"moon:dep-graph\\" log.module_path=\\"moon_dep_graph::dep_builder\\" log.file=\\"crates/core/dep-graph/src/dep_builder.rs\\" log.line=35\\n[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target=\\"moon:action-pipeline\\" log.module_path=\\"moon_action_pipeline::pipeline\\" log.file=\\"crates/core/action-pipeline/src/pipeline.rs\\" log.line=93\\n[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target=\\"moon:action:setup-tool\\" log.module_path=\\"moon_action_pipeline::actions::setup_tool\\" log.file=\\"crates/core/action-pipeline/src/actions/setup_tool.rs\\" log.line=26\\n[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for \\"20.0.0\\"\\n[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.6.0) for a full list of\\nchanges.\\n\\n- Updated long running processes to log a checkpoint indicating it\'s still running.\\n- Reworked file groups to use workspace relative paths, instead of project relative.\\n- Reworked processes to better handle command line arguments, shells, and piped stdin input."},{"id":"moon-v1.5","metadata":{"permalink":"/blog/moon-v1.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx","source":"@site/blog/2023-05-08_moon-v1.5.mdx","title":"moon v1.5 - Rust tier 2 and 3 support","description":"With this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.","date":"2023-05-08T00:00:00.000Z","formattedDate":"May 8, 2023","tags":[{"label":"rust","permalink":"/blog/tags/rust"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tier","permalink":"/blog/tags/tier"}],"readingTime":2.765,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.5","title":"moon v1.5 - Rust tier 2 and 3 support","authors":["milesj"],"tags":["rust","lang","tier"],"image":"./img/moon/v1.5.png"},"prevItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"},"nextItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.\\n\\n\x3c!--truncate--\x3e\\n\\nAs big fans of Rust (moon is written in it), we\'re stoked to finally add full language support, and\\nto integrate our first non-JavaScript language! This release is rather massive, and required a ton\\nof internal work, most of which we\'ll skip over.\\n\\nInstead we\'ll only talk about the key features that you, the consumers, will actually care about. To\\nstart, we\'ve started working on a Rust handbook, that outlines how to enable Rust, what kind of\\nintegrations we support, and a handful of common questions.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View Rust handbook\\" href=\\"/docs/guides/rust/handbook\\" size=\\"lg\\" />\\n</div>\\n\\n## New `rust` configurations\\n\\nLanguages in\\n[moon are enabled through configuration](/docs/how-it-works/languages#enabling-a-language) blocks in\\n[`.moon/toolchain.yml`](/docs/config/toolchain), and Rust is no different. We now support a\\n[`rust`](/docs/config/toolchain#rust) toolchain setting\\n([view all available settings](/docs/config/toolchain#rust)).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nrust:\\n\\tversion: \'1.69.0\'\\n```\\n\\nWhen the `rust` setting is defined, it will enable the language and\\n[deep platform integration](/docs/how-it-works/languages#tier-2--platform), and when the `version`\\nfield is defined, it will further enable\\n[toolchain support](/docs/how-it-works/languages#tier-3--toolchain). Both of these features provide\\nheavy automation, improving the overall developer experience.\\n\\nThis is fantastic, but what if another Rust project in the monorepo requires a different toolchain\\nchannel/version? If so, they can use the new [`toolchain.rust`](/docs/config/project#rust) setting\\nin [`moon.yml`](/docs/config/project) to define project-level overrides.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntoolchain:\\n\\trust:\\n\\t\\tversion: \'1.58.0\'\\n```\\n\\n## New `rust` task platform\\n\\nThe main benefit of Rust language support is that tasks can be ran within the context of our\\n[Rust platform integration](/docs/how-it-works/languages#tier-2--platform). This can easily be done\\nby setting the project\'s [`language`](/docs/config/project#language) to \\"rust\\" in\\n[`moon.yml`](/docs/config/project).\\n\\nThis will set the [`platform`](/docs/config/project#platform-1) of all tasks within the project to\\n\\"rust\\", unless they have been explicitly configured to something else.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nlanguage: \'rust\'\\ntype: \'application\'\\n```\\n\\nIf you\'re mixing languages within a single project, and can\'t use the `language` setting above, you\\ncan define `platform` on the task directly.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntasks:\\n\\tbuild:\\n\\t\\tcommand: \'cargo build\'\\n\\t\\tplatform: \'rust\'\\n```\\n\\n> We also attempt to detect this automatially by comparing command names and checking for the\\n> existence of files like `Cargo.toml`.\\n\\n## Updated `moon init` command\\n\\nAs part of this release, we\'ve also updated the [`moon init`](/docs/commands/init) command to\\nsupport initializing Rust. By default, the command will prompt you on whether to install Rust or\\nnot, otherwise, when `--yes` is passed, the language will be installed if a `Cargo.toml` file is\\ndetected in the destination directory.\\n\\nIf you already have a moon workspace, you can pass `--tool rust` to install Rust into the workspace.\\n\\n```shell\\n$ moon init --tool rust\\n```\\n\\n## Updated `moon docker` commands\\n\\nAnd lastly, we also want to provide a great [`Dockerfile` experience](/docs/guides/docker) when\\nusing Rust. The [`moon docker scaffold`](/docs/commands/docker/scaffold) command has been updated to\\ncopy `Cargo.toml`, `Cargo.lock`, `rust-toolchain.toml`, and other Rust/Cargo related files. When\\nusing Cargo workspaces, nested `Cargo.toml` files are also scaffolded.\\n\\n```docker\\nRUN moon docker scaffold rust-app\\n```\\n\\nFurthermore, we\'ve also updated the [`moon docker prune`](/docs/commands/docker/scaffold) command to\\nremove the entire `target` directory, greatly reducing the size of the image. Pruning makes the\\nassumption that it\'s being ran _after_ a release profile has been built.\\n\\n```docker\\nRUN moon run rust-app:build-release\\nRUN moon docker prune\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.5.0) for a full list of\\nchanges."},{"id":"moon-v1.4","metadata":{"permalink":"/blog/moon-v1.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx","source":"@site/blog/2023-05-01_moon-v1.4.mdx","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","description":"With this release, we\'re bringing further improvements to tags and MQL.","date":"2023-05-01T00:00:00.000Z","formattedDate":"May 1, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tag","permalink":"/blog/tags/tag"},{"label":"alias","permalink":"/blog/tags/alias"}],"readingTime":1.73,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.4","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","authors":["milesj"],"tags":["query","lang","tag","alias"],"image":"./img/moon/v1.4.png"},"prevItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"},"nextItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"}},"content":"With this release, we\'re bringing further improvements to tags and MQL.\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets by tag with `#tag:task`\\n\\nWe love our community, as you all continuously suggest new and awesome features that haven\'t crossed\\nour minds. One such feature was the ability to run tasks for all projects with a tag,\\n[suggested by @theoephraim](https://github.com/moonrepo/moon/issues/803), which is now possible with\\nthe new [tag scope](/docs/concepts/target#by-tag), `#tag:task`.\\n\\nAs an example, we can easily lint all projects that have the `frontend` tag.\\n\\n```shell\\n$ moon run \'#frontend:lint\'\\n```\\n\\n> Because `#` is special syntax and denotes a comment, the target will need to be quoted to work\\n> correctly!\\n\\n## Updated `moon query` commands to support MQL\\n\\nLast week we announced [MQL](./moon-v1.3#run-targets-based-on-a-query), a custom query language for\\napplying filters to moon\'s project graph, primarily through the [`moon run`](/docs/commands/run)\\ncommand. We plan to slowly integrate MQL throughout moon as it provides an easy to use API, and an\\noverall better developer experience.\\n\\nAs such, we\'ve updated both [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query tasks`](/docs/commands/query/tasks) to support MQL statements as an optional first\\nargument. Totally makes sense that query commands would support MQL!\\n\\n```shell\\n# Find all projects with a `lint` or `build` task\\n$ moon query projects \\"task=[lint,build]\\"\\n\\n# Find all tasks with an id that starts with \\"dev\\"\\n$ moon query tasks \\"task~dev-*\\"\\n```\\n\\n## Deprecated `node.aliasPackageNames` setting\\n\\nmoon project\'s support the [concept of aliasing](/docs/concepts/project#aliases), where\\nlanguage/ecosystem specific names are used alongside moon\'s. For example, the `name` field from\\n`package.json`. However, aliasing was off by default for Node.js projects and had to be explicitly\\nenabled with the `node.aliasPackageNames` setting.\\n\\nIn an effort to streamline moon adoption for Node.js codebases, we\'re deprecating that setting, and\\ninstead will now always inherit the `package.json` name as an alias. For example, if you\'re package\\nname was `@company/utils`, you can now run a target like so:\\n\\n```shell\\n$ moon run @company/utils:build\\n```\\n\\n> This setting is now a no-op and can be removed from your configuration.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.4.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.8."},{"id":"proto-v0.8","metadata":{"permalink":"/blog/proto-v0.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx","source":"@site/blog/2023-04-28_proto-v0.8.mdx","title":"proto v0.8 - Version detection and installation improvements","description":"In this release, we\'re dropping some quality of life workflow improvements.","date":"2023-04-28T00:00:00.000Z","formattedDate":"April 28, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"detect","permalink":"/blog/tags/detect"}],"readingTime":1.295,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.8","title":"proto v0.8 - Version detection and installation improvements","authors":["milesj"],"tags":["proto","detect"],"image":"./img/proto/v0.8.png"},"prevItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"},"nextItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"}},"content":"In this release, we\'re dropping some quality of life workflow improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Built-in detection for `proto use`\\n\\nThe [`proto use`](/docs/proto/commands/use) command is extremely useful for bootstrapping your\\ndevelopment environment with all necessary tooling, but it had a hard requirement on the\\n[`.prototools`](/docs/proto/config) configuration file. But what if you\'re already using non-proto\\nversion files, like `.nvmrc` or `.dvmrc`? Or maybe manifest settings, like `packageManager` or\\n`engines` in `package.json`?\\n\\nGreat questions, and we agree! As such, we\'ve updated `proto use` to _also_ detect a version from\\nthe environment for the current working directory. We suggest using `.prototools`, but feel free to\\nconfigure your environments as you so choose!\\n\\n```shell\\n# Install all the things!\\n$ proto use\\n```\\n\\n## Smarter version detection\\n\\nOne of proto\'s best features is its [contextual version detection](/docs/proto/detection), but it\\ndid have 1 shortcoming. When we detected a partial version, like `1.2`, we\'d resolve to a fully\\nqualified version with the latest patch version (e.g. `1.2.3`). While this worked in most cases,\\neverytime a new patch was released upstream (e.g. `1.2.4`), proto would error and require a manual\\ninstall of this new version. This was pretty annoying as `1.2.3` and `1.2.4` are likely to be\\ncompatible, and both satisfy the `1.2` version constraint.\\n\\nTo mitigate this scenario, we\'ve updated the version detection to scan the locally installed\\nversions _first_ when encountering a partial version. This solves the problem above by allowing\\n`1.2.3` to satisfy the requirement, instead of forcing an install of `1.2.4`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.8.0) for a full list\\nof changes."},{"id":"moon-v1.3","metadata":{"permalink":"/blog/moon-v1.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx","source":"@site/blog/2023-04-24_moon-v1.3.mdx","title":"moon v1.3 - Advanced run targeting and an official proto plugin","description":"After many months of design and development, we\'re finally introducing MQL, our own unique query","date":"2023-04-24T00:00:00.000Z","formattedDate":"April 24, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"schema","permalink":"/blog/tags/schema"},{"label":"toml","permalink":"/blog/tags/toml"},{"label":"target","permalink":"/blog/tags/target"}],"readingTime":2.35,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.3","title":"moon v1.3 - Advanced run targeting and an official proto plugin","authors":["milesj"],"tags":["query","lang","proto","schema","toml","target"],"image":"./img/moon/v1.3.png"},"prevItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"},"nextItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"}},"content":"After many months of design and development, we\'re finally introducing MQL, our own unique query\\nlanguage!\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets based on a query\\n\\nOur [`moon run`](/docs/commands/run) command is pretty powerful. It allows you to run targets in\\none, many, or all projects. It also supports running multiple targets in parallel. However, it\\nwasn\'t powerful enough, as it couldn\'t run the following types of scenarios:\\n\\n- Run a target in projects of a specific language.\\n- Run a target in libraries or applications.\\n- Run a target based on project file system path.\\n- Run a target in projects with a matching tag.\\n- Run a target in projects that match a keyword.\\n- Run a target in projects based on AND or OR conditions.\\n- Or a combination of these.\\n- And many more!\\n\\nSupporting all of these scenarios through CLI arguments just feels like bad design, and would result\\nin a poor developer experience. There had to be a better way to support this! So we set out to solve\\nthis problem, and after much thought, we\'re stoked to introduce\\n[MQL, a query language unique to moon](/docs/concepts/query-lang).\\n\\nWith MQL, you can now run scenarios like \\"I want to build all Node.js libraries\\", or \\"I want to lint\\nand test all Rust projects\\". Simply pass an unscoped target and a query to the `run` command:\\n\\n```shell\\n$ moon run :build --query \\"taskPlatform=node && projectType=library\\"\\n\\n$ moon run :lint :test --query \\"language=rust\\"\\n```\\n\\nThis is only the first iteration of MQL and it\'s already quite powerful. Expect additional fields,\\nfeatures, and functionality in the future!\\n\\n## Plugin support for proto\\n\\nEarlier this week we announced [plugin support for proto](./proto-v0.7), starting with a TOML based\\nplugin. This is great as it allows _any_ kind of versioned tool to be managed in proto\'s toolchain,\\nso why not moon? Starting with this release, you can now install and manage moon _from_ proto, using\\nour officially maintained TOML plugin.\\n\\nIn your `.prototools` or `~/.proto/config.toml` file, add the following snippet:\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nmoon = \\"source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml\\"\\n```\\n\\nAnd as easy as that, you can now use `moon` as a tool within any `proto` command. For example:\\n\\n```shell\\n$ proto install moon 1.3.0\\n$ proto list-remote moon\\n$ proto bin moon\\n```\\n\\nFurthermore, with proto, we can now pin the version of moon on a per-project basis. Perfect for\\nenforcing the same version for all developers on your team!\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.3.0\\"\\n```\\n\\n> When using this approach, be sure `~/proto/.bin` is in your `PATH`, and takes precedence over\\n> `~/.moon/bin`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.3.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.7.\\n- Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders.\\n- Updated config loading to be strict and error on unknown fields for non-root fields."},{"id":"proto-v0.7","metadata":{"permalink":"/blog/proto-v0.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx","source":"@site/blog/2023-04-21_proto-v0.7.mdx","title":"proto v0.7 - First step towards plugins","description":"With this release, we\'re very excited to announce our initial support for plugins in proto!","date":"2023-04-21T00:00:00.000Z","formattedDate":"April 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugins","permalink":"/blog/tags/plugins"}],"readingTime":2.36,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.7","title":"proto v0.7 - First step towards plugins","authors":["milesj"],"tags":["proto","plugins"],"image":"./img/proto/v0.7.png"},"prevItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"},"nextItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"}},"content":"With this release, we\'re very excited to announce our initial support for plugins in proto!\\n\\n\x3c!--truncate--\x3e\\n\\n## Initial plugins architecture\\n\\nLast week we posted an [RFC for a new plugins architecture](./proto-v0.6#rfc-plugins-system) for\\nproto. We believe plugins will unlock an array of capabilities for proto, will enable the community\\nto add their own custom integrations, and the ability for tools to be managed within proto\'s\\ntoolchain.\\n\\nWe were very excited for this RFC, and couldn\'t wait, so we spent the last week prototyping\\nimplementations. We got the basics of downloading, installing, and enabling a plugin at _runtime_\\nworking incredibly fast. However, implementing the entire RFC in 1 release would have taken too\\nlong, and we wanted to avoid dropping such a large feature in a single release. Because of this,\\nwe\'ve only implemented [TOML plugins](/docs/proto/plugins#toml-plugin) in this release, and will\\nimplement WASM plugins in a future release.\\n\\n### TOML plugins\\n\\nYou may be asking yourself, aren\'t plugins typically code? For the most part, yes, but after\\nbuilding a \\"version manager\\" for multiple languages, we\'ve come to the realization that many tools\\ncan simply be supported through a basic configuration file.\\n\\nAt minimum, tools require the following pieces to be managed:\\n\\n- Where and how to download the tool\\n- How to install/unpack the tool\\n- How to resolve available versions to install\\n- How to execute the tool\'s binary\\n\\nAll 4 of these pieces can be solved with a configuration file, and as such, we opted to support a\\n[TOML schema based plugin](/docs/proto/plugins#toml-plugin) as an alternative to a code based\\nplugin. The other benefits of a schema is that it\'s _easy to write, read, and maintain_, doesn\'t\\nrequire any code, and doesn\'t force you into a specific programming language.\\n\\nTo demonstate how this plugin works, here\'s an example of a [moon](/moon) TOML schema.\\n\\n```toml title=\\"moon-schema.toml\\"\\nname = \\"moon\\"\\ntype = \\"cli\\"\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\n\\n[resolve]\\ngit-url = \\"https://github.com/moonrepo/moon\\"\\n```\\n\\nVery simple right? With this, you can now configure moon as a plugin within proto.\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.2.0\\"\\n\\n[plugins]\\nmoon = \\"source:./path/to/moon-schema.toml\\"\\n```\\n\\nAnd ultimately manage every version of moon through proto! Because moon is now a plugin, every\\ncommand in proto that accepts a `<tool>` argument, will now accept `moon` as a valid tool.\\n\\n```shell\\n$ proto install moon 1.2.0\\n$ proto list-remote moon\\n$ proto use\\n```\\n\\nLearn more about [TOML plugins in the official docs](/docs/proto/plugins#toml-plugin)!\\n\\n## Cleaning improvements\\n\\nLast week we introduced the [`proto clean`](/docs/proto/commands/clean) command that will\\nautomatically delete stale and unused tools from the toolchain. This week we\'ve implemented a few\\nimprovements to the cleaning process:\\n\\n- Added a `--yes` option to [`proto clean`](/docs/proto/commands/clean), allowing prompts to be\\n bypassed.\\n- Added a `auto-clean` setting to `~/.proto/config.toml`, enabling automatic cleaning when\\n [`proto use`](/docs/proto/commands/use) is ran."},{"id":"moon-v1.2","metadata":{"permalink":"/blog/moon-v1.2","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx","source":"@site/blog/2023-04-17_moon-v1.2.mdx","title":"moon v1.2 - Tag based task inheritance","description":"In this small release, we\'re improving our task inheritance and performance.","date":"2023-04-17T00:00:00.000Z","formattedDate":"April 17, 2023","tags":[{"label":"tags","permalink":"/blog/tags/tags"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.2","title":"moon v1.2 - Tag based task inheritance","authors":["milesj"],"tags":["tags","tasks"],"image":"./img/moon/v1.2.png"},"prevItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"},"nextItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"}},"content":"In this small release, we\'re improving our task inheritance and performance.\\n\\n\x3c!--truncate--\x3e\\n\\n## Task inheritance based on project tags\\n\\nIn v0.23 we introduced [scoped task inheritance](/blog/v0.23#improved-task-inheritance-model) by\\nproject type/language, and in v1.0 we introduced [project tagging](/blog/moon-v1.0#project-tagging),\\nbut what if we combined both of these features? In this release, you can now define workspace-level\\ntasks _by tag_ that\'ll be inherited by all projects with that tag.\\n\\nTo demonstrate this, say you have a monorepo composed of multiple [Astro](https://astro.build)\\napplications, each duplicating the same Astro tasks. Instead of duplicating, define an `astro` tag\\nin each project\'s [`moon.yml`](/docs/config/project#tags).\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nlanguage: \'typescript\'\\ntype: \'application\'\\ntags: [\'astro\']\\n```\\n\\nAnd then create a new tasks configuration at `.moon/tasks/tag-astro.yml` with the following\\ncontents:\\n\\n```yaml title=\\".moon/tasks/tag-astro.yml\\"\\nfileGroups:\\n\\tastro:\\n\\t\\t- \'public/**/*\'\\n\\t\\t- \'src/**/*\'\\n\\t\\t- \'astro.config.*\'\\n\\t\\t- \'tsconfig.json\'\\n\\ntasks:\\n\\tastro:\\n\\t\\tcommand: \'astro\'\\n\\t\\tlocal: true\\n\\n\\t# Development server\\n\\tdev:\\n\\t\\tcommand: \'astro dev\'\\n\\t\\tlocal: true\\n\\n\\t# Production build\\n\\tbuild:\\n\\t\\tcommand: \'astro build\'\\n\\t\\tinputs: [\'@group(astro)\']\\n\\t\\toutputs: [\'dist\']\\n\\n\\t# Check .astro files\\n\\tcheck:\\n\\t\\tcommand: \'astro check\'\\n\\t\\tinputs: [\'@group(astro)\']\\n\\t\\tdeps: [\'typecheck\']\\n\\n\\t# Preview production build locally\\n\\tpreview:\\n\\t\\tcommand: \'astro preview\'\\n\\t\\tdeps: [\'build\']\\n\\t\\tlocal: true\\n```\\n\\nEach of these Astro applications will now inherit all 5 tasks and the file group automatically! This\\nhelps to greatly reduce maintenance overhead and help enforce consistency across projects. Jump to\\nthe official [task inheritance docs](/docs/concepts/task-inheritance) for more information on tag\\nbased inheritance.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.2.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.6.\\n- Improvements to file system operations.\\n- Minor improvements to performance."},{"id":"proto-v0.6","metadata":{"permalink":"/blog/proto-v0.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx","source":"@site/blog/2023-04-13_proto-v0.6.mdx","title":"proto v0.6 - Unused cleaning and improved global binaries","description":"With this release, we\'re expanding on our global binary support and providing quality of life","date":"2023-04-13T00:00:00.000Z","formattedDate":"April 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"globals","permalink":"/blog/tags/globals"},{"label":"clean","permalink":"/blog/tags/clean"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.6","title":"proto v0.6 - Unused cleaning and improved global binaries","authors":["milesj"],"tags":["proto","globals","clean","errors"],"image":"./img/proto/v0.6.png"},"prevItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"},"nextItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re expanding on our global binary support and providing quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Plugins system\\n\\nSince proto\'s inception, plugins have been top of mind, but runtime based plugins in Rust are\\n_difficult_. The only viable solution to this problem is WASM, but most developers have never used\\nWASM before, nor are they familiar with WASM tooling (myself included).\\n\\nHowever, we\'re at a point in proto\'s life-cycle where the core is rather stable, and it\'s time to\\nstart investigating plugin support. To this end, we\'ve introduced a small RFC outlining how plugins\\nwill be used, enabled, and implemented. It\'s not very in-depth as we want to avoid implementation\\ndetails, but from a consumers perspective, we want to ensure that it makes sense.\\n\\nWe\'d very much appreciate it if you could take a look at the RFC and provide feedback. If you have\\nany experience in Rust runtime plugins, we\'d love to hear your thoughts as well.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View RFC\\" href=\\"https://github.com/moonrepo/proto/issues/73\\" size=\\"lg\\" />\\n</div>\\n\\n## Cleaning stale and unused tools\\n\\nIs your `~/.proto` installation growing out of control? Are there old versions of tools that you\\ndon\'t use anymore? Or versions you never used? Unsure if you\'re using a tool at all or still need\\nit?\\n\\nTo help avoid these questions and problems, we\'re introducing a new command that will uninstall\\nstale and unused tools, [`proto clean`](/docs/proto/commands/clean). When ran, the command will\\nlaunch an interactive session and scan the file system for old tools, prompting you to remove them.\\n\\n```shell\\n$ proto clean\\n```\\n\\nBy default the command will uninstall tools that haven\'t been used in over 30 days, but this can be\\ncustomized with the `--days` option.\\n\\n:::info\\n\\nTools installed before v0.6 will most likely be considered stale, as we weren\'t tracking install and\\nlast used timestamps. However, everything will work as intended after running a tool or simply\\nmoving forward from this point.\\n\\n:::\\n\\n## Global binary improvements\\n\\nIn our [previous release](./proto-v0.5), we announced the\\n[`proto install-global`](/docs/proto/commands/install-global) command for installing global\\ndependencies that are unique per tool. Thanks to the community, this command has been updated to\\nsupport installing multiple globals at once!\\n\\n```shell\\n$ proto install-global node typescript webpack-cli\\n```\\n\\nOn top of this, we\'re also introducing another command that was requested by the community,\\n[`proto list-global`](/docs/proto/commands/list-global), that can be used to list all currently\\ninstalled globals.\\n\\n```shell\\n$ proto list-global node\\ntsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc\\ntsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver\\n```\\n\\n## Better error messages\\n\\nWe\'ve spent most of the past week working on a new internal architecture called\\n[Starbase](https://github.com/moonrepo/starbase), which will be the new foundation for proto and\\nmoon moving forward. One of the major benefits of this new architecture is a rewritten error system\\nthat provides more context and better error messages.\\n\\nHere\'s an example of this, albeit with a contrived situation:\\n\\n<Image src={require(\'./img/proto/v0.6-errors.png\')} width=\\"90%\\" />"},{"id":"proto-v0.5","metadata":{"permalink":"/blog/proto-v0.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-06_proto-v0.5.mdx","source":"@site/blog/2023-04-06_proto-v0.5.mdx","title":"proto v0.5 - Version aliasing and global binaries","description":"With this release, we\'re providing solutions for installing globals and using aliases.","date":"2023-04-06T00:00:00.000Z","formattedDate":"April 6, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"alias","permalink":"/blog/tags/alias"},{"label":"globals","permalink":"/blog/tags/globals"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.5","title":"proto v0.5 - Version aliasing and global binaries","authors":["milesj"],"tags":["proto","alias","globals"],"image":"./img/proto/v0.5.png"},"prevItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"},"nextItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"}},"content":"With this release, we\'re providing solutions for installing globals and using aliases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Install global binaries\\n\\nInstalling global binaries (packages, modules, etc) is a common task for developers, and proto now\\nprovides a solution for this workflow with the\\n[`proto install-global`](/docs/proto/commands/install-global) command. Continue reading for more\\ninformation.\\n\\n:::info\\n\\nGlobal install directories will need to be added manually to your `PATH` from your shell.\\n\\n:::\\n\\n### Bun, Deno, Go, Rust\\n\\nAll of these languages provide a built-in solution for installing global binaries to a shared\\nlocation, regardless of the language\'s current version. Because of this, proto will simply call\\ntheir install commands under the hood.\\n\\n```shell\\n$ proto install-global rust cargo-release\\n\\n# Same as\\n$ cargo install cargo-release --force\\n```\\n\\nGlobals will be installed to the following locations:\\n\\n- **Bun**: `~/.bun/bin`\\n- **Deno**: `~/.deno/bin`\\n- **Go**: `~/go/bin`\\n- **Rust**: `~/.cargo/bin`\\n\\n### Node.js, npm, pnpm, yarn\\n\\nUnfortunately, the Node.js ecosystem is pretty fractured when it comes to installing global\\nbinaries. Each package manager provides their own solution for installing globals, and each has\\ntheir own quirks. The problem is further exacerbated by the fact that globals are tied to Node.js\\nversion, so if you switch versions, you lose all your previous globals!\\n\\nTo work around this, proto standardizes the global installation process for Node.js, but requires\\nall globals to be installed through proto. You can no longer use `npm install -g`, `pnpm add -g`, so\\non and so forth, and must use:\\n\\n```shell\\n$ proto install-global node webpack-cli\\n```\\n\\nGlobals will be installed to a shared location, `~/.proto/tools/node/globals/bin`, and will persist\\nacross versions!\\n\\n## Custom version aliases\\n\\nWe are excited to announce 2 new commands that enable you to define custom version aliases,\\n[`proto alias`](/docs/proto/commands/alias) and [`proto unalias`](/docs/proto/commands/unalias).\\nAliasing of versions is a feature that allows you to assign a custom name or label to a specific\\nversion of a tool.\\n\\nFor example, instead of using the version number, you can assign a label such as \\"work\\" or\\n\\"personal\\" to a version. This makes it easier to remember and manage different versions.\\n\\n```shell\\n$ proto alias node work 16.16\\n$ proto alias node personal 18\\n```\\n\\nAliases can be used anywhere a version is accepted, for example:\\n\\n```shell\\n$ proto bin node work\\n$ proto install node personal\\n```"},{"id":"moon-v1.1","metadata":{"permalink":"/blog/moon-v1.1","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx","source":"@site/blog/2023-04-03_moon-v1.1.mdx","title":"moon v1.1 - Task debugging and improvements","description":"With this release, we\'re introducing some quality of life task improvements.","date":"2023-04-03T00:00:00.000Z","formattedDate":"April 3, 2023","tags":[{"label":"tokens","permalink":"/blog/tags/tokens"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.775,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.1","title":"moon v1.1 - Task debugging and improvements","authors":["milesj"],"tags":["tokens","tasks"],"image":"./img/moon/v1.1.png"},"prevItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"},"nextItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"}},"content":"With this release, we\'re introducing some quality of life task improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Token variable support in task commands\\n\\nmoon supports a concept known as [tokens](/docs/concepts/token) where values are injected into tasks\\nduring project graph creation. This allows for dynamic values in your tasks, such as the current\\nproject language, or the current task name, and is crucial for task inheritance to work.\\n\\nHowever, tokens were only supported by task args, inputs, and outputs, but not commands... until\\nnow. Commands can now use token variables (but not token functions). For example, this is useful for\\nreferencing shared scripts from the workspace root.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n\\tprecheck:\\n\\t\\tcommand: \'$workspaceRoot/scripts/precheck.sh\'\\n```\\n\\n## Run targets in closest project\\n\\nThe [`moon run`](/docs/commands/run) command can run targets in an array of different formats, but\\nwas unable to run targets based on the current working directory. Well no more! You can now run\\ntasks from the closest project based on file path by omitting `:` from the target name.\\n\\n```shell\\n$ cd packages/components\\n\\n# Runs `components:build` internally\\n$ moon run build\\n```\\n\\n## View resolved task information\\n\\nDebugging task issues can be a quite a pain, as there can be many points of failure. Are inputs too\\ngreedy? Are outputs not being created? Does it exist at all? To help with this, you can now view\\ntask information by running [`moon task <target>`](/docs/commands/task).\\n\\n```shell\\n$ moon task app:build\\n```\\n\\nThis command will display _resolved_ information, including inherited settings, and path resolved\\ninputs and outputs. Here\'s an example:\\n\\n```\\nRUNTIME:BUILD\\n\\nID: build\\nProject: runtime\\nPlatform: node\\nType: build\\n\\nPROCESS\\n\\nCommand: packemon build --addFiles --addExports --declaration\\nEnvironment variables:\\n - NODE_ENV = production\\nWorking directory: /Projects/moon/packages/runtime\\nRuns dependencies: Concurrently\\nRuns in CI: Yes\\n\\nDEPENDS ON\\n\\n - types:build\\n\\nINPUTS\\n\\n - .moon/*.yml\\n - packages/runtime/src/**/*\\n - packages/runtime/tsconfig.*.json\\n - packages/runtime/types/**/*\\n - packages/runtime/package.json\\n - packages/runtime/tsconfig.json\\n - tsconfig.options.json\\n\\nOUTPUTS\\n\\n - packages/runtime/cjs\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.1.0) for a full list of\\nchanges.\\n\\n- Support pnpm v8\'s new lockfile format.\\n- Better handling for task\'s that execute the `moon` binary.\\n- Updated `noop` tasks to be cacheable, so that they can be used for cache hit early returns."},{"id":"proto-v0.4","metadata":{"permalink":"/blog/proto-v0.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-31_proto-v0.4.mdx","source":"@site/blog/2023-03-31_proto-v0.4.mdx","title":"proto v0.4 - Rust support, user configs, and more","description":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.","date":"2023-03-31T00:00:00.000Z","formattedDate":"March 31, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"rust","permalink":"/blog/tags/rust"},{"label":"config","permalink":"/blog/tags/config"}],"readingTime":1.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.4","title":"proto v0.4 - Rust support, user configs, and more","authors":["milesj"],"tags":["proto","rust","config"],"image":"./img/proto/v0.4.png"},"prevItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"},"nextItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"}},"content":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Rust language support\\n\\nWe\'re very excited to announce support for the [Rust language](https://www.rust-lang.org/) in proto.\\nThis is our first language addition since the initial release, and we\'re very happy with how it\\nturned out.\\n\\n```shell\\n$ proto install rust stable\\n```\\n\\nFor those of you unfamiliar with Rust, Rust provides its own toolchain manager through\\n[`rustup`](https://rustup.rs/) \u2014 a very powerful one at that. We don\'t want to reinvent the wheel\\nhere, so instead of downloading and installing Rust into proto\'s toolchain, we chose to call\\n`rustup` commands under the hood. Because of this, Rust support in proto requires Rust/Cargo to be\\npre-installed on your system. Jump to the [docs for more information](/docs/proto/tools#rust).\\n\\nAll in all, the cool thing about supporting Rust in proto is that you can standardize all your tools\\nin a single config for [`proto use`](/docs/proto/commands/use).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.2.0\\"\\nrust = \\"1.68.0\\"\\n```\\n\\n## New user configuration\\n\\nWe have a long list of ideas and features that would be cool to support in proto, but not as the\\ndefault functionality. Because of this, we required a way for users to opt-in to this functionality,\\nand have landed on a new user configuration located at `~/.proto/config.toml`.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\nauto-install = true\\n```\\n\\nThis new configuration only supports a single setting (for now), `auto-install`, that when enabled,\\nwill automatically install a missing tool for the detected version when running\\n[`proto run`](/docs/proto/commands/run) (or a shim).\\n\\n## New `proto upgrade` command\\n\\nWe now provide a [`proto upgrade`](/docs/proto/commands/upgrade) command for upgrading proto itself.\\nThis will download the latest version and replace the binary at `~/.proto/bin/proto`.\\n\\n```shell\\n$ proto upgrade\\n```"},{"id":"moon-v1.0","metadata":{"permalink":"/blog/moon-v1.0","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx","source":"@site/blog/2023-03-27_moon-v1.0.mdx","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","description":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve","date":"2023-03-27T00:00:00.000Z","formattedDate":"March 27, 2023","tags":[{"label":"projects","permalink":"/blog/tags/projects"},{"label":"constraints","permalink":"/blog/tags/constraints"},{"label":"tags","permalink":"/blog/tags/tags"},{"label":"env-vars","permalink":"/blog/tags/env-vars"},{"label":"tokens","permalink":"/blog/tags/tokens"}],"readingTime":4.745,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.0","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","authors":["milesj"],"tags":["projects","constraints","tags","env-vars","tokens"],"image":"./img/moon/v1.0.png"},"prevItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"},"nextItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"}},"content":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve\\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## The road to v1\\n\\nIt\'s been 10 months since moon launched publicly, and since that time we have landed 501 pull\\nrequests, fixed 100\'s of bugs, made 16 breaking changes, released 26 versions, and have been used by\\ncompanies like Ikea, SumUp, Depot, and Gallery. It\'s been a wild ride, and we\'re excited to finally\\nreach a stable v1 release.\\n\\n## Project boundaries with constraints\\n\\nOne feature that moon has not supported, but is critical for large monorepos, is project boundaries.\\nA project boundary is a concept that enforces a strict relationship between projects, and is a\\ncommon pattern in monorepos. For example, a project may only be allowed to depend on projects with a\\n[specific tag](#enforce-relationships-with-tags), or a project of a specific type.\\n\\nmoon now supports this functionality through the new\\n[`constraints`](/docs/config/workspace#constraints) setting in\\n[`.moon/workspace.yml`](/docs/config/workspace). The primary constraint we\'re introducing is\\n[`enforceProjectTypeRelationships`](/docs/config/workspace#enforceprojecttyperelationships), which\\nenforces relationships between projects based on their [`type`](/docs/config/project#type) field.\\n\\nFor example, an application can only depend on library or tool based projects, but _not_ other\\napplications (this is a code smell). This setting is enabled by default!\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nconstraints:\\n enforceProjectTypeRelationships: true\\n```\\n\\nAnd that\'s not all, continue reading for more information on tag based constraints!\\n\\n## Project tagging\\n\\nEveryone is familiar with the concept of tagging, and moon\'s implementation is no different. Tags\\nare a simple mechanism for categorizing projects, and can be defined through the\\n[`tags`](/docs/config/project#tags) setting in [`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntags:\\n - \'react\'\\n - \'prisma\'\\n```\\n\\nTags can be used to group projects together for easier querying, enforcing of project boundaries,\\napplying constraints, and more in the future. Tags will become a staple for maintaining repositories\\nat scale. Continue reading for more information!\\n\\n### Querying projects by tag\\n\\nThe first integration with tags is project querying. You can now query for projects by tag using the\\nnew `--tags` option in the [`moon query projects`](/docs/commands/query/projects) command. For\\nexample, say you want to find all projects that are tagged with `vue` or `trpc`:\\n\\n```shell\\n$ moon query projects --tags \'vue|trpc\'\\n```\\n\\n### Enforce relationships with tags\\n\\nAnother feature of tags is enforcing relationships between projects using our new\\n[`constraints`](#project-constraints) setting. When a tagged constraint is defined, it requires all\\n[dependencies](/docs/concepts/project#dependencies) of a tagged project to require 1 of the\\nconfigured tags, otherwise an error is thrown during project graph creation.\\n\\nTo demonstrate this, take the following configuration:\\n\\n```yaml title=\\".moon/workspace.yml\\" {2,3}\\nconstraints:\\n tagRelationships:\\n next: [\'react\', \'trpc\']\\n```\\n\\nThis dictates that all dependencies of a project with the `next` tag, must declare either `react`,\\n`trpc`, or `next` in their own tags. This is great for crafting a monorepo with strict project\\nboundaries!\\n\\n## Shells for system tasks\\n\\nUp until now, all executed tasks would not be wrapped in a shell for 1 reason, to ensure tasks are\\ndeterministic. A major goal for moon is that tasks are deterministic and easily reproducible across\\nall machines. Shells break this guarantee, as they can introduce subtle bugs that are difficult to\\ndiagnose, and may differ wildly between developers and machines.\\n\\nHowever in practice, not supporting shells has been a major pain point for many users, and for the\\nmost part, most system tasks typically run common commands or execute pre-defined scripts. The\\nchance of a non-deterministic build is very small. As such, we\'ve decided to make a compromise, and\\nallow shells for [system tasks](/docs/config/project#platform-1), but not for language based tasks.\\n\\nFor example, the following tasks:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'echo $PWD\'\\n platform: \'system\'\\n global:\\n command: \'bin-on-path\'\\n platform: \'system\'\\n```\\n\\nWould now be executed as `/bin/sh -c \'echo $PWD\'` and `/bin/sh -c \'bin-on-path\'` on Unix platforms\\nrespectively. On Windows, we execute tasks with `pwsh.exe -c` and pass arguments via stdin.\\n\\nWe\'re also taking this a step further, by introducing a new task option called\\n[`shell`](/docs/config/project#shell), that can be used to toggle the shell wrapping on or off. When\\nturned off, this allows you to customize and execute the shell as you please.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'bash -c \\"echo $PWD\\"\'\\n platform: \'system\'\\n options:\\n shell: false\\n```\\n\\n## Environment variable substitution\\n\\nmoon supports granular environment variables through the project-level\\n[`env`](/docs/config/project#env) setting, task-level [`env`](/docs/config/project#env-1) setting,\\nand the task [`envFile`](/docs/config/project#envfile) option. We\'re expanding their functionality\\nwith variable substitution, allowing the value of another environment variable to be interpolated\\nusing the syntax `${VAR_NAME}`. This is especially useful for composing complex environment\\nvariables.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'app start\'\\n env:\\n APP_TARGET: \'${REGION}-${ENVIRONMENT}\'\\n```\\n\\nThe same substitution syntax can also be used within `.env` files.\\n\\n```toml title=\\".env\\"\\nAPP_TARGET=\\"${REGION}-${ENVIRONMENT}\\"\\n```\\n\\n## Date/time token variables\\n\\n[Tokens](/docs/concepts/token) are a mechanism used in task configuration for dynamically injecting\\nvalues from the current project or task, especially when task inheritance is involved. Tokens have\\nexisted since moon\'s inception, without much change... until now.\\n\\nWe\'re excited to introduce a new set of tokens for referencing the\\n[current date or time](/docs/concepts/token#datetime): `$date`, `$time`, `$datetime`, and\\n`$timestamp`. With these new tokens, you\'re now able to implement clever or unusual solutions, like\\ngrouping builds or deploys based on the current timestamp.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n deploy:\\n command: \'app deploy --output ./build/$timestamp\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.0.0) for a full list of\\nchanges.\\n\\n- Added a `hasher.warnOnMissingInputs` setting to `.moon/workspace.yml`.\\n- Added a `$projectAlias` task token.\\n- Added a `telemetry` setting to `.moon/workspace.yml`.\\n- Updated the new version check to only run on the `check`, `ci`, `run`, and `sync` commands.\\n\\n## What\'s next?\\n\\nExpect the following in the v1.1 release!\\n\\n- Polish and stability initiatives.\\n- Task inheritance based on tags.\\n- Deno tier 3 support."},{"id":"proto-v0.3","metadata":{"permalink":"/blog/proto-v0.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx","source":"@site/blog/2023-03-15_proto-v0.3.mdx","title":"proto v0.3 - Improved npm, go, and version requirement support","description":"With this release, we\'re improving some workflows and version detection logic based on initial","date":"2023-03-15T00:00:00.000Z","formattedDate":"March 15, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"npm","permalink":"/blog/tags/npm"},{"label":"go","permalink":"/blog/tags/go"}],"readingTime":1.395,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.3","title":"proto v0.3 - Improved npm, go, and version requirement support","authors":["milesj"],"tags":["proto","npm","go"],"image":"./img/proto/v0.3.png"},"prevItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"},"nextItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"}},"content":"With this release, we\'re improving some workflows and version detection logic based on initial\\nfeedback.\\n\\n\x3c!--truncate--\x3e\\n\\n## Bundled npm support\\n\\nAfter Node.js is installed, the version of npm that came bundled with that Node.js version will also\\nbe installed into proto. This functionality can be skipped by passing `--no-bundled-npm` during\\ninstallation.\\n\\n```shell\\n$ proto install node -- --no-bundled-npm\\n```\\n\\nTo further expand upon this, `bundled` is now considered a built-in alias, and will be used during\\nversion detection. When encountered, we\'ll first detect the version of Node.js running, and infer\\nthe npm version from there.\\n\\n```shell\\n$ proto global npm bundled\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Automatic `GOBIN` setup\\n\\nAfter Go is installed, we\'ll now inject a `GOBIN` environment variable into your shell, pointing to\\n`~/go/bin`, if it doesn\'t already exist. This variable will be used to locate Go binaries across all\\ninstalled versions, and help to avoid binary not found errors.\\n\\nThis functionality can be skipped by passing `--no-gobin` during installation.\\n\\n```shell\\n$ proto install go -- --no-gobin\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Better version requirement detection\\n\\nPreviously when proto encounted a version requirement (`^`, `~`, `>=`, etc) during version\\ndetection, we would attempt to resolve a version that satisfied the requirement based on versions\\navailable in the remote manifest (what\'s been officially released). While this worked, it would\\nresult in far too many local installs as that satisfied version constantly changed.\\n\\nInstead, we now satisfy the version requirement based on versions that have been installed locally\\nto `~/.proto/tools`. If no version matches, detection will simply move on to the next case, and\\neventually fallback to the global default version."},{"id":"v0.26","metadata":{"permalink":"/blog/v0.26","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-13_v0.26.mdx","source":"@site/blog/2023-03-13_v0.26.mdx","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","description":"With this release, we\'re providing deeper integration with our new proto toolchain","date":"2023-03-13T00:00:00.000Z","formattedDate":"March 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"docker","permalink":"/blog/tags/docker"},{"label":"query","permalink":"/blog/tags/query"},{"label":"hash","permalink":"/blog/tags/hash"}],"readingTime":3.29,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.26","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","authors":["milesj"],"tags":["proto","docker","query","hash"],"image":"./img/v0.26.png"},"prevItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"},"nextItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWith this release, we\'re providing deeper integration with our new [proto](/proto) toolchain\\nmanager, better Docker support, and new query commands for debugging.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full proto toolchain integration\\n\\n<div className=\\"float-right ml-4 mb-1\\" style={{ width: \'50%\' }}>\\n <Logo />\\n</div>\\n\\nEarlier this week we announced [proto](/proto), our own toolchain manager, and an attempt at a next\\ngeneration version manager for multiple languages. proto was originally moon\'s toolchain layer, but\\nwe felt it best to extract it out into a stand-alone tool for everyone to use, especially those not\\nusing moon!\\n\\nNow that proto has been released, we\'ve updated moon\'s Rust internals to utilize proto\'s latest Rust\\ncrates. For the most part, everything will continue to work the same. However, the biggest change is\\nthat the toolchain has moved from `~/.moon` to `~/.proto`, and will result in tools being\\nre-downloaded and installed. Feel free to delete the old `~/.moon` directory manually.\\n\\nFurthermore, we\'ve added first-class support for the new [`.prototools`](/docs/proto/config)\\nconfiguration file. If this file is found in the workspace root, we\'ll automatically enable the\\ntools in our toolchain, and inject the versions (when not defined in `.moon/toolchain.yml`).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.0.0\\"\\npnpm = \\"7.29.0\\"\\n```\\n\\n## New `moon docker setup` command\\n\\nmoon has provided [built-in `Dockerfile` support](/docs/guides/docker) since v0.15 (11 versions\\nago!) and we\'ve always encouraged the use of the [`moon setup`](/docs/commands/setup) command to\\nsetup the toolchain and install project dependencies. Here\'s an example of a moon powered\\n`Dockerfile`:\\n\\n```docker\\nFROM node:latest\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n# Copy workspace skeleton\\nCOPY ./.moon/docker/workspace .\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy source files\\nCOPY ./.moon/docker/sources .\\n\\n# Build something\\nRUN moon run app:build\\n\\n# Prune workspace\\nRUN moon docker prune\\n\\nCMD [\\"moon\\", \\"run\\", \\"app:start\\"]\\n```\\n\\nHowever, over the course of these 11 releases since v0.15, we refactored the `moon setup` command to\\nonly setup the toolchain, and _no longer_ install project dependencies. We inadvertently broke our\\nDocker integration. This was an oversight on our part.\\n\\nTo rectify this situation, we\'re introducing a new\\n[`moon docker setup`](/docs/commands/docker/setup) command that will efficiently install\\ndependencies for projects focused/affected within the `Dockerfile`. This is a much better solution\\nthan before, and you should see improved Docker layer caching!\\n\\n```diff\\n-RUN moon setup\\n+RUN moon docker setup\\n```\\n\\n## New `moon query hash` command\\n\\nWhen moon runs a task, we generate a unique hash representing the state of that run. When something\\ngoes wrong however, and the hash is different than what you expect, debugging why is rather\\nnon-trivial and requires a lot of internal knowledge. We\'re looking to reduce this burden, by\\nintroducing the new [`moon query hash`](/docs/commands/query/hash) command.\\n\\n```shell\\n$ moon query hash 0b55b234\\n```\\n\\nThis command will print the contents of the hash manifest, which is all inputs and sources used to\\ngenerate the unique hash. From here you can use this output to investigate what\'s actually\\nhappening.\\n\\n```json\\n{\\n \\"command\\": \\"build\\",\\n \\"args\\": [\\"./build\\"]\\n // ...\\n}\\n```\\n\\n## New `moon query hash-diff` command\\n\\nExpanding on the new command above, we\'re also introducing the\\n[`moon query hash-diff`](/docs/commands/query/hash-diff) command, which can be used to compute the\\ndifference between 2 hashes. Perfect in understanding what has changed between ran tasks.\\n\\n```shell\\n$ moon query hash-diff 0b55b234 2388552f\\n```\\n\\nWhen ran, the command will print out the differences as highlighted lines. If you use `git diff`,\\nthis will feel familiar to you.\\n\\n```diff\\n{\\n\\t\\"command\\": \\"build\\",\\n\\t\\"args\\": [\\n+\\t\\t\\"./dist\\"\\n-\\t\\t\\"./build\\"\\n\\t],\\n\\t...\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.26.0) for a\\nfull list of changes.\\n\\n- A handful of critical bug fixes.\\n- Targets that generate an empty hash are now considered a failure, as they may be an edge case not\\n accounted for.\\n\\n## What\'s next?\\n\\nExpect the following in the v1 release!\\n\\n- Officially release a v1!\\n- Project tagging and constraints."},{"id":"proto","metadata":{"permalink":"/blog/proto","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx","source":"@site/blog/2023-03-09_proto.mdx","title":"Introducing proto, a next-generation toolchain manager!","description":"We are proud to announce the launch of proto, a next-generation toolchain manager for all","date":"2023-03-09T00:00:00.000Z","formattedDate":"March 9, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto","title":"Introducing proto, a next-generation toolchain manager!","authors":["milesj"],"tags":["proto","toolchain"],"image":"./img/proto/v0.png"},"prevItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"},"nextItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWe are proud to announce the launch of [proto](/proto), a next-generation toolchain manager for all\\nof your favorite programming languages.\\n\\n\x3c!--truncate--\x3e\\n\\n<div className=\\"flex justify-center mb-3\\">\\n <Logo width=\\"40%\\" className=\\"block\\" />\\n</div>\\n\\n[proto](/proto) is a Rust based multi-language toolchain manager that will download and install\\ntools by version, and immediately make them available on `PATH`. proto is launching with initial\\nsupport for [Bun](https://bun.sh), [Deno](https://deno.land), [Node.js](https://nodejs.org) (and\\nnpm, pnpm, yarn), and [Go](https://go.dev), with more languages on the way!\\n\\n```shell\\nproto install node 18\\nproto install go 1.20\\nproto install deno 1.30\\n```\\n\\nUnlike other version managers that pin their global binary to a default version, proto will\\n[contextually detect an applicable version](/docs/proto/detection) from the environment or the\\nlanguage\'s ecosystem (like `package.json`), ensuring the correct tool is always being ran.\\n\\n```shell\\n# Will detect a version before running\\nbun run ./script.ts\\n```\\n\\nFurthermore, with proto\'s [`.prototools`](/docs/proto/config) file, you can pin versions of all\\nrequired tools on a per-project or per-repository basis, allowing for near instant setup of\\ndeveloper environments. Perfect for onboarding new developers!\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.12.0\\"\\nyarn = \\"3.3.0\\"\\n```\\n\\n```shell\\n# Install all the things!\\nproto use\\n```\\n\\nAnd lastly, [moon](/moon)\'s toolchain is built on proto, so if you\'re using moon, you might as well\\nuse proto. This will enable a single toolchain for both tools (in v0.26)!\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"View documentation\\" href=\\"/docs/proto\\" size=\\"lg\\" />\\n</div>\\n\\n## How to get started?\\n\\nIn a terminal that supports Bash, run:\\n\\n```\\ncurl -fsSL https://moonrepo.dev/install/proto.sh | bash\\n```\\n\\nIn Powershell or Windows Terminal, run:\\n\\n```\\nirm https://moonrepo.dev/install/proto.ps1 | iex\\n```\\n\\nJump to the [documentation](/docs/proto) for more information on getting started and available\\ncommands!\\n\\n## Why another version manager?\\n\\nTo start, proto powers [moon\'s](/moon) toolchain and integrated developer environment. We believed\\nthat moon\'s toolchain would be extremely beneficial for developers as a whole, and so we extracted\\nproto out into a standalone Rust CLI and Rust crates that moon inherits.\\n\\nFurthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each\\nwith different workflows, CLI commands, and configuration files, is a poor developer experience.\\n\\nOur goal is to unify all of these into a single performant interface. A toolchain manager is the\\nnext step in the version manager evolution."},{"id":"v0.25","metadata":{"permalink":"/blog/v0.25","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx","source":"@site/blog/2023-02-27_v0.25.mdx","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","description":"With this release, we\'re landing Deno, our first supported language besides Node.js, and improving","date":"2023-02-27T00:00:00.000Z","formattedDate":"February 27, 2023","tags":[{"label":"deno","permalink":"/blog/tags/deno"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"offline","permalink":"/blog/tags/offline"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":4.475,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.25","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","authors":["milesj"],"tags":["deno","toolchain","moonbase","offline","github"],"image":"./img/v0.25.png"},"prevItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"},"nextItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re landing Deno, our first supported language besides Node.js, and improving\\ninteroperability of languages as a whole.\\n\\n\x3c!--truncate--\x3e\\n\\n## Deno tier 2 support (experimental)\\n\\nThree months ago we announced our [new tiered support structure](./v0.21) for languages, and as of\\ntoday, we\'re happy to announce that our second language to reach tier 2 is\\n[Deno](https://deno.land)! With tier 2 support, we now analyze Deno specific configuration files\\n(like `deno.json`) to infer dependencies and relationships, as well as utilize this information for\\ninputs and hashing purposes. With that being said, we\'re marking this release as experimental until\\nwe fine tune the implementation, and iron out all the bugs.\\n\\nTo get started with using Deno, enable the new [`deno`](/docs/config/toolchain#deno) setting in\\n[`.moon/toolchain.yml`](/docs/config/toolchain). At this time, we don\'t have many settings to\\nconfigure, so simply defining an empty object is enough to enable the Deno platform! Learn more\\nabout this in our [Deno handbook](/docs/guides/javascript/deno-handbook).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ndeno: {}\\n```\\n\\nOnce enabled, you can start using `deno` commands in your moon tasks. moon will automatically set\\nthe [`platform`](/docs/config/project#platform-1) to \\"deno\\" when using a deno command.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'deno fmt\'\\n```\\n\\n:::info\\n\\nBecause this is only tier 2 support, moon _does not_ download and install Deno into its toolchain.\\nmoon expects the `deno` binary to exist in the current environment.\\n\\n:::\\n\\nFurthermore, if you\'re working a project that is composed of multiple JavaScript runtimes, like\\nDeno, Bun, or Node.js, you can set the default `platform` for all tasks at the project-level.\\n\\n```yaml title=\\"moon.yml\\"\\nplatform: \'deno\'\\nlanguage: \'typescript\'\\ntype: \'application\'\\n```\\n\\nWe\'re very excited for this release as it paves the way for future language integrations, and\\nenables additional JavaScript runtimes!\\n\\n## CI insights in moonbase\\n\\nWe\'ve spent the last few weeks implementing a new [moonbase](https://moonrepo.app) feature called CI\\ninsights, where we track all CI runs (via [`moon ci`](/docs/commands/ci)), and all actions (tasks)\\nthat have ran based on affected files. In the future these insights will help catch regressions,\\nalert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and\\nrepositories.\\n\\n<Image src={require(\'./img/v0.25/runs-list.png\')} width=\\"90%\\" />\\n\\nWith this initial release, we track touched files, which targets are affected based on those files,\\nan estimation on how much time was saved or lost, the actions that ran and their final status,\\noutlined as a timeline.\\n\\n<Image src={require(\'./img/v0.25/run-detail.png\')} width=\\"90%\\" />\\n\\nInsights are enabled by default if you\'re using moonbase in your CI pipeline, and start using moon\\nv0.25! You can disable insights gathering from your\\n[organization settings page](https://moonrepo.app).\\n\\n## Offline mode\\n\\nmoon assumes that an internet connection is always available, as we download and install tools into\\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\\nWhile this is useful, having a constant internet connection isn\'t always viable.\\n\\nIn this release, we now check for an active internet connection and bypass certain workflows when\\napplicable.\\n[Jump to the official guide on offline mode for more information](/docs/guides/offline-mode)!\\n\\n## Custom project `language`\\n\\nProject\'s have always been able to define a [`language`](/docs/config/project#language) in\\n[`moon.yml`](/docs/config/project) that denotes the primary programming language for the project.\\nHistorically this has been a strict enum of supported values, and could _not_ be customized for\\nother languages. With the introduction of\\n[language driven task inheritance](./v0.23#new-scoped-tasks-with-moontasksyml), we felt like\\nrevisiting this setting, and as such, you\'re now able to define _any_ language in this setting,\\nwhich also feeds into the task inheritance system.\\n\\n```yaml title=\\"moon.yml\\"\\nlanguage: \'kotlin\'\\n```\\n\\nWith this change, `.moon/tasks/kotlin-application.yml`, `.moon/tasks/dotnet.yml`, and other\\nvariations are now possible! However, besides task inheritance, other functionality like platform\\ndetection, and Dockerfile support are not enabled.\\n\\n## Project-level TypeScript settings (breaking)\\n\\nOur TypeScript integration supports many automated workflows, like syncing project references, and\\nrouting `outDir` to our shared cache. This is wonderful for the majority, but for the handful of\\nprojects where these settings were not viable, there was no simple way to disable or opt out of the\\nfunctionality.\\n\\nWell no more, projects can now override the workspace-level TypeScript settings\\n`routeOutDirToCache`, `syncProjectReferences`, and `syncProjectReferencesToPaths` through the\\n[`toolchain.typescript`](/docs/config/project#typescript) setting in\\n[`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntoolchain:\\n\\ttypescript:\\n\\t\\trouteOutDirToCache: false\\n```\\n\\nBecause this setting was changed from a boolean to an object, the old pattern of disabling\\nTypescript must now use the `disabled` setting.\\n\\n```yaml title=\\"moon.yml\\"\\n# Old\\ntoolchain:\\n\\ttypescript: false\\n\\n# new\\ntoolchain:\\n\\ttypescript:\\n\\t\\tdisabled: true\\n```\\n\\n## New `moonrepo/setup-moon-action` GitHub action\\n\\nIf you\'re using GitHub Actions as your CI pipeline, we\'ve introducing a new action called\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action), that will install the\\n`moon` binary globally, and will cache (and restore) the moon toolchain.\\n\\nWith this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps\\naround setting up Node.js, and install dependencies.\\n\\n```yaml\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n - uses: moonrepo/setup-moon-action@v1\\n - run: moon ci\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.25.0) for a\\nfull list of changes.\\n\\n- Updated project, task, and target identifiers to support periods (`.`).\\n- Refactored glob matching to use workspace relative paths instead of absolute. Please report an\\n issue if hashing or affected detection is now inaccurate.\\n- We now build against older operating systems in an attempt to solve GLIBC version errors.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.26 release!\\n\\n- Officially release proto!\\n- Improved Deno interoperability."},{"id":"v0.24","metadata":{"permalink":"/blog/v0.24","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx","source":"@site/blog/2023-02-13_v0.24.mdx","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","description":"With this release, we\'ve polished our CLI experience and improved task interoperability.","date":"2023-02-13T00:00:00.000Z","formattedDate":"February 13, 2023","tags":[{"label":"project","permalink":"/blog/tags/project"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":4.28,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"v0.24","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","authors":["milesj","jpoz"],"tags":["project","platform","moonbase","remote-cache"],"image":"./img/v0.24.png"},"prevItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"},"nextItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'ve polished our CLI experience and improved task interoperability.\\n\\n\x3c!--truncate--\x3e\\n\\n## Remote caching now available\\n\\nIf you missed our announcement earlier this week,\\n[remote caching is now publicly available through our new service moonbase](/blog/moonbase)! If\\nyou\'re looking to speed up your CI pipelines and share build artifacts between runs, moonbase can\\nhelp.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"Try moonbase for free!\\" href=\\"https://moonrepo.app\\" size=\\"lg\\" />\\n</div>\\n\\n## Project-level task platform\\n\\nIn our previous release, [v0.23](./v0.23#project-level-environment-variables), we added support for\\nproject-level environment variables. This is great as it helps to reduce duplication for projects\\nwith many tasks. On that note, we wondered which configuration field we could apply similar\\ntreatment, and as such, we\'ve added a project-level [`platform`](/docs/config/project#platform)\\nsetting.\\n\\nWhen this setting is defined, all task\'s within the current project that have _not explicitly_\\nconfigured their `platform`, will inherit the project-level platform. If neither settings are\\ndefined, we\'ll attempt to detect the correct platform based on the state of the project.\\n\\n```yaml title=\\"<project>/moon.yml\\"\\n# Will set non-explicit task\'s platform to node\\nplatform: \'node\'\\n\\ntasks:\\n\\t# Will be node\\n dev: # ...\\n\\n\\t# Will be node\\n build: # ...\\n\\n\\t# Will be system\\n serve:\\n # ...\\n platform: \'system\'\\n```\\n\\n> This setting is _extremely useful_ for projects that contain multiple languages. Even more so once\\n> we land Bun and Deno support, as we\'ll need a way to differentiate JavaScript/TypeScript projects!\\n\\n## Interactive tasks\\n\\nWhen moon executes a task, it streams both stdout and stderr to the terminal _and_ captures the\\noutput for later use. We do this for 2 reasons:\\n\\n- We store stdout.log and stderr.log files in a tarball archive.\\n- We replay this captured output when executing a task that has been cached.\\n\\nWhile this works, our approach is non-standard. Streams are either piped or inherited, not both!\\nBecause of our custom abstraction around streams and output capturing, it disrupts stdin, breaking\\nall interactive commands. If you tried to run a task that prompted you with a question and were\\nunable to answer it, this is why!\\n\\nTo remedy this shortcoming, we\'re approaching this from 2 angles. The first is that all tasks marked\\nas [`local`](/docs/config/project#local) (or have caching disabled) will no longer capture streamed\\noutput, and will instead stream natively, allowing interactivity out of the box, but only when\\nthey\'re the only task being ran. This will cover the majority of use cases.\\n\\nFor the remaining use cases, we\'re introducing a new `--interactive` flag for\\n[`moon run`](/docs/commands/run). When this flag is provided, it will force the target into an\\ninteractive mode.\\n\\n```shell\\n$ moon run app:new --interactive\\n```\\n\\n## Improved `moon query` commands (breaking)\\n\\nThe [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query touched-files`](/docs/commands/query/touched-files) commands are useful for building\\ncustom solutions and integrations on top of moon, but they weren\'t developer friendly as they output\\nlarge JSON blobs. To remedy this, we\'ve updated both commands to output a simple human readable\\nformat by default, and moved the JSON output behind a `--json` flag.\\n\\nFor example, `moon query touched-files` now outputs a list of absolute file paths separated by new\\nlines.\\n\\n```\\n$ moon query touched-files\\n/moon/website/docs/commands/query/projects.mdx\\n/moon/crates/cli/tests/query_test.rs\\n/moon/crates/cli/src/commands/query.rs\\n/moon/website/blog/2023-02-13_v0.24.mdx\\n```\\n\\nWhile `moon query projects` now outputs a list of project separated by new lines, where each line\\ncontains the project name, source, type, and language.\\n\\n```\\n$ moon query projects\\nreport | packages/report | library | typescript\\nruntime | packages/runtime | library | typescript\\ntypes | packages/types | library | typescript\\nvisualizer | packages/visualizer | library | typescript\\nwebsite | website | application | typescript\\n```\\n\\nWe had 2 goals in mind for this change, the first was to make it easily readable, and the second was\\nfor the default output to be easily parseable. We believe we\'ve accomplished these goals!\\n\\n## New `moon query tasks` command\\n\\nTo expand on the query improvements above, we wanted to provide a way to also query for tasks,\\nanswering the question of \\"What tasks exists and for what projects?\\". And with this, we\'re\\nintroducing a new [`moon query tasks`](/docs/commands/query/tasks) command!\\n\\n```\\n$ moon query tasks\\ntypes\\n\\t:build | packemon\\n\\t:format | prettier\\n\\t:lint | eslint\\n\\t:test | jest\\n\\t:typecheck | tsc\\nreport\\n\\t:build | packemon\\n\\t:format | prettier\\n\\t:lint | eslint\\n\\t:test | jest\\n\\t:typecheck | tsc\\n...\\n```\\n\\n## Shell completions\\n\\nAuto-completion in your terminal increases productivity, which we\'re a massive fan of. To help\\nsupport this, we\'re introducing the [`moon completions`](/docs/commands/completions) command, which\\ngenerates the appropriate command completions for your current shell.\\n\\nThis command writes to stdout, which can then be redirected to a file of your choice. Be sure to\\nconfigure your shell profile to load the completions!\\n\\n```shell\\n$ moon completions > ~/.bash_completion.d/moon.sh\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0) for a\\nfull list of changes.\\n\\n- Added [TypeScript v5](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/)\\n support.\\n- Added a `hasher.walkStrategy` setting to `.moon/workspace.yml`.\\n- Updated task `outputs` to support token functions (`@group`, `@globs`, etc).\\n- Reworked our comparison/baseline estimations calcuations.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.25 release!\\n\\n- Deno tier 2 support.\\n- CI insights and metrics within moonbase.\\n- Project-level TypeScript settings."},{"id":"moonbase","metadata":{"permalink":"/blog/moonbase","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-08_moonbase.mdx","source":"@site/blog/2023-02-08_moonbase.mdx","title":"Remote caching is now publicly available through moonbase","description":"We are proud to announce the launch of moonbase remote caching \u2013 a new solution that","date":"2023-02-08T00:00:00.000Z","formattedDate":"February 8, 2023","tags":[{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":1.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"moonbase","title":"Remote caching is now publicly available through moonbase","authors":["milesj","jpoz"],"tags":["moonbase","remote-cache"]},"prevItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"},"nextItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\nimport Logo from \'../static/brand/moonbase/logo.svg\';\\n\\nWe are proud to announce the launch of [moonbase](/moonbase) remote caching \u2013 a new solution that\\nhelps moon developers streamline their build processes and save time.\\n\\n\x3c!--truncate--\x3e\\n\\n<div className=\\"flex justify-center mb-3\\">\\n <Logo width=\\"65%\\" className=\\"block\\" />\\n</div>\\n\\nRemote caching allows developers to cache artifacts across builds, improving the efficiency of their\\nContinuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts\\nwhen moon is run with moonbase [remote caching enabled](/docs/guides/remote-cache). In the event\\nthat a CI run is executed with identical code, the cached artifacts are automatically pulled down,\\nreducing the time required to complete the build. In our tests, we have seen significant\\nimprovements in CI times, upwards of 90%.\\n\\n## What is moonbase?\\n\\nYou may be asking yourself, what is moonbase? [moonbase](/moonbase) is a new cloud service that\\nwe\'ve been working on to solve an array of problems in regards to repository and continous\\nintegration health.\\n\\n<Image src={require(\'../static/img/home/org.png\')} width=\\"80%\\" />\\n\\nThe first problem on this list is [remote caching](/docs/guides/remote-cache), which has been in a\\nbeta program for the past few months. We want to thank all the beta participants for testing our\\nsystems!\\n\\nWe\'ll also be launching CI insights in the next few weeks. This is a system where we track all your\\nCI runs (via `moon ci`), and all moon tasks (actions) that ran within each job. We use this\\ninformation to track the health of your pipelines, catch regressions, alert on flakiness, and more!\\nBut don\'t worry, this feature is opt-in.\\n\\nWe\'re very excited for moonbase! We have a massive roadmap ahead of us, but we\'re sure y\'all will\\nenjoy everything that it has to offer.\\n\\n<div class=\\"flex justify-center\\">\\n <Button label=\\"Try moonbase for free!\\" href=\\"https://moonrepo.app\\" size=\\"lg\\" />\\n</div>\\n\\n## New homepage and product pages\\n\\nAs part of this release, we\'ve updated our homepage, and added new product pages for both\\n[moon](/moon) and [moonbase](/moonbase). This includes new logos and typography, which we\'re very\\nexcited for! This is only the beginning, as we\'re also working on additional behind the scenes\\nproducts. Stay tuned!"},{"id":"v0.23","metadata":{"permalink":"/blog/v0.23","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx","source":"@site/blog/2023-01-30_v0.23.mdx","title":"moon v0.23 - Scoped task inheritance, and project config updates","description":"With this release, we\'re launching the next iteration of our task inheritance model, as well as","date":"2023-01-30T00:00:00.000Z","formattedDate":"January 30, 2023","tags":[{"label":"survey","permalink":"/blog/tags/survey"},{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"projects","permalink":"/blog/tags/projects"}],"readingTime":5.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.23","title":"moon v0.23 - Scoped task inheritance, and project config updates","authors":["milesj"],"tags":["survey","tasks","projects"],"image":"./img/v0.23.png"},"prevItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"},"nextItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re launching the next iteration of our task inheritance model, as well as\\nquality of life improvements for project configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Developer survey\\n\\nBefore we dive into this new release, we have a quick survey for everyone. We know how everyone\\nfeels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice\\nquestions.\\n\\nWe\'re looking for feedback on moon itself, what features you\'re looking for, what you currently do\\nnot like, how you\'re currently using monorepos, your development workflows, so on and so forth. We\'d\\nvery much appreciate it if you could engage with this survey!\\n\\n<div class=\\"flex justify-center\\">\\n <Button\\n label=\\"Take survey!\\"\\n href=\\"https://a.sprig.com/UE1SOG1zV3o5SzdRfnNpZDpmOTQ5MjU1Yy1jYTZlLTRmYjQtOTRjZi0wMzZlZjExN2JjZDg=\\"\\n size=\\"lg\\"\\n />\\n</div>\\n\\n## Improved task inheritance model\\n\\nOne of the guiding principles behind moon is to simplify repository maintenance, with task\\nmanagement being top of list. We weren\'t happy with the current state of things, as every build\\nsystem and task runner that exists always opted for per-project task management, which is a massive\\namount of overhead and tech debt in the long run. To combat this, moon was designed from the\\nground-up using a task inheritance model, where \\"global\\" tasks were defined in\\n[`.moon/project.yml`](/docs/config/tasks), with per-project tasks still being an option with\\n[`moon.yml`](/docs/config/project).\\n\\nWhile inheritance worked great, it did have some shortcomings, such as:\\n\\n- With the addition of [new programming languages](/blog/v0.21), there\'s no way to easily define\\n tasks for specific languages, that should only be inherited by specific projects.\\n- There\'s no way to differentiate tasks between applications or libraries, as they typically have\\n different build/compilation systems.\\n- All of the problems above can be \\"solved\\" with\\n [`workspace.inheritedTasks`](/docs/config/project#inheritedtasks) in all projects, but it\'s a\\n maintenance headache.\\n\\nWe\'ve been documenting a solution to these problems for many months now, and we\'re very excited to\\nfinally release our new and improved task inheritance model that solves all of the problems above,\\nand opens the doors for future enhancements! Keep reading for more information.\\n\\n### New `.moon/tasks.yml` (breaking)\\n\\nTo start, we renamed `.moon/project.yml` to `.moon/tasks.yml` as we want to emphasize that this\\nconfiguration file is for task inheritance functionality only. However, the semantics of this file\\nhas _not_ changed, and is still \\"tasks to be inherited by _all_ projects\\".\\n\\n```yaml title=\\".moon/tasks.yml\\"\\n$schema: \'https://moonrepo.dev/schemas/tasks.json\'\\n\\ntasks:\\n # ...\\n```\\n\\n> We\'ll automatically rename this file for you when running a `moon` command!\\n\\n### New scoped tasks with `.moon/tasks/*.yml`\\n\\nThe biggest change to task inheritance is that tasks can now be scoped by a project\'s\\n[`language`](/docs/config/project#language) or [`type`](/docs/config/project#type) using the new\\n`.moon/tasks/<language>.yml` or `.moon/tasks/<language>-<type>.yml` configuration files! Jump to the\\n[official documentation on task inheritance](/docs/concepts/task-inheritance) for more information\\non how scoping works, the lookup order of files, and much more.\\n\\nAs a demonstration, you can scope tasks to Node.js projects with `.moon/tasks/node.yml`, Rust\\napplications with `.moon/tasks/rust-application.yml`, Go libraries with\\n`.moon/tasks/go-library.yml`, Ruby scripts with `.moon/tasks/ruby-tool.yml`, so on and so forth!\\n\\nWe\'re very excited for this feature, as it\'s something we personally needed, and we\'re sure you all\\ndo as well. It also future proofs moon for new programming languages, additional implicit scenarios\\nto handle, and yet to be discovered functionality.\\n\\n<Tabs\\n groupId=\\"scoped-task\\"\\n defaultValue=\\"node\\"\\n values={[\\n { label: \'Node\', value: \'node\' },\\n { label: \'Go\', value: \'go\' },\\n { label: \'PHP\', value: \'php\' },\\n { label: \'Python\', value: \'python\' },\\n { label: \'Ruby\', value: \'ruby\' },\\n { label: \'Rust\', value: \'rust\' },\\n ]}\\n>\\n<TabItem value=\\"node\\">\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'prettier --write .\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"go\\">\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'go fmt\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"php\\">\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'phpcbf .\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"python\\">\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'pylint .\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"ruby\\">\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'rubocop -l\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"rust\\">\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\ntasks:\\n\\tformat:\\n\\t\\tcommand: \'cargo fmt --all --check\'\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n### Moved `implicitDeps` and `implicitInputs` (breaking)\\n\\nTo standardize inheritance and expansion related functionality, we\'ve moved the\\n`runner.implicitDeps` and `runner.implicitInputs` settings from `.moon/workspace.yml` to\\n[`.moon/tasks.yml`](/docs/config/tasks#implicitdeps) and\\n[`.moon/tasks/*.yml`](/docs/config/tasks#implicitinputs) and removed the `runner` prefix.\\n\\nThis allows for implicits to also be scoped accordingly and granularly. For example, projects can\\nnow inherit dependency manager related files as implicit inputs on a per-language basis:\\n\\n<Tabs\\n groupId=\\"scoped-task\\"\\n defaultValue=\\"node\\"\\n values={[\\n { label: \'Node\', value: \'node\' },\\n { label: \'Go\', value: \'go\' },\\n { label: \'PHP\', value: \'php\' },\\n { label: \'Python\', value: \'python\' },\\n { label: \'Ruby\', value: \'ruby\' },\\n { label: \'Rust\', value: \'rust\' },\\n ]}\\n>\\n<TabItem value=\\"node\\">\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\nimplicitInputs:\\n\\t- \'package.json\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"go\\">\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\nimplicitInputs:\\n\\t- \'go.mod\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"php\\">\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\nimplicitInputs:\\n\\t- \'composer.json\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"python\\">\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\nimplicitInputs:\\n\\t- \'pyproject.toml\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"ruby\\">\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\nimplicitInputs:\\n\\t- \'Gemfile\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"rust\\">\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\nimplicitInputs:\\n\\t- \'Cargo.toml\'\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n## Project-level environment variables\\n\\nSince moon\'s inception, tasks can be configured with pre-defined environment variables using the\\n[`env`](/docs/config/project#env-1) setting. These variables would then be passed to the command\\nduring execution. This works perfectly for encapsulation, but becomes tedious when the same\\nvariables are repeated for multiple tasks.\\n\\nTo remedy this, environment variables can now be defined at the top of\\n[`moon.yml`](/docs/config/project) using the top-level [`env`](/docs/config/project#env) setting.\\nVariables defined at the top-level will be inherited by all tasks in the current project, but will\\nnot override task-level variables of the same name.\\n\\nTo demonstrate this, the following config:\\n\\n```yaml title=\\"<project>/moon.yml\\"\\ntasks:\\n dev:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n build:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n serve:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n```\\n\\nCan be rewritten as:\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nenv:\\n TARGET_ENV: \'development\'\\n\\ntasks:\\n dev:\\n # ...\\n\\n build:\\n # ...\\n\\n serve:\\n # ...\\n```\\n\\n## Globs in task outputs\\n\\nAnother feature that\'s been around since moon\'s inception is task\\n[`outputs`](/docs/config/project#outputs), which only supported relative files and folders. For\\nhistorical reasons, it was the easiest solution at the time, but in practice, supporting more\\ngranular control is better.\\n\\nAs such, task `outputs` now support glob patterns as well! This is perfect for restricting and\\nfiltering down which files are cached in the artifact. However, be aware that during hydration (a\\ncache hit), all files _not matching the glob_ will be deleted, so ensure that critical files _do_\\nmatch.\\n\\nTo demonstrate this, if building a JavaScript project, you may want to include `.js` and `.css`\\nfiles, but exclude everything else (`.map`, etc).\\n\\n```yaml title=\\"moon.yml\\" {4,5}\\ntasks:\\n build:\\n command: \'webpack\'\\n outputs:\\n - \'build/**/*.{js,css}\'\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.23.0) for a\\nfull list of changes.\\n\\n- Updated `moon migrate from-turborepo` to preserve globs in outputs.\\n- Updated project graph to no longer cache when there\'s no VCS root.\\n- Updated pnpm to use the new `pnpm dedupe` command when the version is >= 7.26.0.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.24 release!\\n\\n- New `moon query tasks` command.\\n- New per-project `platform` setting.\\n- Token support in task `outputs`.\\n- TypeScript v5 support."},{"id":"v0.22","metadata":{"permalink":"/blog/v0.22","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx","source":"@site/blog/2023-01-16_v0.22.mdx","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","description":"It\'s the first release of the year, and with this release, we\'re landing some quality of life","date":"2023-01-16T00:00:00.000Z","formattedDate":"January 16, 2023","tags":[{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"migrate","permalink":"/blog/tags/migrate"}],"readingTime":2.805,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.22","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","authors":["milesj"],"tags":["graph","pipeline","hasher","migrate"],"image":"./img/v0.22.png"},"prevItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"},"nextItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nIt\'s the first release of the year, and with this release, we\'re landing some quality of life\\ninfrastructure and workflow improvements!\\n\\n\x3c!--truncate--\x3e\\n\\n## New action pipeline\\n\\nWhen running targets, we generate a graph of actions to execute in order within the action runner.\\nAn action is one of \\"setup toolchain\\", \\"install dependencies\\", \\"run target\\", so on and so forth. Our\\naction runner would then spawn threads for every action using the [Tokio](https://tokio.rs/)\\nruntime. While this worked great, concurrency was entirely abstracted away from us.\\n\\nTo mitigate this problem, we\'ve implemented a new system for executing actions known as the action\\npipeline (or simply pipeline), which implements a dynamically scaling thread pool on top of Tokio.\\nThis provides us with more control over concurrency, starting with the new `--concurrency` option,\\nwhich restricts the number of threads (or CPU cores).\\n\\n```shell\\n$ moon run :build --concurrency 2\\n```\\n\\n## Expanded hashing functionality\\n\\nWhen we run targets in the pipeline, we hash a collection of inputs to calculate whether to continue\\nrunning or to exit early. This functionality has been extremely beneficial for optimizing the\\npipeline, and so, we\'ve expanded the hasher for other use cases. To start, the following 2 workflows\\nnow utilize the hasher:\\n\\n- When determining to auto-install dependencies (`npm install`, etc), we now hash all production,\\n development, and peer dependencies from applicable manifests (`package.json`). This has resulted\\n in more accurate installs, as we\'re no longer inadvertently installing when a non-dependency field\\n is modified in a manifest. On top of this, will still take into account lockfile modified\\n timestamps.\\n- When generating the project graph, we now hash all sources, aliases, and configuration files, to\\n determine whether to load the project graph from the local cache.\\n\\n## Project graph is now cached\\n\\nBecause of the hashing improvements above, we\'re now able to cache the entirety of the project graph\\ninto local cache. Depending on how many projects are in your workspace, you may see performance\\nimprovements on subsequent runs as we\'re no longer re-building the project graph over and over\\neverytime the `moon` binary is ran.\\n\\n## Migrate from Turborepo\\n\\nTurborepo is a popular task runner for Node.js based monorepos, but doesn\'t support all the\\nfunctionality that moon does. If you\'re looking to prototype moon, or migrate from Turborepo to moon\\nholistically, we now support a new command\\n[`moon migrate from-turborepo`](/docs/commands/migrate/from-turborepo).\\n\\nThis command will migrate the `turbo.json` file to moon applicable configuration files!\\n\\n```shell\\n$ moon migrate from-turborepo\\n```\\n\\n## Breaking changes\\n\\n### Renamed events\\n\\nBecause of the runner -> pipeline changes above, the `runner.*` [webhook](/docs/guides/webhooks)\\nevents were renamed to `pipeline.*`.\\n\\n### Updated CLI options\\n\\nRenamed the `--upstream` option to `--remote`, to better align with Git terminology, and removed the\\n`--report` option from `moon check` and `moon run` commands. Reports are now always created.\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.22.0) for a\\nfull list of changes.\\n\\n- Added Bun as a tier 1 language (doesn\'t do much at the moment).\\n- Added a [`versionConstraint` setting](/docs/config/workspace#versionconstraint) in\\n `.moon/workspace.yml` that enforces a requirement on the running moon binary.\\n- Updated the [`project` fields](/docs/config/project#project) in `moon.yml` to be optional,\\n excluding `description`.\\n- Internal improvements to remote caching and artifact uploading.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.23 release!\\n\\n- Improved task inheritance workflow.\\n- Glob support in task `outputs`.\\n- Project-level environment variables."},{"id":"2023-roadmap","metadata":{"permalink":"/blog/2023-roadmap","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx","source":"@site/blog/2023-01-04_2023-roadmap.mdx","title":"What\'s in store for 2023","description":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long","date":"2023-01-04T00:00:00.000Z","formattedDate":"January 4, 2023","tags":[{"label":"roadmap","permalink":"/blog/tags/roadmap"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":5.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"2023-roadmap","title":"What\'s in store for 2023","authors":["milesj"],"tags":["roadmap","moonbase","proto","toolchain"]},"prevItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"},"nextItem":{"title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","permalink":"/blog/v0.21"}},"content":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long\\nroadmap.\\n\\n\x3c!--truncate--\x3e\\n\\n## Year 2022 in review\\n\\nThe original concept and\\n[first commit of moon](https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d)\\n(codenamed monolith) landed October 23rd, 2021. Eight months later, we\\n[launched an alpha of moon](https://twitter.com/tothemoonrepo/status/1527467865200136192) to the\\npublic on May 19th, 2022. Since then, we\'ve landed 21 amazing releases based on feedback from the\\ncommunity and our long-term vision, with some such features as:\\n\\n- Linux musl, macOS silicon, and ARM support\\n- Full Node.js/JavaScript ecosystem support\\n- End-to-end caching and hashing of build artifacts\\n- Streamlined configuration\\n- Improved developer experience\\n- Massive performance improvements\\n- Automatic cache cleaning\\n- Code generation / scaffolding\\n- Dockerfile integration\\n- Remote caching\\n- New langauage agnostic toolchain\\n- Onboarding of 5 new languages: Rust, Go, PHP, Python, Ruby\\n- Rewritten project and dependency graphs\\n- Project-level toolchain overrides\\n- Project specific caching\\n- VSCode extension\\n- 2 GitHub actions\\n- ...and so much more!\\n\\nWe\'re very proud with the quality and amount of features we\'ve released in a 7 month timeframe. On\\ntop of this, our [GitHub stars](https://github.com/moonrepo/moon/stargazers) have steadily passed\\nthe 1k mark, [npm](https://www.npmjs.com/package/@moonrepo/cli) downloads are 500 a week and\\ngrowing, and our [Twitter](https://twitter.com/tothemoonrepo) isn\'t doing too bad. This is only the\\nstart, and we\'re not planning to go anywhere!\\n\\n## Path to an official v1 release\\n\\nA common question we receive is \\"When is v1 going to be released?\\", as some consumers are weary of\\nusing a \\"beta\\" tool. We definitely understand, and as such, have posted a\\n[high-level overview](https://github.com/moonrepo/moon/issues/491) of what we\'re hoping to land\\nbefore we tag an official v1 release. It basically boils down to landing breaking changes (mainly\\naround configuration) before v1, so that we avoid bumping to a v2 or v3 unnecessarily. We also want\\nto land our [toolchain changes](#proto) and [remote caching](#moonbase) improvements before then.\\n\\nOur current timeframe is by end of Q1, if not, early Q2.\\n\\n## Launching moonbase\\n\\nWe haven\'t mentioned this name publicly yet, but now seems like the perfect time! For the past 6\\nmonths we\'ve been working a new web application and service called moonbase, which pairs nicely with\\nmoon, as it provides additional functionality that can only be achieved by persisting information\\nacross runs.\\n\\nTo start, this service provides [remote caching](/docs/guides/remote-cache), which we\'re already\\nusing in production. At this point in time, objects are stored in our moonrepo S3 buckets, but one\\nof our major goals is to support storing objects in your private buckets, supporting additional\\ncloud providers like Google Cloud and Azure, and in the long-term, a self-hosted / on-premises\\nsolution.\\n\\nBut that\'s not all! moonbase will integrate deeply with [continuous integration](/docs/guides/ci)\\npipelines to generate insights, capture metrics, and provide near real-time dashboards. Our goal is\\nto provide a holistic overview of your entire repository.\\n\\nmoonbase with publicly available remote caching is slated for end of Q1. CI integration is\\ntentatively slated for Q2. We have even more features that we\'ll reveal in the future, so stay\\ntuned!\\n\\n## Launching proto\\n\\nAnother tool we haven\'t mentioned yet is proto (name still in flux). proto is a standardized version\\nmanager for programming languages and dependency managers. We\'ve basically extracted our\\n[toolchain](/docs/concepts/toolchain) into a standalone library, as it\'s super beneficial for\\nprojects and developers not using moon. It provides all the functionality you\'d expect from a\\nversion manager:\\n\\n- Downloading and installing specific versions\\n- Automatic version detection\\n- Updating PATH with the applicable version\\n- Generating shims\\n- Pinning shell, local, and global versions\\n\\nSo how\'s this different from existing version managers like nvm or volta? To start, it\'s written in\\nRust so it\'s _fast_ and doesn\'t suffer from being Bash only. Because of this, it\'s also\\nmulti-platform and will work on Windows. But the biggest different is that proto is language\\nagnostic and will support multiple languages. To start, it supports Node.js and Deno, but will be\\nexpanded to support our other toolchain languages like Bun, PHP, Ruby, and Python. Another cool\\nfeature is that it also manages versions of dependency managers like npm, yarn, and pnpm!\\n\\nWe\'re planning to launch proto at the start of Q2.\\n\\n## Expanding language support\\n\\nOur initial goal for moon was to provide a first-class build system for the frontend ecosystem that\\nfocused heavily on automation and the developer experience. We believe we\'ve accomplished this goal,\\nbut of course, nothing is ever actually complete, and so JavaScript, TypeScript, and Node.js support\\nwill continually be improved.\\n\\nHowever, that\'s not the entirety of the frontend ecosystem, as [Deno](https://deno.land/) and\\n[Bun](https://bun.sh/) have been gaining traction this past year, and of course, moon will support\\nboth of them as first-class platforms by end of year.\\n\\nFuthermore, we recently landed tier 1 support for 5 new languages: Rust, Ruby, PHP, Python, and Go.\\nOur end of year goal for these languages is to provide full tier 2 support. Tier 3 support is still\\nan unknown, as we need to investigate the best possible way to integrate these languages into the\\ntoolchain (this work is ongoing). We\'ll also add new languages based on demand.\\n\\nWith all that being said, this is our tenative timeline around\\n[language support](/docs#supported-languages) (which may shift at any time):\\n\\n- **Q1**\\n - Tier 1 support for Bun.\\n - Tier 2 support for Deno.\\n- **Q2**\\n - Tier 2 support for Bun, PHP.\\n - Tier 3 support for Deno.\\n- **Q3**\\n - Tier 2 support for Ruby, Python.\\n - Tier 3 support for Bun.\\n- **Q4**\\n - Tier 2 support for Rust, Go.\\n\\n## Supporting release workflows\\n\\nmoon currently excels at organizing projects, running tasks, and building artifacts, but it has no\\nsupport for release workflows. This is everything from capturing changes, bumping versions,\\ngenerating changelogs, and publishing to upstream registries. If you use\\n[Lerna](https://github.com/lerna/lerna) or [changesets](https://github.com/changesets/changesets),\\nyou should be very familiar with this workflow.\\n\\nSince moon supports monorepos and has in-depth knowledge of the project graph, we can support\\nrelease workflows with ease. Our goal is to support this workflow (for all languages) from start to\\nfinish by end of year, ideally much sooner than that!\\n\\n## More repository management tooling\\n\\nThe other aspect of moon is that it\'s a repository management tool as well as a build system. We\\nwant to embrace this even further by providing explicit functionality or automation when applicable.\\nSome examples of this are in-repository secrets management, git hooks management, code ownership and\\nquality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much\\nmore."},{"id":"v0.21","metadata":{"permalink":"/blog/v0.21","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx","source":"@site/blog/2022-12-19_v0.21.mdx","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","description":"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered","date":"2022-12-19T00:00:00.000Z","formattedDate":"December 19, 2022","tags":[{"label":"runner","permalink":"/blog/tags/runner"},{"label":"language","permalink":"/blog/tags/language"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"cache","permalink":"/blog/tags/cache"},{"label":"graph","permalink":"/blog/tags/graph"}],"readingTime":4.255,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.21","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","authors":["milesj"],"tags":["runner","language","platform","cache","graph"],"image":"./img/v0.21.png"},"prevItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"},"nextItem":{"title":"moon v0.20 - Toolchain, caching, and hydration improvements","permalink":"/blog/v0.20"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nHappy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered\\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\\nsystem! On top of this, we\'ve worked heavily on bug fixing, optimizations, and overall quality of\\nlife improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New tiered language support\\n\\nThe most common question we receive is whether we plan to support additional languages besides\\nNode.js, with Rust, Deno, and Bun being top of that list. Adding new languages is non-trivial, as we\\nneed to build abstractions that support and integrate with the language\'s ecosystem, primarily\\ndependency managers and resolution algorithms.\\n\\nThis is a very large upfront cost, with a huge time and resource commitment. To reduce this burden,\\nwe\'re introducing a tiered support structure, so that languages can be incrementally integrated into\\nmoon and adopted by consumers.\\n\\nThe tiers break down as follows:\\n\\n-  <Label text=\\"Tier 0\\" variant=\\"failure\\" />   **No direct integration** - Tool is not\\n directly supported in moon, but can still be ran using the\\n [\\"system\\" task platform](../docs/faq#can-we-run-other-languages), which expects the tool to exist\\n in the current environment.\\n-  <Label text=\\"Tier 1\\" variant=\\"warning\\" />   **Project categorization** - Projects can\\n configure their primary [language in `moon.yml`](../docs/config/project#language), and have a\\n dedicated Rust crate for metadata.\\n-  <Label text=\\"Tier 2\\" variant=\\"info\\" />   **Ecosystem platformization** - moon deeply\\n integrates with the language\'s ecosystem by parsing manifests, lockfiles, and other semantic files\\n to infer dependencies, tasks, and other necessary information.\\n-  <Label text=\\"Tier 3\\" variant=\\"success\\" />   **Toolchain integration** - Language is\\n directly supported in the toolchain, configured in\\n [`.moon/toolchain.yml`](../docs/config/toolchain), and will automatically be downloaded and\\n installed.\\n\\nTo learn more about our currently supported languages and their tiers,\\n[jump to the official documentation](/docs#supported-languages).\\n\\n> One important facet we\'d like to express, is that _all_ languages and tools fall into tier 0. Feel\\n> free to use anything you\'d like as a task command!\\n\\n## Basic support for Go, PHP, Python, Ruby, and, Rust\\n\\nAs announced above, we now incrementally support new languages, and have integrated the following 5\\nlanguages with tier 1 support: Go, PHP, Python, Ruby, and, Rust! Start using these languages today\\nby setting the [`language`](../docs/config/project#language) field in `moon.yml`, or by letting moon\\ninfer the language based on files in the project root (for example, `Cargo.toml` is Rust).\\n\\n```yaml title=\\"<project>/moon.yml\\"\\nlanguage: \'rust\'\\n\\ntasks:\\n build:\\n command: \'cargo build\'\\n inputs:\\n - \'src/**/*\'\\n - \'Cargo.toml\'\\n test:\\n command: \'cargo test\'\\n inputs:\\n - \'src/**/*\'\\n - \'tests/**/*\'\\n - \'Cargo.toml\'\\n```\\n\\n> Because these languages are tier 1, moon _does not_ install the language automatically, and will\\n> require the command to already exist in the environment. Furthermore, the project language will\\n> automatically set all task\'s `platform` to \\"system\\", at least until it\'s supported directly in the\\n> toolchain.\\n\\n## Interactive project and dependency graphs\\n\\nThanks to the amazing contribution from [Diptesh Choudhuri](https://github.com/IgnisDa), we now have\\ninteractive project and dependency graphs when running the\\n[`moon project-graph`](../docs/commands/project-graph) and\\n[`moon dep-graph`](../docs/commands/action-graph) commands respectively.\\n\\nThis is only the first iteration of these graphs. Expect more advanced features in the future, like\\nfiltering, node/edge inspection, exporting, and more!\\n\\n<Image src={require(\'./img/v0.21/graph.png\')} width=\\"80%\\" />\\n\\n## New `--updateCache` command line option\\n\\nOur caching layer is pretty powerful, as it helps to avoid tasks from running unnecessarily.\\nHowever, there are situations where you need to refresh or force update the cache outside of the\\n[`inputs`](../docs/config/project#inputs) list. This is currently achieved with the\\n[`--cache`](../docs/commands/overview#caching) option, like `moon --cache off run ...`, but this is\\nnon-ideal for a few reasons:\\n\\n1. It disables _all caching_, which means dependency installs/dedupes will continually be ran. This\\n adds a lot of unwanted overhead.\\n2. It requires you to backspace in the terminal to add the option _before_ `run` or `check`, as it\'s\\n a global option. A little tedious but important for experience.\\n\\nSo to work around these limitations, we\'ve added a new `--updateCache` (or `-u`) to both\\n[`moon run`](../docs/commands/run) and [`moon check`](../docs/commands/run), which will bypass\\nreading any existing cache items, but will force update the cache base on the latest run.\\n\\n```shell\\n$ moon run app:build --updateCache\\n```\\n\\n## New multi-status affected filtering\\n\\nWe support running tasks based on affected files using the\\n[`moon run --affected`](../docs/commands/run) command, which is great for reducing the amount of\\ntasks being ran, and for applying code quality tooling like Git hooks. However, you were only able\\nto apply a single status filter, like \\"deleted\\" or \\"modified\\", which was non-ideal... but no more!\\n\\nYou can now apply multiple statuses by passing the `--status` option multiple times.\\n\\n```shell\\n$ moon run :lint --affected --status modified --status added\\n```\\n\\nThis pairs nicely with the recent\\n[`affectedFiles` task option](../docs/config/project#affectedfiles) changes!\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.21.0) for a\\nfull list of changes.\\n\\n- Refactored project and dependency graphs for improved performance.\\n- Added args and env var variants to the `affectedFiles` task option.\\n- Added `--minimal` to `moon init` for quick scaffolding and prototyping.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.22 release!\\n\\n- Generalized hashing for use in any context (improved deps installation).\\n- More work on language integrations."},{"id":"v0.20","metadata":{"permalink":"/blog/v0.20","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-29_v0.20.mdx","source":"@site/blog/2022-11-29_v0.20.mdx","title":"moon v0.20 - Toolchain, caching, and hydration improvements","description":"With this release, we\'ve focused heavily on future proofing our toolchain and how it integrates with","date":"2022-11-29T00:00:00.000Z","formattedDate":"November 29, 2022","tags":[{"label":"hydration","permalink":"/blog/tags/hydration"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"generator","permalink":"/blog/tags/generator"},{"label":"runner","permalink":"/blog/tags/runner"}],"readingTime":3.79,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.20","title":"moon v0.20 - Toolchain, caching, and hydration improvements","authors":["milesj"],"tags":["hydration","toolchain","generator","runner"],"image":"./img/v0.20.png"},"prevItem":{"title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","permalink":"/blog/v0.21"},"nextItem":{"title":"Integrating TypeScript in a monorepo","permalink":"/blog/typescript-monorepo"}},"content":"With this release, we\'ve focused heavily on future proofing our toolchain and how it integrates with\\nmoon. We\'ve also landed a handful of quality of life improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Breaking changes\\n\\nTo start, we have a few breaking changes this release to be aware of!\\n\\n### Moved toolchain settings\\n\\nThe [`.moon/workspace.yml`](../docs/config/workspace) config file was getting rather bloated and\\ncomplicated, as it contained the projects list, settings for each toolchain language, and settings\\nfor each supported service (runner, generator, etc). Furthermore, this file will keep getting larger\\nwith each new language and service we support.\\n\\nTo future proof moon, and to land as many breaking changes before an official v1, we\'ve decided to\\nmove toolchain specific settings into a new file, [`.moon/toolchain.yml`](../docs/config/toolchain).\\nThis new file will house all language and dependency manager specific settings.\\n\\nTo migrate, move the `node` and `typescript` settings from `.moon/workspace.yml` to\\n`.moon/toolchain.yml`.\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n # ...\\n\\ntypescript:\\n # ...\\n```\\n\\n### Moved project-level overrides\\n\\nContinuing with the changes above, we\'ve also moved the `workspace.node` and `workspace.typescript`\\nfrom [`moon.yml`](../docs/config/project) into a new parent field, `toolchain`. We think this makes\\nmore sense.\\n\\n```yaml title=\\"moon.yml\\"\\n# Before\\nworkspace:\\n node:\\n version: \'...\'\\n\\n# After\\ntoolchain:\\n node:\\n version: \'...\'\\n```\\n\\n## Future of the toolchain\\n\\nWe\'re really proud of our toolchain, as it avoids an array problems that developers deal with on a\\nday to day basis, primarily around running tasks using the wrong version of Node.js or their chosen\\npackage manager. While we\'re in the process of supporting additional languages, starting with\\n[Deno](https://deno.land/), we had an idea... Since this is basically a better \\"version manager for\\ntools\\", why not extract this out into something else?\\n\\nAnd that\'s what we plan to do! Before we do so, we\'ve had to make some architectural changes, many\\nof which have landed in this release. During this process, we were able to implement an even better\\ntoolchain, polish many of the edge cases, and improve performance! Stay tuned for more information\\non this new tool!\\n\\n## Increased output hydration by 8-10x\\n\\nIn moon, hydration is the concept of unpacking an existing hashed artifact into a\\n[task\'s outputs](../docs/config/project#outputs) during a cache hit. In our previous implementation,\\nwe would delete all existing outputs before unpacking the archive to ensure a clean slate and to\\navoid stale files. While this worked, it wasn\'t the most performant, taking about 280ms for 1,000\\nfiles (which is still reasonably fast!).\\n\\nIn our new implementation, we now utilize a smart file tree diffing algorithm that will only unpack\\nfiles _with different content_, and will automatically remove stale files in the process. This has\\nresulted in a 10x performance increase, taking about 30ms! Multiply this by many projects, the\\nresults should be very apparent.\\n\\nWe hope you enjoy this improvement, as it\'s the first of many to come!\\n\\n## Cache any and all targets\\n\\nBy default, all [targets](../docs/concepts/target) that produce outputs are cached and archived. For\\ntargets that _do not_ produce outputs, like testing, linting, and typechecking, these are not\\ncached. This will result in slower CI times as they are continuously ran, even if nothing has\\nchanged. However with our new [remote caching](../docs/guides/remote-cache) layer, we can skip these\\nfrom running entirely!\\n\\nTo achieve this, we\'ve added a new setting to [`.moon/workspace.yml`](../docs/config/workspace)\\ncalled [`runner.archivableTargets`](../docs/config/workspace#archivabletargets). This setting\\naccepts a list of targets that should be archived, regardless of whether or not they produce\\noutputs.\\n\\nFor example, if we want to cache and archive testing, linting, and typechecking, we can define the\\nfollowing:\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nrunner:\\n archivableTargets:\\n - \':lint\'\\n - \':test\'\\n - \':typecheck\'\\n```\\n\\n## Path handling in generator templates\\n\\nOur code generation is powered by [Tera](https://tera.netlify.app/docs/#built-ins), a templating\\nengine with a ton of built-in utilities. However, it does not provide utilities for file paths, and\\nas such, we now provide `path_join` and `path_relative` filters.\\n\\n```twig\\n{{ some_path | path_relative(from = workspace_root) }}\\n```\\n\\nWe also now inject variables for the working directory, destination, and workspace root. This will\\nhelp with custom paths, especially within frontmatter!\\n[View the codegen docs for more information](../docs/guides/codegen#variables).\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.20.0) for a\\nfull list of changes.\\n\\n- Added `vcs.remoteCandidates` to `.moon/workspace.yml` to customize the remotes for Git to query\\n against.\\n- Added support for `moduleSuffixes` and `moduleDetection` in TypeScript `tsconfig.json` compiler\\n options.\\n- YAML files will now respect the closest `.editorconfig` file.\\n- Refactored terminal output for bette readability.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.21 release!\\n\\n- An interactive dependency and project graph visualizer.\\n- A more performant project graph.\\n- More quality of life improvements for affected files."},{"id":"typescript-monorepo","metadata":{"permalink":"/blog/typescript-monorepo","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-21_typescript-monorepo.mdx","source":"@site/blog/2022-11-21_typescript-monorepo.mdx","title":"Integrating TypeScript in a monorepo","description":"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is","date":"2022-11-21T00:00:00.000Z","formattedDate":"November 21, 2022","tags":[{"label":"typescript","permalink":"/blog/tags/typescript"},{"label":"monorepo","permalink":"/blog/tags/monorepo"}],"readingTime":0.505,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"typescript-monorepo","title":"Integrating TypeScript in a monorepo","authors":["milesj"],"tags":["typescript","monorepo"]},"prevItem":{"title":"moon v0.20 - Toolchain, caching, and hydration improvements","permalink":"/blog/v0.20"},"nextItem":{"title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","permalink":"/blog/v0.19"}},"content":"A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is\\na fair question, as there\'s no in-depth source of truth, or one perfect way of doing it. However, we\\ntook it upon ourselves to answer this question!\\n\\n\x3c!--truncate--\x3e\\n\\nBased on our experience scaling and managing frontend repositories in open source and large\\ncompanies like Airbnb and Coinbase, we\'re happy to\\n[announce an in-depth guide on using TypeScript project references in a monorepo](../docs/guides/javascript/typescript-project-refs)!\\n\\nWe hope you find this guide useful, and if you have any questions, feel free to discuss them in our\\n[Discord community](https://discord.gg/qCh9MEynv2)!"},{"id":"v0.19","metadata":{"permalink":"/blog/v0.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-14_v0.19.mdx","source":"@site/blog/2022-11-14_v0.19.mdx","title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","description":"With this release, we\'ve focused heavily on our remote caching architecture. Since this is a massive","date":"2022-11-14T00:00:00.000Z","formattedDate":"November 14, 2022","tags":[{"label":"affected","permalink":"/blog/tags/affected"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"},{"label":"dep-graph","permalink":"/blog/tags/dep-graph"}],"readingTime":2.895,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.19","title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","authors":["milesj"],"tags":["affected","remote-cache","dep-graph"],"image":"./img/v0.19.png"},"prevItem":{"title":"Integrating TypeScript in a monorepo","permalink":"/blog/typescript-monorepo"},"nextItem":{"title":"moon v0.18 - Improved configuration and initialization flow","permalink":"/blog/v0.18"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve focused heavily on our remote caching architecture. Since this is a massive\\ntask that requires much work behind the scenes, this overall release is rather light.\\n\\n\x3c!--truncate--\x3e\\n\\n## Remote caching beta\\n\\nA major request for moon is to support remote caching. This is a critical feature that allows\\nartifacts to be shared across machines and environments, by storing them in a cloud storage\\nprovider, like AWS S3.\\n\\nWe\'ve been working on this feature for months, primarily behind the scenes building the necessary\\nservices and tools, and we\'ve finally reached a point where we could integrate it with moon\\ndirectly! However, since this feature is very complex, it\'s not yet available to the public, but\\nwhile you wait, you can sign up for beta access! Jump over to the\\n[official remote caching documentation for more information](../docs/guides/remote-cache)!\\n\\nWe\'ll be working on remote caching through every release, continually polishing the implementation,\\nsupporting new features, enabling new regions, calculating pricing, so on and so forth. So stay\\ntuned!\\n\\n## Affected files filtering\\n\\nWe\'ve spent a good portion of this release working on affected detection for projects and tasks,\\nprimarily through `--affected`, and have uncovered and fixed a handful of edge cases. With that\\nbeing said, we asked ourselves, \\"How could we improve the developer experience even more\\"? What\\nabout passing the affected files list to the running task?\\n\\nAnd that\'s exactly what we\'ve done through the new task option\\n[`affectedFiles`](../docs/config/project#affectedfiles)! This option works in unison with the\\n`--affected` option, enabling some awesome functionality. Given the following config:\\n\\n```yaml title=\\"moon.yml\\" {6}\\ntasks:\\n lint:\\n command: \'eslint\'\\n options:\\n affectedFiles: true\\n```\\n\\nWhen we run this task _without_ `--affected`, it will append an argument for the current directory\\n(`.`). This will lint the entire project.\\n\\n```shell\\n# moon run project:lint\\neslint .\\n```\\n\\nHowever, when we run this task _with_ `--affected`, and have have touched files in the working tree,\\nit will now append an argument for each file that matches the task\'s `inputs`. This will now only\\nlint the provided files, _instead_ of the entire project.\\n\\n```shell\\n# moon run project:lint --affected\\neslint ./file.ts ./another/file.ts\\n```\\n\\nThis functionality is _perfect_ pre-commit hooks, and as such, we\'ve added a\\n[guide for utilizing this pattern with Git hooks](../docs/guides/vcs-hooks)!\\n\\n## Dependency graph optimizations\\n\\nOur dependency graph determines which targets to run, what tools to install, projects to sync, and\\nin which order. It\'s a very complex directed acyclic graph, and has only gotten more complicated\\nover the year, especially with the introduction of project-level tool overrides.\\n\\nWe decided to rewrite the dependency graph from the ground up to mitigate many of these issues,\\noptimize nodes and edges, reduce the number of data cloning, and to increase the overall\\nperformance. Everything will still work exactly the same (all of our existing tests passed with no\\nissue)!\\n\\nOn top of this, we\'ve also migrated the internals of moon to a new hashing algorithm that should see\\na 5-10% increase in performance!\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.19.0) for a\\nfull list of changes.\\n\\n- Package managers in the toolchain are now installed in isolation, instead of through Node.js.\\n- JSON files will now respect the closest `.editorconfig` file.\\n- Webhook payloads now include information about the running CI/CD environment.\\n- Generator can now merge JSON/YAML template files.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.20 release!\\n\\n- Continuation of remote caching work!\\n- Performance improvements for output hydration.\\n- Toolchain improvements."},{"id":"v0.18","metadata":{"permalink":"/blog/v0.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-31_v0.18.mdx","source":"@site/blog/2022-10-31_v0.18.mdx","title":"moon v0.18 - Improved configuration and initialization flow","description":"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we\'ve focused heavily on our internals and","date":"2022-10-31T00:00:00.000Z","formattedDate":"October 31, 2022","tags":[{"label":"project","permalink":"/blog/tags/project"},{"label":"config","permalink":"/blog/tags/config"},{"label":"init","permalink":"/blog/tags/init"},{"label":"node","permalink":"/blog/tags/node"}],"readingTime":2.09,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.18","title":"moon v0.18 - Improved configuration and initialization flow","authors":["milesj"],"tags":["project","config","init","node"],"image":"./img/v0.18.png"},"prevItem":{"title":"moon v0.19 - Remote caching beta, affected files, and graph optimization","permalink":"/blog/v0.19"},"nextItem":{"title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","permalink":"/blog/v0.17"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nHappy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we\'ve focused heavily on our internals and\\nbenchmarking performance metrics, so it\'s rather light on new features, but we still have some to\\nshow!\\n\\n\x3c!--truncate--\x3e\\n\\n## Improved projects configuration\\n\\nWhen moon initially launched, it required defining all\\n[`projects`](../docs/config/workspace#projects) using a map. In v0.3, we added support for globs to\\nease the burden of defining many projects. At this point, you had to choose between the 2 patterns,\\nwhich wasn\'t always ideal.\\n\\nTo improve upon this, you can now define a map _and_ globs using a 3rd pattern, like so.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nprojects:\\n globs:\\n - \'apps/*\'\\n - \'packages/*\'\\n sources:\\n www: \'www\'\\n```\\n\\n## Improved `moon init` flow\\n\\nThe `moon init` command hasn\'t changed much since our v0.1 release, and with many new features and\\nconfigurations over these last 18 releases, the initialization flow has fallen quite behind. We felt\\nit was the perfect time to modernize this command a bit.\\n\\nOn top of automatically detecting settings from the environment, the command will also now prompt\\nyou with additional questions while configuring Node.js or TypeScript. Here\'s an example of this\\nflow:\\n\\n<Image src={require(\'./img/v0.18/init-flow.png\')} width=\\"80%\\" />\\n\\nFurthermore, the command also supports enabling a new tool (appending configuration to\\n`.moon/workspace.yml`) into an _existing_ moon repository, by running `moon init --tool <name>`.\\n\\n## Customize `node` execution arguments\\n\\nmoon manages the Node.js binary in our toolchain, and runs all Node.js based tasks using this\\nbinary, instead of relying on the binary found in the developer\'s environment. Because of this, how\\n`node` is executed is abstracted away from end users.\\n\\nWhat if you wanted to use an [experimental loader](https://nodejs.org/api/esm.html#loaders) and\\nexecute TypeScript code at _runtime_? Or to preserve symlinks? Well, you couldn\'t... but no longer,\\nas we\'ve added a new setting, [`node.binExecArgs`](../docs/config/toolchain#binexecargs), that\\nallows additional `node` [CLI arguments](https://nodejs.org/api/cli.html#options) to be defined,\\nthat will be passed to _all_ executions.\\n\\n```yaml title=\\".moon/workspace.yml\\" {2-4}\\nnode:\\n binExecArgs:\\n - \'--loader\'\\n - \'@boost/module/loader\'\\n```\\n\\n> Learn more about the\\n> [Boost module loader](https://boostlib.dev/docs/module#ecmascript-module-loaders)!\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.18.0) for a\\nfull list of changes.\\n\\n- Default Node.js version has been updated to v18.12 (the new LTS) from v16.17.\\n- Updated the `moon check` command to support an `--all` flag.\\n- Improvements to how we store stdout/stderr logs for ran targets.\\n- Work tree dirty checks when running migration commands.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.19 release!\\n\\n- Laying the groundwork for _remote caching_!\\n- An in-repo secrets management layer.\\n- Performance and affected improvements."},{"id":"v0.17","metadata":{"permalink":"/blog/v0.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-21_v0.17.mdx","source":"@site/blog/2022-10-21_v0.17.mdx","title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","description":"With this release, we\'re landing the first iteration of our notifier service, starting with","date":"2022-10-21T00:00:00.000Z","formattedDate":"October 21, 2022","tags":[{"label":"notifier","permalink":"/blog/tags/notifier"},{"label":"runner","permalink":"/blog/tags/runner"},{"label":"config","permalink":"/blog/tags/config"},{"label":"editors","permalink":"/blog/tags/editors"},{"label":"vscode","permalink":"/blog/tags/vscode"}],"readingTime":3.18,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.17","title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","authors":["milesj"],"tags":["notifier","runner","config","editors","vscode"],"image":"./img/v0.17.png"},"prevItem":{"title":"moon v0.18 - Improved configuration and initialization flow","permalink":"/blog/v0.18"},"nextItem":{"title":"New VS Code extension!","permalink":"/blog/vscode-extension"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\nWith this release, we\'re landing the first iteration of our notifier service, starting with\\nwebhooks! We\'ve also spent some time working on quality of life improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Breaking changes\\n\\nTo start, we have a few breaking changes this release to be aware of!\\n\\n### Minor changes to ID formatting\\n\\nAn ID refers to many things \u2014 project names, task names, target segments, so on and so forth. When\\nparsing these values, we format them to remove unwanted characters, as these IDs are used in many\\ncontexts, many of which need to be strict.\\n\\nPreviously, we would remove unwanted characters entirely. Instead, we now replace them with dashes\\n(`-`) for better readability. Take the following for example:\\n\\n| ID | Old | New |\\n| :--------- | :-------- | :--------- |\\n| domain.com | domaincom | domain-com |\\n| build:esm | buildesm | build-esm |\\n\\n### Task `type` has been renamed to `platform`\\n\\nThis setting was renamed for a few reasons. To start, tasks actually have a\\n[type internally](../docs/concepts/task#types) that is not configured, but is inferred based on\\nwhat\'s configured. This was a bit confusing.\\n\\nAnd secondly, our toolchain refers to language integrations as platforms, and since this setting\\ndetermines which tool to run with, we wanted to align on the platform terminology.\\n\\n<Tabs\\n groupId=\\"task-type\\"\\n defaultValue=\\"before\\"\\n values={[\\n { label: \'Before\', value: \'before\' },\\n { label: \'After\', value: \'after\' },\\n ]}\\n>\\n<TabItem value=\\"before\\">\\n\\n```yaml\\ntasks:\\n clean:\\n command: \'rm -rf ./dist\'\\n type: \'system\'\\n```\\n\\n</TabItem>\\n<TabItem value=\\"after\\">\\n\\n```yaml\\ntasks:\\n clean:\\n command: \'rm -rf ./dist\'\\n platform: \'system\'\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n> Because of this change, the `$taskType` token was also renamed to `$taskPlatform`!\\n\\n## Webhook events (experimental)\\n\\nLooking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe\\nyou want to send Slack or Discord notifications? With our new notifier system, this is now possible\\nthrough webhooks!\\n\\nSimply enable the [`notifier.webhookUrl`](../docs/config/workspace#webhookurl) setting to start\\nreceiving events from your CI environments.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nnotifier:\\n webhookUrl: \'https://api.company.com/some/endpoint\'\\n```\\n\\n> View the [official guide on webhooks](../docs/guides/webhooks) for a full list of events and an\\n> example payload structure!\\n\\n## YAML anchors and aliases\\n\\nWe\'ve updated our YAML configuration files to support extended syntax,\\n[anchors (`&`) and aliases (`*`)](https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/).\\nWith this new syntax, you\'re now able to reduce the amount of duplication required in your config\\nfiles, especially when declaring tasks, as demonstrated below!\\n\\n<Tabs\\n groupId=\\"yaml\\"\\n defaultValue=\\"before\\"\\n values={[\\n { label: \'Before\', value: \'before\' },\\n { label: \'After\', value: \'after\' },\\n ]}\\n>\\n<TabItem value=\\"before\\">\\n\\n```yaml\\ntasks:\\n astro:\\n command: \'astro\'\\n local: true\\n\\n dev:\\n command: \'astro dev\'\\n inputs:\\n - \'@group(astro)\'\\n local: true\\n\\n build:\\n command: \'astro build\'\\n inputs:\\n - \'@group(astro)\'\\n outputs:\\n - \'dist\'\\n\\n check:\\n command: \'astro check\'\\n inputs:\\n - \'@group(astro)\'\\n deps:\\n - \'~:typecheck\'\\n\\n preview:\\n command: \'astro preview\'\\n inputs:\\n - \'@group(astro)\'\\n deps:\\n - \'~:build\'\\n local: true\\n```\\n\\n</TabItem>\\n<TabItem value=\\"after\\">\\n\\n```yaml\\n_astro: &astro\\n command: \'astro\'\\n inputs:\\n - \'@group(astro)\'\\n\\ntasks:\\n dev:\\n <<: *astro\\n args: \'dev\'\\n local: true\\n\\n build:\\n <<: *astro\\n args: \'build\'\\n outputs:\\n - \'dist\'\\n\\n check:\\n <<: *astro\\n args: \'check\'\\n\\n preview:\\n <<: *astro\\n args: \'preview\'\\n deps:\\n - \'~:build\'\\n local: true\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n## VS Code extension\\n\\nIf you missed the [announcement earlier this week](./vscode-extension), we released the initial\\nversion of our new VS Code extension! Give it a try and\\n[refer to the documentation](../docs/editors/vscode) for more information.\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.17.0) for a\\nfull list of changes.\\n\\n- Increased runtime performance and reduced memory consumption.\\n- Template enum variables can now define objects for their\\n [`values`](../docs/config/template#values).\\n- Task `deps` can now omit the `~:` prefix for tasks within the current project.\\n- The `moon check` command can now use the `--report` option.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.18 release!\\n\\n- Workflow improvements for `moon init`.\\n- Benchmarks and performance tuning.\\n- Individual stdout/stderr log files when running tasks."},{"id":"vscode-extension","metadata":{"permalink":"/blog/vscode-extension","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-17_vscode-extension.mdx","source":"@site/blog/2022-10-17_vscode-extension.mdx","title":"New VS Code extension!","description":"We\'re very excited to announce the initial release of our Visual Studio Code extension!","date":"2022-10-17T00:00:00.000Z","formattedDate":"October 17, 2022","tags":[{"label":"editors","permalink":"/blog/tags/editors"},{"label":"vscode","permalink":"/blog/tags/vscode"}],"readingTime":0.645,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"vscode-extension","title":"New VS Code extension!","authors":["milesj"],"tags":["editors","vscode"]},"prevItem":{"title":"moon v0.17 - Webhooks, extended YAML, and improved runtime performance","permalink":"/blog/v0.17"},"nextItem":{"title":"moon v0.16 - Per-project tool versions and TypeScript improvements","permalink":"/blog/v0.16"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWe\'re very excited to announce the initial release of our Visual Studio Code extension!\\n\\n\x3c!--truncate--\x3e\\n\\nIf you\'re a huge VS Code fan like us, you most likely use extensions in your everyday workflow. We\\nwant to enhance this experience by providing a fully integrated and interactive moon console! Here\'s\\na preview of what it looks like:\\n\\n<Image src={require(\'../docs/editors/vscode/projects-view.png\')} width=\\"40%\\" />\\n\\nExcited?? Want to learn more? Check out the official\\n[moonrepo.moon-console](https://marketplace.visualstudio.com/items?itemName=moonrepo.moon-console)\\nmarketplace page, or read the [official documentation](../docs/editors/vscode). This is only the\\nfirst iteration of the extension. Expect more advanced features in the future, like...\\n\\n- Schema validation for configuration files\\n- Autocompletion for configuration files\\n- Automatic running/building of projects in the background\\n- File type association\\n- Integrated language server\\n- And much more!"},{"id":"v0.16","metadata":{"permalink":"/blog/v0.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-06_v0.16.mdx","source":"@site/blog/2022-10-06_v0.16.mdx","title":"moon v0.16 - Per-project tool versions and TypeScript improvements","description":"With this release, we\'ve landed a long standing request of supporting project-level overrides for","date":"2022-10-06T00:00:00.000Z","formattedDate":"October 6, 2022","tags":[{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"runner","permalink":"/blog/tags/runner"},{"label":"generator","permalink":"/blog/tags/generator"},{"label":"typescript","permalink":"/blog/tags/typescript"},{"label":"node","permalink":"/blog/tags/node"}],"readingTime":3.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.16","title":"moon v0.16 - Per-project tool versions and TypeScript improvements","authors":["milesj"],"tags":["toolchain","runner","generator","typescript","node"],"image":"./img/v0.16.png"},"prevItem":{"title":"New VS Code extension!","permalink":"/blog/vscode-extension"},"nextItem":{"title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","permalink":"/blog/v0.15"}},"content":"With this release, we\'ve landed a long standing request of supporting project-level overrides for\\ntools configured in the workspace, as well as some quality of life improvements for TypeScript.\\n\\n\x3c!--truncate--\x3e\\n\\n## Per-project tool version overrides\\n\\nSince moons inception, our [toolchain](../docs/concepts/toolchain) has only supported a single\\nversion of a tool (Node.js), as we wanted to embrace the single version policy and encourage all\\nconsumers to keep their tooling version consistent across all projects for reliability. While this\\nworks flawlessly, it\'s not entirely realistic, as many companies have legacy projects that are stuck\\non older versions for whatever reason, and integrating them into moon was rather difficult.\\n\\nWell no more! We\'ve refactored our toolchain to support tool overrides on a project-by-project\\nbasis. Since we only support Node.js at the moment, this can be achieved with the new\\n[`workspace.node.version`](../docs/config/project#node) setting in\\n[`moon.yml`](../docs/config/project).\\n\\nFor example, if your workspace Node.js version is configured as v18.\\n\\n```yml title=\\".moon/workspace.yml\\"\\nnode:\\n version: \'18.0.0\'\\n```\\n\\nYou can now override this version at the project-level. Let\'s go with v14.\\n\\n```yml title=\\"<project>/moon.yml\\"\\nworkspace:\\n node:\\n version: \'14.0.0\'\\n```\\n\\nWhen running a task from a project with overrides, the toolchain will download, install, and\\nconfigure the new version behind the scenes. This new version will then be used to install\\ndependencies and execute the tasks commands.\\n\\n> Although we now support overriding the tool version, the workspace configured package manager\\n> (`node.packageManager`) and associated version cannot be overridden. This is unlikely to change.\\n\\n## Per-project dependency installs\\n\\nBecause of the toolchain refactor above, we now support per-project dependency installs as a welcome\\nside-effect. This is a necessary step in supporting new languages, especially for those that don\'t\\ninstall dependencies in the workspace for all projects, and must install them per project.\\n\\nThis also means that moon now supports non-`package.json` workspaces! If your repository _is not_\\nusing npm/pnpm/yarn workspaces, or a project _is not_ listed within the workspaces glob list,\\ndependencies will be installed within the project.\\n\\n## TypeScript improvements\\n\\n### Routing `outDir` to the cache\\n\\nA requirement for using project references is that each project must compile declarations (`.d.ts`)\\nso that consumers/dependents can resolve type information. While this makes sense, it becomes rather\\nunfortunate as each project folder is now littered with the declaration outputs, which are typically\\ngitignored.\\n\\nTo improve this experience, we\'re introducing a new setting\\n[`typescript.routeOutDirToCache`](../docs/config/toolchain#routeoutdirtocache), that will update the\\n`outDir` compiler option of _all_ projects to route to moon\'s cache directory (which should already\\nbe gitignored). This will standardize the use of project references for the entire repository.\\n\\nFor example, a project at \\"packages/components\\" will route to the following output directory:\\n\\n```json title=\\"<project>/tsconfig.json\\"\\n{\\n // ...\\n \\"compilerOptions\\": {\\n // ...\\n \\"outDir\\": \\"../../.moon/cache/types/packages/components\\"\\n }\\n}\\n```\\n\\n> If you require declarations to live within the project, for example an npm package that ships\\n> types, you should introduce an additional configuration to handle this, like\\n> `tsconfig.build.json`.\\n\\n### Mapping project references as `paths`\\n\\nmoon automatically keeps TypeScript project references in sync with the\\n[`typescript.syncProjectReferences`](../docs/config/toolchain#syncprojectreferences) setting, which\\nis great, but we can take it further. With the new\\n[`typescript.syncProjectReferencesToPaths`](../docs/config/toolchain#syncprojectreferencestopaths)\\nsetting, project references (either synced or explicitly defined) will _also_ be mapped to the\\n`paths` compiler option, automating the list of import aliases.\\n\\nFor example, if a reference has the package name `@brand/components`, the `paths` will be mapped\\nwith:\\n\\n```json title=\\"<project>/tsconfig.json\\"\\n{\\n // ...\\n \\"compilerOptions\\": {\\n // ...\\n \\"paths\\": {\\n \\"@brand/components\\": [\\"../shared/components/src/index.ts\\"],\\n \\"@brand/components/*\\": [\\"../shared/components/src/*\\"]\\n }\\n },\\n \\"references\\": [\\n {\\n \\"path\\": \\"../shared/components\\"\\n }\\n ]\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.16.0) for a\\nfull list of changes.\\n\\n- Template files can now be suffixed with `.tera` or `.twig` for\\n [syntax highlighting](../docs/guides/codegen#file-extensions).\\n- We now display more commands and information when running tasks.\\n- Declare implicit task dependencies with a new\\n [`runner.implicitDeps`](../docs/config/workspace#implicitdeps) setting.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.17 release!\\n\\n- Webhooks for important pipeline events (for real this time)!\\n- YAML anchors and references in config files.\\n- And [many more](https://github.com/moonrepo/moon/issues/356)..."},{"id":"v0.15","metadata":{"permalink":"/blog/v0.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-26_v0.15.mdx","source":"@site/blog/2022-09-26_v0.15.mdx","title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","description":"With this release, we\'ve focused heavily on Docker integration and enhancing the Dockerfile","date":"2022-09-26T00:00:00.000Z","formattedDate":"September 26, 2022","tags":[{"label":"generator","permalink":"/blog/tags/generator"},{"label":"docker","permalink":"/blog/tags/docker"}],"readingTime":3.495,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.15","title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","authors":["milesj"],"tags":["generator","docker"],"image":"./img/v0.15.png"},"prevItem":{"title":"moon v0.16 - Per-project tool versions and TypeScript improvements","permalink":"/blog/v0.16"},"nextItem":{"title":"moon v0.14 - Code generation and implicit dependencies","permalink":"/blog/v0.14"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\nWith this release, we\'ve focused heavily on Docker integration and enhancing the `Dockerfile`\\nworkflow, as well as some minor quality of life improvements for template files and run reports.\\n\\n\x3c!--truncate--\x3e\\n\\n## 1,000 \u2b50\ufe0f\ud83c\udf1f\u2b50\ufe0f!\\n\\nBefore we dive into the release, we want to thank everyone for the initial support, as we passed\\n[1,000 stars on GitHub](https://github.com/moonrepo/moon) earlier this week! moon was announced back\\nin June, and to reach this milestone in roughly 3 months is very exciting. We greatly appreciate the\\nsupport, and to everyone that is using moon and providing feedback, we thank you from the bottom of\\nour hearts!\\n\\nWe have a very long roadmap ahead of us, but are very excited to bring all of these features to you,\\nand to improve the overall developer experience for your monorepos! Here\'s to 10,000 stars!\\n\\n## First-class Docker support\\n\\n[Docker](https://www.docker.com/) is a very popular tool that is typically a part of a developers\\nworkflow, but is also a very tedious one, as `Dockerfile`s have to be manually curated for every\\nproject. We aim to mitigate this problem by supporting Docker as a first-class feature, and by\\nintroducing 2 new commands, [`moon docker scaffold`](../docs/commands/docker/scaffold) and\\n[`moon docker prune`](../docs/commands/docker/prune).\\n\\nThese commands will automate a `Dockerfile` as much as possible to effectively take advantage of\\nDocker\'s layer caching, multi-staged builds, to reduce the amount of manual `COPY` commands, to\\nreduce the overall size of the container or image, and much more. To demonstrate this, compare the\\nbefore and after `Dockerfile`s below!\\n\\n<Tabs\\n groupId=\\"dockerfile\\"\\n defaultValue=\\"before\\"\\n values={[\\n { label: \'Before\', value: \'before\' },\\n { label: \'After\', value: \'after\' },\\n ]}\\n>\\n<TabItem value=\\"before\\">\\n\\n```docker\\nFROM node:latest\\n\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n# Copy moon files\\nCOPY ./.moon ./.moon\\n\\n# Copy all package.json\'s and lockfiles\\nCOPY ./packages/cli/package.json ./packages/cli/package.json\\nCOPY ./packages/core-linux-arm64-gnu/package.json ./packages/core-linux-arm64-gnu/package.json\\nCOPY ./packages/core-linux-arm64-musl/package.json ./packages/core-linux-arm64-musl/package.json\\nCOPY ./packages/core-linux-x64-gnu/package.json ./packages/core-linux-x64-gnu/package.json\\nCOPY ./packages/core-linux-x64-musl/package.json ./packages/core-linux-x64-musl/package.json\\nCOPY ./packages/core-macos-arm64/package.json ./packages/core-macos-arm64/package.json\\nCOPY ./packages/core-macos-x64/package.json ./packages/core-macos-x64/package.json\\nCOPY ./packages/core-windows-x64-msvc/package.json ./packages/core-windows-x64-msvc/package.json\\nCOPY ./packages/runtime/package.json ./packages/runtime/package.json\\nCOPY ./packages/types/package.json ./packages/types/package.json\\nCOPY ./package.json ./package.json\\nCOPY ./yarn.lock ./yarn.lock\\nCOPY ./.yarn ./.yarn\\nCOPY ./.yarnrc.yml ./yarnrc.yml\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy project and required files\\nCOPY ./packages/types ./packages/types\\nCOPY ./packages/runtime ./packages/runtime\\n# COPY . .\\n\\n# Build the target\\nRUN moon run runtime:build\\n```\\n\\n</TabItem>\\n<TabItem value=\\"after\\">\\n\\n```docker\\n#### BASE\\nFROM node:latest AS base\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n#### WORKSPACE\\nFROM base AS workspace\\nWORKDIR /app\\n\\n# Copy entire repository and scaffold\\nCOPY . .\\nRUN moon docker scaffold runtime\\n\\n#### BUILD\\nFROM base AS build\\nWORKDIR /app\\n\\n# Copy workspace skeleton\\nCOPY --from=workspace /app/.moon/docker/workspace .\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy source files\\nCOPY --from=workspace /app/.moon/docker/sources .\\n\\n# Build the target\\nRUN moon run runtime:build\\n\\n# Prune workspace\\nRUN moon docker prune\\n```\\n\\n</TabItem>\\n</Tabs>\\n\\n> View the official [Docker usage guide](../docs/guides/docker) for an in-depth walkthrough of all\\n> these new features!\\n\\n## Frontmatter for template files\\n\\nWe released [templates and the generator in v0.14](./v0.14) for quick and easy code generation.\\nSince it was the initial release, it provided the bare minimum of features for common workflows.\\nWe\'ll continually improve this system over each release, and have done just that for this release,\\nas all template files now support [frontmatter](../docs/guides/codegen#frontmatter)! Frontmatter is\\na mechanism for declaring _per-file configuration_, and is denoted by `---` delimiters at the top of\\nthe file.\\n\\nThis allows you to do some really cool stuff, like overriding the destination path of the file using\\nthe `to` field, as well as taking full advantage of Tera\'s filters and conditional rendering!\\n\\n```twig title=\\"templates/react/components/base.tsx\\"\\n{% set component_name = name | pascal_case %}\\n\\n---\\nto: components/{{ component_name }}.tsx\\n---\\n\\nexport function {{ component_name }}() {\\n\\treturn <div />;\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.15.0) for a\\nfull list of changes.\\n\\n- Run reports (via `--report`) now include additional information, like the total duration, and\\n estimated time savings.\\n - The [moonrepo/run-report-action](https://github.com/marketplace/actions/moon-ci-run-reports) has\\n been updated with this information.\\n- Improved pnpm integration for Go/Rust binaries shipped in node modules.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.16 release!\\n\\n- Quality of life improvements for TypeScript.\\n- Per-project overrides for language/tool versions."},{"id":"v0.14","metadata":{"permalink":"/blog/v0.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-13_v0.14.mdx","source":"@site/blog/2022-09-13_v0.14.mdx","title":"moon v0.14 - Code generation and implicit dependencies","description":"With this release, we\'ve landed some new features that have been requested multiple times since","date":"2022-09-13T00:00:00.000Z","formattedDate":"September 13, 2022","tags":[{"label":"generator","permalink":"/blog/tags/generator"},{"label":"project-graph","permalink":"/blog/tags/project-graph"},{"label":"ci","permalink":"/blog/tags/ci"}],"readingTime":1.715,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.14","title":"moon v0.14 - Code generation and implicit dependencies","authors":["milesj"],"tags":["generator","project-graph","ci"]},"prevItem":{"title":"moon v0.15 - Enhanced Docker support and 1,000 stars!","permalink":"/blog/v0.15"},"nextItem":{"title":"moon v0.13 - Hashing and toolchain improvements","permalink":"/blog/v0.13"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve landed some new features that have been requested multiple times since\\nlaunch. A code generation and template scaffolding layer, as well as implicit dependency scanning\\nfor the project graph!\\n\\n\x3c!--truncate--\x3e\\n\\n## New `moon generate` command\\n\\nCode generation is the staple of any large company or repository. Want to spin up a new application?\\nWhat about an npm package? Or maybe third-party integrations? Avoid copy-and-pasting existing code,\\nand instead generate it with the new `moon generate` command, which is powered by our new generator\\nsystem.\\n\\nThe generator will locate a template by name on the file system (\\"npm-package\\" in the example\\nbelow), prompt and interpolate variables, render the files with [Tera](https://tera.netlify.app/) (a\\nRust based template engine), and write the files to the target destination.\\n\\n```shell\\n# Generate code from a template to a target directory\\n$ moon generate npm-package ./packages/example\\n```\\n\\nLearn more about [code generation in the official guide](../docs/guides/codegen)!\\n\\n## Implicit dependency scanning\\n\\nThis has been a request since moon\'s official release, and it\'s finally here! Up until now, if you\\nwanted project-to-project dependency relationships, you had to explicitly declare them with\\n[`dependsOn`](../docs/config/project#dependson). But thanks to a\\n[ton of](https://github.com/moonrepo/moon/pull/288)\\n[infrastructure](https://github.com/moonrepo/moon/pull/249) and\\n[platform](https://github.com/moonrepo/moon/pull/277) changes, we can now infer implicit\\ndependencies automatically!\\n\\nWe still suggest using explicit dependencies, as it provides more\\n[automation like project syncing](../docs/concepts/project#dependencies), but implicit is great for\\nadoption and migration purposes.\\n\\n## Report CI runs on pull requests\\n\\nWe\'re fans of continuous and easily accessible feedback, and as such, have released a new GitHub\\naction, [`moonrepo/run-report-action`](https://github.com/marketplace/actions/moon-ci-run-reports),\\nwhich reports the results of [`moon ci`](../docs/commands/ci) as a pull request comment. The report\\nlooks something like the following:\\n\\n<Image src={require(\'../static/img/github/run-report.png\')} width=\\"60%\\" />\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.14.0) for a\\nfull list of changes.\\n\\n- When running in a Docker container, caching is disabled in an effort to greatly reduce the size of\\n the image.\\n- Updated `moon setup` to also install Node.js dependencies.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.15 release!\\n\\n- Major Docker workflow improvements!\\n- Frontmatter configuration within template files."},{"id":"v0.13","metadata":{"permalink":"/blog/v0.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-01_v0.13.mdx","source":"@site/blog/2022-09-01_v0.13.mdx","title":"moon v0.13 - Hashing and toolchain improvements","description":"With this release, we\'ve landed some improvements to our smart hashing, and paved the road for","date":"2022-09-01T00:00:00.000Z","formattedDate":"September 1, 2022","tags":[{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":2.995,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.13","title":"moon v0.13 - Hashing and toolchain improvements","authors":["milesj"],"tags":["hasher","toolchain"]},"prevItem":{"title":"moon v0.14 - Code generation and implicit dependencies","permalink":"/blog/v0.14"}},"content":"With this release, we\'ve landed some improvements to our smart hashing, and paved the road for\\nadditional languagues and tooling.\\n\\n\x3c!--truncate--\x3e\\n\\n## Node.js is now optional\\n\\nTitle may seem confusing at first, but don\'t worry, everything is fine! For some context, moon has\\nbeen designed to be language agnostic as we plan to support more than JavaScript in the future.\\nHowever, some aspects of the codebase were hard-coded for JavaScript and made the assumption that\\nJavaScript will always be used, with one such aspect being the\\n[`node`](../docs/config/workspace#node) setting in\\n[`.moon/workspace.yml`](../docs/config/workspace).\\n\\nWe\'ve reworked this setting to be optional, which allows a repository to opt out of JavaScript.\\nRight now, this basically does nothing as we do not support other languages yet, but we felt it\\nnecessary to report it anyways! A side-effect of this change is that actions in the runner have been\\nrenamed, for example, `SetupToolchain` -> `SetupNodeToolchain`.\\n\\n## Improved hashing accuracy\\n\\nOur [smart hashing layer](../docs/concepts/cache#hashing) is pretty powerful, but was not entirely\\naccurate. Up until now, when hashing a Node.js project, we\'d include the `dependencies`,\\n`devDependencies`, and `peerDependencies` versions located within the project\'s `package.json` as\\nhash inputs. This was great, because if a dependency was explicitly upgraded in the `package.json`,\\nit would invalidate the previous hashes as the version number changed.\\n\\nHowever, what if the dependency was implicitly upgraded by another project, but the `package.json`\\nwas not modified? These kind of transitive changes were currently ignored by moon, but no longer, as\\nmoon will now resolve all `package.json` dependencies to the resolved version found in the root\\nlockfile (`package-lock.json`, `yarn.lock`, etc)!\\n\\nAt moon, we believe in providing consumers with the ability to configure to their needs, and as\\nsuch, have added a new [`hasher`](../docs/config/workspace#hasher) setting to\\n[`.moon/workspace.yml`](../docs/config/workspace). This setting will allow you to choose between the\\n2 hashing patterns above!\\n\\n## New `moon check` command\\n\\nIf you\'re like us, you\'re constantly testing, linting, typechecking, so on and so forth, a project\\nwhile developing. This was rather cumbersome, as you either had to use separate run commands\\n(`moon run project:test`, `moon run project:lint`, etc), or use the multi-run approach\\n(`moon run project:test project:lint`). Both approaches were not ideal for rapid development.\\n\\nTo simplify this process, we\'ve added a new [`moon check`](../docs/commands/check) command, that\\nwill automatically run _all_ build and test tasks for a project (or many projects)! Local and non-CI\\ntasks will _not_ be ran.\\n\\n```shell\\n# Check project at current working directory\\n$ moon check\\n\\n# Check project by name\\n$ moon check app\\n\\n# Check multiple projects by name\\n$ moon check client server\\n```\\n\\n## New `@moonrepo/types` package\\n\\nWe have many ideas for moon specific npm packages that we plan to release, but before we do that, we\\nneed to ensure all of them are built with the correct interfaces. To solve this, we are shipping a\\nnew package, [@moonrepo/types](https://www.npmjs.com/package/@moonrepo/types), that simply publishes\\nTypeScript declarations. It contains everything from project and task shapes, configuration\\nstructures, runner information, and more.\\n\\n```ts\\nimport type { ProjectConfig } from \'@moonrepo/types\';\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.13.0) for a\\nfull list of changes.\\n\\n- The runner will now fail with an error if a task has defined `outputs` but an output was not\\n created after the task is executed. This change was made so that artifacts are deterministic.\\n- The `actionRunner` setting in [`.moon/workspace.yml`](../docs/config/workspace) was renamed to\\n `runner`.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.14 release!\\n\\n- A `moon generate` command to generate new projects, files, scaffolding, and more from pre-defined\\n templates.\\n- Implicit dependency discovery. moon will now scan manifest files and determine project\\n relationships."}]}')}}]); \ No newline at end of file diff --git a/assets/js/b38a02d7.228fb587.js b/assets/js/b38a02d7.228fb587.js new file mode 100644 index 00000000000..4c31cce21d2 --- /dev/null +++ b/assets/js/b38a02d7.228fb587.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98685],{42683:a=>{a.exports=JSON.parse('{"label":"railway","permalink":"/blog/tags/railway","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b38a02d7.25ef285b.js b/assets/js/b38a02d7.25ef285b.js deleted file mode 100644 index 689bead857d..00000000000 --- a/assets/js/b38a02d7.25ef285b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8685],{42683:a=>{a.exports=JSON.parse('{"label":"railway","permalink":"/blog/tags/railway","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b49860f1.30799f2b.js b/assets/js/b49860f1.30799f2b.js new file mode 100644 index 00000000000..fd7674ba748 --- /dev/null +++ b/assets/js/b49860f1.30799f2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[55649],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),g=p(n),m=r,d=g["".concat(s,".").concat(m)]||g[m]||c[m]||a;return n?o.createElement(d,i(i({ref:t},u),{},{components:n})):o.createElement(d,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}g.displayName="MDXCreateElement"},79353:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={title:"Plugins"},i=void 0,l={unversionedId:"proto/plugins",id:"proto/plugins",title:"Plugins",description:"proto supports a pluggable architecture as a means for consumers to integrate and manage custom",source:"@site/docs/proto/plugins.mdx",sourceDirName:"proto",slug:"/proto/plugins",permalink:"/docs/proto/plugins",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/plugins.mdx",tags:[],version:"current",frontMatter:{title:"Plugins"},sidebar:"proto",previous:{title:"Supported tools",permalink:"/docs/proto/tools"},next:{title:"TOML",permalink:"/docs/proto/toml-plugin"}},s={},p=[{value:"Enabling plugins",id:"enabling-plugins",level:2},{value:"<code>source:</code>",id:"source",level:3},{value:"<code>github:</code>",id:"github",level:3},{value:"Creating plugins",id:"creating-plugins",level:2}],u={toc:p};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"proto supports a pluggable architecture as a means for consumers to integrate and manage custom\ntools (languages, CLIs, etc) within proto's toolchain. It's not possible for proto to support\n",(0,r.kt)("em",{parentName:"p"},"everything")," in core directly, so plugins are a way for the community to extend the toolchain to\ntheir needs."),(0,r.kt)("h2",{id:"enabling-plugins"},"Enabling plugins"),(0,r.kt)("p",null,"Plugins can be enabled by configuring them in\n",(0,r.kt)("a",{parentName:"p",href:"./config#plugins"},(0,r.kt)("inlineCode",{parentName:"a"},".prototools")," or ",(0,r.kt)("inlineCode",{parentName:"a"},"~/.proto/config.toml"))," files, within the ",(0,r.kt)("inlineCode",{parentName:"p"},"[plugins]")," section,\nwhich maps a plugin to a locator string. The map key is the plugin name ",(0,r.kt)("em",{parentName:"p"},"in kebab-case"),", which is\nused as the binary/tool name in proto, and also the name for configuration and cache purposes. The\nmap value is a locator string that defines a scope and source location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\n<id> = "<scope>:<location>"\n')),(0,r.kt)("p",null,"The following locator patterns are supported:"),(0,r.kt)("h3",{id:"source"},(0,r.kt)("inlineCode",{parentName:"h3"},"source:")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"source:")," locator scope supports both secure URLs and file system paths (relative from the\nconfig file). Files will be used as-is, while URLs will be downloaded to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/plugins"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nfile-tool = "source:plugins/example.wasm"\nurl-tool = "source:https://domain.com/path/to/plugins/example.wasm"\n')),(0,r.kt)("h3",{id:"github"},(0,r.kt)("inlineCode",{parentName:"h3"},"github:")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"github:")," locator scope can be used to target and download an asset from a specific GitHub\nrelease. The location must be an organization + repository slug (owner/repo), and the release ",(0,r.kt)("em",{parentName:"p"},"must\nhave")," a ",(0,r.kt)("inlineCode",{parentName:"p"},".wasm")," asset available to download."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\ngithub-tool = "github:moonrepo/example-repo"\n')),(0,r.kt)("p",null,"By default, the latest release will be used and cached for 7 days. If you'd prefer to target a\nspecific release, append the release tag to the end of the location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\ngithub-tool = "github:moonrepo/example-repo@v1.2.3"\n')),(0,r.kt)("p",null,"This strategy is powered by the ",(0,r.kt)("a",{parentName:"p",href:"https://api.github.com/"},"GitHub API")," and is subject to rate\nlimiting. If running in a CI environment, we suggesting setting a ",(0,r.kt)("inlineCode",{parentName:"p"},"GITHUB_TOKEN")," environment\nvariable to authorize API requests with. If using GitHub Actions, it's as simple as:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"# In some job or step...\nenv:\n GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'\n")),(0,r.kt)("h2",{id:"creating-plugins"},"Creating plugins"),(0,r.kt)("p",null,"To ease the plugin development process, proto supports 2 types of plugins, a\n",(0,r.kt)("a",{parentName:"p",href:"./toml-plugin"},"TOML based plugin")," for basic use cases, and a ",(0,r.kt)("a",{parentName:"p",href:"./wasm-plugin"},"WASM based plugin")," for\nadvanced use cases."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b49860f1.ff89a7f6.js b/assets/js/b49860f1.ff89a7f6.js deleted file mode 100644 index 1b107199aec..00000000000 --- a/assets/js/b49860f1.ff89a7f6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2700],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),g=p(n),m=r,d=g["".concat(s,".").concat(m)]||g[m]||c[m]||a;return n?o.createElement(d,i(i({ref:t},u),{},{components:n})):o.createElement(d,i({ref:t},u))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}g.displayName="MDXCreateElement"},79353:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={title:"Plugins"},i=void 0,l={unversionedId:"proto/plugins",id:"proto/plugins",title:"Plugins",description:"proto supports a pluggable architecture as a means for consumers to integrate and manage custom",source:"@site/docs/proto/plugins.mdx",sourceDirName:"proto",slug:"/proto/plugins",permalink:"/docs/proto/plugins",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/plugins.mdx",tags:[],version:"current",frontMatter:{title:"Plugins"},sidebar:"proto",previous:{title:"Supported tools",permalink:"/docs/proto/tools"},next:{title:"TOML",permalink:"/docs/proto/toml-plugin"}},s={},p=[{value:"Enabling plugins",id:"enabling-plugins",level:2},{value:"<code>source:</code>",id:"source",level:3},{value:"<code>github:</code>",id:"github",level:3},{value:"Creating plugins",id:"creating-plugins",level:2}],u={toc:p};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"proto supports a pluggable architecture as a means for consumers to integrate and manage custom\ntools (languages, CLIs, etc) within proto's toolchain. It's not possible for proto to support\n",(0,r.kt)("em",{parentName:"p"},"everything")," in core directly, so plugins are a way for the community to extend the toolchain to\ntheir needs."),(0,r.kt)("h2",{id:"enabling-plugins"},"Enabling plugins"),(0,r.kt)("p",null,"Plugins can be enabled by configuring them in\n",(0,r.kt)("a",{parentName:"p",href:"./config#plugins"},(0,r.kt)("inlineCode",{parentName:"a"},".prototools")," or ",(0,r.kt)("inlineCode",{parentName:"a"},"~/.proto/config.toml"))," files, within the ",(0,r.kt)("inlineCode",{parentName:"p"},"[plugins]")," section,\nwhich maps a plugin to a locator string. The map key is the plugin name ",(0,r.kt)("em",{parentName:"p"},"in kebab-case"),", which is\nused as the binary/tool name in proto, and also the name for configuration and cache purposes. The\nmap value is a locator string that defines a scope and source location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\n<id> = "<scope>:<location>"\n')),(0,r.kt)("p",null,"The following locator patterns are supported:"),(0,r.kt)("h3",{id:"source"},(0,r.kt)("inlineCode",{parentName:"h3"},"source:")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"source:")," locator scope supports both secure URLs and file system paths (relative from the\nconfig file). Files will be used as-is, while URLs will be downloaded to ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/plugins"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nfile-tool = "source:plugins/example.wasm"\nurl-tool = "source:https://domain.com/path/to/plugins/example.wasm"\n')),(0,r.kt)("h3",{id:"github"},(0,r.kt)("inlineCode",{parentName:"h3"},"github:")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"github:")," locator scope can be used to target and download an asset from a specific GitHub\nrelease. The location must be an organization + repository slug (owner/repo), and the release ",(0,r.kt)("em",{parentName:"p"},"must\nhave")," a ",(0,r.kt)("inlineCode",{parentName:"p"},".wasm")," asset available to download."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\ngithub-tool = "github:moonrepo/example-repo"\n')),(0,r.kt)("p",null,"By default, the latest release will be used and cached for 7 days. If you'd prefer to target a\nspecific release, append the release tag to the end of the location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\ngithub-tool = "github:moonrepo/example-repo@v1.2.3"\n')),(0,r.kt)("p",null,"This strategy is powered by the ",(0,r.kt)("a",{parentName:"p",href:"https://api.github.com/"},"GitHub API")," and is subject to rate\nlimiting. If running in a CI environment, we suggesting setting a ",(0,r.kt)("inlineCode",{parentName:"p"},"GITHUB_TOKEN")," environment\nvariable to authorize API requests with. If using GitHub Actions, it's as simple as:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"# In some job or step...\nenv:\n GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'\n")),(0,r.kt)("h2",{id:"creating-plugins"},"Creating plugins"),(0,r.kt)("p",null,"To ease the plugin development process, proto supports 2 types of plugins, a\n",(0,r.kt)("a",{parentName:"p",href:"./toml-plugin"},"TOML based plugin")," for basic use cases, and a ",(0,r.kt)("a",{parentName:"p",href:"./wasm-plugin"},"WASM based plugin")," for\nadvanced use cases."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b652e05c.59ecf577.js b/assets/js/b652e05c.59ecf577.js deleted file mode 100644 index 3eb08870791..00000000000 --- a/assets/js/b652e05c.59ecf577.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5653],{31566:e=>{e.exports=JSON.parse('{"label":"node","permalink":"/blog/tags/node","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/b652e05c.9ed4cc40.js b/assets/js/b652e05c.9ed4cc40.js new file mode 100644 index 00000000000..32d5d0fba47 --- /dev/null +++ b/assets/js/b652e05c.9ed4cc40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95653],{31566:e=>{e.exports=JSON.parse('{"label":"node","permalink":"/blog/tags/node","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/b65c3624.34f6cb5e.js b/assets/js/b65c3624.34f6cb5e.js deleted file mode 100644 index aa38f2ad156..00000000000 --- a/assets/js/b65c3624.34f6cb5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[730],{35318:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>d});var o=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?s(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,o,a=function(e,n){if(null==e)return{};var t,o,a={},s=Object.keys(e);for(o=0;o<s.length;o++)t=s[o],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)t=s[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=o.createContext({}),c=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},m=function(e){var n=c(e.components);return o.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=c(t),d=a,g=u["".concat(l,".").concat(d)]||u[d]||p[d]||s;return t?o.createElement(g,r(r({ref:n},m),{},{components:t})):o.createElement(g,r({ref:n},m))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var s=t.length,r=new Array(s);r[0]=u;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,r[1]=i;for(var c=2;c<s;c++)r[c]=t[c];return o.createElement.apply(null,r)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},74903:(e,n,t)=>{t.d(n,{Z:()=>g});var o=t(27378),a=t(37140),s=t(75484),r=t(99213);const i="admonition_uH4V",l="admonitionHeading_P5_N",c="admonitionIcon_MF44",m="admonitionContent_yySL";const p={note:{infimaClassName:"secondary",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:o.createElement(r.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:o.createElement(r.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:o.createElement(r.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:o.createElement(r.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 16 16"},o.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:o.createElement(r.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},u={secondary:"note",important:"info",success:"tip",warning:"danger"};function d(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=o.Children.toArray(e),t=n.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,n.filter((e=>e!==t)));return{mdxAdmonitionTitle:t,rest:a}}(e.children);return{...e,title:e.title??n,children:t}}function g(e){const{children:n,type:t,title:r,icon:g}=d(e),h=function(e){const n=u[e]??e;return p[n]||(console.warn(`No admonition config found for admonition type "${n}". Using Info as fallback.`),p.info)}(t),k=r??h.label,{iconComponent:y}=h,f=g??o.createElement(y,null);return o.createElement("div",{className:(0,a.Z)(s.k.common.admonition,s.k.common.admonitionType(e.type),"alert",`alert--${h.infimaClassName}`,i)},o.createElement("div",{className:l},o.createElement("span",{className:c},f),k),o.createElement("div",{className:m},n))}},83893:(e,n,t)=>{t.d(n,{Z:()=>i});var o=t(27378),a=t(74903),s=t(83828);const r={bun:"Bun",deno:"Deno",go:"Go",node:"Node.js",php:"PHP",python:"Python",ruby:"Ruby",rust:"Rust"};function i(e){let{children:n,noError:t}=e;const i=(0,s.gE)(),l=o.Children.toArray(n).find((e=>!!o.isValidElement(e)&&("string"==typeof e.key&&e.key.endsWith(i))));return l?o.createElement(o.Fragment,null,l):t?null:o.createElement(a.Z,{type:"danger"},"Sorry, there's no example for ",r[i]||i,". Try switching to another language for the time being!")}},83828:(e,n,t)=>{t.d(n,{ZP:()=>c,gE:()=>l});var o=t(27378),a=t(35331);const s=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function r(){return"undefined"!=typeof window&&"localStorage"in window}function i(){return(r()?localStorage.getItem("moonrepo.language"):null)??"node"}function l(){const[e,n]=(0,o.useState)(i());return(0,o.useEffect)((()=>{const e=e=>{n(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function c(){const[e,n]=(0,o.useState)(i()),t=(0,a.TH)(),l=(0,o.useCallback)((e=>{let{target:t}=e;const o=t.value;if(n(o),r())try{localStorage.setItem("moonrepo.language",o)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:o}))}),[]);return s.some((e=>t.pathname.startsWith(e)))?o.createElement("select",{value:e,onChange:l,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},o.createElement("option",{value:"deno"},"Deno"),o.createElement("option",{value:"go"},"Go"),o.createElement("option",{value:"node"},"Node.js"),o.createElement("option",{value:"php"},"PHP"),o.createElement("option",{value:"python"},"Python"),o.createElement("option",{value:"ruby"},"Ruby"),o.createElement("option",{value:"rust"},"Rust")):null}},9634:(e,n,t)=>{t.d(n,{Z:()=>p});var o=t(27378),a=t(81884),s=t(25773),r=t(9928),i=t(83469),l=t(31792);const c={discord:r.omb,github:r.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:r.mdU,workspace:i.emM,"workspace-config":i.cRF};function m(e){let{name:n,...t}=e;return o.createElement(l.Z,(0,s.Z)({},t,{icon:c[n]}))}function p(e){let{links:n}=e;return o.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},n.map((e=>o.createElement(a.default,{key:e.url,href:e.url,className:"focus:outline-none"},o.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},o.createElement("div",{className:"flex-shrink-0"},o.createElement(m,{size:"lg",name:e.icon})),o.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},52746:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>I,contentTitle:()=>S,default:()=>W,frontMatter:()=>L,metadata:()=>z,toc:()=>H});var o=t(25773),a=(t(27378),t(35318)),s=t(9634),r=t(83893);const i={toc:[]};function l(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},i,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'typescript'\n\nfileGroups:\n sources:\n - 'src/**/*'\n - 'deno.*'\n tests:\n - 'tests/**/*'\n\ntasks:\n dev:\n command: 'deno task dev'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: 'deno fmt --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n lint:\n command: 'deno lint'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n test:\n command: 'deno test --parallel'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n typecheck:\n command: 'deno check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'tsconfig.json'\n - '/tsconfig.json'\n")))}l.isMDXComponent=!0;const c={toc:[]};function m(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'go'\n\nfileGroups:\n sources:\n - 'cmd/**/*'\n - 'include/**/*'\n - 'pkg/**/*'\n\ntasks:\n build:\n command: 'go build -o @out(0)'\n inputs:\n - '@globs(sources)'\n outputs:\n - 'bin'\n dev:\n command: 'go run'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: 'go fmt'\n inputs:\n - '@globs(sources)'\n lint:\n command: 'staticcheck'\n inputs:\n - '@globs(sources)'\n - 'staticcheck.conf'\n test:\n command: 'go test'\n inputs:\n - '@globs(sources)'\n vet:\n command: 'go vet'\n inputs:\n - '@globs(sources)'\n")))}m.isMDXComponent=!0;const p={toc:[]};function u(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'javascript'\n\nfileGroups:\n sources:\n - 'src/**/*'\n tests:\n - 'tests/**/*'\n\ntasks:\n build:\n command: 'webpack build --output-path @out(0)'\n inputs:\n - '@globs(sources)'\n - 'webpack.config.js'\n outputs:\n - 'build'\n dev:\n command: 'webpack server'\n inputs:\n - '@globs(sources)'\n - 'webpack.config.js'\n local: true\n format:\n command: 'prettier --check .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '/prettier.config.js'\n lint:\n command: 'eslint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.eslintignore'\n - '.eslintrc.js'\n - '/.eslintrc.js'\n test:\n command: 'jest .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'jest.config.js'\n typecheck:\n command: 'tsc --build'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'tsconfig.json'\n - '/tsconfig.json'\n")),(0,a.kt)("p",null,"To ease the migration process, we offer the\n",(0,a.kt)("a",{parentName:"p",href:"./commands/migrate/from-package-json"},(0,a.kt)("inlineCode",{parentName:"a"},"moon migrate from-package-json"))," command, which will convert\na project's ",(0,a.kt)("inlineCode",{parentName:"p"},"package.json")," scripts into ",(0,a.kt)("inlineCode",{parentName:"p"},"moon.yml")," tasks, while also determining project\ndependencies (",(0,a.kt)("a",{parentName:"p",href:"./config/project#dependsOn"},(0,a.kt)("inlineCode",{parentName:"a"},"dependsOn")),"). This needs to be ran ",(0,a.kt)("em",{parentName:"p"},"per project"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon migrate from-package-json <project>\n")),(0,a.kt)("p",null,"This command will do its best to parse and convert scripts, but this isn't always a simple 1:1\nconversion, especially when determining dependency chains. For this reason alone, we suggest\n",(0,a.kt)("em",{parentName:"p"},"manually curating")," tasks, but the migrate command well get you most of the way!"))}u.isMDXComponent=!0;const d={toc:[]};function g(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'php'\n\nfileGroups:\n sources:\n - 'app/**/*'\n tests:\n - 'tests/**/*'\n\ntasks:\n dev:\n command: 'php artisan serve'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: './vendor/bin/phpcbf .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.phpcs.xml'\n lint:\n command: './vendor/bin/phpstan analyse'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'phpstan.neon'\n test:\n command: './vendor/bin/phpunit .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'phpunit.xml'\n")))}g.isMDXComponent=!0;const h={toc:[]};function k(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},h,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'python'\n\nfileGroups:\n sources:\n - 'flaskr/**/*'\n - 'setup.py'\n tests:\n - 'tests/**/*'\n\ntasks:\n dev:\n command: 'flask run'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: 'black --check .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n lint:\n command: 'pylint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n - '.pylintrc'\n test:\n command: 'python -m unittest'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n typecheck:\n command: 'mypy .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'mypy.ini'\n - 'pyproject.toml'\n")))}k.isMDXComponent=!0;const y={toc:[]};function f(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},y,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'ruby'\n\nfileGroups:\n sources:\n - 'lib/**/*'\n - 'view/**/*'\n tests:\n - 'spec/**/*'\n\ntasks:\n dev:\n command: './bin/rails server'\n local: true\n format:\n command: 'rubocop -x'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.rubocop.yml'\n lint:\n command: 'rubocop -l'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.rubocop.yml'\n test:\n command: 'rspec'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.rspec'\n typecheck:\n command: 'srb tc'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'sorbet/config'\n")))}f.isMDXComponent=!0;const b={toc:[]};function v(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},b,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\n\nfileGroups:\n sources:\n - 'src/**/*'\n tests:\n - 'benches/**/*'\n - 'tests/**/*'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - '@globs(sources)'\n - 'Cargo.toml'\n dev:\n command: 'cargo run'\n inputs:\n - '@globs(sources)'\n - 'Cargo.toml'\n local: true\n format:\n command: 'cargo fmt --all --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n lint:\n command: 'cargo clippy --workspace --all-targets'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n test:\n command: 'cargo test --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n typecheck:\n command: 'cargo check --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n")))}v.isMDXComponent=!0;const w={toc:[]};function N(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},w,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Deno provides a built-in task runner through the\n",(0,a.kt)("a",{parentName:"p",href:"https://deno.land/manual@v1.31.1/tools/task_runner"},(0,a.kt)("inlineCode",{parentName:"a"},"deno task")," command"),". While Deno tasks are\ngreat, they're not as efficient as moon. They ",(0,a.kt)("em",{parentName:"p"},"do not")," support granular inputs, smart hashing,\nincremental caching, and all the other performance benefits that moon provides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from Deno tasks. Instead, you can simply run\nthem from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'typescript'\n\ntasks:\n analyze:\n command: 'deno task analyze'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Rakefile'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"When Deno tasks are ran through moon tasks, the current working directory is set to the project\nroot.")))}N.isMDXComponent=!0;const C={toc:[]};function j(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},C,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Go provides no mechanism for declaring reusable scripts. Because of this, there's no alternative to\nmoon tasks."))}j.isMDXComponent=!0;const x={toc:[]};function T(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},x,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"As a frontend developer you're already familiar with the Node.js ecosystem, specifically around\ndefining and using ",(0,a.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, and you may not want to deviate from this. Don't worry,\nsimply enable the ",(0,a.kt)("a",{parentName:"p",href:"./config/toolchain#infertasksfromscripts"},(0,a.kt)("inlineCode",{parentName:"a"},"node.inferTasksFromScripts"))," setting\nto automatically create moon tasks from a project's scripts! These can then be ran with\n",(0,a.kt)("a",{parentName:"p",href:"./commands/run"},(0,a.kt)("inlineCode",{parentName:"a"},"moon run")),"."),(0,a.kt)("p",null,"This implementation is a simple abstraction that runs ",(0,a.kt)("inlineCode",{parentName:"p"},"npm run <script>")," (or pnpm/yarn) in the\nproject directory as a child process. While this works, relying on ",(0,a.kt)("inlineCode",{parentName:"p"},"package.json")," scripts incurs the\nfollowing risks and disadvantages:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"./config/project#inputs"},"Inputs")," default to ",(0,a.kt)("inlineCode",{parentName:"li"},"**/*"),":",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"A change to every project relative file will mark the task as affected, even those not necessary\nfor the task. Granular input control is lost."),(0,a.kt)("li",{parentName:"ul"},"A change to workspace relative files ",(0,a.kt)("em",{parentName:"li"},"will not")," mark the task as affected. For example, a change\nto ",(0,a.kt)("inlineCode",{parentName:"li"},"/prettier.config.js")," would not be detected for a ",(0,a.kt)("inlineCode",{parentName:"li"},"npm run format")," script."))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"./config/project#outputs"},"Outputs")," default to an empty list unless:",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"moon will attempt to extract outputs from arguments, by looking for variations of ",(0,a.kt)("inlineCode",{parentName:"li"},"--out"),",\n",(0,a.kt)("inlineCode",{parentName:"li"},"--outFile"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"--dist-dir"),", etc."),(0,a.kt)("li",{parentName:"ul"},"If no output could be determined, builds will not be cached and hydrated."))),(0,a.kt)("li",{parentName:"ul"},"Tasks will always ",(0,a.kt)("a",{parentName:"li",href:"./config/project#runinci"},"run in CI")," unless:",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"moon will attempt to determine invalid CI tasks by looking for popular command usage, for\nexample: ",(0,a.kt)("inlineCode",{parentName:"li"},"webpack serve"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"next dev"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"--watch")," usage, and more. This ",(0,a.kt)("em",{parentName:"li"},"is not")," an exhaustive\ncheck."),(0,a.kt)("li",{parentName:"ul"},"The script name contains variations of ",(0,a.kt)("inlineCode",{parentName:"li"},"dev"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"start"),", or ",(0,a.kt)("inlineCode",{parentName:"li"},"serve"),".")))))}T.isMDXComponent=!0;const M={toc:[]};function E(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},M,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The PHP ecosystem has standardized (somewhat) around\n",(0,a.kt)("a",{parentName:"p",href:"https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands"},"Composer scripts")," for\nreusability. While these work, they're not as efficient as moon. They ",(0,a.kt)("em",{parentName:"p"},"do not")," support granular\ninputs, smart hashing, incremental caching, and all the other performance benefits that moon\nprovides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from Composer. Instead, you can simply run\nthese scripts from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'php'\n\ntasks:\n test:\n command: 'php composer.phar run-script test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'composer.json'\n")),(0,a.kt)("p",null,"In the future, we aim to infer these scripts automatically, and provide migration scripts."))}E.isMDXComponent=!0;const D={toc:[]};function P(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},D,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The Python ecosystem has support for many task runners such as ",(0,a.kt)("a",{parentName:"p",href:"https://pydoit.org/"},"doit")," and\n",(0,a.kt)("a",{parentName:"p",href:"https://pypyr.io/"},"pypyr"),". While these are great, they're not as efficient as moon. They ",(0,a.kt)("em",{parentName:"p"},"do not"),"\nsupport granular inputs, smart hashing, incremental caching, and all the other performance benefits\nthat moon provides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from these tools. Instead, you can simply\nrun their commands from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'python'\n\ntasks:\n test:\n command: 'doit test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n")))}P.isMDXComponent=!0;const O={toc:[]};function Z(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},O,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The Ruby ecosystem has standardized around the task runner ",(0,a.kt)("a",{parentName:"p",href:"https://ruby.github.io/rake/"},"Rake"),",\nwhich is a Makefile like system written in Ruby. While Rake is great and it accomplishes everything\nit set out to do, it's not as efficient as moon. It ",(0,a.kt)("em",{parentName:"p"},"does not")," support granular inputs, smart\nhashing, incremental caching, and all the other performance benefits that moon provides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from Rake. Instead, you can simply run Rake\ncommands from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'ruby'\n\ntasks:\n test:\n command: 'rake test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Rakefile'\n")))}Z.isMDXComponent=!0;const X={toc:[]};function R(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},X,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Rust, and more specifically Cargo, provides no mechanism for declaring reusable scripts in\n",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),". Because of this, there's no alternative to moon tasks. In the future, we may parse\nthird-party libraries like ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo-make")," for this information."))}R.isMDXComponent=!0;const L={title:"Migrate to moon"},S=void 0,z={unversionedId:"migrate-to-moon",id:"migrate-to-moon",title:"Migrate to moon",description:"Now that we've talked about the workspace, projects, tasks, and more, we must talk about something",source:"@site/docs/migrate-to-moon.mdx",sourceDirName:".",slug:"/migrate-to-moon",permalink:"/docs/migrate-to-moon",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/migrate-to-moon.mdx",tags:[],version:"current",frontMatter:{title:"Migrate to moon"},sidebar:"docs",previous:{title:"Run a task",permalink:"/docs/run-task"},next:{title:"Concepts",permalink:"/docs/concepts"}},I={},H=[{value:"Migrate to moon tasks",id:"migrate-to-moon-tasks",level:2},{value:"Continue using scripts",id:"continue-using-scripts",level:2},{value:"Next steps",id:"next-steps",level:2}],G={toc:H};function W(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},G,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Now that we've talked about the workspace, projects, tasks, and more, we must talk about something\nimportant... Should you embrace moon tasks? Or keep using language/ecosystem specific scripts? Or\nboth (incremental adoption)?"),(0,a.kt)("h2",{id:"migrate-to-moon-tasks"},"Migrate to moon tasks"),(0,a.kt)("p",null,"We suggest using moon tasks (of course), as they provide far more granular control and configurable\noptions than scripts, and a ",(0,a.kt)("inlineCode",{parentName:"p"},"moon.yml")," is a better\n",(0,a.kt)("a",{parentName:"p",href:"./faq#what-should-be-considered-the-source-of-truth"},"source of truth"),". Scripts aren't powerful\nenough to scale for large codebases."),(0,a.kt)("p",null,"An example of what this may look like can be found below. This ",(0,a.kt)("em",{parentName:"p"},"may")," look like a lot, but it pays\ndividends in the long run."),(0,a.kt)(r.Z,{mdxType:"LangPartials"},(0,a.kt)(l,{key:"deno",mdxType:"MigrateDeno"}),(0,a.kt)(m,{key:"go",mdxType:"MigrateGo"}),(0,a.kt)(u,{key:"node",mdxType:"MigrateNode"}),(0,a.kt)(g,{key:"php",mdxType:"MigratePHP"}),(0,a.kt)(k,{key:"python",mdxType:"MigratePython"}),(0,a.kt)(f,{key:"ruby",mdxType:"MigrateRuby"}),(0,a.kt)(v,{key:"rust",mdxType:"MigrateRust"})),(0,a.kt)("h2",{id:"continue-using-scripts"},"Continue using scripts"),(0,a.kt)(r.Z,{mdxType:"LangPartials"},(0,a.kt)(N,{key:"deno",mdxType:"ScriptsDeno"}),(0,a.kt)(j,{key:"go",mdxType:"ScriptsGo"}),(0,a.kt)(T,{key:"node",mdxType:"ScriptsNode"}),(0,a.kt)(E,{key:"php",mdxType:"ScriptsPHP"}),(0,a.kt)(P,{key:"python",mdxType:"ScriptsPython"}),(0,a.kt)(Z,{key:"ruby",mdxType:"ScriptsRuby"}),(0,a.kt)(R,{key:"rust",mdxType:"ScriptsRust"})),(0,a.kt)("h2",{id:"next-steps"},"Next steps"),(0,a.kt)("p",null,"By this point, you should have a better understanding behind moon's fundamentals! Why not adopt\nincrementally next? Jump into ",(0,a.kt)("a",{parentName:"p",href:"./guides/ci"},"guides")," for advanced use cases or ",(0,a.kt)("a",{parentName:"p",href:"./concepts"},"concepts"),"\nfor a deeper understanding."),(0,a.kt)(s.Z,{links:[{icon:"discord",label:"Community help & support",url:"https://discord.gg/qCh9MEynv2"},{icon:"twitter",label:"Releases & updates",url:"https://twitter.com/tothemoonrepo"}],mdxType:"NextSteps"}))}W.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b65c3624.3e442d99.js b/assets/js/b65c3624.3e442d99.js new file mode 100644 index 00000000000..2013c39642b --- /dev/null +++ b/assets/js/b65c3624.3e442d99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60730],{35318:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>d});var o=t(27378);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?s(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function i(e,n){if(null==e)return{};var t,o,a=function(e,n){if(null==e)return{};var t,o,a={},s=Object.keys(e);for(o=0;o<s.length;o++)t=s[o],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)t=s[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=o.createContext({}),c=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},m=function(e){var n=c(e.components);return o.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=c(t),d=a,g=u["".concat(l,".").concat(d)]||u[d]||p[d]||s;return t?o.createElement(g,r(r({ref:n},m),{},{components:t})):o.createElement(g,r({ref:n},m))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var s=t.length,r=new Array(s);r[0]=u;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,r[1]=i;for(var c=2;c<s;c++)r[c]=t[c];return o.createElement.apply(null,r)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},74903:(e,n,t)=>{t.d(n,{Z:()=>g});var o=t(27378),a=t(37140),s=t(75484),r=t(99213);const i="admonition_uH4V",l="admonitionHeading_P5_N",c="admonitionIcon_MF44",m="admonitionContent_yySL";const p={note:{infimaClassName:"secondary",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:o.createElement(r.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:o.createElement(r.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:o.createElement(r.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:o.createElement(r.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 16 16"},o.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:o.createElement(r.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},u={secondary:"note",important:"info",success:"tip",warning:"danger"};function d(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=o.Children.toArray(e),t=n.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,n.filter((e=>e!==t)));return{mdxAdmonitionTitle:t,rest:a}}(e.children);return{...e,title:e.title??n,children:t}}function g(e){const{children:n,type:t,title:r,icon:g}=d(e),h=function(e){const n=u[e]??e;return p[n]||(console.warn(`No admonition config found for admonition type "${n}". Using Info as fallback.`),p.info)}(t),k=r??h.label,{iconComponent:y}=h,f=g??o.createElement(y,null);return o.createElement("div",{className:(0,a.Z)(s.k.common.admonition,s.k.common.admonitionType(e.type),"alert",`alert--${h.infimaClassName}`,i)},o.createElement("div",{className:l},o.createElement("span",{className:c},f),k),o.createElement("div",{className:m},n))}},83893:(e,n,t)=>{t.d(n,{Z:()=>i});var o=t(27378),a=t(74903),s=t(83828);const r={bun:"Bun",deno:"Deno",go:"Go",node:"Node.js",php:"PHP",python:"Python",ruby:"Ruby",rust:"Rust"};function i(e){let{children:n,noError:t}=e;const i=(0,s.gE)(),l=o.Children.toArray(n).find((e=>!!o.isValidElement(e)&&("string"==typeof e.key&&e.key.endsWith(i))));return l?o.createElement(o.Fragment,null,l):t?null:o.createElement(a.Z,{type:"danger"},"Sorry, there's no example for ",r[i]||i,". Try switching to another language for the time being!")}},83828:(e,n,t)=>{t.d(n,{ZP:()=>c,gE:()=>l});var o=t(27378),a=t(35331);const s=["/docs/install","/docs/setup-workspace","/docs/setup-toolchain","/docs/create-project","/docs/create-task","/docs/run-task","/docs/migrate-to-moon"];function r(){return"undefined"!=typeof window&&"localStorage"in window}function i(){return(r()?localStorage.getItem("moonrepo.language"):null)??"node"}function l(){const[e,n]=(0,o.useState)(i());return(0,o.useEffect)((()=>{const e=e=>{n(e.detail)};return window.addEventListener("onMoonrepoChangeLanguage",e),()=>{window.removeEventListener("onMoonrepoChangeLanguage",e)}})),e}function c(){const[e,n]=(0,o.useState)(i()),t=(0,a.TH)(),l=(0,o.useCallback)((e=>{let{target:t}=e;const o=t.value;if(n(o),r())try{localStorage.setItem("moonrepo.language",o)}catch{}window.dispatchEvent(new CustomEvent("onMoonrepoChangeLanguage",{bubbles:!0,detail:o}))}),[]);return s.some((e=>t.pathname.startsWith(e)))?o.createElement("select",{value:e,onChange:l,className:"outline-none min-w-0 bg-white border border-solid border-gray-400 dark:border-transparent rounded-md p-0.5 text-sm text-gray-800 placeholder-gray-600 h-full font-sans"},o.createElement("option",{value:"deno"},"Deno"),o.createElement("option",{value:"go"},"Go"),o.createElement("option",{value:"node"},"Node.js"),o.createElement("option",{value:"php"},"PHP"),o.createElement("option",{value:"python"},"Python"),o.createElement("option",{value:"ruby"},"Ruby"),o.createElement("option",{value:"rust"},"Rust")):null}},9634:(e,n,t)=>{t.d(n,{Z:()=>p});var o=t(27378),a=t(81884),s=t(25773),r=t(9928),i=t(83469),l=t(31792);const c={discord:r.omb,github:r.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:r.mdU,workspace:i.emM,"workspace-config":i.cRF};function m(e){let{name:n,...t}=e;return o.createElement(l.Z,(0,s.Z)({},t,{icon:c[n]}))}function p(e){let{links:n}=e;return o.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},n.map((e=>o.createElement(a.default,{key:e.url,href:e.url,className:"focus:outline-none"},o.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},o.createElement("div",{className:"flex-shrink-0"},o.createElement(m,{size:"lg",name:e.icon})),o.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},52746:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>I,contentTitle:()=>S,default:()=>W,frontMatter:()=>L,metadata:()=>z,toc:()=>H});var o=t(25773),a=(t(27378),t(35318)),s=t(9634),r=t(83893);const i={toc:[]};function l(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},i,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'typescript'\n\nfileGroups:\n sources:\n - 'src/**/*'\n - 'deno.*'\n tests:\n - 'tests/**/*'\n\ntasks:\n dev:\n command: 'deno task dev'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: 'deno fmt --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n lint:\n command: 'deno lint'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n test:\n command: 'deno test --parallel'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n typecheck:\n command: 'deno check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'tsconfig.json'\n - '/tsconfig.json'\n")))}l.isMDXComponent=!0;const c={toc:[]};function m(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'go'\n\nfileGroups:\n sources:\n - 'cmd/**/*'\n - 'include/**/*'\n - 'pkg/**/*'\n\ntasks:\n build:\n command: 'go build -o @out(0)'\n inputs:\n - '@globs(sources)'\n outputs:\n - 'bin'\n dev:\n command: 'go run'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: 'go fmt'\n inputs:\n - '@globs(sources)'\n lint:\n command: 'staticcheck'\n inputs:\n - '@globs(sources)'\n - 'staticcheck.conf'\n test:\n command: 'go test'\n inputs:\n - '@globs(sources)'\n vet:\n command: 'go vet'\n inputs:\n - '@globs(sources)'\n")))}m.isMDXComponent=!0;const p={toc:[]};function u(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'javascript'\n\nfileGroups:\n sources:\n - 'src/**/*'\n tests:\n - 'tests/**/*'\n\ntasks:\n build:\n command: 'webpack build --output-path @out(0)'\n inputs:\n - '@globs(sources)'\n - 'webpack.config.js'\n outputs:\n - 'build'\n dev:\n command: 'webpack server'\n inputs:\n - '@globs(sources)'\n - 'webpack.config.js'\n local: true\n format:\n command: 'prettier --check .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '/prettier.config.js'\n lint:\n command: 'eslint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.eslintignore'\n - '.eslintrc.js'\n - '/.eslintrc.js'\n test:\n command: 'jest .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'jest.config.js'\n typecheck:\n command: 'tsc --build'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'tsconfig.json'\n - '/tsconfig.json'\n")),(0,a.kt)("p",null,"To ease the migration process, we offer the\n",(0,a.kt)("a",{parentName:"p",href:"./commands/migrate/from-package-json"},(0,a.kt)("inlineCode",{parentName:"a"},"moon migrate from-package-json"))," command, which will convert\na project's ",(0,a.kt)("inlineCode",{parentName:"p"},"package.json")," scripts into ",(0,a.kt)("inlineCode",{parentName:"p"},"moon.yml")," tasks, while also determining project\ndependencies (",(0,a.kt)("a",{parentName:"p",href:"./config/project#dependsOn"},(0,a.kt)("inlineCode",{parentName:"a"},"dependsOn")),"). This needs to be ran ",(0,a.kt)("em",{parentName:"p"},"per project"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon migrate from-package-json <project>\n")),(0,a.kt)("p",null,"This command will do its best to parse and convert scripts, but this isn't always a simple 1:1\nconversion, especially when determining dependency chains. For this reason alone, we suggest\n",(0,a.kt)("em",{parentName:"p"},"manually curating")," tasks, but the migrate command well get you most of the way!"))}u.isMDXComponent=!0;const d={toc:[]};function g(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'php'\n\nfileGroups:\n sources:\n - 'app/**/*'\n tests:\n - 'tests/**/*'\n\ntasks:\n dev:\n command: 'php artisan serve'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: './vendor/bin/phpcbf .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.phpcs.xml'\n lint:\n command: './vendor/bin/phpstan analyse'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'phpstan.neon'\n test:\n command: './vendor/bin/phpunit .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'phpunit.xml'\n")))}g.isMDXComponent=!0;const h={toc:[]};function k(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},h,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'python'\n\nfileGroups:\n sources:\n - 'flaskr/**/*'\n - 'setup.py'\n tests:\n - 'tests/**/*'\n\ntasks:\n dev:\n command: 'flask run'\n inputs:\n - '@globs(sources)'\n local: true\n format:\n command: 'black --check .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n lint:\n command: 'pylint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n - '.pylintrc'\n test:\n command: 'python -m unittest'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n typecheck:\n command: 'mypy .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'mypy.ini'\n - 'pyproject.toml'\n")))}k.isMDXComponent=!0;const y={toc:[]};function f(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},y,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'ruby'\n\nfileGroups:\n sources:\n - 'lib/**/*'\n - 'view/**/*'\n tests:\n - 'spec/**/*'\n\ntasks:\n dev:\n command: './bin/rails server'\n local: true\n format:\n command: 'rubocop -x'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.rubocop.yml'\n lint:\n command: 'rubocop -l'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.rubocop.yml'\n test:\n command: 'rspec'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '.rspec'\n typecheck:\n command: 'srb tc'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'sorbet/config'\n")))}f.isMDXComponent=!0;const b={toc:[]};function v(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},b,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'rust'\n\nfileGroups:\n sources:\n - 'src/**/*'\n tests:\n - 'benches/**/*'\n - 'tests/**/*'\n\ntasks:\n build:\n command: 'cargo build'\n inputs:\n - '@globs(sources)'\n - 'Cargo.toml'\n dev:\n command: 'cargo run'\n inputs:\n - '@globs(sources)'\n - 'Cargo.toml'\n local: true\n format:\n command: 'cargo fmt --all --check'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n lint:\n command: 'cargo clippy --workspace --all-targets'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n test:\n command: 'cargo test --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n typecheck:\n command: 'cargo check --workspace'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Cargo.toml'\n")))}v.isMDXComponent=!0;const w={toc:[]};function N(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},w,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Deno provides a built-in task runner through the\n",(0,a.kt)("a",{parentName:"p",href:"https://deno.land/manual@v1.31.1/tools/task_runner"},(0,a.kt)("inlineCode",{parentName:"a"},"deno task")," command"),". While Deno tasks are\ngreat, they're not as efficient as moon. They ",(0,a.kt)("em",{parentName:"p"},"do not")," support granular inputs, smart hashing,\nincremental caching, and all the other performance benefits that moon provides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from Deno tasks. Instead, you can simply run\nthem from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'typescript'\n\ntasks:\n analyze:\n command: 'deno task analyze'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Rakefile'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"When Deno tasks are ran through moon tasks, the current working directory is set to the project\nroot.")))}N.isMDXComponent=!0;const C={toc:[]};function j(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},C,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Go provides no mechanism for declaring reusable scripts. Because of this, there's no alternative to\nmoon tasks."))}j.isMDXComponent=!0;const x={toc:[]};function T(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},x,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"As a frontend developer you're already familiar with the Node.js ecosystem, specifically around\ndefining and using ",(0,a.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, and you may not want to deviate from this. Don't worry,\nsimply enable the ",(0,a.kt)("a",{parentName:"p",href:"./config/toolchain#infertasksfromscripts"},(0,a.kt)("inlineCode",{parentName:"a"},"node.inferTasksFromScripts"))," setting\nto automatically create moon tasks from a project's scripts! These can then be ran with\n",(0,a.kt)("a",{parentName:"p",href:"./commands/run"},(0,a.kt)("inlineCode",{parentName:"a"},"moon run")),"."),(0,a.kt)("p",null,"This implementation is a simple abstraction that runs ",(0,a.kt)("inlineCode",{parentName:"p"},"npm run <script>")," (or pnpm/yarn) in the\nproject directory as a child process. While this works, relying on ",(0,a.kt)("inlineCode",{parentName:"p"},"package.json")," scripts incurs the\nfollowing risks and disadvantages:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"./config/project#inputs"},"Inputs")," default to ",(0,a.kt)("inlineCode",{parentName:"li"},"**/*"),":",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"A change to every project relative file will mark the task as affected, even those not necessary\nfor the task. Granular input control is lost."),(0,a.kt)("li",{parentName:"ul"},"A change to workspace relative files ",(0,a.kt)("em",{parentName:"li"},"will not")," mark the task as affected. For example, a change\nto ",(0,a.kt)("inlineCode",{parentName:"li"},"/prettier.config.js")," would not be detected for a ",(0,a.kt)("inlineCode",{parentName:"li"},"npm run format")," script."))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"./config/project#outputs"},"Outputs")," default to an empty list unless:",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"moon will attempt to extract outputs from arguments, by looking for variations of ",(0,a.kt)("inlineCode",{parentName:"li"},"--out"),",\n",(0,a.kt)("inlineCode",{parentName:"li"},"--outFile"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"--dist-dir"),", etc."),(0,a.kt)("li",{parentName:"ul"},"If no output could be determined, builds will not be cached and hydrated."))),(0,a.kt)("li",{parentName:"ul"},"Tasks will always ",(0,a.kt)("a",{parentName:"li",href:"./config/project#runinci"},"run in CI")," unless:",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"moon will attempt to determine invalid CI tasks by looking for popular command usage, for\nexample: ",(0,a.kt)("inlineCode",{parentName:"li"},"webpack serve"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"next dev"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"--watch")," usage, and more. This ",(0,a.kt)("em",{parentName:"li"},"is not")," an exhaustive\ncheck."),(0,a.kt)("li",{parentName:"ul"},"The script name contains variations of ",(0,a.kt)("inlineCode",{parentName:"li"},"dev"),", ",(0,a.kt)("inlineCode",{parentName:"li"},"start"),", or ",(0,a.kt)("inlineCode",{parentName:"li"},"serve"),".")))))}T.isMDXComponent=!0;const M={toc:[]};function E(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},M,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The PHP ecosystem has standardized (somewhat) around\n",(0,a.kt)("a",{parentName:"p",href:"https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands"},"Composer scripts")," for\nreusability. While these work, they're not as efficient as moon. They ",(0,a.kt)("em",{parentName:"p"},"do not")," support granular\ninputs, smart hashing, incremental caching, and all the other performance benefits that moon\nprovides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from Composer. Instead, you can simply run\nthese scripts from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'php'\n\ntasks:\n test:\n command: 'php composer.phar run-script test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'composer.json'\n")),(0,a.kt)("p",null,"In the future, we aim to infer these scripts automatically, and provide migration scripts."))}E.isMDXComponent=!0;const D={toc:[]};function P(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},D,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The Python ecosystem has support for many task runners such as ",(0,a.kt)("a",{parentName:"p",href:"https://pydoit.org/"},"doit")," and\n",(0,a.kt)("a",{parentName:"p",href:"https://pypyr.io/"},"pypyr"),". While these are great, they're not as efficient as moon. They ",(0,a.kt)("em",{parentName:"p"},"do not"),"\nsupport granular inputs, smart hashing, incremental caching, and all the other performance benefits\nthat moon provides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from these tools. Instead, you can simply\nrun their commands from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'python'\n\ntasks:\n test:\n command: 'doit test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'pyproject.toml'\n")))}P.isMDXComponent=!0;const O={toc:[]};function Z(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},O,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The Ruby ecosystem has standardized around the task runner ",(0,a.kt)("a",{parentName:"p",href:"https://ruby.github.io/rake/"},"Rake"),",\nwhich is a Makefile like system written in Ruby. While Rake is great and it accomplishes everything\nit set out to do, it's not as efficient as moon. It ",(0,a.kt)("em",{parentName:"p"},"does not")," support granular inputs, smart\nhashing, incremental caching, and all the other performance benefits that moon provides."),(0,a.kt)("p",null,"With that being said, you ",(0,a.kt)("em",{parentName:"p"},"do not")," have to migrate away from Rake. Instead, you can simply run Rake\ncommands from within moon tasks. This gives you the best of both worlds."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"language: 'ruby'\n\ntasks:\n test:\n command: 'rake test'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - 'Rakefile'\n")))}Z.isMDXComponent=!0;const X={toc:[]};function R(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},X,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Rust, and more specifically Cargo, provides no mechanism for declaring reusable scripts in\n",(0,a.kt)("inlineCode",{parentName:"p"},"Cargo.toml"),". Because of this, there's no alternative to moon tasks. In the future, we may parse\nthird-party libraries like ",(0,a.kt)("inlineCode",{parentName:"p"},"cargo-make")," for this information."))}R.isMDXComponent=!0;const L={title:"Migrate to moon"},S=void 0,z={unversionedId:"migrate-to-moon",id:"migrate-to-moon",title:"Migrate to moon",description:"Now that we've talked about the workspace, projects, tasks, and more, we must talk about something",source:"@site/docs/migrate-to-moon.mdx",sourceDirName:".",slug:"/migrate-to-moon",permalink:"/docs/migrate-to-moon",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/migrate-to-moon.mdx",tags:[],version:"current",frontMatter:{title:"Migrate to moon"},sidebar:"docs",previous:{title:"Run a task",permalink:"/docs/run-task"},next:{title:"Concepts",permalink:"/docs/concepts"}},I={},H=[{value:"Migrate to moon tasks",id:"migrate-to-moon-tasks",level:2},{value:"Continue using scripts",id:"continue-using-scripts",level:2},{value:"Next steps",id:"next-steps",level:2}],G={toc:H};function W(e){let{components:n,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},G,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Now that we've talked about the workspace, projects, tasks, and more, we must talk about something\nimportant... Should you embrace moon tasks? Or keep using language/ecosystem specific scripts? Or\nboth (incremental adoption)?"),(0,a.kt)("h2",{id:"migrate-to-moon-tasks"},"Migrate to moon tasks"),(0,a.kt)("p",null,"We suggest using moon tasks (of course), as they provide far more granular control and configurable\noptions than scripts, and a ",(0,a.kt)("inlineCode",{parentName:"p"},"moon.yml")," is a better\n",(0,a.kt)("a",{parentName:"p",href:"./faq#what-should-be-considered-the-source-of-truth"},"source of truth"),". Scripts aren't powerful\nenough to scale for large codebases."),(0,a.kt)("p",null,"An example of what this may look like can be found below. This ",(0,a.kt)("em",{parentName:"p"},"may")," look like a lot, but it pays\ndividends in the long run."),(0,a.kt)(r.Z,{mdxType:"LangPartials"},(0,a.kt)(l,{key:"deno",mdxType:"MigrateDeno"}),(0,a.kt)(m,{key:"go",mdxType:"MigrateGo"}),(0,a.kt)(u,{key:"node",mdxType:"MigrateNode"}),(0,a.kt)(g,{key:"php",mdxType:"MigratePHP"}),(0,a.kt)(k,{key:"python",mdxType:"MigratePython"}),(0,a.kt)(f,{key:"ruby",mdxType:"MigrateRuby"}),(0,a.kt)(v,{key:"rust",mdxType:"MigrateRust"})),(0,a.kt)("h2",{id:"continue-using-scripts"},"Continue using scripts"),(0,a.kt)(r.Z,{mdxType:"LangPartials"},(0,a.kt)(N,{key:"deno",mdxType:"ScriptsDeno"}),(0,a.kt)(j,{key:"go",mdxType:"ScriptsGo"}),(0,a.kt)(T,{key:"node",mdxType:"ScriptsNode"}),(0,a.kt)(E,{key:"php",mdxType:"ScriptsPHP"}),(0,a.kt)(P,{key:"python",mdxType:"ScriptsPython"}),(0,a.kt)(Z,{key:"ruby",mdxType:"ScriptsRuby"}),(0,a.kt)(R,{key:"rust",mdxType:"ScriptsRust"})),(0,a.kt)("h2",{id:"next-steps"},"Next steps"),(0,a.kt)("p",null,"By this point, you should have a better understanding behind moon's fundamentals! Why not adopt\nincrementally next? Jump into ",(0,a.kt)("a",{parentName:"p",href:"./guides/ci"},"guides")," for advanced use cases or ",(0,a.kt)("a",{parentName:"p",href:"./concepts"},"concepts"),"\nfor a deeper understanding."),(0,a.kt)(s.Z,{links:[{icon:"discord",label:"Community help & support",url:"https://discord.gg/qCh9MEynv2"},{icon:"twitter",label:"Releases & updates",url:"https://twitter.com/tothemoonrepo"}],mdxType:"NextSteps"}))}W.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b6e1085a.4475fd9a.js b/assets/js/b6e1085a.4475fd9a.js new file mode 100644 index 00000000000..65fd6fdcb19 --- /dev/null +++ b/assets/js/b6e1085a.4475fd9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89624],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=r,f=m["".concat(i,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(f,l(l({ref:t},u),{},{components:n})):a.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var c=2;c<o;c++)l[c]=n[c];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),s=n(35595),i=n(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=c[n].value;a!==s&&(m(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",u,l?.className,{"tabs__item--active":s===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,s.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",c)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),s=n(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function c(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??i(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(l.location.search);t.set(s,e),l.replace({...l.location,search:t.toString()})}),[s,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=c(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,s.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),k=(()=>{const e=m??f;return u({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{k&&i(k)}),[k]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},1710:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=n(33337),l=n(39798);const s={slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},i=void 0,c={permalink:"/blog/v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-26_v0.15.mdx",source:"@site/blog/2022-09-26_v0.15.mdx",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",description:"With this release, we've focused heavily on Docker integration and enhancing the Dockerfile",date:"2022-09-26T00:00:00.000Z",formattedDate:"September 26, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"docker",permalink:"/blog/tags/docker"}],readingTime:3.495,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},prevItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"},nextItem:{title:"moon v0.14 - Code generation and implicit dependencies",permalink:"/blog/v0.14"}},u={image:n(10818).Z,authorsImageUrls:[void 0]},p=[{value:"1,000 \u2b50\ufe0f\ud83c\udf1f\u2b50\ufe0f!",id:"1000-\ufe0f\ufe0f",level:2},{value:"First-class Docker support",id:"first-class-docker-support",level:2},{value:"Frontmatter for template files",id:"frontmatter-for-template-files",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've focused heavily on Docker integration and enhancing the ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\nworkflow, as well as some minor quality of life improvements for template files and run reports."),(0,r.kt)("h2",{id:"1000-\ufe0f\ufe0f"},"1,000 \u2b50\ufe0f\ud83c\udf1f\u2b50\ufe0f!"),(0,r.kt)("p",null,"Before we dive into the release, we want to thank everyone for the initial support, as we passed\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon"},"1,000 stars on GitHub")," earlier this week! moon was announced back\nin June, and to reach this milestone in roughly 3 months is very exciting. We greatly appreciate the\nsupport, and to everyone that is using moon and providing feedback, we thank you from the bottom of\nour hearts!"),(0,r.kt)("p",null,"We have a very long roadmap ahead of us, but are very excited to bring all of these features to you,\nand to improve the overall developer experience for your monorepos! Here's to 10,000 stars!"),(0,r.kt)("h2",{id:"first-class-docker-support"},"First-class Docker support"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://www.docker.com/"},"Docker")," is a very popular tool that is typically a part of a developers\nworkflow, but is also a very tedious one, as ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s have to be manually curated for every\nproject. We aim to mitigate this problem by supporting Docker as a first-class feature, and by\nintroducing 2 new commands, ",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/docker/scaffold"},(0,r.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," and\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/docker/prune"},(0,r.kt)("inlineCode",{parentName:"a"},"moon docker prune")),"."),(0,r.kt)("p",null,"These commands will automate a ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile")," as much as possible to effectively take advantage of\nDocker's layer caching, multi-staged builds, to reduce the amount of manual ",(0,r.kt)("inlineCode",{parentName:"p"},"COPY")," commands, to\nreduce the overall size of the container or image, and much more. To demonstrate this, compare the\nbefore and after ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s below!"),(0,r.kt)(o.Z,{groupId:"dockerfile",defaultValue:"before",values:[{label:"Before",value:"before"},{label:"After",value:"after"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"before",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\n\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy moon files\nCOPY ./.moon ./.moon\n\n# Copy all package.json's and lockfiles\nCOPY ./packages/cli/package.json ./packages/cli/package.json\nCOPY ./packages/core-linux-arm64-gnu/package.json ./packages/core-linux-arm64-gnu/package.json\nCOPY ./packages/core-linux-arm64-musl/package.json ./packages/core-linux-arm64-musl/package.json\nCOPY ./packages/core-linux-x64-gnu/package.json ./packages/core-linux-x64-gnu/package.json\nCOPY ./packages/core-linux-x64-musl/package.json ./packages/core-linux-x64-musl/package.json\nCOPY ./packages/core-macos-arm64/package.json ./packages/core-macos-arm64/package.json\nCOPY ./packages/core-macos-x64/package.json ./packages/core-macos-x64/package.json\nCOPY ./packages/core-windows-x64-msvc/package.json ./packages/core-windows-x64-msvc/package.json\nCOPY ./packages/runtime/package.json ./packages/runtime/package.json\nCOPY ./packages/types/package.json ./packages/types/package.json\nCOPY ./package.json ./package.json\nCOPY ./yarn.lock ./yarn.lock\nCOPY ./.yarn ./.yarn\nCOPY ./.yarnrc.yml ./yarnrc.yml\n\n# Install toolchain and dependencies\nRUN moon setup\n\n# Copy project and required files\nCOPY ./packages/types ./packages/types\nCOPY ./packages/runtime ./packages/runtime\n# COPY . .\n\n# Build the target\nRUN moon run runtime:build\n"))),(0,r.kt)(l.Z,{value:"after",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-docker"},"#### BASE\nFROM node:latest AS base\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n#### WORKSPACE\nFROM base AS workspace\nWORKDIR /app\n\n# Copy entire repository and scaffold\nCOPY . .\nRUN moon docker scaffold runtime\n\n#### BUILD\nFROM base AS build\nWORKDIR /app\n\n# Copy workspace skeleton\nCOPY --from=workspace /app/.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon setup\n\n# Copy source files\nCOPY --from=workspace /app/.moon/docker/sources .\n\n# Build the target\nRUN moon run runtime:build\n\n# Prune workspace\nRUN moon docker prune\n")))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the official ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/docker"},"Docker usage guide")," for an in-depth walkthrough of all\nthese new features!")),(0,r.kt)("h2",{id:"frontmatter-for-template-files"},"Frontmatter for template files"),(0,r.kt)("p",null,"We released ",(0,r.kt)("a",{parentName:"p",href:"./v0.14"},"templates and the generator in v0.14")," for quick and easy code generation.\nSince it was the initial release, it provided the bare minimum of features for common workflows.\nWe'll continually improve this system over each release, and have done just that for this release,\nas all template files now support ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/codegen#frontmatter"},"frontmatter"),"! Frontmatter is\na mechanism for declaring ",(0,r.kt)("em",{parentName:"p"},"per-file configuration"),", and is denoted by ",(0,r.kt)("inlineCode",{parentName:"p"},"---")," delimiters at the top of\nthe file."),(0,r.kt)("p",null,"This allows you to do some really cool stuff, like overriding the destination path of the file using\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"to")," field, as well as taking full advantage of Tera's filters and conditional rendering!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig",metastring:'title="templates/react/components/base.tsx"',title:'"templates/react/components/base.tsx"'},"{% set component_name = name | pascal_case %}\n\n---\nto: components/{{ component_name }}.tsx\n---\n\nexport function {{ component_name }}() {\n return <div />;\n}\n")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.15.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Run reports (via ",(0,r.kt)("inlineCode",{parentName:"li"},"--report"),") now include additional information, like the total duration, and\nestimated time savings.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},"moonrepo/run-report-action")," has\nbeen updated with this information."))),(0,r.kt)("li",{parentName:"ul"},"Improved pnpm integration for Go/Rust binaries shipped in node modules.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.16 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Quality of life improvements for TypeScript."),(0,r.kt)("li",{parentName:"ul"},"Per-project overrides for language/tool versions.")))}d.isMDXComponent=!0},10818:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.15-df3082f5cae38090b567718791719d91.png"}}]); \ No newline at end of file diff --git a/assets/js/b6e1085a.9308dce6.js b/assets/js/b6e1085a.9308dce6.js deleted file mode 100644 index e29379cd4e4..00000000000 --- a/assets/js/b6e1085a.9308dce6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9624],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=r,f=m["".concat(i,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(f,l(l({ref:t},u),{},{components:n})):a.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var c=2;c<o;c++)l[c]=n[c];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),s=n(35595),i=n(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=c[n].value;a!==s&&(m(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",u,l?.className,{"tabs__item--active":s===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,s.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",c)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),s=n(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function c(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??i(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(l.location.search);t.set(s,e),l.replace({...l.location,search:t.toString()})}),[s,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=c(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,s.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),k=(()=>{const e=m??f;return u({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{k&&i(k)}),[k]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},1710:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=n(33337),l=n(39798);const s={slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},i=void 0,c={permalink:"/blog/v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-26_v0.15.mdx",source:"@site/blog/2022-09-26_v0.15.mdx",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",description:"With this release, we've focused heavily on Docker integration and enhancing the Dockerfile",date:"2022-09-26T00:00:00.000Z",formattedDate:"September 26, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"docker",permalink:"/blog/tags/docker"}],readingTime:3.495,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.15",title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",authors:["milesj"],tags:["generator","docker"],image:"./img/v0.15.png"},prevItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"},nextItem:{title:"moon v0.14 - Code generation and implicit dependencies",permalink:"/blog/v0.14"}},u={image:n(10818).Z,authorsImageUrls:[void 0]},p=[{value:"1,000 \u2b50\ufe0f\ud83c\udf1f\u2b50\ufe0f!",id:"1000-\ufe0f\ufe0f",level:2},{value:"First-class Docker support",id:"first-class-docker-support",level:2},{value:"Frontmatter for template files",id:"frontmatter-for-template-files",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've focused heavily on Docker integration and enhancing the ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\nworkflow, as well as some minor quality of life improvements for template files and run reports."),(0,r.kt)("h2",{id:"1000-\ufe0f\ufe0f"},"1,000 \u2b50\ufe0f\ud83c\udf1f\u2b50\ufe0f!"),(0,r.kt)("p",null,"Before we dive into the release, we want to thank everyone for the initial support, as we passed\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon"},"1,000 stars on GitHub")," earlier this week! moon was announced back\nin June, and to reach this milestone in roughly 3 months is very exciting. We greatly appreciate the\nsupport, and to everyone that is using moon and providing feedback, we thank you from the bottom of\nour hearts!"),(0,r.kt)("p",null,"We have a very long roadmap ahead of us, but are very excited to bring all of these features to you,\nand to improve the overall developer experience for your monorepos! Here's to 10,000 stars!"),(0,r.kt)("h2",{id:"first-class-docker-support"},"First-class Docker support"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://www.docker.com/"},"Docker")," is a very popular tool that is typically a part of a developers\nworkflow, but is also a very tedious one, as ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s have to be manually curated for every\nproject. We aim to mitigate this problem by supporting Docker as a first-class feature, and by\nintroducing 2 new commands, ",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/docker/scaffold"},(0,r.kt)("inlineCode",{parentName:"a"},"moon docker scaffold"))," and\n",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/docker/prune"},(0,r.kt)("inlineCode",{parentName:"a"},"moon docker prune")),"."),(0,r.kt)("p",null,"These commands will automate a ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile")," as much as possible to effectively take advantage of\nDocker's layer caching, multi-staged builds, to reduce the amount of manual ",(0,r.kt)("inlineCode",{parentName:"p"},"COPY")," commands, to\nreduce the overall size of the container or image, and much more. To demonstrate this, compare the\nbefore and after ",(0,r.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"s below!"),(0,r.kt)(o.Z,{groupId:"dockerfile",defaultValue:"before",values:[{label:"Before",value:"before"},{label:"After",value:"after"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"before",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-docker"},"FROM node:latest\n\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n# Copy moon files\nCOPY ./.moon ./.moon\n\n# Copy all package.json's and lockfiles\nCOPY ./packages/cli/package.json ./packages/cli/package.json\nCOPY ./packages/core-linux-arm64-gnu/package.json ./packages/core-linux-arm64-gnu/package.json\nCOPY ./packages/core-linux-arm64-musl/package.json ./packages/core-linux-arm64-musl/package.json\nCOPY ./packages/core-linux-x64-gnu/package.json ./packages/core-linux-x64-gnu/package.json\nCOPY ./packages/core-linux-x64-musl/package.json ./packages/core-linux-x64-musl/package.json\nCOPY ./packages/core-macos-arm64/package.json ./packages/core-macos-arm64/package.json\nCOPY ./packages/core-macos-x64/package.json ./packages/core-macos-x64/package.json\nCOPY ./packages/core-windows-x64-msvc/package.json ./packages/core-windows-x64-msvc/package.json\nCOPY ./packages/runtime/package.json ./packages/runtime/package.json\nCOPY ./packages/types/package.json ./packages/types/package.json\nCOPY ./package.json ./package.json\nCOPY ./yarn.lock ./yarn.lock\nCOPY ./.yarn ./.yarn\nCOPY ./.yarnrc.yml ./yarnrc.yml\n\n# Install toolchain and dependencies\nRUN moon setup\n\n# Copy project and required files\nCOPY ./packages/types ./packages/types\nCOPY ./packages/runtime ./packages/runtime\n# COPY . .\n\n# Build the target\nRUN moon run runtime:build\n"))),(0,r.kt)(l.Z,{value:"after",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-docker"},"#### BASE\nFROM node:latest AS base\nWORKDIR /app\n\n# Install moon binary\nRUN npm install -g @moonrepo/cli\n\n#### WORKSPACE\nFROM base AS workspace\nWORKDIR /app\n\n# Copy entire repository and scaffold\nCOPY . .\nRUN moon docker scaffold runtime\n\n#### BUILD\nFROM base AS build\nWORKDIR /app\n\n# Copy workspace skeleton\nCOPY --from=workspace /app/.moon/docker/workspace .\n\n# Install toolchain and dependencies\nRUN moon setup\n\n# Copy source files\nCOPY --from=workspace /app/.moon/docker/sources .\n\n# Build the target\nRUN moon run runtime:build\n\n# Prune workspace\nRUN moon docker prune\n")))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the official ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/docker"},"Docker usage guide")," for an in-depth walkthrough of all\nthese new features!")),(0,r.kt)("h2",{id:"frontmatter-for-template-files"},"Frontmatter for template files"),(0,r.kt)("p",null,"We released ",(0,r.kt)("a",{parentName:"p",href:"./v0.14"},"templates and the generator in v0.14")," for quick and easy code generation.\nSince it was the initial release, it provided the bare minimum of features for common workflows.\nWe'll continually improve this system over each release, and have done just that for this release,\nas all template files now support ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/codegen#frontmatter"},"frontmatter"),"! Frontmatter is\na mechanism for declaring ",(0,r.kt)("em",{parentName:"p"},"per-file configuration"),", and is denoted by ",(0,r.kt)("inlineCode",{parentName:"p"},"---")," delimiters at the top of\nthe file."),(0,r.kt)("p",null,"This allows you to do some really cool stuff, like overriding the destination path of the file using\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"to")," field, as well as taking full advantage of Tera's filters and conditional rendering!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-twig",metastring:'title="templates/react/components/base.tsx"',title:'"templates/react/components/base.tsx"'},"{% set component_name = name | pascal_case %}\n\n---\nto: components/{{ component_name }}.tsx\n---\n\nexport function {{ component_name }}() {\n return <div />;\n}\n")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.15.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Run reports (via ",(0,r.kt)("inlineCode",{parentName:"li"},"--report"),") now include additional information, like the total duration, and\nestimated time savings.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},"moonrepo/run-report-action")," has\nbeen updated with this information."))),(0,r.kt)("li",{parentName:"ul"},"Improved pnpm integration for Go/Rust binaries shipped in node modules.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.16 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Quality of life improvements for TypeScript."),(0,r.kt)("li",{parentName:"ul"},"Per-project overrides for language/tool versions.")))}d.isMDXComponent=!0},10818:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.15-df3082f5cae38090b567718791719d91.png"}}]); \ No newline at end of file diff --git a/assets/js/b717531a.039033d7.js b/assets/js/b717531a.039033d7.js new file mode 100644 index 00000000000..efb8629b017 --- /dev/null +++ b/assets/js/b717531a.039033d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80115],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,g=u["".concat(l,".").concat(d)]||u[d]||c[d]||o;return n?a.createElement(g,r(r({ref:t},m),{},{components:n})):a.createElement(g,r({ref:t},m))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,r[1]=s;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},84501:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},r=void 0,s={permalink:"/blog/moon-v1.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx",source:"@site/blog/2023-08-21_moon-v1.12.mdx",title:"moon v1.12 - Task improvements: extending, interactive, and more",description:"In this release, we focused heavily on improving tasks, its configuration, and related systems.",date:"2023-08-21T00:00:00.000Z",formattedDate:"August 21, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:3.32,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},prevItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"},nextItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"}},l={image:n(86612).Z,authorsImageUrls:[void 0]},p=[{value:"Extending sibling or inherited tasks",id:"extending-sibling-or-inherited-tasks",level:2},{value:"Configure tasks as interactive",id:"configure-tasks-as-interactive",level:2},{value:"Tokens in enviroment variables",id:"tokens-in-enviroment-variables",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"In this release, we focused heavily on improving tasks, its configuration, and related systems."),(0,i.kt)("h2",{id:"extending-sibling-or-inherited-tasks"},"Extending sibling or inherited tasks"),(0,i.kt)("p",null,"Three months ago, we posted an\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/849"},"RFC on how to support task extending / task variants"),".\nOn paper this doesn't sound like a hard problem to solve, but internally it would of been an uphill\nbattle to implement. Thanks to previous releases from the past few months, and the rewrite of the\nproject graph, task builder, and more, this implementation was a breeze. To finalize the RFC, we\nwent with option 2, by adding a new ",(0,i.kt)("inlineCode",{parentName:"p"},"extends")," field to task configurations."),(0,i.kt)("p",null,"With this new addition, we can now rewrite this old configuration, which was needlessly\nrepetitive..."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '*.js'\n - '.eslintrc.js'\n - 'tsconfig.json'\n - '/.eslintignore'\n - '/.eslintrc.js'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n\n lint-fix:\n command: 'eslint . --fix'\n local: true\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '*.js'\n - '.eslintrc.js'\n - 'tsconfig.json'\n - '/.eslintignore'\n - '/.eslintrc.js'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n")),(0,i.kt)("p",null,"Into the following configuration."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '*.js'\n - '.eslintrc.js'\n - 'tsconfig.json'\n - '/.eslintignore'\n - '/.eslintrc.js'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n\n lint-fix:\n extends: 'lint'\n args: '--fix'\n local: true\n")),(0,i.kt)("p",null,"We're very happy with this solution, as it's far more readable, maintainable, and doesn't introduce\nyet another paradigm to learn. Our goal was to be as familiar as possible, while providing extensive\nfunctionality behind the scenes, which we believe to have achieved."),(0,i.kt)("p",null,"Some other interesting facts around task extending:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"When extending a task, ",(0,i.kt)("a",{parentName:"li",href:"/docs/concepts/task-inheritance#merge-strategies"},"merge strategies")," are\napplied in a similar fashion to inheritance."),(0,i.kt)("li",{parentName:"ul"},"Inherited tasks can be extended from by project-level tasks."),(0,i.kt)("li",{parentName:"ul"},"It's possible to create multiple extended chains.")),(0,i.kt)("h2",{id:"configure-tasks-as-interactive"},"Configure tasks as interactive"),(0,i.kt)("p",null,"Six months ago, we added support for ",(0,i.kt)("a",{parentName:"p",href:"./v0.24#interactive-tasks"},"interactive tasks in v0.24"),", but\nonly if certain conditions were met: if only 1 target is running, they are considered interactive,\nor if the ",(0,i.kt)("inlineCode",{parentName:"p"},"--interactive")," option was passed to ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,i.kt)("inlineCode",{parentName:"a"},"moon run")),". However, we believe\nit nice to support interactive tasks through task configuration directly, but it required some\nthought into how this would work within the dependency graph and pipeline, as only 1 task can\ninteract with stdin at a time."),(0,i.kt)("p",null,"We solved this problem by reworking our dependency graph so that interactive tasks are isolated from\nother actions in the graph, and are not run in parallel with other actions. This will result in\nlonger dependency chains, but results in a working stdin solution."),(0,i.kt)("p",null,"To mark a task as interactive, enable the ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/project#interactive"},(0,i.kt)("inlineCode",{parentName:"a"},"options.interactive")),"\nsetting."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n init:\n command: 'init-app'\n options:\n interactive: true\n")),(0,i.kt)("h2",{id:"tokens-in-enviroment-variables"},"Tokens in enviroment variables"),(0,i.kt)("p",null,"Up until now, ",(0,i.kt)("a",{parentName:"p",href:"/docs/concepts/token"},"token functions and variables")," were only supported in task\ncommands, args, inputs, and outputs, but not environment variables... why? Honestly, there was no\nreal reason they weren't supported, it simply never crossed our mind! But thanks to requests from\nthe community, both token functions and variables are now supported in task\n",(0,i.kt)("a",{parentName:"p",href:"/docs/config/project#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env")),"."),(0,i.kt)("p",null,"This is great for propagating moon values to other systems. For example, say you want to use moon\nproject names for Sentry, keeping a 1:1 mapping."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n start:\n command: 'run-server'\n env:\n SENTRY_PROJECT: '$project'\n")),(0,i.kt)("p",null,"If you're familiar with tokens, you may be asking yourself, \"How do token functions work since they\nexpand to a list of paths?\" That's a great question! When token functions are used in an environment\nvariable, like ",(0,i.kt)("inlineCode",{parentName:"p"},"@group(sources)"),", the list of paths will be joined with a comma (",(0,i.kt)("inlineCode",{parentName:"p"},","),")."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n # ...\n env:\n SRCS: '@group(sources)'\n")),(0,i.kt)("p",null,"Since the environment variable is simply a string, you could parse it with your language of choice\nto extract the list of paths."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const paths = process.env.SRCS.split(',');\n")),(0,i.kt)("h2",{id:"other-changes"},"Other changes"),(0,i.kt)("p",null,"View the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.12.0"},"official release")," for a full list\nof changes."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Added git worktree support."),(0,i.kt)("li",{parentName:"ul"},"Updated task ",(0,i.kt)("inlineCode",{parentName:"li"},"outputs")," to support negated globs."),(0,i.kt)("li",{parentName:"ul"},"Will now log a warning to the console if a configuration file uses the ",(0,i.kt)("inlineCode",{parentName:"li"},".yaml")," extension.")))}c.isMDXComponent=!0},86612:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.12-3a89ebd0fa3a2732d0f38951967f4d19.png"}}]); \ No newline at end of file diff --git a/assets/js/b717531a.1419f61b.js b/assets/js/b717531a.1419f61b.js deleted file mode 100644 index 9f85393a342..00000000000 --- a/assets/js/b717531a.1419f61b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[115],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,g=u["".concat(l,".").concat(d)]||u[d]||c[d]||o;return n?a.createElement(g,r(r({ref:t},m),{},{components:n})):a.createElement(g,r({ref:t},m))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,r[1]=s;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},84501:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},r=void 0,s={permalink:"/blog/moon-v1.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx",source:"@site/blog/2023-08-21_moon-v1.12.mdx",title:"moon v1.12 - Task improvements: extending, interactive, and more",description:"In this release, we focused heavily on improving tasks, its configuration, and related systems.",date:"2023-08-21T00:00:00.000Z",formattedDate:"August 21, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:3.32,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},prevItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"},nextItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"}},l={image:n(86612).Z,authorsImageUrls:[void 0]},p=[{value:"Extending sibling or inherited tasks",id:"extending-sibling-or-inherited-tasks",level:2},{value:"Configure tasks as interactive",id:"configure-tasks-as-interactive",level:2},{value:"Tokens in enviroment variables",id:"tokens-in-enviroment-variables",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"In this release, we focused heavily on improving tasks, its configuration, and related systems."),(0,i.kt)("h2",{id:"extending-sibling-or-inherited-tasks"},"Extending sibling or inherited tasks"),(0,i.kt)("p",null,"Three months ago, we posted an\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/849"},"RFC on how to support task extending / task variants"),".\nOn paper this doesn't sound like a hard problem to solve, but internally it would of been an uphill\nbattle to implement. Thanks to previous releases from the past few months, and the rewrite of the\nproject graph, task builder, and more, this implementation was a breeze. To finalize the RFC, we\nwent with option 2, by adding a new ",(0,i.kt)("inlineCode",{parentName:"p"},"extends")," field to task configurations."),(0,i.kt)("p",null,"With this new addition, we can now rewrite this old configuration, which was needlessly\nrepetitive..."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '*.js'\n - '.eslintrc.js'\n - 'tsconfig.json'\n - '/.eslintignore'\n - '/.eslintrc.js'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n\n lint-fix:\n command: 'eslint . --fix'\n local: true\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '*.js'\n - '.eslintrc.js'\n - 'tsconfig.json'\n - '/.eslintignore'\n - '/.eslintrc.js'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n")),(0,i.kt)("p",null,"Into the following configuration."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n lint:\n command: 'eslint .'\n inputs:\n - '@globs(sources)'\n - '@globs(tests)'\n - '*.js'\n - '.eslintrc.js'\n - 'tsconfig.json'\n - '/.eslintignore'\n - '/.eslintrc.js'\n - '/tsconfig.eslint.json'\n - '/tsconfig.options.json'\n\n lint-fix:\n extends: 'lint'\n args: '--fix'\n local: true\n")),(0,i.kt)("p",null,"We're very happy with this solution, as it's far more readable, maintainable, and doesn't introduce\nyet another paradigm to learn. Our goal was to be as familiar as possible, while providing extensive\nfunctionality behind the scenes, which we believe to have achieved."),(0,i.kt)("p",null,"Some other interesting facts around task extending:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"When extending a task, ",(0,i.kt)("a",{parentName:"li",href:"/docs/concepts/task-inheritance#merge-strategies"},"merge strategies")," are\napplied in a similar fashion to inheritance."),(0,i.kt)("li",{parentName:"ul"},"Inherited tasks can be extended from by project-level tasks."),(0,i.kt)("li",{parentName:"ul"},"It's possible to create multiple extended chains.")),(0,i.kt)("h2",{id:"configure-tasks-as-interactive"},"Configure tasks as interactive"),(0,i.kt)("p",null,"Six months ago, we added support for ",(0,i.kt)("a",{parentName:"p",href:"./v0.24#interactive-tasks"},"interactive tasks in v0.24"),", but\nonly if certain conditions were met: if only 1 target is running, they are considered interactive,\nor if the ",(0,i.kt)("inlineCode",{parentName:"p"},"--interactive")," option was passed to ",(0,i.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,i.kt)("inlineCode",{parentName:"a"},"moon run")),". However, we believe\nit nice to support interactive tasks through task configuration directly, but it required some\nthought into how this would work within the dependency graph and pipeline, as only 1 task can\ninteract with stdin at a time."),(0,i.kt)("p",null,"We solved this problem by reworking our dependency graph so that interactive tasks are isolated from\nother actions in the graph, and are not run in parallel with other actions. This will result in\nlonger dependency chains, but results in a working stdin solution."),(0,i.kt)("p",null,"To mark a task as interactive, enable the ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/project#interactive"},(0,i.kt)("inlineCode",{parentName:"a"},"options.interactive")),"\nsetting."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n init:\n command: 'init-app'\n options:\n interactive: true\n")),(0,i.kt)("h2",{id:"tokens-in-enviroment-variables"},"Tokens in enviroment variables"),(0,i.kt)("p",null,"Up until now, ",(0,i.kt)("a",{parentName:"p",href:"/docs/concepts/token"},"token functions and variables")," were only supported in task\ncommands, args, inputs, and outputs, but not environment variables... why? Honestly, there was no\nreal reason they weren't supported, it simply never crossed our mind! But thanks to requests from\nthe community, both token functions and variables are now supported in task\n",(0,i.kt)("a",{parentName:"p",href:"/docs/config/project#env-1"},(0,i.kt)("inlineCode",{parentName:"a"},"env")),"."),(0,i.kt)("p",null,"This is great for propagating moon values to other systems. For example, say you want to use moon\nproject names for Sentry, keeping a 1:1 mapping."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n start:\n command: 'run-server'\n env:\n SENTRY_PROJECT: '$project'\n")),(0,i.kt)("p",null,"If you're familiar with tokens, you may be asking yourself, \"How do token functions work since they\nexpand to a list of paths?\" That's a great question! When token functions are used in an environment\nvariable, like ",(0,i.kt)("inlineCode",{parentName:"p"},"@group(sources)"),", the list of paths will be joined with a comma (",(0,i.kt)("inlineCode",{parentName:"p"},","),")."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n build:\n # ...\n env:\n SRCS: '@group(sources)'\n")),(0,i.kt)("p",null,"Since the environment variable is simply a string, you could parse it with your language of choice\nto extract the list of paths."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const paths = process.env.SRCS.split(',');\n")),(0,i.kt)("h2",{id:"other-changes"},"Other changes"),(0,i.kt)("p",null,"View the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.12.0"},"official release")," for a full list\nof changes."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Added git worktree support."),(0,i.kt)("li",{parentName:"ul"},"Updated task ",(0,i.kt)("inlineCode",{parentName:"li"},"outputs")," to support negated globs."),(0,i.kt)("li",{parentName:"ul"},"Will now log a warning to the console if a configuration file uses the ",(0,i.kt)("inlineCode",{parentName:"li"},".yaml")," extension.")))}c.isMDXComponent=!0},86612:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.12-3a89ebd0fa3a2732d0f38951967f4d19.png"}}]); \ No newline at end of file diff --git a/assets/js/b78f40a6.bf83221d.js b/assets/js/b78f40a6.bf83221d.js deleted file mode 100644 index 20a2e7166db..00000000000 --- a/assets/js/b78f40a6.bf83221d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6629],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||i;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var u=2;u<i;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const i="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(i,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),r=n(27378),i=n(37140),l=n(83457),o=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:o,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==o&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},l,{className:(0,i.Z)("tabs__item",c,l?.className,{"tabs__item--active":o===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,o.Y)(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),i=n(30654),l=n(70784),o=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(l.location.search);t.set(o,e),l.replace({...l.location,search:t.toString()})}),[o,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[m,d]=p({queryString:n,groupId:r}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,o.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),b=(()=>{const e=m??h;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{b&&s(b)}),[b]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,i]),tabValues:i}}},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{header:t,inline:n,updated:i,version:l}=e;return a.createElement(r.Z,{text:`v${l}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:i,align:l="center",padding:o="1rem"}=e;return a.createElement("div",{style:{marginBottom:o,marginTop:o,textAlign:l}},a.createElement("img",{src:t.default,width:n,alt:r,title:i,className:"inline-block"}))}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},11279:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>c,default:()=>g,frontMatter:()=>u,metadata:()=>p,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),i=n(33337),l=n(39798),o=n(88109),s=n(79022);const u={title:"Continuous integration (CI)"},c=void 0,p={unversionedId:"guides/ci",id:"guides/ci",title:"Continuous integration (CI)",description:"All companies and projects rely on continuous integration (CI) to ensure high quality code and to",source:"@site/docs/guides/ci.mdx",sourceDirName:"guides",slug:"/guides/ci",permalink:"/docs/guides/ci",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/ci.mdx",tags:[],version:"current",frontMatter:{title:"Continuous integration (CI)"},sidebar:"guides",next:{title:"Code generation",permalink:"/docs/guides/codegen"}},m={},d=[{value:"How it works",id:"how-it-works",level:2},{value:"Configuring tasks",id:"configuring-tasks",level:2},{value:"Integrating",id:"integrating",level:2},{value:'Choosing targets<VersionLabel version="1.14.0" />',id:"choosing-targets",level:2},{value:"Comparing revisions",id:"comparing-revisions",level:2},{value:"Parallelizing tasks",id:"parallelizing-tasks",level:2},{value:"Caching artifacts",id:"caching-artifacts",level:2},{value:"Manual persistence",id:"manual-persistence",level:3},{value:"Reporting run results",id:"reporting-run-results",level:2}],h={toc:d};function g(e){let{components:t,...u}=e;return(0,r.kt)("wrapper",(0,a.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"All companies and projects rely on continuous integration (CI) to ensure high quality code and to\navoid regressions. Because this is such a critical piece of every developer's workflow, we wanted to\nsupport it as a first-class feature within moon, and we do just that with the\n",(0,r.kt)("a",{parentName:"p",href:"../commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," command."),(0,r.kt)("h2",{id:"how-it-works"},"How it works"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"ci")," command does all the heavy lifting necessary for effectively running jobs. It achieves this\nby automatically running the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Determines touched files by comparing the current HEAD against a base."),(0,r.kt)("li",{parentName:"ul"},"Determines all ",(0,r.kt)("a",{parentName:"li",href:"../concepts/target"},"targets")," that need to run based on touched files."),(0,r.kt)("li",{parentName:"ul"},"Additionally runs affected ",(0,r.kt)("a",{parentName:"li",href:"../concepts/target"},"targets")," dependencies ",(0,r.kt)("em",{parentName:"li"},"and")," dependents."),(0,r.kt)("li",{parentName:"ul"},"Generates an action and dependency graph."),(0,r.kt)("li",{parentName:"ul"},"Installs the toolchain, Node.js, and npm dependencies."),(0,r.kt)("li",{parentName:"ul"},"Runs all actions within the graph using a thread pool."),(0,r.kt)("li",{parentName:"ul"},"Displays stats about all passing, failed, and invalid actions.")),(0,r.kt)("h2",{id:"configuring-tasks"},"Configuring tasks"),(0,r.kt)("p",null,"By default, ",(0,r.kt)("em",{parentName:"p"},"all tasks")," run in CI, as you should always be building, linting, typechecking, testing,\nso on and so forth. However, this isn't always true, so this can be disabled on a per-task basis\nthrough the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#runinci"},(0,r.kt)("inlineCode",{parentName:"a"},"runInCI"))," or ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," options."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n dev:\n command: 'webpack server'\n options:\n runInCI: false\n # Or\n local: true\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"This option ",(0,r.kt)("em",{parentName:"p"},"must")," be set to false for tasks that spawn a long-running or never-ending process, like\nHTTP or development servers. To help mitigate this, tasks named ",(0,r.kt)("inlineCode",{parentName:"p"},"dev"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"start"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"serve")," are false\nby default. This can be easily controlled with the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," setting.")),(0,r.kt)("h2",{id:"integrating"},"Integrating"),(0,r.kt)("p",null,"The following examples can be referenced for setting up moon and its CI workflow in popular\nproviders. For GitHub, we're using our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},(0,r.kt)("inlineCode",{parentName:"a"},"setup-moon")," action")," to install moon. For other\nproviders, we assume moon is an npm dependency and must be installed with Node.js."),(0,r.kt)(i.Z,{groupId:"ci-env",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"github",label:"GitHub",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"name: 'Pipeline'\non:\n push:\n branches:\n - 'master'\n pull_request:\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci'\n"))),(0,r.kt)(l.Z,{value:"buildkite",label:"Buildkite",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".buildkite/pipeline.yml"',title:'".buildkite/pipeline.yml"'},"steps:\n - label: 'CI'\n commands:\n - 'yarn install --immutable'\n - 'yarn moon ci'\n"))),(0,r.kt)(l.Z,{value:"circleci",label:"CircleCI",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".circleci/config.yml"',title:'".circleci/config.yml"'},"version: 2.1\norbs:\n node: 'circleci/node@5.0.2'\njobs:\n ci:\n docker:\n - image: 'cimg/base:stable'\n steps:\n - checkout\n - node/install:\n install-yarn: true\n node-version: '16.13'\n - node/install-packages:\n check-cache: 'always'\n pkg-manager: 'yarn-berry'\n - run: 'yarn moon ci'\nworkflows:\n pipeline:\n jobs:\n - 'ci'\n"))),(0,r.kt)(l.Z,{value:"travisci",label:"TravisCI",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".travis.yml"',title:'".travis.yml"'},"language: node_js\nnode_js:\n - 16\ncache: yarn\nscript: 'moon ci'\n")))),(0,r.kt)("h2",{id:"choosing-targets"},"Choosing targets",(0,r.kt)(s.Z,{version:"1.14.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"By default ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci")," will run ",(0,r.kt)("em",{parentName:"p"},"all")," tasks from ",(0,r.kt)("em",{parentName:"p"},"all")," projects that are affected by touched files and\nhave the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#runinci"},(0,r.kt)("inlineCode",{parentName:"a"},"runInCI"))," task option enabled. This is a great catch-all\nsolution, but may not vibe with your workflow or requirements."),(0,r.kt)("p",null,"If you'd prefer more control, you can pass a list of targets to ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci"),", instead of moon\nattempting to detect them. When providing targets, ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci")," will still only run them if affected by\ntouched files, but will ignore the ",(0,r.kt)("inlineCode",{parentName:"p"},"runInCI")," option."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run all builds\n$ moon ci :build\n\n# In another job, run tests\n$ moon ci :test :lint\n")),(0,r.kt)("h2",{id:"comparing-revisions"},"Comparing revisions"),(0,r.kt)("p",null,"By default the command will compare the current HEAD against a base revision, which is typically the\nconfigured ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#defaultbranch"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch"))," (master, main, trunk, etc). Both\nof these can be customized with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--base")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"--head")," options respectively."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon ci --base <BRANCH> --head <SHA>\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"MOON_BASE")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MOON_HEAD")," environment variables can also be used, which takes highest\nprecedence."),(0,r.kt)("h2",{id:"parallelizing-tasks"},"Parallelizing tasks"),(0,r.kt)("p",null,"If your CI environment supports sharding across multiple jobs, then you can utilize moon's built in\nparallelism by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--jobTotal")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"--job")," options. The ",(0,r.kt)("inlineCode",{parentName:"p"},"--jobTotal")," option is an integer of\nthe total number of jobs available, and ",(0,r.kt)("inlineCode",{parentName:"p"},"--job")," is the current index (0 based) amongst the total."),(0,r.kt)("p",null,"When these options are passed, moon will only run affected ",(0,r.kt)("a",{parentName:"p",href:"../concepts/target"},"targets")," based on\nthe current job slice."),(0,r.kt)(i.Z,{groupId:"ci-env",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"github",label:"GitHub",mdxType:"TabItem"},(0,r.kt)("p",null,"GitHub Actions do not support native parallelism, but it can be emulated using it's matrix."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n # ...\n strategy:\n matrix:\n index: [0, 1]\n steps:\n # ...\n - run: 'yarn moon ci --job ${{ matrix.index }} --jobTotal 2'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs"},"Documentation")))),(0,r.kt)(l.Z,{value:"buildkite",label:"Buildkite",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".buildkite/pipeline.yml"',title:'".buildkite/pipeline.yml"'},"# ...\nsteps:\n - label: 'CI'\n parallelism: 10\n commands:\n # ...\n - 'yarn moon ci --job $$BUILDKITE_PARALLEL_JOB --jobTotal $$BUILDKITE_PARALLEL_JOB_COUNT'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://buildkite.com/docs/tutorials/parallel-builds#parallel-jobs"},"Documentation")))),(0,r.kt)(l.Z,{value:"circleci",label:"CircleCI",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".circleci/config.yml"',title:'".circleci/config.yml"'},"# ...\njobs:\n ci:\n # ...\n parallelism: 10\n steps:\n # ...\n - run: 'yarn moon ci --job $CIRCLE_NODE_INDEX --jobTotal $CIRCLE_NODE_TOTAL'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://circleci.com/docs/2.0/parallelism-faster-jobs/"},"Documentation")))),(0,r.kt)(l.Z,{value:"travisci",label:"TravisCI",mdxType:"TabItem"},(0,r.kt)("p",null,"TravisCI does not support native parallelism, but it can be emulated using it's matrix."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".travis.yml"',title:'".travis.yml"'},"# ...\nenv:\n global:\n - TRAVIS_JOB_TOTAL=2\n jobs:\n - TRAVIS_JOB_INDEX=0\n - TRAVIS_JOB_INDEX=1\nscript: 'moon ci --job $TRAVIS_JOB_INDEX --jobTotal $TRAVIS_JOB_TOTAL'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.travis-ci.com/user/speeding-up-the-build/"},"Documentation"))))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Your CI environment may provide environment variables for these 2 values.")),(0,r.kt)("h2",{id:"caching-artifacts"},"Caching artifacts"),(0,r.kt)("p",null,"When a CI pipeline reaches a certain scale, its run times increase, tasks are unnecessarily ran, and\nbuild artifacts are not shared. To combat this, we support ",(0,r.kt)("a",{parentName:"p",href:"./remote-cache"},"remote caching"),", a\nmechanism where we store build artifacts in the cloud, and sync these artifacts to machines on\ndemand."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Remote caching is powered by our ",(0,r.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase service"),". Start using today for free!")),(0,r.kt)("h3",{id:"manual-persistence"},"Manual persistence"),(0,r.kt)("p",null,"If you'd prefer to ",(0,r.kt)("em",{parentName:"p"},"not use")," remote caching at this time, you can cache artifacts yourself, by\npersisting the ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/{hashes,outputs}")," directories. All other files and folders in\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache")," ",(0,r.kt)("em",{parentName:"p"},"should not")," be persisted, as they are not safe/portable across machines."),(0,r.kt)("p",null,"However, because tasks can generate a different hash each run, you'll need to manually invalidate\nyour cache. Blindly storing the ",(0,r.kt)("inlineCode",{parentName:"p"},"hashes")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"outputs")," directories without a mechanism to invalidate\nwill simply not work, as the contents will drastically change between CI runs. This is the primary\nreason why the remote caching service exists."),(0,r.kt)("h2",{id:"reporting-run-results"},"Reporting run results"),(0,r.kt)("p",null,"If you're using GitHub Actions as your CI provider, we suggest using our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/run-report-action")),". This\naction will report the results of a ",(0,r.kt)("a",{parentName:"p",href:"../commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," run to a pull request as a comment\nand workflow summary."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n # ...\n - run: 'yarn moon ci'\n - uses: 'moonrepo/run-report-action@v1'\n if: success() || failure()\n with:\n access-token: ${{ secrets.GITHUB_TOKEN }}\n")),(0,r.kt)("p",null,"The report looks something like the following:"),(0,r.kt)(o.Z,{src:n(53432),width:"60%",mdxType:"Image"}))}g.isMDXComponent=!0},53432:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/run-report-41cffa17cd530ab8cca5cef47b38dcfd.png"}}]); \ No newline at end of file diff --git a/assets/js/b78f40a6.f3681826.js b/assets/js/b78f40a6.f3681826.js new file mode 100644 index 00000000000..b78d2b0aefc --- /dev/null +++ b/assets/js/b78f40a6.f3681826.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76629],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||i;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var u=2;u<i;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const i="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(i,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(25773),r=n(27378),i=n(37140),l=n(83457),o=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:o,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==o&&(m(t),s(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>p.push(e),onKeyDown:h,onClick:d},l,{className:(0,i.Z)("tabs__item",c,l?.className,{"tabs__item--active":o===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,o.Y)(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function h(e){const t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),i=n(30654),l=n(70784),o=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(l.location.search);t.set(o,e),l.replace({...l.location,search:t.toString()})}),[o,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=u(e),[l,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[m,d]=p({queryString:n,groupId:r}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,o.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),b=(()=>{const e=m??h;return c({value:e,tabValues:i})?e:null})();(0,a.useLayoutEffect)((()=>{b&&s(b)}),[b]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,i]),tabValues:i}}},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{header:t,inline:n,updated:i,version:l}=e;return a.createElement(r.Z,{text:`v${l}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:i,align:l="center",padding:o="1rem"}=e;return a.createElement("div",{style:{marginBottom:o,marginTop:o,textAlign:l}},a.createElement("img",{src:t.default,width:n,alt:r,title:i,className:"inline-block"}))}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},11279:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>c,default:()=>g,frontMatter:()=>u,metadata:()=>p,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),i=n(33337),l=n(39798),o=n(88109),s=n(79022);const u={title:"Continuous integration (CI)"},c=void 0,p={unversionedId:"guides/ci",id:"guides/ci",title:"Continuous integration (CI)",description:"All companies and projects rely on continuous integration (CI) to ensure high quality code and to",source:"@site/docs/guides/ci.mdx",sourceDirName:"guides",slug:"/guides/ci",permalink:"/docs/guides/ci",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/ci.mdx",tags:[],version:"current",frontMatter:{title:"Continuous integration (CI)"},sidebar:"guides",next:{title:"Code generation",permalink:"/docs/guides/codegen"}},m={},d=[{value:"How it works",id:"how-it-works",level:2},{value:"Configuring tasks",id:"configuring-tasks",level:2},{value:"Integrating",id:"integrating",level:2},{value:'Choosing targets<VersionLabel version="1.14.0" />',id:"choosing-targets",level:2},{value:"Comparing revisions",id:"comparing-revisions",level:2},{value:"Parallelizing tasks",id:"parallelizing-tasks",level:2},{value:"Caching artifacts",id:"caching-artifacts",level:2},{value:"Manual persistence",id:"manual-persistence",level:3},{value:"Reporting run results",id:"reporting-run-results",level:2}],h={toc:d};function g(e){let{components:t,...u}=e;return(0,r.kt)("wrapper",(0,a.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"All companies and projects rely on continuous integration (CI) to ensure high quality code and to\navoid regressions. Because this is such a critical piece of every developer's workflow, we wanted to\nsupport it as a first-class feature within moon, and we do just that with the\n",(0,r.kt)("a",{parentName:"p",href:"../commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," command."),(0,r.kt)("h2",{id:"how-it-works"},"How it works"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"ci")," command does all the heavy lifting necessary for effectively running jobs. It achieves this\nby automatically running the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Determines touched files by comparing the current HEAD against a base."),(0,r.kt)("li",{parentName:"ul"},"Determines all ",(0,r.kt)("a",{parentName:"li",href:"../concepts/target"},"targets")," that need to run based on touched files."),(0,r.kt)("li",{parentName:"ul"},"Additionally runs affected ",(0,r.kt)("a",{parentName:"li",href:"../concepts/target"},"targets")," dependencies ",(0,r.kt)("em",{parentName:"li"},"and")," dependents."),(0,r.kt)("li",{parentName:"ul"},"Generates an action and dependency graph."),(0,r.kt)("li",{parentName:"ul"},"Installs the toolchain, Node.js, and npm dependencies."),(0,r.kt)("li",{parentName:"ul"},"Runs all actions within the graph using a thread pool."),(0,r.kt)("li",{parentName:"ul"},"Displays stats about all passing, failed, and invalid actions.")),(0,r.kt)("h2",{id:"configuring-tasks"},"Configuring tasks"),(0,r.kt)("p",null,"By default, ",(0,r.kt)("em",{parentName:"p"},"all tasks")," run in CI, as you should always be building, linting, typechecking, testing,\nso on and so forth. However, this isn't always true, so this can be disabled on a per-task basis\nthrough the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#runinci"},(0,r.kt)("inlineCode",{parentName:"a"},"runInCI"))," or ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," options."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n dev:\n command: 'webpack server'\n options:\n runInCI: false\n # Or\n local: true\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"This option ",(0,r.kt)("em",{parentName:"p"},"must")," be set to false for tasks that spawn a long-running or never-ending process, like\nHTTP or development servers. To help mitigate this, tasks named ",(0,r.kt)("inlineCode",{parentName:"p"},"dev"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"start"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"serve")," are false\nby default. This can be easily controlled with the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," setting.")),(0,r.kt)("h2",{id:"integrating"},"Integrating"),(0,r.kt)("p",null,"The following examples can be referenced for setting up moon and its CI workflow in popular\nproviders. For GitHub, we're using our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/setup-moon-action"},(0,r.kt)("inlineCode",{parentName:"a"},"setup-moon")," action")," to install moon. For other\nproviders, we assume moon is an npm dependency and must be installed with Node.js."),(0,r.kt)(i.Z,{groupId:"ci-env",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"github",label:"GitHub",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"name: 'Pipeline'\non:\n push:\n branches:\n - 'master'\n pull_request:\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci'\n"))),(0,r.kt)(l.Z,{value:"buildkite",label:"Buildkite",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".buildkite/pipeline.yml"',title:'".buildkite/pipeline.yml"'},"steps:\n - label: 'CI'\n commands:\n - 'yarn install --immutable'\n - 'yarn moon ci'\n"))),(0,r.kt)(l.Z,{value:"circleci",label:"CircleCI",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".circleci/config.yml"',title:'".circleci/config.yml"'},"version: 2.1\norbs:\n node: 'circleci/node@5.0.2'\njobs:\n ci:\n docker:\n - image: 'cimg/base:stable'\n steps:\n - checkout\n - node/install:\n install-yarn: true\n node-version: '16.13'\n - node/install-packages:\n check-cache: 'always'\n pkg-manager: 'yarn-berry'\n - run: 'yarn moon ci'\nworkflows:\n pipeline:\n jobs:\n - 'ci'\n"))),(0,r.kt)(l.Z,{value:"travisci",label:"TravisCI",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".travis.yml"',title:'".travis.yml"'},"language: node_js\nnode_js:\n - 16\ncache: yarn\nscript: 'moon ci'\n")))),(0,r.kt)("h2",{id:"choosing-targets"},"Choosing targets",(0,r.kt)(s.Z,{version:"1.14.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"By default ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci")," will run ",(0,r.kt)("em",{parentName:"p"},"all")," tasks from ",(0,r.kt)("em",{parentName:"p"},"all")," projects that are affected by touched files and\nhave the ",(0,r.kt)("a",{parentName:"p",href:"../config/project#runinci"},(0,r.kt)("inlineCode",{parentName:"a"},"runInCI"))," task option enabled. This is a great catch-all\nsolution, but may not vibe with your workflow or requirements."),(0,r.kt)("p",null,"If you'd prefer more control, you can pass a list of targets to ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci"),", instead of moon\nattempting to detect them. When providing targets, ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci")," will still only run them if affected by\ntouched files, but will ignore the ",(0,r.kt)("inlineCode",{parentName:"p"},"runInCI")," option."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run all builds\n$ moon ci :build\n\n# In another job, run tests\n$ moon ci :test :lint\n")),(0,r.kt)("h2",{id:"comparing-revisions"},"Comparing revisions"),(0,r.kt)("p",null,"By default the command will compare the current HEAD against a base revision, which is typically the\nconfigured ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace#defaultbranch"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch"))," (master, main, trunk, etc). Both\nof these can be customized with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--base")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"--head")," options respectively."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon ci --base <BRANCH> --head <SHA>\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"MOON_BASE")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MOON_HEAD")," environment variables can also be used, which takes highest\nprecedence."),(0,r.kt)("h2",{id:"parallelizing-tasks"},"Parallelizing tasks"),(0,r.kt)("p",null,"If your CI environment supports sharding across multiple jobs, then you can utilize moon's built in\nparallelism by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--jobTotal")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"--job")," options. The ",(0,r.kt)("inlineCode",{parentName:"p"},"--jobTotal")," option is an integer of\nthe total number of jobs available, and ",(0,r.kt)("inlineCode",{parentName:"p"},"--job")," is the current index (0 based) amongst the total."),(0,r.kt)("p",null,"When these options are passed, moon will only run affected ",(0,r.kt)("a",{parentName:"p",href:"../concepts/target"},"targets")," based on\nthe current job slice."),(0,r.kt)(i.Z,{groupId:"ci-env",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"github",label:"GitHub",mdxType:"TabItem"},(0,r.kt)("p",null,"GitHub Actions do not support native parallelism, but it can be emulated using it's matrix."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n # ...\n strategy:\n matrix:\n index: [0, 1]\n steps:\n # ...\n - run: 'yarn moon ci --job ${{ matrix.index }} --jobTotal 2'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs"},"Documentation")))),(0,r.kt)(l.Z,{value:"buildkite",label:"Buildkite",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".buildkite/pipeline.yml"',title:'".buildkite/pipeline.yml"'},"# ...\nsteps:\n - label: 'CI'\n parallelism: 10\n commands:\n # ...\n - 'yarn moon ci --job $$BUILDKITE_PARALLEL_JOB --jobTotal $$BUILDKITE_PARALLEL_JOB_COUNT'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://buildkite.com/docs/tutorials/parallel-builds#parallel-jobs"},"Documentation")))),(0,r.kt)(l.Z,{value:"circleci",label:"CircleCI",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".circleci/config.yml"',title:'".circleci/config.yml"'},"# ...\njobs:\n ci:\n # ...\n parallelism: 10\n steps:\n # ...\n - run: 'yarn moon ci --job $CIRCLE_NODE_INDEX --jobTotal $CIRCLE_NODE_TOTAL'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://circleci.com/docs/2.0/parallelism-faster-jobs/"},"Documentation")))),(0,r.kt)(l.Z,{value:"travisci",label:"TravisCI",mdxType:"TabItem"},(0,r.kt)("p",null,"TravisCI does not support native parallelism, but it can be emulated using it's matrix."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".travis.yml"',title:'".travis.yml"'},"# ...\nenv:\n global:\n - TRAVIS_JOB_TOTAL=2\n jobs:\n - TRAVIS_JOB_INDEX=0\n - TRAVIS_JOB_INDEX=1\nscript: 'moon ci --job $TRAVIS_JOB_INDEX --jobTotal $TRAVIS_JOB_TOTAL'\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.travis-ci.com/user/speeding-up-the-build/"},"Documentation"))))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Your CI environment may provide environment variables for these 2 values.")),(0,r.kt)("h2",{id:"caching-artifacts"},"Caching artifacts"),(0,r.kt)("p",null,"When a CI pipeline reaches a certain scale, its run times increase, tasks are unnecessarily ran, and\nbuild artifacts are not shared. To combat this, we support ",(0,r.kt)("a",{parentName:"p",href:"./remote-cache"},"remote caching"),", a\nmechanism where we store build artifacts in the cloud, and sync these artifacts to machines on\ndemand."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Remote caching is powered by our ",(0,r.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase service"),". Start using today for free!")),(0,r.kt)("h3",{id:"manual-persistence"},"Manual persistence"),(0,r.kt)("p",null,"If you'd prefer to ",(0,r.kt)("em",{parentName:"p"},"not use")," remote caching at this time, you can cache artifacts yourself, by\npersisting the ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache/{hashes,outputs}")," directories. All other files and folders in\n",(0,r.kt)("inlineCode",{parentName:"p"},".moon/cache")," ",(0,r.kt)("em",{parentName:"p"},"should not")," be persisted, as they are not safe/portable across machines."),(0,r.kt)("p",null,"However, because tasks can generate a different hash each run, you'll need to manually invalidate\nyour cache. Blindly storing the ",(0,r.kt)("inlineCode",{parentName:"p"},"hashes")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"outputs")," directories without a mechanism to invalidate\nwill simply not work, as the contents will drastically change between CI runs. This is the primary\nreason why the remote caching service exists."),(0,r.kt)("h2",{id:"reporting-run-results"},"Reporting run results"),(0,r.kt)("p",null,"If you're using GitHub Actions as your CI provider, we suggest using our\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/run-report-action")),". This\naction will report the results of a ",(0,r.kt)("a",{parentName:"p",href:"../commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," run to a pull request as a comment\nand workflow summary."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"# ...\njobs:\n ci:\n name: 'CI'\n runs-on: 'ubuntu-latest'\n steps:\n # ...\n - run: 'yarn moon ci'\n - uses: 'moonrepo/run-report-action@v1'\n if: success() || failure()\n with:\n access-token: ${{ secrets.GITHUB_TOKEN }}\n")),(0,r.kt)("p",null,"The report looks something like the following:"),(0,r.kt)(o.Z,{src:n(53432),width:"60%",mdxType:"Image"}))}g.isMDXComponent=!0},53432:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/run-report-41cffa17cd530ab8cca5cef47b38dcfd.png"}}]); \ No newline at end of file diff --git a/assets/js/b7a8f57a.44a50114.js b/assets/js/b7a8f57a.44a50114.js new file mode 100644 index 00000000000..a39c02ede33 --- /dev/null +++ b/assets/js/b7a8f57a.44a50114.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47890],{35318:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var n=o(27378);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function l(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?a(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function i(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},a=Object.keys(e);for(n=0;n<a.length;n++)o=a[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)o=a[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},d=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=p(o),m=r,h=u["".concat(s,".").concat(m)]||u[m]||c[m]||a;return o?n.createElement(h,l(l({ref:t},d),{},{components:o})):n.createElement(h,l({ref:t},d))}));function m(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<a;p++)l[p]=o[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,o)}u.displayName="MDXCreateElement"},49286:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=o(25773),r=(o(27378),o(35318));const a={slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},l=void 0,i={permalink:"/blog/proto-v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx",source:"@site/blog/2023-09-18_proto-v0.18.mdx",title:"proto v0.18 - List installed tools and configure HTTP client",description:"Today we've got a small release that includes some helpful features.",date:"2023-09-18T00:00:00.000Z",formattedDate:"September 18, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"http",permalink:"/blog/tags/http"},{label:"registry",permalink:"/blog/tags/registry"},{label:"index",permalink:"/blog/tags/index"}],readingTime:1.83,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},prevItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"},nextItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"}},s={image:o(10576).Z,authorsImageUrls:[void 0]},p=[{value:"New <code>proto tools</code> command",id:"new-proto-tools-command",level:2},{value:"New <code>[http]</code> user settings",id:"new-http-user-settings",level:2},{value:"Index for third-party tools",id:"index-for-third-party-tools",level:2},{value:"Other changes",id:"other-changes",level:2}],d={toc:p};function c(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Today we've got a small release that includes some helpful features."),(0,r.kt)("h2",{id:"new-proto-tools-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto tools")," command"),(0,r.kt)("p",null,"Are you curious what tools you have installed? And more specifically, which versions? What about\nconfigured aliases? Until now, you had to manually check the ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools")," directory for this\ninformation, but now, you can simply run ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/tools"},(0,r.kt)("inlineCode",{parentName:"a"},"proto tools"))," to get a list\nof all installed tools."),(0,r.kt)("p",null,"This command will list all tools that have been installed, along with their installed versions,\nrelevant timestamps, available aliases, and store location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto tools\ngo - Go\n Store: ~/.proto/tools/go\n Versions:\n 1.20.0 - installed 08/24/23, last used 09/18/23\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\n\nnode - Node.js\n Store: ~/.proto/tools/node\n Aliases:\n ~20 = stable\n Versions:\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\n 18.14.0 - installed 09/04/23, last used 09/04/23\n 18.17.1 - installed 09/04/23, last used 09/04/23\n 19.0.0 - installed 09/03/23\n 20.0.0 - installed 09/03/23\n 20.6.0 - installed 09/04/23, last used 09/18/23\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This information can also be represented as JSON by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," flag.")),(0,r.kt)("h2",{id:"new-http-user-settings"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"[http]")," user settings"),(0,r.kt)("p",null,"Furthermore, we've added a new ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config#http"},(0,r.kt)("inlineCode",{parentName:"a"},"[http]")," setting to ",(0,r.kt)("inlineCode",{parentName:"a"},"~/.proto/config.toml")),"\nthat allows you to configure aspects of the HTTP client, which is primarily used for downloading\ntools."),(0,r.kt)("p",null,"This may useful if you're behind a proxy, a VPN, or corporate network, and certain requests and\ncertificates are blocked."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'[http]\nproxies = ["http://intra.net/proxy"]\nroot-cert = "/path/to/root/cert.pem"\n')),(0,r.kt)("h2",{id:"index-for-third-party-tools"},"Index for third-party tools"),(0,r.kt)("p",null,"Now that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a\nthird-party index, a registry of all available tools. We've updated the official\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/tools"},"Supported tools")," documentation to now include third-party tools."),(0,r.kt)("p",null,"At this time, the list of tools is powered by a JS/JSON object,\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx"},"which can be found here"),".\nIn the future, we may move this to a database, add filtering, sorting, and everything else necessary\nfor showcasing tools maintained by the community!"),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.18.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML,\nwhich may cause breakages depending on a version mismatch between proto and the plugin.")))}c.isMDXComponent=!0},10576:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/v0.18-5b6a0663f8077d6443d06ab243e966f6.png"}}]); \ No newline at end of file diff --git a/assets/js/b7a8f57a.ed128740.js b/assets/js/b7a8f57a.ed128740.js deleted file mode 100644 index 1c55905effb..00000000000 --- a/assets/js/b7a8f57a.ed128740.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7890],{35318:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var n=o(27378);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function l(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?a(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function i(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},a=Object.keys(e);for(n=0;n<a.length;n++)o=a[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)o=a[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):l(l({},t),e)),o},d=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=p(o),m=r,h=u["".concat(s,".").concat(m)]||u[m]||c[m]||a;return o?n.createElement(h,l(l({ref:t},d),{},{components:o})):n.createElement(h,l({ref:t},d))}));function m(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<a;p++)l[p]=o[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,o)}u.displayName="MDXCreateElement"},49286:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=o(25773),r=(o(27378),o(35318));const a={slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},l=void 0,i={permalink:"/blog/proto-v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx",source:"@site/blog/2023-09-18_proto-v0.18.mdx",title:"proto v0.18 - List installed tools and configure HTTP client",description:"Today we've got a small release that includes some helpful features.",date:"2023-09-18T00:00:00.000Z",formattedDate:"September 18, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"http",permalink:"/blog/tags/http"},{label:"registry",permalink:"/blog/tags/registry"},{label:"index",permalink:"/blog/tags/index"}],readingTime:1.83,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.18",title:"proto v0.18 - List installed tools and configure HTTP client",authors:["milesj"],tags:["proto","http","registry","index"],image:"./img/proto/v0.18.png"},prevItem:{title:"moon v1.14 - Improvements to running targets and toolchain versions",permalink:"/blog/moon-v1.14"},nextItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"}},s={image:o(10576).Z,authorsImageUrls:[void 0]},p=[{value:"New <code>proto tools</code> command",id:"new-proto-tools-command",level:2},{value:"New <code>[http]</code> user settings",id:"new-http-user-settings",level:2},{value:"Index for third-party tools",id:"index-for-third-party-tools",level:2},{value:"Other changes",id:"other-changes",level:2}],d={toc:p};function c(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Today we've got a small release that includes some helpful features."),(0,r.kt)("h2",{id:"new-proto-tools-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto tools")," command"),(0,r.kt)("p",null,"Are you curious what tools you have installed? And more specifically, which versions? What about\nconfigured aliases? Until now, you had to manually check the ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/tools")," directory for this\ninformation, but now, you can simply run ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/tools"},(0,r.kt)("inlineCode",{parentName:"a"},"proto tools"))," to get a list\nof all installed tools."),(0,r.kt)("p",null,"This command will list all tools that have been installed, along with their installed versions,\nrelevant timestamps, available aliases, and store location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto tools\ngo - Go\n Store: ~/.proto/tools/go\n Versions:\n 1.20.0 - installed 08/24/23, last used 09/18/23\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\n\nnode - Node.js\n Store: ~/.proto/tools/node\n Aliases:\n ~20 = stable\n Versions:\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\n 18.14.0 - installed 09/04/23, last used 09/04/23\n 18.17.1 - installed 09/04/23, last used 09/04/23\n 19.0.0 - installed 09/03/23\n 20.0.0 - installed 09/03/23\n 20.6.0 - installed 09/04/23, last used 09/18/23\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This information can also be represented as JSON by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," flag.")),(0,r.kt)("h2",{id:"new-http-user-settings"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"[http]")," user settings"),(0,r.kt)("p",null,"Furthermore, we've added a new ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config#http"},(0,r.kt)("inlineCode",{parentName:"a"},"[http]")," setting to ",(0,r.kt)("inlineCode",{parentName:"a"},"~/.proto/config.toml")),"\nthat allows you to configure aspects of the HTTP client, which is primarily used for downloading\ntools."),(0,r.kt)("p",null,"This may useful if you're behind a proxy, a VPN, or corporate network, and certain requests and\ncertificates are blocked."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="~/.proto/config.toml"',title:'"~/.proto/config.toml"'},'[http]\nproxies = ["http://intra.net/proxy"]\nroot-cert = "/path/to/root/cert.pem"\n')),(0,r.kt)("h2",{id:"index-for-third-party-tools"},"Index for third-party tools"),(0,r.kt)("p",null,"Now that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a\nthird-party index, a registry of all available tools. We've updated the official\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/tools"},"Supported tools")," documentation to now include third-party tools."),(0,r.kt)("p",null,"At this time, the list of tools is powered by a JS/JSON object,\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx"},"which can be found here"),".\nIn the future, we may move this to a database, add filtering, sorting, and everything else necessary\nfor showcasing tools maintained by the community!"),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.18.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML,\nwhich may cause breakages depending on a version mismatch between proto and the plugin.")))}c.isMDXComponent=!0},10576:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/v0.18-5b6a0663f8077d6443d06ab243e966f6.png"}}]); \ No newline at end of file diff --git a/assets/js/b80596f4.64a245cd.js b/assets/js/b80596f4.64a245cd.js deleted file mode 100644 index 5bb1ccc3a43..00000000000 --- a/assets/js/b80596f4.64a245cd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8463],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),d=a,h=c["".concat(s,".").concat(d)]||c[d]||m[d]||r;return n?o.createElement(h,l(l({ref:t},u),{},{components:n})):o.createElement(h,l({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<r;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},47076:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var o=n(25773),a=(n(27378),n(35318));const r={slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},l=void 0,i={permalink:"/blog/moon-v1.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx",source:"@site/blog/2023-09-05_moon-v1.13.mdx",title:"moon v1.13 - Toolchain now uses WASM plugins",description:"This is a light release that focused primarily on upgrading to the WASM based proto implementation.",date:"2023-09-05T00:00:00.000Z",formattedDate:"September 5, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"}],readingTime:2.76,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},prevItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"},nextItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"}},s={image:n(21445).Z,authorsImageUrls:[void 0]},p=[{value:"proto upgrade and WASM plugins",id:"proto-upgrade-and-wasm-plugins",level:2},{value:"Allow tasks to fail",id:"allow-tasks-to-fail",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This is a light release that focused primarily on upgrading to the WASM based proto implementation."),(0,a.kt)("h2",{id:"proto-upgrade-and-wasm-plugins"},"proto upgrade and WASM plugins"),(0,a.kt)("p",null,"Over the last few months, we've made immense strides on ",(0,a.kt)("a",{parentName:"p",href:"/proto"},"proto"),", our multi-language\ntoolchain. For those of you unaware, moon's toolchain is built on top of proto, and we accomplish\nthis by utilizing the same Rust code between both tools."),(0,a.kt)("p",null,"However, moon has been locked to ",(0,a.kt)("a",{parentName:"p",href:"/blog/proto-v0.12"},"proto v0.12"),", which was a purely Rust based\nimplementation. With the release of ",(0,a.kt)("a",{parentName:"p",href:"/blog/proto-v0.13"},"proto v0.13")," and onward, proto has moved to\na WASM based plugin architecture (with the core still in Rust), which allows us to support more\nlanguages, and enables developers to write plugins in non-Rust languages."),(0,a.kt)("p",null,"And since our WASM plugins have stabilized by ",(0,a.kt)("a",{parentName:"p",href:"/blog/proto-v0.16"},"proto v0.16"),", we felt it was time\nto finally upgrade moon's implementation to the latest and greatest. So what does this mean exactly?\nA few things:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"If you're using moon's ",(0,a.kt)("a",{parentName:"li",href:"/docs/config/toolchain"},"toolchain")," (like ",(0,a.kt)("inlineCode",{parentName:"li"},"node"),"), we will now download the\n",(0,a.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"Node.js WASM plugins")," in the background (to\n",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/plugins"),")."),(0,a.kt)("li",{parentName:"ul"},"These plugins are in charge of downloading and installing the Node.js, npm, pnpm, or yarn version\nspecified in your toolchain configuration."),(0,a.kt)("li",{parentName:"ul"},"The entire plugin flow is now logged to the console, so you can see what's happening behind the\nscenes."),(0,a.kt)("li",{parentName:"ul"},"In the future (most likely moon v2), our platform and language integration will also be powered by\nWASM plugins. This enables you to build your own custom plugins!")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"This entire process should be transparent to all users, and you should not notice any changes.\nHowever, in case this upgrade causes issues, we wanted to isolate it from other changes, hence the\nlight release!")),(0,a.kt)("h2",{id:"allow-tasks-to-fail"},"Allow tasks to fail"),(0,a.kt)("p",null,'"Allow tasks to fail?" You ask yourself. "Doesn\'t that defeat the point of a task runner?" You\nquestion further. "You\'re not wrong!" We reply. These questions assume a perfect repository state,\nwhere all tasks either pass or fail, and there\'s no middle ground. In reality, very rarely is that\ntrue, and we want to support those stuck in the middle, such as:'),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"In a heavy migration and it's known that a task is currently broken."),(0,a.kt)("li",{parentName:"ul"},"The task is flaky but you've been unable to find the root cause."),(0,a.kt)("li",{parentName:"ul"},"Upstream dependencies have published a backwards incompatible change, and you're waiting on a fix."),(0,a.kt)("li",{parentName:"ul"},"And of course, in the middle of adopting moon!")),(0,a.kt)("p",null,"For situations where a task consistently or sometimes fails, but you don't want it to fail the\nentire pipeline (especially in CI), you can enable the new\n",(0,a.kt)("a",{parentName:"p",href:"/docs/config/project#allowfailure"},(0,a.kt)("inlineCode",{parentName:"a"},"allowFailure")," task option"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n typecheck:\n command: 'tsc --build'\n options:\n allowFailure: true\n")),(0,a.kt)("p",null,"When enabled, failing tasks will no longer bail ",(0,a.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,a.kt)("inlineCode",{parentName:"a"},"moon run"))," early, nor will it\nexit ",(0,a.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,a.kt)("inlineCode",{parentName:"a"},"moon ci"))," with a non-zero exit code. However, we still built guard rails\naround this feature, as we don't want to encourage bad practices, and one of these guard rails is\nthat tasks that enable ",(0,a.kt)("inlineCode",{parentName:"p"},"allowFailure")," ",(0,a.kt)("em",{parentName:"p"},"cannot")," be depended on by other tasks, as we cannot guarantee\nthat it's side-effect free."),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.13.0"},"official release")," for a full list\nof changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added colors to command line ",(0,a.kt)("inlineCode",{parentName:"li"},"--help")," menus."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"runner.archivableTargets")," to support tag scoped targets."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"moon query tasks --affected")," to filter based on affected task, instead of affected\nproject.")))}m.isMDXComponent=!0},21445:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.13-a119a59c6b1d80abaf4f3855114d1b48.png"}}]); \ No newline at end of file diff --git a/assets/js/b80596f4.ecacbbc9.js b/assets/js/b80596f4.ecacbbc9.js new file mode 100644 index 00000000000..57f463a792f --- /dev/null +++ b/assets/js/b80596f4.ecacbbc9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78463],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),d=a,h=c["".concat(s,".").concat(d)]||c[d]||m[d]||r;return n?o.createElement(h,l(l({ref:t},u),{},{components:n})):o.createElement(h,l({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p<r;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},47076:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var o=n(25773),a=(n(27378),n(35318));const r={slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},l=void 0,i={permalink:"/blog/moon-v1.13",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx",source:"@site/blog/2023-09-05_moon-v1.13.mdx",title:"moon v1.13 - Toolchain now uses WASM plugins",description:"This is a light release that focused primarily on upgrading to the WASM based proto implementation.",date:"2023-09-05T00:00:00.000Z",formattedDate:"September 5, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"}],readingTime:2.76,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.13",title:"moon v1.13 - Toolchain now uses WASM plugins",authors:["milesj"],tags:["tasks","proto","wasm"],image:"./img/moon/v1.13.png"},prevItem:{title:"proto v0.17 - Experimental Python support and canary releases",permalink:"/blog/proto-v0.17"},nextItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"}},s={image:n(21445).Z,authorsImageUrls:[void 0]},p=[{value:"proto upgrade and WASM plugins",id:"proto-upgrade-and-wasm-plugins",level:2},{value:"Allow tasks to fail",id:"allow-tasks-to-fail",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This is a light release that focused primarily on upgrading to the WASM based proto implementation."),(0,a.kt)("h2",{id:"proto-upgrade-and-wasm-plugins"},"proto upgrade and WASM plugins"),(0,a.kt)("p",null,"Over the last few months, we've made immense strides on ",(0,a.kt)("a",{parentName:"p",href:"/proto"},"proto"),", our multi-language\ntoolchain. For those of you unaware, moon's toolchain is built on top of proto, and we accomplish\nthis by utilizing the same Rust code between both tools."),(0,a.kt)("p",null,"However, moon has been locked to ",(0,a.kt)("a",{parentName:"p",href:"/blog/proto-v0.12"},"proto v0.12"),", which was a purely Rust based\nimplementation. With the release of ",(0,a.kt)("a",{parentName:"p",href:"/blog/proto-v0.13"},"proto v0.13")," and onward, proto has moved to\na WASM based plugin architecture (with the core still in Rust), which allows us to support more\nlanguages, and enables developers to write plugins in non-Rust languages."),(0,a.kt)("p",null,"And since our WASM plugins have stabilized by ",(0,a.kt)("a",{parentName:"p",href:"/blog/proto-v0.16"},"proto v0.16"),", we felt it was time\nto finally upgrade moon's implementation to the latest and greatest. So what does this mean exactly?\nA few things:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"If you're using moon's ",(0,a.kt)("a",{parentName:"li",href:"/docs/config/toolchain"},"toolchain")," (like ",(0,a.kt)("inlineCode",{parentName:"li"},"node"),"), we will now download the\n",(0,a.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/node-plugin"},"Node.js WASM plugins")," in the background (to\n",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/plugins"),")."),(0,a.kt)("li",{parentName:"ul"},"These plugins are in charge of downloading and installing the Node.js, npm, pnpm, or yarn version\nspecified in your toolchain configuration."),(0,a.kt)("li",{parentName:"ul"},"The entire plugin flow is now logged to the console, so you can see what's happening behind the\nscenes."),(0,a.kt)("li",{parentName:"ul"},"In the future (most likely moon v2), our platform and language integration will also be powered by\nWASM plugins. This enables you to build your own custom plugins!")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"This entire process should be transparent to all users, and you should not notice any changes.\nHowever, in case this upgrade causes issues, we wanted to isolate it from other changes, hence the\nlight release!")),(0,a.kt)("h2",{id:"allow-tasks-to-fail"},"Allow tasks to fail"),(0,a.kt)("p",null,'"Allow tasks to fail?" You ask yourself. "Doesn\'t that defeat the point of a task runner?" You\nquestion further. "You\'re not wrong!" We reply. These questions assume a perfect repository state,\nwhere all tasks either pass or fail, and there\'s no middle ground. In reality, very rarely is that\ntrue, and we want to support those stuck in the middle, such as:'),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"In a heavy migration and it's known that a task is currently broken."),(0,a.kt)("li",{parentName:"ul"},"The task is flaky but you've been unable to find the root cause."),(0,a.kt)("li",{parentName:"ul"},"Upstream dependencies have published a backwards incompatible change, and you're waiting on a fix."),(0,a.kt)("li",{parentName:"ul"},"And of course, in the middle of adopting moon!")),(0,a.kt)("p",null,"For situations where a task consistently or sometimes fails, but you don't want it to fail the\nentire pipeline (especially in CI), you can enable the new\n",(0,a.kt)("a",{parentName:"p",href:"/docs/config/project#allowfailure"},(0,a.kt)("inlineCode",{parentName:"a"},"allowFailure")," task option"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n typecheck:\n command: 'tsc --build'\n options:\n allowFailure: true\n")),(0,a.kt)("p",null,"When enabled, failing tasks will no longer bail ",(0,a.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,a.kt)("inlineCode",{parentName:"a"},"moon run"))," early, nor will it\nexit ",(0,a.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,a.kt)("inlineCode",{parentName:"a"},"moon ci"))," with a non-zero exit code. However, we still built guard rails\naround this feature, as we don't want to encourage bad practices, and one of these guard rails is\nthat tasks that enable ",(0,a.kt)("inlineCode",{parentName:"p"},"allowFailure")," ",(0,a.kt)("em",{parentName:"p"},"cannot")," be depended on by other tasks, as we cannot guarantee\nthat it's side-effect free."),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.13.0"},"official release")," for a full list\nof changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Added colors to command line ",(0,a.kt)("inlineCode",{parentName:"li"},"--help")," menus."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"runner.archivableTargets")," to support tag scoped targets."),(0,a.kt)("li",{parentName:"ul"},"Updated ",(0,a.kt)("inlineCode",{parentName:"li"},"moon query tasks --affected")," to filter based on affected task, instead of affected\nproject.")))}m.isMDXComponent=!0},21445:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.13-a119a59c6b1d80abaf4f3855114d1b48.png"}}]); \ No newline at end of file diff --git a/assets/js/b819cecb.1109e264.js b/assets/js/b819cecb.1109e264.js deleted file mode 100644 index 8f59a9eb8a9..00000000000 --- a/assets/js/b819cecb.1109e264.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3380],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||i;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:i,align:a="center",padding:l="1rem"}=e;return r.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:a}},r.createElement("img",{src:t.default,width:n,alt:o,title:i,className:"inline-block"}))}},82136:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(25773),o=(n(27378),n(35318)),i=n(88109);const a={slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},l=void 0,s={permalink:"/blog/vscode-extension",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-17_vscode-extension.mdx",source:"@site/blog/2022-10-17_vscode-extension.mdx",title:"New VS Code extension!",description:"We're very excited to announce the initial release of our Visual Studio Code extension!",date:"2022-10-17T00:00:00.000Z",formattedDate:"October 17, 2022",tags:[{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:.645,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},prevItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"},nextItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"}},c={authorsImageUrls:[void 0]},u=[],p={toc:u};function m(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"We're very excited to announce the initial release of our Visual Studio Code extension!"),(0,o.kt)("p",null,"If you're a huge VS Code fan like us, you most likely use extensions in your everyday workflow. We\nwant to enhance this experience by providing a fully integrated and interactive moon console! Here's\na preview of what it looks like:"),(0,o.kt)(i.Z,{src:n(9035),width:"40%",mdxType:"Image"}),(0,o.kt)("p",null,"Excited?? Want to learn more? Check out the official\n",(0,o.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=moonrepo.moon-console"},"moonrepo.moon-console"),"\nmarketplace page, or read the ",(0,o.kt)("a",{parentName:"p",href:"../docs/editors/vscode"},"official documentation"),". This is only the\nfirst iteration of the extension. Expect more advanced features in the future, like..."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Schema validation for configuration files"),(0,o.kt)("li",{parentName:"ul"},"Autocompletion for configuration files"),(0,o.kt)("li",{parentName:"ul"},"Automatic running/building of projects in the background"),(0,o.kt)("li",{parentName:"ul"},"File type association"),(0,o.kt)("li",{parentName:"ul"},"Integrated language server"),(0,o.kt)("li",{parentName:"ul"},"And much more!")))}m.isMDXComponent=!0},9035:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r=n.p+"assets/images/projects-view-675ba8c24ec1896093663c29966b5e50.png"}}]); \ No newline at end of file diff --git a/assets/js/b819cecb.7292184f.js b/assets/js/b819cecb.7292184f.js new file mode 100644 index 00000000000..3f22cffad87 --- /dev/null +++ b/assets/js/b819cecb.7292184f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8450],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||i;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:i,align:a="center",padding:l="1rem"}=e;return r.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:a}},r.createElement("img",{src:t.default,width:n,alt:o,title:i,className:"inline-block"}))}},82136:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(25773),o=(n(27378),n(35318)),i=n(88109);const a={slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},l=void 0,s={permalink:"/blog/vscode-extension",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-17_vscode-extension.mdx",source:"@site/blog/2022-10-17_vscode-extension.mdx",title:"New VS Code extension!",description:"We're very excited to announce the initial release of our Visual Studio Code extension!",date:"2022-10-17T00:00:00.000Z",formattedDate:"October 17, 2022",tags:[{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:.645,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},prevItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"},nextItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"}},c={authorsImageUrls:[void 0]},u=[],p={toc:u};function m(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"We're very excited to announce the initial release of our Visual Studio Code extension!"),(0,o.kt)("p",null,"If you're a huge VS Code fan like us, you most likely use extensions in your everyday workflow. We\nwant to enhance this experience by providing a fully integrated and interactive moon console! Here's\na preview of what it looks like:"),(0,o.kt)(i.Z,{src:n(9035),width:"40%",mdxType:"Image"}),(0,o.kt)("p",null,"Excited?? Want to learn more? Check out the official\n",(0,o.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=moonrepo.moon-console"},"moonrepo.moon-console"),"\nmarketplace page, or read the ",(0,o.kt)("a",{parentName:"p",href:"../docs/editors/vscode"},"official documentation"),". This is only the\nfirst iteration of the extension. Expect more advanced features in the future, like..."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Schema validation for configuration files"),(0,o.kt)("li",{parentName:"ul"},"Autocompletion for configuration files"),(0,o.kt)("li",{parentName:"ul"},"Automatic running/building of projects in the background"),(0,o.kt)("li",{parentName:"ul"},"File type association"),(0,o.kt)("li",{parentName:"ul"},"Integrated language server"),(0,o.kt)("li",{parentName:"ul"},"And much more!")))}m.isMDXComponent=!0},9035:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r=n.p+"assets/images/projects-view-675ba8c24ec1896093663c29966b5e50.png"}}]); \ No newline at end of file diff --git a/assets/js/b8f3d4c8.1c928742.js b/assets/js/b8f3d4c8.1c928742.js deleted file mode 100644 index 8097d97fd2a..00000000000 --- a/assets/js/b8f3d4c8.1c928742.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2444],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var A=o.createContext({}),s=function(e){var t=o.useContext(A),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return o.createElement(A.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,A=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=s(n),m=a,u=p["".concat(A,".").concat(m)]||p[m]||d[m]||r;return n?o.createElement(u,i(i({ref:t},c),{},{components:n})):o.createElement(u,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=p;var l={};for(var A in t)hasOwnProperty.call(t,A)&&(l[A]=t[A]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<r;s++)i[s]=n[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}p.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(27378);function a(e){let{src:t,width:n="90%",alt:a="",title:r,align:i="center",padding:l="1rem"}=e;return o.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},o.createElement("img",{src:t.default,width:n,alt:a,title:r,className:"inline-block"}))}},21953:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>b,frontMatter:()=>s,metadata:()=>d,toc:()=>m});var o=n(25773),a=n(27378),r=n(35318),i=n(88109),l=n(40624);function A(e){let{children:t,aside:n,reversed:o}=e;return a.createElement("section",{className:"sm:grid gap-2 grid-cols-5 mb-4"},a.createElement("div",{className:(0,l.Z)("col-span-3",o&&"order-2")},t),a.createElement("aside",{className:(0,l.Z)("col-span-2",o&&"order-1")},n))}const s={title:"VS Code extension",sidebar_label:"VS Code"},c=void 0,d={unversionedId:"editors/vscode",id:"editors/vscode",title:"VS Code extension",description:"Enhance your VS Code experience with our integrated moon console! Whether you're a fan of the",source:"@site/docs/editors/vscode.mdx",sourceDirName:"editors",slug:"/editors/vscode",permalink:"/docs/editors/vscode",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/editors/vscode.mdx",tags:[],version:"current",frontMatter:{title:"VS Code extension",sidebar_label:"VS Code"},sidebar:"docs",previous:{title:"Editors",permalink:"/docs/editors"},next:{title:"Commands",permalink:"/docs/commands"}},p={},m=[{value:"Views",id:"views",level:2},{value:"Projects",id:"projects",level:3},{value:"Last run",id:"last-run",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2}],u={toc:m};function b(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Enhance your VS Code experience with our integrated moon console! Whether you're a fan of the\ncommand line, or prefer interactive interfaces, our console will be a welcome experience."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This extension is in its early stages. Expect more advanced features in the future, like\nautocompletion, config validation, and more!")),(0,r.kt)("h2",{id:"views"},"Views"),(0,r.kt)("div",{className:"flex"},(0,r.kt)("div",{className:"mr-2"},(0,r.kt)(i.Z,{src:n(9871),alt:"VS Code - Sidebar icon",width:"50px",align:"left",padding:"0",mdxType:"Image"})),(0,r.kt)("div",null,(0,r.kt)("p",null,"All views are available within the moon sidebar. Simply click the moon icon in the left activity\nbar!"))),(0,r.kt)("br",null),(0,r.kt)(A,{aside:(0,r.kt)(i.Z,{src:n(9035),alt:"VS Code view - Projects",mdxType:"Image"}),mdxType:"TwoColumn"},(0,r.kt)("h3",{id:"projects"},"Projects"),(0,r.kt)("p",null,"The backbone of moon is the projects view. In this view, all moon configured projects will be\nlisted, categorized by their ",(0,r.kt)("a",{parentName:"p",href:"../config/project#type"},(0,r.kt)("inlineCode",{parentName:"a"},"type")),", and designated with their\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language")),"."),(0,r.kt)("p",null,"Each project can then be expanded to view all available tasks. Tasks can be ran by clicking the ",(0,r.kt)("inlineCode",{parentName:"p"},"\u25b6"),"\nicon, or using the command palette."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},'This view is available in both the "Explorer" and "moon" sidebars.'))),(0,r.kt)(A,{aside:(0,r.kt)(i.Z,{src:n(28154),alt:"VS Code view - Last run",mdxType:"Image"}),mdxType:"TwoColumn"},(0,r.kt)("h3",{id:"last-run"},"Last run"),(0,r.kt)("p",null,"Information about the last ran target will be displayed in a beautiful table with detailed stats.\nOnly tasks ran from the ",(0,r.kt)("a",{parentName:"p",href:"#projects"},"projects view")," or on the command line will be displayed here."),(0,r.kt)("p",null,"This table displays all actions that were ran alongside the running primary target(s). They are\nordered topologically via the action graph.")),(0,r.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=moonrepo.moon-console"},"official VS Code marketplace"),"\nfor more information on the extension, its commands, available settings, and more!"),(0,r.kt)("p",null,"If you encounter a bug, or have a feature request, please submit them to the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/dev/tree/master/packages/vscode-extension"},"moonrepo/dev")," repository!"))}b.isMDXComponent=!0},9871:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF4AAABgCAYAAACUosWzAAAMP2lDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkEBogVCkhN4E6VVKCC2CgFTBRkgChBJiIAjYy6KCaxcL2NBVEUXXAsiiIqJYWAR7X1BRUdbFgl15kwK67ivfm++bO//958x/zpw7d+4dANSaOSJRNqoOQI4wXxwTGsiYmJTMID0GZEAHyoAI9DncPBEzOjoCwDLc/r28vQ4QaXvFXqr1z/7/WjR4/DwuAEg0xKm8PG4OxEcAwCu5InE+AEQpbzYjXyTFsAItMQwQ4iVSnC7HlVKcKscHZTZxMSyIWwFQUuFwxOkAqHZCnlHATYcaqgMQOwp5AiEAagyI/XJycnkQp0BsDW1EEEv1PVO/00n/m2bqiCaHkz6C5XORFaUgQZ4om1P0f6bjf5ecbMmwD0tYVTLEYTHSOcO83czKDZdiFYj7hamRURBrQvxewJPZQ4xSMiRh8XJ71ICbx4I5g08aoI48TlA4xAYQhwizIyMUfGqaIIQNMVwhaKEgnx0HsS7ES/h5wbEKm23i3BiFL7QuTcxiKvhzHLHMr9TXfUlWPFOh/yqDz1boY6rFGXGJEFMgNi8QJERCrAqxQ15WbLjCZmxxBity2EYsiZHGbw5xDF8YGijXxwrSxCExCvvSnLzh+WLbMgTsSAU+lJ8RFybPD9bK5cjih3PBOvlCZvywDj9vYsTwXHj8oGD53LGnfGF8rELnvSg/MEY+FqeIsqMV9rgpPztUyptC7JpXEKsYiyfkwwUp18fTRPnRcfI48eJMzrhoeTz4ShABWCAIMIAE1lSQCzKBoKO/vh/eyXtCAAeIQTrgA3sFMzwiUdYjhNdYUAz+hIgP8kbGBcp6+aAA8l9GWPnVHqTJegtkI7LAY4hzQDjIhvcS2SjhiLcE8Agygn9458DKhfFmwyrt//f8MPuNYUImQsFIhj0y1IYticHEIGIYMYRog+vjfrgPHgGvAbA645641/A8vtkTHhO6CA8I1wjdhFvTBAvEP0Q5HnRD/RBFLlK/zwVuCTXd8EDcF6pDZZyO6wN73BX6YeL+0LMbZFmKuKVZYfyg/bcZfPc0FHZkRzJK1iEHkK1/HKlqq+o2oiLN9ff5kceaOpJv1kjPj/5Z32WfB9vwHy2xJdhhrA07hZ3HmrB6wMBOYg1YO3ZcikdW1yPZ6hr2FiOLJwvqCP7hb/jJSjOZ51jj2Of4Wd6Xzy+U7tGAlSsqEgvSM/IZTPhF4DPYQq7DaIazo7MzANLvi3z7ek2XfTcQ+oVv3EITAHyLhoaGmr5x4XBvPXwcvv63v3FWvXCbuADAufVcibhAzuHSCwHuEmrwTdMDRsAMWMP5OAN34AMCQDAYB6JAHEgCU2H0GXCdi8EMMAvMByWgDKwE68AmsBXsAHvAfnAI1IMmcAqcBRdBJ7gG7sDV0wuegwHwFnxCEISEUBEaoocYIxaIHeKMeCJ+SDASgcQgSUgKko4IEQkyC1mIlCGrkU3IdqQa+RU5hpxCziNdyC2kB+lDXiEfUQxVQbVQQ9QSHYN6okw0HI1Dp6Dp6HS0GF2ELkc3oFXoPrQOPYVeRK+h3ehzdBADmDJGx0wwe8wTY2FRWDKWhomxOVgpVo5VYbVYI3zOV7BurB/7gBNxGs7A7eEKDsPjcS4+HZ+DL8M34XvwOrwVv4L34AP4VwKVYECwI3gT2ISJhHTCDEIJoZywi3CUcAa+S72Et0QikU60InrAdzGJmEmcSVxG3Ew8QGwmdhEfEgdJJJIeyY7kS4oicUj5pBLSRtI+0knSZVIv6b2SspKxkrNSiFKyklBpgVK50l6lE0qXlZ4ofSKrky3I3uQoMo9cRF5B3kluJF8i95I/UTQoVhRfShwlkzKfsoFSSzlDuUt5raysbKrspTxBWaA8T3mD8kHlc8o9yh9UNFVsVVgqk1UkKstVdqs0q9xSeU2lUi2pAdRkaj51ObWaepp6n/pelabqoMpW5anOVa1QrVO9rPpCjaxmocZUm6pWrFaudljtklq/OlndUp2lzlGfo16hfkz9hvqgBk3DSSNKI0djmcZejfMaTzVJmpaawZo8zUWaOzRPaz6kYTQzGovGpS2k7aSdofVqEbWstNhamVplWvu1OrQGtDW1XbUTtAu1K7SPa3fTMbolnU3Ppq+gH6Jfp3/UMdRh6vB1lurU6lzWeac7SjdAl69bqntA95ruRz2GXrBelt4qvXq9e/q4vq3+BP0Z+lv0z+j3j9Ia5TOKO6p01KFRtw1QA1uDGIOZBjsM2g0GDY0MQw1FhhsNTxv2G9GNAowyjdYanTDqM6YZ+xkLjNcanzR+xtBmMBnZjA2MVsaAiYFJmInEZLtJh8knUyvTeNMFpgdM75lRzDzN0szWmrWYDZgbm483n2VeY37bgmzhaZFhsd6izeKdpZVlouViy3rLp1a6VmyrYqsaq7vWVGt/6+nWVdZXbYg2njZZNpttOm1RWzfbDNsK20t2qJ27ncBus13XaMJor9HC0VWjb9ir2DPtC+xr7Hsc6A4RDgsc6h1ejDEfkzxm1Zi2MV8d3RyzHXc63nHSdBrntMCp0emVs60z17nC+aoL1SXEZa5Lg8tLVztXvusW15tuNLfxbovdWty+uHu4i91r3fs8zD1SPCo9bnhqeUZ7LvM850XwCvSa69Xk9cHb3Tvf+5D3Xz72Plk+e32ejrUayx+7c+xDX1Nfju92324/hl+K3za/bn8Tf45/lf+DALMAXsCugCdMG2Ymcx/zRaBjoDjwaOA7ljdrNqs5CAsKDSoN6gjWDI4P3hR8P8Q0JD2kJmQg1C10ZmhzGCEsPGxV2A22IZvLrmYPjPMYN3tca7hKeGz4pvAHEbYR4ojG8ej4cePXjL8baREpjKyPAlHsqDVR96KtoqdH/zaBOCF6QsWExzFOMbNi2mJpsdNi98a+jQuMWxF3J946XhLfkqCWMDmhOuFdYlDi6sTuiWMmzp54MUk/SZDUkExKTkjelTw4KXjSukm9k90ml0y+PsVqSuGU81P1p2ZPPT5NbRpn2uEUQkpiyt6Uz5woThVnMJWdWpk6wGVx13Of8wJ4a3l9fF/+av6TNN+01WlP033T16T3ZfhnlGf0C1iCTYKXmWGZWzPfZUVl7c4ayk7MPpCjlJOSc0yoKcwStuYa5RbmdonsRCWi7une09dNHxCHi3flIXlT8hryteCPfLvEWvKTpKfAr6Ci4P2MhBmHCzUKhYXtRbZFS4ueFIcU/zITn8md2TLLZNb8WT2zmbO3z0HmpM5pmWs2d9Hc3nmh8/bMp8zPmv/7AscFqxe8WZi4sHGR4aJ5ix7+FPpTTYlqibjkxmKfxVuX4EsESzqWuizduPRrKa/0QpljWXnZ52XcZRd+dvp5w89Dy9OWd6xwX7FlJXGlcOX1Vf6r9qzWWF28+uGa8Wvq1jLWlq59s27auvPlruVb11PWS9Z3b4jY0LDRfOPKjZ83ZWy6VhFYcaDSoHJp5bvNvM2XtwRsqd1quLVs68dtgm03t4dur6uyrCrfQdxRsOPxzoSdbb94/lK9S39X2a4vu4W7u/fE7Gmt9qiu3muwd0UNWiOp6ds3eV/n/qD9DbX2tdsP0A+UHQQHJQef/Zry6/VD4YdaDnserj1icaTyKO1oaR1SV1Q3UJ9R392Q1NB1bNyxlkafxqO/Ofy2u8mkqeK49vEVJygnFp0YOll8crBZ1Nx/Kv3Uw5ZpLXdOTzx9tXVCa8eZ8DPnzoacPd3GbDt5zvdc03nv88cueF6ov+h+sa7drf3o726/H+1w76i75HGpodOrs7FrbNeJy/6XT10JunL2KvvqxWuR17qux1+/eWPyje6bvJtPb2Xfenm74PanO/PuEu6W3lO/V37f4H7VHzZ/HOh27z7eE9TT/iD2wZ2H3IfPH+U9+ty76DH1cfkT4yfVT52fNvWF9HU+m/Ss97no+af+kj81/qx8Yf3iyF8Bf7UPTBzofSl+OfRq2Wu917vfuL5pGYwevP825+2nd6Xv9d7v+eD5oe1j4scnn2Z8Jn3e8MXmS+PX8K93h3KGhkQcMUf2K4DBiqalAfBqNwDUJABo8B+CMkl+/pMVRH5mlSHwn7D8jCgr7gDUwkb6G89qBuAgrJbzoDZspb/wcQEAdXEZqcNnNdm5UlqI8BywLUiKbq2ZMg/8UORnzu/i/rEFUlVX8GP7LysHfJ5KQ4DsAAAAimVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAAAJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAeKACAAQAAAABAAAAXqADAAQAAAABAAAAYAAAAABBU0NJSQAAAFNjcmVlbnNob3R3sUVKAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB1GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj45NjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj45NDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo2Lsh/AAAAHGlET1QAAAACAAAAAAAAADAAAAAoAAAAMAAAADAAAATBBeBT5AAABI1JREFUeAHsm01ME0EUgN/WBJR64AgUy9EWBENQUAn+xEDwoCCJUYNyMCbEgBoTA4h4JBpOHJBIYjwY4w8GBBUF9GLwD2JCQAl4oaVQ4A6hLT+t86YsKQ3Q3e3stMGZZDvd+dmZfvt48+bNQ7JNOH1AkseziBlcKrtCc/GhLwHJTsBLBgO4XG46kgCvL3D56ZLNPuUDSRISLxPhlEuOyRmfjygbl1tIPCfmdBhp3DZJJX5xcYkWCFXDB7+Ei6uBqBqX2yPA82FOR6E63oCLqwDPETuAZHdM+yQypADPlTtI42jVkNV1cWmZjix0PJ8X4Jd41PHCjudDfHUUuoHCravYuXLlDtSOX15eFqqGL3fwm5PCZcAZO1o1q04yt3CScYVPwXvRqhE7V87giR2PG6iFBRcdWJiTfPhTOx43UB4h8XyIr44iTVDvpA/cwmXAFzzuXCXhj+cKHQcTiyt35P4BhVs4UuCpjvd6QdjxfN8APYFCc1KA5wweD7sxykBYNZzBo8vgf/BOGo1GyD6QBalpVkhJMUNSYiIlbbdPgM1mhz8jI9A/8IsbfckxNevzrqxsa1WTm3sYjuXlQWqqZVOwGGoxQMB/6fsKw8O/N23HqoIehOAJ1HbV8acKC6C46DSgxCtJU1NOaO/opC9BSXutbag5iS6D7Qj+xPGjUFp6EXbGxqri4yTwn79shSEdJd8v8Qh+m7kMEhMSoLKinOjzFFXQ5caodpqaH4GXmNp6JCrx+OBoPfqzWi1gteyllwwAy0ZHx+jt6NjftVwuw4KSs0X0opUaPx42t8CPn/0ae2/dLSpPoBBsSfEZwFxtan/TCQbDDsjMzIAUs1lt93Xt+759h5aWx+vKWN1QVYMrejRIfDjAWQEJfI5zehqqa+oCi5h9jwpVwxq4wzEJZvMeJpD0Ohii3slIxsez0MVIGPV7e8dbmmdkpEPV7VvRDT6S8fGsoKNex0tOFrIY19VWy7ea87m5ebhWcUNz/606Riw+/u6dKk2LZ/CPqb/fsGbhyHXx8fHQ8KAe4uJ2yUWacvwrwufrkSISH6+XpAcCKi+/Cnm5RwKLVH9/1doG7953qe6npIPfnOQYH88DOv7wrKxMuHm9kpiWuC9Xn2ZmZ6GxsQnQstEjcY2PZwUdQSixNsoul0JB/klN3F4Ql0HXh25NfZV08kcLk5Y84uNZ6XWluhfdBhfOn6PSrwSG3Kan9zO0vm4jexv/f8nI5SxzbvHxLKU92IrZCogp2QSFBfmADrNQyU1A9/T0wsfuTzA/Px+qeVj1fonnEB//7OmTsCYa2FkNeOwXExsDh3KyISf7IOwnNn5wwp07+mTwGhwcCq7W5Z5uoPQ+gWIp7UhBLXiZXCxxDyebkiDJZILdxjhI35cGuNmqqb0H6IfnmbjEx7MGr1THhwIpz2ujvUCovuHWc/FOslQz+INZgZcXe1bPU/MyqKrBDnqdQMlSpWZSStqykNJAgVBiniqZl9I2uofw6QU+XCkNnheLF6kUOrajVo2e8fHBP1DN5EK11brIbjQnrc8KNcfN6v8BAAD//0Y74dEAAAMoSURBVO1aS07DMBC1exnoaRCsEQsOgYRYIyQOwQKx5neZlk1byvcE9EPb4DdpJFSc0kDmYymWEidp4pl5no7HM+N7g+fMO+cm089wdm7/4JD6uk4nx0eu3d6ua7gf41zf3DkcmzbwAp5WW9VxVr+veu8fn96y0Nx4PKFvUwMeTG8K2t7ujsMRa51O152encd+YnnmSeO9d5PJlAjUDfzV5QUL47FBC80verwDDW9vb+XHmn+eOPCDx5dsETR+mqipiU3AX55t+q/5y9ixb3w/AN8KGj9K2NTEBKv6TBx4svGLhRszmRruxbUqwGXviwPf6z9lrVaLDfh1C1oZCBrPsbDCzks134c7CeCZTE2Z+yYl4KZ06nYqfqPrsbhm4S0urwYMSHo2vwkc+13azIAHP3x+zxbzOZupARHrdl4F+MHwNXPYQDEtrgDeurmRNjPAhNxJhAw4gQchq+ZGQ9uBhyeNDxdciyuIoFnVeg1tBx6k8bjgXFwxPpo1W6+l7cAi37kGd3I0GuO+9ugkDbo8WdN6LW0HHGRqEJ2U0HgQtLKh0tR2Ah6xGlxIAQ9a2iZHG3RgQBso7FwlTA0IFk0LfAugAwMKGTjGeHwBdKyXNjtWQCfgh5SBciEszL+4aoJvCXQCHtFJaDxXIiQG9uozTs1HxPH69l408rgqX+yePRESI1r2rM4JsAp4ITvZeMTjuTJQBaEqPSaA8qRrcqRl41kHvOCb/HjEaiwBXzCHHpOAhomgfjkZ35MWne6Do0MwkUHM/ONEVQaITk4/ZzSM5m7uH3Ik92mu8Uh2C4QMkkOHkWGRDBQj/8kO7eHHz2azxtQIT6FodFJYNtPkyNSAQ+4MlGkUFJgj4DlL+BRkSoIkeTXYQH18jIjhxp2Umbe8WjjQ4qqPlxEjPSrs9fHpQSLDMXt9vIwY6VFpFlelOTMVFlbCQIVsbuMZ6+NVpEqAqOeuj08AAxUW2evjVaRKgGgTnVSaJJH6eCXZTJOlkAF3fbxpBJSYI3dSoj5eST6zZHOND+xx18ebRUCJMdJ40JYsWlWS1RTZJgOlNB1kaiTr45XkNEf2CzNi9x137x/JAAAAAElFTkSuQmCC"},28154:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/last-run-view-945368b6e0eed8b49618f912a61017ef.png"},9035:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/projects-view-675ba8c24ec1896093663c29966b5e50.png"}}]); \ No newline at end of file diff --git a/assets/js/b8f3d4c8.ae2aa553.js b/assets/js/b8f3d4c8.ae2aa553.js new file mode 100644 index 00000000000..c363cb5196b --- /dev/null +++ b/assets/js/b8f3d4c8.ae2aa553.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82444],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var A=o.createContext({}),s=function(e){var t=o.useContext(A),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return o.createElement(A.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,A=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=s(n),m=a,u=p["".concat(A,".").concat(m)]||p[m]||d[m]||r;return n?o.createElement(u,i(i({ref:t},c),{},{components:n})):o.createElement(u,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=p;var l={};for(var A in t)hasOwnProperty.call(t,A)&&(l[A]=t[A]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<r;s++)i[s]=n[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}p.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(27378);function a(e){let{src:t,width:n="90%",alt:a="",title:r,align:i="center",padding:l="1rem"}=e;return o.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},o.createElement("img",{src:t.default,width:n,alt:a,title:r,className:"inline-block"}))}},21953:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>b,frontMatter:()=>s,metadata:()=>d,toc:()=>m});var o=n(25773),a=n(27378),r=n(35318),i=n(88109),l=n(40624);function A(e){let{children:t,aside:n,reversed:o}=e;return a.createElement("section",{className:"sm:grid gap-2 grid-cols-5 mb-4"},a.createElement("div",{className:(0,l.Z)("col-span-3",o&&"order-2")},t),a.createElement("aside",{className:(0,l.Z)("col-span-2",o&&"order-1")},n))}const s={title:"VS Code extension",sidebar_label:"VS Code"},c=void 0,d={unversionedId:"editors/vscode",id:"editors/vscode",title:"VS Code extension",description:"Enhance your VS Code experience with our integrated moon console! Whether you're a fan of the",source:"@site/docs/editors/vscode.mdx",sourceDirName:"editors",slug:"/editors/vscode",permalink:"/docs/editors/vscode",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/editors/vscode.mdx",tags:[],version:"current",frontMatter:{title:"VS Code extension",sidebar_label:"VS Code"},sidebar:"docs",previous:{title:"Editors",permalink:"/docs/editors"},next:{title:"Commands",permalink:"/docs/commands"}},p={},m=[{value:"Views",id:"views",level:2},{value:"Projects",id:"projects",level:3},{value:"Last run",id:"last-run",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2}],u={toc:m};function b(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Enhance your VS Code experience with our integrated moon console! Whether you're a fan of the\ncommand line, or prefer interactive interfaces, our console will be a welcome experience."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This extension is in its early stages. Expect more advanced features in the future, like\nautocompletion, config validation, and more!")),(0,r.kt)("h2",{id:"views"},"Views"),(0,r.kt)("div",{className:"flex"},(0,r.kt)("div",{className:"mr-2"},(0,r.kt)(i.Z,{src:n(9871),alt:"VS Code - Sidebar icon",width:"50px",align:"left",padding:"0",mdxType:"Image"})),(0,r.kt)("div",null,(0,r.kt)("p",null,"All views are available within the moon sidebar. Simply click the moon icon in the left activity\nbar!"))),(0,r.kt)("br",null),(0,r.kt)(A,{aside:(0,r.kt)(i.Z,{src:n(9035),alt:"VS Code view - Projects",mdxType:"Image"}),mdxType:"TwoColumn"},(0,r.kt)("h3",{id:"projects"},"Projects"),(0,r.kt)("p",null,"The backbone of moon is the projects view. In this view, all moon configured projects will be\nlisted, categorized by their ",(0,r.kt)("a",{parentName:"p",href:"../config/project#type"},(0,r.kt)("inlineCode",{parentName:"a"},"type")),", and designated with their\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language")),"."),(0,r.kt)("p",null,"Each project can then be expanded to view all available tasks. Tasks can be ran by clicking the ",(0,r.kt)("inlineCode",{parentName:"p"},"\u25b6"),"\nicon, or using the command palette."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},'This view is available in both the "Explorer" and "moon" sidebars.'))),(0,r.kt)(A,{aside:(0,r.kt)(i.Z,{src:n(28154),alt:"VS Code view - Last run",mdxType:"Image"}),mdxType:"TwoColumn"},(0,r.kt)("h3",{id:"last-run"},"Last run"),(0,r.kt)("p",null,"Information about the last ran target will be displayed in a beautiful table with detailed stats.\nOnly tasks ran from the ",(0,r.kt)("a",{parentName:"p",href:"#projects"},"projects view")," or on the command line will be displayed here."),(0,r.kt)("p",null,"This table displays all actions that were ran alongside the running primary target(s). They are\nordered topologically via the action graph.")),(0,r.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=moonrepo.moon-console"},"official VS Code marketplace"),"\nfor more information on the extension, its commands, available settings, and more!"),(0,r.kt)("p",null,"If you encounter a bug, or have a feature request, please submit them to the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/dev/tree/master/packages/vscode-extension"},"moonrepo/dev")," repository!"))}b.isMDXComponent=!0},9871:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF4AAABgCAYAAACUosWzAAAMP2lDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkEBogVCkhN4E6VVKCC2CgFTBRkgChBJiIAjYy6KCaxcL2NBVEUXXAsiiIqJYWAR7X1BRUdbFgl15kwK67ivfm++bO//958x/zpw7d+4dANSaOSJRNqoOQI4wXxwTGsiYmJTMID0GZEAHyoAI9DncPBEzOjoCwDLc/r28vQ4QaXvFXqr1z/7/WjR4/DwuAEg0xKm8PG4OxEcAwCu5InE+AEQpbzYjXyTFsAItMQwQ4iVSnC7HlVKcKscHZTZxMSyIWwFQUuFwxOkAqHZCnlHATYcaqgMQOwp5AiEAagyI/XJycnkQp0BsDW1EEEv1PVO/00n/m2bqiCaHkz6C5XORFaUgQZ4om1P0f6bjf5ecbMmwD0tYVTLEYTHSOcO83czKDZdiFYj7hamRURBrQvxewJPZQ4xSMiRh8XJ71ICbx4I5g08aoI48TlA4xAYQhwizIyMUfGqaIIQNMVwhaKEgnx0HsS7ES/h5wbEKm23i3BiFL7QuTcxiKvhzHLHMr9TXfUlWPFOh/yqDz1boY6rFGXGJEFMgNi8QJERCrAqxQ15WbLjCZmxxBity2EYsiZHGbw5xDF8YGijXxwrSxCExCvvSnLzh+WLbMgTsSAU+lJ8RFybPD9bK5cjih3PBOvlCZvywDj9vYsTwXHj8oGD53LGnfGF8rELnvSg/MEY+FqeIsqMV9rgpPztUyptC7JpXEKsYiyfkwwUp18fTRPnRcfI48eJMzrhoeTz4ShABWCAIMIAE1lSQCzKBoKO/vh/eyXtCAAeIQTrgA3sFMzwiUdYjhNdYUAz+hIgP8kbGBcp6+aAA8l9GWPnVHqTJegtkI7LAY4hzQDjIhvcS2SjhiLcE8Agygn9458DKhfFmwyrt//f8MPuNYUImQsFIhj0y1IYticHEIGIYMYRog+vjfrgPHgGvAbA645641/A8vtkTHhO6CA8I1wjdhFvTBAvEP0Q5HnRD/RBFLlK/zwVuCTXd8EDcF6pDZZyO6wN73BX6YeL+0LMbZFmKuKVZYfyg/bcZfPc0FHZkRzJK1iEHkK1/HKlqq+o2oiLN9ff5kceaOpJv1kjPj/5Z32WfB9vwHy2xJdhhrA07hZ3HmrB6wMBOYg1YO3ZcikdW1yPZ6hr2FiOLJwvqCP7hb/jJSjOZ51jj2Of4Wd6Xzy+U7tGAlSsqEgvSM/IZTPhF4DPYQq7DaIazo7MzANLvi3z7ek2XfTcQ+oVv3EITAHyLhoaGmr5x4XBvPXwcvv63v3FWvXCbuADAufVcibhAzuHSCwHuEmrwTdMDRsAMWMP5OAN34AMCQDAYB6JAHEgCU2H0GXCdi8EMMAvMByWgDKwE68AmsBXsAHvAfnAI1IMmcAqcBRdBJ7gG7sDV0wuegwHwFnxCEISEUBEaoocYIxaIHeKMeCJ+SDASgcQgSUgKko4IEQkyC1mIlCGrkU3IdqQa+RU5hpxCziNdyC2kB+lDXiEfUQxVQbVQQ9QSHYN6okw0HI1Dp6Dp6HS0GF2ELkc3oFXoPrQOPYVeRK+h3ehzdBADmDJGx0wwe8wTY2FRWDKWhomxOVgpVo5VYbVYI3zOV7BurB/7gBNxGs7A7eEKDsPjcS4+HZ+DL8M34XvwOrwVv4L34AP4VwKVYECwI3gT2ISJhHTCDEIJoZywi3CUcAa+S72Et0QikU60InrAdzGJmEmcSVxG3Ew8QGwmdhEfEgdJJJIeyY7kS4oicUj5pBLSRtI+0knSZVIv6b2SspKxkrNSiFKyklBpgVK50l6lE0qXlZ4ofSKrky3I3uQoMo9cRF5B3kluJF8i95I/UTQoVhRfShwlkzKfsoFSSzlDuUt5raysbKrspTxBWaA8T3mD8kHlc8o9yh9UNFVsVVgqk1UkKstVdqs0q9xSeU2lUi2pAdRkaj51ObWaepp6n/pelabqoMpW5anOVa1QrVO9rPpCjaxmocZUm6pWrFaudljtklq/OlndUp2lzlGfo16hfkz9hvqgBk3DSSNKI0djmcZejfMaTzVJmpaawZo8zUWaOzRPaz6kYTQzGovGpS2k7aSdofVqEbWstNhamVplWvu1OrQGtDW1XbUTtAu1K7SPa3fTMbolnU3Ppq+gH6Jfp3/UMdRh6vB1lurU6lzWeac7SjdAl69bqntA95ruRz2GXrBelt4qvXq9e/q4vq3+BP0Z+lv0z+j3j9Ia5TOKO6p01KFRtw1QA1uDGIOZBjsM2g0GDY0MQw1FhhsNTxv2G9GNAowyjdYanTDqM6YZ+xkLjNcanzR+xtBmMBnZjA2MVsaAiYFJmInEZLtJh8knUyvTeNMFpgdM75lRzDzN0szWmrWYDZgbm483n2VeY37bgmzhaZFhsd6izeKdpZVlouViy3rLp1a6VmyrYqsaq7vWVGt/6+nWVdZXbYg2njZZNpttOm1RWzfbDNsK20t2qJ27ncBus13XaMJor9HC0VWjb9ir2DPtC+xr7Hsc6A4RDgsc6h1ejDEfkzxm1Zi2MV8d3RyzHXc63nHSdBrntMCp0emVs60z17nC+aoL1SXEZa5Lg8tLVztXvusW15tuNLfxbovdWty+uHu4i91r3fs8zD1SPCo9bnhqeUZ7LvM850XwCvSa69Xk9cHb3Tvf+5D3Xz72Plk+e32ejrUayx+7c+xDX1Nfju92324/hl+K3za/bn8Tf45/lf+DALMAXsCugCdMG2Ymcx/zRaBjoDjwaOA7ljdrNqs5CAsKDSoN6gjWDI4P3hR8P8Q0JD2kJmQg1C10ZmhzGCEsPGxV2A22IZvLrmYPjPMYN3tca7hKeGz4pvAHEbYR4ojG8ej4cePXjL8baREpjKyPAlHsqDVR96KtoqdH/zaBOCF6QsWExzFOMbNi2mJpsdNi98a+jQuMWxF3J946XhLfkqCWMDmhOuFdYlDi6sTuiWMmzp54MUk/SZDUkExKTkjelTw4KXjSukm9k90ml0y+PsVqSuGU81P1p2ZPPT5NbRpn2uEUQkpiyt6Uz5woThVnMJWdWpk6wGVx13Of8wJ4a3l9fF/+av6TNN+01WlP033T16T3ZfhnlGf0C1iCTYKXmWGZWzPfZUVl7c4ayk7MPpCjlJOSc0yoKcwStuYa5RbmdonsRCWi7une09dNHxCHi3flIXlT8hryteCPfLvEWvKTpKfAr6Ci4P2MhBmHCzUKhYXtRbZFS4ueFIcU/zITn8md2TLLZNb8WT2zmbO3z0HmpM5pmWs2d9Hc3nmh8/bMp8zPmv/7AscFqxe8WZi4sHGR4aJ5ix7+FPpTTYlqibjkxmKfxVuX4EsESzqWuizduPRrKa/0QpljWXnZ52XcZRd+dvp5w89Dy9OWd6xwX7FlJXGlcOX1Vf6r9qzWWF28+uGa8Wvq1jLWlq59s27auvPlruVb11PWS9Z3b4jY0LDRfOPKjZ83ZWy6VhFYcaDSoHJp5bvNvM2XtwRsqd1quLVs68dtgm03t4dur6uyrCrfQdxRsOPxzoSdbb94/lK9S39X2a4vu4W7u/fE7Gmt9qiu3muwd0UNWiOp6ds3eV/n/qD9DbX2tdsP0A+UHQQHJQef/Zry6/VD4YdaDnserj1icaTyKO1oaR1SV1Q3UJ9R392Q1NB1bNyxlkafxqO/Ofy2u8mkqeK49vEVJygnFp0YOll8crBZ1Nx/Kv3Uw5ZpLXdOTzx9tXVCa8eZ8DPnzoacPd3GbDt5zvdc03nv88cueF6ov+h+sa7drf3o726/H+1w76i75HGpodOrs7FrbNeJy/6XT10JunL2KvvqxWuR17qux1+/eWPyje6bvJtPb2Xfenm74PanO/PuEu6W3lO/V37f4H7VHzZ/HOh27z7eE9TT/iD2wZ2H3IfPH+U9+ty76DH1cfkT4yfVT52fNvWF9HU+m/Ss97no+af+kj81/qx8Yf3iyF8Bf7UPTBzofSl+OfRq2Wu917vfuL5pGYwevP825+2nd6Xv9d7v+eD5oe1j4scnn2Z8Jn3e8MXmS+PX8K93h3KGhkQcMUf2K4DBiqalAfBqNwDUJABo8B+CMkl+/pMVRH5mlSHwn7D8jCgr7gDUwkb6G89qBuAgrJbzoDZspb/wcQEAdXEZqcNnNdm5UlqI8BywLUiKbq2ZMg/8UORnzu/i/rEFUlVX8GP7LysHfJ5KQ4DsAAAAimVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAAAJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAeKACAAQAAAABAAAAXqADAAQAAAABAAAAYAAAAABBU0NJSQAAAFNjcmVlbnNob3R3sUVKAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB1GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj45NjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj45NDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo2Lsh/AAAAHGlET1QAAAACAAAAAAAAADAAAAAoAAAAMAAAADAAAATBBeBT5AAABI1JREFUeAHsm01ME0EUgN/WBJR64AgUy9EWBENQUAn+xEDwoCCJUYNyMCbEgBoTA4h4JBpOHJBIYjwY4w8GBBUF9GLwD2JCQAl4oaVQ4A6hLT+t86YsKQ3Q3e3stMGZZDvd+dmZfvt48+bNQ7JNOH1AkseziBlcKrtCc/GhLwHJTsBLBgO4XG46kgCvL3D56ZLNPuUDSRISLxPhlEuOyRmfjygbl1tIPCfmdBhp3DZJJX5xcYkWCFXDB7+Ei6uBqBqX2yPA82FOR6E63oCLqwDPETuAZHdM+yQypADPlTtI42jVkNV1cWmZjix0PJ8X4Jd41PHCjudDfHUUuoHCravYuXLlDtSOX15eFqqGL3fwm5PCZcAZO1o1q04yt3CScYVPwXvRqhE7V87giR2PG6iFBRcdWJiTfPhTOx43UB4h8XyIr44iTVDvpA/cwmXAFzzuXCXhj+cKHQcTiyt35P4BhVs4UuCpjvd6QdjxfN8APYFCc1KA5wweD7sxykBYNZzBo8vgf/BOGo1GyD6QBalpVkhJMUNSYiIlbbdPgM1mhz8jI9A/8IsbfckxNevzrqxsa1WTm3sYjuXlQWqqZVOwGGoxQMB/6fsKw8O/N23HqoIehOAJ1HbV8acKC6C46DSgxCtJU1NOaO/opC9BSXutbag5iS6D7Qj+xPGjUFp6EXbGxqri4yTwn79shSEdJd8v8Qh+m7kMEhMSoLKinOjzFFXQ5caodpqaH4GXmNp6JCrx+OBoPfqzWi1gteyllwwAy0ZHx+jt6NjftVwuw4KSs0X0opUaPx42t8CPn/0ae2/dLSpPoBBsSfEZwFxtan/TCQbDDsjMzIAUs1lt93Xt+759h5aWx+vKWN1QVYMrejRIfDjAWQEJfI5zehqqa+oCi5h9jwpVwxq4wzEJZvMeJpD0Ohii3slIxsez0MVIGPV7e8dbmmdkpEPV7VvRDT6S8fGsoKNex0tOFrIY19VWy7ea87m5ebhWcUNz/606Riw+/u6dKk2LZ/CPqb/fsGbhyHXx8fHQ8KAe4uJ2yUWacvwrwufrkSISH6+XpAcCKi+/Cnm5RwKLVH9/1doG7953qe6npIPfnOQYH88DOv7wrKxMuHm9kpiWuC9Xn2ZmZ6GxsQnQstEjcY2PZwUdQSixNsoul0JB/klN3F4Ql0HXh25NfZV08kcLk5Y84uNZ6XWluhfdBhfOn6PSrwSG3Kan9zO0vm4jexv/f8nI5SxzbvHxLKU92IrZCogp2QSFBfmADrNQyU1A9/T0wsfuTzA/Px+qeVj1fonnEB//7OmTsCYa2FkNeOwXExsDh3KyISf7IOwnNn5wwp07+mTwGhwcCq7W5Z5uoPQ+gWIp7UhBLXiZXCxxDyebkiDJZILdxjhI35cGuNmqqb0H6IfnmbjEx7MGr1THhwIpz2ujvUCovuHWc/FOslQz+INZgZcXe1bPU/MyqKrBDnqdQMlSpWZSStqykNJAgVBiniqZl9I2uofw6QU+XCkNnheLF6kUOrajVo2e8fHBP1DN5EK11brIbjQnrc8KNcfN6v8BAAD//0Y74dEAAAMoSURBVO1aS07DMBC1exnoaRCsEQsOgYRYIyQOwQKx5neZlk1byvcE9EPb4DdpJFSc0kDmYymWEidp4pl5no7HM+N7g+fMO+cm089wdm7/4JD6uk4nx0eu3d6ua7gf41zf3DkcmzbwAp5WW9VxVr+veu8fn96y0Nx4PKFvUwMeTG8K2t7ujsMRa51O152encd+YnnmSeO9d5PJlAjUDfzV5QUL47FBC80verwDDW9vb+XHmn+eOPCDx5dsETR+mqipiU3AX55t+q/5y9ixb3w/AN8KGj9K2NTEBKv6TBx4svGLhRszmRruxbUqwGXviwPf6z9lrVaLDfh1C1oZCBrPsbDCzks134c7CeCZTE2Z+yYl4KZ06nYqfqPrsbhm4S0urwYMSHo2vwkc+13azIAHP3x+zxbzOZupARHrdl4F+MHwNXPYQDEtrgDeurmRNjPAhNxJhAw4gQchq+ZGQ9uBhyeNDxdciyuIoFnVeg1tBx6k8bjgXFwxPpo1W6+l7cAi37kGd3I0GuO+9ugkDbo8WdN6LW0HHGRqEJ2U0HgQtLKh0tR2Ah6xGlxIAQ9a2iZHG3RgQBso7FwlTA0IFk0LfAugAwMKGTjGeHwBdKyXNjtWQCfgh5SBciEszL+4aoJvCXQCHtFJaDxXIiQG9uozTs1HxPH69l408rgqX+yePRESI1r2rM4JsAp4ITvZeMTjuTJQBaEqPSaA8qRrcqRl41kHvOCb/HjEaiwBXzCHHpOAhomgfjkZ35MWne6Do0MwkUHM/ONEVQaITk4/ZzSM5m7uH3Ik92mu8Uh2C4QMkkOHkWGRDBQj/8kO7eHHz2azxtQIT6FodFJYNtPkyNSAQ+4MlGkUFJgj4DlL+BRkSoIkeTXYQH18jIjhxp2Umbe8WjjQ4qqPlxEjPSrs9fHpQSLDMXt9vIwY6VFpFlelOTMVFlbCQIVsbuMZ6+NVpEqAqOeuj08AAxUW2evjVaRKgGgTnVSaJJH6eCXZTJOlkAF3fbxpBJSYI3dSoj5eST6zZHOND+xx18ebRUCJMdJ40JYsWlWS1RTZJgOlNB1kaiTr45XkNEf2CzNi9x137x/JAAAAAElFTkSuQmCC"},28154:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/last-run-view-945368b6e0eed8b49618f912a61017ef.png"},9035:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/projects-view-675ba8c24ec1896093663c29966b5e50.png"}}]); \ No newline at end of file diff --git a/assets/js/b972506a.33ba0baf.js b/assets/js/b972506a.33ba0baf.js deleted file mode 100644 index cf0bfcf680c..00000000000 --- a/assets/js/b972506a.33ba0baf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1187],{66037:e=>{e.exports=JSON.parse('{"label":"monorepo","permalink":"/blog/tags/monorepo","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b972506a.eaca5039.js b/assets/js/b972506a.eaca5039.js new file mode 100644 index 00000000000..c5c0c3072e4 --- /dev/null +++ b/assets/js/b972506a.eaca5039.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81187],{66037:e=>{e.exports=JSON.parse('{"label":"monorepo","permalink":"/blog/tags/monorepo","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/b9e9925e.00995af4.js b/assets/js/b9e9925e.00995af4.js deleted file mode 100644 index 3640f3e7629..00000000000 --- a/assets/js/b9e9925e.00995af4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[297],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),f=c(n),m=o,g=f["".concat(s,".").concat(m)]||f[m]||u[m]||a;return n?r.createElement(g,i(i({ref:t},p),{},{components:n})):r.createElement(g,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},62328:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"File groups"},i=void 0,l={unversionedId:"concepts/file-group",id:"concepts/file-group",title:"File groups",description:"File groups are a mechanism for grouping similar types of files within a project using",source:"@site/docs/concepts/file-group.mdx",sourceDirName:"concepts",slug:"/concepts/file-group",permalink:"/docs/concepts/file-group",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/file-group.mdx",tags:[],version:"current",frontMatter:{title:"File groups"},sidebar:"docs",previous:{title:"Cache",permalink:"/docs/concepts/cache"},next:{title:"File patterns",permalink:"/docs/concepts/file-pattern"}},s={},c=[{value:"Configuration",id:"configuration",level:2},{value:"Inheritance and merging",id:"inheritance-and-merging",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"File groups are a mechanism for grouping similar types of files within a project using\n",(0,o.kt)("a",{parentName:"p",href:"./file-pattern"},"file glob patterns or literal file paths"),". These groups are then used by\n",(0,o.kt)("a",{parentName:"p",href:"./task"},"tasks")," to calculate functionality like cache computation, affected files since last change,\ndeterministic builds, and more."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"File groups can be configured per project through ",(0,o.kt)("a",{parentName:"p",href:"../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),", or for many\nprojects through ",(0,o.kt)("a",{parentName:"p",href:"../config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),"."),(0,o.kt)("h2",{id:"inheritance-and-merging"},"Inheritance and merging"),(0,o.kt)("p",null,"When a file group of the same name exists in both ",(0,o.kt)("a",{parentName:"p",href:"#configuration"},"configuration files"),", the\nproject-level group will override the workspace-level group, and all other workspace-level groups\nwill be inherited as-is."),(0,o.kt)("p",null,"A primary scenario in which to define file groups at the project-level is when you want to\n",(0,o.kt)("em",{parentName:"p"},"override")," file groups defined at the workspace-level. For example, say we want to override the\n",(0,o.kt)("inlineCode",{parentName:"p"},"sources"),' file group because our source folder is named "lib" and not "src", we would define our\nfile groups as followed.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"fileGroups:\n sources:\n - 'src/**/*'\n - 'types/**/*'\n tests:\n - 'tests/**/*.test.*'\n - '**/__tests__/**/*'\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"fileGroups:\n # Overrides global\n sources:\n - 'lib/**/*'\n - 'types/**/*'\n # Inherited as-is\n tests:\n - 'tests/**/*.test.*'\n - '**/__tests__/**/*'\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b9e9925e.20cf0257.js b/assets/js/b9e9925e.20cf0257.js new file mode 100644 index 00000000000..2e7cce57920 --- /dev/null +++ b/assets/js/b9e9925e.20cf0257.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90297],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),f=c(n),m=o,g=f["".concat(s,".").concat(m)]||f[m]||u[m]||a;return n?r.createElement(g,i(i({ref:t},p),{},{components:n})):r.createElement(g,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},62328:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"File groups"},i=void 0,l={unversionedId:"concepts/file-group",id:"concepts/file-group",title:"File groups",description:"File groups are a mechanism for grouping similar types of files within a project using",source:"@site/docs/concepts/file-group.mdx",sourceDirName:"concepts",slug:"/concepts/file-group",permalink:"/docs/concepts/file-group",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/file-group.mdx",tags:[],version:"current",frontMatter:{title:"File groups"},sidebar:"docs",previous:{title:"Cache",permalink:"/docs/concepts/cache"},next:{title:"File patterns",permalink:"/docs/concepts/file-pattern"}},s={},c=[{value:"Configuration",id:"configuration",level:2},{value:"Inheritance and merging",id:"inheritance-and-merging",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"File groups are a mechanism for grouping similar types of files within a project using\n",(0,o.kt)("a",{parentName:"p",href:"./file-pattern"},"file glob patterns or literal file paths"),". These groups are then used by\n",(0,o.kt)("a",{parentName:"p",href:"./task"},"tasks")," to calculate functionality like cache computation, affected files since last change,\ndeterministic builds, and more."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"File groups can be configured per project through ",(0,o.kt)("a",{parentName:"p",href:"../config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),", or for many\nprojects through ",(0,o.kt)("a",{parentName:"p",href:"../config/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),"."),(0,o.kt)("h2",{id:"inheritance-and-merging"},"Inheritance and merging"),(0,o.kt)("p",null,"When a file group of the same name exists in both ",(0,o.kt)("a",{parentName:"p",href:"#configuration"},"configuration files"),", the\nproject-level group will override the workspace-level group, and all other workspace-level groups\nwill be inherited as-is."),(0,o.kt)("p",null,"A primary scenario in which to define file groups at the project-level is when you want to\n",(0,o.kt)("em",{parentName:"p"},"override")," file groups defined at the workspace-level. For example, say we want to override the\n",(0,o.kt)("inlineCode",{parentName:"p"},"sources"),' file group because our source folder is named "lib" and not "src", we would define our\nfile groups as followed.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"fileGroups:\n sources:\n - 'src/**/*'\n - 'types/**/*'\n tests:\n - 'tests/**/*.test.*'\n - '**/__tests__/**/*'\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"fileGroups:\n # Overrides global\n sources:\n - 'lib/**/*'\n - 'types/**/*'\n # Inherited as-is\n tests:\n - 'tests/**/*.test.*'\n - '**/__tests__/**/*'\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bb624440.2c3310dd.js b/assets/js/bb624440.2c3310dd.js deleted file mode 100644 index 51eb0565a0e..00000000000 --- a/assets/js/bb624440.2c3310dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1364],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(r),g=o,f=m["".concat(s,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=r[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},24588:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(25773),o=(r(27378),r(35318));r(76911);const a={slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},i=void 0,l={permalink:"/blog/moon-v1.5",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx",source:"@site/blog/2023-05-08_moon-v1.5.mdx",title:"moon v1.5 - Rust tier 2 and 3 support",description:"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language.",date:"2023-05-08T00:00:00.000Z",formattedDate:"May 8, 2023",tags:[{label:"rust",permalink:"/blog/tags/rust"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tier",permalink:"/blog/tags/tier"}],readingTime:2.765,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},prevItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"},nextItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"}},s={image:r(52681).Z,authorsImageUrls:[void 0]},u=[],p={toc:u};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language."))}c.isMDXComponent=!0},52681:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.5-c0d8c4fbb15e8449bad93fa566d3e9cf.png"}}]); \ No newline at end of file diff --git a/assets/js/bb624440.adddcf9c.js b/assets/js/bb624440.adddcf9c.js new file mode 100644 index 00000000000..bfa8aed346c --- /dev/null +++ b/assets/js/bb624440.adddcf9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21364],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(r),g=o,f=m["".concat(s,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=r[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},24588:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(25773),o=(r(27378),r(35318));r(76911);const a={slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},i=void 0,l={permalink:"/blog/moon-v1.5",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx",source:"@site/blog/2023-05-08_moon-v1.5.mdx",title:"moon v1.5 - Rust tier 2 and 3 support",description:"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language.",date:"2023-05-08T00:00:00.000Z",formattedDate:"May 8, 2023",tags:[{label:"rust",permalink:"/blog/tags/rust"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tier",permalink:"/blog/tags/tier"}],readingTime:2.765,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.5",title:"moon v1.5 - Rust tier 2 and 3 support",authors:["milesj"],tags:["rust","lang","tier"],image:"./img/moon/v1.5.png"},prevItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"},nextItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"}},s={image:r(52681).Z,authorsImageUrls:[void 0]},u=[],p={toc:u};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language."))}c.isMDXComponent=!0},52681:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.5-c0d8c4fbb15e8449bad93fa566d3e9cf.png"}}]); \ No newline at end of file diff --git a/assets/js/bb86fac5.b5cfef45.js b/assets/js/bb86fac5.b5cfef45.js deleted file mode 100644 index 38d618021a0..00000000000 --- a/assets/js/bb86fac5.b5cfef45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9067],{56543:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/http","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bb86fac5.e90a1f5f.js b/assets/js/bb86fac5.e90a1f5f.js new file mode 100644 index 00000000000..f9cca146505 --- /dev/null +++ b/assets/js/bb86fac5.e90a1f5f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99067],{56543:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/http","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bc6c5049.4db07042.js b/assets/js/bc6c5049.4db07042.js deleted file mode 100644 index 373ed97a855..00000000000 --- a/assets/js/bc6c5049.4db07042.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5370],{5540:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rfc","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bc6c5049.f2887640.js b/assets/js/bc6c5049.f2887640.js new file mode 100644 index 00000000000..ea1a059c2cf --- /dev/null +++ b/assets/js/bc6c5049.f2887640.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[25370],{5540:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rfc","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bc74446d.3e06f93f.js b/assets/js/bc74446d.3e06f93f.js new file mode 100644 index 00000000000..ca1a09612c1 --- /dev/null +++ b/assets/js/bc74446d.3e06f93f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33134],{90063:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/debug","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bc74446d.9aff22ce.js b/assets/js/bc74446d.9aff22ce.js deleted file mode 100644 index 7aeaa18dd75..00000000000 --- a/assets/js/bc74446d.9aff22ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3134],{90063:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/debug","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bcbbf42e.1dcbb974.js b/assets/js/bcbbf42e.1dcbb974.js deleted file mode 100644 index 0c039628840..00000000000 --- a/assets/js/bcbbf42e.1dcbb974.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2606],{26090:e=>{e.exports=JSON.parse('{"label":"typescript","permalink":"/blog/tags/typescript","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/bcbbf42e.dc9cb80b.js b/assets/js/bcbbf42e.dc9cb80b.js new file mode 100644 index 00000000000..e40f43c7590 --- /dev/null +++ b/assets/js/bcbbf42e.dc9cb80b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52606],{26090:e=>{e.exports=JSON.parse('{"label":"typescript","permalink":"/blog/tags/typescript","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/bd6bded1.53894a22.js b/assets/js/bd6bded1.53894a22.js new file mode 100644 index 00000000000..fe3aed5953f --- /dev/null +++ b/assets/js/bd6bded1.53894a22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62687],{32443:e=>{e.exports=JSON.parse('{"label":"inheritance","permalink":"/blog/tags/inheritance","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/bd6bded1.93dfd685.js b/assets/js/bd6bded1.93dfd685.js deleted file mode 100644 index 584a058a497..00000000000 --- a/assets/js/bd6bded1.93dfd685.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4903],{32443:e=>{e.exports=JSON.parse('{"label":"inheritance","permalink":"/blog/tags/inheritance","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/be0fdac8.c7d441a4.js b/assets/js/be0fdac8.c7d441a4.js new file mode 100644 index 00000000000..5ed864f4454 --- /dev/null +++ b/assets/js/be0fdac8.c7d441a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76331],{74962:e=>{e.exports=JSON.parse('{"label":"logging","permalink":"/blog/tags/logging","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/be0fdac8.d77ffe0d.js b/assets/js/be0fdac8.d77ffe0d.js deleted file mode 100644 index 57ad45fc15a..00000000000 --- a/assets/js/be0fdac8.d77ffe0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6331],{74962:e=>{e.exports=JSON.parse('{"label":"logging","permalink":"/blog/tags/logging","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/be1609b7.20291714.js b/assets/js/be1609b7.20291714.js deleted file mode 100644 index f55de902f60..00000000000 --- a/assets/js/be1609b7.20291714.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6448],{56277:e=>{e.exports=JSON.parse('{"label":"toolchain","permalink":"/blog/tags/toolchain","allTagsPath":"/blog/tags","count":7}')}}]); \ No newline at end of file diff --git a/assets/js/be1609b7.6b519e87.js b/assets/js/be1609b7.6b519e87.js new file mode 100644 index 00000000000..3380c4a9709 --- /dev/null +++ b/assets/js/be1609b7.6b519e87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56448],{56277:e=>{e.exports=JSON.parse('{"label":"toolchain","permalink":"/blog/tags/toolchain","allTagsPath":"/blog/tags","count":7}')}}]); \ No newline at end of file diff --git a/assets/js/be1aaa14.12d05dea.js b/assets/js/be1aaa14.12d05dea.js new file mode 100644 index 00000000000..071ebbd1a58 --- /dev/null +++ b/assets/js/be1aaa14.12d05dea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37133],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=l(n),m=a,h=d["".concat(c,".").concat(m)]||d[m]||p[m]||o;return n?r.createElement(h,s(s({ref:t},u),{},{components:n})):r.createElement(h,s({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var l=2;l<o;l++)s[l]=n[l];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},78817:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=n(25773),a=(n(27378),n(35318));const o={title:"query hash",sidebar_label:"hash"},s=void 0,i={unversionedId:"commands/query/hash",id:"commands/query/hash",title:"query hash",description:"Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also",source:"@site/docs/commands/query/hash.mdx",sourceDirName:"commands/query",slug:"/commands/query/hash",permalink:"/docs/commands/query/hash",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/hash.mdx",tags:[],version:"current",frontMatter:{title:"query hash",sidebar_label:"hash"},sidebar:"docs",previous:{title:"query",permalink:"/docs/commands/query"},next:{title:"hash-diff",permalink:"/docs/commands/query/hash-diff"}},c={},l=[{value:"Options",id:"options",level:3}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query hash")," sub-command to inspect the contents and sources of a generated hash, also\nknown as the hash manifest. This is extremely useful in debugging task inputs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon query hash 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\n\n# Query hash using short form\n$ moon query hash 0b55b234\n")),(0,a.kt)("p",null,"By default, this will output the contents of the hash manifest (which is JSON), and the fully\nqualified resolved hash."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'Hash: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\n\n{\n "command": "build",\n "args": ["./build"]\n // ...\n}\n')),(0,a.kt)("p",null,"The command can also be output raw JSON by passing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag."),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the diff in JSON format.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/be1aaa14.6d3fef0c.js b/assets/js/be1aaa14.6d3fef0c.js deleted file mode 100644 index 879b7e6bf72..00000000000 --- a/assets/js/be1aaa14.6d3fef0c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7133],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=l(n),m=a,h=d["".concat(c,".").concat(m)]||d[m]||p[m]||o;return n?r.createElement(h,s(s({ref:t},u),{},{components:n})):r.createElement(h,s({ref:t},u))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var l=2;l<o;l++)s[l]=n[l];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},78817:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=n(25773),a=(n(27378),n(35318));const o={title:"query hash",sidebar_label:"hash"},s=void 0,i={unversionedId:"commands/query/hash",id:"commands/query/hash",title:"query hash",description:"Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also",source:"@site/docs/commands/query/hash.mdx",sourceDirName:"commands/query",slug:"/commands/query/hash",permalink:"/docs/commands/query/hash",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/hash.mdx",tags:[],version:"current",frontMatter:{title:"query hash",sidebar_label:"hash"},sidebar:"docs",previous:{title:"query",permalink:"/docs/commands/query"},next:{title:"hash-diff",permalink:"/docs/commands/query/hash-diff"}},c={},l=[{value:"Options",id:"options",level:3}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query hash")," sub-command to inspect the contents and sources of a generated hash, also\nknown as the hash manifest. This is extremely useful in debugging task inputs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon query hash 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\n\n# Query hash using short form\n$ moon query hash 0b55b234\n")),(0,a.kt)("p",null,"By default, this will output the contents of the hash manifest (which is JSON), and the fully\nqualified resolved hash."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'Hash: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\n\n{\n "command": "build",\n "args": ["./build"]\n // ...\n}\n')),(0,a.kt)("p",null,"The command can also be output raw JSON by passing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag."),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the diff in JSON format.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bec065e9.38d250ba.js b/assets/js/bec065e9.38d250ba.js deleted file mode 100644 index 627663dde38..00000000000 --- a/assets/js/bec065e9.38d250ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6819],{52695:e=>{e.exports=JSON.parse('{"label":"action","permalink":"/blog/tags/action","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/bec065e9.ff4adfa0.js b/assets/js/bec065e9.ff4adfa0.js new file mode 100644 index 00000000000..a90ef55c6f5 --- /dev/null +++ b/assets/js/bec065e9.ff4adfa0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56819],{52695:e=>{e.exports=JSON.parse('{"label":"action","permalink":"/blog/tags/action","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/bf04367c.473c80db.js b/assets/js/bf04367c.473c80db.js deleted file mode 100644 index 5b11387591a..00000000000 --- a/assets/js/bf04367c.473c80db.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3916],{35318:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>d});var n=a(27378);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,i=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=p(a),d=o,g=c["".concat(i,".").concat(d)]||c[d]||u[d]||r;return a?n.createElement(g,s(s({ref:t},m),{},{components:a})):n.createElement(g,s({ref:t},m))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,s=new Array(r);s[0]=c;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:o,s[1]=l;for(var p=2;p<r;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},63261:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=a(25773),o=(a(27378),a(35318));const r={slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},s=void 0,l={permalink:"/blog/moon-v1.4",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx",source:"@site/blog/2023-05-01_moon-v1.4.mdx",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",description:"With this release, we're bringing further improvements to tags and MQL.",date:"2023-05-01T00:00:00.000Z",formattedDate:"May 1, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tag",permalink:"/blog/tags/tag"},{label:"alias",permalink:"/blog/tags/alias"}],readingTime:1.73,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},prevItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"},nextItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"}},i={image:a(914).Z,authorsImageUrls:[void 0]},p=[{value:"Run targets by tag with <code>#tag:task</code>",id:"run-targets-by-tag-with-tagtask",level:2},{value:"Updated <code>moon query</code> commands to support MQL",id:"updated-moon-query-commands-to-support-mql",level:2},{value:"Deprecated <code>node.aliasPackageNames</code> setting",id:"deprecated-nodealiaspackagenames-setting",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function u(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're bringing further improvements to tags and MQL."),(0,o.kt)("h2",{id:"run-targets-by-tag-with-tagtask"},"Run targets by tag with ",(0,o.kt)("inlineCode",{parentName:"h2"},"#tag:task")),(0,o.kt)("p",null,"We love our community, as you all continuously suggest new and awesome features that haven't crossed\nour minds. One such feature was the ability to run tasks for all projects with a tag,\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/803"},"suggested by @theoephraim"),", which is now possible with\nthe new ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/target#by-tag"},"tag scope"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"#tag:task"),"."),(0,o.kt)("p",null,"As an example, we can easily lint all projects that have the ",(0,o.kt)("inlineCode",{parentName:"p"},"frontend")," tag."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run '#frontend:lint'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Because ",(0,o.kt)("inlineCode",{parentName:"p"},"#")," is special syntax and denotes a comment, the target will need to be quoted to work\ncorrectly!")),(0,o.kt)("h2",{id:"updated-moon-query-commands-to-support-mql"},"Updated ",(0,o.kt)("inlineCode",{parentName:"h2"},"moon query")," commands to support MQL"),(0,o.kt)("p",null,"Last week we announced ",(0,o.kt)("a",{parentName:"p",href:"./moon-v1.3#run-targets-based-on-a-query"},"MQL"),", a custom query language for\napplying filters to moon's project graph, primarily through the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run")),"\ncommand. We plan to slowly integrate MQL throughout moon as it provides an easy to use API, and an\noverall better developer experience."),(0,o.kt)("p",null,"As such, we've updated both ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/query/projects"},(0,o.kt)("inlineCode",{parentName:"a"},"moon query projects"))," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/query/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},"moon query tasks"))," to support MQL statements as an optional first\nargument. Totally makes sense that query commands would support MQL!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},'# Find all projects with a `lint` or `build` task\n$ moon query projects "task=[lint,build]"\n\n# Find all tasks with an id that starts with "dev"\n$ moon query tasks "task~dev-*"\n')),(0,o.kt)("h2",{id:"deprecated-nodealiaspackagenames-setting"},"Deprecated ",(0,o.kt)("inlineCode",{parentName:"h2"},"node.aliasPackageNames")," setting"),(0,o.kt)("p",null,"moon project's support the ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/project#aliases"},"concept of aliasing"),", where\nlanguage/ecosystem specific names are used alongside moon's. For example, the ",(0,o.kt)("inlineCode",{parentName:"p"},"name")," field from\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". However, aliasing was off by default for Node.js projects and had to be explicitly\nenabled with the ",(0,o.kt)("inlineCode",{parentName:"p"},"node.aliasPackageNames")," setting."),(0,o.kt)("p",null,"In an effort to streamline moon adoption for Node.js codebases, we're deprecating that setting, and\ninstead will now always inherit the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name as an alias. For example, if you're package\nname was ",(0,o.kt)("inlineCode",{parentName:"p"},"@company/utils"),", you can now run a target like so:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run @company/utils:build\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting is now a no-op and can be removed from your configuration.")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.4.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Upgraded to proto v0.8.")))}u.isMDXComponent=!0},914:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/v1.4-b1df8286618a63bb7bfdc2a708da9d6b.png"}}]); \ No newline at end of file diff --git a/assets/js/bf04367c.c9528421.js b/assets/js/bf04367c.c9528421.js new file mode 100644 index 00000000000..ec137b095f3 --- /dev/null +++ b/assets/js/bf04367c.c9528421.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13089],{35318:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>d});var n=a(27378);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,i=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=p(a),d=o,g=c["".concat(i,".").concat(d)]||c[d]||u[d]||r;return a?n.createElement(g,s(s({ref:t},m),{},{components:a})):n.createElement(g,s({ref:t},m))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,s=new Array(r);s[0]=c;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:o,s[1]=l;for(var p=2;p<r;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},63261:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=a(25773),o=(a(27378),a(35318));const r={slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},s=void 0,l={permalink:"/blog/moon-v1.4",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx",source:"@site/blog/2023-05-01_moon-v1.4.mdx",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",description:"With this release, we're bringing further improvements to tags and MQL.",date:"2023-05-01T00:00:00.000Z",formattedDate:"May 1, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tag",permalink:"/blog/tags/tag"},{label:"alias",permalink:"/blog/tags/alias"}],readingTime:1.73,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},prevItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"},nextItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"}},i={image:a(914).Z,authorsImageUrls:[void 0]},p=[{value:"Run targets by tag with <code>#tag:task</code>",id:"run-targets-by-tag-with-tagtask",level:2},{value:"Updated <code>moon query</code> commands to support MQL",id:"updated-moon-query-commands-to-support-mql",level:2},{value:"Deprecated <code>node.aliasPackageNames</code> setting",id:"deprecated-nodealiaspackagenames-setting",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function u(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're bringing further improvements to tags and MQL."),(0,o.kt)("h2",{id:"run-targets-by-tag-with-tagtask"},"Run targets by tag with ",(0,o.kt)("inlineCode",{parentName:"h2"},"#tag:task")),(0,o.kt)("p",null,"We love our community, as you all continuously suggest new and awesome features that haven't crossed\nour minds. One such feature was the ability to run tasks for all projects with a tag,\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/803"},"suggested by @theoephraim"),", which is now possible with\nthe new ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/target#by-tag"},"tag scope"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"#tag:task"),"."),(0,o.kt)("p",null,"As an example, we can easily lint all projects that have the ",(0,o.kt)("inlineCode",{parentName:"p"},"frontend")," tag."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run '#frontend:lint'\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Because ",(0,o.kt)("inlineCode",{parentName:"p"},"#")," is special syntax and denotes a comment, the target will need to be quoted to work\ncorrectly!")),(0,o.kt)("h2",{id:"updated-moon-query-commands-to-support-mql"},"Updated ",(0,o.kt)("inlineCode",{parentName:"h2"},"moon query")," commands to support MQL"),(0,o.kt)("p",null,"Last week we announced ",(0,o.kt)("a",{parentName:"p",href:"./moon-v1.3#run-targets-based-on-a-query"},"MQL"),", a custom query language for\napplying filters to moon's project graph, primarily through the ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run")),"\ncommand. We plan to slowly integrate MQL throughout moon as it provides an easy to use API, and an\noverall better developer experience."),(0,o.kt)("p",null,"As such, we've updated both ",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/query/projects"},(0,o.kt)("inlineCode",{parentName:"a"},"moon query projects"))," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/commands/query/tasks"},(0,o.kt)("inlineCode",{parentName:"a"},"moon query tasks"))," to support MQL statements as an optional first\nargument. Totally makes sense that query commands would support MQL!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},'# Find all projects with a `lint` or `build` task\n$ moon query projects "task=[lint,build]"\n\n# Find all tasks with an id that starts with "dev"\n$ moon query tasks "task~dev-*"\n')),(0,o.kt)("h2",{id:"deprecated-nodealiaspackagenames-setting"},"Deprecated ",(0,o.kt)("inlineCode",{parentName:"h2"},"node.aliasPackageNames")," setting"),(0,o.kt)("p",null,"moon project's support the ",(0,o.kt)("a",{parentName:"p",href:"/docs/concepts/project#aliases"},"concept of aliasing"),", where\nlanguage/ecosystem specific names are used alongside moon's. For example, the ",(0,o.kt)("inlineCode",{parentName:"p"},"name")," field from\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". However, aliasing was off by default for Node.js projects and had to be explicitly\nenabled with the ",(0,o.kt)("inlineCode",{parentName:"p"},"node.aliasPackageNames")," setting."),(0,o.kt)("p",null,"In an effort to streamline moon adoption for Node.js codebases, we're deprecating that setting, and\ninstead will now always inherit the ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," name as an alias. For example, if you're package\nname was ",(0,o.kt)("inlineCode",{parentName:"p"},"@company/utils"),", you can now run a target like so:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run @company/utils:build\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"This setting is now a no-op and can be removed from your configuration.")),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.4.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Upgraded to proto v0.8.")))}u.isMDXComponent=!0},914:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/v1.4-b1df8286618a63bb7bfdc2a708da9d6b.png"}}]); \ No newline at end of file diff --git a/assets/js/bf5d9784.0f07feb1.js b/assets/js/bf5d9784.0f07feb1.js new file mode 100644 index 00000000000..b18b8eada1b --- /dev/null +++ b/assets/js/bf5d9784.0f07feb1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99827],{40475:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/life","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bf5d9784.ab1d5cf6.js b/assets/js/bf5d9784.ab1d5cf6.js deleted file mode 100644 index 0ab4825c25d..00000000000 --- a/assets/js/bf5d9784.ab1d5cf6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9827],{40475:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/life","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bf95ed3d.10acef3e.js b/assets/js/bf95ed3d.10acef3e.js new file mode 100644 index 00000000000..5288fad5d44 --- /dev/null +++ b/assets/js/bf95ed3d.10acef3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59639],{26718:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/toml","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bf95ed3d.96f00ba2.js b/assets/js/bf95ed3d.96f00ba2.js deleted file mode 100644 index dbefda62a1b..00000000000 --- a/assets/js/bf95ed3d.96f00ba2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9639],{26718:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/toml","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c1721191.3e79b686.js b/assets/js/c1721191.3e79b686.js deleted file mode 100644 index cacc0ece8d0..00000000000 --- a/assets/js/c1721191.3e79b686.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4362],{45332:e=>{e.exports=JSON.parse('{"label":"tool","permalink":"/blog/tags/tool","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c1721191.854e7ff1.js b/assets/js/c1721191.854e7ff1.js new file mode 100644 index 00000000000..fcd8ae01928 --- /dev/null +++ b/assets/js/c1721191.854e7ff1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54362],{45332:e=>{e.exports=JSON.parse('{"label":"tool","permalink":"/blog/tags/tool","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c19ad3d7.f2491f65.js b/assets/js/c19ad3d7.f2491f65.js deleted file mode 100644 index c31a4620932..00000000000 --- a/assets/js/c19ad3d7.f2491f65.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[805],{76656:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":21}')}}]); \ No newline at end of file diff --git a/assets/js/c19ad3d7.fab4f39c.js b/assets/js/c19ad3d7.fab4f39c.js new file mode 100644 index 00000000000..c50aac60ff4 --- /dev/null +++ b/assets/js/c19ad3d7.fab4f39c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40805],{76656:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":22}')}}]); \ No newline at end of file diff --git a/assets/js/c413f1b7.a015b083.js b/assets/js/c413f1b7.a015b083.js deleted file mode 100644 index ec127190178..00000000000 --- a/assets/js/c413f1b7.a015b083.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4384],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),g=o,f=u["".concat(c,".").concat(g)]||u[g]||m[g]||i;return n?r.createElement(f,a(a({ref:t},p),{},{components:n})):r.createElement(f,a({ref:t},p))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var s=2;s<i;s++)a[s]=n[s];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:i,align:a="center",padding:l="1rem"}=e;return r.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:a}},r.createElement("img",{src:t.default,width:n,alt:o,title:i,className:"inline-block"}))}},35971:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(25773),o=(n(27378),n(35318));n(88109);const i={slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},a=void 0,l={permalink:"/blog/v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-31_v0.18.mdx",source:"@site/blog/2022-10-31_v0.18.mdx",title:"moon v0.18 - Improved configuration and initialization flow",description:"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and",date:"2022-10-31T00:00:00.000Z",formattedDate:"October 31, 2022",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"config",permalink:"/blog/tags/config"},{label:"init",permalink:"/blog/tags/init"},{label:"node",permalink:"/blog/tags/node"}],readingTime:2.09,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},prevItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"},nextItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"}},c={image:n(8706).Z,authorsImageUrls:[void 0]},s=[],p={toc:s};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and\nbenchmarking performance metrics, so it's rather light on new features, but we still have some to\nshow!"))}m.isMDXComponent=!0},8706:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v0.18-dbb354a41e8d2854b61b9680283d2e65.png"}}]); \ No newline at end of file diff --git a/assets/js/c413f1b7.a79d358b.js b/assets/js/c413f1b7.a79d358b.js new file mode 100644 index 00000000000..4b15078213e --- /dev/null +++ b/assets/js/c413f1b7.a79d358b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94384],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),g=o,f=u["".concat(c,".").concat(g)]||u[g]||m[g]||i;return n?r.createElement(f,a(a({ref:t},p),{},{components:n})):r.createElement(f,a({ref:t},p))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var s=2;s<i;s++)a[s]=n[s];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378);function o(e){let{src:t,width:n="90%",alt:o="",title:i,align:a="center",padding:l="1rem"}=e;return r.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:a}},r.createElement("img",{src:t.default,width:n,alt:o,title:i,className:"inline-block"}))}},35971:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(25773),o=(n(27378),n(35318));n(88109);const i={slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},a=void 0,l={permalink:"/blog/v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-31_v0.18.mdx",source:"@site/blog/2022-10-31_v0.18.mdx",title:"moon v0.18 - Improved configuration and initialization flow",description:"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and",date:"2022-10-31T00:00:00.000Z",formattedDate:"October 31, 2022",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"config",permalink:"/blog/tags/config"},{label:"init",permalink:"/blog/tags/init"},{label:"node",permalink:"/blog/tags/node"}],readingTime:2.09,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},prevItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"},nextItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"}},c={image:n(8706).Z,authorsImageUrls:[void 0]},s=[],p={toc:s};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and\nbenchmarking performance metrics, so it's rather light on new features, but we still have some to\nshow!"))}m.isMDXComponent=!0},8706:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v0.18-dbb354a41e8d2854b61b9680283d2e65.png"}}]); \ No newline at end of file diff --git a/assets/js/c4542d8c.b5318905.js b/assets/js/c4542d8c.b5318905.js new file mode 100644 index 00000000000..71d65abc2c9 --- /dev/null +++ b/assets/js/c4542d8c.b5318905.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61988],{25:s=>{s.exports=JSON.parse('{"label":"shorthand","permalink":"/blog/tags/shorthand","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c4542d8c.f48bdc8c.js b/assets/js/c4542d8c.f48bdc8c.js deleted file mode 100644 index cb7ebf0adce..00000000000 --- a/assets/js/c4542d8c.f48bdc8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1988],{25:s=>{s.exports=JSON.parse('{"label":"shorthand","permalink":"/blog/tags/shorthand","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c4f95133.375f09a0.js b/assets/js/c4f95133.375f09a0.js new file mode 100644 index 00000000000..1ad49f19065 --- /dev/null +++ b/assets/js/c4f95133.375f09a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98401],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=l(r),f=o,y=m["".concat(p,".").concat(f)]||m[f]||s[f]||i;return r?n.createElement(y,a(a({ref:t},u),{},{components:r})):n.createElement(y,a({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var l=2;l<i;l++)a[l]=r[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},32080:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>a,default:()=>l,frontMatter:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const i={},a=void 0,c=[],p={toc:c};function l(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"IN DEVELOPMENT!")),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/github/workflow/status/moonrepo/moon/Moon",alt:"build status"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/v/@moonrepo/runtime",alt:"npm version"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/l/@moonrepo/runtime",alt:"npm license"})),(0,o.kt)("p",null,"Utilities for creating custom task executors within moon's runtime."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c4f95133.6eb33f15.js b/assets/js/c4f95133.6eb33f15.js deleted file mode 100644 index 984b7f6da2d..00000000000 --- a/assets/js/c4f95133.6eb33f15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8401],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=l(r),f=o,y=m["".concat(p,".").concat(f)]||m[f]||s[f]||i;return r?n.createElement(y,a(a({ref:t},u),{},{components:r})):n.createElement(y,a({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var l=2;l<i;l++)a[l]=r[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},32080:(e,t,r)=>{r.r(t),r.d(t,{contentTitle:()=>a,default:()=>l,frontMatter:()=>i,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const i={},a=void 0,c=[],p={toc:c};function l(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"IN DEVELOPMENT!")),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/github/workflow/status/moonrepo/moon/Moon",alt:"build status"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/v/@moonrepo/runtime",alt:"npm version"}),"\n",(0,o.kt)("img",{parentName:"p",src:"https://img.shields.io/npm/l/@moonrepo/runtime",alt:"npm license"})),(0,o.kt)("p",null,"Utilities for creating custom task executors within moon's runtime."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c532175a.dc12bf72.js b/assets/js/c532175a.dc12bf72.js new file mode 100644 index 00000000000..d57d824279f --- /dev/null +++ b/assets/js/c532175a.dc12bf72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68573],{70953:s=>{s.exports=JSON.parse('{"label":"task","permalink":"/blog/tags/task","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c532175a.e2157934.js b/assets/js/c532175a.e2157934.js deleted file mode 100644 index b71b862d2c8..00000000000 --- a/assets/js/c532175a.e2157934.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8573],{70953:s=>{s.exports=JSON.parse('{"label":"task","permalink":"/blog/tags/task","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/c5980a65.23f83a0b.js b/assets/js/c5980a65.23f83a0b.js new file mode 100644 index 00000000000..12516c9b6f0 --- /dev/null +++ b/assets/js/c5980a65.23f83a0b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41525],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||l;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,a=new Array(l);a[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p<l;p++)a[p]=n[p];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},85169:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var r=n(25773),o=(n(27378),n(35318));const l={title:"uninstall"},a=void 0,i={unversionedId:"proto/commands/uninstall",id:"proto/commands/uninstall",title:"uninstall",description:"The proto uninstall (or proto ui) command will uninstall and remove a tool from",source:"@site/docs/proto/commands/uninstall.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/uninstall",permalink:"/docs/proto/commands/uninstall",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/uninstall.mdx",tags:[],version:"current",frontMatter:{title:"uninstall"},sidebar:"proto",previous:{title:"unalias",permalink:"/docs/proto/commands/unalias"},next:{title:"uninstall-global",permalink:"/docs/proto/commands/uninstall-global"}},s={},p=[{value:"Arguments",id:"arguments",level:3}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto uninstall <tool>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ui"),") command will uninstall and remove a tool from\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<tool>"),". If the tool has not been installed, the command will exit early."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto uninstall deno 1.31\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[version]"),' - Version of tool. Defaults to "latest".')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c5980a65.8ec9e95a.js b/assets/js/c5980a65.8ec9e95a.js deleted file mode 100644 index dd4a5b0a98a..00000000000 --- a/assets/js/c5980a65.8ec9e95a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1525],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||l;return n?r.createElement(f,a(a({ref:t},c),{},{components:n})):r.createElement(f,a({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,a=new Array(l);a[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p<l;p++)a[p]=n[p];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},85169:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var r=n(25773),o=(n(27378),n(35318));const l={title:"uninstall"},a=void 0,i={unversionedId:"proto/commands/uninstall",id:"proto/commands/uninstall",title:"uninstall",description:"The proto uninstall (or proto ui) command will uninstall and remove a tool from",source:"@site/docs/proto/commands/uninstall.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/uninstall",permalink:"/docs/proto/commands/uninstall",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/uninstall.mdx",tags:[],version:"current",frontMatter:{title:"uninstall"},sidebar:"proto",previous:{title:"unalias",permalink:"/docs/proto/commands/unalias"},next:{title:"uninstall-global",permalink:"/docs/proto/commands/uninstall-global"}},s={},p=[{value:"Arguments",id:"arguments",level:3}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto uninstall <tool>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto ui"),") command will uninstall and remove a tool from\n",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/<tool>"),". If the tool has not been installed, the command will exit early."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto uninstall deno 1.31\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[version]"),' - Version of tool. Defaults to "latest".')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c5de23c8.2d01af65.js b/assets/js/c5de23c8.2d01af65.js deleted file mode 100644 index 45c9c088ef4..00000000000 --- a/assets/js/c5de23c8.2d01af65.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7963],{10401:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/constraints","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c5de23c8.63d81a92.js b/assets/js/c5de23c8.63d81a92.js new file mode 100644 index 00000000000..b99986f5b2d --- /dev/null +++ b/assets/js/c5de23c8.63d81a92.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77963],{10401:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/constraints","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c5ed658f.10a48c77.js b/assets/js/c5ed658f.10a48c77.js deleted file mode 100644 index 05fda405ef7..00000000000 --- a/assets/js/c5ed658f.10a48c77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3131],{56744:e=>{e.exports=JSON.parse('{"title":"Concepts","keywords":["concepts"],"slug":"/concepts","permalink":"/docs/concepts","navigation":{"previous":{"title":"Migrate to moon","permalink":"/docs/migrate-to-moon"},"next":{"title":"Cache","permalink":"/docs/concepts/cache"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c5ed658f.82641341.js b/assets/js/c5ed658f.82641341.js new file mode 100644 index 00000000000..cd32d914c8f --- /dev/null +++ b/assets/js/c5ed658f.82641341.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23131],{56744:e=>{e.exports=JSON.parse('{"title":"Concepts","keywords":["concepts"],"slug":"/concepts","permalink":"/docs/concepts","navigation":{"previous":{"title":"Migrate to moon","permalink":"/docs/migrate-to-moon"},"next":{"title":"Cache","permalink":"/docs/concepts/cache"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c6200b76.d377e587.js b/assets/js/c6200b76.d377e587.js deleted file mode 100644 index e53a42b612e..00000000000 --- a/assets/js/c6200b76.d377e587.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3643],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},77817:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},i=void 0,s={permalink:"/blog/moon-v1.2",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx",source:"@site/blog/2023-04-17_moon-v1.2.mdx",title:"moon v1.2 - Tag based task inheritance",description:"In this small release, we're improving our task inheritance and performance.",date:"2023-04-17T00:00:00.000Z",formattedDate:"April 17, 2023",tags:[{label:"tags",permalink:"/blog/tags/tags"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},prevItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"},nextItem:{title:"proto v0.6 - Unused cleaning and improved global binaries",permalink:"/blog/proto-v0.6"}},l={image:r(9557).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this small release, we're improving our task inheritance and performance."))}m.isMDXComponent=!0},9557:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.2-bfa019f686325c7aa62d923dce3d92d3.png"}}]); \ No newline at end of file diff --git a/assets/js/c6200b76.ec41862c.js b/assets/js/c6200b76.ec41862c.js new file mode 100644 index 00000000000..0adb46068e5 --- /dev/null +++ b/assets/js/c6200b76.ec41862c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33643],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(l,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},77817:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},i=void 0,s={permalink:"/blog/moon-v1.2",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx",source:"@site/blog/2023-04-17_moon-v1.2.mdx",title:"moon v1.2 - Tag based task inheritance",description:"In this small release, we're improving our task inheritance and performance.",date:"2023-04-17T00:00:00.000Z",formattedDate:"April 17, 2023",tags:[{label:"tags",permalink:"/blog/tags/tags"},{label:"tasks",permalink:"/blog/tags/tasks"}],readingTime:1.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.2",title:"moon v1.2 - Tag based task inheritance",authors:["milesj"],tags:["tags","tasks"],image:"./img/moon/v1.2.png"},prevItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"},nextItem:{title:"proto v0.6 - Unused cleaning and improved global binaries",permalink:"/blog/proto-v0.6"}},l={image:r(9557).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this small release, we're improving our task inheritance and performance."))}m.isMDXComponent=!0},9557:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.2-bfa019f686325c7aa62d923dce3d92d3.png"}}]); \ No newline at end of file diff --git a/assets/js/c67cfbac.11e7de29.js b/assets/js/c67cfbac.11e7de29.js deleted file mode 100644 index 3c1bfb6e7bd..00000000000 --- a/assets/js/c67cfbac.11e7de29.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6732],{85115:s=>{s.exports=JSON.parse('{"label":"solidjs","permalink":"/docs/tags/solidjs","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","permalink":"/docs/guides/examples/solid"}]}')}}]); \ No newline at end of file diff --git a/assets/js/c67cfbac.6220e8c2.js b/assets/js/c67cfbac.6220e8c2.js new file mode 100644 index 00000000000..b55ac9c3400 --- /dev/null +++ b/assets/js/c67cfbac.6220e8c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16732],{85115:s=>{s.exports=JSON.parse('{"label":"solidjs","permalink":"/docs/tags/solidjs","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","permalink":"/docs/guides/examples/solid"}]}')}}]); \ No newline at end of file diff --git a/assets/js/c6c73cac.912d1b85.js b/assets/js/c6c73cac.912d1b85.js new file mode 100644 index 00000000000..961c1ad6220 --- /dev/null +++ b/assets/js/c6c73cac.912d1b85.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93791],{40424:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/shorthand","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c6c73cac.dffb19fb.js b/assets/js/c6c73cac.dffb19fb.js deleted file mode 100644 index 080d8efc017..00000000000 --- a/assets/js/c6c73cac.dffb19fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3791],{40424:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/shorthand","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c7d98fe2.89b445ff.js b/assets/js/c7d98fe2.89b445ff.js deleted file mode 100644 index 36f5cc64b54..00000000000 --- a/assets/js/c7d98fe2.89b445ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1084],{35318:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>h});var n=o(27378);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function l(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},r=Object.keys(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(o),h=a,m=c["".concat(s,".").concat(h)]||c[h]||d[h]||r;return o?n.createElement(m,i(i({ref:t},u),{},{components:o})):n.createElement(m,i({ref:t},u))}));function h(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p<r;p++)i[p]=o[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}c.displayName="MDXCreateElement"},60716:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=o(25773),a=(o(27378),o(35318));const r={title:"FAQ"},i=void 0,l={unversionedId:"proto/faq",id:"proto/faq",title:"FAQ",description:"General",source:"@site/docs/proto/faq.mdx",sourceDirName:"proto",slug:"/proto/faq",permalink:"/docs/proto/faq",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/faq.mdx",tags:[],version:"current",frontMatter:{title:"FAQ"},sidebar:"proto",previous:{title:"use",permalink:"/docs/proto/commands/use"}},s={},p=[{value:"General",id:"general",level:2},{value:"Where did the name "proto" come from?",id:"where-did-the-name-proto-come-from",level:3},{value:"Are you worried about confusion with other tools like protobufs?",id:"are-you-worried-about-confusion-with-other-tools-like-protobufs",level:3},{value:"Will you support more languages?",id:"will-you-support-more-languages",level:3},{value:"Will you support other kinds of tools?",id:"will-you-support-other-kinds-of-tools",level:3},{value:"Will you support "build from source"?",id:"will-you-support-build-from-source",level:3},{value:"How can I install a global package for a language?",id:"how-can-i-install-a-global-package-for-a-language",level:3},{value:"How to run a canary release after installing it?",id:"how-to-run-a-canary-release-after-installing-it",level:3},{value:"OS is unable to find an installed binary, how to resolve?",id:"os-is-unable-to-find-an-installed-binary-how-to-resolve",level:3}],u={toc:p};function d(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"general"},"General"),(0,a.kt)("h3",{id:"where-did-the-name-proto-come-from"},'Where did the name "proto" come from?'),(0,a.kt)("p",null,"We wanted to keep with the space theme, and spent quite some time digging through Wikipedia and\nultimately landed on the page for ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Protostar"},"protostar"),' (this is why\nour logo\'s a star). We really liked the definition of protostar, as it basically means "the\nbeginning phase of a star". Even the the prefix proto means "first" or "earliest form of".'),(0,a.kt)("p",null,"This was great as that's the impression we had in mind for our tool. proto is the first piece\nrequired for setting up your developer environment. The toolchain is the first layer in the\nfoundation."),(0,a.kt)("p",null,"From an aesthetic standpoint, proto's typography works well with moon and moonbase, as most of the\nletters are circle shaped. Double points for proto having two o's like the other products!"),(0,a.kt)("h3",{id:"are-you-worried-about-confusion-with-other-tools-like-protobufs"},"Are you worried about confusion with other tools like protobufs?"),(0,a.kt)("p",null,"Nah."),(0,a.kt)("h3",{id:"will-you-support-more-languages"},"Will you support more languages?"),(0,a.kt)("p",null,"Yes! We'd love to support as many as possible, and if you'd like to help, join our Discord\ncommunity! Feel free to create a ",(0,a.kt)("a",{parentName:"p",href:"./plugins"},"plugin")," in the mean time."),(0,a.kt)("h3",{id:"will-you-support-other-kinds-of-tools"},"Will you support other kinds of tools?"),(0,a.kt)("p",null,"No, we will only support languages, dependency managers, and CLIs, which should be enough. However,\nyou can create a ",(0,a.kt)("a",{parentName:"p",href:"./plugins"},"plugin")," to support other kinds of tools."),(0,a.kt)("h3",{id:"will-you-support-build-from-source"},'Will you support "build from source"?'),(0,a.kt)("p",null,"In the future we have plans to support building from source. For the time being, proto is built\naround pre-built archives for easier portability."),(0,a.kt)("h3",{id:"how-can-i-install-a-global-package-for-a-language"},"How can I install a global package for a language?"),(0,a.kt)("p",null,"You can install a global with the ",(0,a.kt)("a",{parentName:"p",href:"./commands/install-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto install-global"))," command. Most\nlanguages install a global to a shared location regardless of the language's version (Deno is\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.deno/bin"),", Rust is ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),", etc), so globals can also be installed ",(0,a.kt)("em",{parentName:"p"},"outside")," of proto\nusing language specific commands."),(0,a.kt)("p",null,"The exception to this is Node.js (and npm, pnpm, yarn). Each of these tools install global packages\n",(0,a.kt)("em",{parentName:"p"},"differently"),", and some are tied to the parent tools version. So if you install a new language\nversion, you lose your global packages. We suggest using ",(0,a.kt)("inlineCode",{parentName:"p"},"proto install-global")," for all Node.js\npackages, which installs everything to a shared location, ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/node/globals/bin"),". You'll\nalso need to manually add these global directories to your ",(0,a.kt)("inlineCode",{parentName:"p"},"PATH"),"."),(0,a.kt)("p",null,"However, if you'd prefer to use the native non-proto workflow, you can disable the globals intercept\nusing the ",(0,a.kt)("a",{parentName:"p",href:"./config#settings"},(0,a.kt)("inlineCode",{parentName:"a"},"node-intercept-globals")," setting"),"."),(0,a.kt)("h3",{id:"how-to-run-a-canary-release-after-installing-it"},"How to run a canary release after installing it?"),(0,a.kt)("p",null,"Once a tool has been installed with ",(0,a.kt)("inlineCode",{parentName:"p"},"--canary"),", the canary version can be explicitly referenced\nusing our ",(0,a.kt)("a",{parentName:"p",href:"./detection"},"version detection rules"),". The easiest approach is to prefix the shim with an\nenvironment variable:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ PROTO_BUN_VERSION=canary bun ./index.ts\n")),(0,a.kt)("p",null,"Or to explicitly configure the version in ",(0,a.kt)("a",{parentName:"p",href:"./config"},(0,a.kt)("inlineCode",{parentName:"a"},".prototools")),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'bun = "canary"\n')),(0,a.kt)("h3",{id:"os-is-unable-to-find-an-installed-binary-how-to-resolve"},"OS is unable to find an installed binary, how to resolve?"),(0,a.kt)("p",null,"To start, ensure that proto's binaries directory (",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/bin"),") is listed first on ",(0,a.kt)("inlineCode",{parentName:"p"},"PATH"),", and\ntakes precedence over other binaries of the same name that may collide."),(0,a.kt)("p",null,"Secondly, proto is powered entirely through shims, which means on Windows, we do not provide ",(0,a.kt)("inlineCode",{parentName:"p"},".exe"),"\nbinaries, and instead use ",(0,a.kt)("inlineCode",{parentName:"p"},".cmd"),". If you're attempting to run a script that uses a hard-coded binary\nname like ",(0,a.kt)("inlineCode",{parentName:"p"},"node.exe"),", this won't work in proto. You'll need to remove the ",(0,a.kt)("inlineCode",{parentName:"p"},".exe")," and simply run\n",(0,a.kt)("inlineCode",{parentName:"p"},"node")," instead. Windows will use the ",(0,a.kt)("inlineCode",{parentName:"p"},"PATHEXT")," environment variable to find the appropriate\nextension, which includes ",(0,a.kt)("inlineCode",{parentName:"p"},".cmd")," by default."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c7d98fe2.993a0912.js b/assets/js/c7d98fe2.993a0912.js new file mode 100644 index 00000000000..e8bdc8610cb --- /dev/null +++ b/assets/js/c7d98fe2.993a0912.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51084],{35318:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>h});var n=o(27378);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function l(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},r=Object.keys(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(o),h=a,m=c["".concat(s,".").concat(h)]||c[h]||d[h]||r;return o?n.createElement(m,i(i({ref:t},u),{},{components:o})):n.createElement(m,i({ref:t},u))}));function h(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p<r;p++)i[p]=o[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}c.displayName="MDXCreateElement"},60716:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=o(25773),a=(o(27378),o(35318));const r={title:"FAQ"},i=void 0,l={unversionedId:"proto/faq",id:"proto/faq",title:"FAQ",description:"General",source:"@site/docs/proto/faq.mdx",sourceDirName:"proto",slug:"/proto/faq",permalink:"/docs/proto/faq",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/faq.mdx",tags:[],version:"current",frontMatter:{title:"FAQ"},sidebar:"proto",previous:{title:"use",permalink:"/docs/proto/commands/use"}},s={},p=[{value:"General",id:"general",level:2},{value:"Where did the name "proto" come from?",id:"where-did-the-name-proto-come-from",level:3},{value:"Are you worried about confusion with other tools like protobufs?",id:"are-you-worried-about-confusion-with-other-tools-like-protobufs",level:3},{value:"Will you support more languages?",id:"will-you-support-more-languages",level:3},{value:"Will you support other kinds of tools?",id:"will-you-support-other-kinds-of-tools",level:3},{value:"Will you support "build from source"?",id:"will-you-support-build-from-source",level:3},{value:"How can I install a global package for a language?",id:"how-can-i-install-a-global-package-for-a-language",level:3},{value:"How to run a canary release after installing it?",id:"how-to-run-a-canary-release-after-installing-it",level:3},{value:"OS is unable to find an installed binary, how to resolve?",id:"os-is-unable-to-find-an-installed-binary-how-to-resolve",level:3}],u={toc:p};function d(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"general"},"General"),(0,a.kt)("h3",{id:"where-did-the-name-proto-come-from"},'Where did the name "proto" come from?'),(0,a.kt)("p",null,"We wanted to keep with the space theme, and spent quite some time digging through Wikipedia and\nultimately landed on the page for ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Protostar"},"protostar"),' (this is why\nour logo\'s a star). We really liked the definition of protostar, as it basically means "the\nbeginning phase of a star". Even the the prefix proto means "first" or "earliest form of".'),(0,a.kt)("p",null,"This was great as that's the impression we had in mind for our tool. proto is the first piece\nrequired for setting up your developer environment. The toolchain is the first layer in the\nfoundation."),(0,a.kt)("p",null,"From an aesthetic standpoint, proto's typography works well with moon and moonbase, as most of the\nletters are circle shaped. Double points for proto having two o's like the other products!"),(0,a.kt)("h3",{id:"are-you-worried-about-confusion-with-other-tools-like-protobufs"},"Are you worried about confusion with other tools like protobufs?"),(0,a.kt)("p",null,"Nah."),(0,a.kt)("h3",{id:"will-you-support-more-languages"},"Will you support more languages?"),(0,a.kt)("p",null,"Yes! We'd love to support as many as possible, and if you'd like to help, join our Discord\ncommunity! Feel free to create a ",(0,a.kt)("a",{parentName:"p",href:"./plugins"},"plugin")," in the mean time."),(0,a.kt)("h3",{id:"will-you-support-other-kinds-of-tools"},"Will you support other kinds of tools?"),(0,a.kt)("p",null,"No, we will only support languages, dependency managers, and CLIs, which should be enough. However,\nyou can create a ",(0,a.kt)("a",{parentName:"p",href:"./plugins"},"plugin")," to support other kinds of tools."),(0,a.kt)("h3",{id:"will-you-support-build-from-source"},'Will you support "build from source"?'),(0,a.kt)("p",null,"In the future we have plans to support building from source. For the time being, proto is built\naround pre-built archives for easier portability."),(0,a.kt)("h3",{id:"how-can-i-install-a-global-package-for-a-language"},"How can I install a global package for a language?"),(0,a.kt)("p",null,"You can install a global with the ",(0,a.kt)("a",{parentName:"p",href:"./commands/install-global"},(0,a.kt)("inlineCode",{parentName:"a"},"proto install-global"))," command. Most\nlanguages install a global to a shared location regardless of the language's version (Deno is\n",(0,a.kt)("inlineCode",{parentName:"p"},"~/.deno/bin"),", Rust is ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin"),", etc), so globals can also be installed ",(0,a.kt)("em",{parentName:"p"},"outside")," of proto\nusing language specific commands."),(0,a.kt)("p",null,"The exception to this is Node.js (and npm, pnpm, yarn). Each of these tools install global packages\n",(0,a.kt)("em",{parentName:"p"},"differently"),", and some are tied to the parent tools version. So if you install a new language\nversion, you lose your global packages. We suggest using ",(0,a.kt)("inlineCode",{parentName:"p"},"proto install-global")," for all Node.js\npackages, which installs everything to a shared location, ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.proto/tools/node/globals/bin"),". You'll\nalso need to manually add these global directories to your ",(0,a.kt)("inlineCode",{parentName:"p"},"PATH"),"."),(0,a.kt)("p",null,"However, if you'd prefer to use the native non-proto workflow, you can disable the globals intercept\nusing the ",(0,a.kt)("a",{parentName:"p",href:"./config#settings"},(0,a.kt)("inlineCode",{parentName:"a"},"node-intercept-globals")," setting"),"."),(0,a.kt)("h3",{id:"how-to-run-a-canary-release-after-installing-it"},"How to run a canary release after installing it?"),(0,a.kt)("p",null,"Once a tool has been installed with ",(0,a.kt)("inlineCode",{parentName:"p"},"--canary"),", the canary version can be explicitly referenced\nusing our ",(0,a.kt)("a",{parentName:"p",href:"./detection"},"version detection rules"),". The easiest approach is to prefix the shim with an\nenvironment variable:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ PROTO_BUN_VERSION=canary bun ./index.ts\n")),(0,a.kt)("p",null,"Or to explicitly configure the version in ",(0,a.kt)("a",{parentName:"p",href:"./config"},(0,a.kt)("inlineCode",{parentName:"a"},".prototools")),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-toml"},'bun = "canary"\n')),(0,a.kt)("h3",{id:"os-is-unable-to-find-an-installed-binary-how-to-resolve"},"OS is unable to find an installed binary, how to resolve?"),(0,a.kt)("p",null,"To start, ensure that proto's shim and binary directories are listed first on ",(0,a.kt)("inlineCode",{parentName:"p"},"PATH"),", and takes\nprecedence over other binaries of the same name that may collide."),(0,a.kt)("p",null,"Secondly, proto is powered through shims, which means on Windows, we do not provide ",(0,a.kt)("inlineCode",{parentName:"p"},".exe")," binaries\n(for shims), and instead use ",(0,a.kt)("inlineCode",{parentName:"p"},".cmd"),". If you're attempting to run a script that uses a hard-coded\nbinary name like ",(0,a.kt)("inlineCode",{parentName:"p"},"node.exe"),", you'll need to do one of the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Remove the trailing ",(0,a.kt)("inlineCode",{parentName:"li"},".exe")," and simply run ",(0,a.kt)("inlineCode",{parentName:"li"},"node")," instead. Windows will use the ",(0,a.kt)("inlineCode",{parentName:"li"},"PATHEXT"),"\nenvironment variable to find the appropriate extension, which includes ",(0,a.kt)("inlineCode",{parentName:"li"},".cmd")," by default."),(0,a.kt)("li",{parentName:"ul"},"Ensure ",(0,a.kt)("inlineCode",{parentName:"li"},"~/.proto/bin")," is in your ",(0,a.kt)("inlineCode",{parentName:"li"},"PATH"),". If a shim cannot be found, the original binary will be\nused instead.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c83c6fdf.05aafe85.js b/assets/js/c83c6fdf.05aafe85.js deleted file mode 100644 index 43f2c4d9d35..00000000000 --- a/assets/js/c83c6fdf.05aafe85.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4867],{3808:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/owners","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c83c6fdf.41e99a79.js b/assets/js/c83c6fdf.41e99a79.js new file mode 100644 index 00000000000..b58b498c33d --- /dev/null +++ b/assets/js/c83c6fdf.41e99a79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44867],{3808:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/owners","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c8acf440.17b38429.js b/assets/js/c8acf440.17b38429.js new file mode 100644 index 00000000000..1655ba62e1b --- /dev/null +++ b/assets/js/c8acf440.17b38429.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89126],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>u});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),g=p(r),u=o,f=g["".concat(s,".").concat(u)]||g[u]||c[u]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},32508:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.11",title:"proto v0.11 - New shims and better logging",authors:["milesj"],tags:["proto","shim","logging"]},i=void 0,l={permalink:"/blog/proto-v0.11",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-25_proto-v0.11.mdx",source:"@site/blog/2023-06-25_proto-v0.11.mdx",title:"proto v0.11 - New shims and better logging",description:"This is a small release that improves shims and logs.",date:"2023-06-25T00:00:00.000Z",formattedDate:"June 25, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"shim",permalink:"/blog/tags/shim"},{label:"logging",permalink:"/blog/tags/logging"}],readingTime:1.04,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.11",title:"proto v0.11 - New shims and better logging",authors:["milesj"],tags:["proto","shim","logging"]},prevItem:{title:"moon v1.9 - VCS hooks management and improved task inheritance",permalink:"/blog/moon-v1.9"},nextItem:{title:"moon v1.8 - Code owners and shared configuration",permalink:"/blog/moon-v1.8"}},s={authorsImageUrls:[void 0]},p=[],m={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a small release that improves shims and logs."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c8acf440.8a64dcfd.js b/assets/js/c8acf440.8a64dcfd.js deleted file mode 100644 index 9a6655b09ca..00000000000 --- a/assets/js/c8acf440.8a64dcfd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9126],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>u});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),g=p(r),u=o,f=g["".concat(s,".").concat(u)]||g[u]||c[u]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},32508:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.11",title:"proto v0.11 - New shims and better logging",authors:["milesj"],tags:["proto","shim","logging"]},i=void 0,l={permalink:"/blog/proto-v0.11",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-25_proto-v0.11.mdx",source:"@site/blog/2023-06-25_proto-v0.11.mdx",title:"proto v0.11 - New shims and better logging",description:"This is a small release that improves shims and logs.",date:"2023-06-25T00:00:00.000Z",formattedDate:"June 25, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"shim",permalink:"/blog/tags/shim"},{label:"logging",permalink:"/blog/tags/logging"}],readingTime:1.04,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.11",title:"proto v0.11 - New shims and better logging",authors:["milesj"],tags:["proto","shim","logging"]},prevItem:{title:"moon v1.9 - VCS hooks management and improved task inheritance",permalink:"/blog/moon-v1.9"},nextItem:{title:"moon v1.8 - Code owners and shared configuration",permalink:"/blog/moon-v1.8"}},s={authorsImageUrls:[void 0]},p=[],m={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a small release that improves shims and logs."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/caa6a735.311f28fd.js b/assets/js/caa6a735.311f28fd.js new file mode 100644 index 00000000000..09990bd659b --- /dev/null +++ b/assets/js/caa6a735.311f28fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75394],{70851:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/affected","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/caa6a735.e86e456f.js b/assets/js/caa6a735.e86e456f.js deleted file mode 100644 index 42f0c7f808f..00000000000 --- a/assets/js/caa6a735.e86e456f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5394],{70851:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/affected","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/cae36b15.3bf41b72.js b/assets/js/cae36b15.3bf41b72.js deleted file mode 100644 index 02b214f1bf5..00000000000 --- a/assets/js/cae36b15.3bf41b72.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4312],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,f=m["".concat(p,".").concat(d)]||m[d]||s[d]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},19680:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=n(25773),o=(n(27378),n(35318));const a={title:"run"},i=void 0,l={unversionedId:"proto/commands/run",id:"proto/commands/run",title:"run",description:"The proto run (or proto r) command will run a tool after",source:"@site/docs/proto/commands/run.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/run",permalink:"/docs/proto/commands/run",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/run.mdx",tags:[],version:"current",frontMatter:{title:"run"},sidebar:"proto",previous:{title:"remove-plugin",permalink:"/docs/proto/commands/remove-plugin"},next:{title:"setup",permalink:"/docs/proto/commands/setup"}},p={},u=[{value:"Arguments",id:"arguments",level:3}],c={toc:u};function s(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto run <tool>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto r"),") command will run a tool after\n",(0,o.kt)("a",{parentName:"p",href:"../detection"},"detecting a version")," from the environment."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Run and detect version from environment\n$ proto run bun\n\n# Run with explicit version\n$ proto run bun 0.5.3\n\n# Run with version from environment variable\n$ PROTO_BUN_VERSION=0.5.3 proto run bun\n")),(0,o.kt)("p",null,"Arguments can be passed to the underlying tool binary by providing additional arguments after ",(0,o.kt)("inlineCode",{parentName:"p"},"--"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto run bun -- run ./script.ts\n\n# When using the binary on PATH\n$ bun run ./script.ts\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[version]")," - Version of tool. If not provided, will attempt to detect the version from the\nenvironment.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cae36b15.6a78e9d8.js b/assets/js/cae36b15.6a78e9d8.js new file mode 100644 index 00000000000..06e1ca7ae09 --- /dev/null +++ b/assets/js/cae36b15.6a78e9d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94312],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,f=m["".concat(p,".").concat(d)]||m[d]||s[d]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u<a;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},19680:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=n(25773),o=(n(27378),n(35318));const a={title:"run"},i=void 0,l={unversionedId:"proto/commands/run",id:"proto/commands/run",title:"run",description:"The proto run (or proto r) command will run a tool after",source:"@site/docs/proto/commands/run.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/run",permalink:"/docs/proto/commands/run",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/run.mdx",tags:[],version:"current",frontMatter:{title:"run"},sidebar:"proto",previous:{title:"remove-plugin",permalink:"/docs/proto/commands/remove-plugin"},next:{title:"setup",permalink:"/docs/proto/commands/setup"}},p={},u=[{value:"Arguments",id:"arguments",level:3}],c={toc:u};function s(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto run <tool>")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"proto r"),") command will run a tool after\n",(0,o.kt)("a",{parentName:"p",href:"../detection"},"detecting a version")," from the environment."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Run and detect version from environment\n$ proto run bun\n\n# Run with explicit version\n$ proto run bun 0.5.3\n\n# Run with version from environment variable\n$ PROTO_BUN_VERSION=0.5.3 proto run bun\n")),(0,o.kt)("p",null,"Arguments can be passed to the underlying tool binary by providing additional arguments after ",(0,o.kt)("inlineCode",{parentName:"p"},"--"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto run bun -- run ./script.ts\n\n# When using the binary on PATH\n$ bun run ./script.ts\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[version]")," - Version of tool. If not provided, will attempt to detect the version from the\nenvironment.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.b217df49.js b/assets/js/ccc49370.b217df49.js deleted file mode 100644 index d73e833533e..00000000000 --- a/assets/js/ccc49370.b217df49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6103],{83227:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(27378),l=n(37140),r=n(1123),o=n(75484),i=n(70412),c=n(55228),s=n(25532),m=n(25773),d=n(99213),u=n(44022);function f(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function g(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(17061);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:g,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.default,{toc:r,minHeadingLevel:g,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(f,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(g,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},17061:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(25773),l=n(27378),r=n(37140),o=n(17148);const i="tableOfContents_XG6w";function c(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},17148:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(25773),l=n(27378),r=n(20624),o=n(86934),i=n(81344);function c(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(c,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const s=l.memo(c);function m(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:m,minHeadingLevel:d,maxHeadingLevel:u,...f}=e;const g=(0,r.L)(),v=d??g.tableOfContents.minHeadingLevel,p=u??g.tableOfContents.maxHeadingLevel,h=(0,o.b)({toc:t,minHeadingLevel:v,maxHeadingLevel:p}),b=(0,l.useMemo)((()=>{if(c&&m)return{linkClassName:c,linkActiveClassName:m,minHeadingLevel:v,maxHeadingLevel:p}}),[c,m,v,p]);return(0,i.S)(b),l.createElement(s,(0,a.Z)({toc:h,className:n,linkClassName:c},f))}},81344:(e,t,n)=>{n.d(t,{S:()=>c});var a=n(27378),l=n(20624);function r(e){const t=e.getBoundingClientRect();return t.top===t.bottom?r(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>r(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(r(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function i(){const e=(0,a.useRef)(0),{navbar:{hideOnScroll:t}}=(0,l.L)();return(0,a.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function c(e){const t=(0,a.useRef)(void 0),n=i();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),c=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:i}),s=o(c,{anchorTopOffset:n.current}),m=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}},86934:(e,t,n)=>{n.d(t,{a:()=>r,b:()=>i});var a=n(27378);function l(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function r(e){return(0,a.useMemo)((()=>l(e)),[e])}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,a.useMemo)((()=>o({toc:l(t),minHeadingLevel:n,maxHeadingLevel:r})),[t,n,r])}},44022:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),l=n(40624),r=n(83469),o=n(31792),i=n(90728);function c(e){let{permalink:t,title:n,isNext:c}=e;return a.createElement("div",{className:(0,l.Z)("flex-1",c?"text-right":"text-left")},a.createElement(i.Z,{weight:"bold",to:t},!c&&a.createElement(o.Z,{className:"mr-1 icon-previous",icon:r.A35}),n,c&&a.createElement(o.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.bcbd185b.js b/assets/js/ccc49370.bcbd185b.js new file mode 100644 index 00000000000..c32518b3bb4 --- /dev/null +++ b/assets/js/ccc49370.bcbd185b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46103],{83227:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(27378),l=n(37140),r=n(1123),o=n(75484),i=n(70412),c=n(55228),s=n(25532),m=n(25773),d=n(99213),u=n(44022);function f(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function g(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(17061);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:g,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.default,{toc:r,minHeadingLevel:g,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(f,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(g,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},17061:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(25773),l=n(27378),r=n(37140),o=n(17148);const i="tableOfContents_XG6w";function c(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},17148:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(25773),l=n(27378),r=n(20624),o=n(86934),i=n(81344);function c(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(c,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const s=l.memo(c);function m(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:m,minHeadingLevel:d,maxHeadingLevel:u,...f}=e;const g=(0,r.L)(),v=d??g.tableOfContents.minHeadingLevel,p=u??g.tableOfContents.maxHeadingLevel,h=(0,o.b)({toc:t,minHeadingLevel:v,maxHeadingLevel:p}),b=(0,l.useMemo)((()=>{if(c&&m)return{linkClassName:c,linkActiveClassName:m,minHeadingLevel:v,maxHeadingLevel:p}}),[c,m,v,p]);return(0,i.S)(b),l.createElement(s,(0,a.Z)({toc:h,className:n,linkClassName:c},f))}},81344:(e,t,n)=>{n.d(t,{S:()=>c});var a=n(27378),l=n(20624);function r(e){const t=e.getBoundingClientRect();return t.top===t.bottom?r(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>r(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(r(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function i(){const e=(0,a.useRef)(0),{navbar:{hideOnScroll:t}}=(0,l.L)();return(0,a.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function c(e){const t=(0,a.useRef)(void 0),n=i();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),c=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:i}),s=o(c,{anchorTopOffset:n.current}),m=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}},86934:(e,t,n)=>{n.d(t,{a:()=>r,b:()=>i});var a=n(27378);function l(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function r(e){return(0,a.useMemo)((()=>l(e)),[e])}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,a.useMemo)((()=>o({toc:l(t),minHeadingLevel:n,maxHeadingLevel:r})),[t,n,r])}},44022:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(27378),l=n(40624),r=n(83469),o=n(31792),i=n(90728);function c(e){let{permalink:t,title:n,isNext:c}=e;return a.createElement("div",{className:(0,l.Z)("flex-1",c?"text-right":"text-left")},a.createElement(i.Z,{weight:"bold",to:t},!c&&a.createElement(o.Z,{className:"mr-1 icon-previous",icon:r.A35}),n,c&&a.createElement(o.Z,{className:"ml-1 icon-next",icon:r._tD})))}}}]); \ No newline at end of file diff --git a/assets/js/cce51cf2.395d4f10.js b/assets/js/cce51cf2.395d4f10.js new file mode 100644 index 00000000000..33ed2766abd --- /dev/null +++ b/assets/js/cce51cf2.395d4f10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16447],{42932:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/go","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/cce51cf2.737cc852.js b/assets/js/cce51cf2.737cc852.js deleted file mode 100644 index dc3e2bcf358..00000000000 --- a/assets/js/cce51cf2.737cc852.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6447],{42932:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/go","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ccfb5782.9a192da0.js b/assets/js/ccfb5782.9a192da0.js new file mode 100644 index 00000000000..07309d0cf9e --- /dev/null +++ b/assets/js/ccfb5782.9a192da0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63450],{90384:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/alias","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ccfb5782.a69cecc1.js b/assets/js/ccfb5782.a69cecc1.js deleted file mode 100644 index ba224b37749..00000000000 --- a/assets/js/ccfb5782.a69cecc1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3450],{90384:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/alias","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/cd988af7.a97df8c3.js b/assets/js/cd988af7.a97df8c3.js new file mode 100644 index 00000000000..cab81404f21 --- /dev/null +++ b/assets/js/cd988af7.a97df8c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31737],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,y=m["".concat(i,".").concat(g)]||m[g]||u[g]||a;return r?n.createElement(y,l(l({ref:t},c),{},{components:r})):n.createElement(y,l({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p.mdxType="string"==typeof e?e:o,l[1]=p;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},6040:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},l=void 0,p={permalink:"/blog/proto-v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx",source:"@site/blog/2023-09-11_proto-v0.17.mdx",title:"proto v0.17 - Experimental Python support and canary releases",description:"This release implements two long requested features, Python language support and canary releases.",date:"2023-09-11T00:00:00.000Z",formattedDate:"September 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"tool",permalink:"/blog/tags/tool"},{label:"canary",permalink:"/blog/tags/canary"},{label:"python",permalink:"/blog/tags/python"}],readingTime:2.39,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},prevItem:{title:"proto v0.18 - List installed tools and configure HTTP client",permalink:"/blog/proto-v0.18"},nextItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"}},i={image:r(72679).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release implements two long requested features, Python language support and canary releases."))}u.isMDXComponent=!0},72679:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.17-c6f866913e8dd547a862c49630b6a96b.png"}}]); \ No newline at end of file diff --git a/assets/js/cd988af7.d755ed7f.js b/assets/js/cd988af7.d755ed7f.js deleted file mode 100644 index 931135ede0e..00000000000 --- a/assets/js/cd988af7.d755ed7f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1737],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,y=m["".concat(i,".").concat(g)]||m[g]||u[g]||a;return r?n.createElement(y,l(l({ref:t},c),{},{components:r})):n.createElement(y,l({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p.mdxType="string"==typeof e?e:o,l[1]=p;for(var s=2;s<a;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},6040:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},l=void 0,p={permalink:"/blog/proto-v0.17",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx",source:"@site/blog/2023-09-11_proto-v0.17.mdx",title:"proto v0.17 - Experimental Python support and canary releases",description:"This release implements two long requested features, Python language support and canary releases.",date:"2023-09-11T00:00:00.000Z",formattedDate:"September 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"tool",permalink:"/blog/tags/tool"},{label:"canary",permalink:"/blog/tags/canary"},{label:"python",permalink:"/blog/tags/python"}],readingTime:2.39,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.17",title:"proto v0.17 - Experimental Python support and canary releases",authors:["milesj"],tags:["proto","plugin","tool","canary","python"],image:"./img/proto/v0.17.png"},prevItem:{title:"proto v0.18 - List installed tools and configure HTTP client",permalink:"/blog/proto-v0.18"},nextItem:{title:"moon v1.13 - Toolchain now uses WASM plugins",permalink:"/blog/moon-v1.13"}},i={image:r(72679).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release implements two long requested features, Python language support and canary releases."))}u.isMDXComponent=!0},72679:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.17-c6f866913e8dd547a862c49630b6a96b.png"}}]); \ No newline at end of file diff --git a/assets/js/cdad2d50.119b23fa.js b/assets/js/cdad2d50.119b23fa.js new file mode 100644 index 00000000000..78717eed007 --- /dev/null +++ b/assets/js/cdad2d50.119b23fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18509],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>u});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),g=p(r),u=a,f=g["".concat(s,".").concat(u)]||g[u]||m[u]||i;return r?n.createElement(f,o(o({ref:t},c),{},{components:r})):n.createElement(f,o({ref:t},c))}));function u(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=r[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:i,align:o="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:o}},n.createElement("img",{src:t.default,width:r,alt:a,title:i,className:"inline-block"}))}},9619:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(40624),i=r(31792);const o={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:r,text:l,variant:s}=e;return n.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?o[s]:"bg-gray-100 text-gray-800",t)},r&&n.createElement(i.Z,{icon:r,className:"mr-1"}),l)}},12030:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=r(25773),a=(r(27378),r(35318));r(9619),r(88109);const i={slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},o=void 0,l={permalink:"/blog/v0.22",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx",source:"@site/blog/2023-01-16_v0.22.mdx",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",description:"It's the first release of the year, and with this release, we're landing some quality of life",date:"2023-01-16T00:00:00.000Z",formattedDate:"January 16, 2023",tags:[{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"migrate",permalink:"/blog/tags/migrate"}],readingTime:2.805,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},prevItem:{title:"moon v0.23 - Scoped task inheritance, and project config updates",permalink:"/blog/v0.23"},nextItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"}},s={image:r(288).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"It's the first release of the year, and with this release, we're landing some quality of life\ninfrastructure and workflow improvements!"))}m.isMDXComponent=!0},288:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.22-6d47d46b82e88207cd599d1bd3974022.png"}}]); \ No newline at end of file diff --git a/assets/js/cdad2d50.cc2a7b32.js b/assets/js/cdad2d50.cc2a7b32.js deleted file mode 100644 index f87c94463be..00000000000 --- a/assets/js/cdad2d50.cc2a7b32.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8509],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>u});var n=r(27378);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),g=p(r),u=a,f=g["".concat(s,".").concat(u)]||g[u]||m[u]||i;return r?n.createElement(f,o(o({ref:t},c),{},{components:r})):n.createElement(f,o({ref:t},c))}));function u(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p<i;p++)o[p]=r[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(27378);function a(e){let{src:t,width:r="90%",alt:a="",title:i,align:o="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:o}},n.createElement("img",{src:t.default,width:r,alt:a,title:i,className:"inline-block"}))}},9619:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(27378),a=r(40624),i=r(31792);const o={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:r,text:l,variant:s}=e;return n.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?o[s]:"bg-gray-100 text-gray-800",t)},r&&n.createElement(i.Z,{icon:r,className:"mr-1"}),l)}},12030:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=r(25773),a=(r(27378),r(35318));r(9619),r(88109);const i={slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},o=void 0,l={permalink:"/blog/v0.22",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx",source:"@site/blog/2023-01-16_v0.22.mdx",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",description:"It's the first release of the year, and with this release, we're landing some quality of life",date:"2023-01-16T00:00:00.000Z",formattedDate:"January 16, 2023",tags:[{label:"graph",permalink:"/blog/tags/graph"},{label:"pipeline",permalink:"/blog/tags/pipeline"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"migrate",permalink:"/blog/tags/migrate"}],readingTime:2.805,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.22",title:"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration",authors:["milesj"],tags:["graph","pipeline","hasher","migrate"],image:"./img/v0.22.png"},prevItem:{title:"moon v0.23 - Scoped task inheritance, and project config updates",permalink:"/blog/v0.23"},nextItem:{title:"What's in store for 2023",permalink:"/blog/2023-roadmap"}},s={image:r(288).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"It's the first release of the year, and with this release, we're landing some quality of life\ninfrastructure and workflow improvements!"))}m.isMDXComponent=!0},288:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.22-6d47d46b82e88207cd599d1bd3974022.png"}}]); \ No newline at end of file diff --git a/assets/js/cfdf2b5f.341c4a8c.js b/assets/js/cfdf2b5f.341c4a8c.js new file mode 100644 index 00000000000..4602f20c89f --- /dev/null +++ b/assets/js/cfdf2b5f.341c4a8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5016],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),b=o,g=u["".concat(s,".").concat(b)]||u[b]||m[b]||a;return r?n.createElement(g,i(i({ref:t},p),{},{components:r})):n.createElement(g,i({ref:t},p))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},29988:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.20",title:"proto v0.20 - New shims and binaries management",authors:["milesj"],tags:["proto","bin","shim","checksum"]},i=void 0,l={permalink:"/blog/proto-v0.20",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-20_proto-v0.20.mdx",source:"@site/blog/2023-10-20_proto-v0.20.mdx",title:"proto v0.20 - New shims and binaries management",description:"In this release, we're reworking how shims and binaries work.",date:"2023-10-20T00:00:00.000Z",formattedDate:"October 20, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"bin",permalink:"/blog/tags/bin"},{label:"shim",permalink:"/blog/tags/shim"},{label:"checksum",permalink:"/blog/tags/checksum"}],readingTime:2.91,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.20",title:"proto v0.20 - New shims and binaries management",authors:["milesj"],tags:["proto","bin","shim","checksum"]},nextItem:{title:"moon v1.15 - Next-generation action graph",permalink:"/blog/moon-v1.15"}},s={authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're reworking how shims and binaries work."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d43cc2ec.1e45388c.js b/assets/js/d43cc2ec.1e45388c.js deleted file mode 100644 index 4223cbb871b..00000000000 --- a/assets/js/d43cc2ec.1e45388c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3871],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(p,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},13901:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},i=void 0,l={permalink:"/blog/proto-v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx",source:"@site/blog/2023-08-11_proto-v0.14.mdx",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",description:"With this release, we've finished our migration to a WASM based plugin architecture.",date:"2023-08-11T00:00:00.000Z",formattedDate:"August 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"},nextItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've finished our migration to a WASM based plugin architecture."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d43cc2ec.d6514e1d.js b/assets/js/d43cc2ec.d6514e1d.js new file mode 100644 index 00000000000..533fcf03f7e --- /dev/null +++ b/assets/js/d43cc2ec.d6514e1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43871],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(r),g=o,f=m["".concat(p,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},13901:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},i=void 0,l={permalink:"/blog/proto-v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx",source:"@site/blog/2023-08-11_proto-v0.14.mdx",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",description:"With this release, we've finished our migration to a WASM based plugin architecture.",date:"2023-08-11T00:00:00.000Z",formattedDate:"August 11, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:2,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.14",title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"},nextItem:{title:"moon v1.11 - Next-generation project graph",permalink:"/blog/moon-v1.11"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've finished our migration to a WASM based plugin architecture."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4c755e6.0b026baf.js b/assets/js/d4c755e6.0b026baf.js deleted file mode 100644 index 1df642c32dd..00000000000 --- a/assets/js/d4c755e6.0b026baf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7387],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(27378);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(n),d=l,f=m["".concat(p,".").concat(d)]||m[d]||c[d]||o;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function d(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,a=new Array(o);a[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:l,a[1]=i;for(var s=2;s<o;s++)a[s]=n[s];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},72287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(25773),l=(n(27378),n(35318));const o={title:"setup"},a=void 0,i={unversionedId:"proto/commands/setup",id:"proto/commands/setup",title:"setup",description:"The proto setup command will setup proto in your current shell by modifying an applicable profile",source:"@site/docs/proto/commands/setup.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/setup",permalink:"/docs/proto/commands/setup",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/setup.mdx",tags:[],version:"current",frontMatter:{title:"setup"},sidebar:"proto",previous:{title:"run",permalink:"/docs/proto/commands/run"},next:{title:"tools",permalink:"/docs/proto/commands/tools"}},p={},s=[{value:"Options",id:"options",level:3}],u={toc:s};function c(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"The ",(0,l.kt)("inlineCode",{parentName:"p"},"proto setup")," command will setup proto in your current shell by modifying an applicable profile\nfile and appending proto's bin directory to ",(0,l.kt)("inlineCode",{parentName:"p"},"PATH"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto setup\n")),(0,l.kt)("p",null,"During setup, the following profiles will be searched:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"All shells",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.profile")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"PROFILE")," environment variable"))),(0,l.kt)("li",{parentName:"ul"},"Bash",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.bash_profile")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.bashrc")))),(0,l.kt)("li",{parentName:"ul"},"Elvish",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.elvish/rc.elv")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.config/elvish/rc.elv")))),(0,l.kt)("li",{parentName:"ul"},"Fish",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.config/fish/config.fish")))),(0,l.kt)("li",{parentName:"ul"},"PowerShell",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Will execute the ",(0,l.kt)("inlineCode",{parentName:"li"},"setx")," command to modify ",(0,l.kt)("inlineCode",{parentName:"li"},"PATH")))),(0,l.kt)("li",{parentName:"ul"},"Zsh",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.zprofile")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.zshrc"))))),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"--shell"),' - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or\n"zsh".')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4c755e6.b5bd0b0c.js b/assets/js/d4c755e6.b5bd0b0c.js new file mode 100644 index 00000000000..889f4c6a00e --- /dev/null +++ b/assets/js/d4c755e6.b5bd0b0c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87387],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(27378);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(n),d=l,f=m["".concat(p,".").concat(d)]||m[d]||c[d]||o;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function d(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,a=new Array(o);a[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:l,a[1]=i;for(var s=2;s<o;s++)a[s]=n[s];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},72287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(25773),l=(n(27378),n(35318));const o={title:"setup"},a=void 0,i={unversionedId:"proto/commands/setup",id:"proto/commands/setup",title:"setup",description:"The proto setup command will setup proto in your current shell by modifying an applicable profile",source:"@site/docs/proto/commands/setup.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/setup",permalink:"/docs/proto/commands/setup",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/setup.mdx",tags:[],version:"current",frontMatter:{title:"setup"},sidebar:"proto",previous:{title:"run",permalink:"/docs/proto/commands/run"},next:{title:"tools",permalink:"/docs/proto/commands/tools"}},p={},s=[{value:"Options",id:"options",level:3}],u={toc:s};function c(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"The ",(0,l.kt)("inlineCode",{parentName:"p"},"proto setup")," command will setup proto in your current shell by modifying an applicable profile\nfile and appending proto's bin directory to ",(0,l.kt)("inlineCode",{parentName:"p"},"PATH"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto setup\n")),(0,l.kt)("p",null,"During setup, the following profiles will be searched:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"All shells",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.profile")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"PROFILE")," environment variable"))),(0,l.kt)("li",{parentName:"ul"},"Bash",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.bash_profile")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.bashrc")))),(0,l.kt)("li",{parentName:"ul"},"Elvish",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.elvish/rc.elv")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.config/elvish/rc.elv")))),(0,l.kt)("li",{parentName:"ul"},"Fish",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.config/fish/config.fish")))),(0,l.kt)("li",{parentName:"ul"},"PowerShell",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Will execute the ",(0,l.kt)("inlineCode",{parentName:"li"},"setx")," command to modify ",(0,l.kt)("inlineCode",{parentName:"li"},"PATH")))),(0,l.kt)("li",{parentName:"ul"},"Zsh",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.zprofile")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"~/.zshrc"))))),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"--shell"),' - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or\n"zsh".')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d5875de2.211d6286.js b/assets/js/d5875de2.211d6286.js deleted file mode 100644 index 7fc98265106..00000000000 --- a/assets/js/d5875de2.211d6286.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8941],{72311:e=>{e.exports=JSON.parse('{"label":"affected","permalink":"/blog/tags/affected","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/d5875de2.db46bb4e.js b/assets/js/d5875de2.db46bb4e.js new file mode 100644 index 00000000000..2c220a203b2 --- /dev/null +++ b/assets/js/d5875de2.db46bb4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58941],{72311:e=>{e.exports=JSON.parse('{"label":"affected","permalink":"/blog/tags/affected","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/d7cb860d.0d2a6bf0.js b/assets/js/d7cb860d.0d2a6bf0.js deleted file mode 100644 index 25b0fdedadf..00000000000 --- a/assets/js/d7cb860d.0d2a6bf0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5048],{59220:(A,C,I)=>{I.d(C,{Z:()=>U});var g=I(27378),e=I(9619);function U(A){let{className:C,status:I}=A;switch(I){case"experimental":return g.createElement(e.Z,{className:C,text:"Experimental",variant:"failure"});case"in-development":return g.createElement(e.Z,{className:C,text:"In development",variant:"success"});case"coming-soon":return g.createElement(e.Z,{className:C,text:"Coming soon",variant:"warning"});case"new":return g.createElement(e.Z,{className:C,text:"New",variant:"info"});default:return null}}},33453:(A,C,I)=>{I.d(C,{Z:()=>F});var g=I(27378),e=I(40624),U=I(81884);function F(A){let{children:C,href:I,color:F}=A;return g.createElement(U.default,{href:I,className:(0,e.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",F??"bg-purple-600")},C)}},75969:(A,C,I)=>{I.d(C,{Z:()=>E});var g=I(27378),e=I(40624),U=I(31792),F=I(9187),Q=I(30658),l=I(59220);const B={1:"from-purple-600 to-blurple-600",2:"from-pink-400 to-red-400",3:"from-teal-400 to-slate-100",4:"from-yellow-300 to-green-600"},V={1:"text-blurple-300",2:"text-pink-500",3:"text-teal-600",4:"text-green-600"};function E(A){let{header:C,description:I,features:E,reversed:t,tier:Z}=A;return g.createElement("div",null,g.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},g.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},g.createElement("div",{className:(0,e.Z)("md:flex items-center justify-between",t&&"flex-row-reverse")},g.createElement("aside",{className:(0,e.Z)("md:w-1/3 mx-2 md:mx-0 p-2 sm:p-3 md:p-4 drop-shadow z-0 rounded-t-lg text-center",t?"md:rounded-tl-none md:rounded-tr-lg md:rounded-bl-none md:rounded-br-lg bg-gradient-to-bl md:pl-0 md:text-left":"md:rounded-tl-lg md:rounded-tr-none md:rounded-bl-lg md:rounded-br-none bg-gradient-to-br md:pr-0 md:text-right",B[Z])},g.createElement("h2",{className:(0,e.Z)("m-0 px-1 py-0.5 inline-block text-base font-semibold uppercase tracking-wider text-white bg-black/20 rounded",t?"md:rounded-tl-none md:rounded-bl-none md:pl-4":"md:rounded-tr-none md:rounded-br-none md:pr-4")},C),g.createElement(F.Z,{className:(0,e.Z)("mt-2 text-white",t?"md:ml-4":"md:mr-4"),level:2},I)),g.createElement("section",{className:"md:w-2/3 bg-white rounded-lg p-2 md:p-3 lg:p-4 drop-shadow z-10"},g.createElement("ul",{className:"m-0 p-0 list-none grid grid-cols-1 sm:grid-cols-2 gap-2 md:gap-3 lg:gap-4"},E.map((A=>g.createElement("li",{key:A.title,className:"flex"},g.createElement("div",{className:"pt-1 w-9 shrink-0 grow-0"},g.createElement(U.Z,{icon:A.icon,className:(0,e.Z)("text-5xl justify-center flex",V[Z]),style:{maxWidth:54}})),g.createElement("div",{className:"ml-1"},g.createElement(F.Z,{level:4,className:"text-gray-900"},A.title),A.status&&g.createElement("p",{className:"m-0"},g.createElement(l.Z,{status:A.status})),g.createElement(Q.ZP,{className:"mt-1 mb-0",variant:"muted"},A.description)))))))))))}},81271:(A,C,I)=>{I.d(C,{Z:()=>e});var g=I(27378);function e(A){let{icon:C,text:I}=A;return g.createElement("h1",{className:"text-white flex justify-center md:justify-start items-stretch gap-3",style:{height:85}},g.createElement("div",{className:"relative"},C),g.createElement("div",{className:"relative"},I))}},94141:(A,C,I)=>{I.d(C,{Z:()=>e});var g=I(27378);function e(){return g.createElement(g.Fragment,null,g.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1"},g.createElement("img",{src:"/img/home/org.png",alt:"moonbase - organization view",className:"block"})),g.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1 absolute bottom-0 right-0 z-10 hidden sm:block"},g.createElement("img",{src:"/img/home/repo.png",alt:"moonbase - repository view",className:"block"})))}},10052:(A,C,I)=>{I.r(C),I.d(C,{default:()=>J});var g,e,U,F,Q,l,B,V,E=I(27378),t=I(21947),Z=I(75969);function d(){return d=Object.assign?Object.assign.bind():function(A){for(var C=1;C<arguments.length;C++){var I=arguments[C];for(var g in I)Object.prototype.hasOwnProperty.call(I,g)&&(A[g]=I[g])}return A},d.apply(this,arguments)}const a=A=>{let{title:C,titleId:I,...t}=A;return E.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 83 85",role:"img","aria-labelledby":I},t),C?E.createElement("title",{id:I},C):null,E.createElement("mask",{id:"a",width:74,height:74,x:0,y:11,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},g||(g=E.createElement("path",{fill:"#fff",d:"M36.67 84.49c20.252 0 36.67-16.418 36.67-36.67 0-20.252-16.418-36.67-36.67-36.67C16.418 11.15 0 27.568 0 47.82c0 20.252 16.418 36.67 36.67 36.67Z"}))),E.createElement("g",{mask:"url(#a)"},E.createElement("mask",{id:"b",width:84,height:84,x:-5,y:6,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},e||(e=E.createElement("path",{fill:"#fff",d:"M-5 6.15h83.35V89.5H-5V6.15Z"}))),U||(U=E.createElement("g",{mask:"url(#b)"},E.createElement("path",{fill:"url(#c)",d:"M-5.15 6.1h83.52v83.52H-5.15z"})))),F||(F=E.createElement("path",{fill:"#5341D6",d:"M68.2 39.62V26.43c0-1.55-.83-2.98-2.17-3.76l-11.43-6.6c-1.34-.77-3-.77-4.34 0l-11.43 6.6a4.342 4.342 0 0 0-2.17 3.76v13.19c0 1.55.83 2.98 2.17 3.76l11.43 6.6c1.34.77 3 .77 4.34 0l11.43-6.6a4.355 4.355 0 0 0 2.17-3.76Z"})),E.createElement("mask",{id:"d",width:32,height:36,x:51,y:0,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},Q||(Q=E.createElement("path",{fill:"#fff",d:"M82.6 24.81V11.62c0-1.55-.83-2.98-2.17-3.76L69 1.26c-1.34-.77-3-.77-4.34 0l-11.43 6.6a4.342 4.342 0 0 0-2.17 3.76v13.19c0 1.55.83 2.98 2.17 3.76l11.43 6.6c1.34.77 3 .77 4.34 0l11.43-6.6a4.335 4.335 0 0 0 2.17-3.76Z"}))),E.createElement("g",{mask:"url(#d)"},E.createElement("mask",{id:"e",width:42,height:46,x:46,y:-5,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},l||(l=E.createElement("path",{fill:"#fff",d:"M46.08-4.32h41.53v45.06H46.08V-4.32Z"}))),B||(B=E.createElement("g",{mask:"url(#e)"},E.createElement("path",{fill:"url(#f)",d:"M45.73-4.46h42.24v45.6H45.73z"})))),V||(V=E.createElement("defs",null,E.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},E.createElement("use",{xlinkHref:"#g",transform:"scale(.00575 .00578)"})),E.createElement("pattern",{id:"f",width:1,height:1,patternContentUnits:"objectBoundingBox"},E.createElement("use",{xlinkHref:"#h",transform:"scale(.0115 .01053)"})),E.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E6smh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gSWNvbjwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1NDoyOS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjU0OjI5WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTQ6MjktMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD40NDwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFDd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FQVk9Lb2UrMUxUN0NMMXI2Nml0WXV6eiYjeEE7T3NhL2V4R1dZOE04aHFJTWo1YnFsOEhuTHluUElJNHRZczJrUDJWOVpBVDhxbk1pWForb2lMTUpmSXFsbXVlY0pZbmVDd1VBb1NHbiYjeEE7WVZyVCtVZFB2eVdEU2c3eWRGcU8xanhHT1BwMVcrWHZPLzF5OGkwKytqQW5sSldLZFBza2dWb3k5dm95elVhRGhpWng1QjJPbDFFcCYjeEE7ajFjMlc1clhNZGlyc1ZkaXJzVlVieStzcktFelhseEZiUWpyTE02eHIvd1RFREo0OFVwbW9naytTcFpGNTA4b3l5Q09QV2JNdTNRRyYjeEE7WkJYN3ptVExzN1VBV1lTK1JWQWE1NXZNRFBCWUJXWmRqY0doWC9ZanY4OE9IUzM5VHBkVjJyVXpDQTNITW9YUXZQVFRYY05qcUNBeSYjeEE7VE9JNHAwMitKalJReSs1N2pMOC9aOVJNbzlITTBtcGxNZXBtV2F0em5ZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcW9YMSYjeEE7L1kyRnJKZDM5ekZhV3NRckxjVHVzY2FqeFozSVVZcXhWZnpsL0tacHZSSG5EU09mTGpYNjdCeHIvcjh1UDAxeFY1aCtkdjhBemxMWSYjeEE7K1VidDlBOHB3dzZyclBwSkpKcUx1SHM0Uk1nZE9Jak5aWDRNRzZoUlVkZHhpckJQeXovNXpIMXlDK1N4OCsyNlgxalBJQitsYlZGaCYjeEE7bWdER2xYaVdpU0l2WDRhTVA4cnBpcjZRL01QenZGNVcwa1BFRmsxSzZKU3poYm9LZmFrWWZ5clg2VG0wN0s3T09weVVkb1I1L3FWOCYjeEE7K2Fwck9vNnJlUGVhamNQYzNEOVhjMW9QQlIwVWV3enZzT0NHS1BEQVVFcEZxT29USklZWWp4b0JWdSsvaGtwRmlTOWUwclZyUyswYSYjeEE7Mmx0cFJJb2lSWG9RU3JCUlZXSFlqT1JuZ2xISVFSMWVVR21sSEtiNzB4OHBXdDVkZVpyT1NHSm5pZ2ZuTklBZUtnQTlUNzlzbnJKUiYjeEE7amdrQ2R6eWVrMHVNQ0wxek9XY2gyS3V4VjJLc2M4OStjYmJ5dm9yWGJBU1hreE1kbEFlalBTdkp1L0ZlcCs3dm13N04wQjFPVGg1UiYjeEE7SE1xK2Q5YTh3YXJyTjQxNXFWeTF4TTFhY2o4S2cvc29vMlVld3owRFQ2Ykhoand3RkJLUTZqcUVzVENLTFlrVkxkOS9ETFpGaVM5ViYjeEE7OHRhdGFYZmx5eDlDVVNQQmJ4eFRMWDRsZEVDdHlIWHFNNVBVWUpSelNzY3lTOHRsMDBobWxZNXlKK2FZK1g3YTh2UE1WajlYamFSWSYjeEE7YmlLV1pnTmxSSERFc2Uyd3lXb2xHR0dWbm1DOUJwTVlBZXg1eWpsT3hWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLc2EvTWJ6NSYjeEE7cFBrWHloZmVaTlRxOFZxb1dDM1VnUE5PNTR4eExYK1p1cDdDcDdZcS9Qejh3L3pRODRlZnRXYlVQTUY2MGtZWW0xc0l5VnRyZFQreiYjeEE7RkhXblRxeHF4N25GV2EvODQ0L2t0cG41bDZ6cWNtc1hVa0drYUlzRFhGdkJSWlozdVRKd1FPUVFxMGhia2V2U25pRlVQL3praitXeiYjeEE7K1R2ekN1bTAzU0RwL2xXNmp0djBSSkdybUQ5M2JSeHlwNmpWL2VlcWpNd0xjalhrZXVLdk9mTG5sclhQTW1zVytrYUpaeTMyb1hMQiYjeEE7VWhpVXRRRWdGM29EeFJhL0V4MkhmRlgxeCtkZXF5VCtlcDdWbVBDeGhoaVJldzVvSmoveWN6dSt3TVlqcGdmNXhKL1IraExBVGNqeCYjeEE7emRxZ2J4R2VReURjRUN2dFRJRmpJTjZiY2FqYnplcFpTdkE1MloxSkFwNEh4eUVzWWxzUmJXWUNYTjlRL2xEZlMzbmtlMGVYNHBJNSYjeEE7Sm8yZWxDMUhKQlB2UTB6aHUzTVlocVRYS2g5emJWTXp6VUs3RlhZcTdGWGdmNThhckpKNXN0N0lzZlN0TFZTcWRnOHJNek45S2hmdSYjeEE7enR2WnpHQmdNdXNwZmNsNW9iZ2VPZEFxQ3ZWYVIvVVhjVW9SM3lKWXlDMndtdm9KeExaeVBES051YUVydDRISzVRRWhSRnNEQVM1diYjeEE7cGY4QUpQVUo3M3lhNW5ibkxiM2NrSmxwOFRmQWtsU2Uvd0RlVXppdTM4UWhuRmRZajlJL1F6QUEyRFA4MGlYWXE3RlhZcTdGWFlxNyYjeEE7RlhZcTdGWFlxN0ZYWXE3Rlh5cC96bkJybHh6OHJhRWprVzVGemZUeC9zczQ0UlJINXFESi93QUZpcjVXeFY3bC93QTR0Zm03NVg4ZyYjeEE7NnpyRmw1alo3ZXgxMWJZSnFDcVhTR1MyTXRCSXExYmc0blB4QUdsT2xEVUt2cW56eitZMzVVV0hsTnJ2ekxxVmhmYUhmeC91N1dzZCYjeEE7NTliVTdnUndyejlUdHZTZzdrWXE4dy81eEw4d2FOcTJwL21CK2hOTGowdlJ4ZlcxMXA5dUZYMUk0Ymhaa1dOMkZUc0xjTnhxUUNUVCYjeEE7RlcvK2NnOUd1TEh6UkJxNFVtMTFHRlZNbllUUWppVi80RGlSOVBobmFlejJvRXNKaDFpZnNLUThwK3RiN25PZ3RLb2x4NzQyaEVSeiYjeEE7MXdxK3FmeXowT2ZSdkpXbldsd3BTNmREY1RxZGlyVE1YQ2tlS3FRRG5uZmF1b0dYVVNrT1hJZkJES00xeXV4VjJLdXhWNE4vemtYbyYjeEE7MXhCcXVuNjZpazJ0eEQ5VW1ZZEZsakxPdFQvbHF4cC9xNTEvczVxQVlTeDlRYi9INDZwRHhyNjF2MXpwYlNxSmMrK05vUkVjK0ZYMCYjeEE7NytUK2lUNlY1SHRmckNsSjc1MnZIUTdFQ1FBSlg1eG9wemdPMjlRTXVvTmNvK241ZnRRelhOU3JzVmRpcnNWZGlyc1ZkaXJzVmRpciYjeEE7c1ZkaXJzVmRpcjV0L3dDYzFmS0YzZmVXdEU4MFcwYlBIbzgwbHRmY1JYakZkOFBUa2J3Q3lSOGZtNHhWOGU0cTdGWFlxKzBmK2NNdiYjeEE7SjkxcFhrWFV2TU4waGpiekJjcDlXQkZDMXZaaGtWL3Bra2twOHNWZTJlYXZLK2srWjlGbTBuVTBMVzh2eEk2N1BISVBzeUllekxYKyYjeEE7QjJ6STB1cG5nbUp3NXErYS9OdjVIZWV0RXVaR3NiVnRZMDhIOTFjV2c1U1U3QjRLbHdmOVdvOTg3TFM5dDRNZzlSNEplZjYwMngreCYjeEE7OGhlZTdtYjBZdEExRG5YaVM5dExHb1Bnek9xcVBwT1pzdGZnaUxNNC9NSzlsL0xUOGpwOVB1NGRYODBjR25oSWUzMHhDSkZWeDBhWiYjeEE7eFZXb2YyVnFQZnRuUGRwZHVpY1RERnlQT1g2bHQ3Tm5Nb2RpcnNWZGlyc1ZTL3pCb0dtYS9wRnhwT3B4ZXJaM0swY0EwWlNEVldVOSYjeEE7bVU3akxzR2VXS1luRTdoWHpYNXgvSWp6cG90ekpKcFVMYXpwdGF4U3dVOWRRZWdlR3ZLdnVsUjh1bWRscE8zTU9RZXM4RXZQbDgwMiYjeEE7eGEwOGkrZXBwL1JqOHY2ajZsUUdEV3N5QlNmNW1aUUYrbk5nZGZnQXN6ajh3bDY1K1hQNUVYa1YxRnFmbXdJcVJFUEZwU2xaT1RBMSYjeEE7SHJzS3B4L3lSV3ZjOWpvZTBlM2dRWVlmOU4rcjlhTGU0NXlxSFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxaGRWMHZUOSYjeEE7VzAyNjB6VW9GdXJDOWlhQzZ0NU4xZU54eFpUOUdLdmpmODB2K2NSL04raTMwOTk1TFE2NW9qRXVscHlWYjJBVit3VllxSmdPeFQ0diYjeEE7OG52aXJ5Y2ZsUithQnVmcW84bzZ6NjQ2cDlRdWRnVFN0ZUZPTmUvVEZYc1A1VS84NGllWnRUdm9OUjg5ajlFYVJHUTUweEhWcnVlbSYjeEE7NFZpaFpZVVA3VlR6N1VIVUt2c095c3JTeHM0TEt6aFMzdExhTlliZTNqVUtrY2FBS3FLbzJBVUNnR0txMkt1eFYyS3V4VjJLdXhWMiYjeEE7S3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4Vi85az08L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5wcm9vZjpwZGY8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo2Mzk4Yzk4ZC02ZDU2LTRkZjgtYTIwMi1hYjE4OGQ1MTIyNDc8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NjM5OGM5OGQtNmQ1Ni00ZGY4LWEyMDItYWIxODhkNTEyMjQ3PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmYwY2NlMTNhLWUxYTQtNDA1NS1iMDI1LWZmMGI2YTFiMjZiOTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpmMGNjZTEzYS1lMWE0LTQwNTUtYjAyNS1mZjBiNmExYjI2Yjk8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+cHJvb2Y6cGRmPC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjM5OGM5OGQtNmQ1Ni00ZGY4LWEyMDItYWIxODhkNTEyMjQ3PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjU0OjI5LTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAFv/uAA5BZG9iZQBkwAAAAAH/wAARCACtAK4DABEAAREBAhEB/8QBogAAAgEEAgMAAAAAAAAAAAAACgsIBQYHCQAEAQIDAQACAgMAAwEBAAAAAAAAAAAACgMEAQIJBQcIBgsQAAAEAgIFCQcGfwAAAAAAAAECAwQFBgAHCBESE2EJFBUWMUFRkfAhInGBscHxChcYodHhGRojJCUmJygpKjIzNDU2Nzg5OkJDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanJzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+hEAAQIDAgQEAQqHAAAAAAAAAQACAwQRBQYHEhMhCBQiMVEJFRcjMkFCRGFiChYYGRokJSYnKCkqMzQ1Njc4OTpDRUZHSElKUlNUVVZXWFlaY2RlZmdoaWpxcnN0dXZ3eHl6gYKDhIWGh4iJipGSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwA/ighcoIXKCFyghcoIXKCFrXsi8VUsVbH96vLjOYHtcE6tlFEHkv1WmhsZhsGcJgYBTj84OXzWWmyhFkzoqt2az9+2WLcrN0w1tPqTBjoQsL2EeXbacaWh2JYLgC2NP48J8UHb4Ms1jo7gQQ5r4jYMJ7TWHFdrLYNJWm+uDFrbJud3JkaqILKFSUIBO0kZBkxrEmgVRdIrCo4jM2QgJdVTBuheSkJBUhAqqphMYwpCh9wXJ0COCiwIWPfGPO29OVz1c+SgUxSKCFLxMsDjHGJM07O1gAAxw/YMG3rXBWLZIV/VuGW3cquWsicmy6Z0TQuNTfGl4Emiqi0RcJNZeI7TgbNN2VgiK5UW5AXUTA6l0e2YfqK7GC/BxcwN3lWw7LkYrSDlIUtCEUkFxBdGxTFcW47g0uecUHFbRuYbUAWFKfvFlcoIXKCFVYNH43Lb0sTl6NRWAxEiaiJYhBoi8hb0qKoWlUiu2KyC4JqgFoxQNaNn0pT9n2facDSlpQIMzLEg4kVjYjKjWOK4EVG3GmZCmRVxiklmtVisQ0Kr6m+Zmd8E7iHVkKNayEXZRMJxRO/nJvF441TE2e1dtzgAXIGAtsB9HXn0LuAi9bCJy7slKR6UD5IOki3bqhksYcJx6aQ3jbyK5xqWgratUdi6UJeLNoVZFVRqQcVVCEUnKqZwo/hyIqmbpAZ3JEzxAYk1ZNRFRVVZCMPVxJaKm2MYts/yBf8A2T8nIDHzmDK2hHABIlrQaGPNKnUzUBmI5ztS1rXy0Jlc7ooB1OpZsFuoqZsh6k7IWCKTBU1WPLs9sG9rHyENWcM43CrswlTyalmLt4dMcEvwhwTx20Rvga0tsNbT4Tvzgzv5g1nxZt+LLmrPmHbYLwHQomxyUeG58CLTb8nEdTb6LUgjXWZ6fhlhcoIXKCFyghcoIXKCF//QP4oIXKCFyghcoIUNbLWzkqSsQZexxPETUmCfIkycryrVjLiiK8yxtZO8kSXiSprpnKsBvrkgqPXolE6RVRaou1kxQH3hgawAX8w1WlkrAhCWu9CiNExPRwRAhA1JDBtqYjUaQ2FCrRxZlnwWOygyAShcLLDFELIOyvcPYPHo3lIquUcEWY1XSksZtBxKmQUyHmSMAk3jM3uDhaOYrs+MSKhdoNUBt2+tuB3Q0YNsD0OHO2dA0/e0No+fmBjRM5qRAh1MKWbtwMMZUt1MSLEGtIGgdJUDqfQqyvNBC83Qhn7ehRZXm7NsdWyoUQuXY4KYohetsdEaZoELxQWFyghcoIVzyfOs31ezDD5skWZ49J8zQpS+w6PS3FXsGirQ2sugRfMFkFwTVALRyXQkULrpgEBEB8VbdhWLeSzYlj3glJedsqMKPgx4bYsN3SWPBFRrg0qDnBBQt/Vh9i0KwGgdXtlnDkzkMo3hrauqXWZkzJI3lJJJzP8AKrRNUF1BXAwrRCFETACGIAsREqixucuGzQMQ6TF5MDkUh1C91lxnVBNSS2TmHEUFKYsGYLs4NJihbDGhZsEQfLkxwCb4BB5plaMQ6YJbmCHNIvA45CHaL+GRWGP0SOGb5i8bnOi4bOETgYpiiICA05tWnZlo2LaMeyLXgRZa1JaK6HFhRGlkSHEYaOY9poQ4EUIK0VapRQuUELlBC5QQv//RP4oIXKCFyghacsUPxUKAWPTeIVS1DxSCzVXmLlRjMEXvaMYlyqsjc5Su0okma7YRidDnAyKcOETpsTlOo9ADEI2X+29DToTbRwlRYd8cIUKPJ4P8UOgw6mHHnyRqSw5nw5UZnGNmMUFrYBIc6LD2a2uc6yFfmycZqnyY4tN87zFGptmmOuQdxmYZhiTuLxiJOCpJN01HcQeqrOVry2RIkmAmuU0iFIUAKUADrnY9iWRd6y4Ni2DKwJOyJduLCgwWNhw2CpJDWNAaKuJcTSpcS41JJMioN0GjTyVSsrlsNENOma7ohebdCoQuWwoVQvFsNEKFULzbDRChVC8Ww0QoVQuWw0QoVQuWw0Q06FULl0GiG1oVKF4uw2OrZUxnKF6Ca3rA1gUyAhT0sI7Pqs+w6mlBqgq9nGpyKvV15tqxcvry2v70jVFaZZVcrEWJBZnbEaJ2xtY3epEFJcoCKS6Hzxh60Ot08NtkOixBDkb7wYYEvPNZV1GlxECYaCDFgOLnbfjwnHHhmmPDiakV6SjAKj68KuLIiriA1p1WR5OOSxHExIYpwIhFoFFkCJGiMuzFDiqrHhUehR1ilWRMYxTFMRVI6qCqSp+K9/rg3nwaXnmLo3tlzL2tLnbqmHFhknEjQX0AiQYgBLXAAghzHtbEa9jYiKLLdPxqFyghcoIX/9I/ighcoIWnTFP8UVaWOkDitRNVDpRxXnNcAMSLR1uq5bI1Uy9HWZyIRhF43OgqpPEQZqipC0kjhjEBK8WG0DdFz9saFDQ0RcJloQcIF8GBtwJOYrDhODXG0I0JwJhlrgQJVjhix3OG1ueAwcJHwtmtrn25CdKuFXKqrhwqos4XUOsussc6qqyyphOoqqqcTHUUUOYRMYwiIiNsadhWQ2wmCHCAbDaAAAKAAZgABmAA1gFKvW3TfG2KF5oYwQuUMYIXi2AUzVC5bDRChVC5dBohp0xU7BC5dBohp0KnYIXLelQxkLluhjIXmhjBC5TOMELlCoQvFMYyFymMZCmLYX2ZlYNhzWa2meXl3MYkKPOWLOsqr9RYcj5ngiKwgZ2yTUUIiwmuDorKHhz0BKJDmMkrdt1Vkz+ksOWA+7eG26rrKtJrYF4Zdr3SM4Bq4EUjbLiAS+XiENEaFnqAHsxYrGPbgiqNMqsrTkOumQ5drLq0mJlNEmzQyK9hcUZGMAgIGFN0wftVAI5hsWhrkhkHTVcpF2y5DJqFKYohThje66N4bi3hmbrXplokpbcpExYkN3cWvY4al8N7aOhxGksewhzSQQVCRRZBp+bQuUEL/9M/ighQ6s47LKXrD+oyM1gvQTiE5RtRWVqspcHXzRicnrF0u1dPEwAwpwCAINzvHyprkgkTI3AwLuECm914BMD9pYaL/QLuQKw7EgAR56NyjlmvaHNadvjRiRDhNFTUmIRk4cQjIFSgipunGY5/mqY53nGLOI7NU2xqJTFMMZdgkVxE4xF3ar1+7UTbpIt0L84WMIJpEIkmW0UhSlACh3hsWxbMu7ZErYNiQWy9kScBkGDCbWjIcNoaxoJJcaADO4lxOdxJJJmVvXQaIU8pqkLl0GiGnQqULzdBohp0KnYIXi6DRChUoXi7Lo0KlC5dhQzoXi+BhoZ9iELzdhsNWzoZ0Ll2Gw1bOhnQvN2XRoVKF5AwZwhraFShebodEdOhUbBC5dDojp0KhC83Q6I0KhC8Wx0RoVCF4oYyFtpxKuzic2OFaCNU9YEYULUlWnFmbRdR6q6XbSFOri2yhUzMUzOis4dCYyqqk1jJ70Iikmg4EwA1MU/xzoucAsLCddR18LuwBvPdkwXOAaGh03KjVRIDji4z4kIBz5YY22jEhgExQW6ubUV29F404yqJcoIX/9Q/ighBNYpPZYr2VVkhMESgj9JzVbVwo+kSq8rU5lGkShLB4YsYnMD3wya6k6RdEzpFQCImCGEZpKEviJjm7p6GDBCzBHgylpWehlt7LTDZuexhRzIj27Vy2tUCWhkQ3Alwy5jvacV4AlaKDdVr+uww0+jFsvN2XR2tCpQuXZdHa0KlC8XYaA0ELxfMG90ELxfBwUxmQvF9wloIXL5hDeqZqheb4OCmKhC5fBwUELzfMG90yheb4GgNDpCF7AcNG1q0qFShe90OjvdCqF5uzUMyF5vg6AUMyFy+DoBQzIXqJhHfKZqBrIRimJPWWruyRsfglGcopj+tGpTImUo85crqrRKYpTOyvUmTW+WcqrOXsRdNmC7J8ucx1FnbMy6g3TgLfFPRf4HYODHCNs82JCyd07dykxCa0AMgzGNWZl2BoDWsa57YsJgAa2HEENopDNInCh3RbTafJa1X/9UtLFWbIhxY/WIk4lgMTyOnitlyjVTKiqChMfNG8wtnS04xdumVdF43xjJrN6ii8R15nEXbQ9sDCQB+nNCRg4h4RMMckbQhZWwbHaZ+YBBxXGC5oloZNC040y6E50N2aJBhxhnANNmipQWYHtZhgp3BUy9rscFCu6rC5fBwUKoXgVcIbLUNCqF63zpagheoqbEdjqGhXpCyvW+YN7oVQvF9DBp0M6Fy+4S0x3FC5fdhTNUL2vmDe9+piqF5vux06Z7ghe4K9LaesoLC9wU2AhgpmqF7XYbCghe4HHONb3uhVC9wOOeFveqZQvN8wb3QQuXwNCghTsxOGyO3jZZXVezPFXrlpIs4OTVc1hJontIZX5sURaMou7LcKiZtK0yFYxNW9kMuZu0VTT15S0Pz/omsGm0oYIrSsqUhtfb8k3TsmSM+WlwXOht1tVHg5WA2pDQ+Ixzszc2rhUI3qnCBRL//1tleLlV4PpyslZYqWau0srtSsnM3TtkQABbLtWK3ZTBFXDtUohfUiykhBCt0zAIoCZYxRtLiAdd9AfcaXsTBlNX3isOzlbk65rXHW0tJl0GGGjbjpgzJeRtqjARtWCZWDNVaTQU2A7DUNPuVbrzfMFCqF630MGnQqUL1FXCGyoIXqK2sz96De6YzIXzFYBzw2ZqFULwK2EN7HaUKoXi/Yd6GhVC5fsIaQ0xVC5fsIaQ0zVC9gVwhsh3NCqF7grhHa0KoX0BW3nhtN8oIXuCmy2FM1QvqVTDboeEQvoBwz9ZTNUL3A+gOy36hVYXvdjoBq06ZQvN2GgNBC5dhnBQzoR4Ng9XOtX/Yo1J1nvnCjqOxWTm8Fmpw4dGdunU2yc6dShM0QdKKAC5VIxGYGs9KVS6OCTgg3ZwEFDL+4eLkMwd4XbdurLtDJCDOmLAAbitbLzLWzEBjQM1IcOK2ESKDGYczc7RCRQ0X/9fo2X1Yz6tKykr/AJ7iF8IeOVrzoVkguIHWaQWFRp1BZeYLHKJinVh0BhzZAxijciKdsAALQAwjgdu9Aupgru9YEvQtgWTLYxGs6LEhtiRnjYB8V73AHPnz1OczgUCjpfQ1mZq2lPZNVlcvoZ1rTt75QqheorYdIN9oIXoK+db3sA2lMIXzFYMG9jQqhegrWs/aUKoXrfsOt66oVQvF+w+TUxVC837D5NTNULyCw6zNwa23uaFUL2BbDphvlCqF9Cq6gG0OlQQvqCuHTDb0yhfUquEQ2dsKFUL6lVt6A71TNUL7FVw6erMoa6F9QU0QpmuwQvoBxzh2+/0M23hC975godIKF5u8FM50Ip3EG6yTx6omuGq9w5v61XlY8NmRokYri7ZQasSBii2bEUMiVmLY8YkmILFKQ51SqKqCoBSmSE3JzZQC7LbPv9Yt6obcVlpWY+C45qOiScWpdSuNjZOagtJIDSGtxSSH0ifr1X//0IoAth0h3FGV1YXkVrWfrNHWUEL1FfDve+W6FUL1FfDb09+oVQvkLi1n7Taa0aCF6Cvbz9rv1CqF6Cva3+1vtCqF644whphvlMIXi/4fJqFULzf8IaYb5QQvYF9iOyChVC9wXwhvYbXWUzVC+wLarW+UEL6lW0N6tDQr3FC+xVdQDaGm1UL7lVt4d636ghfcquHNzh32mUL7lVzrdrY5lBC+pVNyFM1QvoCmgbT3+meuIXvdjgpjMhb6sQMnE7OvCvSQL6+Aky1UwmcDIpkRyNUNI83MIKRV2cVSuCvUQrDMDcCkMQUzrXRiiBANz/2UFsZse4tg3hozGlbWiS9TXHGmpd8Sjc1MU6TGPUg1DKAgkiN+sv/RhzfrWaO0oyrVWV4Fxh2m2ChVC9RcYdWytUxVC+YuAzxtDq0RpmqF8xcYdLftZTFUL5mcZ1vVs6YqhfMXGHSHfAoVQvGOMI6Y75QqheMcDo+lUKoXsDjW5o6e+6yhVC9wcBo29LbUzVC+oL4d732ghfYq2Hbb3mUKoX2Ktbz9WxptVC7BVsOnrd7oLC7BVsOnvtMhC7BVdQ5lMgoXYKrhtYBzKFUL7lU2VvZhTKF9gU2A7CmUL2vgYaFShbtsQYMBrL6sfW2x3jbN+j0M+p6nw7o/OIOWb1M0v542itH6y//ShCK+G1pbcRoynVWV8xcYd7G1vQUxVC+YubefrcO5GhVC+YuLeftdtapiqF8hcBohvWt07Y0KoXzFxn29rvwUKoXoLkNHBnb7TFUL1xxsNjbDcUKrK9gcBgt6sNCqwvIONAdLfhoVQvqDjDtNvaoVQvsVfDvdrfaZqhfYq+Hbb2GspmqF2CL6A7/pazNpmqF2irYdsO+DTNULskW0B1urOzBpmqF2SLYdLbgNM1WF2SLYdLW71nUyhdgquHSzNnTNUL7FVt6GyoVQvqCuHTplC3lYgdD369ldWnF02yh4Ywseo/DXj0oBeW7+K1kVYOoc1UG6tgo7bwZ0cms1oIGwW/hbR+zMBuCaypNzgJqJeKE9rdvLYcnOte4bo0xGA9LDrmkTWX//04c1jyq9q5rBnqr6JC6GIyLOUzya/F9D1YQ9F7LEbfQR0LuFLqLrwxyK7E18bnOc6J7ZBMIlERY5u/bEG8FgyVvS2Lpeek4Mw3FeIjcWNDbEbivAAeKOFHAAOGcDOrIzqyDOMObqz7QU8tVZXxM4HR1bK1QqhfIznDqz9HPpiqF8Rc5wjq06FUL5i50B1aQ0xVC9Rc28y3q2FqhVC9Qc28/e9/oVQvYHGEN7Ha26FUL3Bxh2m/DQqhfUrgdHOz8/ahTNUL7lcBo6W/W6Zqhdgi+ENWHMtUKoXaIvhtbfbUzVYXaIvq36maoXaIth3zBhCm1ULtkWw73tBoIXZIth1urZDTaqF2iLae96WYNM1QvuVW3sdIaZWF9gVw6e+0EIljdPbKV0FlBPzqHdCsk+CRbHfZcRqaIdjBN12J1L8sj0qifi+WnNTZQq2OHXsCFE5XpiLDxenaHAfjFvTw3Fa7dXt2wVHE25f//UuzFi6qT1RYoBXWRvC1YZAayVIBW3LyijdFuSKknaDNlZsiqANWTFBZFashjHEhUAFDnOia+qKL3w49vNCXeoXpwFWMYkURJ6zhFkYoBJxNLxCIDDVziCJR0uaVAAcMVrWYoE7DVq1dmXw2sGsDfRp9IVW665nGHM1Z+toVQviLm1paew1oDTFUL4mc4dW9W6Yqsr5C42GHVraFUL0FwOaA6t6CmKoXjHGszRt0KoXtjnDq0qZBQvqDkRz9jaHf6FUL7FcYQ1urOtDTNVhfcjjM1urR0aZqhdojjDq2tM1Qu2RfDq2g0yhdsi46zW5mrYhTNULuEWzNbq2NM1WF3CLat9CmaoXaIrhDahv1NqoXaItma3T33DTKF2Sq6O977TNUL7lVw6erMoAoRsGIuVaKVfWCEkRZy1xm+rVm+dqzHaQmcmVOm6iKMmwd0qVZZZFPH0uyWzWTBAE0xRUIYS30VDG4r6M+8zbw4dp6Vhux4FlSctJtOagLWGYiNFACcWNMxGnGqcYOAOKGgQPOqX/9Xdduoosf1I7VfU5ZLwSG315V7H3tWU8u25XSi+VWcwyUlOIPwAh2jeFQKaIY5aFUukzmdR5MggoAlvXQXQE37bI3jtbB5ORKQZ+A2blmnFAy0vqI7W7iL4kF7H0zjElnHU0ONLDOeiEeMuOjq2AU6i1Uy6xnGfb1bK0FMVQuuZxaz9Zq0LQUxVC+AuMOrZW6YqhfIXOHMw5u9iNBC+eOcOrSpiqFzHOrUWghe5XObrdtvlM1QvqVxh09/t0KoXYK4w7DVrQpmqF2SL27Wt1bOmaoXbIvma3Vsc0KZqhdwi+HW6tkNMgrC7ia2He9QhTaqF3E1sObsNwNM1Qu6mtma3fN9AaZqhdwi2Hfd/ptVYXbIrh3zSzhplC7JFcO3DfqZqhZRqbq3jlc9a9XFUstgqEbrHnWW5NYLpNFH5WBo/FWsOVizhskdETMYQ3XO6cmE6ZE26JznOQhRMH52995ZK5t1bRvZaNNJWdJRphwLgzGyTHPDA4g6qIQGMFCS5zQGkkAhNBVMW5EkyCVcyPJtXsspKoS3IcqS7JkvoLGTOsjBJXhDOCQlJY6KSCR1U2DFMDCUhCiIawoBrAXjt22Z28Vtzl4LTIdaU/NRpiKRWhiR4jokQipJoXONKkndTrqtrr//WOfr3qfleyAqbrKqWnJFJSXayZQjErPVlW2PBhq79qYIZHGze/NhO/l+KkQfNrSiYlcNyCBiiACH6e5d6rRuPeyz73WSSJ+z5qHGaAcXHDTq4ZNDqYrMaG/MatcRQ6xyDQ1S1Stmrmb6l6y57qln6H5FTnV1NUbk+Y2RROo3LE4G/WYLuIe4Okjj6EvryC7NyUoJumqiapLZDlEWBbtXisq9t35K89iRMrZM/LQ48J234kRocA4VOK9tcV7Ndjw5pzg0sg1FQsanXw79tqeaqsrqmcaI4d+1u+UxVC65nGHTHfd8piqF8RcZ9va78FMVWV8xc288NmIb/AEKoXAcZ1vZAO9bC1QqhfQrjDq3sKFUL7FXz7erZUzVYXZKvh1bLWUyhdoi+HVo59umaoXcTXw7jahTNULvJrZmZqwU2qhd1NbM1bmmaoXdTWzNbmatlTaqwu8mrh1YQz6ZBQu4RXM1u96zZDnUzVC7pFcOrDTaqwu0RXDvlMoRHOICWMC8wT9PdlhM0KSPBJDYvquKs13aBxMed5gaNVJuj8KVuiXtWAye6yNMa0dNUkdWKGvpDc89dHjhNZI2BI4K7NikTk89s3OBp3LQnOECE8bCLMNywGYgyzDrOFY4h25FX05cKJf/XP4oIQwW6gqwTcTLAoXZu1awpVeLynD2MpV7wxkgdZR9KyKqTWTqwSN2zUVL7LSi54bFllFD22B2JwKkmzXOfodoIsMrLOm4mCG34obKzL3RrOe40DYxBMeWqXUpFAEWC0AbWCMCXOisAlhu3CUIsotm63ftsFOm1VOumdfDveq3TWqF1jr2s/VtbVMVQuuK+y0g32mKoXoLjDtd+oVKF5xxh3vfqFUL3K4w63Voa2ma0QuwRfDmatjQqhdoi+ZbHVgHfaZQu2mvh1aOGmwKF3k1sO96rdM1WF3U1h1mt1bYaZqhd9Na3n6sIU2BQu+mrma3VtwpmqF3k1czVpaIWqbVQu6mrmag2egNNgVhd0iuZg0w30KZQs3WPlR8/2Slb8k1L1Zw3JKbJ1ieM25lDposoVDGiCr+OR+KrrKIpoQuAwdqu7X16+HKle0inVOmQ35K/d9rCwdXTnL4XjiZOypOFjGlS573ENhwmAAkvixHNY3bgXYziGhxGCQBUph7UVUzJVjzVFIVS9XjHGEpVfwFKDQ4prYuHrlRdeIRqNvjXRgPFJijr1y/dmC0UzlycQAAEADgRfe+Fs3/vZPXxvA/KWtPxzEfsGgAMhw27shQmshMGuGMaDU5zXJqarLNPyqwv/9A/ighU+LQmFR+FROBR2GQ+NQONQ97CYzBosybRKFRaFRJsqziMMicOeJLNH8PftFjpLIqkOmqmcxTFEoiAzy0zMyUzDnJOI+FNwntex7HFr2PaQ5r2OaQ5rmuALXAgggEEEIS/7FaMTcjtgZW6nHpRbO4nY21qRaKL1WRwyryIryi/RIk+f1ZTY9cAqslF4Qk4MeFOHCqh4vC0TKgoo4bPyIdpdDbh6lMMl2DJ2m5sO/lnQmCbh0a0RmmrWzcFooCx5AEZrQBBiuDcVrHwS+yx2MN1WohRbDvunnU+lFuuodbWZu2DfRpiqF1zL6szfRpiqF8r+OjtaFVleQXHRDWbENrTFUL6lX0dWzC1TNVhdgi2jstzTNdghdsi2Zo73v8ATNULupq5m9b9oUzVC7yauHT2+dTYFC76auHVoDohTZYXfTVzNbveZvoUyhVBNXVtwwU2qhd5NXfd/AaZqhd5NXDvg7HQGmwQq7BodFI9FIbA4HDX8ZjUZfs4VCIPCmbiIxWKRSIuEmkPhsNh7NNZ2+fvnaxEkUUiGUVUOBSgJhABhmZqWkpaJOTkSHBk4THPiRHuDGMYwFznvc4hrWtaC5ziQAASTRYRw+JJYncSw2qsVrCrNhTUtkhWnCyJzYF22emq7k8zxJ/DauYfEG51klXThVo2fRxVAwIrRAiTcorJsUXCvGnRT4fXYXLzCwbuRXbR7ZkWsDXbpqPilr5t7TQhoDnw5YOGM2EXPOI6O+GyB7qmg1lt+p8oLRcoIX//0T+KCFyghYsrqqVqysh6sprqfrglSHTnIE5w40PjUFiBTAICBgVZROGPUhI8hEchDwhHDJ63Om5aOUyKJnKYoCH6K6l67fuRb8tee7Ey+VtmVfjMe3uDmPadS+G9tWvY4Fr2ktcCCsgkGo10vtxTHE1qz8T4rNBBwMRnSoadIi6CqmtXGpQK5ACquxkqdsapJs4RP0IZpmMJSlTbRVsmZ20KUCuWzTtDgHw82BhpsDKMxJW+EqwaclK62sMvAqcZ8u91ANd0FxEOITWG+JZY8OG6rV8dTDsx21PfS3XWMrsA2tMVQvkKo4dpTFULgK4R2dCqF9iq6Q6G3plC7JFMNraDsQplC7iau4zw2FMgrC7qauHN3vf6ZQu+mpmWtWAQpsELvpKZmt37AOCmQhVBJTDa22/DTcFYVQSUzNba22/DTKFUE1NWhhDBTYIVdg0NiseikNgcDhr+NRuMv2UKhEHhLNxEYpFopEXKbOHw2GQ9mms7fRB87WIkiikQ6iqhylKUREAGGZmpaSlok5OxGQZOCxz3ve4NYxjAXOc9ziGta1oJc5xAABJNFhGN4kjiSb6xvdw2yTslIakWvUEXydX9Xyb9rEGNVbCINHMLeRyOvIW6dQ2MTxGIa6VSSSSVWaQtosIiKjxTgy5SaKPRRwsIEGJg9wexDvJdWmami1zXTrmuD2w4bXgPhy8N4Bc4hr4z2jM2C3a6F765hrIganwwo1yghcoIX//SP4oIXKCFyghWNWXVpIVcchTVVfWhKsInaQJ2hDiBzPLEcbi4h0UhzgSnuTXBk3DV21cJkXaukDpOmbpJNdBRNZMhy+WsG3rYuxbEveC78xElLZlIgiQosM0cxw7iC0glr2OBY9hcx7XNcQQGmca6CdxSvEIq2LG91G63LFVpMVddRA49i0UlBFqMRrSqnZopqunSbxo1ulp/lFmkkJ04kzRI/bJDe3bYxUDP3HVTAXovLu35hwrt4Q3QLKvfqWMjE4spOOJABaTml4xJoYT3GG454cQFwgssMiA5jrod0x9bojvVPtBSr4ibRHVtKYqheQNoDbtYbYUyhfYh9kO1oIXZIfP0wptVC7qZ8zeh0MFMoXdTPpZ+x0aZBWF30z7/AE2Qqgmff8Ib7TIQqgmfWhqthTYIXfSPma3YYQ0KbBYWf7HuxzrrsoqwGVWVRcgRufpqcomeO0ocmm3hMAhSZikXjU1TA+UbQSWYKkqcqeOXq6KajhRNBMTrqpJn/IX2v9dHBzYj7w3ynYMlZrTiguJL4jzrQ4MJoMSLEIqcSG1xDQ57qMa5wwSAKlGp4nRiQVUdhWaH1mT47h9blkYRJcG05nbOkZTq9TeIKt3jGryCPBKYX7hssKK8aep4/USuiNiMklnCS/JTDzopr0YXBEu7YrX2XcIkVgVBjTRaQWumojdwgjGbLwzkwaGIYzmw3Mgc8uzbctxNPlRaLlBC5QQuUEL/0z+KCFyghcoIXKCFyghafbO/EV7E+zZXis7M2a1QteMRViEQc1pVcwWFnYzTGYicFVojWdI6gw5hOyxlzHWUct3cJi7hY9tV8cgXsfpXBHopMImCxkOyorha902BrRKzL340JjcwbKx9U6AKUaGuZGgtaNTBBzjdsRzd1CEqstsRMs7bFPHkb3bzd9qvEMfOMvVRTaNznkbDWl/Xx1NcnZENJzly8Q1G/u18ZOYU114uPlALdD0Xwc6KfBJhCxZTTuzRbRxRpefLIGM40FIUbHMCLVxxWNx2xn5jkhWgnbEa7pK1JLoOGbhdq6QWaumqyrdy2cJHRXbronFNZBdFQCqJLJKFEpimADFMFodbT6MY9kVgiQyHQ3AEEGoIOcEEZiCNYhbryA2wAaZCF2SGzB0c3VsaZCF3ExzqbDYoXcTNmaQ0yhd9M29azZU2WFUEjb1rdlTKFmypmoSuyyCj7iV6kKqp8rUjjFJBzEmcky1FI8SDM3SpkG76PvWTZRhAIeuuUUyuHqqCJlNdA11aCn5u9F9LpXJkm2je60pOzpN5IY6Yish47gKlsNriHRHAZy2GHOpnpRYJA10R1Ycbp1Zpi+RU52ak9ZUGA3l3uy9V0Sh8VmhW1cqYxnKsa9RCWoNcLJCm4awRKLY4bq3SUSaqhrPhfClo6rPlMpZOCaT01Gzt0/NtcyCN3QJWrYr8xq18wYOK4UdLxGnPE6Lyaigqlqh6nbHWSIdV1UlV3LVXEnw1JBNOFy8yva79VuiVuWIx+MOjuY3M0bVSIF+fxFy6erm15VU5hER55Xtvneq/drxLevfPTE/akQk48V1Q0E1xYbBSHChg7ZhwmMht1mtAzKIknOVlun5hYXKCFyghcoIXKCF//9Q/ighcoIXKCFyghcoIXKCFyghRMshbBKxBsrDmdV/VAVf1gxgyONxmldg6l6d8b3hu1IgWepSeQGcSIot2iREyg+AqZSFAlzap7FuZhbwk4PRk7n2xOSctWuSDhEgVqTXS8ZsSDUkkk5PPU1qtg5w1itPtbO6aSw3m10q/qprOroqfVWv9qDrRCA1iSs1tpqY2xm1jsMh01BelzlFS/wAZcXxMtyW9mEVB+lbuaOnCbZsMQbwyFl2m0U1YbElopz58Yw3OhZxrYsBtCanGGZbiK7b6LV3Xtunx3ZKLQGFby5yzZNw5zEL/ALsJkLjXG7kG95vW70xa/Xdu3dXRLWZaHNp7/uhozN5qlo0xvLel8k8Nps4Y9aita6SZTuBWwi125aiorYnZEReJwrL9jjIyIvYff8qt6v8AjNyq2v16yxqXu+Xu6ubo1zbtWxzR+l5XCLpmWZMaTxcpDa6mVrSoBpXJCtK7AKTGUk6hsTU3euER6KbvTlayEiLZheN25yZxzjhsLi/X3L3CrzcWrVzcnt5tsMyn4m9+HfeVZmDL7NWXysMurpnEpQ0pTS76+EWC6i3NVP7popFjkBlubZ9stpti0MmaXJdj6cFlCqODyk+YZLM2kSctDxuMz7PLd5cN3ApJqAxRuThfBKYOCdPmC8ujztiTnI9m2PduWhzECPEhmJGnHxmuxHOaDk2S8uW5xUjKOzZgRtpRmLsAtpNTOIa4nRU/jRy6qki1b8bZ3F7jlcs2xSZ77c2hNjuVoKEr1fPL6YoCa+wc1q1aLcgJgH59vTousOV58aHDtOFZko7XhyMFkKnSI0TKzLabpHG61IBGhiOK2oyfJUm1ey+wlOQZSliR5VhSJG8LlqT4DCpZl+GoJJJopIsINBWrKHM0U0UiEKVNMpQKUADWAAB87Wpa1q23OvtK2pmYnLRiGr4seI+LEcSakufEc5ziSSaknOVpr66uenj0LlBC5QQuUELlBC5QQuUEL//Z",id:"g",width:174,height:173}),E.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E6smh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gSWNvbjwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1NDoyOS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjU0OjI5WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTQ6MjktMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD40NDwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFDd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FQVk9Lb2UrMUxUN0NMMXI2Nml0WXV6eiYjeEE7T3NhL2V4R1dZOE04aHFJTWo1YnFsOEhuTHluUElJNHRZczJrUDJWOVpBVDhxbk1pWForb2lMTUpmSXFsbXVlY0pZbmVDd1VBb1NHbiYjeEE7WVZyVCtVZFB2eVdEU2c3eWRGcU8xanhHT1BwMVcrWHZPLzF5OGkwKytqQW5sSldLZFBza2dWb3k5dm95elVhRGhpWng1QjJPbDFFcCYjeEE7ajFjMlc1clhNZGlyc1ZkaXJzVlVieStzcktFelhseEZiUWpyTE02eHIvd1RFREo0OFVwbW9naytTcFpGNTA4b3l5Q09QV2JNdTNRRyYjeEE7WkJYN3ptVExzN1VBV1lTK1JWQWE1NXZNRFBCWUJXWmRqY0doWC9ZanY4OE9IUzM5VHBkVjJyVXpDQTNITW9YUXZQVFRYY05qcUNBeSYjeEE7VE9JNHAwMitKalJReSs1N2pMOC9aOVJNbzlITTBtcGxNZXBtV2F0em5ZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcW9YMSYjeEE7L1kyRnJKZDM5ekZhV3NRckxjVHVzY2FqeFozSVVZcXhWZnpsL0tacHZSSG5EU09mTGpYNjdCeHIvcjh1UDAxeFY1aCtkdjhBemxMWSYjeEE7K1VidDlBOHB3dzZyclBwSkpKcUx1SHM0Uk1nZE9Jak5aWDRNRzZoUlVkZHhpckJQeXovNXpIMXlDK1N4OCsyNlgxalBJQitsYlZGaCYjeEE7bWdER2xYaVdpU0l2WDRhTVA4cnBpcjZRL01QenZGNVcwa1BFRmsxSzZKU3poYm9LZmFrWWZ5clg2VG0wN0s3T09weVVkb1I1L3FWOCYjeEE7K2Fwck9vNnJlUGVhamNQYzNEOVhjMW9QQlIwVWV3enZzT0NHS1BEQVVFcEZxT29USklZWWp4b0JWdSsvaGtwRmlTOWUwclZyUyswYSYjeEE7Mmx0cFJJb2lSWG9RU3JCUlZXSFlqT1JuZ2xISVFSMWVVR21sSEtiNzB4OHBXdDVkZVpyT1NHSm5pZ2ZuTklBZUtnQTlUNzlzbnJKUiYjeEE7amdrQ2R6eWVrMHVNQ0wxek9XY2gyS3V4VjJLc2M4OStjYmJ5dm9yWGJBU1hreE1kbEFlalBTdkp1L0ZlcCs3dm13N04wQjFPVGg1UiYjeEE7SE1xK2Q5YTh3YXJyTjQxNXFWeTF4TTFhY2o4S2cvc29vMlVld3owRFQ2Ykhoand3RkJLUTZqcUVzVENLTFlrVkxkOS9ETFpGaVM5ViYjeEE7OHRhdGFYZmx5eDlDVVNQQmJ4eFRMWDRsZEVDdHlIWHFNNVBVWUpSelNzY3lTOHRsMDBobWxZNXlKK2FZK1g3YTh2UE1WajlYamFSWSYjeEE7YmlLV1pnTmxSSERFc2Uyd3lXb2xHR0dWbm1DOUJwTVlBZXg1eWpsT3hWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLc2EvTWJ6NSYjeEE7cFBrWHloZmVaTlRxOFZxb1dDM1VnUE5PNTR4eExYK1p1cDdDcDdZcS9Qejh3L3pRODRlZnRXYlVQTUY2MGtZWW0xc0l5VnRyZFQreiYjeEE7RkhXblRxeHF4N25GV2EvODQ0L2t0cG41bDZ6cWNtc1hVa0drYUlzRFhGdkJSWlozdVRKd1FPUVFxMGhia2V2U25pRlVQL3praitXeiYjeEE7K1R2ekN1bTAzU0RwL2xXNmp0djBSSkdybUQ5M2JSeHlwNmpWL2VlcWpNd0xjalhrZXVLdk9mTG5sclhQTW1zVytrYUpaeTMyb1hMQiYjeEE7VWhpVXRRRWdGM29EeFJhL0V4MkhmRlgxeCtkZXF5VCtlcDdWbVBDeGhoaVJldzVvSmoveWN6dSt3TVlqcGdmNXhKL1IraExBVGNqeCYjeEE7emRxZ2J4R2VReURjRUN2dFRJRmpJTjZiY2FqYnplcFpTdkE1MloxSkFwNEh4eUVzWWxzUmJXWUNYTjlRL2xEZlMzbmtlMGVYNHBJNSYjeEE7Sm8yZWxDMUhKQlB2UTB6aHUzTVlocVRYS2g5emJWTXp6VUs3RlhZcTdGWGdmNThhckpKNXN0N0lzZlN0TFZTcWRnOHJNek45S2hmdSYjeEE7enR2WnpHQmdNdXNwZmNsNW9iZ2VPZEFxQ3ZWYVIvVVhjVW9SM3lKWXlDMndtdm9KeExaeVBES051YUVydDRISzVRRWhSRnNEQVM1diYjeEE7cGY4QUpQVUo3M3lhNW5ibkxiM2NrSmxwOFRmQWtsU2Uvd0RlVXppdTM4UWhuRmRZajlJL1F6QUEyRFA4MGlYWXE3RlhZcTdGWFlxNyYjeEE7RlhZcTdGWFlxN0ZYWXE3Rlh5cC96bkJybHh6OHJhRWprVzVGemZUeC9zczQ0UlJINXFESi93QUZpcjVXeFY3bC93QTR0Zm03NVg4ZyYjeEE7NnpyRmw1alo3ZXgxMWJZSnFDcVhTR1MyTXRCSXExYmc0blB4QUdsT2xEVUt2cW56eitZMzVVV0hsTnJ2ekxxVmhmYUhmeC91N1dzZCYjeEE7NTliVTdnUndyejlUdHZTZzdrWXE4dy81eEw4d2FOcTJwL21CK2hOTGowdlJ4ZlcxMXA5dUZYMUk0Ymhaa1dOMkZUc0xjTnhxUUNUVCYjeEE7RlcvK2NnOUd1TEh6UkJxNFVtMTFHRlZNbllUUWppVi80RGlSOVBobmFlejJvRXNKaDFpZnNLUThwK3RiN25PZ3RLb2x4NzQyaEVSeiYjeEE7MXdxK3FmeXowT2ZSdkpXbldsd3BTNmREY1RxZGlyVE1YQ2tlS3FRRG5uZmF1b0dYVVNrT1hJZkJES00xeXV4VjJLdXhWNE4vemtYbyYjeEE7MXhCcXVuNjZpazJ0eEQ5VW1ZZEZsakxPdFQvbHF4cC9xNTEvczVxQVlTeDlRYi9INDZwRHhyNjF2MXpwYlNxSmMrK05vUkVjK0ZYMCYjeEE7NytUK2lUNlY1SHRmckNsSjc1MnZIUTdFQ1FBSlg1eG9wemdPMjlRTXVvTmNvK241ZnRRelhOU3JzVmRpcnNWZGlyc1ZkaXJzVmRpciYjeEE7c1ZkaXJzVmRpcjV0L3dDYzFmS0YzZmVXdEU4MFcwYlBIbzgwbHRmY1JYakZkOFBUa2J3Q3lSOGZtNHhWOGU0cTdGWFlxKzBmK2NNdiYjeEE7SjkxcFhrWFV2TU4waGpiekJjcDlXQkZDMXZaaGtWL3Bra2twOHNWZTJlYXZLK2srWjlGbTBuVTBMVzh2eEk2N1BISVBzeUllekxYKyYjeEE7QjJ6STB1cG5nbUp3NXErYS9OdjVIZWV0RXVaR3NiVnRZMDhIOTFjV2c1U1U3QjRLbHdmOVdvOTg3TFM5dDRNZzlSNEplZjYwMngreCYjeEE7OGhlZTdtYjBZdEExRG5YaVM5dExHb1Bnek9xcVBwT1pzdGZnaUxNNC9NSzlsL0xUOGpwOVB1NGRYODBjR25oSWUzMHhDSkZWeDBhWiYjeEE7eFZXb2YyVnFQZnRuUGRwZHVpY1RERnlQT1g2bHQ3Tm5Nb2RpcnNWZGlyc1ZTL3pCb0dtYS9wRnhwT3B4ZXJaM0swY0EwWlNEVldVOSYjeEE7bVU3akxzR2VXS1luRTdoWHpYNXgvSWp6cG90ekpKcFVMYXpwdGF4U3dVOWRRZWdlR3ZLdnVsUjh1bWRscE8zTU9RZXM4RXZQbDgwMiYjeEE7eGEwOGkrZXBwL1JqOHY2ajZsUUdEV3N5QlNmNW1aUUYrbk5nZGZnQXN6ajh3bDY1K1hQNUVYa1YxRnFmbXdJcVJFUEZwU2xaT1RBMSYjeEE7SHJzS3B4L3lSV3ZjOWpvZTBlM2dRWVlmOU4rcjlhTGU0NXlxSFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxaGRWMHZUOSYjeEE7VzAyNjB6VW9GdXJDOWlhQzZ0NU4xZU54eFpUOUdLdmpmODB2K2NSL04raTMwOTk1TFE2NW9qRXVscHlWYjJBVit3VllxSmdPeFQ0diYjeEE7OG52aXJ5Y2ZsUithQnVmcW84bzZ6NjQ2cDlRdWRnVFN0ZUZPTmUvVEZYc1A1VS84NGllWnRUdm9OUjg5ajlFYVJHUTUweEhWcnVlbSYjeEE7NFZpaFpZVVA3VlR6N1VIVUt2c095c3JTeHM0TEt6aFMzdExhTlliZTNqVUtrY2FBS3FLbzJBVUNnR0txMkt1eFYyS3V4VjJLdXhWMiYjeEE7S3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4Vi85az08L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5wcm9vZjpwZGY8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDozZjI3M2U1Zi1jMDFmLTRmMTYtYmRhZi05NDUzNmRjMTc5NjM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6M2YyNzNlNWYtYzAxZi00ZjE2LWJkYWYtOTQ1MzZkYzE3OTYzPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjYzOThjOThkLTZkNTYtNGRmOC1hMjAyLWFiMTg4ZDUxMjI0Nzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDo2Mzk4Yzk4ZC02ZDU2LTRkZjgtYTIwMi1hYjE4OGQ1MTIyNDc8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+cHJvb2Y6cGRmPC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6M2YyNzNlNWYtYzAxZi00ZjE2LWJkYWYtOTQ1MzZkYzE3OTYzPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjU0OjI5LTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAC//uAA5BZG9iZQBkwAAAAAH/wAARCABfAFcDABEAAREBAhEB/8QBogAAAQQABwAAAAAAAAAAAAAACgAGBwgBAgMEBQkLAQADAAEDBQAAAAAAAAAAAAAACAkGBQcKAQIDBAsQAAADAwIEAw1tGQAAAAAAAAECAwQFBgAHERITIQi28AkUFSIkMUFFVVZxhtEKFhcYGRojJSYnKCkqMjM0NTY3ODk6QkNERkdISUpRUlNUV1hZWmFiY2RlZmdoaWpyc3R1dnd4eXqBgoOEhYeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1t7i5usHCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+hEAAQICAwQFCA57AAAAAAAAAQIDBBEABQYHEiExEyJBUWEIM3FzgZGSswkKFBUmUlODobGytNHwFhcYGRojJCUnKCkqMjQ1Njc4OTpCQ0RFRkdISUpUVVZXWFlaYmNkZWZnaGlqcnR1dnd4eXqChIWGh4iJipOUlZaXmJmaoqOkpaanqKmqtba3uLm6wcLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oADAMAAAERAhEAPwA/iRQopFCikUKVenXsVMBzfA0utxKJxnExEzlKzOppRUcrA0hTkAj0e6R1E6oioW50EAUVKICU9TEaIZ3Z+wVa1wUvxU4aBnjUDfqHUCDnjEpUhmi+xU2Ft9pQFj7IldXVSpNaV6AResqSWG1YRJ14EiYPISG75QIvVXhwjrlj2xAzsx80LnesWN7sdypiiRxQ4su5HOiQh6qmiKLKtb03FTWCmAzWs0KAYAua5S0N8KlsdZ2qEpEPDIceA046A4s4JEzIknBgkhKRoYTNTq/ut28ta+pcfHuswiiJMQ5UyykAzAvUm+WAcILq3FTllsAlChHy92JrXeDG9XiyPBqqtvLczNzSg2NNXVKutV2lJUq61WWKBzUxhpjBRGuFGWZphYZ5oMOttqZTKSSkFIkJCQIkJDAJZmCmhwEbHMvqiWXnURK53y0rUFKmQTfKBmZnCZkzOE4aWHm2sYc60BtaKD/eKkfw6KqdvbDEa6i75SSolBU7tiIRM8CNJiFCgDULUiFegQpjCeWIV7css3XbRXBNiCjpZVTQAQTmX7XIMuxLxXURAlTfOx91+11SuJarF01hVxIvkvElwDNKHuQ56syROckEk07OJp5+5t542Qowq+SIvxNAy7fCb2FNiiJhImcCKqgxiodN4sZBOQRaGQ66JKoQpzEUESAvtp7E2gso5xcmSYIqkl5E1NKniF9KaVY8qsJUZEgFOEtRZi2tQ2sYC6tdvYu9mplckupzzLEpOLLIKkiYBIVgEzyxKmWUUihRSKFP/9A/iRQpFs408MDTYMpjRC8yqvY6ILMcOu6kan22FOYSpqW7U5CMTKcSmEFmgySRqQwFExwAg61VNQVlXK5QqJMTkXFYEDW5p0EgnCJyGEbYXRLr9iLmcOTaCKCq2UgKbhGZLiXATIG8mA2gyMnHVIQb1QQVLAQeuWdixIx1OKdd3sC6kJwuanTK6HS1LFa25ExSgNxp5kqKraBxA2MSZUUKUQAxDiFOO8Fn7IVXVMnXQH43HfqAkk9QJwgakkqziMQQu6JpQ1sroDq4KDUars4ZgMMrVfuJMuRh4XpcnhyiQhuRkUKIvzWJYt3luAyrFTaWFXOVOHXvMtWYzKZNCEmVOFaK1HSZawwJyplcEmcqcC0nu8tbh0Uy+BanKnFJPJtdjWg8Hc2NTA3sapV2RtYmhVka2ZZMaJFmdpQOmsgqQbsYpgEBlq6YRmJaLEQhK2FiSkqAUkg4wQZgjQNM2qxLrDiXWVKQ6kzCkkgg54Iwg6il9plrH+/YfOyuCeVkaIodFPUiRe60GVKInelSARG4k7UiMbE+2dIxS06pTItYEExxt4UoFNsxa+4JBVglUfY9aYaLlPbOsqLSzPDeLN8psnMBCkTkBkacI3/sxdBjUJTDV4C83iyVIAWM6+SJBQzzgVmm+OPtKgqPYNnGcjPEcERG7Ikc7SQhgancvTKM51CAoDM8GNUEm52NpCjc7O0pJLpjWMQBrSWOuqhrmzsaqrq7hnYaMSTlVjAZGU0KE0rTnLQpSTmE03fhIyFjmREQi0uNHNG9EYwdAgEZ1HdLSKezT//RNHsRU/DXAdJB0ILJpxU1oJtLxehk01wcLEtQMzpoILJqIKPJuIAmATgIIo0DUomOQxM0stZtFZTjo4EwaTJKcV+RjmRhvRoYzgxAgqNpSF36KsAU2LsctKbWPNhbz5AVtlaVhQlKVBSS86MOWBDbclXpUtCkdbDa0tTc0LNja0LtjW0KGVaGpqWUaGhdUw0TqLLqmOqqoYbuYRERlu6ylDaAhsBKAJAASA1AGCk3nY2KjolcZGuuPRbiipa1qK1qJxqUpRKlE5pJJpxKoS1Fo4qalDKpxK4BXrS1Rk0yODUcFODaK1GWsw+ZTLoETlRvNRruH668tehk4qZrV6Jyo22pS715ZBDInKmc1ezOWCjcalaFGvLIYZrFTOavh5yo3WlW7/q+tLXodqmbQMNgFOfgWdGOprX6lEUBxM84deJDoi0AxNBwYXmigoJyMb4dpxMwvdhphEai0EUIAjRAAMACHiruytRWqgDV1fQzUTDEGV8MsgkSKm18hNq6iQQczFMUzWq3ImCcDkMtSFZssR0CMRGgaEDWGqf102IObxKJ0EGZ1xK6WkHRGDgRXqoO57FRIsm2MZFDi1XBXugaqsp1AGgYqqNOodA5xn5dNufxlzy0RqtxSnaseTkkO6RK/bmQUqIyuSNnKrAzCld6lK0gbrVdHJjocOyk4MChnHQ0Dma7Mp//0iQ4tiFriyJX7EjcdRRpfLyam41UEBMkkqoNuzOFC5QTZWYCJEAKxSkAAu0mBgYVEFCNwjcghtAHAnWmZOppDC19pIy19qI+00epSomNilum+xpSpWURnSbReoSBgCUgDAKNg95tWrtL326aQ1jpx6t2HAS99qmsw9OIXvMtWYpk8FjFG+1Dd8AMtdhhipmdXpnKjZbD3fSJZFCpxUz6rG5yo1WxShRrhLJoRucqbhVYxOVGu1q3eWSQrWKm4FWw05YKNxpWu9ehv9qtLIIdnBTOYCFxU4RZa71/rS1lpqmVwsLgGCl1rZ9zmDBM/jM4214MzDD0eQ++3O9lXg2JsbuZWlzu5qiZ1PFZVddBnK0JHdSrIkY4mrNpygFEwCGymlDWW2/Lnyo9htblY1fENONhCSpakuLSw4gAAmRDiXFAS02CTIEHKapSWH5HAlQkdZhHB0af/9MiERvFoJMWBSByRM00Djd7VqtLztinutJw02Co+XL3mhiprUMnDThmk13lq8OMVMpgU4pUbjWa78jLIIROKmcVa3OVGo2qXeWTwaMVNxaqZnKjRbVQr19J1iWVQbWKm5dVQ+KjSbFrvXwksphGsVNx6shcAwUbLUvd69ruJZFDM0z6r4MyGCnBrNFca93lrLTGhTLIWDwYqSnMKtRnZhSvfdstvjASxi6A1Kx8Xu1s5umsNQt6QZU//9QhwTWrVeTIBGGkGEt026h5ewhM6e6y3Tj1j/Wl77SMNNbhmqcK0Hu9q0AS1eHRTKYFo4KNptUoU0sig0Uz2qmTgoz25S77/LLIJvFTc2qIecqM1uWoU1eWWwTWKm6NUQ05GVGc2rXff/rUZZZBs4qbnVVCTAlRrNTRd69rpJZLDMU3Bq+DnLBTgVmiuNfpbV2lrTTGCmYwsFgxUleYFemnchMKN96yy+ZYrdEZlYyMOqtntU1FUHetlUqf/9UhIVJM0EE0hSlnDTbKKXe1atb97CG8wU99lmnGLq1hlqLLdNehGMIz6cG0rXevLWYdrFTLYCGnKjZbVrvv8skg2sVM/qqGxUZzctk61yOsyy2CaxU3PqeGlLBRlN6uTrveek7iWXwLWKm6lTw2LBRmty13wGsyy6CapujVELgAo0mte715ZPCs03Hq2EwDBRvrtFca8tbZYwUzOEgsrhFJZsPiwjPBCIUQvf1sFh9SxK6Q1KxUbg3R2e1T3YqFCYZRlnb2Kf/WIFMpWwtoZNMlsmkPkMzNNoqpWGva/VL2m26akwxhpxTQrrMtSYaw0yGDhpmnAtS1Ya9r9UtchmsIpmVXw2EYKNdtWogNf60slg2sVNwarhsIoz25WjRr6TXllcE1KVNzaohpSwUZjerk61Rll8C3ipunU8PiwUZbcrk6WXQTeKm6VUsYqNJsVG5t/wADaoyyiFbGCm5FWw4wUbq6o0RlrjTYApm0JDCQpLlh4VozxQgFG/gsrPuWHXS0bgiNOqd/DVPZrBgCCWdRvoU//9cjWdKC2ybqOoihNrKapu5uOd2riBqDY52u6l1NZDCJgEyjEqQFAAxqmsU5BERKMmdqGsG65qtmsG8a05YZyxgUNiBlimJHEaSIt9YuJsNbGOs1EA5Gw8S0rc7C8uysY8JbKQqRN6sKQSSk0jNVW7yyFpvXU0GHYw04hda717Wky1ZhqmTQUNio32pa77/a3+WuwzWKmZ1fDYRRsNiuTpZJCN4qbgVXD4sFGk2qXevpMspg28VNyapYxUZzce715ZZBoxU3PqhoYKM9uNd7XcSyuDTipubVSJSo02sbvLJoUSFNxqsSABRur3cZa23TNYSUqdmdssppXlFM9rynWWZ6SH5rnI3M6DYoC5avFcXu9tcjIxMlIqgkvUIeXeCjQJqsVGmRAyYGWTUIquld2zhapsC1Y9tU6yrd9BKRLBDwy0uqUrASJvBlKAL0qkuSiELSrRrXRrbNXCDGnXlDYUkGevvZYp4c4g//0Dd5+piXdPE50V2RdF1Rk50TpuR6risDEugc4qndL3KiRZQWBVQRMRUhDqs6giYoGKJ0z5dZO1T1nIkpcBcq1w5dAlfA4r9E5C+AxgkBQwEggEbN3XrkcBdMq5DzC0w9p4ZJDDyp3ikkzLLwAJyMnCFJSVNqN8kKBWhfU3ODN3Gs2zzO6owcbU61BMIMrYJQaHW8UwKBwVdryRp2NrKJDAJilNVExGlUKU4CUGJqOuKrrxgRFWupcGaMSk6CknCNSRI4wSJEofX9hbS2Mj9u+0UK4w5PKr5CacGe24maFiUiQDfJxLSlQIEWNKt3rja6SWWw7VO6Ch8VG+1K3evLXoZqmaVfD4sFG01qXeWRQreKmeVaxKVGq2Ho00slhEYqbiVY3KVGo2jRojv1rf5ZPCDFTcWq0yAz6NRsCjRlk0IQJU3GqxQAFGu1lu8sjhlUz6r3MVLGWH6weTu2Il4MTQ4nQtDsBqrLpt84r8ZTpuFAjKKya5HSiZRnaokbStKAoVJkpiJrVllESgYxdubo926xdzOFcarB5MVaEJBRBNKBeN9IguGRSwm9N9fOSKk4W0rMgdderqFq9vLm+elgSMetzs/DmYgaEjTMTPwdMVN44pt4IZTpOlzkVVaW5qqR3o/Xu1nqryfj5aUk0gaXi3LUK9ACIokTRSKRFJMhZdW5ttXd0G00Raiv1gxj5AShM8jabSJIaaSSb1CBrVKKnFlS1qUcCjo1+sIlUVEHLqzMwDMA0BvJmThJJ//RP4kUKcLEEOOCK3Wu5YlcztfrqaaAqsD0ZEWxnE5QMBFiEWIaotKNMIpqkpVEzVymAa8vago6Mq6IEVAOrZiE4lIJSdRgxg5oOA4iCKadWlU1ZXcGqr63h2YmCXjQ4kKTPMIBBkoTyqhJSThBBw065Z5rA+3M5Gp+zPthnggQlVVgt8NJCt5Rpxpwcb5WFNnaygQ4UEGsUjlKQwguqcxUw32sldcYUpMHahF4omQfQMru4gTI7GRMTIyiQCqi2WsuBmEUqPsasrZxmGcVlxh5lOmQUM5DkiADxMWSEjraf7tejheTc5n2wNjqeruXOyt7ueDOqyNjIuTJyS7OsUiiZgAQEKIVwEBCiAgMmKq12GjYdEXBrQ7DOJBStJCkqBzQRgNNqWqtiYGJVCxja2oltUlJUClSTnEHCKM1qUo0ZZNDIlTLqvZlKjcaho0Za/DCUqZxV6ZSo3GoKNHf7WAlkEMZSpnVXKCZUcM300c4U8D/AMO3N3DLfEbzIUizWZnqSDA7GVQ9TK1vV5tSiDA7mYT0QKZVQtOIUpQMasPjr+2VnLGVft52kim4aFJkmcytZlO9bQkFa1Z4SDLGZDDTO6sWpXIInTt7sP1s3YCggzBE88qzFONE6dujYjDBUFCQQ5mpPGRRnbEFlKpGNKoAUbekkWM5aJDsqgXOKeXRdKetFXocqqxAXVlVG+SX5gxTqTgBSQJQ2DdNSnQZKDqTgGUJinUIvWzLRzfrU7L2ZmZ2NnZ2NjZ0WVkZUUmZlZWZIiDOzM6BCpIM7OgkUqSKKKRAKQhQApSgAAFCStOuuvuqeeUpby1FSlKJKlKJmSScJJOEk4SaesSSZnHTWl2UKf/SP4kUKKRQopFCkUTqTKTdzxusHfGzkK0tSDOsg7H8wnBiiBzVaiNO73gCagCUig09RXIuzGOFE6RpZRZm2Nf2SidtFTPXralAraVlmnJZi04MzBfJKVgYlCmgV7ZmprRtBus2gp1IIS4nA4ie5VZ08N6oKSTjSadXc5Vs/J1XG0tLRN48XRHzpExBZGRZrZobiQgKKUDJtCD1XScShGZMwUVitxDKgUwgiQRKQWbs1d6stGNpbtA27ARXMSglTzOAYwUAuie5S0QmYF+rCRtVGXM61gXCqrVoiWMwEhC9aFG8wZ4UJy5BGAUr8jYQrES8nk8HQxzeVd4uyhb8z4e2Bk6hTCBQxlViZNBSiI5wMaW4puu3PIWGbi36wvYdzkE5BEmesDJI1oFO6DsvXocLWQcTE4xft4PJ6Wvmntmy0nbGN7zzxQzlYkjprqQfCCiqi7ZSKCa3Z5xI0JIlZGY5UwKqRkQOqcihqm0ImKBx2vtXpSraGVwdi4VWTkECIiAAE4MaGQTfHDNJcUEggXzawSBntV2XcakuPWJblT7FXADWinaLB0FQnN84GOF4KcDuhtwMNOLO7XYhUUqopQFVoXUMJ12trXEAFRZUx1VBCiYwjJXK6ryt7RVguta7iHImsHMa1mZkMQAxJSMxKQEjMApmLbTbKA20AlAzBR0S0qnkopFCikUKf//Z",id:"h",width:87,height:95}))))};var R;function m(){return m=Object.assign?Object.assign.bind():function(A){for(var C=1;C<arguments.length;C++){var I=arguments[C];for(var g in I)Object.prototype.hasOwnProperty.call(I,g)&&(A[g]=I[g])}return A},m.apply(this,arguments)}const c=A=>{let{title:C,titleId:I,...g}=A;return E.createElement("svg",m({viewBox:"0 0 340 51",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":I},g),C?E.createElement("title",{id:I},C):null,R||(R=E.createElement("path",{fill:"currentColor",d:"M77.42 14.44c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26s-8.17-18.26-18.26-18.26zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zm41.27-29.44c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26s-8.17-18.26-18.26-18.26zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zM39.01 14.44c-4.76 0-9.01 2.16-11.83 5.55-2.83-3.39-7.08-5.55-11.83-5.55-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V29.85a8.32 8.32 0 0 1 8.32-8.32c4.39 0 7.98 3.41 8.29 7.72-.01.2-.03.4-.03.6v21.12h7.15V29.85c0-.2-.02-.4-.03-.6.31-4.31 3.9-7.72 8.29-7.72a8.32 8.32 0 0 1 8.32 8.32v21.12h7.09V29.85c-.02-8.51-6.92-15.41-15.42-15.41zm118.09 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V29.85a8.32 8.32 0 0 1 16.64 0v21.12h7.09V29.85c0-8.51-6.9-15.41-15.41-15.41zm172.46 18.27c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c5.04 0 9.61-2.04 12.91-5.35l-5.01-5.01a11.149 11.149 0 0 1-7.9 3.27c-4.94 0-9.12-3.21-10.6-7.65h28.52c.21-1.14.34-2.32.34-3.52zm-18.27-11.18c4.94 0 9.12 3.21 10.6 7.65h-21.2c1.48-4.44 5.66-7.65 10.6-7.65zm-115.77-7.09c-4.21 0-8.09 1.44-11.18 3.84V-.02h-7.09v32.73c0 10.09 8.18 18.26 18.26 18.26 10.09 0 18.26-8.18 18.26-18.26s-8.16-18.27-18.25-18.27zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c-.01 6.18-5.01 11.18-11.18 11.18zm59.53-11.17c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c4.21 0 8.08-1.44 11.18-3.84v3.84h7.09l-.01-18.26zm-18.26 11.17c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zm52.12-22.59v-6.85h-18.28c-5.53 0-10 4.48-10 10 0 4.49 2.99 8.43 7.32 9.64l11.31 3.15c1.51.42 2.56 1.8 2.56 3.37 0 1.93-1.57 3.5-3.5 3.5h-17.69v6.87h17.72c5.83 0 10.56-4.73 10.56-10.56 0-4.74-3.16-8.9-7.73-10.17l-11.3-3.15a2.96 2.96 0 0 1 .8-5.81h18.23v.01z"})))};var N=I(50615),W=I(31792),Y=I(90728),h=I(30658),i=I(33453),n=I(81271),o=I(94141);function p(){return E.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600 star-pattern"},E.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col md:flex-row"},E.createElement("div",{className:"text-center md:text-left md:w-7/12"},E.createElement(n.Z,{icon:E.createElement(a,{height:77}),text:E.createElement(c,{height:70})}),E.createElement("p",{className:"mt-1 mb-0 text-base text-white sm:text-lg sm:max-w-xl sm:mx-auto md:text-xl md:mx-0 md:w-[80%]"},"A service for monitoring codebases, tracking ownership, and scaling CI pipelines."),E.createElement("p",{className:"mt-1 text-white opacity-50 text-sm md:text-base md:pr-4"},"For"," ",E.createElement(Y.Z,{href:"/moon",variant:"muted"},"moon")," ","powered repositories."),E.createElement("div",{className:"mt-3 flex justify-center md:justify-start"},E.createElement("div",null,E.createElement(i.Z,{href:"https://moonrepo.app",color:"bg-teal-600"},"Try it today",E.createElement(W.Z,{icon:t.CSB,className:"ml-1 md:ml-2 inline-block",style:{maxWidth:18}}))))),E.createElement("div",{className:"mt-4 md:mt-0 md:w-5/12"},E.createElement("div",{className:"relative sm:pb-8"},E.createElement(o.Z,null)),E.createElement("div",{className:"mt-2 flex justify-center items-start gap-1"},E.createElement("div",null,E.createElement(h.ZP,{className:"text-white opacity-50 m-0",size:"sm"},"Backed by")),E.createElement("div",null,E.createElement(N.Z,{height:22}))))))}var r=I(83469),s=I(76911),M=I(9187);function T(A){let{children:C,cta:I,items:g,title:e}=A;return E.createElement("div",null,E.createElement("div",{className:"text-center mb-3"},E.createElement(M.Z,{level:4,className:"mb-1"},e),C),E.createElement("div",{className:"bg-gray-50 rounded p-4 lg:h-[260px]"},E.createElement("ul",{className:"flex flex-col gap-2 p-0 m-0"},g.map((A=>E.createElement("li",{key:A.label,className:"list-none relative pl-4"},E.createElement("abbr",{title:A.tooltip},A.label),A.monthly&&E.createElement("span",{className:"text-gray-700 inline-block ml-0.5"},"/ month"),E.createElement("div",{className:"absolute top-0 left-0 text-blurple-400"},E.createElement(W.Z,{icon:r.LEp}))))))),E.createElement("div",{className:"flex justify-center mt-2"},E.createElement(s.Z,I)))}function S(){return E.createElement("div",{id:"pricing",className:"relative py-4 sm:py-5 lg:py-6 bg-white text-slate-900"},E.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},E.createElement("div",{className:"text-center mb-4"},E.createElement(M.Z,{level:2},"Pricing"),E.createElement("p",{className:"mt-1"},"Use moonbase for free for small, personal, or open source projects.",E.createElement("br",null),"Upgrade for more features or for larger teams.")),E.createElement("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3"},E.createElement("div",null,E.createElement(T,{title:"Start",items:[{label:"1 organization member",tooltip:"Maximum number of members per organization, including the owner."},{label:"5 repositories",tooltip:"Maximum number per organization."},{label:"100 CI runs",monthly:!0,tooltip:"Across all repositories."},{label:"1GB cloud storage",tooltip:"Across all repositories."}],cta:{href:"https://moonrepo.app",label:"Get started"}},E.createElement(M.Z,{level:1},"Free"))),E.createElement("div",null,E.createElement(T,{title:"Scale",items:[{label:"Priority support",tooltip:"Get faster replies to support questions."},{label:"5 free repositories",tooltip:"Increased cost for additional repositories."},{label:"1,000 CI runs",monthly:!0,tooltip:"Across all repositories."},{label:"10GB cloud storage",tooltip:"Across all repositories."},{label:"Unlocked organization settings"}],cta:{href:"https://moonrepo.app/upgrade",label:"Upgrade now"}},E.createElement("div",{className:"flex justify-center gap-2"},E.createElement("div",null,E.createElement(M.Z,{level:1},"$5")),E.createElement("div",{className:"text-left"},"per member + repo",E.createElement(h.ZP,{className:"m-0",variant:"muted"},"monthly"))))),E.createElement("div",null,E.createElement(T,{title:"Grow",items:[{label:"Enterprise support",tooltip:"Get instant replies to support questions."},{label:"15 free repositories",tooltip:"Increased cost for additional repositories."},{label:"Unlimited CI runs",monthly:!0,tooltip:"Across all repositories."},{label:"Unlimited cloud storage",tooltip:"Across all repositories."},{label:"+ previous tier"}],cta:{disabled:!0,label:"Coming soon"}},E.createElement(M.Z,{level:1},"Soon")))),E.createElement("div",{className:"mt-6 text-center"},E.createElement(h.ZP,{className:"mb-1",size:"sm",variant:"muted"},E.createElement(Y.Z,{size:"sm",href:"https://moonrepo.app/terms"},"Terms of Service")," \xb7 ",E.createElement(Y.Z,{size:"sm",href:"https://moonrepo.app/privacy"},"Privacy Policy")),E.createElement(h.ZP,{size:"sm",variant:"muted"},"Prices and limits subject to change before release!"))))}var k=I(64654);const b=[{title:"Artifact caching",icon:t.wEO,description:"Cache build artifacts between CI runs to reduce job times and overall costs."},{title:"Run history",icon:t.cp3,description:"Track CI runs to detect flakiness, regressions, and time spent on task execution.",status:"new"},{title:"Remote distribution",icon:t.fjp,description:"Distribute task execution across multiple remote agents to increase throughput.",status:"coming-soon"}],G=[{title:"Project registry",icon:t.HX7,description:"An aggregated registry of all projects, across all repositories, within an organization.",status:"in-development"},{title:"Code owners",icon:t.h94,description:"A granular breakdown of which team or developer owns a portion of code within each project.",status:"coming-soon"},{title:"Health score",icon:t.AKf,description:"Monitor the health of projects and avoid tech debt.",status:"coming-soon"}];function J(){return E.createElement(k.Z,{title:"moonbase - A service for monitoring codebases and scaling CI pipelines",description:"Reduces job times, tracks CI jobs, manages project/code ownerships, and more."},E.createElement(p,null),E.createElement("main",null,E.createElement("div",{className:"bg-gradient-to-b from-slate-600 via-teal-800 to-white"},E.createElement(Z.Z,{header:"Continuous integration",description:"Highly efficient pipelines",features:b,tier:3}),E.createElement(Z.Z,{header:"Ownership",description:"Everything in one place",features:G,tier:1,reversed:!0})),E.createElement(S,null)))}},9619:(A,C,I)=>{I.d(C,{Z:()=>Q});var g=I(27378),e=I(40624),U=I(31792);const F={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function Q(A){let{className:C,icon:I,text:Q,variant:l}=A;return g.createElement("span",{className:(0,e.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?F[l]:"bg-gray-100 text-gray-800",C)},I&&g.createElement(U.Z,{icon:I,className:"mr-1"}),Q)}}}]); \ No newline at end of file diff --git a/assets/js/d7cb860d.5a966fe0.js b/assets/js/d7cb860d.5a966fe0.js new file mode 100644 index 00000000000..42e85cf20d0 --- /dev/null +++ b/assets/js/d7cb860d.5a966fe0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45048],{59220:(A,C,I)=>{I.d(C,{Z:()=>U});var g=I(27378),e=I(9619);function U(A){let{className:C,status:I}=A;switch(I){case"experimental":return g.createElement(e.Z,{className:C,text:"Experimental",variant:"failure"});case"in-development":return g.createElement(e.Z,{className:C,text:"In development",variant:"success"});case"coming-soon":return g.createElement(e.Z,{className:C,text:"Coming soon",variant:"warning"});case"new":return g.createElement(e.Z,{className:C,text:"New",variant:"info"});default:return null}}},33453:(A,C,I)=>{I.d(C,{Z:()=>F});var g=I(27378),e=I(40624),U=I(81884);function F(A){let{children:C,href:I,color:F}=A;return g.createElement(U.default,{href:I,className:(0,e.Z)("inline-flex items-center justify-center px-2 py-1 sm:px-3 sm:py-2 text-base font-bold rounded-md text-white hover:text-white hover:scale-105 md:text-lg transition-transform",F??"bg-purple-600")},C)}},75969:(A,C,I)=>{I.d(C,{Z:()=>E});var g=I(27378),e=I(40624),U=I(31792),F=I(9187),Q=I(30658),l=I(59220);const B={1:"from-purple-600 to-blurple-600",2:"from-pink-400 to-red-400",3:"from-teal-400 to-slate-100",4:"from-yellow-300 to-green-600"},V={1:"text-blurple-300",2:"text-pink-500",3:"text-teal-600",4:"text-green-600"};function E(A){let{header:C,description:I,features:E,reversed:t,tier:Z}=A;return g.createElement("div",null,g.createElement("div",{className:"relative py-4 sm:py-5 lg:py-6"},g.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},g.createElement("div",{className:(0,e.Z)("md:flex items-center justify-between",t&&"flex-row-reverse")},g.createElement("aside",{className:(0,e.Z)("md:w-1/3 mx-2 md:mx-0 p-2 sm:p-3 md:p-4 drop-shadow z-0 rounded-t-lg text-center",t?"md:rounded-tl-none md:rounded-tr-lg md:rounded-bl-none md:rounded-br-lg bg-gradient-to-bl md:pl-0 md:text-left":"md:rounded-tl-lg md:rounded-tr-none md:rounded-bl-lg md:rounded-br-none bg-gradient-to-br md:pr-0 md:text-right",B[Z])},g.createElement("h2",{className:(0,e.Z)("m-0 px-1 py-0.5 inline-block text-base font-semibold uppercase tracking-wider text-white bg-black/20 rounded",t?"md:rounded-tl-none md:rounded-bl-none md:pl-4":"md:rounded-tr-none md:rounded-br-none md:pr-4")},C),g.createElement(F.Z,{className:(0,e.Z)("mt-2 text-white",t?"md:ml-4":"md:mr-4"),level:2},I)),g.createElement("section",{className:"md:w-2/3 bg-white rounded-lg p-2 md:p-3 lg:p-4 drop-shadow z-10"},g.createElement("ul",{className:"m-0 p-0 list-none grid grid-cols-1 sm:grid-cols-2 gap-2 md:gap-3 lg:gap-4"},E.map((A=>g.createElement("li",{key:A.title,className:"flex"},g.createElement("div",{className:"pt-1 w-9 shrink-0 grow-0"},g.createElement(U.Z,{icon:A.icon,className:(0,e.Z)("text-5xl justify-center flex",V[Z]),style:{maxWidth:54}})),g.createElement("div",{className:"ml-1"},g.createElement(F.Z,{level:4,className:"text-gray-900"},A.title),A.status&&g.createElement("p",{className:"m-0"},g.createElement(l.Z,{status:A.status})),g.createElement(Q.ZP,{className:"mt-1 mb-0",variant:"muted"},A.description)))))))))))}},81271:(A,C,I)=>{I.d(C,{Z:()=>e});var g=I(27378);function e(A){let{icon:C,text:I}=A;return g.createElement("h1",{className:"text-white flex justify-center md:justify-start items-stretch gap-3",style:{height:85}},g.createElement("div",{className:"relative"},C),g.createElement("div",{className:"relative"},I))}},94141:(A,C,I)=>{I.d(C,{Z:()=>e});var g=I(27378);function e(){return g.createElement(g.Fragment,null,g.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1"},g.createElement("img",{src:"/img/home/org.png",alt:"moonbase - organization view",className:"block"})),g.createElement("div",{className:"overflow-hidden rounded-lg w-[100%] sm:w-[65%] md:w-full lg:w-[75%] bg-[#000e19] p-1 absolute bottom-0 right-0 z-10 hidden sm:block"},g.createElement("img",{src:"/img/home/repo.png",alt:"moonbase - repository view",className:"block"})))}},10052:(A,C,I)=>{I.r(C),I.d(C,{default:()=>J});var g,e,U,F,Q,l,B,V,E=I(27378),t=I(21947),Z=I(75969);function d(){return d=Object.assign?Object.assign.bind():function(A){for(var C=1;C<arguments.length;C++){var I=arguments[C];for(var g in I)Object.prototype.hasOwnProperty.call(I,g)&&(A[g]=I[g])}return A},d.apply(this,arguments)}const a=A=>{let{title:C,titleId:I,...t}=A;return E.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",fill:"none",viewBox:"0 0 83 85",role:"img","aria-labelledby":I},t),C?E.createElement("title",{id:I},C):null,E.createElement("mask",{id:"a",width:74,height:74,x:0,y:11,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},g||(g=E.createElement("path",{fill:"#fff",d:"M36.67 84.49c20.252 0 36.67-16.418 36.67-36.67 0-20.252-16.418-36.67-36.67-36.67C16.418 11.15 0 27.568 0 47.82c0 20.252 16.418 36.67 36.67 36.67Z"}))),E.createElement("g",{mask:"url(#a)"},E.createElement("mask",{id:"b",width:84,height:84,x:-5,y:6,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},e||(e=E.createElement("path",{fill:"#fff",d:"M-5 6.15h83.35V89.5H-5V6.15Z"}))),U||(U=E.createElement("g",{mask:"url(#b)"},E.createElement("path",{fill:"url(#c)",d:"M-5.15 6.1h83.52v83.52H-5.15z"})))),F||(F=E.createElement("path",{fill:"#5341D6",d:"M68.2 39.62V26.43c0-1.55-.83-2.98-2.17-3.76l-11.43-6.6c-1.34-.77-3-.77-4.34 0l-11.43 6.6a4.342 4.342 0 0 0-2.17 3.76v13.19c0 1.55.83 2.98 2.17 3.76l11.43 6.6c1.34.77 3 .77 4.34 0l11.43-6.6a4.355 4.355 0 0 0 2.17-3.76Z"})),E.createElement("mask",{id:"d",width:32,height:36,x:51,y:0,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},Q||(Q=E.createElement("path",{fill:"#fff",d:"M82.6 24.81V11.62c0-1.55-.83-2.98-2.17-3.76L69 1.26c-1.34-.77-3-.77-4.34 0l-11.43 6.6a4.342 4.342 0 0 0-2.17 3.76v13.19c0 1.55.83 2.98 2.17 3.76l11.43 6.6c1.34.77 3 .77 4.34 0l11.43-6.6a4.335 4.335 0 0 0 2.17-3.76Z"}))),E.createElement("g",{mask:"url(#d)"},E.createElement("mask",{id:"e",width:42,height:46,x:46,y:-5,maskUnits:"userSpaceOnUse",style:{maskType:"luminance"}},l||(l=E.createElement("path",{fill:"#fff",d:"M46.08-4.32h41.53v45.06H46.08V-4.32Z"}))),B||(B=E.createElement("g",{mask:"url(#e)"},E.createElement("path",{fill:"url(#f)",d:"M45.73-4.46h42.24v45.6H45.73z"})))),V||(V=E.createElement("defs",null,E.createElement("pattern",{id:"c",width:1,height:1,patternContentUnits:"objectBoundingBox"},E.createElement("use",{xlinkHref:"#g",transform:"scale(.00575 .00578)"})),E.createElement("pattern",{id:"f",width:1,height:1,patternContentUnits:"objectBoundingBox"},E.createElement("use",{xlinkHref:"#h",transform:"scale(.0115 .01053)"})),E.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E6smh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gSWNvbjwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1NDoyOS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjU0OjI5WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTQ6MjktMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD40NDwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFDd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FQVk9Lb2UrMUxUN0NMMXI2Nml0WXV6eiYjeEE7T3NhL2V4R1dZOE04aHFJTWo1YnFsOEhuTHluUElJNHRZczJrUDJWOVpBVDhxbk1pWForb2lMTUpmSXFsbXVlY0pZbmVDd1VBb1NHbiYjeEE7WVZyVCtVZFB2eVdEU2c3eWRGcU8xanhHT1BwMVcrWHZPLzF5OGkwKytqQW5sSldLZFBza2dWb3k5dm95elVhRGhpWng1QjJPbDFFcCYjeEE7ajFjMlc1clhNZGlyc1ZkaXJzVlVieStzcktFelhseEZiUWpyTE02eHIvd1RFREo0OFVwbW9naytTcFpGNTA4b3l5Q09QV2JNdTNRRyYjeEE7WkJYN3ptVExzN1VBV1lTK1JWQWE1NXZNRFBCWUJXWmRqY0doWC9ZanY4OE9IUzM5VHBkVjJyVXpDQTNITW9YUXZQVFRYY05qcUNBeSYjeEE7VE9JNHAwMitKalJReSs1N2pMOC9aOVJNbzlITTBtcGxNZXBtV2F0em5ZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcW9YMSYjeEE7L1kyRnJKZDM5ekZhV3NRckxjVHVzY2FqeFozSVVZcXhWZnpsL0tacHZSSG5EU09mTGpYNjdCeHIvcjh1UDAxeFY1aCtkdjhBemxMWSYjeEE7K1VidDlBOHB3dzZyclBwSkpKcUx1SHM0Uk1nZE9Jak5aWDRNRzZoUlVkZHhpckJQeXovNXpIMXlDK1N4OCsyNlgxalBJQitsYlZGaCYjeEE7bWdER2xYaVdpU0l2WDRhTVA4cnBpcjZRL01QenZGNVcwa1BFRmsxSzZKU3poYm9LZmFrWWZ5clg2VG0wN0s3T09weVVkb1I1L3FWOCYjeEE7K2Fwck9vNnJlUGVhamNQYzNEOVhjMW9QQlIwVWV3enZzT0NHS1BEQVVFcEZxT29USklZWWp4b0JWdSsvaGtwRmlTOWUwclZyUyswYSYjeEE7Mmx0cFJJb2lSWG9RU3JCUlZXSFlqT1JuZ2xISVFSMWVVR21sSEtiNzB4OHBXdDVkZVpyT1NHSm5pZ2ZuTklBZUtnQTlUNzlzbnJKUiYjeEE7amdrQ2R6eWVrMHVNQ0wxek9XY2gyS3V4VjJLc2M4OStjYmJ5dm9yWGJBU1hreE1kbEFlalBTdkp1L0ZlcCs3dm13N04wQjFPVGg1UiYjeEE7SE1xK2Q5YTh3YXJyTjQxNXFWeTF4TTFhY2o4S2cvc29vMlVld3owRFQ2Ykhoand3RkJLUTZqcUVzVENLTFlrVkxkOS9ETFpGaVM5ViYjeEE7OHRhdGFYZmx5eDlDVVNQQmJ4eFRMWDRsZEVDdHlIWHFNNVBVWUpSelNzY3lTOHRsMDBobWxZNXlKK2FZK1g3YTh2UE1WajlYamFSWSYjeEE7YmlLV1pnTmxSSERFc2Uyd3lXb2xHR0dWbm1DOUJwTVlBZXg1eWpsT3hWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLc2EvTWJ6NSYjeEE7cFBrWHloZmVaTlRxOFZxb1dDM1VnUE5PNTR4eExYK1p1cDdDcDdZcS9Qejh3L3pRODRlZnRXYlVQTUY2MGtZWW0xc0l5VnRyZFQreiYjeEE7RkhXblRxeHF4N25GV2EvODQ0L2t0cG41bDZ6cWNtc1hVa0drYUlzRFhGdkJSWlozdVRKd1FPUVFxMGhia2V2U25pRlVQL3praitXeiYjeEE7K1R2ekN1bTAzU0RwL2xXNmp0djBSSkdybUQ5M2JSeHlwNmpWL2VlcWpNd0xjalhrZXVLdk9mTG5sclhQTW1zVytrYUpaeTMyb1hMQiYjeEE7VWhpVXRRRWdGM29EeFJhL0V4MkhmRlgxeCtkZXF5VCtlcDdWbVBDeGhoaVJldzVvSmoveWN6dSt3TVlqcGdmNXhKL1IraExBVGNqeCYjeEE7emRxZ2J4R2VReURjRUN2dFRJRmpJTjZiY2FqYnplcFpTdkE1MloxSkFwNEh4eUVzWWxzUmJXWUNYTjlRL2xEZlMzbmtlMGVYNHBJNSYjeEE7Sm8yZWxDMUhKQlB2UTB6aHUzTVlocVRYS2g5emJWTXp6VUs3RlhZcTdGWGdmNThhckpKNXN0N0lzZlN0TFZTcWRnOHJNek45S2hmdSYjeEE7enR2WnpHQmdNdXNwZmNsNW9iZ2VPZEFxQ3ZWYVIvVVhjVW9SM3lKWXlDMndtdm9KeExaeVBES051YUVydDRISzVRRWhSRnNEQVM1diYjeEE7cGY4QUpQVUo3M3lhNW5ibkxiM2NrSmxwOFRmQWtsU2Uvd0RlVXppdTM4UWhuRmRZajlJL1F6QUEyRFA4MGlYWXE3RlhZcTdGWFlxNyYjeEE7RlhZcTdGWFlxN0ZYWXE3Rlh5cC96bkJybHh6OHJhRWprVzVGemZUeC9zczQ0UlJINXFESi93QUZpcjVXeFY3bC93QTR0Zm03NVg4ZyYjeEE7NnpyRmw1alo3ZXgxMWJZSnFDcVhTR1MyTXRCSXExYmc0blB4QUdsT2xEVUt2cW56eitZMzVVV0hsTnJ2ekxxVmhmYUhmeC91N1dzZCYjeEE7NTliVTdnUndyejlUdHZTZzdrWXE4dy81eEw4d2FOcTJwL21CK2hOTGowdlJ4ZlcxMXA5dUZYMUk0Ymhaa1dOMkZUc0xjTnhxUUNUVCYjeEE7RlcvK2NnOUd1TEh6UkJxNFVtMTFHRlZNbllUUWppVi80RGlSOVBobmFlejJvRXNKaDFpZnNLUThwK3RiN25PZ3RLb2x4NzQyaEVSeiYjeEE7MXdxK3FmeXowT2ZSdkpXbldsd3BTNmREY1RxZGlyVE1YQ2tlS3FRRG5uZmF1b0dYVVNrT1hJZkJES00xeXV4VjJLdXhWNE4vemtYbyYjeEE7MXhCcXVuNjZpazJ0eEQ5VW1ZZEZsakxPdFQvbHF4cC9xNTEvczVxQVlTeDlRYi9INDZwRHhyNjF2MXpwYlNxSmMrK05vUkVjK0ZYMCYjeEE7NytUK2lUNlY1SHRmckNsSjc1MnZIUTdFQ1FBSlg1eG9wemdPMjlRTXVvTmNvK241ZnRRelhOU3JzVmRpcnNWZGlyc1ZkaXJzVmRpciYjeEE7c1ZkaXJzVmRpcjV0L3dDYzFmS0YzZmVXdEU4MFcwYlBIbzgwbHRmY1JYakZkOFBUa2J3Q3lSOGZtNHhWOGU0cTdGWFlxKzBmK2NNdiYjeEE7SjkxcFhrWFV2TU4waGpiekJjcDlXQkZDMXZaaGtWL3Bra2twOHNWZTJlYXZLK2srWjlGbTBuVTBMVzh2eEk2N1BISVBzeUllekxYKyYjeEE7QjJ6STB1cG5nbUp3NXErYS9OdjVIZWV0RXVaR3NiVnRZMDhIOTFjV2c1U1U3QjRLbHdmOVdvOTg3TFM5dDRNZzlSNEplZjYwMngreCYjeEE7OGhlZTdtYjBZdEExRG5YaVM5dExHb1Bnek9xcVBwT1pzdGZnaUxNNC9NSzlsL0xUOGpwOVB1NGRYODBjR25oSWUzMHhDSkZWeDBhWiYjeEE7eFZXb2YyVnFQZnRuUGRwZHVpY1RERnlQT1g2bHQ3Tm5Nb2RpcnNWZGlyc1ZTL3pCb0dtYS9wRnhwT3B4ZXJaM0swY0EwWlNEVldVOSYjeEE7bVU3akxzR2VXS1luRTdoWHpYNXgvSWp6cG90ekpKcFVMYXpwdGF4U3dVOWRRZWdlR3ZLdnVsUjh1bWRscE8zTU9RZXM4RXZQbDgwMiYjeEE7eGEwOGkrZXBwL1JqOHY2ajZsUUdEV3N5QlNmNW1aUUYrbk5nZGZnQXN6ajh3bDY1K1hQNUVYa1YxRnFmbXdJcVJFUEZwU2xaT1RBMSYjeEE7SHJzS3B4L3lSV3ZjOWpvZTBlM2dRWVlmOU4rcjlhTGU0NXlxSFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxaGRWMHZUOSYjeEE7VzAyNjB6VW9GdXJDOWlhQzZ0NU4xZU54eFpUOUdLdmpmODB2K2NSL04raTMwOTk1TFE2NW9qRXVscHlWYjJBVit3VllxSmdPeFQ0diYjeEE7OG52aXJ5Y2ZsUithQnVmcW84bzZ6NjQ2cDlRdWRnVFN0ZUZPTmUvVEZYc1A1VS84NGllWnRUdm9OUjg5ajlFYVJHUTUweEhWcnVlbSYjeEE7NFZpaFpZVVA3VlR6N1VIVUt2c095c3JTeHM0TEt6aFMzdExhTlliZTNqVUtrY2FBS3FLbzJBVUNnR0txMkt1eFYyS3V4VjJLdXhWMiYjeEE7S3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4Vi85az08L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5wcm9vZjpwZGY8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo2Mzk4Yzk4ZC02ZDU2LTRkZjgtYTIwMi1hYjE4OGQ1MTIyNDc8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NjM5OGM5OGQtNmQ1Ni00ZGY4LWEyMDItYWIxODhkNTEyMjQ3PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmYwY2NlMTNhLWUxYTQtNDA1NS1iMDI1LWZmMGI2YTFiMjZiOTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpmMGNjZTEzYS1lMWE0LTQwNTUtYjAyNS1mZjBiNmExYjI2Yjk8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+cHJvb2Y6cGRmPC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjM5OGM5OGQtNmQ1Ni00ZGY4LWEyMDItYWIxODhkNTEyMjQ3PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjU0OjI5LTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAFv/uAA5BZG9iZQBkwAAAAAH/wAARCACtAK4DABEAAREBAhEB/8QBogAAAgEEAgMAAAAAAAAAAAAACgsIBQYHCQAEAQIDAQACAgMAAwEBAAAAAAAAAAAACgMEAQIJBQcIBgsQAAAEAgIFCQcGfwAAAAAAAAECAwQFBgAHCBESE2EJFBUWMUFRkfAhInGBscHxChcYodHhGRojJCUmJygpKjIzNDU2Nzg5OkJDREVGR0hJSlJTVFVWV1hZWmJjZGVmZ2hpanJzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+hEAAQIDAgQEAQqHAAAAAAAAAQACAwQRBQYHEhMhCBQiMVEJFRcjMkFCRGFiChYYGRokJSYnKCkqMzQ1Njc4OTpDRUZHSElKUlNUVVZXWFlaY2RlZmdoaWpxcnN0dXZ3eHl6gYKDhIWGh4iJipGSk5SVlpeYmZqhoqOkpaanqKmqsbKztLW2t7i5usHCw8TFxsfIycrR0tPU1dbX2Nna4eLj5OXm5+jp6vDx8vP09fb3+Pn6/9oADAMAAAERAhEAPwA/ighcoIXKCFyghcoIXKCFrXsi8VUsVbH96vLjOYHtcE6tlFEHkv1WmhsZhsGcJgYBTj84OXzWWmyhFkzoqt2az9+2WLcrN0w1tPqTBjoQsL2EeXbacaWh2JYLgC2NP48J8UHb4Ms1jo7gQQ5r4jYMJ7TWHFdrLYNJWm+uDFrbJud3JkaqILKFSUIBO0kZBkxrEmgVRdIrCo4jM2QgJdVTBuheSkJBUhAqqphMYwpCh9wXJ0COCiwIWPfGPO29OVz1c+SgUxSKCFLxMsDjHGJM07O1gAAxw/YMG3rXBWLZIV/VuGW3cquWsicmy6Z0TQuNTfGl4Emiqi0RcJNZeI7TgbNN2VgiK5UW5AXUTA6l0e2YfqK7GC/BxcwN3lWw7LkYrSDlIUtCEUkFxBdGxTFcW47g0uecUHFbRuYbUAWFKfvFlcoIXKCFVYNH43Lb0sTl6NRWAxEiaiJYhBoi8hb0qKoWlUiu2KyC4JqgFoxQNaNn0pT9n2facDSlpQIMzLEg4kVjYjKjWOK4EVG3GmZCmRVxiklmtVisQ0Kr6m+Zmd8E7iHVkKNayEXZRMJxRO/nJvF441TE2e1dtzgAXIGAtsB9HXn0LuAi9bCJy7slKR6UD5IOki3bqhksYcJx6aQ3jbyK5xqWgratUdi6UJeLNoVZFVRqQcVVCEUnKqZwo/hyIqmbpAZ3JEzxAYk1ZNRFRVVZCMPVxJaKm2MYts/yBf8A2T8nIDHzmDK2hHABIlrQaGPNKnUzUBmI5ztS1rXy0Jlc7ooB1OpZsFuoqZsh6k7IWCKTBU1WPLs9sG9rHyENWcM43CrswlTyalmLt4dMcEvwhwTx20Rvga0tsNbT4Tvzgzv5g1nxZt+LLmrPmHbYLwHQomxyUeG58CLTb8nEdTb6LUgjXWZ6fhlhcoIXKCFyghcoIXKCF//QP4oIXKCFyghcoIUNbLWzkqSsQZexxPETUmCfIkycryrVjLiiK8yxtZO8kSXiSprpnKsBvrkgqPXolE6RVRaou1kxQH3hgawAX8w1WlkrAhCWu9CiNExPRwRAhA1JDBtqYjUaQ2FCrRxZlnwWOygyAShcLLDFELIOyvcPYPHo3lIquUcEWY1XSksZtBxKmQUyHmSMAk3jM3uDhaOYrs+MSKhdoNUBt2+tuB3Q0YNsD0OHO2dA0/e0No+fmBjRM5qRAh1MKWbtwMMZUt1MSLEGtIGgdJUDqfQqyvNBC83Qhn7ehRZXm7NsdWyoUQuXY4KYohetsdEaZoELxQWFyghcoIVzyfOs31ezDD5skWZ49J8zQpS+w6PS3FXsGirQ2sugRfMFkFwTVALRyXQkULrpgEBEB8VbdhWLeSzYlj3glJedsqMKPgx4bYsN3SWPBFRrg0qDnBBQt/Vh9i0KwGgdXtlnDkzkMo3hrauqXWZkzJI3lJJJzP8AKrRNUF1BXAwrRCFETACGIAsREqixucuGzQMQ6TF5MDkUh1C91lxnVBNSS2TmHEUFKYsGYLs4NJihbDGhZsEQfLkxwCb4BB5plaMQ6YJbmCHNIvA45CHaL+GRWGP0SOGb5i8bnOi4bOETgYpiiICA05tWnZlo2LaMeyLXgRZa1JaK6HFhRGlkSHEYaOY9poQ4EUIK0VapRQuUELlBC5QQv//RP4oIXKCFyghacsUPxUKAWPTeIVS1DxSCzVXmLlRjMEXvaMYlyqsjc5Su0okma7YRidDnAyKcOETpsTlOo9ADEI2X+29DToTbRwlRYd8cIUKPJ4P8UOgw6mHHnyRqSw5nw5UZnGNmMUFrYBIc6LD2a2uc6yFfmycZqnyY4tN87zFGptmmOuQdxmYZhiTuLxiJOCpJN01HcQeqrOVry2RIkmAmuU0iFIUAKUADrnY9iWRd6y4Ni2DKwJOyJduLCgwWNhw2CpJDWNAaKuJcTSpcS41JJMioN0GjTyVSsrlsNENOma7ohebdCoQuWwoVQvFsNEKFULzbDRChVC8Ww0QoVQuWw0QoVQuWw0Q06FULl0GiG1oVKF4uw2OrZUxnKF6Ca3rA1gUyAhT0sI7Pqs+w6mlBqgq9nGpyKvV15tqxcvry2v70jVFaZZVcrEWJBZnbEaJ2xtY3epEFJcoCKS6Hzxh60Ot08NtkOixBDkb7wYYEvPNZV1GlxECYaCDFgOLnbfjwnHHhmmPDiakV6SjAKj68KuLIiriA1p1WR5OOSxHExIYpwIhFoFFkCJGiMuzFDiqrHhUehR1ilWRMYxTFMRVI6qCqSp+K9/rg3nwaXnmLo3tlzL2tLnbqmHFhknEjQX0AiQYgBLXAAghzHtbEa9jYiKLLdPxqFyghcoIX/9I/ighcoIWnTFP8UVaWOkDitRNVDpRxXnNcAMSLR1uq5bI1Uy9HWZyIRhF43OgqpPEQZqipC0kjhjEBK8WG0DdFz9saFDQ0RcJloQcIF8GBtwJOYrDhODXG0I0JwJhlrgQJVjhix3OG1ueAwcJHwtmtrn25CdKuFXKqrhwqos4XUOsussc6qqyyphOoqqqcTHUUUOYRMYwiIiNsadhWQ2wmCHCAbDaAAAKAAZgABmAA1gFKvW3TfG2KF5oYwQuUMYIXi2AUzVC5bDRChVC5dBohp0xU7BC5dBohp0KnYIXLelQxkLluhjIXmhjBC5TOMELlCoQvFMYyFymMZCmLYX2ZlYNhzWa2meXl3MYkKPOWLOsqr9RYcj5ngiKwgZ2yTUUIiwmuDorKHhz0BKJDmMkrdt1Vkz+ksOWA+7eG26rrKtJrYF4Zdr3SM4Bq4EUjbLiAS+XiENEaFnqAHsxYrGPbgiqNMqsrTkOumQ5drLq0mJlNEmzQyK9hcUZGMAgIGFN0wftVAI5hsWhrkhkHTVcpF2y5DJqFKYohThje66N4bi3hmbrXplokpbcpExYkN3cWvY4al8N7aOhxGksewhzSQQVCRRZBp+bQuUEL/9M/ighQ6s47LKXrD+oyM1gvQTiE5RtRWVqspcHXzRicnrF0u1dPEwAwpwCAINzvHyprkgkTI3AwLuECm914BMD9pYaL/QLuQKw7EgAR56NyjlmvaHNadvjRiRDhNFTUmIRk4cQjIFSgipunGY5/mqY53nGLOI7NU2xqJTFMMZdgkVxE4xF3ar1+7UTbpIt0L84WMIJpEIkmW0UhSlACh3hsWxbMu7ZErYNiQWy9kScBkGDCbWjIcNoaxoJJcaADO4lxOdxJJJmVvXQaIU8pqkLl0GiGnQqULzdBohp0KnYIXi6DRChUoXi7Lo0KlC5dhQzoXi+BhoZ9iELzdhsNWzoZ0Ll2Gw1bOhnQvN2XRoVKF5AwZwhraFShebodEdOhUbBC5dDojp0KhC83Q6I0KhC8Wx0RoVCF4oYyFtpxKuzic2OFaCNU9YEYULUlWnFmbRdR6q6XbSFOri2yhUzMUzOis4dCYyqqk1jJ70Iikmg4EwA1MU/xzoucAsLCddR18LuwBvPdkwXOAaGh03KjVRIDji4z4kIBz5YY22jEhgExQW6ubUV29F404yqJcoIX/9Q/ighBNYpPZYr2VVkhMESgj9JzVbVwo+kSq8rU5lGkShLB4YsYnMD3wya6k6RdEzpFQCImCGEZpKEviJjm7p6GDBCzBHgylpWehlt7LTDZuexhRzIj27Vy2tUCWhkQ3Alwy5jvacV4AlaKDdVr+uww0+jFsvN2XR2tCpQuXZdHa0KlC8XYaA0ELxfMG90ELxfBwUxmQvF9wloIXL5hDeqZqheb4OCmKhC5fBwUELzfMG90yheb4GgNDpCF7AcNG1q0qFShe90OjvdCqF5uzUMyF5vg6AUMyFy+DoBQzIXqJhHfKZqBrIRimJPWWruyRsfglGcopj+tGpTImUo85crqrRKYpTOyvUmTW+WcqrOXsRdNmC7J8ucx1FnbMy6g3TgLfFPRf4HYODHCNs82JCyd07dykxCa0AMgzGNWZl2BoDWsa57YsJgAa2HEENopDNInCh3RbTafJa1X/9UtLFWbIhxY/WIk4lgMTyOnitlyjVTKiqChMfNG8wtnS04xdumVdF43xjJrN6ii8R15nEXbQ9sDCQB+nNCRg4h4RMMckbQhZWwbHaZ+YBBxXGC5oloZNC040y6E50N2aJBhxhnANNmipQWYHtZhgp3BUy9rscFCu6rC5fBwUKoXgVcIbLUNCqF63zpagheoqbEdjqGhXpCyvW+YN7oVQvF9DBp0M6Fy+4S0x3FC5fdhTNUL2vmDe9+piqF5vux06Z7ghe4K9LaesoLC9wU2AhgpmqF7XYbCghe4HHONb3uhVC9wOOeFveqZQvN8wb3QQuXwNCghTsxOGyO3jZZXVezPFXrlpIs4OTVc1hJontIZX5sURaMou7LcKiZtK0yFYxNW9kMuZu0VTT15S0Pz/omsGm0oYIrSsqUhtfb8k3TsmSM+WlwXOht1tVHg5WA2pDQ+Ixzszc2rhUI3qnCBRL//1tleLlV4PpyslZYqWau0srtSsnM3TtkQABbLtWK3ZTBFXDtUohfUiykhBCt0zAIoCZYxRtLiAdd9AfcaXsTBlNX3isOzlbk65rXHW0tJl0GGGjbjpgzJeRtqjARtWCZWDNVaTQU2A7DUNPuVbrzfMFCqF630MGnQqUL1FXCGyoIXqK2sz96De6YzIXzFYBzw2ZqFULwK2EN7HaUKoXi/Yd6GhVC5fsIaQ0xVC5fsIaQ0zVC9gVwhsh3NCqF7grhHa0KoX0BW3nhtN8oIXuCmy2FM1QvqVTDboeEQvoBwz9ZTNUL3A+gOy36hVYXvdjoBq06ZQvN2GgNBC5dhnBQzoR4Ng9XOtX/Yo1J1nvnCjqOxWTm8Fmpw4dGdunU2yc6dShM0QdKKAC5VIxGYGs9KVS6OCTgg3ZwEFDL+4eLkMwd4XbdurLtDJCDOmLAAbitbLzLWzEBjQM1IcOK2ESKDGYczc7RCRQ0X/9fo2X1Yz6tKykr/AJ7iF8IeOVrzoVkguIHWaQWFRp1BZeYLHKJinVh0BhzZAxijciKdsAALQAwjgdu9Aupgru9YEvQtgWTLYxGs6LEhtiRnjYB8V73AHPnz1OczgUCjpfQ1mZq2lPZNVlcvoZ1rTt75QqheorYdIN9oIXoK+db3sA2lMIXzFYMG9jQqhegrWs/aUKoXrfsOt66oVQvF+w+TUxVC837D5NTNULyCw6zNwa23uaFUL2BbDphvlCqF9Cq6gG0OlQQvqCuHTDb0yhfUquEQ2dsKFUL6lVt6A71TNUL7FVw6erMoa6F9QU0QpmuwQvoBxzh2+/0M23hC975godIKF5u8FM50Ip3EG6yTx6omuGq9w5v61XlY8NmRokYri7ZQasSBii2bEUMiVmLY8YkmILFKQ51SqKqCoBSmSE3JzZQC7LbPv9Yt6obcVlpWY+C45qOiScWpdSuNjZOagtJIDSGtxSSH0ifr1X//0IoAth0h3FGV1YXkVrWfrNHWUEL1FfDve+W6FUL1FfDb09+oVQvkLi1n7Taa0aCF6Cvbz9rv1CqF6Cva3+1vtCqF644whphvlMIXi/4fJqFULzf8IaYb5QQvYF9iOyChVC9wXwhvYbXWUzVC+wLarW+UEL6lW0N6tDQr3FC+xVdQDaGm1UL7lVt4d636ghfcquHNzh32mUL7lVzrdrY5lBC+pVNyFM1QvoCmgbT3+meuIXvdjgpjMhb6sQMnE7OvCvSQL6+Aky1UwmcDIpkRyNUNI83MIKRV2cVSuCvUQrDMDcCkMQUzrXRiiBANz/2UFsZse4tg3hozGlbWiS9TXHGmpd8Sjc1MU6TGPUg1DKAgkiN+sv/RhzfrWaO0oyrVWV4Fxh2m2ChVC9RcYdWytUxVC+YuAzxtDq0RpmqF8xcYdLftZTFUL5mcZ1vVs6YqhfMXGHSHfAoVQvGOMI6Y75QqheMcDo+lUKoXsDjW5o6e+6yhVC9wcBo29LbUzVC+oL4d732ghfYq2Hbb3mUKoX2Ktbz9WxptVC7BVsOnrd7oLC7BVsOnvtMhC7BVdQ5lMgoXYKrhtYBzKFUL7lU2VvZhTKF9gU2A7CmUL2vgYaFShbtsQYMBrL6sfW2x3jbN+j0M+p6nw7o/OIOWb1M0v542itH6y//ShCK+G1pbcRoynVWV8xcYd7G1vQUxVC+YubefrcO5GhVC+YuLeftdtapiqF8hcBohvWt07Y0KoXzFxn29rvwUKoXoLkNHBnb7TFUL1xxsNjbDcUKrK9gcBgt6sNCqwvIONAdLfhoVQvqDjDtNvaoVQvsVfDvdrfaZqhfYq+Hbb2GspmqF2CL6A7/pazNpmqF2irYdsO+DTNULskW0B1urOzBpmqF2SLYdLbgNM1WF2SLYdLW71nUyhdgquHSzNnTNUL7FVt6GyoVQvqCuHTplC3lYgdD369ldWnF02yh4Ywseo/DXj0oBeW7+K1kVYOoc1UG6tgo7bwZ0cms1oIGwW/hbR+zMBuCaypNzgJqJeKE9rdvLYcnOte4bo0xGA9LDrmkTWX//04c1jyq9q5rBnqr6JC6GIyLOUzya/F9D1YQ9F7LEbfQR0LuFLqLrwxyK7E18bnOc6J7ZBMIlERY5u/bEG8FgyVvS2Lpeek4Mw3FeIjcWNDbEbivAAeKOFHAAOGcDOrIzqyDOMObqz7QU8tVZXxM4HR1bK1QqhfIznDqz9HPpiqF8Rc5wjq06FUL5i50B1aQ0xVC9Rc28y3q2FqhVC9Qc28/e9/oVQvYHGEN7Ha26FUL3Bxh2m/DQqhfUrgdHOz8/ahTNUL7lcBo6W/W6Zqhdgi+ENWHMtUKoXaIvhtbfbUzVYXaIvq36maoXaIth3zBhCm1ULtkWw73tBoIXZIth1urZDTaqF2iLae96WYNM1QvuVW3sdIaZWF9gVw6e+0EIljdPbKV0FlBPzqHdCsk+CRbHfZcRqaIdjBN12J1L8sj0qifi+WnNTZQq2OHXsCFE5XpiLDxenaHAfjFvTw3Fa7dXt2wVHE25f//UuzFi6qT1RYoBXWRvC1YZAayVIBW3LyijdFuSKknaDNlZsiqANWTFBZFashjHEhUAFDnOia+qKL3w49vNCXeoXpwFWMYkURJ6zhFkYoBJxNLxCIDDVziCJR0uaVAAcMVrWYoE7DVq1dmXw2sGsDfRp9IVW665nGHM1Z+toVQviLm1paew1oDTFUL4mc4dW9W6Yqsr5C42GHVraFUL0FwOaA6t6CmKoXjHGszRt0KoXtjnDq0qZBQvqDkRz9jaHf6FUL7FcYQ1urOtDTNVhfcjjM1urR0aZqhdojjDq2tM1Qu2RfDq2g0yhdsi46zW5mrYhTNULuEWzNbq2NM1WF3CLat9CmaoXaIrhDahv1NqoXaItma3T33DTKF2Sq6O977TNUL7lVw6erMoAoRsGIuVaKVfWCEkRZy1xm+rVm+dqzHaQmcmVOm6iKMmwd0qVZZZFPH0uyWzWTBAE0xRUIYS30VDG4r6M+8zbw4dp6Vhux4FlSctJtOagLWGYiNFACcWNMxGnGqcYOAOKGgQPOqX/9Xdduoosf1I7VfU5ZLwSG315V7H3tWU8u25XSi+VWcwyUlOIPwAh2jeFQKaIY5aFUukzmdR5MggoAlvXQXQE37bI3jtbB5ORKQZ+A2blmnFAy0vqI7W7iL4kF7H0zjElnHU0ONLDOeiEeMuOjq2AU6i1Uy6xnGfb1bK0FMVQuuZxaz9Zq0LQUxVC+AuMOrZW6YqhfIXOHMw5u9iNBC+eOcOrSpiqFzHOrUWghe5XObrdtvlM1QvqVxh09/t0KoXYK4w7DVrQpmqF2SL27Wt1bOmaoXbIvma3Vsc0KZqhdwi+HW6tkNMgrC7ia2He9QhTaqF3E1sObsNwNM1Qu6mtma3fN9AaZqhdwi2Hfd/ptVYXbIrh3zSzhplC7JFcO3DfqZqhZRqbq3jlc9a9XFUstgqEbrHnWW5NYLpNFH5WBo/FWsOVizhskdETMYQ3XO6cmE6ZE26JznOQhRMH52995ZK5t1bRvZaNNJWdJRphwLgzGyTHPDA4g6qIQGMFCS5zQGkkAhNBVMW5EkyCVcyPJtXsspKoS3IcqS7JkvoLGTOsjBJXhDOCQlJY6KSCR1U2DFMDCUhCiIawoBrAXjt22Z28Vtzl4LTIdaU/NRpiKRWhiR4jokQipJoXONKkndTrqtrr//WOfr3qfleyAqbrKqWnJFJSXayZQjErPVlW2PBhq79qYIZHGze/NhO/l+KkQfNrSiYlcNyCBiiACH6e5d6rRuPeyz73WSSJ+z5qHGaAcXHDTq4ZNDqYrMaG/MatcRQ6xyDQ1S1Stmrmb6l6y57qln6H5FTnV1NUbk+Y2RROo3LE4G/WYLuIe4Okjj6EvryC7NyUoJumqiapLZDlEWBbtXisq9t35K89iRMrZM/LQ48J234kRocA4VOK9tcV7Ndjw5pzg0sg1FQsanXw79tqeaqsrqmcaI4d+1u+UxVC65nGHTHfd8piqF8RcZ9va78FMVWV8xc288NmIb/AEKoXAcZ1vZAO9bC1QqhfQrjDq3sKFUL7FXz7erZUzVYXZKvh1bLWUyhdoi+HVo59umaoXcTXw7jahTNULvJrZmZqwU2qhd1NbM1bmmaoXdTWzNbmatlTaqwu8mrh1YQz6ZBQu4RXM1u96zZDnUzVC7pFcOrDTaqwu0RXDvlMoRHOICWMC8wT9PdlhM0KSPBJDYvquKs13aBxMed5gaNVJuj8KVuiXtWAye6yNMa0dNUkdWKGvpDc89dHjhNZI2BI4K7NikTk89s3OBp3LQnOECE8bCLMNywGYgyzDrOFY4h25FX05cKJf/XP4oIQwW6gqwTcTLAoXZu1awpVeLynD2MpV7wxkgdZR9KyKqTWTqwSN2zUVL7LSi54bFllFD22B2JwKkmzXOfodoIsMrLOm4mCG34obKzL3RrOe40DYxBMeWqXUpFAEWC0AbWCMCXOisAlhu3CUIsotm63ftsFOm1VOumdfDveq3TWqF1jr2s/VtbVMVQuuK+y0g32mKoXoLjDtd+oVKF5xxh3vfqFUL3K4w63Voa2ma0QuwRfDmatjQqhdoi+ZbHVgHfaZQu2mvh1aOGmwKF3k1sO96rdM1WF3U1h1mt1bYaZqhd9Na3n6sIU2BQu+mrma3VtwpmqF3k1czVpaIWqbVQu6mrmag2egNNgVhd0iuZg0w30KZQs3WPlR8/2Slb8k1L1Zw3JKbJ1ieM25lDposoVDGiCr+OR+KrrKIpoQuAwdqu7X16+HKle0inVOmQ35K/d9rCwdXTnL4XjiZOypOFjGlS573ENhwmAAkvixHNY3bgXYziGhxGCQBUph7UVUzJVjzVFIVS9XjHGEpVfwFKDQ4prYuHrlRdeIRqNvjXRgPFJijr1y/dmC0UzlycQAAEADgRfe+Fs3/vZPXxvA/KWtPxzEfsGgAMhw27shQmshMGuGMaDU5zXJqarLNPyqwv/9A/ighU+LQmFR+FROBR2GQ+NQONQ97CYzBosybRKFRaFRJsqziMMicOeJLNH8PftFjpLIqkOmqmcxTFEoiAzy0zMyUzDnJOI+FNwntex7HFr2PaQ5r2OaQ5rmuALXAgggEEEIS/7FaMTcjtgZW6nHpRbO4nY21qRaKL1WRwyryIryi/RIk+f1ZTY9cAqslF4Qk4MeFOHCqh4vC0TKgoo4bPyIdpdDbh6lMMl2DJ2m5sO/lnQmCbh0a0RmmrWzcFooCx5AEZrQBBiuDcVrHwS+yx2MN1WohRbDvunnU+lFuuodbWZu2DfRpiqF1zL6szfRpiqF8r+OjtaFVleQXHRDWbENrTFUL6lX0dWzC1TNVhdgi2jstzTNdghdsi2Zo73v8ATNULupq5m9b9oUzVC7yauHT2+dTYFC76auHVoDohTZYXfTVzNbveZvoUyhVBNXVtwwU2qhd5NXfd/AaZqhd5NXDvg7HQGmwQq7BodFI9FIbA4HDX8ZjUZfs4VCIPCmbiIxWKRSIuEmkPhsNh7NNZ2+fvnaxEkUUiGUVUOBSgJhABhmZqWkpaJOTkSHBk4THPiRHuDGMYwFznvc4hrWtaC5ziQAASTRYRw+JJYncSw2qsVrCrNhTUtkhWnCyJzYF22emq7k8zxJ/DauYfEG51klXThVo2fRxVAwIrRAiTcorJsUXCvGnRT4fXYXLzCwbuRXbR7ZkWsDXbpqPilr5t7TQhoDnw5YOGM2EXPOI6O+GyB7qmg1lt+p8oLRcoIX//0T+KCFyghYsrqqVqysh6sprqfrglSHTnIE5w40PjUFiBTAICBgVZROGPUhI8hEchDwhHDJ63Om5aOUyKJnKYoCH6K6l67fuRb8tee7Ey+VtmVfjMe3uDmPadS+G9tWvY4Fr2ktcCCsgkGo10vtxTHE1qz8T4rNBBwMRnSoadIi6CqmtXGpQK5ACquxkqdsapJs4RP0IZpmMJSlTbRVsmZ20KUCuWzTtDgHw82BhpsDKMxJW+EqwaclK62sMvAqcZ8u91ANd0FxEOITWG+JZY8OG6rV8dTDsx21PfS3XWMrsA2tMVQvkKo4dpTFULgK4R2dCqF9iq6Q6G3plC7JFMNraDsQplC7iau4zw2FMgrC7qauHN3vf6ZQu+mpmWtWAQpsELvpKZmt37AOCmQhVBJTDa22/DTcFYVQSUzNba22/DTKFUE1NWhhDBTYIVdg0NiseikNgcDhr+NRuMv2UKhEHhLNxEYpFopEXKbOHw2GQ9mms7fRB87WIkiikQ6iqhylKUREAGGZmpaSlok5OxGQZOCxz3ve4NYxjAXOc9ziGta1oJc5xAABJNFhGN4kjiSb6xvdw2yTslIakWvUEXydX9Xyb9rEGNVbCINHMLeRyOvIW6dQ2MTxGIa6VSSSSVWaQtosIiKjxTgy5SaKPRRwsIEGJg9wexDvJdWmami1zXTrmuD2w4bXgPhy8N4Bc4hr4z2jM2C3a6F765hrIganwwo1yghcoIX//SP4oIXKCFyghWNWXVpIVcchTVVfWhKsInaQJ2hDiBzPLEcbi4h0UhzgSnuTXBk3DV21cJkXaukDpOmbpJNdBRNZMhy+WsG3rYuxbEveC78xElLZlIgiQosM0cxw7iC0glr2OBY9hcx7XNcQQGmca6CdxSvEIq2LG91G63LFVpMVddRA49i0UlBFqMRrSqnZopqunSbxo1ulp/lFmkkJ04kzRI/bJDe3bYxUDP3HVTAXovLu35hwrt4Q3QLKvfqWMjE4spOOJABaTml4xJoYT3GG454cQFwgssMiA5jrod0x9bojvVPtBSr4ibRHVtKYqheQNoDbtYbYUyhfYh9kO1oIXZIfP0wptVC7qZ8zeh0MFMoXdTPpZ+x0aZBWF30z7/AE2Qqgmff8Ib7TIQqgmfWhqthTYIXfSPma3YYQ0KbBYWf7HuxzrrsoqwGVWVRcgRufpqcomeO0ocmm3hMAhSZikXjU1TA+UbQSWYKkqcqeOXq6KajhRNBMTrqpJn/IX2v9dHBzYj7w3ynYMlZrTiguJL4jzrQ4MJoMSLEIqcSG1xDQ57qMa5wwSAKlGp4nRiQVUdhWaH1mT47h9blkYRJcG05nbOkZTq9TeIKt3jGryCPBKYX7hssKK8aep4/USuiNiMklnCS/JTDzopr0YXBEu7YrX2XcIkVgVBjTRaQWumojdwgjGbLwzkwaGIYzmw3Mgc8uzbctxNPlRaLlBC5QQuUEL/0z+KCFyghcoIXKCFyghafbO/EV7E+zZXis7M2a1QteMRViEQc1pVcwWFnYzTGYicFVojWdI6gw5hOyxlzHWUct3cJi7hY9tV8cgXsfpXBHopMImCxkOyorha902BrRKzL340JjcwbKx9U6AKUaGuZGgtaNTBBzjdsRzd1CEqstsRMs7bFPHkb3bzd9qvEMfOMvVRTaNznkbDWl/Xx1NcnZENJzly8Q1G/u18ZOYU114uPlALdD0Xwc6KfBJhCxZTTuzRbRxRpefLIGM40FIUbHMCLVxxWNx2xn5jkhWgnbEa7pK1JLoOGbhdq6QWaumqyrdy2cJHRXbronFNZBdFQCqJLJKFEpimADFMFodbT6MY9kVgiQyHQ3AEEGoIOcEEZiCNYhbryA2wAaZCF2SGzB0c3VsaZCF3ExzqbDYoXcTNmaQ0yhd9M29azZU2WFUEjb1rdlTKFmypmoSuyyCj7iV6kKqp8rUjjFJBzEmcky1FI8SDM3SpkG76PvWTZRhAIeuuUUyuHqqCJlNdA11aCn5u9F9LpXJkm2je60pOzpN5IY6Yish47gKlsNriHRHAZy2GHOpnpRYJA10R1Ycbp1Zpi+RU52ak9ZUGA3l3uy9V0Sh8VmhW1cqYxnKsa9RCWoNcLJCm4awRKLY4bq3SUSaqhrPhfClo6rPlMpZOCaT01Gzt0/NtcyCN3QJWrYr8xq18wYOK4UdLxGnPE6Lyaigqlqh6nbHWSIdV1UlV3LVXEnw1JBNOFy8yva79VuiVuWIx+MOjuY3M0bVSIF+fxFy6erm15VU5hER55Xtvneq/drxLevfPTE/akQk48V1Q0E1xYbBSHChg7ZhwmMht1mtAzKIknOVlun5hYXKCFyghcoIXKCF//9Q/ighcoIXKCFyghcoIXKCFyghRMshbBKxBsrDmdV/VAVf1gxgyONxmldg6l6d8b3hu1IgWepSeQGcSIot2iREyg+AqZSFAlzap7FuZhbwk4PRk7n2xOSctWuSDhEgVqTXS8ZsSDUkkk5PPU1qtg5w1itPtbO6aSw3m10q/qprOroqfVWv9qDrRCA1iSs1tpqY2xm1jsMh01BelzlFS/wAZcXxMtyW9mEVB+lbuaOnCbZsMQbwyFl2m0U1YbElopz58Yw3OhZxrYsBtCanGGZbiK7b6LV3Xtunx3ZKLQGFby5yzZNw5zEL/ALsJkLjXG7kG95vW70xa/Xdu3dXRLWZaHNp7/uhozN5qlo0xvLel8k8Nps4Y9aita6SZTuBWwi125aiorYnZEReJwrL9jjIyIvYff8qt6v8AjNyq2v16yxqXu+Xu6ubo1zbtWxzR+l5XCLpmWZMaTxcpDa6mVrSoBpXJCtK7AKTGUk6hsTU3euER6KbvTlayEiLZheN25yZxzjhsLi/X3L3CrzcWrVzcnt5tsMyn4m9+HfeVZmDL7NWXysMurpnEpQ0pTS76+EWC6i3NVP7popFjkBlubZ9stpti0MmaXJdj6cFlCqODyk+YZLM2kSctDxuMz7PLd5cN3ApJqAxRuThfBKYOCdPmC8ujztiTnI9m2PduWhzECPEhmJGnHxmuxHOaDk2S8uW5xUjKOzZgRtpRmLsAtpNTOIa4nRU/jRy6qki1b8bZ3F7jlcs2xSZ77c2hNjuVoKEr1fPL6YoCa+wc1q1aLcgJgH59vTousOV58aHDtOFZko7XhyMFkKnSI0TKzLabpHG61IBGhiOK2oyfJUm1ey+wlOQZSliR5VhSJG8LlqT4DCpZl+GoJJJopIsINBWrKHM0U0UiEKVNMpQKUADWAAB87Wpa1q23OvtK2pmYnLRiGr4seI+LEcSakufEc5ziSSaknOVpr66uenj0LlBC5QQuUELlBC5QQuUEL//Z",id:"g",width:174,height:173}),E.createElement("image",{xlinkHref:"data:image/jpeg;base64,/9j/4g1YSUNDX1BST0ZJTEUAAQEAAA1IYXBwbAIQAABtbnRyUkdCIFhZWiAH5wABAAUACQA0ABBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJkZXNjAAABXAAAAGJkc2NtAAABwAAAAepjcHJ0AAADrAAAACN3dHB0AAAD0AAAABRyWFlaAAAD5AAAABRnWFlaAAAD+AAAABRiWFlaAAAEDAAAABRyVFJDAAAEIAAACAxhYXJnAAAMLAAAACB2Y2d0AAAMTAAAADBuZGluAAAMfAAAAD5jaGFkAAAMvAAAACxtbW9kAAAM6AAAACh2Y2dwAAANEAAAADhiVFJDAAAEIAAACAxnVFJDAAAEIAAACAxhYWJnAAAMLAAAACBhYWdnAAAMLAAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAmAAAADGhySFIAAAAIAAAB2GtvS1IAAAAIAAAB2G5iTk8AAAAIAAAB2GlkAAAAAAAIAAAB2Gh1SFUAAAAIAAAB2GNzQ1oAAAAIAAAB2GRhREsAAAAIAAAB2G5sTkwAAAAIAAAB2GZpRkkAAAAIAAAB2Gl0SVQAAAAIAAAB2GVzRVMAAAAIAAAB2HJvUk8AAAAIAAAB2GZyQ0EAAAAIAAAB2GFyAAAAAAAKAAAB4HVrVUEAAAAIAAAB2GhlSUwAAAAIAAAB2HpoVFcAAAAIAAAB2HZpVk4AAAAIAAAB2HNrU0sAAAAIAAAB2HpoQ04AAAAIAAAB2HJ1UlUAAAAIAAAB2GVuR0IAAAAIAAAB2GZyRlIAAAAIAAAB2G1zAAAAAAAIAAAB2GhpSU4AAAAIAAAB2HRoVEgAAAAIAAAB2GNhRVMAAAAIAAAB2GVuQVUAAAAIAAAB2GVzWEwAAAAIAAAB2GRlREUAAAAIAAAB2GVuVVMAAAAIAAAB2HB0QlIAAAAIAAAB2HBsUEwAAAAIAAAB2GVsR1IAAAAIAAAB2HN2U0UAAAAIAAAB2HRyVFIAAAAIAAAB2HB0UFQAAAAIAAAB2GphSlAAAAAIAAAB2ABpAE0AYQBjIA8AaQBNAGEAYwAAdGV4dAAAAABDb3B5cmlnaHQgQXBwbGUgSW5jLiwgMjAyMwAAWFlaIAAAAAAAAPPYAAEAAAABFghYWVogAAAAAAAAc9QAADomAAABblhZWiAAAAAAAABehgAAujcAABPtWFlaIAAAAAAAACR8AAALowAAvdJjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnwAAAVQAAAEuAAACgAAAAJgAAAAwAAABQQAAAVEAAAjMzAAIzMwACMzMAAAAAAAAAAHNmMzIAAAAAAAELtwAABZb///NXAAAHKQAA/df///u3///9pgAAA9oAAMD2bW1vZAAAAAAAAAYQAACuAxtimhfPTo6AAAAAAAAAAAAAAAAAAAAAAHZjZ3AAAAAAAAMAAAACZmYAAwAAAAJmZgADAAAAAmZmAAAAAjMzNAAAAAACMzM0AAAAAAIzMzQA/+E6smh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuZjg0NWViMSwgMjAyMi8xMS8wMy0xOToyODo0NSAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6aWxsdXN0cmF0b3I9Imh0dHA6Ly9ucy5hZG9iZS5jb20vaWxsdXN0cmF0b3IvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvanBlZzwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPk1vb25iYXNlIC0gSWNvbjwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgSWxsdXN0cmF0b3IgMjcuMiAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wMi0wOFQxMjo1NDoyOS0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIzLTAyLTA4VDE3OjU0OjI5WjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDItMDhUMTI6NTQ6MjktMDU6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eG1wR0ltZzp3aWR0aD4yNTY8L3htcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmhlaWdodD40NDwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUJMQUVzQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUJMQUFBQUFFQSYjeEE7QVFFc0FBQUFBUUFCLytJTldFbERRMTlRVWs5R1NVeEZBQUVCQUFBTlNHRndjR3dDRUFBQWJXNTBjbEpIUWlCWVdWb2dCK2NBQVFBRiYjeEE7QUFrQU5BQVFZV056Y0VGUVVFd0FBQUFBUVZCUVRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQYldBQUVBQUFBQTB5MWhjSEJzQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTWkdWell3QUFBVndBQUFCaSYjeEE7WkhOamJRQUFBY0FBQUFIcVkzQnlkQUFBQTZ3QUFBQWpkM1J3ZEFBQUE5QUFBQUFVY2xoWldnQUFBK1FBQUFBVVoxaFpXZ0FBQS9nQSYjeEE7QUFBVVlsaFpXZ0FBQkF3QUFBQVVjbFJTUXdBQUJDQUFBQWdNWVdGeVp3QUFEQ3dBQUFBZ2RtTm5kQUFBREV3QUFBQXdibVJwYmdBQSYjeEE7REh3QUFBQStZMmhoWkFBQURMd0FBQUFzYlcxdlpBQUFET2dBQUFBb2RtTm5jQUFBRFJBQUFBQTRZbFJTUXdBQUJDQUFBQWdNWjFSUyYjeEE7UXdBQUJDQUFBQWdNWVdGaVp3QUFEQ3dBQUFBZ1lXRm5ad0FBREN3QUFBQWdaR1Z6WXdBQUFBQUFBQUFJUkdsemNHeGhlUUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUcxc2RXTUFBQUFBQUFBQUpnQUFBQXhvY2toU0FBQUFDQUFBQWRocmIwdFNBQUFBQ0FBQSYjeEE7QWRodVlrNVBBQUFBQ0FBQUFkaHBaQUFBQUFBQUNBQUFBZGhvZFVoVkFBQUFDQUFBQWRoamMwTmFBQUFBQ0FBQUFkaGtZVVJMQUFBQSYjeEE7Q0FBQUFkaHViRTVNQUFBQUNBQUFBZGhtYVVaSkFBQUFDQUFBQWRocGRFbFVBQUFBQ0FBQUFkaGxjMFZUQUFBQUNBQUFBZGh5YjFKUCYjeEE7QUFBQUNBQUFBZGhtY2tOQkFBQUFDQUFBQWRoaGNnQUFBQUFBQ2dBQUFlQjFhMVZCQUFBQUNBQUFBZGhvWlVsTUFBQUFDQUFBQWRoNiYjeEE7YUZSWEFBQUFDQUFBQWRoMmFWWk9BQUFBQ0FBQUFkaHphMU5MQUFBQUNBQUFBZGg2YUVOT0FBQUFDQUFBQWRoeWRWSlZBQUFBQ0FBQSYjeEE7QWRobGJrZENBQUFBQ0FBQUFkaG1ja1pTQUFBQUNBQUFBZGh0Y3dBQUFBQUFDQUFBQWRob2FVbE9BQUFBQ0FBQUFkaDBhRlJJQUFBQSYjeEE7Q0FBQUFkaGpZVVZUQUFBQUNBQUFBZGhsYmtGVkFBQUFDQUFBQWRobGMxaE1BQUFBQ0FBQUFkaGtaVVJGQUFBQUNBQUFBZGhsYmxWVCYjeEE7QUFBQUNBQUFBZGh3ZEVKU0FBQUFDQUFBQWRod2JGQk1BQUFBQ0FBQUFkaGxiRWRTQUFBQUNBQUFBZGh6ZGxORkFBQUFDQUFBQWRoMCYjeEE7Y2xSU0FBQUFDQUFBQWRod2RGQlVBQUFBQ0FBQUFkaHFZVXBRQUFBQUNBQUFBZGdBYVFCTkFHRUFZeUFQQUdrQVRRQmhBR01BQUhSbCYjeEE7ZUhRQUFBQUFRMjl3ZVhKcFoyaDBJRUZ3Y0d4bElFbHVZeTRzSURJd01qTUFBRmhaV2lBQUFBQUFBQUR6MkFBQkFBQUFBUllJV0ZsYSYjeEE7SUFBQUFBQUFBSFBVQUFBNkpnQUFBVzVZV1ZvZ0FBQUFBQUFBWG9ZQUFMbzNBQUFUN1ZoWldpQUFBQUFBQUFBa2ZBQUFDNk1BQUwzUyYjeEE7WTNWeWRnQUFBQUFBQUFRQUFBQUFCUUFLQUE4QUZBQVpBQjRBSXdBb0FDMEFNZ0EyQURzQVFBQkZBRW9BVHdCVUFGa0FYZ0JqQUdnQSYjeEE7YlFCeUFIY0FmQUNCQUlZQWl3Q1FBSlVBbWdDZkFLTUFxQUN0QUxJQXR3QzhBTUVBeGdETEFOQUExUURiQU9BQTVRRHJBUEFBOWdENyYjeEE7QVFFQkJ3RU5BUk1CR1FFZkFTVUJLd0V5QVRnQlBnRkZBVXdCVWdGWkFXQUJad0Z1QVhVQmZBR0RBWXNCa2dHYUFhRUJxUUd4QWJrQiYjeEE7d1FISkFkRUIyUUhoQWVrQjhnSDZBZ01DREFJVUFoMENKZ0l2QWpnQ1FRSkxBbFFDWFFKbkFuRUNlZ0tFQW80Q21BS2lBcXdDdGdMQiYjeEE7QXNzQzFRTGdBdXNDOVFNQUF3c0RGZ01oQXkwRE9BTkRBMDhEV2dObUEzSURmZ09LQTVZRG9nT3VBN29EeHdQVEErQUQ3QVA1QkFZRSYjeEE7RXdRZ0JDMEVPd1JJQkZVRVl3UnhCSDRFakFTYUJLZ0V0Z1RFQk5NRTRRVHdCUDRGRFFVY0JTc0ZPZ1ZKQlZnRlp3VjNCWVlGbGdXbSYjeEE7QmJVRnhRWFZCZVVGOWdZR0JoWUdKd1kzQmtnR1dRWnFCbnNHakFhZEJxOEd3QWJSQnVNRzlRY0hCeGtIS3djOUIwOEhZUWQwQjRZSCYjeEE7bVFlc0I3OEgwZ2ZsQi9nSUN3Z2ZDRElJUmdoYUNHNElnZ2lXQ0tvSXZnalNDT2NJK3drUUNTVUpPZ2xQQ1dRSmVRbVBDYVFKdWduUCYjeEE7Q2VVSit3b1JDaWNLUFFwVUNtb0tnUXFZQ3E0S3hRcmNDdk1MQ3dzaUN6a0xVUXRwQzRBTG1BdXdDOGdMNFF2NURCSU1LZ3hEREZ3TSYjeEE7ZFF5T0RLY013QXpaRFBNTkRRMG1EVUFOV2cxMERZNE5xUTNERGQ0TitBNFREaTRPU1E1a0RuOE9tdzYyRHRJTzdnOEpEeVVQUVE5ZSYjeEE7RDNvUGxnK3pEODhQN0JBSkVDWVFReEJoRUg0UW14QzVFTmNROVJFVEVURVJUeEZ0RVl3UnFoSEpFZWdTQnhJbUVrVVNaQktFRXFNUyYjeEE7d3hMakV3TVRJeE5ERTJNVGd4T2tFOFVUNVJRR0ZDY1VTUlJxRklzVXJSVE9GUEFWRWhVMEZWWVZlQldiRmIwVjRCWURGaVlXU1JacyYjeEE7Rm84V3NoYldGdm9YSFJkQkYyVVhpUmV1RjlJWDl4Z2JHRUFZWlJpS0dLOFkxUmo2R1NBWlJSbHJHWkVadHhuZEdnUWFLaHBSR25jYSYjeEE7bmhyRkd1d2JGQnM3RzJNYmlodXlHOW9jQWh3cUhGSWNleHlqSE13YzlSMGVIVWNkY0IyWkhjTWQ3QjRXSGtBZWFoNlVIcjRlNlI4VCYjeEE7SHo0ZmFSK1VINzhmNmlBVklFRWdiQ0NZSU1RZzhDRWNJVWdoZFNHaEljNGgreUluSWxVaWdpS3ZJdDBqQ2lNNEkyWWpsQ1BDSS9BayYjeEE7SHlSTkpId2txeVRhSlFrbE9DVm9KWmNseHlYM0ppY21WeWFISnJjbTZDY1lKMGtuZWllcko5d29EU2cvS0hFb29palVLUVlwT0NsciYjeEE7S1owcDBDb0NLalVxYUNxYktzOHJBaXMySzJrcm5TdlJMQVVzT1N4dUxLSXMxeTBNTFVFdGRpMnJMZUV1Rmk1TUxvSXV0eTd1THlRdiYjeEE7V2krUkw4Y3YvakExTUd3d3BERGJNUkl4U2pHQ01ib3g4aklxTW1NeW16TFVNdzB6UmpOL003Z3o4VFFyTkdVMG5qVFlOUk0xVFRXSCYjeEE7TmNJMS9UWTNObkkycmpicE55UTNZRGVjTjljNEZEaFFPSXc0eURrRk9VSTVmem04T2ZrNk5qcDBPckk2N3pzdE8yczdxanZvUENjOCYjeEE7WlR5a1BPTTlJajFoUGFFOTRENGdQbUErb0Q3Z1B5RS9ZVCtpUCtKQUkwQmtRS1pBNTBFcFFXcEJyRUh1UWpCQ2NrSzFRdmRET2tOOSYjeEE7UThCRUEwUkhSSXBFemtVU1JWVkZta1hlUmlKR1owYXJSdkJITlVkN1I4QklCVWhMU0pGSTEwa2RTV05KcVVud1NqZEtmVXJFU3d4TCYjeEE7VTB1YVMrSk1La3h5VExwTkFrMUtUWk5OM0U0bFRtNU90MDhBVDBsUGswL2RVQ2RRY1ZDN1VRWlJVRkdiVWVaU01WSjhVc2RURTFOZiYjeEE7VTZwVDlsUkNWSTlVMjFVb1ZYVlZ3bFlQVmx4V3FWYjNWMFJYa2xmZ1dDOVlmVmpMV1JwWmFWbTRXZ2RhVmxxbVd2VmJSVnVWVytWYyYjeEE7TlZ5R1hOWmRKMTE0WGNsZUdsNXNYcjFmRDE5aFg3TmdCV0JYWUtwZy9HRlBZYUpoOVdKSllweGk4R05EWTVkajYyUkFaSlJrNldVOSYjeEE7WlpKbDUyWTlacEptNkdjOVo1Tm42V2cvYUpabzdHbERhWnBwOFdwSWFwOXE5MnRQYTZkci8yeFhiSzl0Q0cxZ2JibHVFbTVyYnNSdiYjeEE7SG05NGI5RndLM0NHY09CeE9uR1ZjZkJ5UzNLbWN3RnpYWE80ZEJSMGNIVE1kU2gxaFhYaGRqNTJtM2I0ZDFaM3MzZ1JlRzU0ekhrcSYjeEE7ZVlsNTUzcEdlcVY3Qkh0amU4SjhJWHlCZk9GOVFYMmhmZ0YrWW43Q2Z5Ti9oSC9sZ0VlQXFJRUtnV3VCellJd2dwS0M5SU5YZzdxRSYjeEE7SFlTQWhPT0ZSNFdyaGc2R2NvYlhoenVIbjRnRWlHbUl6b2t6aVptSi9vcGtpc3FMTUl1V2kveU1ZNHpLalRHTm1JMy9qbWFPem84MiYjeEE7ajU2UUJwQnVrTmFSUDVHb2toR1NlcExqazAyVHRwUWdsSXFVOUpWZmxjbVdOSmFmbHdxWGRaZmdtRXlZdUpra21aQ1ovSnBvbXRXYiYjeEE7UXB1dm5CeWNpWnozbldTZDBwNUFucTZmSForTG4vcWdhYURZb1VlaHRxSW1vcGFqQnFOMm8rYWtWcVRIcFRpbHFhWWFwb3VtL2FkdSYjeEE7cCtDb1VxakVxVGVwcWFvY3FvK3JBcXQxcSttc1hLelFyVVN0dUs0dHJxR3ZGcStMc0FDd2RiRHFzV0N4MXJKTHNzS3pPTE91dENXMCYjeEE7bkxVVHRZcTJBYlo1dHZDM2FMZmd1Rm00MGJsS3VjSzZPN3ExdXk2N3A3d2h2SnU5RmIyUHZncStoTDcvdjNxLzljQnd3T3pCWjhIaiYjeEE7d2wvQzI4Tll3OVRFVWNUT3hVdkZ5TVpHeHNQSFFjZS95RDNJdk1rNnlibktPTXEzeXpiTHRzdzF6TFhOTmMyMXpqYk90czgzejdqUSYjeEE7T2RDNjBUelJ2dEkvMHNIVFJOUEcxRW5VeTlWTzFkSFdWZGJZMTF6WDROaGsyT2paYk5ueDJuYmErOXVBM0FYY2l0MFEzWmJlSE42aSYjeEE7M3luZnIrQTI0TDNoUk9ITTRsUGkyK05qNCt2a2MrVDg1WVRtRGVhVzV4L25xZWd5Nkx6cFJ1blE2bHZxNWV0dzYvdnNodTBSN1p6dSYjeEE7S082MDcwRHZ6UEJZOE9YeGN2SC84b3p6R2ZPbjlEVDB3dlZROWQ3MmJmYjc5NHI0R2ZpbytUajV4L3BYK3VmN2Qvd0gvSmo5S2YyNiYjeEE7L2t2KzNQOXQvLzl3WVhKaEFBQUFBQUFEQUFBQUFtWm1BQUR5cHdBQURWa0FBQlBRQUFBS1czWmpaM1FBQUFBQUFBQUFBUUFCQUFBQSYjeEE7QUFBQUFBRUFBQUFCQUFBQUFBQUFBQUVBQUFBQkFBQUFBQUFBQUFFQUFHNWthVzRBQUFBQUFBQUFOZ0FBcDhBQUFGVUFBQUJMZ0FBQSYjeEE7b0FBQUFDWUFBQUFNQUFBQVVFQUFBRlJBQUFJek13QUNNek1BQWpNekFBQUFBQUFBQUFCelpqTXlBQUFBQUFBQkM3Y0FBQVdXLy8veiYjeEE7VndBQUJ5a0FBUDNYLy8vN3QvLy8vYVlBQUFQYUFBREE5bTF0YjJRQUFBQUFBQUFHRUFBQXJnTWJZcG9YejA2T2dBQUFBQUFBQUFBQSYjeEE7QUFBQUFBQUFBQUIyWTJkd0FBQUFBQUFEQUFBQUFtWm1BQU1BQUFBQ1ptWUFBd0FBQUFKbVpnQUFBQUl6TXpRQUFBQUFBak16TkFBQSYjeEE7QUFBQ016TTBBUC91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUFZRUJBUUZCQVlGQlFZSkJnVUdDUXNJQmdZSUN3d0tDZ3NLQ2d3USYjeEE7REF3TURBd01FQXdPRHhBUERnd1RFeFFVRXhNY0d4c2JIQjhmSHg4Zkh4OGZIeDhCQndjSERRd05HQkFRR0JvVkVSVWFIeDhmSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZILy9BQUJFSUFDd0JBQU1CRVFBQyYjeEE7RVFFREVRSC94QUdpQUFBQUJ3RUJBUUVCQUFBQUFBQUFBQUFFQlFNQ0JnRUFCd2dKQ2dzQkFBSUNBd0VCQVFFQkFBQUFBQUFBQUFFQSYjeEE7QWdNRUJRWUhDQWtLQ3hBQUFnRURBd0lFQWdZSEF3UUNCZ0p6QVFJREVRUUFCU0VTTVVGUkJoTmhJbkdCRkRLUm9RY1ZzVUlqd1ZMUiYjeEE7NFRNV1l2QWtjb0x4SlVNMFU1S2lzbU56d2pWRUo1T2pzellYVkdSMHc5TGlDQ2FEQ1FvWUdZU1VSVWFrdEZiVFZTZ2E4dVB6eE5UayYjeEE7OUdWMWhaV2x0Y1hWNWZWbWRvYVdwcmJHMXViMk4wZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBncE9VbFphWG1KbWFtNSYjeEE7eWRucCtTbzZTbHBxZW9xYXFycksydXI2RVFBQ0FnRUNBd1VGQkFVR0JBZ0RBMjBCQUFJUkF3UWhFakZCQlZFVFlTSUdjWUdSTXFHeCYjeEE7OEJUQjBlRWpRaFZTWW5MeE15UTBRNElXa2xNbG9tT3l3Z2R6MGpYaVJJTVhWSk1JQ1FvWUdTWTJSUm9uWkhSVk4vS2pzOE1vS2RQaiYjeEE7ODRTVXBMVEUxT1QwWlhXRmxhVzF4ZFhsOVVaV1puYUdscWEyeHRibTlrZFhaM2VIbDZlM3g5Zm45emhJV0doNGlKaW91TWpZNlBnNSYjeEE7U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dnIvMmdBTUF3RUFBaEVERVFBL0FQVk9Lb2UrMUxUN0NMMXI2Nml0WXV6eiYjeEE7T3NhL2V4R1dZOE04aHFJTWo1YnFsOEhuTHluUElJNHRZczJrUDJWOVpBVDhxbk1pWForb2lMTUpmSXFsbXVlY0pZbmVDd1VBb1NHbiYjeEE7WVZyVCtVZFB2eVdEU2c3eWRGcU8xanhHT1BwMVcrWHZPLzF5OGkwKytqQW5sSldLZFBza2dWb3k5dm95elVhRGhpWng1QjJPbDFFcCYjeEE7ajFjMlc1clhNZGlyc1ZkaXJzVlVieStzcktFelhseEZiUWpyTE02eHIvd1RFREo0OFVwbW9naytTcFpGNTA4b3l5Q09QV2JNdTNRRyYjeEE7WkJYN3ptVExzN1VBV1lTK1JWQWE1NXZNRFBCWUJXWmRqY0doWC9ZanY4OE9IUzM5VHBkVjJyVXpDQTNITW9YUXZQVFRYY05qcUNBeSYjeEE7VE9JNHAwMitKalJReSs1N2pMOC9aOVJNbzlITTBtcGxNZXBtV2F0em5ZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcW9YMSYjeEE7L1kyRnJKZDM5ekZhV3NRckxjVHVzY2FqeFozSVVZcXhWZnpsL0tacHZSSG5EU09mTGpYNjdCeHIvcjh1UDAxeFY1aCtkdjhBemxMWSYjeEE7K1VidDlBOHB3dzZyclBwSkpKcUx1SHM0Uk1nZE9Jak5aWDRNRzZoUlVkZHhpckJQeXovNXpIMXlDK1N4OCsyNlgxalBJQitsYlZGaCYjeEE7bWdER2xYaVdpU0l2WDRhTVA4cnBpcjZRL01QenZGNVcwa1BFRmsxSzZKU3poYm9LZmFrWWZ5clg2VG0wN0s3T09weVVkb1I1L3FWOCYjeEE7K2Fwck9vNnJlUGVhamNQYzNEOVhjMW9QQlIwVWV3enZzT0NHS1BEQVVFcEZxT29USklZWWp4b0JWdSsvaGtwRmlTOWUwclZyUyswYSYjeEE7Mmx0cFJJb2lSWG9RU3JCUlZXSFlqT1JuZ2xISVFSMWVVR21sSEtiNzB4OHBXdDVkZVpyT1NHSm5pZ2ZuTklBZUtnQTlUNzlzbnJKUiYjeEE7amdrQ2R6eWVrMHVNQ0wxek9XY2gyS3V4VjJLc2M4OStjYmJ5dm9yWGJBU1hreE1kbEFlalBTdkp1L0ZlcCs3dm13N04wQjFPVGg1UiYjeEE7SE1xK2Q5YTh3YXJyTjQxNXFWeTF4TTFhY2o4S2cvc29vMlVld3owRFQ2Ykhoand3RkJLUTZqcUVzVENLTFlrVkxkOS9ETFpGaVM5ViYjeEE7OHRhdGFYZmx5eDlDVVNQQmJ4eFRMWDRsZEVDdHlIWHFNNVBVWUpSelNzY3lTOHRsMDBobWxZNXlKK2FZK1g3YTh2UE1WajlYamFSWSYjeEE7YmlLV1pnTmxSSERFc2Uyd3lXb2xHR0dWbm1DOUJwTVlBZXg1eWpsT3hWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLc2EvTWJ6NSYjeEE7cFBrWHloZmVaTlRxOFZxb1dDM1VnUE5PNTR4eExYK1p1cDdDcDdZcS9Qejh3L3pRODRlZnRXYlVQTUY2MGtZWW0xc0l5VnRyZFQreiYjeEE7RkhXblRxeHF4N25GV2EvODQ0L2t0cG41bDZ6cWNtc1hVa0drYUlzRFhGdkJSWlozdVRKd1FPUVFxMGhia2V2U25pRlVQL3praitXeiYjeEE7K1R2ekN1bTAzU0RwL2xXNmp0djBSSkdybUQ5M2JSeHlwNmpWL2VlcWpNd0xjalhrZXVLdk9mTG5sclhQTW1zVytrYUpaeTMyb1hMQiYjeEE7VWhpVXRRRWdGM29EeFJhL0V4MkhmRlgxeCtkZXF5VCtlcDdWbVBDeGhoaVJldzVvSmoveWN6dSt3TVlqcGdmNXhKL1IraExBVGNqeCYjeEE7emRxZ2J4R2VReURjRUN2dFRJRmpJTjZiY2FqYnplcFpTdkE1MloxSkFwNEh4eUVzWWxzUmJXWUNYTjlRL2xEZlMzbmtlMGVYNHBJNSYjeEE7Sm8yZWxDMUhKQlB2UTB6aHUzTVlocVRYS2g5emJWTXp6VUs3RlhZcTdGWGdmNThhckpKNXN0N0lzZlN0TFZTcWRnOHJNek45S2hmdSYjeEE7enR2WnpHQmdNdXNwZmNsNW9iZ2VPZEFxQ3ZWYVIvVVhjVW9SM3lKWXlDMndtdm9KeExaeVBES051YUVydDRISzVRRWhSRnNEQVM1diYjeEE7cGY4QUpQVUo3M3lhNW5ibkxiM2NrSmxwOFRmQWtsU2Uvd0RlVXppdTM4UWhuRmRZajlJL1F6QUEyRFA4MGlYWXE3RlhZcTdGWFlxNyYjeEE7RlhZcTdGWFlxN0ZYWXE3Rlh5cC96bkJybHh6OHJhRWprVzVGemZUeC9zczQ0UlJINXFESi93QUZpcjVXeFY3bC93QTR0Zm03NVg4ZyYjeEE7NnpyRmw1alo3ZXgxMWJZSnFDcVhTR1MyTXRCSXExYmc0blB4QUdsT2xEVUt2cW56eitZMzVVV0hsTnJ2ekxxVmhmYUhmeC91N1dzZCYjeEE7NTliVTdnUndyejlUdHZTZzdrWXE4dy81eEw4d2FOcTJwL21CK2hOTGowdlJ4ZlcxMXA5dUZYMUk0Ymhaa1dOMkZUc0xjTnhxUUNUVCYjeEE7RlcvK2NnOUd1TEh6UkJxNFVtMTFHRlZNbllUUWppVi80RGlSOVBobmFlejJvRXNKaDFpZnNLUThwK3RiN25PZ3RLb2x4NzQyaEVSeiYjeEE7MXdxK3FmeXowT2ZSdkpXbldsd3BTNmREY1RxZGlyVE1YQ2tlS3FRRG5uZmF1b0dYVVNrT1hJZkJES00xeXV4VjJLdXhWNE4vemtYbyYjeEE7MXhCcXVuNjZpazJ0eEQ5VW1ZZEZsakxPdFQvbHF4cC9xNTEvczVxQVlTeDlRYi9INDZwRHhyNjF2MXpwYlNxSmMrK05vUkVjK0ZYMCYjeEE7NytUK2lUNlY1SHRmckNsSjc1MnZIUTdFQ1FBSlg1eG9wemdPMjlRTXVvTmNvK241ZnRRelhOU3JzVmRpcnNWZGlyc1ZkaXJzVmRpciYjeEE7c1ZkaXJzVmRpcjV0L3dDYzFmS0YzZmVXdEU4MFcwYlBIbzgwbHRmY1JYakZkOFBUa2J3Q3lSOGZtNHhWOGU0cTdGWFlxKzBmK2NNdiYjeEE7SjkxcFhrWFV2TU4waGpiekJjcDlXQkZDMXZaaGtWL3Bra2twOHNWZTJlYXZLK2srWjlGbTBuVTBMVzh2eEk2N1BISVBzeUllekxYKyYjeEE7QjJ6STB1cG5nbUp3NXErYS9OdjVIZWV0RXVaR3NiVnRZMDhIOTFjV2c1U1U3QjRLbHdmOVdvOTg3TFM5dDRNZzlSNEplZjYwMngreCYjeEE7OGhlZTdtYjBZdEExRG5YaVM5dExHb1Bnek9xcVBwT1pzdGZnaUxNNC9NSzlsL0xUOGpwOVB1NGRYODBjR25oSWUzMHhDSkZWeDBhWiYjeEE7eFZXb2YyVnFQZnRuUGRwZHVpY1RERnlQT1g2bHQ3Tm5Nb2RpcnNWZGlyc1ZTL3pCb0dtYS9wRnhwT3B4ZXJaM0swY0EwWlNEVldVOSYjeEE7bVU3akxzR2VXS1luRTdoWHpYNXgvSWp6cG90ekpKcFVMYXpwdGF4U3dVOWRRZWdlR3ZLdnVsUjh1bWRscE8zTU9RZXM4RXZQbDgwMiYjeEE7eGEwOGkrZXBwL1JqOHY2ajZsUUdEV3N5QlNmNW1aUUYrbk5nZGZnQXN6ajh3bDY1K1hQNUVYa1YxRnFmbXdJcVJFUEZwU2xaT1RBMSYjeEE7SHJzS3B4L3lSV3ZjOWpvZTBlM2dRWVlmOU4rcjlhTGU0NXlxSFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxaGRWMHZUOSYjeEE7VzAyNjB6VW9GdXJDOWlhQzZ0NU4xZU54eFpUOUdLdmpmODB2K2NSL04raTMwOTk1TFE2NW9qRXVscHlWYjJBVit3VllxSmdPeFQ0diYjeEE7OG52aXJ5Y2ZsUithQnVmcW84bzZ6NjQ2cDlRdWRnVFN0ZUZPTmUvVEZYc1A1VS84NGllWnRUdm9OUjg5ajlFYVJHUTUweEhWcnVlbSYjeEE7NFZpaFpZVVA3VlR6N1VIVUt2c095c3JTeHM0TEt6aFMzdExhTlliZTNqVUtrY2FBS3FLbzJBVUNnR0txMkt1eFYyS3V4VjJLdXhWMiYjeEE7S3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4Vi85az08L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXBNTTpSZW5kaXRpb25DbGFzcz5wcm9vZjpwZGY8L3htcE1NOlJlbmRpdGlvbkNsYXNzPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnV1aWQ6NjVFNjM5MDY4NkNGMTFEQkE2RTJEODg3Q0VBQ0I0MDc8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDozZjI3M2U1Zi1jMDFmLTRmMTYtYmRhZi05NDUzNmRjMTc5NjM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6M2YyNzNlNWYtYzAxZi00ZjE2LWJkYWYtOTQ1MzZkYzE3OTYzPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjYzOThjOThkLTZkNTYtNGRmOC1hMjAyLWFiMTg4ZDUxMjI0Nzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDo2Mzk4Yzk4ZC02ZDU2LTRkZjgtYTIwMi1hYjE4OGQ1MTIyNDc8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgICAgIDxzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+dXVpZDo2NUU2MzkwNjg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNzwvc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6cmVuZGl0aW9uQ2xhc3M+cHJvb2Y6cGRmPC9zdFJlZjpyZW5kaXRpb25DbGFzcz4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk5ZTY0ZWQzLWE1MzQtNDkzNi04YTA1LWIxNTM2ZjZjOWU5Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMi0wMy0yOFQxMTozMjowNC0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgSWxsdXN0cmF0b3IgMjYuMSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6M2YyNzNlNWYtYzAxZi00ZjE2LWJkYWYtOTQ1MzZkYzE3OTYzPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDIzLTAyLTA4VDEyOjU0OjI5LTA1OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyNy4yIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpTdGFydHVwUHJvZmlsZT5XZWI8L2lsbHVzdHJhdG9yOlN0YXJ0dXBQcm9maWxlPgogICAgICAgICA8aWxsdXN0cmF0b3I6Q3JlYXRvclN1YlRvb2w+QWRvYmUgSWxsdXN0cmF0b3I8L2lsbHVzdHJhdG9yOkNyZWF0b3JTdWJUb29sPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBsaWJyYXJ5IDE3LjAwPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGZ4OkNyZWF0b3JWZXJzaW9uPjIxLjAuMDwvcGRmeDpDcmVhdG9yVmVyc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pv/gABBKRklGAAECAQCWAJYAAP/tACxQaG90b3Nob3AgMy4wADhCSU0D7QAAAAAAEACWAAAAAQABAJYAAAABAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//dAAQAC//uAA5BZG9iZQBkwAAAAAH/wAARCABfAFcDABEAAREBAhEB/8QBogAAAQQABwAAAAAAAAAAAAAACgAGBwgBAgMEBQkLAQADAAEDBQAAAAAAAAAAAAAACAkGBQcKAQIDBAsQAAADAwIEAw1tGQAAAAAAAAECAwQFBgAHERITIQi28AkUFSIkMUFFVVZxhtEKFhcYGRojJSYnKCkqMjM0NTY3ODk6QkNERkdISUpRUlNUV1hZWmFiY2RlZmdoaWpyc3R1dnd4eXqBgoOEhYeIiYqRkpOUlZaXmJmaoaKjpKWmp6ipqrGys7S1t7i5usHCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+hEAAQICAwQFCA57AAAAAAAAAQIDBBEABQYHEiExEyJBUWEIM3FzgZGSswkKFBUmUlODobGytNHwFhcYGRojJCUnKCkqMjQ1Njc4OTpCQ0RFRkdISUpUVVZXWFlaYmNkZWZnaGlqcnR1dnd4eXqChIWGh4iJipOUlZaXmJmaoqOkpaanqKmqtba3uLm6wcLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oADAMAAAERAhEAPwA/iRQopFCikUKVenXsVMBzfA0utxKJxnExEzlKzOppRUcrA0hTkAj0e6R1E6oioW50EAUVKICU9TEaIZ3Z+wVa1wUvxU4aBnjUDfqHUCDnjEpUhmi+xU2Ft9pQFj7IldXVSpNaV6AResqSWG1YRJ14EiYPISG75QIvVXhwjrlj2xAzsx80LnesWN7sdypiiRxQ4su5HOiQh6qmiKLKtb03FTWCmAzWs0KAYAua5S0N8KlsdZ2qEpEPDIceA046A4s4JEzIknBgkhKRoYTNTq/ut28ta+pcfHuswiiJMQ5UyykAzAvUm+WAcILq3FTllsAlChHy92JrXeDG9XiyPBqqtvLczNzSg2NNXVKutV2lJUq61WWKBzUxhpjBRGuFGWZphYZ5oMOttqZTKSSkFIkJCQIkJDAJZmCmhwEbHMvqiWXnURK53y0rUFKmQTfKBmZnCZkzOE4aWHm2sYc60BtaKD/eKkfw6KqdvbDEa6i75SSolBU7tiIRM8CNJiFCgDULUiFegQpjCeWIV7css3XbRXBNiCjpZVTQAQTmX7XIMuxLxXURAlTfOx91+11SuJarF01hVxIvkvElwDNKHuQ56syROckEk07OJp5+5t542Qowq+SIvxNAy7fCb2FNiiJhImcCKqgxiodN4sZBOQRaGQ66JKoQpzEUESAvtp7E2gso5xcmSYIqkl5E1NKniF9KaVY8qsJUZEgFOEtRZi2tQ2sYC6tdvYu9mplckupzzLEpOLLIKkiYBIVgEzyxKmWUUihRSKFP/9A/iRQpFs408MDTYMpjRC8yqvY6ILMcOu6kan22FOYSpqW7U5CMTKcSmEFmgySRqQwFExwAg61VNQVlXK5QqJMTkXFYEDW5p0EgnCJyGEbYXRLr9iLmcOTaCKCq2UgKbhGZLiXATIG8mA2gyMnHVIQb1QQVLAQeuWdixIx1OKdd3sC6kJwuanTK6HS1LFa25ExSgNxp5kqKraBxA2MSZUUKUQAxDiFOO8Fn7IVXVMnXQH43HfqAkk9QJwgakkqziMQQu6JpQ1sroDq4KDUars4ZgMMrVfuJMuRh4XpcnhyiQhuRkUKIvzWJYt3luAyrFTaWFXOVOHXvMtWYzKZNCEmVOFaK1HSZawwJyplcEmcqcC0nu8tbh0Uy+BanKnFJPJtdjWg8Hc2NTA3sapV2RtYmhVka2ZZMaJFmdpQOmsgqQbsYpgEBlq6YRmJaLEQhK2FiSkqAUkg4wQZgjQNM2qxLrDiXWVKQ6kzCkkgg54Iwg6il9plrH+/YfOyuCeVkaIodFPUiRe60GVKInelSARG4k7UiMbE+2dIxS06pTItYEExxt4UoFNsxa+4JBVglUfY9aYaLlPbOsqLSzPDeLN8psnMBCkTkBkacI3/sxdBjUJTDV4C83iyVIAWM6+SJBQzzgVmm+OPtKgqPYNnGcjPEcERG7Ikc7SQhgancvTKM51CAoDM8GNUEm52NpCjc7O0pJLpjWMQBrSWOuqhrmzsaqrq7hnYaMSTlVjAZGU0KE0rTnLQpSTmE03fhIyFjmREQi0uNHNG9EYwdAgEZ1HdLSKezT//RNHsRU/DXAdJB0ILJpxU1oJtLxehk01wcLEtQMzpoILJqIKPJuIAmATgIIo0DUomOQxM0stZtFZTjo4EwaTJKcV+RjmRhvRoYzgxAgqNpSF36KsAU2LsctKbWPNhbz5AVtlaVhQlKVBSS86MOWBDbclXpUtCkdbDa0tTc0LNja0LtjW0KGVaGpqWUaGhdUw0TqLLqmOqqoYbuYRERlu6ylDaAhsBKAJAASA1AGCk3nY2KjolcZGuuPRbiipa1qK1qJxqUpRKlE5pJJpxKoS1Fo4qalDKpxK4BXrS1Rk0yODUcFODaK1GWsw+ZTLoETlRvNRruH668tehk4qZrV6Jyo22pS715ZBDInKmc1ezOWCjcalaFGvLIYZrFTOavh5yo3WlW7/q+tLXodqmbQMNgFOfgWdGOprX6lEUBxM84deJDoi0AxNBwYXmigoJyMb4dpxMwvdhphEai0EUIAjRAAMACHiruytRWqgDV1fQzUTDEGV8MsgkSKm18hNq6iQQczFMUzWq3ImCcDkMtSFZssR0CMRGgaEDWGqf102IObxKJ0EGZ1xK6WkHRGDgRXqoO57FRIsm2MZFDi1XBXugaqsp1AGgYqqNOodA5xn5dNufxlzy0RqtxSnaseTkkO6RK/bmQUqIyuSNnKrAzCld6lK0gbrVdHJjocOyk4MChnHQ0Dma7Mp//0iQ4tiFriyJX7EjcdRRpfLyam41UEBMkkqoNuzOFC5QTZWYCJEAKxSkAAu0mBgYVEFCNwjcghtAHAnWmZOppDC19pIy19qI+00epSomNilum+xpSpWURnSbReoSBgCUgDAKNg95tWrtL326aQ1jpx6t2HAS99qmsw9OIXvMtWYpk8FjFG+1Dd8AMtdhhipmdXpnKjZbD3fSJZFCpxUz6rG5yo1WxShRrhLJoRucqbhVYxOVGu1q3eWSQrWKm4FWw05YKNxpWu9ehv9qtLIIdnBTOYCFxU4RZa71/rS1lpqmVwsLgGCl1rZ9zmDBM/jM4214MzDD0eQ++3O9lXg2JsbuZWlzu5qiZ1PFZVddBnK0JHdSrIkY4mrNpygFEwCGymlDWW2/Lnyo9htblY1fENONhCSpakuLSw4gAAmRDiXFAS02CTIEHKapSWH5HAlQkdZhHB0af/9MiERvFoJMWBSByRM00Djd7VqtLztinutJw02Co+XL3mhiprUMnDThmk13lq8OMVMpgU4pUbjWa78jLIIROKmcVa3OVGo2qXeWTwaMVNxaqZnKjRbVQr19J1iWVQbWKm5dVQ+KjSbFrvXwksphGsVNx6shcAwUbLUvd69ruJZFDM0z6r4MyGCnBrNFca93lrLTGhTLIWDwYqSnMKtRnZhSvfdstvjASxi6A1Kx8Xu1s5umsNQt6QZU//9QhwTWrVeTIBGGkGEt026h5ewhM6e6y3Tj1j/Wl77SMNNbhmqcK0Hu9q0AS1eHRTKYFo4KNptUoU0sig0Uz2qmTgoz25S77/LLIJvFTc2qIecqM1uWoU1eWWwTWKm6NUQ05GVGc2rXff/rUZZZBs4qbnVVCTAlRrNTRd69rpJZLDMU3Bq+DnLBTgVmiuNfpbV2lrTTGCmYwsFgxUleYFemnchMKN96yy+ZYrdEZlYyMOqtntU1FUHetlUqf/9UhIVJM0EE0hSlnDTbKKXe1atb97CG8wU99lmnGLq1hlqLLdNehGMIz6cG0rXevLWYdrFTLYCGnKjZbVrvv8skg2sVM/qqGxUZzctk61yOsyy2CaxU3PqeGlLBRlN6uTrveek7iWXwLWKm6lTw2LBRmty13wGsyy6CapujVELgAo0mte715ZPCs03Hq2EwDBRvrtFca8tbZYwUzOEgsrhFJZsPiwjPBCIUQvf1sFh9SxK6Q1KxUbg3R2e1T3YqFCYZRlnb2Kf/WIFMpWwtoZNMlsmkPkMzNNoqpWGva/VL2m26akwxhpxTQrrMtSYaw0yGDhpmnAtS1Ya9r9UtchmsIpmVXw2EYKNdtWogNf60slg2sVNwarhsIoz25WjRr6TXllcE1KVNzaohpSwUZjerk61Rll8C3ipunU8PiwUZbcrk6WXQTeKm6VUsYqNJsVG5t/wADaoyyiFbGCm5FWw4wUbq6o0RlrjTYApm0JDCQpLlh4VozxQgFG/gsrPuWHXS0bgiNOqd/DVPZrBgCCWdRvoU//9cjWdKC2ybqOoihNrKapu5uOd2riBqDY52u6l1NZDCJgEyjEqQFAAxqmsU5BERKMmdqGsG65qtmsG8a05YZyxgUNiBlimJHEaSIt9YuJsNbGOs1EA5Gw8S0rc7C8uysY8JbKQqRN6sKQSSk0jNVW7yyFpvXU0GHYw04hda717Wky1ZhqmTQUNio32pa77/a3+WuwzWKmZ1fDYRRsNiuTpZJCN4qbgVXD4sFGk2qXevpMspg28VNyapYxUZzce715ZZBoxU3PqhoYKM9uNd7XcSyuDTipubVSJSo02sbvLJoUSFNxqsSABRur3cZa23TNYSUqdmdssppXlFM9rynWWZ6SH5rnI3M6DYoC5avFcXu9tcjIxMlIqgkvUIeXeCjQJqsVGmRAyYGWTUIquld2zhapsC1Y9tU6yrd9BKRLBDwy0uqUrASJvBlKAL0qkuSiELSrRrXRrbNXCDGnXlDYUkGevvZYp4c4g//0Dd5+piXdPE50V2RdF1Rk50TpuR6risDEugc4qndL3KiRZQWBVQRMRUhDqs6giYoGKJ0z5dZO1T1nIkpcBcq1w5dAlfA4r9E5C+AxgkBQwEggEbN3XrkcBdMq5DzC0w9p4ZJDDyp3ikkzLLwAJyMnCFJSVNqN8kKBWhfU3ODN3Gs2zzO6owcbU61BMIMrYJQaHW8UwKBwVdryRp2NrKJDAJilNVExGlUKU4CUGJqOuKrrxgRFWupcGaMSk6CknCNSRI4wSJEofX9hbS2Mj9u+0UK4w5PKr5CacGe24maFiUiQDfJxLSlQIEWNKt3rja6SWWw7VO6Ch8VG+1K3evLXoZqmaVfD4sFG01qXeWRQreKmeVaxKVGq2Ho00slhEYqbiVY3KVGo2jRojv1rf5ZPCDFTcWq0yAz6NRsCjRlk0IQJU3GqxQAFGu1lu8sjhlUz6r3MVLGWH6weTu2Il4MTQ4nQtDsBqrLpt84r8ZTpuFAjKKya5HSiZRnaokbStKAoVJkpiJrVllESgYxdubo926xdzOFcarB5MVaEJBRBNKBeN9IguGRSwm9N9fOSKk4W0rMgdderqFq9vLm+elgSMetzs/DmYgaEjTMTPwdMVN44pt4IZTpOlzkVVaW5qqR3o/Xu1nqryfj5aUk0gaXi3LUK9ACIokTRSKRFJMhZdW5ttXd0G00Raiv1gxj5AShM8jabSJIaaSSb1CBrVKKnFlS1qUcCjo1+sIlUVEHLqzMwDMA0BvJmThJJ//RP4kUKcLEEOOCK3Wu5YlcztfrqaaAqsD0ZEWxnE5QMBFiEWIaotKNMIpqkpVEzVymAa8vago6Mq6IEVAOrZiE4lIJSdRgxg5oOA4iCKadWlU1ZXcGqr63h2YmCXjQ4kKTPMIBBkoTyqhJSThBBw065Z5rA+3M5Gp+zPthnggQlVVgt8NJCt5Rpxpwcb5WFNnaygQ4UEGsUjlKQwguqcxUw32sldcYUpMHahF4omQfQMru4gTI7GRMTIyiQCqi2WsuBmEUqPsasrZxmGcVlxh5lOmQUM5DkiADxMWSEjraf7tejheTc5n2wNjqeruXOyt7ueDOqyNjIuTJyS7OsUiiZgAQEKIVwEBCiAgMmKq12GjYdEXBrQ7DOJBStJCkqBzQRgNNqWqtiYGJVCxja2oltUlJUClSTnEHCKM1qUo0ZZNDIlTLqvZlKjcaho0Za/DCUqZxV6ZSo3GoKNHf7WAlkEMZSpnVXKCZUcM300c4U8D/AMO3N3DLfEbzIUizWZnqSDA7GVQ9TK1vV5tSiDA7mYT0QKZVQtOIUpQMasPjr+2VnLGVft52kim4aFJkmcytZlO9bQkFa1Z4SDLGZDDTO6sWpXIInTt7sP1s3YCggzBE88qzFONE6dujYjDBUFCQQ5mpPGRRnbEFlKpGNKoAUbekkWM5aJDsqgXOKeXRdKetFXocqqxAXVlVG+SX5gxTqTgBSQJQ2DdNSnQZKDqTgGUJinUIvWzLRzfrU7L2ZmZ2NnZ2NjZ0WVkZUUmZlZWZIiDOzM6BCpIM7OgkUqSKKKRAKQhQApSgAAFCStOuuvuqeeUpby1FSlKJKlKJmSScJJOEk4SaesSSZnHTWl2UKf/SP4kUKKRQopFCkUTqTKTdzxusHfGzkK0tSDOsg7H8wnBiiBzVaiNO73gCagCUig09RXIuzGOFE6RpZRZm2Nf2SidtFTPXralAraVlmnJZi04MzBfJKVgYlCmgV7ZmprRtBus2gp1IIS4nA4ie5VZ08N6oKSTjSadXc5Vs/J1XG0tLRN48XRHzpExBZGRZrZobiQgKKUDJtCD1XScShGZMwUVitxDKgUwgiQRKQWbs1d6stGNpbtA27ARXMSglTzOAYwUAuie5S0QmYF+rCRtVGXM61gXCqrVoiWMwEhC9aFG8wZ4UJy5BGAUr8jYQrES8nk8HQxzeVd4uyhb8z4e2Bk6hTCBQxlViZNBSiI5wMaW4puu3PIWGbi36wvYdzkE5BEmesDJI1oFO6DsvXocLWQcTE4xft4PJ6Wvmntmy0nbGN7zzxQzlYkjprqQfCCiqi7ZSKCa3Z5xI0JIlZGY5UwKqRkQOqcihqm0ImKBx2vtXpSraGVwdi4VWTkECIiAAE4MaGQTfHDNJcUEggXzawSBntV2XcakuPWJblT7FXADWinaLB0FQnN84GOF4KcDuhtwMNOLO7XYhUUqopQFVoXUMJ12trXEAFRZUx1VBCiYwjJXK6ryt7RVguta7iHImsHMa1mZkMQAxJSMxKQEjMApmLbTbKA20AlAzBR0S0qnkopFCikUKf//Z",id:"h",width:87,height:95}))))};var R;function m(){return m=Object.assign?Object.assign.bind():function(A){for(var C=1;C<arguments.length;C++){var I=arguments[C];for(var g in I)Object.prototype.hasOwnProperty.call(I,g)&&(A[g]=I[g])}return A},m.apply(this,arguments)}const c=A=>{let{title:C,titleId:I,...g}=A;return E.createElement("svg",m({viewBox:"0 0 340 51",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":I},g),C?E.createElement("title",{id:I},C):null,R||(R=E.createElement("path",{fill:"currentColor",d:"M77.42 14.44c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26s-8.17-18.26-18.26-18.26zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zm41.27-29.44c-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c10.09 0 18.26-8.18 18.26-18.26s-8.17-18.26-18.26-18.26zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zM39.01 14.44c-4.76 0-9.01 2.16-11.83 5.55-2.83-3.39-7.08-5.55-11.83-5.55-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V29.85a8.32 8.32 0 0 1 8.32-8.32c4.39 0 7.98 3.41 8.29 7.72-.01.2-.03.4-.03.6v21.12h7.15V29.85c0-.2-.02-.4-.03-.6.31-4.31 3.9-7.72 8.29-7.72a8.32 8.32 0 0 1 8.32 8.32v21.12h7.09V29.85c-.02-8.51-6.92-15.41-15.42-15.41zm118.09 0c-8.51 0-15.41 6.9-15.41 15.41v21.12h7.09V29.85a8.32 8.32 0 0 1 16.64 0v21.12h7.09V29.85c0-8.51-6.9-15.41-15.41-15.41zm172.46 18.27c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c5.04 0 9.61-2.04 12.91-5.35l-5.01-5.01a11.149 11.149 0 0 1-7.9 3.27c-4.94 0-9.12-3.21-10.6-7.65h28.52c.21-1.14.34-2.32.34-3.52zm-18.27-11.18c4.94 0 9.12 3.21 10.6 7.65h-21.2c1.48-4.44 5.66-7.65 10.6-7.65zm-115.77-7.09c-4.21 0-8.09 1.44-11.18 3.84V-.02h-7.09v32.73c0 10.09 8.18 18.26 18.26 18.26 10.09 0 18.26-8.18 18.26-18.26s-8.16-18.27-18.25-18.27zm0 29.44c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18c-.01 6.18-5.01 11.18-11.18 11.18zm59.53-11.17c0-10.09-8.18-18.26-18.26-18.26-10.09 0-18.26 8.18-18.26 18.26s8.18 18.26 18.26 18.26c4.21 0 8.08-1.44 11.18-3.84v3.84h7.09l-.01-18.26zm-18.26 11.17c-6.17 0-11.18-5-11.18-11.18 0-6.17 5-11.18 11.18-11.18s11.18 5 11.18 11.18-5.01 11.18-11.18 11.18zm52.12-22.59v-6.85h-18.28c-5.53 0-10 4.48-10 10 0 4.49 2.99 8.43 7.32 9.64l11.31 3.15c1.51.42 2.56 1.8 2.56 3.37 0 1.93-1.57 3.5-3.5 3.5h-17.69v6.87h17.72c5.83 0 10.56-4.73 10.56-10.56 0-4.74-3.16-8.9-7.73-10.17l-11.3-3.15a2.96 2.96 0 0 1 .8-5.81h18.23v.01z"})))};var N=I(50615),W=I(31792),Y=I(90728),h=I(30658),i=I(33453),n=I(81271),o=I(94141);function p(){return E.createElement("div",{className:"bg-gradient-to-b from-slate-900 to-slate-600 star-pattern"},E.createElement("div",{className:"max-w-7xl mx-auto py-10 px-4 pb-6 sm:py-12 sm:px-6 md:py-14 lg:py-16 lg:px-8 xl:py-20 flex flex-col md:flex-row"},E.createElement("div",{className:"text-center md:text-left md:w-7/12"},E.createElement(n.Z,{icon:E.createElement(a,{height:77}),text:E.createElement(c,{height:70})}),E.createElement("p",{className:"mt-1 mb-0 text-base text-white sm:text-lg sm:max-w-xl sm:mx-auto md:text-xl md:mx-0 md:w-[80%]"},"A service for monitoring codebases, tracking ownership, and scaling CI pipelines."),E.createElement("p",{className:"mt-1 text-white opacity-50 text-sm md:text-base md:pr-4"},"For"," ",E.createElement(Y.Z,{href:"/moon",variant:"muted"},"moon")," ","powered repositories."),E.createElement("div",{className:"mt-3 flex justify-center md:justify-start"},E.createElement("div",null,E.createElement(i.Z,{href:"https://moonrepo.app",color:"bg-teal-600"},"Try it today",E.createElement(W.Z,{icon:t.CSB,className:"ml-1 md:ml-2 inline-block",style:{maxWidth:18}}))))),E.createElement("div",{className:"mt-4 md:mt-0 md:w-5/12"},E.createElement("div",{className:"relative sm:pb-8"},E.createElement(o.Z,null)),E.createElement("div",{className:"mt-2 flex justify-center items-start gap-1"},E.createElement("div",null,E.createElement(h.ZP,{className:"text-white opacity-50 m-0",size:"sm"},"Backed by")),E.createElement("div",null,E.createElement(N.Z,{height:22}))))))}var r=I(83469),s=I(76911),M=I(9187);function T(A){let{children:C,cta:I,items:g,title:e}=A;return E.createElement("div",null,E.createElement("div",{className:"text-center mb-3"},E.createElement(M.Z,{level:4,className:"mb-1"},e),C),E.createElement("div",{className:"bg-gray-50 rounded p-4 lg:h-[260px]"},E.createElement("ul",{className:"flex flex-col gap-2 p-0 m-0"},g.map((A=>E.createElement("li",{key:A.label,className:"list-none relative pl-4"},E.createElement("abbr",{title:A.tooltip},A.label),A.monthly&&E.createElement("span",{className:"text-gray-700 inline-block ml-0.5"},"/ month"),E.createElement("div",{className:"absolute top-0 left-0 text-blurple-400"},E.createElement(W.Z,{icon:r.LEp}))))))),E.createElement("div",{className:"flex justify-center mt-2"},E.createElement(s.Z,I)))}function S(){return E.createElement("div",{id:"pricing",className:"relative py-4 sm:py-5 lg:py-6 bg-white text-slate-900"},E.createElement("div",{className:"mx-auto max-w-md px-2 sm:max-w-3xl sm:px-3 lg:max-w-7xl lg:px-4"},E.createElement("div",{className:"text-center mb-4"},E.createElement(M.Z,{level:2},"Pricing"),E.createElement("p",{className:"mt-1"},"Use moonbase for free for small, personal, or open source projects.",E.createElement("br",null),"Upgrade for more features or for larger teams.")),E.createElement("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3"},E.createElement("div",null,E.createElement(T,{title:"Start",items:[{label:"1 organization member",tooltip:"Maximum number of members per organization, including the owner."},{label:"5 repositories",tooltip:"Maximum number per organization."},{label:"100 CI runs",monthly:!0,tooltip:"Across all repositories."},{label:"1GB cloud storage",tooltip:"Across all repositories."}],cta:{href:"https://moonrepo.app",label:"Get started"}},E.createElement(M.Z,{level:1},"Free"))),E.createElement("div",null,E.createElement(T,{title:"Scale",items:[{label:"Priority support",tooltip:"Get faster replies to support questions."},{label:"5 free repositories",tooltip:"Increased cost for additional repositories."},{label:"1,000 CI runs",monthly:!0,tooltip:"Across all repositories."},{label:"10GB cloud storage",tooltip:"Across all repositories."},{label:"Unlocked organization settings"}],cta:{href:"https://moonrepo.app/upgrade",label:"Upgrade now"}},E.createElement("div",{className:"flex justify-center gap-2"},E.createElement("div",null,E.createElement(M.Z,{level:1},"$5")),E.createElement("div",{className:"text-left"},"per member + repo",E.createElement(h.ZP,{className:"m-0",variant:"muted"},"monthly"))))),E.createElement("div",null,E.createElement(T,{title:"Grow",items:[{label:"Enterprise support",tooltip:"Get instant replies to support questions."},{label:"15 free repositories",tooltip:"Increased cost for additional repositories."},{label:"Unlimited CI runs",monthly:!0,tooltip:"Across all repositories."},{label:"Unlimited cloud storage",tooltip:"Across all repositories."},{label:"+ previous tier"}],cta:{disabled:!0,label:"Coming soon"}},E.createElement(M.Z,{level:1},"Soon")))),E.createElement("div",{className:"mt-6 text-center"},E.createElement(h.ZP,{className:"mb-1",size:"sm",variant:"muted"},E.createElement(Y.Z,{size:"sm",href:"https://moonrepo.app/terms"},"Terms of Service")," \xb7 ",E.createElement(Y.Z,{size:"sm",href:"https://moonrepo.app/privacy"},"Privacy Policy")),E.createElement(h.ZP,{size:"sm",variant:"muted"},"Prices and limits subject to change before release!"))))}var k=I(64654);const b=[{title:"Artifact caching",icon:t.wEO,description:"Cache build artifacts between CI runs to reduce job times and overall costs."},{title:"Run history",icon:t.cp3,description:"Track CI runs to detect flakiness, regressions, and time spent on task execution.",status:"new"},{title:"Remote distribution",icon:t.fjp,description:"Distribute task execution across multiple remote agents to increase throughput.",status:"coming-soon"}],G=[{title:"Project registry",icon:t.HX7,description:"An aggregated registry of all projects, across all repositories, within an organization.",status:"in-development"},{title:"Code owners",icon:t.h94,description:"A granular breakdown of which team or developer owns a portion of code within each project.",status:"coming-soon"},{title:"Health score",icon:t.AKf,description:"Monitor the health of projects and avoid tech debt.",status:"coming-soon"}];function J(){return E.createElement(k.Z,{title:"moonbase - A service for monitoring codebases and scaling CI pipelines",description:"Reduces job times, tracks CI jobs, manages project/code ownerships, and more."},E.createElement(p,null),E.createElement("main",null,E.createElement("div",{className:"bg-gradient-to-b from-slate-600 via-teal-800 to-white"},E.createElement(Z.Z,{header:"Continuous integration",description:"Highly efficient pipelines",features:b,tier:3}),E.createElement(Z.Z,{header:"Ownership",description:"Everything in one place",features:G,tier:1,reversed:!0})),E.createElement(S,null)))}},9619:(A,C,I)=>{I.d(C,{Z:()=>Q});var g=I(27378),e=I(40624),U=I(31792);const F={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function Q(A){let{className:C,icon:I,text:Q,variant:l}=A;return g.createElement("span",{className:(0,e.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?F[l]:"bg-gray-100 text-gray-800",C)},I&&g.createElement(U.Z,{icon:I,className:"mr-1"}),Q)}}}]); \ No newline at end of file diff --git a/assets/js/d7cf5e1f.55dfdbc4.js b/assets/js/d7cf5e1f.55dfdbc4.js deleted file mode 100644 index 906698107b6..00000000000 --- a/assets/js/d7cf5e1f.55dfdbc4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7005],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(r),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||i;return r?n.createElement(f,a(a({ref:t},p),{},{components:r})):n.createElement(f,a({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:i,align:a="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:a}},n.createElement("img",{src:t.default,width:r,alt:o,title:i,className:"inline-block"}))}},12403:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));r(88109);const i={slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},a=void 0,l={permalink:"/blog/vscode-extension",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-17_vscode-extension.mdx",source:"@site/blog/2022-10-17_vscode-extension.mdx",title:"New VS Code extension!",description:"We're very excited to announce the initial release of our Visual Studio Code extension!",date:"2022-10-17T00:00:00.000Z",formattedDate:"October 17, 2022",tags:[{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:.645,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},prevItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"},nextItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"}},s={authorsImageUrls:[void 0]},c=[],p={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"We're very excited to announce the initial release of our Visual Studio Code extension!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d7cf5e1f.dfd62478.js b/assets/js/d7cf5e1f.dfd62478.js new file mode 100644 index 00000000000..1461aee7e08 --- /dev/null +++ b/assets/js/d7cf5e1f.dfd62478.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67005],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(r),d=o,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||i;return r?n.createElement(f,a(a({ref:t},p),{},{components:r})):n.createElement(f,a({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:i,align:a="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:a}},n.createElement("img",{src:t.default,width:r,alt:o,title:i,className:"inline-block"}))}},12403:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));r(88109);const i={slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},a=void 0,l={permalink:"/blog/vscode-extension",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-17_vscode-extension.mdx",source:"@site/blog/2022-10-17_vscode-extension.mdx",title:"New VS Code extension!",description:"We're very excited to announce the initial release of our Visual Studio Code extension!",date:"2022-10-17T00:00:00.000Z",formattedDate:"October 17, 2022",tags:[{label:"editors",permalink:"/blog/tags/editors"},{label:"vscode",permalink:"/blog/tags/vscode"}],readingTime:.645,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"vscode-extension",title:"New VS Code extension!",authors:["milesj"],tags:["editors","vscode"]},prevItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"},nextItem:{title:"moon v0.16 - Per-project tool versions and TypeScript improvements",permalink:"/blog/v0.16"}},s={authorsImageUrls:[void 0]},c=[],p={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"We're very excited to announce the initial release of our Visual Studio Code extension!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d84e8684.bd86b455.js b/assets/js/d84e8684.bd86b455.js new file mode 100644 index 00000000000..b26926a41c0 --- /dev/null +++ b/assets/js/d84e8684.bd86b455.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80146],{47751:e=>{e.exports=JSON.parse('{"label":"hydration","permalink":"/blog/tags/hydration","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/d84e8684.ca10318e.js b/assets/js/d84e8684.ca10318e.js deleted file mode 100644 index 8def242d44d..00000000000 --- a/assets/js/d84e8684.ca10318e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[146],{47751:e=>{e.exports=JSON.parse('{"label":"hydration","permalink":"/blog/tags/hydration","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/d8fdbe7a.3963b871.js b/assets/js/d8fdbe7a.3963b871.js new file mode 100644 index 00000000000..898e561d644 --- /dev/null +++ b/assets/js/d8fdbe7a.3963b871.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43993],{35318:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||i;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},82887:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=n(25773),r=(n(27378),n(35318));const i={title:"query touched-files",sidebar_label:"touched-files"},o=void 0,l={unversionedId:"commands/query/touched-files",id:"commands/query/touched-files",title:"query touched-files",description:"Use the moon query touched-files sub-command to query for a list of touched files (added,",source:"@site/docs/commands/query/touched-files.mdx",sourceDirName:"commands/query",slug:"/commands/query/touched-files",permalink:"/docs/commands/query/touched-files",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/touched-files.mdx",tags:[],version:"current",frontMatter:{title:"query touched-files",sidebar_label:"touched-files"},sidebar:"docs",previous:{title:"tasks",permalink:"/docs/commands/query/tasks"},next:{title:"run",permalink:"/docs/commands/run"}},s={},u=[{value:"Options",id:"options",level:3}],d={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon query touched-files")," sub-command to query for a list of touched files (added,\nmodified, deleted, etc) using the current VCS state. These are the same queries that\n",(0,r.kt)("a",{parentName:"p",href:"../ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," and ",(0,r.kt)("a",{parentName:"p",href:"../run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," use under the hood."),(0,r.kt)("p",null,"Touches files are determined using the following logic:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If ",(0,r.kt)("inlineCode",{parentName:"li"},"--defaultBranch")," is provided, and the current branch is the\n",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#defaultbranch"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),", then compare against the previous\nrevision of the default branch (",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD~1"),"). This is what ",(0,r.kt)("a",{parentName:"li",href:"../../guides/ci"},"continuous integration"),"\nuses."),(0,r.kt)("li",{parentName:"ul"},"If ",(0,r.kt)("inlineCode",{parentName:"li"},"--local")," is provided, touched files are based on your local index only (",(0,r.kt)("inlineCode",{parentName:"li"},"git status"),")."),(0,r.kt)("li",{parentName:"ul"},"Otherwise, then compare the defined base (",(0,r.kt)("inlineCode",{parentName:"li"},"--base"),") against head (",(0,r.kt)("inlineCode",{parentName:"li"},"--head"),").")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Return all files\n$ moon query touched-files\n\n# Return deleted files\n$ moon query touched-files --status deleted\n\n# Return all files between 2 revisions\n$ moon query touched-files --base <branch> --head <commit>\n")),(0,r.kt)("p",null,"By default, this will output a list of absolute file paths, separated by new lines."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"/absolute/file/one.ts\n/absolute/file/two.ts\n")),(0,r.kt)("p",null,"The files can also be output in JSON by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the following\nstructure:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts"},"{\n files: string[],\n options: QueryOptions,\n}\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--defaultBranch")," - When on the default branch, compare against the previous revision."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--base <rev>")," - Base branch, commit, or revision to compare against. Defaults to\n",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#defaultbranch"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--head <rev>")," - Current branch, commit, or revision to compare with. Defaults to ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--json")," - Display the files in JSON format."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--local")," - Gather files from you local state instead of remote."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--status <type>")," - Filter files based on a touched status. Can be passed multiple times.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Types: ",(0,r.kt)("inlineCode",{parentName:"li"},"all")," (default), ",(0,r.kt)("inlineCode",{parentName:"li"},"added"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"deleted"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"modified"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"staged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"unstaged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"untracked"))))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d8fdbe7a.49ef283d.js b/assets/js/d8fdbe7a.49ef283d.js deleted file mode 100644 index d39c106e594..00000000000 --- a/assets/js/d8fdbe7a.49ef283d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3993],{35318:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,f=p["".concat(s,".").concat(m)]||p[m]||c[m]||i;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},82887:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=n(25773),r=(n(27378),n(35318));const i={title:"query touched-files",sidebar_label:"touched-files"},o=void 0,l={unversionedId:"commands/query/touched-files",id:"commands/query/touched-files",title:"query touched-files",description:"Use the moon query touched-files sub-command to query for a list of touched files (added,",source:"@site/docs/commands/query/touched-files.mdx",sourceDirName:"commands/query",slug:"/commands/query/touched-files",permalink:"/docs/commands/query/touched-files",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/touched-files.mdx",tags:[],version:"current",frontMatter:{title:"query touched-files",sidebar_label:"touched-files"},sidebar:"docs",previous:{title:"tasks",permalink:"/docs/commands/query/tasks"},next:{title:"run",permalink:"/docs/commands/run"}},s={},u=[{value:"Options",id:"options",level:3}],d={toc:u};function c(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon query touched-files")," sub-command to query for a list of touched files (added,\nmodified, deleted, etc) using the current VCS state. These are the same queries that\n",(0,r.kt)("a",{parentName:"p",href:"../ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," and ",(0,r.kt)("a",{parentName:"p",href:"../run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," use under the hood."),(0,r.kt)("p",null,"Touches files are determined using the following logic:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If ",(0,r.kt)("inlineCode",{parentName:"li"},"--defaultBranch")," is provided, and the current branch is the\n",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#defaultbranch"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),", then compare against the previous\nrevision of the default branch (",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD~1"),"). This is what ",(0,r.kt)("a",{parentName:"li",href:"../../guides/ci"},"continuous integration"),"\nuses."),(0,r.kt)("li",{parentName:"ul"},"If ",(0,r.kt)("inlineCode",{parentName:"li"},"--local")," is provided, touched files are based on your local index only (",(0,r.kt)("inlineCode",{parentName:"li"},"git status"),")."),(0,r.kt)("li",{parentName:"ul"},"Otherwise, then compare the defined base (",(0,r.kt)("inlineCode",{parentName:"li"},"--base"),") against head (",(0,r.kt)("inlineCode",{parentName:"li"},"--head"),").")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Return all files\n$ moon query touched-files\n\n# Return deleted files\n$ moon query touched-files --status deleted\n\n# Return all files between 2 revisions\n$ moon query touched-files --base <branch> --head <commit>\n")),(0,r.kt)("p",null,"By default, this will output a list of absolute file paths, separated by new lines."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"/absolute/file/one.ts\n/absolute/file/two.ts\n")),(0,r.kt)("p",null,"The files can also be output in JSON by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the following\nstructure:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts"},"{\n files: string[],\n options: QueryOptions,\n}\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--defaultBranch")," - When on the default branch, compare against the previous revision."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--base <rev>")," - Base branch, commit, or revision to compare against. Defaults to\n",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#defaultbranch"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.defaultBranch")),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--head <rev>")," - Current branch, commit, or revision to compare with. Defaults to ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--json")," - Display the files in JSON format."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--local")," - Gather files from you local state instead of remote."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--status <type>")," - Filter files based on a touched status. Can be passed multiple times.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Types: ",(0,r.kt)("inlineCode",{parentName:"li"},"all")," (default), ",(0,r.kt)("inlineCode",{parentName:"li"},"added"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"deleted"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"modified"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"staged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"unstaged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"untracked"))))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d93dbc28.23bb4bdf.js b/assets/js/d93dbc28.23bb4bdf.js new file mode 100644 index 00000000000..3f15b3ba37e --- /dev/null +++ b/assets/js/d93dbc28.23bb4bdf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85679],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),u=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,f=m["".concat(i,".").concat(d)]||m[d]||p[d]||l;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var u=2;u<l;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),s=n(35595),i=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==s&&(m(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":s===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,s.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),s=n(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??i(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(o.location.search);t.set(s,e),o.replace({...o.location,search:t.toString()})}),[s,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,s.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=m??f;return c({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&i(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),g(e)}),[d,g,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function s(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function i(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=s(e,!1,!0),n=i(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=s(e,!0,!0),n+=i(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},s(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function s(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function i(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},s("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},s("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},s("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},s("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},79597:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var a=n(25773),r=(n(27378),n(35318));n(36642),n(27457),n(33337),n(39798),n(32189);const l={title:"Nest example",sidebar_label:"Nest"},o=void 0,s={unversionedId:"guides/examples/nest",id:"guides/examples/nest",title:"Nest example",description:"In this guide, you'll learn how to integrate NestJS into moon.",source:"@site/docs/guides/examples/nest.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/nest",permalink:"/docs/guides/examples/nest",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/nest.mdx",tags:[],version:"current",frontMatter:{title:"Nest example",sidebar_label:"Nest"},sidebar:"guides",previous:{title:"Jest",permalink:"/docs/guides/examples/jest"},next:{title:"Next",permalink:"/docs/guides/examples/next"}},i={},u=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],c={toc:u};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://nestjs.com/"},"NestJS")," into moon."),(0,r.kt)("p",null,"Begin by creating a new NestJS project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"npx @nestjs/cli@latest new nestjs-app --skip-git\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.nestjs.com/first-steps"},"official NestJS docs")," for a more in-depth guide to\ngetting started!")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since NestJS is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"type: 'application'\n\nfileGroups:\n app:\n - 'nest-cli.*'\n\ntasks:\n dev:\n command: 'nest start --watch'\n local: true\n\n build:\n command: 'nest build'\n inputs:\n - '@group(app)'\n - '@group(sources)'\n")),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"NestJS has ",(0,r.kt)("a",{parentName:"p",href:"https://NestJS.io/guide/typescript-configuration"},"built-in support for TypeScript"),", so\nthere is no need for additional configuration to enable TypeScript support."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository."),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as NestJS should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"nest")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new NestJS project, a ",(0,r.kt)("a",{parentName:"p",href:"https://docs.nestjs.com/cli/monorepo"},(0,r.kt)("inlineCode",{parentName:"a"},"nest-cli.json"))," is\ncreated, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure NestJS for\ntheir needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/nest-cli.json"',title:'"<project>/nest-cli.json"'},'{\n "$schema": "https://json.schemastore.org/nest-cli",\n "collection": "@nestjs/schematics",\n "type": "application",\n "root": "./",\n "sourceRoot": "src",\n "compilerOptions": {\n "tsConfigPath": "tsconfig.build.json"\n }\n}\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d93dbc28.c5914b9c.js b/assets/js/d93dbc28.c5914b9c.js deleted file mode 100644 index d4e4a11fcbc..00000000000 --- a/assets/js/d93dbc28.c5914b9c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5679],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),u=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,f=m["".concat(i,".").concat(d)]||m[d]||p[d]||l;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var u=2;u<l;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),s=n(35595),i=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==s&&(m(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":s===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,s.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),s=n(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??i(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(o.location.search);t.set(s,e),o.replace({...o.location,search:t.toString()})}),[s,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,s.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),h=(()=>{const e=m??f;return c({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{h&&i(h)}),[h]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),g(e)}),[d,g,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function s(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function i(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=s(e,!1,!0),n=i(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=s(e,!0,!0),n+=i(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},s(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function s(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function i(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},s("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},s("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},s("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},s("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},79597:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var a=n(25773),r=(n(27378),n(35318));n(36642),n(27457),n(33337),n(39798),n(32189);const l={title:"Nest example",sidebar_label:"Nest"},o=void 0,s={unversionedId:"guides/examples/nest",id:"guides/examples/nest",title:"Nest example",description:"In this guide, you'll learn how to integrate NestJS into moon.",source:"@site/docs/guides/examples/nest.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/nest",permalink:"/docs/guides/examples/nest",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/nest.mdx",tags:[],version:"current",frontMatter:{title:"Nest example",sidebar_label:"Nest"},sidebar:"guides",previous:{title:"Jest",permalink:"/docs/guides/examples/jest"},next:{title:"Next",permalink:"/docs/guides/examples/next"}},i={},u=[{value:"Setup",id:"setup",level:2},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],c={toc:u};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://nestjs.com/"},"NestJS")," into moon."),(0,r.kt)("p",null,"Begin by creating a new NestJS project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"npx @nestjs/cli@latest new nestjs-app --skip-git\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.nestjs.com/first-steps"},"official NestJS docs")," for a more in-depth guide to\ngetting started!")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since NestJS is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"type: 'application'\n\nfileGroups:\n app:\n - 'nest-cli.*'\n\ntasks:\n dev:\n command: 'nest start --watch'\n local: true\n\n build:\n command: 'nest build'\n inputs:\n - '@group(app)'\n - '@group(sources)'\n")),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"NestJS has ",(0,r.kt)("a",{parentName:"p",href:"https://NestJS.io/guide/typescript-configuration"},"built-in support for TypeScript"),", so\nthere is no need for additional configuration to enable TypeScript support."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository."),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as NestJS should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"nest")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new NestJS project, a ",(0,r.kt)("a",{parentName:"p",href:"https://docs.nestjs.com/cli/monorepo"},(0,r.kt)("inlineCode",{parentName:"a"},"nest-cli.json"))," is\ncreated, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure NestJS for\ntheir needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/nest-cli.json"',title:'"<project>/nest-cli.json"'},'{\n "$schema": "https://json.schemastore.org/nest-cli",\n "collection": "@nestjs/schematics",\n "type": "application",\n "root": "./",\n "sourceRoot": "src",\n "compilerOptions": {\n "tsConfigPath": "tsconfig.build.json"\n }\n}\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d9c57d72.6a67e8de.js b/assets/js/d9c57d72.6a67e8de.js deleted file mode 100644 index 13dc9862a3b..00000000000 --- a/assets/js/d9c57d72.6a67e8de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2277],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=s(n),g=r,d=c["".concat(p,".").concat(g)]||c[g]||m[g]||a;return n?o.createElement(d,l(l({ref:t},u),{},{components:n})):o.createElement(d,l({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<a;s++)l[s]=n[s];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},90725:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const a={slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},l=void 0,i={permalink:"/blog/moon-v1.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx",source:"@site/blog/2023-04-24_moon-v1.3.mdx",title:"moon v1.3 - Advanced run targeting and an official proto plugin",description:"After many months of design and development, we're finally introducing MQL, our own unique query",date:"2023-04-24T00:00:00.000Z",formattedDate:"April 24, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"proto",permalink:"/blog/tags/proto"},{label:"schema",permalink:"/blog/tags/schema"},{label:"toml",permalink:"/blog/tags/toml"},{label:"target",permalink:"/blog/tags/target"}],readingTime:2.35,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},prevItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"},nextItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"}},p={image:n(21774).Z,authorsImageUrls:[void 0]},s=[{value:"Run targets based on a query",id:"run-targets-based-on-a-query",level:2},{value:"Plugin support for proto",id:"plugin-support-for-proto",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"After many months of design and development, we're finally introducing MQL, our own unique query\nlanguage!"),(0,r.kt)("h2",{id:"run-targets-based-on-a-query"},"Run targets based on a query"),(0,r.kt)("p",null,"Our ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command is pretty powerful. It allows you to run targets in\none, many, or all projects. It also supports running multiple targets in parallel. However, it\nwasn't powerful enough, as it couldn't run the following types of scenarios:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Run a target in projects of a specific language."),(0,r.kt)("li",{parentName:"ul"},"Run a target in libraries or applications."),(0,r.kt)("li",{parentName:"ul"},"Run a target based on project file system path."),(0,r.kt)("li",{parentName:"ul"},"Run a target in projects with a matching tag."),(0,r.kt)("li",{parentName:"ul"},"Run a target in projects that match a keyword."),(0,r.kt)("li",{parentName:"ul"},"Run a target in projects based on AND or OR conditions."),(0,r.kt)("li",{parentName:"ul"},"Or a combination of these."),(0,r.kt)("li",{parentName:"ul"},"And many more!")),(0,r.kt)("p",null,"Supporting all of these scenarios through CLI arguments just feels like bad design, and would result\nin a poor developer experience. There had to be a better way to support this! So we set out to solve\nthis problem, and after much thought, we're stoked to introduce\n",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/query-lang"},"MQL, a query language unique to moon"),"."),(0,r.kt)("p",null,'With MQL, you can now run scenarios like "I want to build all Node.js libraries", or "I want to lint\nand test all Rust projects". Simply pass an unscoped target and a query to the ',(0,r.kt)("inlineCode",{parentName:"p"},"run")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'$ moon run :build --query "taskPlatform=node && projectType=library"\n\n$ moon run :lint :test --query "language=rust"\n')),(0,r.kt)("p",null,"This is only the first iteration of MQL and it's already quite powerful. Expect additional fields,\nfeatures, and functionality in the future!"),(0,r.kt)("h2",{id:"plugin-support-for-proto"},"Plugin support for proto"),(0,r.kt)("p",null,"Earlier this week we announced ",(0,r.kt)("a",{parentName:"p",href:"./proto-v0.7"},"plugin support for proto"),", starting with a TOML based\nplugin. This is great as it allows ",(0,r.kt)("em",{parentName:"p"},"any")," kind of versioned tool to be managed in proto's toolchain,\nso why not moon? Starting with this release, you can now install and manage moon ",(0,r.kt)("em",{parentName:"p"},"from")," proto, using\nour officially maintained TOML plugin."),(0,r.kt)("p",null,"In your ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml")," file, add the following snippet:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nmoon = "source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml"\n')),(0,r.kt)("p",null,"And as easy as that, you can now use ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," as a tool within any ",(0,r.kt)("inlineCode",{parentName:"p"},"proto")," command. For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install moon 1.3.0\n$ proto list-remote moon\n$ proto bin moon\n")),(0,r.kt)("p",null,"Furthermore, with proto, we can now pin the version of moon on a per-project basis. Perfect for\nenforcing the same version for all developers on your team!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'moon = "1.3.0"\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"When using this approach, be sure ",(0,r.kt)("inlineCode",{parentName:"p"},"~/proto/.bin")," is in your ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),", and takes precedence over\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.moon/bin"),".")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.3.0"},"official release")," for a full list of\nchanges."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Upgraded to proto v0.7."),(0,r.kt)("li",{parentName:"ul"},"Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders."),(0,r.kt)("li",{parentName:"ul"},"Updated config loading to be strict and error on unknown fields for non-root fields.")))}m.isMDXComponent=!0},21774:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.3-042bd7752666b4bbaf030b6572d4052e.png"}}]); \ No newline at end of file diff --git a/assets/js/d9c57d72.76923581.js b/assets/js/d9c57d72.76923581.js new file mode 100644 index 00000000000..cb59134d591 --- /dev/null +++ b/assets/js/d9c57d72.76923581.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42277],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),s=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=s(n),g=r,d=c["".concat(p,".").concat(g)]||c[g]||m[g]||a;return n?o.createElement(d,l(l({ref:t},u),{},{components:n})):o.createElement(d,l({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var s=2;s<a;s++)l[s]=n[s];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},90725:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=n(25773),r=(n(27378),n(35318));const a={slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},l=void 0,i={permalink:"/blog/moon-v1.3",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx",source:"@site/blog/2023-04-24_moon-v1.3.mdx",title:"moon v1.3 - Advanced run targeting and an official proto plugin",description:"After many months of design and development, we're finally introducing MQL, our own unique query",date:"2023-04-24T00:00:00.000Z",formattedDate:"April 24, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"proto",permalink:"/blog/tags/proto"},{label:"schema",permalink:"/blog/tags/schema"},{label:"toml",permalink:"/blog/tags/toml"},{label:"target",permalink:"/blog/tags/target"}],readingTime:2.35,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.3",title:"moon v1.3 - Advanced run targeting and an official proto plugin",authors:["milesj"],tags:["query","lang","proto","schema","toml","target"],image:"./img/moon/v1.3.png"},prevItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"},nextItem:{title:"proto v0.7 - First step towards plugins",permalink:"/blog/proto-v0.7"}},p={image:n(21774).Z,authorsImageUrls:[void 0]},s=[{value:"Run targets based on a query",id:"run-targets-based-on-a-query",level:2},{value:"Plugin support for proto",id:"plugin-support-for-proto",level:2},{value:"Other changes",id:"other-changes",level:2}],u={toc:s};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"After many months of design and development, we're finally introducing MQL, our own unique query\nlanguage!"),(0,r.kt)("h2",{id:"run-targets-based-on-a-query"},"Run targets based on a query"),(0,r.kt)("p",null,"Our ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command is pretty powerful. It allows you to run targets in\none, many, or all projects. It also supports running multiple targets in parallel. However, it\nwasn't powerful enough, as it couldn't run the following types of scenarios:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Run a target in projects of a specific language."),(0,r.kt)("li",{parentName:"ul"},"Run a target in libraries or applications."),(0,r.kt)("li",{parentName:"ul"},"Run a target based on project file system path."),(0,r.kt)("li",{parentName:"ul"},"Run a target in projects with a matching tag."),(0,r.kt)("li",{parentName:"ul"},"Run a target in projects that match a keyword."),(0,r.kt)("li",{parentName:"ul"},"Run a target in projects based on AND or OR conditions."),(0,r.kt)("li",{parentName:"ul"},"Or a combination of these."),(0,r.kt)("li",{parentName:"ul"},"And many more!")),(0,r.kt)("p",null,"Supporting all of these scenarios through CLI arguments just feels like bad design, and would result\nin a poor developer experience. There had to be a better way to support this! So we set out to solve\nthis problem, and after much thought, we're stoked to introduce\n",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/query-lang"},"MQL, a query language unique to moon"),"."),(0,r.kt)("p",null,'With MQL, you can now run scenarios like "I want to build all Node.js libraries", or "I want to lint\nand test all Rust projects". Simply pass an unscoped target and a query to the ',(0,r.kt)("inlineCode",{parentName:"p"},"run")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},'$ moon run :build --query "taskPlatform=node && projectType=library"\n\n$ moon run :lint :test --query "language=rust"\n')),(0,r.kt)("p",null,"This is only the first iteration of MQL and it's already quite powerful. Expect additional fields,\nfeatures, and functionality in the future!"),(0,r.kt)("h2",{id:"plugin-support-for-proto"},"Plugin support for proto"),(0,r.kt)("p",null,"Earlier this week we announced ",(0,r.kt)("a",{parentName:"p",href:"./proto-v0.7"},"plugin support for proto"),", starting with a TOML based\nplugin. This is great as it allows ",(0,r.kt)("em",{parentName:"p"},"any")," kind of versioned tool to be managed in proto's toolchain,\nso why not moon? Starting with this release, you can now install and manage moon ",(0,r.kt)("em",{parentName:"p"},"from")," proto, using\nour officially maintained TOML plugin."),(0,r.kt)("p",null,"In your ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/config.toml")," file, add the following snippet:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'[plugins]\nmoon = "source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml"\n')),(0,r.kt)("p",null,"And as easy as that, you can now use ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," as a tool within any ",(0,r.kt)("inlineCode",{parentName:"p"},"proto")," command. For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install moon 1.3.0\n$ proto list-remote moon\n$ proto bin moon\n")),(0,r.kt)("p",null,"Furthermore, with proto, we can now pin the version of moon on a per-project basis. Perfect for\nenforcing the same version for all developers on your team!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title=".prototools"',title:'".prototools"'},'moon = "1.3.0"\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"When using this approach, be sure ",(0,r.kt)("inlineCode",{parentName:"p"},"~/proto/.bin")," is in your ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),", and takes precedence over\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.moon/bin"),".")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.3.0"},"official release")," for a full list of\nchanges."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Upgraded to proto v0.7."),(0,r.kt)("li",{parentName:"ul"},"Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders."),(0,r.kt)("li",{parentName:"ul"},"Updated config loading to be strict and error on unknown fields for non-root fields.")))}m.isMDXComponent=!0},21774:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.3-042bd7752666b4bbaf030b6572d4052e.png"}}]); \ No newline at end of file diff --git a/assets/js/dae127b6.b695189d.js b/assets/js/dae127b6.b695189d.js new file mode 100644 index 00000000000..afd8ef73052 --- /dev/null +++ b/assets/js/dae127b6.b695189d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20728],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>c});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=p(n),c=r,h=d["".concat(s,".").concat(c)]||d[c]||u[c]||i;return n?a.createElement(h,o(o({ref:t},m),{},{components:n})):a.createElement(h,o({ref:t},m))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var p=2;p<i;p++)o[p]=n[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},21817:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(25773),r=(n(27378),n(35318));const i={slug:"proto-v0.20",title:"proto v0.20 - New shims and binaries management",authors:["milesj"],tags:["proto","bin","shim","checksum"]},o=void 0,l={permalink:"/blog/proto-v0.20",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-20_proto-v0.20.mdx",source:"@site/blog/2023-10-20_proto-v0.20.mdx",title:"proto v0.20 - New shims and binaries management",description:"In this release, we're reworking how shims and binaries work.",date:"2023-10-20T00:00:00.000Z",formattedDate:"October 20, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"bin",permalink:"/blog/tags/bin"},{label:"shim",permalink:"/blog/tags/shim"},{label:"checksum",permalink:"/blog/tags/checksum"}],readingTime:2.91,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.20",title:"proto v0.20 - New shims and binaries management",authors:["milesj"],tags:["proto","bin","shim","checksum"]},nextItem:{title:"moon v1.15 - Next-generation action graph",permalink:"/blog/moon-v1.15"}},s={authorsImageUrls:[void 0]},p=[{value:"Shims <em>and</em> Binaries (breaking)",id:"shims-and-binaries-breaking",level:2},{value:"How it works",id:"how-it-works",level:3},{value:"Comparison",id:"comparison",level:3},{value:"Support for minisign checksums",id:"support-for-minisign-checksums",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this release, we're reworking how shims and binaries work."),(0,r.kt)("h2",{id:"shims-and-binaries-breaking"},"Shims ",(0,r.kt)("em",{parentName:"h2"},"and")," Binaries (breaking)"),(0,r.kt)("p",null,"Since proto's inception, we've used shims as a way to execute installed tools. This allowed us to\nwrap the underlying tool binary to provide additional functionality, such as automatic version\ndetection, runtime hooks, and more. However, this approach has some limitations, such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Shims are forced onto you and there's no way to use proto without shims."),(0,r.kt)("li",{parentName:"ul"},"Shims are slower than executing the native binary, upwards of 10x slower. While this equates in\nmilliseconds, it can be noticeable dependending on the tool."),(0,r.kt)("li",{parentName:"ul"},"For Windows, our shim files are ",(0,r.kt)("inlineCode",{parentName:"li"},".cmd")," ",(0,r.kt)("em",{parentName:"li"},"and not")," ",(0,r.kt)("inlineCode",{parentName:"li"},".exe"),". This causes a lot of weird and unexpected\nproblems when an environment expects a real executable, or uses a hard-coded ",(0,r.kt)("inlineCode",{parentName:"li"},".exe")," extension.")),(0,r.kt)("p",null,"To remedy this, we're introducing both a shim and non-shim approach, which has resulted in a pretty\nbig breaking change. Shims are now generated in ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/shims")," (instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/bin"),"), while\n",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto/bin")," will now store symlinks to native binaries. To migrate to this new pattern, we're\nintroducing a new ",(0,r.kt)("inlineCode",{parentName:"p"},"proto migrate")," command (this only needs to be ran once)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto upgrade\n$ proto migrate v0.20 --log debug\n")),(0,r.kt)("h3",{id:"how-it-works"},"How it works"),(0,r.kt)("p",null,"When installing proto for the first time, or running the ",(0,r.kt)("inlineCode",{parentName:"p"},"proto migrate")," command, we prepend ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH"),"\nwith ",(0,r.kt)("inlineCode",{parentName:"p"},"$PROTO_HOME/shims:$PROTO_HOME/bin"),". This allows shims to be executed ",(0,r.kt)("em",{parentName:"p"},"first")," and fallthrough\nto native binaries if a shim does not exist (for example, ",(0,r.kt)("inlineCode",{parentName:"p"},".exe")," on Windows)."),(0,r.kt)("p",null,"Furthermore, if you'd prefer to ",(0,r.kt)("em",{parentName:"p"},"only use")," shims, or ",(0,r.kt)("em",{parentName:"p"},"only use")," binaries, you can update ",(0,r.kt)("inlineCode",{parentName:"p"},"PATH")," and\nremove the unwanted directory path."),(0,r.kt)("p",null,"And lastly, if shims are causing problems, you can now easily reference the native binaries\ndirectly. This was rather complicated before."),(0,r.kt)("h3",{id:"comparison"},"Comparison"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null}),(0,r.kt)("th",{parentName:"tr",align:null},"Shims"),(0,r.kt)("th",{parentName:"tr",align:null},"Binaries"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Location")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"~/.proto/shims")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"~/.proto/bin"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Created as")),(0,r.kt)("td",{parentName:"tr",align:null},"Scripts that run ",(0,r.kt)("inlineCode",{parentName:"td"},"proto run")),(0,r.kt)("td",{parentName:"tr",align:null},"Symlinks to the native binary")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Version executed")),(0,r.kt)("td",{parentName:"tr",align:null},"Detects version at runtime"),(0,r.kt)("td",{parentName:"tr",align:null},"Last version that was installed + pinned")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported for")),(0,r.kt)("td",{parentName:"tr",align:null},"All tools"),(0,r.kt)("td",{parentName:"tr",align:null},"Only tools that support native execution (may not work for ",(0,r.kt)("inlineCode",{parentName:"td"},".js")," files)")))),(0,r.kt)("h2",{id:"support-for-minisign-checksums"},"Support for minisign checksums"),(0,r.kt)("p",null,"When proto installs a tool, it runs a process known as checksum verification, where we ensure the\ndownload hasn't been modified maliciously in anyway. Historically we only supported SHA256\nchecksums, but now, we also support the new ",(0,r.kt)("a",{parentName:"p",href:"https://jedisct1.github.io/minisign/"},"minisign")," tool,\nused by popular tools like ",(0,r.kt)("a",{parentName:"p",href:"https://ziglang.org/"},"Zig"),"."),(0,r.kt)("p",null,"If you're building a plugin for a tool that uses minisign, you can use the new\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/wasm-plugin#downloading-pre-builts"},(0,r.kt)("inlineCode",{parentName:"a"},"checksum_public_key"))," (WASM) or\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/toml-plugin#downloading-and-installing"},(0,r.kt)("inlineCode",{parentName:"a"},"install.checksum-public-key"))," (TOML) field to\nprovide the public key for use in verification."),(0,r.kt)("p",null,"When the checksum URL ends in a ",(0,r.kt)("inlineCode",{parentName:"p"},".minisig")," extension, proto will automatically use minisign for\nchecksum verification!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-toml"},'[install]\nchecksum-url = "https://domain.com/some/path/to/checksum.minisig"\nchecksum-public-key = "untrusted comment: ..."\n')),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.20.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"proto use")," to install tools in parallel."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"proto plugins")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"proto tools")," to load plugins in parallel."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"proto run")," to error when the tool attempts to self-upgrade outside of proto."),(0,r.kt)("li",{parentName:"ul"},"Rust plugin",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Will now attempt to install ",(0,r.kt)("inlineCode",{parentName:"li"},"rustup")," if it does not exist on the current machine."),(0,r.kt)("li",{parentName:"ul"},"Will now respect the ",(0,r.kt)("inlineCode",{parentName:"li"},"RUSTUP_HOME")," environment variable when locating the ",(0,r.kt)("inlineCode",{parentName:"li"},".rustup")," store."))),(0,r.kt)("li",{parentName:"ul"},"Schema plugin",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"install.checksum_public_key")," for defining the public key used to verify checksums."),(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"metadata.self_upgrade_commands")," for defining which sub-commands should be blocked for\nself-upgrades.")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/daf4eece.0c0742d2.js b/assets/js/daf4eece.0c0742d2.js new file mode 100644 index 00000000000..2c3039d5135 --- /dev/null +++ b/assets/js/daf4eece.0c0742d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56971],{59254:e=>{e.exports=JSON.parse('{"label":"codegen","permalink":"/docs/tags/codegen","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/daf4eece.b7b46b77.js b/assets/js/daf4eece.b7b46b77.js deleted file mode 100644 index 7919845b723..00000000000 --- a/assets/js/daf4eece.b7b46b77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6971],{59254:e=>{e.exports=JSON.parse('{"label":"codegen","permalink":"/docs/tags/codegen","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","permalink":"/docs/guides/codegen"}]}')}}]); \ No newline at end of file diff --git a/assets/js/db0cc9f1.19956b64.js b/assets/js/db0cc9f1.19956b64.js new file mode 100644 index 00000000000..b918d194521 --- /dev/null +++ b/assets/js/db0cc9f1.19956b64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64065],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),l=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=l(n),d=a,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||r;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<r;l++)i[l]=n[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},31855:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var o=n(25773),a=(n(27378),n(35318));const r={title:"Remote caching",toc_max_heading_level:6},i=void 0,c={unversionedId:"guides/remote-cache",id:"guides/remote-cache",title:"Remote caching",description:"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over",source:"@site/docs/guides/remote-cache.mdx",sourceDirName:"guides",slug:"/guides/remote-cache",permalink:"/docs/guides/remote-cache",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/remote-cache.mdx",tags:[],version:"current",frontMatter:{title:"Remote caching",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Open source usage",permalink:"/docs/guides/open-source"},next:{title:"Root-level project",permalink:"/docs/guides/root-project"}},s={},l=[{value:"Requirements",id:"requirements",level:2},{value:"Sign up for an account",id:"sign-up-for-an-account",level:2},{value:"Create an organization",id:"create-an-organization",level:3},{value:"Create a repository",id:"create-a-repository",level:3},{value:"Enabling remote caching",id:"enabling-remote-caching",level:2},{value:"FAQ",id:"faq",level:2},{value:"What is an artifact?",id:"what-is-an-artifact",level:4},{value:"Do I have to use remote caching?",id:"do-i-have-to-use-remote-caching",level:4},{value:"Does remote caching store source code?",id:"does-remote-caching-store-source-code",level:4},{value:"Does moon collect any personally identifiable information?",id:"does-moon-collect-any-personally-identifiable-information",level:4},{value:"Are artifacts encrypted?",id:"are-artifacts-encrypted",level:4}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over\nalthough nothing has changed? Do you wish to reuse the same local cache across other machines and\nenvironments? These are just a few scenarios that remote caching aims to solve."),(0,a.kt)("p",null,"Remote caching is a system that shares artifacts to improve performance, reduce unnecessary\ncomputation time, and alleviate resources. It achieves this by uploading hashed artifacts to a cloud\nstorage provider, like AWS S3 or Google Cloud, and downloading them on demand when a build matches a\nderived hash."),(0,a.kt)("h2",{id:"requirements"},"Requirements"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"moon >= 0.23.3")),(0,a.kt)("h2",{id:"sign-up-for-an-account"},"Sign up for an account"),(0,a.kt)("p",null,"Remote caching requires a ",(0,a.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"moonrepo.app")," account, powered by our\n",(0,a.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase")," service. Creating an account requires a GitHub account. In the future we'll\nsupport additional OAuth providers."),(0,a.kt)("h3",{id:"create-an-organization"},"Create an organization"),(0,a.kt)("p",null,"A moonbase organization can represent a company, team, group, or personal workspace, and is required\nfor housing repositories, projects, artifacts, and more. Begin by creating an organization from the\ndashboard."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},'The "Region" field is very important for remote caching, as it configures which S3 region to store\nartifacts in. This ',(0,a.kt)("em",{parentName:"p"},"cannot")," be changed after creation, so choose wisely!")),(0,a.kt)("h3",{id:"create-a-repository"},"Create a repository"),(0,a.kt)("p",null,"A moonbase repository is a direct relationship to a codebase repository, and is necessary for\nlinking artifacts to the appropriate tasks. From an organization's page, you can create a\nrepository."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},'The "Slug" field must match your repository\'s "remote/repo" naming exactly, as we compare these\nvalues for authentication purposes.')),(0,a.kt)("h2",{id:"enabling-remote-caching"},"Enabling remote caching"),(0,a.kt)("p",null,"Once you have a ",(0,a.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"moonrepo.app")," account, an organization, and repository, you\ncan enable remote caching in your CI pipeline. From a moonbase organization page, you can view your\nAPI key in the actions menu."),(0,a.kt)("p",null,"In a repository's CI environment, set the following environment variable."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"MOONBASE_SECRET_KEY=<secret key>\n")),(0,a.kt)("p",null,"moon will automatically authenticate the remote caching service when credentials in the environment\nexist. Furthermore, the repository in question must be within the moonbase organization, and the\nrepository slug (",(0,a.kt)("inlineCode",{parentName:"p"},"<owner>/<repo>"),") must match."),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h4",{id:"what-is-an-artifact"},"What is an artifact?"),(0,a.kt)("p",null,"In the context of moon and remote caching, an artifact is a tar archive (",(0,a.kt)("inlineCode",{parentName:"p"},".tar.gz"),") that contains\nall ",(0,a.kt)("a",{parentName:"p",href:"../config/project#outputs"},"outputs of a task"),", as well as the stdout and stderr of the task\nthat generated the outputs. Artifacts are uniquely identified by the\n",(0,a.kt)("a",{parentName:"p",href:"../concepts/cache#hashing"},"moon generated hash"),"."),(0,a.kt)("h4",{id:"do-i-have-to-use-remote-caching"},"Do I have to use remote caching?"),(0,a.kt)("p",null,"No, remote caching is ",(0,a.kt)("em",{parentName:"p"},"optional"),". It's intended purpose is to store long lived build artifacts to\nspeed up CI pipelines, and optionally local development. For the most part,\n",(0,a.kt)("a",{parentName:"p",href:"../commands/ci"},(0,a.kt)("inlineCode",{parentName:"a"},"moon ci"))," does a great job of only running what's affected in pull requests, and\nis a great starting point."),(0,a.kt)("h4",{id:"does-remote-caching-store-source-code"},"Does remote caching store source code?"),(0,a.kt)("p",null,"No, remote caching ",(0,a.kt)("em",{parentName:"p"},"does not")," store source code. It stores the\n",(0,a.kt)("a",{parentName:"p",href:"../config/project#outputs"},"outputs of a task"),", which is typically built and compiled code. To\nverify this, you can inspect the tar archives in ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/cache/outputs"),"."),(0,a.kt)("h4",{id:"does-moon-collect-any-personally-identifiable-information"},"Does moon collect any personally identifiable information?"),(0,a.kt)("p",null,"No, moon does not collect any PII as part of the remote caching process."),(0,a.kt)("p",null,"However, to use remote caching, you must create a moonrepo account in which we require an email\naddress, and information about your organization and repository."),(0,a.kt)("h4",{id:"are-artifacts-encrypted"},"Are artifacts encrypted?"),(0,a.kt)("p",null,"Yes! We use AWS's built-in SSE-S3 encryption for all S3 buckets."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/db0cc9f1.f2927ff7.js b/assets/js/db0cc9f1.f2927ff7.js deleted file mode 100644 index 19458bcfbbf..00000000000 --- a/assets/js/db0cc9f1.f2927ff7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4065],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),l=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=l(n),d=a,h=m["".concat(s,".").concat(d)]||m[d]||p[d]||r;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var l=2;l<r;l++)i[l]=n[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},31855:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var o=n(25773),a=(n(27378),n(35318));const r={title:"Remote caching",toc_max_heading_level:6},i=void 0,c={unversionedId:"guides/remote-cache",id:"guides/remote-cache",title:"Remote caching",description:"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over",source:"@site/docs/guides/remote-cache.mdx",sourceDirName:"guides",slug:"/guides/remote-cache",permalink:"/docs/guides/remote-cache",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/remote-cache.mdx",tags:[],version:"current",frontMatter:{title:"Remote caching",toc_max_heading_level:6},sidebar:"guides",previous:{title:"Open source usage",permalink:"/docs/guides/open-source"},next:{title:"Root-level project",permalink:"/docs/guides/root-project"}},s={},l=[{value:"Requirements",id:"requirements",level:2},{value:"Sign up for an account",id:"sign-up-for-an-account",level:2},{value:"Create an organization",id:"create-an-organization",level:3},{value:"Create a repository",id:"create-a-repository",level:3},{value:"Enabling remote caching",id:"enabling-remote-caching",level:2},{value:"FAQ",id:"faq",level:2},{value:"What is an artifact?",id:"what-is-an-artifact",level:4},{value:"Do I have to use remote caching?",id:"do-i-have-to-use-remote-caching",level:4},{value:"Does remote caching store source code?",id:"does-remote-caching-store-source-code",level:4},{value:"Does moon collect any personally identifiable information?",id:"does-moon-collect-any-personally-identifiable-information",level:4},{value:"Are artifacts encrypted?",id:"are-artifacts-encrypted",level:4}],u={toc:l};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over\nalthough nothing has changed? Do you wish to reuse the same local cache across other machines and\nenvironments? These are just a few scenarios that remote caching aims to solve."),(0,a.kt)("p",null,"Remote caching is a system that shares artifacts to improve performance, reduce unnecessary\ncomputation time, and alleviate resources. It achieves this by uploading hashed artifacts to a cloud\nstorage provider, like AWS S3 or Google Cloud, and downloading them on demand when a build matches a\nderived hash."),(0,a.kt)("h2",{id:"requirements"},"Requirements"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"moon >= 0.23.3")),(0,a.kt)("h2",{id:"sign-up-for-an-account"},"Sign up for an account"),(0,a.kt)("p",null,"Remote caching requires a ",(0,a.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"moonrepo.app")," account, powered by our\n",(0,a.kt)("a",{parentName:"p",href:"/moonbase"},"moonbase")," service. Creating an account requires a GitHub account. In the future we'll\nsupport additional OAuth providers."),(0,a.kt)("h3",{id:"create-an-organization"},"Create an organization"),(0,a.kt)("p",null,"A moonbase organization can represent a company, team, group, or personal workspace, and is required\nfor housing repositories, projects, artifacts, and more. Begin by creating an organization from the\ndashboard."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},'The "Region" field is very important for remote caching, as it configures which S3 region to store\nartifacts in. This ',(0,a.kt)("em",{parentName:"p"},"cannot")," be changed after creation, so choose wisely!")),(0,a.kt)("h3",{id:"create-a-repository"},"Create a repository"),(0,a.kt)("p",null,"A moonbase repository is a direct relationship to a codebase repository, and is necessary for\nlinking artifacts to the appropriate tasks. From an organization's page, you can create a\nrepository."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},'The "Slug" field must match your repository\'s "remote/repo" naming exactly, as we compare these\nvalues for authentication purposes.')),(0,a.kt)("h2",{id:"enabling-remote-caching"},"Enabling remote caching"),(0,a.kt)("p",null,"Once you have a ",(0,a.kt)("a",{parentName:"p",href:"https://moonrepo.app"},"moonrepo.app")," account, an organization, and repository, you\ncan enable remote caching in your CI pipeline. From a moonbase organization page, you can view your\nAPI key in the actions menu."),(0,a.kt)("p",null,"In a repository's CI environment, set the following environment variable."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"MOONBASE_SECRET_KEY=<secret key>\n")),(0,a.kt)("p",null,"moon will automatically authenticate the remote caching service when credentials in the environment\nexist. Furthermore, the repository in question must be within the moonbase organization, and the\nrepository slug (",(0,a.kt)("inlineCode",{parentName:"p"},"<owner>/<repo>"),") must match."),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("h4",{id:"what-is-an-artifact"},"What is an artifact?"),(0,a.kt)("p",null,"In the context of moon and remote caching, an artifact is a tar archive (",(0,a.kt)("inlineCode",{parentName:"p"},".tar.gz"),") that contains\nall ",(0,a.kt)("a",{parentName:"p",href:"../config/project#outputs"},"outputs of a task"),", as well as the stdout and stderr of the task\nthat generated the outputs. Artifacts are uniquely identified by the\n",(0,a.kt)("a",{parentName:"p",href:"../concepts/cache#hashing"},"moon generated hash"),"."),(0,a.kt)("h4",{id:"do-i-have-to-use-remote-caching"},"Do I have to use remote caching?"),(0,a.kt)("p",null,"No, remote caching is ",(0,a.kt)("em",{parentName:"p"},"optional"),". It's intended purpose is to store long lived build artifacts to\nspeed up CI pipelines, and optionally local development. For the most part,\n",(0,a.kt)("a",{parentName:"p",href:"../commands/ci"},(0,a.kt)("inlineCode",{parentName:"a"},"moon ci"))," does a great job of only running what's affected in pull requests, and\nis a great starting point."),(0,a.kt)("h4",{id:"does-remote-caching-store-source-code"},"Does remote caching store source code?"),(0,a.kt)("p",null,"No, remote caching ",(0,a.kt)("em",{parentName:"p"},"does not")," store source code. It stores the\n",(0,a.kt)("a",{parentName:"p",href:"../config/project#outputs"},"outputs of a task"),", which is typically built and compiled code. To\nverify this, you can inspect the tar archives in ",(0,a.kt)("inlineCode",{parentName:"p"},".moon/cache/outputs"),"."),(0,a.kt)("h4",{id:"does-moon-collect-any-personally-identifiable-information"},"Does moon collect any personally identifiable information?"),(0,a.kt)("p",null,"No, moon does not collect any PII as part of the remote caching process."),(0,a.kt)("p",null,"However, to use remote caching, you must create a moonrepo account in which we require an email\naddress, and information about your organization and repository."),(0,a.kt)("h4",{id:"are-artifacts-encrypted"},"Are artifacts encrypted?"),(0,a.kt)("p",null,"Yes! We use AWS's built-in SSE-S3 encryption for all S3 buckets."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/db676956.23a41c29.js b/assets/js/db676956.23a41c29.js deleted file mode 100644 index d53e7570659..00000000000 --- a/assets/js/db676956.23a41c29.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8086],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),c=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=c(e.components);return a.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,k=u["".concat(p,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(k,l(l({ref:t},s),{},{components:n})):a.createElement(k,l({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c<o;c++)l[c]=n[c];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:l}=e;return a.createElement(r.Z,{text:`v${l}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:p}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?l[p]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},11118:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var a=n(25773),r=(n(27378),n(35318)),o=n(79022);const l={title:"Query language",toc_max_heading_level:4,tags:["query","lang","mql"]},i=void 0,p={unversionedId:"concepts/query-lang",id:"concepts/query-lang",title:"Query language",description:"moon supports an integrated query language, known as MQL, that can be used to filter and select",source:"@site/docs/concepts/query-lang.mdx",sourceDirName:"concepts",slug:"/concepts/query-lang",permalink:"/docs/concepts/query-lang",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/query-lang.mdx",tags:[{label:"query",permalink:"/docs/tags/query"},{label:"lang",permalink:"/docs/tags/lang"},{label:"mql",permalink:"/docs/tags/mql"}],version:"current",frontMatter:{title:"Query language",toc_max_heading_level:4,tags:["query","lang","mql"]},sidebar:"docs",previous:{title:"File patterns",permalink:"/docs/concepts/file-pattern"},next:{title:"Projects",permalink:"/docs/concepts/project"}},c={},s=[{value:"Syntax",id:"syntax",level:2},{value:"Comparisons",id:"comparisons",level:3},{value:"Equals, Not equals",id:"equals-not-equals",level:4},{value:"Like, Not like",id:"like-not-like",level:4},{value:"Conditions",id:"conditions",level:3},{value:"Grouping",id:"grouping",level:3},{value:"Fields",id:"fields",level:2},{value:"<code>language</code>",id:"language",level:3},{value:"<code>project</code>",id:"project",level:3},{value:"<code>projectAlias</code>",id:"projectalias",level:3},{value:"<code>projectName</code>",id:"projectname",level:3},{value:"<code>projectSource</code>",id:"projectsource",level:3},{value:"<code>projectType</code>",id:"projecttype",level:3},{value:"<code>tag</code>",id:"tag",level:3},{value:"<code>task</code>",id:"task",level:3},{value:"<code>taskPlatform</code>",id:"taskplatform",level:3},{value:"<code>taskType</code>",id:"tasktype",level:3}],d={toc:s};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{version:"1.3.0",header:!0,mdxType:"VersionLabel"}),(0,r.kt)("p",null,"moon supports an integrated query language, known as MQL, that can be used to filter and select\nprojects from the project graph, using an SQL-like syntax. MQL is primarily used by\n",(0,r.kt)("a",{parentName:"p",href:"../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--query")," option."),(0,r.kt)("h2",{id:"syntax"},"Syntax"),(0,r.kt)("h3",{id:"comparisons"},"Comparisons"),(0,r.kt)("p",null,"A comparison (also known as an assignment) is an expression that defines a piece of criteria, and is\na building block of a query. This criteria maps a ",(0,r.kt)("a",{parentName:"p",href:"#field"},"field")," to a value, with an explicit\ncomparison operator."),(0,r.kt)("h4",{id:"equals-not-equals"},"Equals, Not equals"),(0,r.kt)("p",null,"The equals (",(0,r.kt)("inlineCode",{parentName:"p"},"="),") and not equals (",(0,r.kt)("inlineCode",{parentName:"p"},"!="),") comparison operators can be used for ",(0,r.kt)("em",{parentName:"p"},"exact")," value matching."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectType=library && language!=javascript\n")),(0,r.kt)("p",null,"You can also define a list of values using square bracket syntax, that will match against one of the\nvalues."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"language=[javascript, typescript]\n")),(0,r.kt)("h4",{id:"like-not-like"},"Like, Not like"),(0,r.kt)("p",null,"The like (",(0,r.kt)("inlineCode",{parentName:"p"},"~"),") and not like (",(0,r.kt)("inlineCode",{parentName:"p"},"!~"),") comparison operators can be used for ",(0,r.kt)("em",{parentName:"p"},"wildcard")," value matching,\nusing ",(0,r.kt)("a",{parentName:"p",href:"./file-pattern#globs"},"glob syntax"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectSource~packages/* && tag!~*-app\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Like comparisons can only be used on non-enum fields.")),(0,r.kt)("h3",{id:"conditions"},"Conditions"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"&&")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"||")," logical operators can be used to combine multiple comparisons into a condition.\nThe ",(0,r.kt)("inlineCode",{parentName:"p"},"&&")," operator is used to combine comparisons into a logical AND, and the ",(0,r.kt)("inlineCode",{parentName:"p"},"||")," operator is used\nfor logical OR."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskPlatform=system || taskPlatform=node\n")),(0,r.kt)("p",null,"For readability concerns, you can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"AND")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskPlatform=system OR taskPlatform=node\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Mixing both operators in the same condition is not supported.")),(0,r.kt)("h3",{id:"grouping"},"Grouping"),(0,r.kt)("p",null,"For advanced queries and complex conditions, you can group comparisons using parentheses to create\nlogical groupings. Groups can also be nested within other groups."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"language=javascript && (taskType=test || taskType=build)\n")),(0,r.kt)("h2",{id:"fields"},"Fields"),(0,r.kt)("p",null,"The following fields can be used as criteria, and are related to ",(0,r.kt)("a",{parentName:"p",href:"./token#variables"},"task tokens"),"."),(0,r.kt)("h3",{id:"language"},(0,r.kt)("inlineCode",{parentName:"h3"},"language")),(0,r.kt)("p",null,"Programming language the project is written in, as defined in\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"language=rust\n")),(0,r.kt)("h3",{id:"project"},(0,r.kt)("inlineCode",{parentName:"h3"},"project")),(0,r.kt)("p",null,"Name OR alias of the project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"project=server\n")),(0,r.kt)("h3",{id:"projectalias"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectAlias")),(0,r.kt)("p",null,"Alias of the project. For example, the ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," name."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectAlias~@scope/*\n")),(0,r.kt)("h3",{id:"projectname"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectName")),(0,r.kt)("p",null,"Name of the project, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"project=server\n")),(0,r.kt)("h3",{id:"projectsource"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectSource")),(0,r.kt)("p",null,"Relative file path from the workspace root to the project root, as defined in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectSource~packages/*\n")),(0,r.kt)("h3",{id:"projecttype"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectType")),(0,r.kt)("p",null,"The type of project, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/project#type"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectType=application\n")),(0,r.kt)("h3",{id:"tag"},(0,r.kt)("inlineCode",{parentName:"h3"},"tag")),(0,r.kt)("p",null,"A tag within the project, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/project#tags"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"tag~react-*\n")),(0,r.kt)("h3",{id:"task"},(0,r.kt)("inlineCode",{parentName:"h3"},"task")),(0,r.kt)("p",null,"ID/name of a task within the project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"task=[build,test]\n")),(0,r.kt)("h3",{id:"taskplatform"},(0,r.kt)("inlineCode",{parentName:"h3"},"taskPlatform")),(0,r.kt)("p",null,"The platform a task will run against, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/project#platform-1"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskPlatform=node\n")),(0,r.kt)("h3",{id:"tasktype"},(0,r.kt)("inlineCode",{parentName:"h3"},"taskType")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"./task#types"},"type of task"),", based on its configured settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskType=build\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/db676956.e86c0753.js b/assets/js/db676956.e86c0753.js new file mode 100644 index 00000000000..f137265aa51 --- /dev/null +++ b/assets/js/db676956.e86c0753.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38086],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),c=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=c(e.components);return a.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=r,k=u["".concat(p,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(k,l(l({ref:t},s),{},{components:n})):a.createElement(k,l({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var c=2;c<o;c++)l[c]=n[c];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:l}=e;return a.createElement(r.Z,{text:`v${l}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:p}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",p?l[p]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},11118:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var a=n(25773),r=(n(27378),n(35318)),o=n(79022);const l={title:"Query language",toc_max_heading_level:4,tags:["query","lang","mql"]},i=void 0,p={unversionedId:"concepts/query-lang",id:"concepts/query-lang",title:"Query language",description:"moon supports an integrated query language, known as MQL, that can be used to filter and select",source:"@site/docs/concepts/query-lang.mdx",sourceDirName:"concepts",slug:"/concepts/query-lang",permalink:"/docs/concepts/query-lang",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/query-lang.mdx",tags:[{label:"query",permalink:"/docs/tags/query"},{label:"lang",permalink:"/docs/tags/lang"},{label:"mql",permalink:"/docs/tags/mql"}],version:"current",frontMatter:{title:"Query language",toc_max_heading_level:4,tags:["query","lang","mql"]},sidebar:"docs",previous:{title:"File patterns",permalink:"/docs/concepts/file-pattern"},next:{title:"Projects",permalink:"/docs/concepts/project"}},c={},s=[{value:"Syntax",id:"syntax",level:2},{value:"Comparisons",id:"comparisons",level:3},{value:"Equals, Not equals",id:"equals-not-equals",level:4},{value:"Like, Not like",id:"like-not-like",level:4},{value:"Conditions",id:"conditions",level:3},{value:"Grouping",id:"grouping",level:3},{value:"Fields",id:"fields",level:2},{value:"<code>language</code>",id:"language",level:3},{value:"<code>project</code>",id:"project",level:3},{value:"<code>projectAlias</code>",id:"projectalias",level:3},{value:"<code>projectName</code>",id:"projectname",level:3},{value:"<code>projectSource</code>",id:"projectsource",level:3},{value:"<code>projectType</code>",id:"projecttype",level:3},{value:"<code>tag</code>",id:"tag",level:3},{value:"<code>task</code>",id:"task",level:3},{value:"<code>taskPlatform</code>",id:"taskplatform",level:3},{value:"<code>taskType</code>",id:"tasktype",level:3}],d={toc:s};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.Z,{version:"1.3.0",header:!0,mdxType:"VersionLabel"}),(0,r.kt)("p",null,"moon supports an integrated query language, known as MQL, that can be used to filter and select\nprojects from the project graph, using an SQL-like syntax. MQL is primarily used by\n",(0,r.kt)("a",{parentName:"p",href:"../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--query")," option."),(0,r.kt)("h2",{id:"syntax"},"Syntax"),(0,r.kt)("h3",{id:"comparisons"},"Comparisons"),(0,r.kt)("p",null,"A comparison (also known as an assignment) is an expression that defines a piece of criteria, and is\na building block of a query. This criteria maps a ",(0,r.kt)("a",{parentName:"p",href:"#field"},"field")," to a value, with an explicit\ncomparison operator."),(0,r.kt)("h4",{id:"equals-not-equals"},"Equals, Not equals"),(0,r.kt)("p",null,"The equals (",(0,r.kt)("inlineCode",{parentName:"p"},"="),") and not equals (",(0,r.kt)("inlineCode",{parentName:"p"},"!="),") comparison operators can be used for ",(0,r.kt)("em",{parentName:"p"},"exact")," value matching."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectType=library && language!=javascript\n")),(0,r.kt)("p",null,"You can also define a list of values using square bracket syntax, that will match against one of the\nvalues."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"language=[javascript, typescript]\n")),(0,r.kt)("h4",{id:"like-not-like"},"Like, Not like"),(0,r.kt)("p",null,"The like (",(0,r.kt)("inlineCode",{parentName:"p"},"~"),") and not like (",(0,r.kt)("inlineCode",{parentName:"p"},"!~"),") comparison operators can be used for ",(0,r.kt)("em",{parentName:"p"},"wildcard")," value matching,\nusing ",(0,r.kt)("a",{parentName:"p",href:"./file-pattern#globs"},"glob syntax"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectSource~packages/* && tag!~*-app\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Like comparisons can only be used on non-enum fields.")),(0,r.kt)("h3",{id:"conditions"},"Conditions"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"&&")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"||")," logical operators can be used to combine multiple comparisons into a condition.\nThe ",(0,r.kt)("inlineCode",{parentName:"p"},"&&")," operator is used to combine comparisons into a logical AND, and the ",(0,r.kt)("inlineCode",{parentName:"p"},"||")," operator is used\nfor logical OR."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskPlatform=system || taskPlatform=node\n")),(0,r.kt)("p",null,"For readability concerns, you can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"AND")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskPlatform=system OR taskPlatform=node\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Mixing both operators in the same condition is not supported.")),(0,r.kt)("h3",{id:"grouping"},"Grouping"),(0,r.kt)("p",null,"For advanced queries and complex conditions, you can group comparisons using parentheses to create\nlogical groupings. Groups can also be nested within other groups."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"language=javascript && (taskType=test || taskType=build)\n")),(0,r.kt)("h2",{id:"fields"},"Fields"),(0,r.kt)("p",null,"The following fields can be used as criteria, and are related to ",(0,r.kt)("a",{parentName:"p",href:"./token#variables"},"task tokens"),"."),(0,r.kt)("h3",{id:"language"},(0,r.kt)("inlineCode",{parentName:"h3"},"language")),(0,r.kt)("p",null,"Programming language the project is written in, as defined in\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"language=rust\n")),(0,r.kt)("h3",{id:"project"},(0,r.kt)("inlineCode",{parentName:"h3"},"project")),(0,r.kt)("p",null,"Name OR alias of the project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"project=server\n")),(0,r.kt)("h3",{id:"projectalias"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectAlias")),(0,r.kt)("p",null,"Alias of the project. For example, the ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," name."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectAlias~@scope/*\n")),(0,r.kt)("h3",{id:"projectname"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectName")),(0,r.kt)("p",null,"Name of the project, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"project=server\n")),(0,r.kt)("h3",{id:"projectsource"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectSource")),(0,r.kt)("p",null,"Relative file path from the workspace root to the project root, as defined in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectSource~packages/*\n")),(0,r.kt)("h3",{id:"projecttype"},(0,r.kt)("inlineCode",{parentName:"h3"},"projectType")),(0,r.kt)("p",null,"The type of project, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/project#type"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"projectType=application\n")),(0,r.kt)("h3",{id:"tag"},(0,r.kt)("inlineCode",{parentName:"h3"},"tag")),(0,r.kt)("p",null,"A tag within the project, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/project#tags"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"tag~react-*\n")),(0,r.kt)("h3",{id:"task"},(0,r.kt)("inlineCode",{parentName:"h3"},"task")),(0,r.kt)("p",null,"ID/name of a task within the project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"task=[build,test]\n")),(0,r.kt)("h3",{id:"taskplatform"},(0,r.kt)("inlineCode",{parentName:"h3"},"taskPlatform")),(0,r.kt)("p",null,"The platform a task will run against, as defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/project#platform-1"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskPlatform=node\n")),(0,r.kt)("h3",{id:"tasktype"},(0,r.kt)("inlineCode",{parentName:"h3"},"taskType")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"./task#types"},"type of task"),", based on its configured settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"taskType=build\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dbbb982f.ab5a3f4b.js b/assets/js/dbbb982f.ab5a3f4b.js new file mode 100644 index 00000000000..7e9f9abac92 --- /dev/null +++ b/assets/js/dbbb982f.ab5a3f4b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67622],{50194:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/docker","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/dbbb982f.da357996.js b/assets/js/dbbb982f.da357996.js deleted file mode 100644 index a207854b151..00000000000 --- a/assets/js/dbbb982f.da357996.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7622],{50194:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/docker","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/dd3540fa.0a8cf981.js b/assets/js/dd3540fa.0a8cf981.js deleted file mode 100644 index a2f3ddb369d..00000000000 --- a/assets/js/dd3540fa.0a8cf981.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9364],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),g=c(r),f=o,u=g["".concat(l,".").concat(f)]||g[f]||m[f]||a;return r?n.createElement(u,i(i({ref:t},p),{},{components:r})):n.createElement(u,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},38834:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},i=void 0,s={permalink:"/blog/moon-v1.0",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx",source:"@site/blog/2023-03-27_moon-v1.0.mdx",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",description:"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've",date:"2023-03-27T00:00:00.000Z",formattedDate:"March 27, 2023",tags:[{label:"projects",permalink:"/blog/tags/projects"},{label:"constraints",permalink:"/blog/tags/constraints"},{label:"tags",permalink:"/blog/tags/tags"},{label:"env-vars",permalink:"/blog/tags/env-vars"},{label:"tokens",permalink:"/blog/tags/tokens"}],readingTime:4.745,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},prevItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"},nextItem:{title:"proto v0.3 - Improved npm, go, and version requirement support",permalink:"/blog/proto-v0.3"}},l={image:r(37990).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\nimprovements."))}m.isMDXComponent=!0},37990:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.0-92cfbbbcd27cb6dd1411dbd29b0f1985.png"}}]); \ No newline at end of file diff --git a/assets/js/dd3540fa.9753eafc.js b/assets/js/dd3540fa.9753eafc.js new file mode 100644 index 00000000000..4c5b01928d6 --- /dev/null +++ b/assets/js/dd3540fa.9753eafc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59364],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),g=c(r),f=o,u=g["".concat(l,".").concat(f)]||g[f]||m[f]||a;return r?n.createElement(u,i(i({ref:t},p),{},{components:r})):n.createElement(u,i({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},38834:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},i=void 0,s={permalink:"/blog/moon-v1.0",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx",source:"@site/blog/2023-03-27_moon-v1.0.mdx",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",description:"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've",date:"2023-03-27T00:00:00.000Z",formattedDate:"March 27, 2023",tags:[{label:"projects",permalink:"/blog/tags/projects"},{label:"constraints",permalink:"/blog/tags/constraints"},{label:"tags",permalink:"/blog/tags/tags"},{label:"env-vars",permalink:"/blog/tags/env-vars"},{label:"tokens",permalink:"/blog/tags/tokens"}],readingTime:4.745,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.0",title:"moon v1.0 - Official release! Project constraints, tagging, and more!",authors:["milesj"],tags:["projects","constraints","tags","env-vars","tokens"],image:"./img/moon/v1.0.png"},prevItem:{title:"proto v0.4 - Rust support, user configs, and more",permalink:"/blog/proto-v0.4"},nextItem:{title:"proto v0.3 - Improved npm, go, and version requirement support",permalink:"/blog/proto-v0.3"}},l={image:r(37990).Z,authorsImageUrls:[void 0]},c=[],p={toc:c};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ud83c\udf89 It's finally here! After almost a year of development, a handful of breaking changes, we've\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\nimprovements."))}m.isMDXComponent=!0},37990:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.0-92cfbbbcd27cb6dd1411dbd29b0f1985.png"}}]); \ No newline at end of file diff --git a/assets/js/dd5ac54b.54864967.js b/assets/js/dd5ac54b.54864967.js new file mode 100644 index 00000000000..b16dbf19f96 --- /dev/null +++ b/assets/js/dd5ac54b.54864967.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53184],{68011:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/task","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/dd5ac54b.f6f6d365.js b/assets/js/dd5ac54b.f6f6d365.js deleted file mode 100644 index 93a42d91db4..00000000000 --- a/assets/js/dd5ac54b.f6f6d365.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3184],{68011:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/task","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/dd99bf53.81bfd095.js b/assets/js/dd99bf53.81bfd095.js deleted file mode 100644 index 07de38de3e1..00000000000 --- a/assets/js/dd99bf53.81bfd095.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19],{2020:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/notifier","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/dd99bf53.85834099.js b/assets/js/dd99bf53.85834099.js new file mode 100644 index 00000000000..6c1501d7abe --- /dev/null +++ b/assets/js/dd99bf53.85834099.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20019],{2020:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/notifier","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ddec1041.271ff754.js b/assets/js/ddec1041.271ff754.js deleted file mode 100644 index 33c056a1d43..00000000000 --- a/assets/js/ddec1041.271ff754.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2461],{46599:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tool","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ddec1041.fe39ec2e.js b/assets/js/ddec1041.fe39ec2e.js new file mode 100644 index 00000000000..54ce103f0df --- /dev/null +++ b/assets/js/ddec1041.fe39ec2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22461],{46599:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tool","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.0128476c.js b/assets/js/df203c0f.0128476c.js new file mode 100644 index 00000000000..c83d3363764 --- /dev/null +++ b/assets/js/df203c0f.0128476c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99924],{67051:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var a=l(27378),n=l(37140),r=l(81884),s=l(40689),c=l(1123),o=l(75484),i=l(99213),u=l(64654),g=l(60505);function m(e){let{doc:t}=e;return a.createElement("article",{className:"margin-vert--lg"},a.createElement(r.default,{to:t.permalink},a.createElement("h2",null,t.title)),t.description&&a.createElement("p",null,t.description))}function d(e){let{tag:t}=e;const l=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,i.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:t}))}(),d=(0,i.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:l(t.count),tagName:t.label});return a.createElement(c.FG,{className:(0,n.Z)(o.k.wrapper.docsPages,o.k.page.docsTagDocListPage)},a.createElement(c.d,{title:d}),a.createElement(g.Z,{tag:"doc_tag_doc_list"}),a.createElement(u.Z,null,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("header",{className:"margin-bottom--xl"},a.createElement("h1",null,d),a.createElement(r.default,{href:t.allTagsPath},a.createElement(i.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),a.createElement("section",{className:"margin-vert--lg"},t.items.map((e=>a.createElement(m,{key:e.id,doc:e})))))))))}},40689:(e,t,l)=>{l.d(t,{c:()=>i});var a=l(27378),n=l(50353);const r=["zero","one","two","few","many","other"];function s(e){return r.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.default)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function i(){const e=o();return{selectMessage:(t,l)=>function(e,t,l){const a=e.split("|");if(1===a.length)return a[0];a.length>l.pluralForms.length&&console.error(`For locale=${l.locale}, a maximum of ${l.pluralForms.length} plural forms are expected (${l.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=l.select(t),r=l.pluralForms.indexOf(n);return a[Math.min(r,a.length-1)]}(l,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.e542d5cd.js b/assets/js/df203c0f.e542d5cd.js deleted file mode 100644 index b6831332111..00000000000 --- a/assets/js/df203c0f.e542d5cd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9924],{67051:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var a=l(27378),n=l(37140),r=l(81884),s=l(40689),c=l(1123),o=l(75484),i=l(99213),u=l(64654),g=l(60505);function m(e){let{doc:t}=e;return a.createElement("article",{className:"margin-vert--lg"},a.createElement(r.default,{to:t.permalink},a.createElement("h2",null,t.title)),t.description&&a.createElement("p",null,t.description))}function d(e){let{tag:t}=e;const l=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,i.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:t}))}(),d=(0,i.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:l(t.count),tagName:t.label});return a.createElement(c.FG,{className:(0,n.Z)(o.k.wrapper.docsPages,o.k.page.docsTagDocListPage)},a.createElement(c.d,{title:d}),a.createElement(g.Z,{tag:"doc_tag_doc_list"}),a.createElement(u.Z,null,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("header",{className:"margin-bottom--xl"},a.createElement("h1",null,d),a.createElement(r.default,{href:t.allTagsPath},a.createElement(i.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),a.createElement("section",{className:"margin-vert--lg"},t.items.map((e=>a.createElement(m,{key:e.id,doc:e})))))))))}},40689:(e,t,l)=>{l.d(t,{c:()=>i});var a=l(27378),n=l(50353);const r=["zero","one","two","few","many","other"];function s(e){return r.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.default)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function i(){const e=o();return{selectMessage:(t,l)=>function(e,t,l){const a=e.split("|");if(1===a.length)return a[0];a.length>l.pluralForms.length&&console.error(`For locale=${l.locale}, a maximum of ${l.pluralForms.length} plural forms are expected (${l.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=l.select(t),r=l.pluralForms.indexOf(n);return a[Math.min(r,a.length-1)]}(l,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/df212c12.2b04b6cb.js b/assets/js/df212c12.2b04b6cb.js deleted file mode 100644 index 13600627ed6..00000000000 --- a/assets/js/df212c12.2b04b6cb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6863],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(n),k=r,d=u["".concat(s,".").concat(k)]||u[k]||c[k]||o;return n?a.createElement(d,i(i({ref:t},m),{},{components:n})):a.createElement(d,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return a.createElement(r.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},65521:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),o=n(79022);const i={title:"Task inheritance"},l=void 0,s={unversionedId:"concepts/task-inheritance",id:"concepts/task-inheritance",title:"Task inheritance",description:"Unlike other task runners that require the same tasks to be repeatedly defined for every project,",source:"@site/docs/concepts/task-inheritance.mdx",sourceDirName:"concepts",slug:"/concepts/task-inheritance",permalink:"/docs/concepts/task-inheritance",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/task-inheritance.mdx",tags:[],version:"current",frontMatter:{title:"Task inheritance"},sidebar:"docs",previous:{title:"Tasks",permalink:"/docs/concepts/task"},next:{title:"Tokens",permalink:"/docs/concepts/token"}},p={},m=[{value:"Scope by project metadata",id:"scope-by-project-metadata",level:2},{value:"JavaScript platforms",id:"javascript-platforms",level:3},{value:"Merge strategies",id:"merge-strategies",level:2}],c={toc:m};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Unlike other task runners that require the same tasks to be repeatedly defined for ",(0,r.kt)("em",{parentName:"p"},"every")," project,\nmoon uses an inheritance model where tasks can be defined once at the workspace-level, and are then\ninherited by ",(0,r.kt)("em",{parentName:"p"},"many or all")," projects."),(0,r.kt)("p",null,"Workspace-level tasks (also known as global tasks) are defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," or\n",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks/**/*.yml")),", and are inherited by default. However, projects are able to\ninclude, exclude, or rename inherited tasks using the\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#inheritedtasks"},(0,r.kt)("inlineCode",{parentName:"a"},"workspace.inheritedTasks"))," in ",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("h2",{id:"scope-by-project-metadata"},"Scope by project metadata"),(0,r.kt)("p",null,"By default tasks defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," will be inherited by ",(0,r.kt)("em",{parentName:"p"},"all")," projects. This\napproach works well when a monorepo is comprised of a single programming language, but breaks down\nquickly in multi-language setups."),(0,r.kt)("p",null,"To support these complex repositories, we support scoped tasks with ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks/**/*.yml")),",\nwhere ",(0,r.kt)("inlineCode",{parentName:"p"},"*.yml")," maps to a project based on a combination of its ",(0,r.kt)("a",{parentName:"p",href:"../config/project#language"},"language"),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#type"},"type"),", or\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#tags"},"tags"),'. This enables you to easily declare tasks for "JavaScript projects", "Go applications",\n"Ruby libraries", so on and so forth.'),(0,r.kt)("p",null,"When resolving configuration files, moon will locate and ",(0,r.kt)("em",{parentName:"p"},"shallow")," merge files in the following\norder, from widest scope to narrowest scope:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml")," - All projects."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>.yml")," - Projects with a matching ",(0,r.kt)("a",{parentName:"li",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language"))," setting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>-<type>.yml")," - Projects with matching ",(0,r.kt)("a",{parentName:"li",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language"))," and\n",(0,r.kt)("a",{parentName:"li",href:"../config/project#type"},(0,r.kt)("inlineCode",{parentName:"a"},"type"))," settings."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/tag-<name>.yml")," - Projects with a matching ",(0,r.kt)("a",{parentName:"li",href:"../config/project#tags"},(0,r.kt)("inlineCode",{parentName:"a"},"tag")),".",(0,r.kt)(o.Z,{version:"1.2.0",mdxType:"VersionLabel"}))),(0,r.kt)("p",null,'As mentioned above, all of these files are shallow merged into a single "global tasks" configuration\nthat is unique per-project. Merging ',(0,r.kt)("strong",{parentName:"p"},"does not")," utilize the ",(0,r.kt)("a",{parentName:"p",href:"#merge-strategies"},"merge strategies"),"\nbelow, as those strategies are only utilized when merging global and local tasks."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Tags are resolved in the order they are defined in ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml")," ",(0,r.kt)("inlineCode",{parentName:"p"},"tags")," setting.")),(0,r.kt)("h3",{id:"javascript-platforms"},"JavaScript platforms"),(0,r.kt)("p",null,"Unlike most languages that have 1 runtime, JavaScript has 3 (Node.js, Deno, Bun), and we must\nsupport repositories that are comprised of any combination of these 3. As such, JavaScript (and\nTypeScript) based projects have a special lookup order using\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#platform-1"},(0,r.kt)("inlineCode",{parentName:"a"},"platform"))," to account for this:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<platform>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<platform>-<type>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>-<type>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/tag-<name>.yml")," ",(0,r.kt)(o.Z,{version:"1.2.0",mdxType:"VersionLabel"}))),(0,r.kt)("p",null,"For example, ",(0,r.kt)("inlineCode",{parentName:"p"},"node.yml")," would be inherited for Node.js projects, ",(0,r.kt)("inlineCode",{parentName:"p"},"bun-library.yml")," for Bun\nlibraries, and ",(0,r.kt)("inlineCode",{parentName:"p"},"deno-application.yml")," for Deno applications. While ",(0,r.kt)("inlineCode",{parentName:"p"},"javascript.yml"),",\n",(0,r.kt)("inlineCode",{parentName:"p"},"typescript-library.yml"),", etc, will be inherited for all platforms."),(0,r.kt)("h2",{id:"merge-strategies"},"Merge strategies"),(0,r.kt)("p",null,"When a ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks#tasks"},"global task")," and ",(0,r.kt)("a",{parentName:"p",href:"../config/project#tasks"},"local task")," of the same\nname exist, they are merged into a single task. To accomplish this, one of many\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#options"},"merge strategies")," can be used."),(0,r.kt)("p",null,"Merging is applied to the parameters ",(0,r.kt)("a",{parentName:"p",href:"../config/project#args"},(0,r.kt)("inlineCode",{parentName:"a"},"args")),",\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#env-1"},(0,r.kt)("inlineCode",{parentName:"a"},"env")),",\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs")),", and ",(0,r.kt)("a",{parentName:"p",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs")),", using the\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeargs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeArgs")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergedeps"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeDeps")),",\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeenv"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeEnv")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeinputs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeInputs"))," and\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeoutputs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeOutputs"))," options respectively. Each of these options support\none of the following strategy values."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"append")," (default) - Values found in the local task are merged ",(0,r.kt)("em",{parentName:"li"},"after")," the values found in the\nglobal task. For example, this strategy is useful for toggling flag arguments."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"prepend")," - Values found in the local task are merged ",(0,r.kt)("em",{parentName:"li"},"before")," the values found in the global\ntask. For example, this strategy is useful for applying option arguments that must come before\npositional arguments."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"replace")," - Values found in the local task entirely ",(0,r.kt)("em",{parentName:"li"},"replaces")," the values in the global task. This\nstrategy is useful when you need full control.")),(0,r.kt)("p",null,"All 3 of these strategies are demonstrated below, with a somewhat contrived example, but you get the\npoint."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"# Global\ntasks:\n build:\n command:\n - 'webpack'\n - '--mode'\n - 'production'\n - '--color'\n deps:\n - 'designSystem:build'\n inputs:\n - '/webpack.config.js'\n outputs:\n - 'build/'\n\n# Local\ntasks:\n build:\n args: '--no-color --no-stats'\n deps:\n - 'reactHooks:build'\n inputs:\n - 'webpack.config.js'\n options:\n mergeArgs: 'append'\n mergeDeps: 'prepend'\n mergeInputs: 'replace'\n\n# Merged result\ntasks:\n build:\n command:\n - 'webpack'\n - '--mode'\n - 'production'\n - '--color'\n - '--no-color'\n - '--no-stats'\n deps:\n - 'reactHooks:build'\n - 'designSystem:build'\n inputs:\n - 'webpack.config.js'\n outputs:\n - 'build/'\n options:\n mergeArgs: 'append'\n mergeDeps: 'prepend'\n mergeInputs: 'replace'\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/df212c12.d3192014.js b/assets/js/df212c12.d3192014.js new file mode 100644 index 00000000000..4bc2ae423b7 --- /dev/null +++ b/assets/js/df212c12.d3192014.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36863],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(n),k=r,d=u["".concat(s,".").concat(k)]||u[k]||c[k]||o;return n?a.createElement(d,i(i({ref:t},m),{},{components:n})):a.createElement(d,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return a.createElement(r.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:t,icon:n,text:l,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?i[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),l)}},65521:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),o=n(79022);const i={title:"Task inheritance"},l=void 0,s={unversionedId:"concepts/task-inheritance",id:"concepts/task-inheritance",title:"Task inheritance",description:"Unlike other task runners that require the same tasks to be repeatedly defined for every project,",source:"@site/docs/concepts/task-inheritance.mdx",sourceDirName:"concepts",slug:"/concepts/task-inheritance",permalink:"/docs/concepts/task-inheritance",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/task-inheritance.mdx",tags:[],version:"current",frontMatter:{title:"Task inheritance"},sidebar:"docs",previous:{title:"Tasks",permalink:"/docs/concepts/task"},next:{title:"Tokens",permalink:"/docs/concepts/token"}},p={},m=[{value:"Scope by project metadata",id:"scope-by-project-metadata",level:2},{value:"JavaScript platforms",id:"javascript-platforms",level:3},{value:"Merge strategies",id:"merge-strategies",level:2}],c={toc:m};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Unlike other task runners that require the same tasks to be repeatedly defined for ",(0,r.kt)("em",{parentName:"p"},"every")," project,\nmoon uses an inheritance model where tasks can be defined once at the workspace-level, and are then\ninherited by ",(0,r.kt)("em",{parentName:"p"},"many or all")," projects."),(0,r.kt)("p",null,"Workspace-level tasks (also known as global tasks) are defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," or\n",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks/**/*.yml")),", and are inherited by default. However, projects are able to\ninclude, exclude, or rename inherited tasks using the\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#inheritedtasks"},(0,r.kt)("inlineCode",{parentName:"a"},"workspace.inheritedTasks"))," in ",(0,r.kt)("a",{parentName:"p",href:"../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("h2",{id:"scope-by-project-metadata"},"Scope by project metadata"),(0,r.kt)("p",null,"By default tasks defined in ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," will be inherited by ",(0,r.kt)("em",{parentName:"p"},"all")," projects. This\napproach works well when a monorepo is comprised of a single programming language, but breaks down\nquickly in multi-language setups."),(0,r.kt)("p",null,"To support these complex repositories, we support scoped tasks with ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks/**/*.yml")),",\nwhere ",(0,r.kt)("inlineCode",{parentName:"p"},"*.yml")," maps to a project based on a combination of its ",(0,r.kt)("a",{parentName:"p",href:"../config/project#language"},"language"),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#type"},"type"),", or\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#tags"},"tags"),'. This enables you to easily declare tasks for "JavaScript projects", "Go applications",\n"Ruby libraries", so on and so forth.'),(0,r.kt)("p",null,"When resolving configuration files, moon will locate and ",(0,r.kt)("em",{parentName:"p"},"shallow")," merge files in the following\norder, from widest scope to narrowest scope:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml")," - All projects."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>.yml")," - Projects with a matching ",(0,r.kt)("a",{parentName:"li",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language"))," setting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>-<type>.yml")," - Projects with matching ",(0,r.kt)("a",{parentName:"li",href:"../config/project#language"},(0,r.kt)("inlineCode",{parentName:"a"},"language"))," and\n",(0,r.kt)("a",{parentName:"li",href:"../config/project#type"},(0,r.kt)("inlineCode",{parentName:"a"},"type"))," settings."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/tag-<name>.yml")," - Projects with a matching ",(0,r.kt)("a",{parentName:"li",href:"../config/project#tags"},(0,r.kt)("inlineCode",{parentName:"a"},"tag")),".",(0,r.kt)(o.Z,{version:"1.2.0",mdxType:"VersionLabel"}))),(0,r.kt)("p",null,'As mentioned above, all of these files are shallow merged into a single "global tasks" configuration\nthat is unique per-project. Merging ',(0,r.kt)("strong",{parentName:"p"},"does not")," utilize the ",(0,r.kt)("a",{parentName:"p",href:"#merge-strategies"},"merge strategies"),"\nbelow, as those strategies are only utilized when merging global and local tasks."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Tags are resolved in the order they are defined in ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml")," ",(0,r.kt)("inlineCode",{parentName:"p"},"tags")," setting.")),(0,r.kt)("h3",{id:"javascript-platforms"},"JavaScript platforms"),(0,r.kt)("p",null,"Unlike most languages that have 1 runtime, JavaScript has 3 (Node.js, Deno, Bun), and we must\nsupport repositories that are comprised of any combination of these 3. As such, JavaScript (and\nTypeScript) based projects have a special lookup order using\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#platform-1"},(0,r.kt)("inlineCode",{parentName:"a"},"platform"))," to account for this:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<platform>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<platform>-<type>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/<language>-<type>.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks/tag-<name>.yml")," ",(0,r.kt)(o.Z,{version:"1.2.0",mdxType:"VersionLabel"}))),(0,r.kt)("p",null,"For example, ",(0,r.kt)("inlineCode",{parentName:"p"},"node.yml")," would be inherited for Node.js projects, ",(0,r.kt)("inlineCode",{parentName:"p"},"bun-library.yml")," for Bun\nlibraries, and ",(0,r.kt)("inlineCode",{parentName:"p"},"deno-application.yml")," for Deno applications. While ",(0,r.kt)("inlineCode",{parentName:"p"},"javascript.yml"),",\n",(0,r.kt)("inlineCode",{parentName:"p"},"typescript-library.yml"),", etc, will be inherited for all platforms."),(0,r.kt)("h2",{id:"merge-strategies"},"Merge strategies"),(0,r.kt)("p",null,"When a ",(0,r.kt)("a",{parentName:"p",href:"../config/tasks#tasks"},"global task")," and ",(0,r.kt)("a",{parentName:"p",href:"../config/project#tasks"},"local task")," of the same\nname exist, they are merged into a single task. To accomplish this, one of many\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#options"},"merge strategies")," can be used."),(0,r.kt)("p",null,"Merging is applied to the parameters ",(0,r.kt)("a",{parentName:"p",href:"../config/project#args"},(0,r.kt)("inlineCode",{parentName:"a"},"args")),",\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#env-1"},(0,r.kt)("inlineCode",{parentName:"a"},"env")),",\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs")),", and ",(0,r.kt)("a",{parentName:"p",href:"../config/project#outputs"},(0,r.kt)("inlineCode",{parentName:"a"},"outputs")),", using the\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeargs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeArgs")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergedeps"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeDeps")),",\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeenv"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeEnv")),", ",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeinputs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeInputs"))," and\n",(0,r.kt)("a",{parentName:"p",href:"../config/project#mergeoutputs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeOutputs"))," options respectively. Each of these options support\none of the following strategy values."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"append")," (default) - Values found in the local task are merged ",(0,r.kt)("em",{parentName:"li"},"after")," the values found in the\nglobal task. For example, this strategy is useful for toggling flag arguments."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"prepend")," - Values found in the local task are merged ",(0,r.kt)("em",{parentName:"li"},"before")," the values found in the global\ntask. For example, this strategy is useful for applying option arguments that must come before\npositional arguments."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"replace")," - Values found in the local task entirely ",(0,r.kt)("em",{parentName:"li"},"replaces")," the values in the global task. This\nstrategy is useful when you need full control.")),(0,r.kt)("p",null,"All 3 of these strategies are demonstrated below, with a somewhat contrived example, but you get the\npoint."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"# Global\ntasks:\n build:\n command:\n - 'webpack'\n - '--mode'\n - 'production'\n - '--color'\n deps:\n - 'designSystem:build'\n inputs:\n - '/webpack.config.js'\n outputs:\n - 'build/'\n\n# Local\ntasks:\n build:\n args: '--no-color --no-stats'\n deps:\n - 'reactHooks:build'\n inputs:\n - 'webpack.config.js'\n options:\n mergeArgs: 'append'\n mergeDeps: 'prepend'\n mergeInputs: 'replace'\n\n# Merged result\ntasks:\n build:\n command:\n - 'webpack'\n - '--mode'\n - 'production'\n - '--color'\n - '--no-color'\n - '--no-stats'\n deps:\n - 'reactHooks:build'\n - 'designSystem:build'\n inputs:\n - 'webpack.config.js'\n outputs:\n - 'build/'\n options:\n mergeArgs: 'append'\n mergeDeps: 'prepend'\n mergeInputs: 'replace'\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dffc4bd7.56bc275b.js b/assets/js/dffc4bd7.56bc275b.js deleted file mode 100644 index b97b8a03b7f..00000000000 --- a/assets/js/dffc4bd7.56bc275b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[866],{6310:e=>{e.exports=JSON.parse('{"title":"docker","description":"Operations for integrating with Docker and Dockerfiles.","keywords":["cli","commands","docker"],"slug":"/commands/docker","permalink":"/docs/commands/docker","navigation":{"previous":{"title":"completions","permalink":"/docs/commands/completions"},"next":{"title":"prune","permalink":"/docs/commands/docker/prune"}}}')}}]); \ No newline at end of file diff --git a/assets/js/dffc4bd7.efacc5a5.js b/assets/js/dffc4bd7.efacc5a5.js new file mode 100644 index 00000000000..5ba49134959 --- /dev/null +++ b/assets/js/dffc4bd7.efacc5a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70866],{6310:e=>{e.exports=JSON.parse('{"title":"docker","description":"Operations for integrating with Docker and Dockerfiles.","keywords":["cli","commands","docker"],"slug":"/commands/docker","permalink":"/docs/commands/docker","navigation":{"previous":{"title":"completions","permalink":"/docs/commands/completions"},"next":{"title":"prune","permalink":"/docs/commands/docker/prune"}}}')}}]); \ No newline at end of file diff --git a/assets/js/e13166f5.e41fc580.js b/assets/js/e13166f5.e41fc580.js new file mode 100644 index 00000000000..ac22495d28e --- /dev/null +++ b/assets/js/e13166f5.e41fc580.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66172],{35318:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},l=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,m=f["".concat(p,".").concat(d)]||f[d]||u[d]||a;return r?n.createElement(m,c(c({ref:t},l),{},{components:r})):n.createElement(m,c({ref:t},l))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=f;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var s=2;s<a;s++)c[s]=r[s];return n.createElement.apply(null,c)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},58571:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={title:"Workspace"},c=void 0,i={unversionedId:"concepts/workspace",id:"concepts/workspace",title:"Workspace",description:"A workspace is a directory that contains projects, manages a toolchain,",source:"@site/docs/concepts/workspace.mdx",sourceDirName:"concepts",slug:"/concepts/workspace",permalink:"/docs/concepts/workspace",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/workspace.mdx",tags:[],version:"current",frontMatter:{title:"Workspace"},sidebar:"docs",previous:{title:"Toolchain",permalink:"/docs/concepts/toolchain"},next:{title:"Config files",permalink:"/docs/config"}},p={},s=[{value:"Configuration",id:"configuration",level:2}],l={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A workspace is a directory that contains ",(0,o.kt)("a",{parentName:"p",href:"./project"},"projects"),", manages a ",(0,o.kt)("a",{parentName:"p",href:"./toolchain"},"toolchain"),",\nruns ",(0,o.kt)("a",{parentName:"p",href:"./task"},"tasks"),", and is coupled with a VCS repository. The root of a workspace is denoted by a\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon")," folder."),(0,o.kt)("p",null,"By default moon has been designed for monorepos, but can also be used for polyrepos."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"Configuration that's applied to the entire workspace is defined in\n",(0,o.kt)("a",{parentName:"p",href:"../config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e13166f5.f8518489.js b/assets/js/e13166f5.f8518489.js deleted file mode 100644 index 160632dee73..00000000000 --- a/assets/js/e13166f5.f8518489.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6172],{35318:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},l=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,m=f["".concat(p,".").concat(d)]||f[d]||u[d]||a;return r?n.createElement(m,c(c({ref:t},l),{},{components:r})):n.createElement(m,c({ref:t},l))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=f;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var s=2;s<a;s++)c[s]=r[s];return n.createElement.apply(null,c)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},58571:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={title:"Workspace"},c=void 0,i={unversionedId:"concepts/workspace",id:"concepts/workspace",title:"Workspace",description:"A workspace is a directory that contains projects, manages a toolchain,",source:"@site/docs/concepts/workspace.mdx",sourceDirName:"concepts",slug:"/concepts/workspace",permalink:"/docs/concepts/workspace",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/workspace.mdx",tags:[],version:"current",frontMatter:{title:"Workspace"},sidebar:"docs",previous:{title:"Toolchain",permalink:"/docs/concepts/toolchain"},next:{title:"Config files",permalink:"/docs/config"}},p={},s=[{value:"Configuration",id:"configuration",level:2}],l={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A workspace is a directory that contains ",(0,o.kt)("a",{parentName:"p",href:"./project"},"projects"),", manages a ",(0,o.kt)("a",{parentName:"p",href:"./toolchain"},"toolchain"),",\nruns ",(0,o.kt)("a",{parentName:"p",href:"./task"},"tasks"),", and is coupled with a VCS repository. The root of a workspace is denoted by a\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon")," folder."),(0,o.kt)("p",null,"By default moon has been designed for monorepos, but can also be used for polyrepos."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"Configuration that's applied to the entire workspace is defined in\n",(0,o.kt)("a",{parentName:"p",href:"../config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e16afba1.5c8d4954.js b/assets/js/e16afba1.5c8d4954.js deleted file mode 100644 index d4680a4bc3c..00000000000 --- a/assets/js/e16afba1.5c8d4954.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6755],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c<o;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return r.createElement(a.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(27378),a=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},22525:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const i={title:"task"},s=void 0,l={unversionedId:"commands/task",id:"commands/task",title:"task",description:"The moon task (or moon t) command will display information about a task that has been",source:"@site/docs/commands/task.mdx",sourceDirName:"commands",slug:"/commands/task",permalink:"/docs/commands/task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/task.mdx",tags:[],version:"current",frontMatter:{title:"task"},sidebar:"docs",previous:{title:"projects",permalink:"/docs/commands/sync/projects"},next:{title:"teardown",permalink:"/docs/commands/teardown"}},c={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{version:"1.1.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon task <target>")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"moon t"),") command will display information about a task that has been\nconfigured and exists within a project. If a task does not exist, the program will return with a 1\nexit code."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon task web:build\n")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"<target>")," - Fully qualified project + task target.")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Print the task and its configuration as JSON.")),(0,a.kt)("h2",{id:"example-output"},"Example output"),(0,a.kt)("p",null,"The following output is an example of what this command prints, using our very own\n",(0,a.kt)("inlineCode",{parentName:"p"},"@moonrepo/runtime")," package."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"RUNTIME:BUILD\n\nID: build\nProject: runtime\nPlatform: node\nType: build\n\nPROCESS\n\nCommand: packemon build --addFiles --addExports --declaration\nEnvironment variables:\n - NODE_ENV = production\nWorking directory: /Projects/moon/packages/runtime\nRuns dependencies: Concurrently\nRuns in CI: Yes\n\nDEPENDS ON\n\n - types:build\n\nINPUTS\n\n - .moon/*.yml\n - packages/runtime/src/**/*\n - packages/runtime/tsconfig.*.json\n - packages/runtime/types/**/*\n - packages/runtime/package.json\n - packages/runtime/tsconfig.json\n - tsconfig.options.json\n\nOUTPUTS\n\n - packages/runtime/cjs\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e16afba1.6b43f1e4.js b/assets/js/e16afba1.6b43f1e4.js new file mode 100644 index 00000000000..20644290ca2 --- /dev/null +++ b/assets/js/e16afba1.6b43f1e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97889],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,f=m["".concat(l,".").concat(d)]||m[d]||u[d]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c<o;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(27378),a=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return r.createElement(a.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(27378),a=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},22525:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(25773),a=(n(27378),n(35318)),o=n(79022);const i={title:"task"},s=void 0,l={unversionedId:"commands/task",id:"commands/task",title:"task",description:"The moon task (or moon t) command will display information about a task that has been",source:"@site/docs/commands/task.mdx",sourceDirName:"commands",slug:"/commands/task",permalink:"/docs/commands/task",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/task.mdx",tags:[],version:"current",frontMatter:{title:"task"},sidebar:"docs",previous:{title:"projects",permalink:"/docs/commands/sync/projects"},next:{title:"teardown",permalink:"/docs/commands/teardown"}},c={},p=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],u={toc:p};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{version:"1.1.0",header:!0,mdxType:"VersionLabel"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon task <target>")," (or ",(0,a.kt)("inlineCode",{parentName:"p"},"moon t"),") command will display information about a task that has been\nconfigured and exists within a project. If a task does not exist, the program will return with a 1\nexit code."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon task web:build\n")),(0,a.kt)("h3",{id:"arguments"},"Arguments"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"<target>")," - Fully qualified project + task target.")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Print the task and its configuration as JSON.")),(0,a.kt)("h2",{id:"example-output"},"Example output"),(0,a.kt)("p",null,"The following output is an example of what this command prints, using our very own\n",(0,a.kt)("inlineCode",{parentName:"p"},"@moonrepo/runtime")," package."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"RUNTIME:BUILD\n\nID: build\nProject: runtime\nPlatform: node\nType: build\n\nPROCESS\n\nCommand: packemon build --addFiles --addExports --declaration\nEnvironment variables:\n - NODE_ENV = production\nWorking directory: /Projects/moon/packages/runtime\nRuns dependencies: Concurrently\nRuns in CI: Yes\n\nDEPENDS ON\n\n - types:build\n\nINPUTS\n\n - .moon/*.yml\n - packages/runtime/src/**/*\n - packages/runtime/tsconfig.*.json\n - packages/runtime/types/**/*\n - packages/runtime/package.json\n - packages/runtime/tsconfig.json\n - tsconfig.options.json\n\nOUTPUTS\n\n - packages/runtime/cjs\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e4c23816.00f72419.js b/assets/js/e4c23816.00f72419.js new file mode 100644 index 00000000000..97ae56a05f5 --- /dev/null +++ b/assets/js/e4c23816.00f72419.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89819],{91154:e=>{e.exports=JSON.parse('{"label":"ignore","permalink":"/blog/tags/ignore","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/e4c23816.e0539788.js b/assets/js/e4c23816.e0539788.js deleted file mode 100644 index 536f1acbe2c..00000000000 --- a/assets/js/e4c23816.e0539788.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9819],{91154:e=>{e.exports=JSON.parse('{"label":"ignore","permalink":"/blog/tags/ignore","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/e570d6db.387d1b7c.js b/assets/js/e570d6db.387d1b7c.js new file mode 100644 index 00000000000..c8e20b3c36e --- /dev/null +++ b/assets/js/e570d6db.387d1b7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70951],{35318:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>u});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=r.createContext({}),l=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},d=function(e){var n=l(e.components);return r.createElement(i.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(t),u=o,f=p["".concat(i,".").concat(u)]||p[u]||m[u]||a;return t?r.createElement(f,c(c({ref:n},d),{},{components:t})):r.createElement(f,c({ref:n},d))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=p;var s={};for(var i in n)hasOwnProperty.call(n,i)&&(s[i]=n[i]);s.originalType=e,s.mdxType="string"==typeof e?e:o,c[1]=s;for(var l=2;l<a;l++)c[l]=t[l];return r.createElement.apply(null,c)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},79022:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(27378),o=t(9619);function a(e){let{header:n,inline:t,updated:a,version:c}=e;return r.createElement(o.Z,{text:`v${c}`,variant:a?"success":"info",className:n?"absolute right-0 top-1.5":t?"inline-block":"ml-2"})}},9619:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(27378),o=t(40624),a=t(31792);const c={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:n,icon:t,text:s,variant:i}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?c[i]:"bg-gray-100 text-gray-800",n)},t&&r.createElement(a.Z,{icon:t,className:"mr-1"}),s)}},36593:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var r=t(25773),o=(t(27378),t(35318)),a=t(79022);const c={title:"sync codeowners",sidebar_label:"codeowners"},s=void 0,i={unversionedId:"commands/sync/codeowners",id:"commands/sync/codeowners",title:"sync codeowners",description:"The moon sync codeowners command will manually sync code owners, by aggregating all owners from",source:"@site/docs/commands/sync/codeowners.mdx",sourceDirName:"commands/sync",slug:"/commands/sync/codeowners",permalink:"/docs/commands/sync/codeowners",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/sync/codeowners.mdx",tags:[],version:"current",frontMatter:{title:"sync codeowners",sidebar_label:"codeowners"},sidebar:"docs",previous:{title:"sync",permalink:"/docs/commands/sync"},next:{title:"hooks",permalink:"/docs/commands/sync/hooks"}},l={},d=[{value:"Options",id:"options",level:3}],m={toc:d};function p(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"1.8.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon sync codeowners")," command will manually sync code owners, by aggregating all owners from\nprojects, and generating a single ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file. Refer to the official\n",(0,o.kt)("a",{parentName:"p",href:"../../guides/codeowners"},"code owners")," guide for more information."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync codeowners\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--clean")," - Clean and remove previously generated file."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--force")," - Bypass cache and force create file.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e570d6db.5f9dade4.js b/assets/js/e570d6db.5f9dade4.js deleted file mode 100644 index 4eda94ea87f..00000000000 --- a/assets/js/e570d6db.5f9dade4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[951],{35318:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>u});var r=t(27378);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=r.createContext({}),l=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},d=function(e){var n=l(e.components);return r.createElement(i.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},p=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(t),u=o,f=p["".concat(i,".").concat(u)]||p[u]||m[u]||a;return t?r.createElement(f,c(c({ref:n},d),{},{components:t})):r.createElement(f,c({ref:n},d))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=p;var s={};for(var i in n)hasOwnProperty.call(n,i)&&(s[i]=n[i]);s.originalType=e,s.mdxType="string"==typeof e?e:o,c[1]=s;for(var l=2;l<a;l++)c[l]=t[l];return r.createElement.apply(null,c)}return r.createElement.apply(null,t)}p.displayName="MDXCreateElement"},79022:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(27378),o=t(9619);function a(e){let{header:n,inline:t,updated:a,version:c}=e;return r.createElement(o.Z,{text:`v${c}`,variant:a?"success":"info",className:n?"absolute right-0 top-1.5":t?"inline-block":"ml-2"})}},9619:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(27378),o=t(40624),a=t(31792);const c={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:n,icon:t,text:s,variant:i}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?c[i]:"bg-gray-100 text-gray-800",n)},t&&r.createElement(a.Z,{icon:t,className:"mr-1"}),s)}},36593:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var r=t(25773),o=(t(27378),t(35318)),a=t(79022);const c={title:"sync codeowners",sidebar_label:"codeowners"},s=void 0,i={unversionedId:"commands/sync/codeowners",id:"commands/sync/codeowners",title:"sync codeowners",description:"The moon sync codeowners command will manually sync code owners, by aggregating all owners from",source:"@site/docs/commands/sync/codeowners.mdx",sourceDirName:"commands/sync",slug:"/commands/sync/codeowners",permalink:"/docs/commands/sync/codeowners",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/sync/codeowners.mdx",tags:[],version:"current",frontMatter:{title:"sync codeowners",sidebar_label:"codeowners"},sidebar:"docs",previous:{title:"sync",permalink:"/docs/commands/sync"},next:{title:"hooks",permalink:"/docs/commands/sync/hooks"}},l={},d=[{value:"Options",id:"options",level:3}],m={toc:d};function p(e){let{components:n,...t}=e;return(0,o.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{version:"1.8.0",header:!0,mdxType:"VersionLabel"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon sync codeowners")," command will manually sync code owners, by aggregating all owners from\nprojects, and generating a single ",(0,o.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file. Refer to the official\n",(0,o.kt)("a",{parentName:"p",href:"../../guides/codeowners"},"code owners")," guide for more information."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync codeowners\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--clean")," - Clean and remove previously generated file."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--force")," - Bypass cache and force create file.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e5f23965.1ff5f462.js b/assets/js/e5f23965.1ff5f462.js deleted file mode 100644 index 08a754e3ecc..00000000000 --- a/assets/js/e5f23965.1ff5f462.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6882],{84376:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/pipeline","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/e5f23965.82389a5c.js b/assets/js/e5f23965.82389a5c.js new file mode 100644 index 00000000000..c62feebf406 --- /dev/null +++ b/assets/js/e5f23965.82389a5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66882],{84376:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/pipeline","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/e746f759.1a125948.js b/assets/js/e746f759.1a125948.js new file mode 100644 index 00000000000..228c28d37fc --- /dev/null +++ b/assets/js/e746f759.1a125948.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33984],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=p(r),g=o,b=m["".concat(s,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(b,l(l({ref:t},u),{},{components:r})):n.createElement(b,l({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=r[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},49711:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},l=void 0,i={permalink:"/blog/proto-v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx",source:"@site/blog/2023-08-23_proto-v0.15.mdx",title:"proto v0.15 - Install and uninstall globals",description:"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.",date:"2023-08-23T00:00:00.000Z",formattedDate:"August 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"global",permalink:"/blog/tags/global"}],readingTime:1.48,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},prevItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"},nextItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"}},s={authorsImageUrls:[void 0]},p=[],u={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a small release that adds support for uninstalling globals, and improves our WASM APIs."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e746f759.aaa2ab80.js b/assets/js/e746f759.aaa2ab80.js deleted file mode 100644 index cb13ffbaf64..00000000000 --- a/assets/js/e746f759.aaa2ab80.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3984],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=p(r),g=o,b=m["".concat(s,".").concat(g)]||m[g]||c[g]||a;return r?n.createElement(b,l(l({ref:t},u),{},{components:r})):n.createElement(b,l({ref:t},u))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=r[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},49711:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},l=void 0,i={permalink:"/blog/proto-v0.15",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx",source:"@site/blog/2023-08-23_proto-v0.15.mdx",title:"proto v0.15 - Install and uninstall globals",description:"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.",date:"2023-08-23T00:00:00.000Z",formattedDate:"August 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"},{label:"global",permalink:"/blog/tags/global"}],readingTime:1.48,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.15",title:"proto v0.15 - Install and uninstall globals",authors:["milesj"],tags:["proto","wasm","plugin","global"]},prevItem:{title:"proto v0.16 - Add, remove, and purge plugins",permalink:"/blog/proto-v0.16"},nextItem:{title:"moon v1.12 - Task improvements: extending, interactive, and more",permalink:"/blog/moon-v1.12"}},s={authorsImageUrls:[void 0]},p=[],u={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a small release that adds support for uninstalling globals, and improves our WASM APIs."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e7d7123e.a68e2dcc.js b/assets/js/e7d7123e.a68e2dcc.js new file mode 100644 index 00000000000..c81ec065e39 --- /dev/null +++ b/assets/js/e7d7123e.a68e2dcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65899],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(n),u=r,h=d["".concat(p,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:o,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:r,title:o,className:"inline-block"}))}},17965:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),o=n(88109);const i={slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},l=void 0,p={permalink:"/blog/v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-13_v0.14.mdx",source:"@site/blog/2022-09-13_v0.14.mdx",title:"moon v0.14 - Code generation and implicit dependencies",description:"With this release, we've landed some new features that have been requested multiple times since",date:"2022-09-13T00:00:00.000Z",formattedDate:"September 13, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"ci",permalink:"/blog/tags/ci"}],readingTime:1.715,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},prevItem:{title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",permalink:"/blog/v0.15"},nextItem:{title:"moon v0.13 - Hashing and toolchain improvements",permalink:"/blog/v0.13"}},s={authorsImageUrls:[void 0]},c=[{value:"New <code>moon generate</code> command",id:"new-moon-generate-command",level:2},{value:"Implicit dependency scanning",id:"implicit-dependency-scanning",level:2},{value:"Report CI runs on pull requests",id:"report-ci-runs-on-pull-requests",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],m={toc:c};function d(e){let{components:t,...i}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've landed some new features that have been requested multiple times since\nlaunch. A code generation and template scaffolding layer, as well as implicit dependency scanning\nfor the project graph!"),(0,r.kt)("h2",{id:"new-moon-generate-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon generate")," command"),(0,r.kt)("p",null,"Code generation is the staple of any large company or repository. Want to spin up a new application?\nWhat about an npm package? Or maybe third-party integrations? Avoid copy-and-pasting existing code,\nand instead generate it with the new ",(0,r.kt)("inlineCode",{parentName:"p"},"moon generate")," command, which is powered by our new generator\nsystem."),(0,r.kt)("p",null,'The generator will locate a template by name on the file system ("npm-package" in the example\nbelow), prompt and interpolate variables, render the files with ',(0,r.kt)("a",{parentName:"p",href:"https://tera.netlify.app/"},"Tera")," (a\nRust based template engine), and write the files to the target destination."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Generate code from a template to a target directory\n$ moon generate npm-package ./packages/example\n")),(0,r.kt)("p",null,"Learn more about ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/codegen"},"code generation in the official guide"),"!"),(0,r.kt)("h2",{id:"implicit-dependency-scanning"},"Implicit dependency scanning"),(0,r.kt)("p",null,"This has been a request since moon's official release, and it's finally here! Up until now, if you\nwanted project-to-project dependency relationships, you had to explicitly declare them with\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#dependson"},(0,r.kt)("inlineCode",{parentName:"a"},"dependsOn")),". But thanks to a\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/288"},"ton of"),"\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/249"},"infrastructure")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/277"},"platform")," changes, we can now infer implicit\ndependencies automatically!"),(0,r.kt)("p",null,"We still suggest using explicit dependencies, as it provides more\n",(0,r.kt)("a",{parentName:"p",href:"../docs/concepts/project#dependencies"},"automation like project syncing"),", but implicit is great for\nadoption and migration purposes."),(0,r.kt)("h2",{id:"report-ci-runs-on-pull-requests"},"Report CI runs on pull requests"),(0,r.kt)("p",null,"We're fans of continuous and easily accessible feedback, and as such, have released a new GitHub\naction, ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/run-report-action")),",\nwhich reports the results of ",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," as a pull request comment. The report\nlooks something like the following:"),(0,r.kt)(o.Z,{src:n(53432),width:"60%",mdxType:"Image"}),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.14.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"When running in a Docker container, caching is disabled in an effort to greatly reduce the size of\nthe image."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"moon setup")," to also install Node.js dependencies.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.15 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Major Docker workflow improvements!"),(0,r.kt)("li",{parentName:"ul"},"Frontmatter configuration within template files.")))}d.isMDXComponent=!0},53432:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/run-report-41cffa17cd530ab8cca5cef47b38dcfd.png"}}]); \ No newline at end of file diff --git a/assets/js/e7d7123e.eb777111.js b/assets/js/e7d7123e.eb777111.js deleted file mode 100644 index 8be6fcad504..00000000000 --- a/assets/js/e7d7123e.eb777111.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5899],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(n),u=r,h=d["".concat(p,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:o,align:i="center",padding:l="1rem"}=e;return a.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},a.createElement("img",{src:t.default,width:n,alt:r,title:o,className:"inline-block"}))}},17965:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var a=n(25773),r=(n(27378),n(35318)),o=n(88109);const i={slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},l=void 0,p={permalink:"/blog/v0.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-09-13_v0.14.mdx",source:"@site/blog/2022-09-13_v0.14.mdx",title:"moon v0.14 - Code generation and implicit dependencies",description:"With this release, we've landed some new features that have been requested multiple times since",date:"2022-09-13T00:00:00.000Z",formattedDate:"September 13, 2022",tags:[{label:"generator",permalink:"/blog/tags/generator"},{label:"project-graph",permalink:"/blog/tags/project-graph"},{label:"ci",permalink:"/blog/tags/ci"}],readingTime:1.715,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.14",title:"moon v0.14 - Code generation and implicit dependencies",authors:["milesj"],tags:["generator","project-graph","ci"]},prevItem:{title:"moon v0.15 - Enhanced Docker support and 1,000 stars!",permalink:"/blog/v0.15"},nextItem:{title:"moon v0.13 - Hashing and toolchain improvements",permalink:"/blog/v0.13"}},s={authorsImageUrls:[void 0]},c=[{value:"New <code>moon generate</code> command",id:"new-moon-generate-command",level:2},{value:"Implicit dependency scanning",id:"implicit-dependency-scanning",level:2},{value:"Report CI runs on pull requests",id:"report-ci-runs-on-pull-requests",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],m={toc:c};function d(e){let{components:t,...i}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've landed some new features that have been requested multiple times since\nlaunch. A code generation and template scaffolding layer, as well as implicit dependency scanning\nfor the project graph!"),(0,r.kt)("h2",{id:"new-moon-generate-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon generate")," command"),(0,r.kt)("p",null,"Code generation is the staple of any large company or repository. Want to spin up a new application?\nWhat about an npm package? Or maybe third-party integrations? Avoid copy-and-pasting existing code,\nand instead generate it with the new ",(0,r.kt)("inlineCode",{parentName:"p"},"moon generate")," command, which is powered by our new generator\nsystem."),(0,r.kt)("p",null,'The generator will locate a template by name on the file system ("npm-package" in the example\nbelow), prompt and interpolate variables, render the files with ',(0,r.kt)("a",{parentName:"p",href:"https://tera.netlify.app/"},"Tera")," (a\nRust based template engine), and write the files to the target destination."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Generate code from a template to a target directory\n$ moon generate npm-package ./packages/example\n")),(0,r.kt)("p",null,"Learn more about ",(0,r.kt)("a",{parentName:"p",href:"../docs/guides/codegen"},"code generation in the official guide"),"!"),(0,r.kt)("h2",{id:"implicit-dependency-scanning"},"Implicit dependency scanning"),(0,r.kt)("p",null,"This has been a request since moon's official release, and it's finally here! Up until now, if you\nwanted project-to-project dependency relationships, you had to explicitly declare them with\n",(0,r.kt)("a",{parentName:"p",href:"../docs/config/project#dependson"},(0,r.kt)("inlineCode",{parentName:"a"},"dependsOn")),". But thanks to a\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/288"},"ton of"),"\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/249"},"infrastructure")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/pull/277"},"platform")," changes, we can now infer implicit\ndependencies automatically!"),(0,r.kt)("p",null,"We still suggest using explicit dependencies, as it provides more\n",(0,r.kt)("a",{parentName:"p",href:"../docs/concepts/project#dependencies"},"automation like project syncing"),", but implicit is great for\nadoption and migration purposes."),(0,r.kt)("h2",{id:"report-ci-runs-on-pull-requests"},"Report CI runs on pull requests"),(0,r.kt)("p",null,"We're fans of continuous and easily accessible feedback, and as such, have released a new GitHub\naction, ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/marketplace/actions/moon-ci-run-reports"},(0,r.kt)("inlineCode",{parentName:"a"},"moonrepo/run-report-action")),",\nwhich reports the results of ",(0,r.kt)("a",{parentName:"p",href:"../docs/commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci"))," as a pull request comment. The report\nlooks something like the following:"),(0,r.kt)(o.Z,{src:n(53432),width:"60%",mdxType:"Image"}),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.14.0"},"official release")," for a\nfull list of changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"When running in a Docker container, caching is disabled in an effort to greatly reduce the size of\nthe image."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},"moon setup")," to also install Node.js dependencies.")),(0,r.kt)("h2",{id:"whats-next"},"What's next?"),(0,r.kt)("p",null,"Expect the following in the v0.15 release!"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Major Docker workflow improvements!"),(0,r.kt)("li",{parentName:"ul"},"Frontmatter configuration within template files.")))}d.isMDXComponent=!0},53432:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});const a=n.p+"assets/images/run-report-41cffa17cd530ab8cca5cef47b38dcfd.png"}}]); \ No newline at end of file diff --git a/assets/js/e8700426.249ad59c.js b/assets/js/e8700426.249ad59c.js deleted file mode 100644 index 484fb337770..00000000000 --- a/assets/js/e8700426.249ad59c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9902],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>c});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=p(n),c=r,g=d["".concat(s,".").concat(c)]||d[c]||u[c]||a;return n?o.createElement(g,l(l({ref:t},m),{},{components:n})):o.createElement(g,l({ref:t},m))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:a,align:l="center",padding:i="1rem"}=e;return o.createElement("div",{style:{marginBottom:i,marginTop:i,textAlign:l}},o.createElement("img",{src:t.default,width:n,alt:r,title:a,className:"inline-block"}))}},28771:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var o=n(25773),r=(n(27378),n(35318)),a=n(76911),l=n(88109);const i={slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},s=void 0,p={permalink:"/blog/proto-v0.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx",source:"@site/blog/2023-04-13_proto-v0.6.mdx",title:"proto v0.6 - Unused cleaning and improved global binaries",description:"With this release, we're expanding on our global binary support and providing quality of life",date:"2023-04-13T00:00:00.000Z",formattedDate:"April 13, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"globals",permalink:"/blog/tags/globals"},{label:"clean",permalink:"/blog/tags/clean"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},prevItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"},nextItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"}},m={image:n(32488).Z,authorsImageUrls:[void 0]},u=[{value:"RFC: Plugins system",id:"rfc-plugins-system",level:2},{value:"Cleaning stale and unused tools",id:"cleaning-stale-and-unused-tools",level:2},{value:"Global binary improvements",id:"global-binary-improvements",level:2},{value:"Better error messages",id:"better-error-messages",level:2}],d={toc:u};function c(e){let{components:t,...i}=e;return(0,r.kt)("wrapper",(0,o.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're expanding on our global binary support and providing quality of life\nimprovements."),(0,r.kt)("h2",{id:"rfc-plugins-system"},"RFC: Plugins system"),(0,r.kt)("p",null,"Since proto's inception, plugins have been top of mind, but runtime based plugins in Rust are\n",(0,r.kt)("em",{parentName:"p"},"difficult"),". The only viable solution to this problem is WASM, but most developers have never used\nWASM before, nor are they familiar with WASM tooling (myself included)."),(0,r.kt)("p",null,"However, we're at a point in proto's life-cycle where the core is rather stable, and it's time to\nstart investigating plugin support. To this end, we've introduced a small RFC outlining how plugins\nwill be used, enabled, and implemented. It's not very in-depth as we want to avoid implementation\ndetails, but from a consumers perspective, we want to ensure that it makes sense."),(0,r.kt)("p",null,"We'd very much appreciate it if you could take a look at the RFC and provide feedback. If you have\nany experience in Rust runtime plugins, we'd love to hear your thoughts as well."),(0,r.kt)("div",{class:"flex justify-center"},(0,r.kt)(a.Z,{label:"View RFC",href:"https://github.com/moonrepo/proto/issues/73",size:"lg",mdxType:"Button"})),(0,r.kt)("h2",{id:"cleaning-stale-and-unused-tools"},"Cleaning stale and unused tools"),(0,r.kt)("p",null,"Is your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto")," installation growing out of control? Are there old versions of tools that you\ndon't use anymore? Or versions you never used? Unsure if you're using a tool at all or still need\nit?"),(0,r.kt)("p",null,"To help avoid these questions and problems, we're introducing a new command that will uninstall\nstale and unused tools, ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/clean"},(0,r.kt)("inlineCode",{parentName:"a"},"proto clean")),". When ran, the command will\nlaunch an interactive session and scan the file system for old tools, prompting you to remove them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto clean\n")),(0,r.kt)("p",null,"By default the command will uninstall tools that haven't been used in over 30 days, but this can be\ncustomized with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--days")," option."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Tools installed before v0.6 will most likely be considered stale, as we weren't tracking install and\nlast used timestamps. However, everything will work as intended after running a tool or simply\nmoving forward from this point.")),(0,r.kt)("h2",{id:"global-binary-improvements"},"Global binary improvements"),(0,r.kt)("p",null,"In our ",(0,r.kt)("a",{parentName:"p",href:"./proto-v0.5"},"previous release"),", we announced the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/install-global"},(0,r.kt)("inlineCode",{parentName:"a"},"proto install-global"))," command for installing global\ndependencies that are unique per tool. Thanks to the community, this command has been updated to\nsupport installing multiple globals at once!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install-global node typescript webpack-cli\n")),(0,r.kt)("p",null,"On top of this, we're also introducing another command that was requested by the community,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/list-global"},(0,r.kt)("inlineCode",{parentName:"a"},"proto list-global")),", that can be used to list all currently\ninstalled globals."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto list-global node\ntsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc\ntsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver\n")),(0,r.kt)("h2",{id:"better-error-messages"},"Better error messages"),(0,r.kt)("p",null,"We've spent most of the past week working on a new internal architecture called\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/starbase"},"Starbase"),", which will be the new foundation for proto and\nmoon moving forward. One of the major benefits of this new architecture is a rewritten error system\nthat provides more context and better error messages."),(0,r.kt)("p",null,"Here's an example of this, albeit with a contrived situation:"),(0,r.kt)(l.Z,{src:n(99296),width:"90%",mdxType:"Image"}))}c.isMDXComponent=!0},99296:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/v0.6-errors-429f778ecbebbe5bdab9fb9328490928.png"},32488:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.6-54cd6a41ee17e956623325a956645c66.png"}}]); \ No newline at end of file diff --git a/assets/js/e8700426.60166484.js b/assets/js/e8700426.60166484.js new file mode 100644 index 00000000000..8ff0d3d45e2 --- /dev/null +++ b/assets/js/e8700426.60166484.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19902],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>c});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=p(n),c=r,g=d["".concat(s,".").concat(c)]||d[c]||u[c]||a;return n?o.createElement(g,l(l({ref:t},m),{},{components:n})):o.createElement(g,l({ref:t},m))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(27378);function r(e){let{src:t,width:n="90%",alt:r="",title:a,align:l="center",padding:i="1rem"}=e;return o.createElement("div",{style:{marginBottom:i,marginTop:i,textAlign:l}},o.createElement("img",{src:t.default,width:n,alt:r,title:a,className:"inline-block"}))}},28771:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var o=n(25773),r=(n(27378),n(35318)),a=n(76911),l=n(88109);const i={slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},s=void 0,p={permalink:"/blog/proto-v0.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx",source:"@site/blog/2023-04-13_proto-v0.6.mdx",title:"proto v0.6 - Unused cleaning and improved global binaries",description:"With this release, we're expanding on our global binary support and providing quality of life",date:"2023-04-13T00:00:00.000Z",formattedDate:"April 13, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"globals",permalink:"/blog/tags/globals"},{label:"clean",permalink:"/blog/tags/clean"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.42,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.6",title:"proto v0.6 - Unused cleaning and improved global binaries",authors:["milesj"],tags:["proto","globals","clean","errors"],image:"./img/proto/v0.6.png"},prevItem:{title:"moon v1.2 - Tag based task inheritance",permalink:"/blog/moon-v1.2"},nextItem:{title:"proto v0.5 - Version aliasing and global binaries",permalink:"/blog/proto-v0.5"}},m={image:n(32488).Z,authorsImageUrls:[void 0]},u=[{value:"RFC: Plugins system",id:"rfc-plugins-system",level:2},{value:"Cleaning stale and unused tools",id:"cleaning-stale-and-unused-tools",level:2},{value:"Global binary improvements",id:"global-binary-improvements",level:2},{value:"Better error messages",id:"better-error-messages",level:2}],d={toc:u};function c(e){let{components:t,...i}=e;return(0,r.kt)("wrapper",(0,o.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we're expanding on our global binary support and providing quality of life\nimprovements."),(0,r.kt)("h2",{id:"rfc-plugins-system"},"RFC: Plugins system"),(0,r.kt)("p",null,"Since proto's inception, plugins have been top of mind, but runtime based plugins in Rust are\n",(0,r.kt)("em",{parentName:"p"},"difficult"),". The only viable solution to this problem is WASM, but most developers have never used\nWASM before, nor are they familiar with WASM tooling (myself included)."),(0,r.kt)("p",null,"However, we're at a point in proto's life-cycle where the core is rather stable, and it's time to\nstart investigating plugin support. To this end, we've introduced a small RFC outlining how plugins\nwill be used, enabled, and implemented. It's not very in-depth as we want to avoid implementation\ndetails, but from a consumers perspective, we want to ensure that it makes sense."),(0,r.kt)("p",null,"We'd very much appreciate it if you could take a look at the RFC and provide feedback. If you have\nany experience in Rust runtime plugins, we'd love to hear your thoughts as well."),(0,r.kt)("div",{class:"flex justify-center"},(0,r.kt)(a.Z,{label:"View RFC",href:"https://github.com/moonrepo/proto/issues/73",size:"lg",mdxType:"Button"})),(0,r.kt)("h2",{id:"cleaning-stale-and-unused-tools"},"Cleaning stale and unused tools"),(0,r.kt)("p",null,"Is your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.proto")," installation growing out of control? Are there old versions of tools that you\ndon't use anymore? Or versions you never used? Unsure if you're using a tool at all or still need\nit?"),(0,r.kt)("p",null,"To help avoid these questions and problems, we're introducing a new command that will uninstall\nstale and unused tools, ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/clean"},(0,r.kt)("inlineCode",{parentName:"a"},"proto clean")),". When ran, the command will\nlaunch an interactive session and scan the file system for old tools, prompting you to remove them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto clean\n")),(0,r.kt)("p",null,"By default the command will uninstall tools that haven't been used in over 30 days, but this can be\ncustomized with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--days")," option."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Tools installed before v0.6 will most likely be considered stale, as we weren't tracking install and\nlast used timestamps. However, everything will work as intended after running a tool or simply\nmoving forward from this point.")),(0,r.kt)("h2",{id:"global-binary-improvements"},"Global binary improvements"),(0,r.kt)("p",null,"In our ",(0,r.kt)("a",{parentName:"p",href:"./proto-v0.5"},"previous release"),", we announced the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/install-global"},(0,r.kt)("inlineCode",{parentName:"a"},"proto install-global"))," command for installing global\ndependencies that are unique per tool. Thanks to the community, this command has been updated to\nsupport installing multiple globals at once!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto install-global node typescript webpack-cli\n")),(0,r.kt)("p",null,"On top of this, we're also introducing another command that was requested by the community,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/list-global"},(0,r.kt)("inlineCode",{parentName:"a"},"proto list-global")),", that can be used to list all currently\ninstalled globals."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto list-global node\ntsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc\ntsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver\n")),(0,r.kt)("h2",{id:"better-error-messages"},"Better error messages"),(0,r.kt)("p",null,"We've spent most of the past week working on a new internal architecture called\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/starbase"},"Starbase"),", which will be the new foundation for proto and\nmoon moving forward. One of the major benefits of this new architecture is a rewritten error system\nthat provides more context and better error messages."),(0,r.kt)("p",null,"Here's an example of this, albeit with a contrived situation:"),(0,r.kt)(l.Z,{src:n(99296),width:"90%",mdxType:"Image"}))}c.isMDXComponent=!0},99296:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/v0.6-errors-429f778ecbebbe5bdab9fb9328490928.png"},32488:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.6-54cd6a41ee17e956623325a956645c66.png"}}]); \ No newline at end of file diff --git a/assets/js/e898b7f3.1a8819b4.js b/assets/js/e898b7f3.1a8819b4.js deleted file mode 100644 index c33dca84750..00000000000 --- a/assets/js/e898b7f3.1a8819b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7584],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=a.createContext({}),s=function(e){var t=a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(n),d=r,f=m["".concat(u,".").concat(d)]||m[d]||p[d]||l;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var s=2;s<l;s++)o[s]=n[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),u=n(76457);const s="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:u,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=s[n].value;a!==i&&(m(t),u(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",s)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,u.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function u(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function s(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??u(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=s(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=p({queryString:n,groupId:r}),[f,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),g=(()=>{const e=m??f;return c({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{g&&u(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),v(e)}),[d,v,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function u(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function s(e){let t=i(e,!1,!0),n=u(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=u(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function u(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},81935:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>f,frontMatter:()=>u,metadata:()=>c,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=n(27457),i=n(32189);const u={title:"Vite & Vitest example",sidebar_label:"Vite & Vitest"},s=void 0,c={unversionedId:"guides/examples/vite",id:"guides/examples/vite",title:"Vite & Vitest example",description:"In this guide, you'll learn how to integrate Vite and",source:"@site/docs/guides/examples/vite.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/vite",permalink:"/docs/guides/examples/vite",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/vite.mdx",tags:[],version:"current",frontMatter:{title:"Vite & Vitest example",sidebar_label:"Vite & Vitest"},sidebar:"guides",previous:{title:"TypeScript",permalink:"/docs/guides/examples/typescript"},next:{title:"Vue",permalink:"/docs/guides/examples/vue"}},p={},m=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],d={toc:m};function f(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/vue-vite-app",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://vitejs.dev/"},"Vite")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://vitest.dev/"},"Vitest")," into moon."),(0,r.kt)("p",null,"Begin by creating a new Vite project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)(o.Z,{dep:"vite",mdxType:"CreateDepTabs"}),(0,r.kt)("p",null,"If you plan on using Vitest, run the following command to add the ",(0,r.kt)("inlineCode",{parentName:"p"},"vitest")," dependency to a project,\notherwise skip to the setup section."),(0,r.kt)(l.Z,{dep:"vitest",package:"<project>",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Vite is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Vite tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/vite"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"# Inherit tasks from the `vite` and `vitest` presets\n# https://github.com/moonrepo/moon-configs\ntags: ['vite', 'vitest']\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Vite should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"vite")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Vite project, a ",(0,r.kt)("a",{parentName:"p",href:"https://vitejs.dev/config"},(0,r.kt)("inlineCode",{parentName:"a"},"vite.config.<js|ts>"))," is created,\nand ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/vite.config.js"',title:'"<project>/vite.config.js"'},"import { defineConfig } from 'vite';\n\nexport default defineConfig({\n // ...\n build: {\n // These must be `outputs` in the `build` task\n outDir: 'dist',\n },\n test: {\n // Vitest settings\n },\n});\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"If you'd prefer to configure Vitest in a\n",(0,r.kt)("a",{parentName:"p",href:"https://vitest.dev/guide/#configuring-vitest"},"separate configuration file"),", create a\n",(0,r.kt)("inlineCode",{parentName:"p"},"vitest.config.<js|ts>")," file.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e898b7f3.ba1ad1ed.js b/assets/js/e898b7f3.ba1ad1ed.js new file mode 100644 index 00000000000..a8c26758774 --- /dev/null +++ b/assets/js/e898b7f3.ba1ad1ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87584],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=a.createContext({}),s=function(e){var t=a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(n),d=r,f=m["".concat(u,".").concat(d)]||m[d]||p[d]||l;return n?a.createElement(f,o(o({ref:t},c),{},{components:n})):a.createElement(f,o({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var s=2;s<l;s++)o[s]=n[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),u=n(76457);const s="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:u,tabValues:s}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=s[n].value;a!==i&&(m(t),u(a))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},o,{className:(0,l.Z)("tabs__item",c,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function d(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",s)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(m,(0,a.Z)({},e,t)))}function f(e){const t=(0,u.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function u(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function s(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??u(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=s(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[m,d]=p({queryString:n,groupId:r}),[f,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),g=(()=>{const e=m??f;return c({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{g&&u(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),v(e)}),[d,v,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function u(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function s(e){let t=i(e,!1,!0),n=u(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=u(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function u(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},81935:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>f,frontMatter:()=>u,metadata:()=>c,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=n(27457),i=n(32189);const u={title:"Vite & Vitest example",sidebar_label:"Vite & Vitest"},s=void 0,c={unversionedId:"guides/examples/vite",id:"guides/examples/vite",title:"Vite & Vitest example",description:"In this guide, you'll learn how to integrate Vite and",source:"@site/docs/guides/examples/vite.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/vite",permalink:"/docs/guides/examples/vite",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/vite.mdx",tags:[],version:"current",frontMatter:{title:"Vite & Vitest example",sidebar_label:"Vite & Vitest"},sidebar:"guides",previous:{title:"TypeScript",permalink:"/docs/guides/examples/typescript"},next:{title:"Vue",permalink:"/docs/guides/examples/vue"}},p={},m=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],d={toc:m};function f(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/vue-vite-app",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://vitejs.dev/"},"Vite")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://vitest.dev/"},"Vitest")," into moon."),(0,r.kt)("p",null,"Begin by creating a new Vite project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)(o.Z,{dep:"vite",mdxType:"CreateDepTabs"}),(0,r.kt)("p",null,"If you plan on using Vitest, run the following command to add the ",(0,r.kt)("inlineCode",{parentName:"p"},"vitest")," dependency to a project,\notherwise skip to the setup section."),(0,r.kt)(l.Z,{dep:"vitest",package:"<project>",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Vite is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"We suggest inheriting Vite tasks from the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs/tree/master/javascript/vite"},"official moon configuration preset"),".")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"# Inherit tasks from the `vite` and `vitest` presets\n# https://github.com/moonrepo/moon-configs\ntags: ['vite', 'vitest']\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Vite should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"vite")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Vite project, a ",(0,r.kt)("a",{parentName:"p",href:"https://vitejs.dev/config"},(0,r.kt)("inlineCode",{parentName:"a"},"vite.config.<js|ts>"))," is created,\nand ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/vite.config.js"',title:'"<project>/vite.config.js"'},"import { defineConfig } from 'vite';\n\nexport default defineConfig({\n // ...\n build: {\n // These must be `outputs` in the `build` task\n outDir: 'dist',\n },\n test: {\n // Vitest settings\n },\n});\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"If you'd prefer to configure Vitest in a\n",(0,r.kt)("a",{parentName:"p",href:"https://vitest.dev/guide/#configuring-vitest"},"separate configuration file"),", create a\n",(0,r.kt)("inlineCode",{parentName:"p"},"vitest.config.<js|ts>")," file.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e8d2c25f.49cabd06.js b/assets/js/e8d2c25f.49cabd06.js deleted file mode 100644 index 4f6a5cd2899..00000000000 --- a/assets/js/e8d2c25f.49cabd06.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3171],{28766:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":21}')}}]); \ No newline at end of file diff --git a/assets/js/e8d2c25f.a8a261eb.js b/assets/js/e8d2c25f.a8a261eb.js new file mode 100644 index 00000000000..f47da96f505 --- /dev/null +++ b/assets/js/e8d2c25f.a8a261eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43171],{28766:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":22}')}}]); \ No newline at end of file diff --git a/assets/js/e8f62c55.008e6065.js b/assets/js/e8f62c55.008e6065.js new file mode 100644 index 00000000000..4b995bf12f6 --- /dev/null +++ b/assets/js/e8f62c55.008e6065.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47789],{39311:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/inheritance","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/e8f62c55.fb855fed.js b/assets/js/e8f62c55.fb855fed.js deleted file mode 100644 index 9731171824d..00000000000 --- a/assets/js/e8f62c55.fb855fed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7789],{39311:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/inheritance","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ea313555.96fcc5b8.js b/assets/js/ea313555.96fcc5b8.js new file mode 100644 index 00000000000..073c04eb3a3 --- /dev/null +++ b/assets/js/ea313555.96fcc5b8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77937],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,h=u["".concat(l,".").concat(d)]||u[d]||c[d]||i;return n?a.createElement(h,r(r({ref:t},m),{},{components:n})):a.createElement(h,r({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},49511:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const i={title:"FAQ"},r=void 0,s={unversionedId:"faq",id:"faq",title:"FAQ",description:"General",source:"@site/docs/faq.mdx",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/faq.mdx",tags:[],version:"current",frontMatter:{title:"FAQ"},sidebar:"docs",previous:{title:"Terminology",permalink:"/docs/terminology"}},l={},p=[{value:"General",id:"general",level:2},{value:"Where did the name "moon" come from?",id:"where-did-the-name-moon-come-from",level:3},{value:"Will moon support other languages?",id:"will-moon-support-other-languages",level:3},{value:"Will moon support continuous deployment?",id:"will-moon-support-continuous-deployment",level:3},{value:"What should be considered the "source of truth"?",id:"what-should-be-considered-the-source-of-truth",level:3},{value:"How to stop moon formatting JSON and YAML files?",id:"how-to-stop-moon-formatting-json-and-yaml-files",level:3},{value:"Projects & tasks",id:"projects--tasks",level:2},{value:"How to pipe or redirect tasks?",id:"how-to-pipe-or-redirect-tasks",level:3},{value:"How to run multiple commands within a task?",id:"how-to-run-multiple-commands-within-a-task",level:3},{value:"How to run tasks in a shell?",id:"how-to-run-tasks-in-a-shell",level:3},{value:"Can we run other languages?",id:"can-we-run-other-languages",level:3},{value:"JavaScript ecosystem",id:"javascript-ecosystem",level:2},{value:"Can we use <code>package.json</code> scripts?",id:"can-we-use-packagejson-scripts",level:3},{value:"Can moon version/publish packages?",id:"can-moon-versionpublish-packages",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"How to resolve the "version 'GLIBC_X.XX' not found" error?",id:"how-to-resolve-the-version-glibc_xxx-not-found-error",level:3}],m={toc:p};function c(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"general"},"General"),(0,o.kt)("h3",{id:"where-did-the-name-moon-come-from"},'Where did the name "moon" come from?'),(0,o.kt)("p",null,"The first incarnation of the name was a misspelling of monorepo (= moonrepo). This is where the\ndomain moonrepo.dev came from, and our official company, moonrepo, Inc."),(0,o.kt)("p",null,"However, moonrepo is quite a long name with many syllables, and as someone who prefers short 1\nsyllable words, moon was perfect. The word moon also has great symmetry, as you can see in our logo!"),(0,o.kt)("p",null,"But that's not all... moon is also an acronym. It originally stood for ",(0,o.kt)("strong",{parentName:"p"},"m"),"onorepo,\n",(0,o.kt)("strong",{parentName:"p"},"o"),"rganization, ",(0,o.kt)("strong",{parentName:"p"},"o"),"rchestration, and ",(0,o.kt)("strong",{parentName:"p"},"n"),"otification tool. But since moon can also be used for\npolyrepos, we replaced monorepo with ",(0,o.kt)("strong",{parentName:"p"},"m"),"anagement (as shown on the homepage). This is a great\nacronym, as it embraces what moon is trying to solve:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"M"),"anage repos, projects, and tasks with ease."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"O"),"rganize projects and the repo to scale."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"O"),"rchestrate tasks as efficiently as possible."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"N"),"otify developers and systems about important events.")),(0,o.kt)("h3",{id:"will-moon-support-other-languages"},"Will moon support other languages?"),(0,o.kt)("p",null,"Yes! Although we're focusing right now on the web ecosystem (Node.js, Rust, Go, PHP, Python, etc),\nwe've designed moon to be language agnostic and easily pluggable in the future. View our\n",(0,o.kt)("a",{parentName:"p",href:"/docs#supported-languages"},"supported languages for more information"),"."),(0,o.kt)("h3",{id:"will-moon-support-continuous-deployment"},"Will moon support continuous deployment?"),(0,o.kt)("p",null,"Yes! We plan to integrate CD with the current build and CI system, but we are focusing on the latter\n2 for the time being. Why not start using moon today so that you can easily adopt CD when it's\nready?"),(0,o.kt)("h3",{id:"what-should-be-considered-the-source-of-truth"},'What should be considered the "source of truth"?'),(0,o.kt)("p",null,"If you're a frontend developer, you'll assume that a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," is the source of truth for a\nproject, as it defines scripts, dependencies, and repo-local relations. While true, this breaks down\nwith additional tooling, like TypeScript project references, as now you must maintain\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," as well as ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". The risk of these falling out of sync is high."),(0,o.kt)("p",null,"This problem is further exacerbated by more tooling, or additional programming languages. What if\nyour frontend project is dependent on a backend project? This isn't easily modeled in\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". What if the backend project needs to be built and ran before running the frontend\nproject? Again, while not impossible, it's quite cumbersome to model in ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts. So\non and so forth."),(0,o.kt)("p",null,"moon aims to solve this with a different approach, by standardizing all projects in the workspace on\n",(0,o.kt)("a",{parentName:"p",href:"./config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),". With this, the ",(0,o.kt)("inlineCode",{parentName:"p"},"moon.yml")," is the source of truth for each project,\nand provides us with the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The configuration is language agnostic. All projects are configured in a similar manner."),(0,o.kt)("li",{parentName:"ul"},"Tasks can reference other tasks easily. For example, npm scripts referencing rake tasks, and vice\nverse, is a non-ideal experience."),(0,o.kt)("li",{parentName:"ul"},"Dependencies defined with ",(0,o.kt)("a",{parentName:"li",href:"./config/project#dependson"},(0,o.kt)("inlineCode",{parentName:"a"},"dependsOn"))," use moon project names, and\nnot language specific semantics. This field also easily populates the dependency/project graphs."),(0,o.kt)("li",{parentName:"ul"},"For JavaScript projects:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," dependencies (via ",(0,o.kt)("inlineCode",{parentName:"li"},"dependsOn"),") are kept in sync when\n",(0,o.kt)("a",{parentName:"li",href:"./config/toolchain#syncprojectworkspacedependencies"},(0,o.kt)("inlineCode",{parentName:"a"},"node.syncProjectWorkspaceDependencies")),"\nis enabled."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," project references (via ",(0,o.kt)("inlineCode",{parentName:"li"},"dependsOn"),") are kept in sync when\n",(0,o.kt)("a",{parentName:"li",href:"./config/toolchain#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," is enabled.")))),(0,o.kt)("p",null,"By using moon as the source of truth, we can ensure a healthy repository, by accurately keeping\neverything in sync, and modifying project/language configuration to operate effectively."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"With all that being said, moon supports\n",(0,o.kt)("a",{parentName:"p",href:"./concepts/project#dependencies"},"implicit dependency scanning"),", if you'd prefer to continue\nutilizing language specific functionality, instead of migrating entirely to moon.")),(0,o.kt)("h3",{id:"how-to-stop-moon-formatting-json-and-yaml-files"},"How to stop moon formatting JSON and YAML files?"),(0,o.kt)("p",null,"To ensure a healthy repository state, moon constantly modifies JSON and YAML files, specifically\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),". This may result in a different formatting style in regards to\nindentation. While there is no way to stop or turn off this functionality, we respect\n",(0,o.kt)("a",{parentName:"p",href:"https://editorconfig.org/"},"EditorConfig")," during this process."),(0,o.kt)("p",null,"Create a root ",(0,o.kt)("inlineCode",{parentName:"p"},".editorconfig")," file to enforce a consistent syntax."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini",metastring:'title=".editorconfig"',title:'".editorconfig"'},"[*.{json,yaml,yml}]\nindent_style = space\nindent_size = 4\n")),(0,o.kt)("h2",{id:"projects--tasks"},"Projects & tasks"),(0,o.kt)("h3",{id:"how-to-pipe-or-redirect-tasks"},"How to pipe or redirect tasks?"),(0,o.kt)("p",null,"Piping (",(0,o.kt)("inlineCode",{parentName:"p"},"|"),") or redirecting (",(0,o.kt)("inlineCode",{parentName:"p"},">"),") the output of a task (maybe to another task), whether via stdin or\nthrough ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs"),", is currently not possible. However, you ",(0,o.kt)("em",{parentName:"p"},"could")," execute a custom bash script that\nhandles this for you, for example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="scripts/pipe.sh"',title:'"scripts/pipe.sh"'},"#!/usr/bin/env bash\nmoon project foo --json | jq ...\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n pipe:\n command: 'bash ./scripts/pipe.sh'\n platform: 'system'\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Be careful when using this approach, as it may not be portable across operating systems, nor will it\nutilize the toolchain. For example, if your Bash script uses ",(0,o.kt)("inlineCode",{parentName:"p"},"node"),", this will be the binary found\non your machine, and ",(0,o.kt)("em",{parentName:"p"},"not")," the one in moon's toolchain. ",(0,o.kt)("a",{parentName:"p",href:"/proto"},"proto")," helps to solve this, but\nit's not a perfect solution.")),(0,o.kt)("h3",{id:"how-to-run-multiple-commands-within-a-task"},"How to run multiple commands within a task?"),(0,o.kt)("p",null,"Only system tasks can run multiple commands via ",(0,o.kt)("inlineCode",{parentName:"p"},"&&")," or ",(0,o.kt)("inlineCode",{parentName:"p"},";")," syntax. This is possible as we execute\nthese commands within a shell, and not directly with the toolchain."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n multiple:\n command: 'mkdir test && cd test'\n platform: 'system'\n")),(0,o.kt)("p",null,"Non system-tasks cannot run multiple commands for the following reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"A task in moon is a represented as a single command, with its own arguments, inputs, outputs, and\nmore. This isolation is required for ",(0,o.kt)("a",{parentName:"li",href:"./concepts/task-inheritance"},"task inheritance")," to work\ncorrectly. For example, if you had multiple commands in a task and were using inheritance, where\nshould arguments be appended?"),(0,o.kt)("li",{parentName:"ul"},"If using the ",(0,o.kt)("a",{parentName:"li",href:"./concepts/toolchain"},"integrated toolchain"),", we cannot easily statically analyze the\ncommand string to determine where the binary is located. For example, given the multi-command\n",(0,o.kt)("inlineCode",{parentName:"li"},"rm -rf ./dist && node ./build.js && tsc --build"),", moon has no knowledge of where to find these\nbinaries without considerable effort at runtime.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"rm")," can be assumed to exist on the system, but what if it's actually an npm package? This also\nisn't portable on Windows."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"node")," is straight forward enough. This is Node.js."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"tsc")," is what exactly? A node module? An npm global? A system command? moon has no idea, and\nsince we can't use Node.js's built-in module resolution, we need to locate it ourselves."))),(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("inlineCode",{parentName:"li"},"platform")," setting on each task easily solves these problems, but requires a single command\nper task to avoid unnecessary complexity.")),(0,o.kt)("p",null,"However, we do suggest the following alternatives:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Create a task for each command, and link them as dependencies with\n",(0,o.kt)("a",{parentName:"li",href:"./config/project#deps"},(0,o.kt)("inlineCode",{parentName:"a"},"deps")),". This allows for each command to be incrementally cached (when\nenabled)."),(0,o.kt)("li",{parentName:"ul"},"Create a task for each command, and run them concurrently with ",(0,o.kt)("a",{parentName:"li",href:"./commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run")),"."),(0,o.kt)("li",{parentName:"ul"},"Wrap all commands in an external file, and execute that file instead. Refer to the\n",(0,o.kt)("a",{parentName:"li",href:"#how-to-pipe-or-redirect-tasks"},"piping question")," above for an example."),(0,o.kt)("li",{parentName:"ul"},"Avoid using the toolchain and assume everything exists on ",(0,o.kt)("inlineCode",{parentName:"li"},"PATH"),".")),(0,o.kt)("h3",{id:"how-to-run-tasks-in-a-shell"},"How to run tasks in a shell?"),(0,o.kt)("p",null,"By default, all non-system tasks ",(0,o.kt)("em",{parentName:"p"},"will not")," run in a shell, as we interact with and execute a tool's\nbinary directly within the toolchain. We also provide no built-in support for wrapping language\nbased tasks within a shell, and have no plans to support this as it makes tasks less deterministic."),(0,o.kt)("p",null,"However, system based tasks do support shells, and will run in a shell based on the task's\n",(0,o.kt)("a",{parentName:"p",href:"./config/project#shell"},(0,o.kt)("inlineCode",{parentName:"a"},"shell"))," option, as demonstrated below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n # Runs in a shell\n global:\n command: 'some-command-on-path'\n platform: 'system'\n\n # Custom shells\n unix:\n command: 'bash -c some-command'\n platform: 'system'\n options:\n shell: false\n windows:\n command: 'pwsh.exe -c some-command'\n platform: 'system'\n options:\n shell: false\n")),(0,o.kt)("h3",{id:"can-we-run-other-languages"},"Can we run other languages?"),(0,o.kt)("p",null,"Yes! Although our toolchain only supports a few languages at this time, you can still run other\nlanguages within tasks by setting their ",(0,o.kt)("a",{parentName:"p",href:"./config/project#platform-1"},(0,o.kt)("inlineCode",{parentName:"a"},"platform")),' to "system".\nSystem tasks are an escape hatch that will use any command available on the current machine.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n # Ruby\n lint:\n command: 'rubocop'\n platform: 'system'\n # PHP\n test:\n command: 'phpunit tests'\n platform: 'system'\n")),(0,o.kt)("p",null,"However, because these languages are not supported directly within our toolchain, they will not\nreceive the benefits of the toolchain. Some of which are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Automatic installation of the language. System tasks expect the command to already exist in the\nenvironment, which requires the user to manually install them."),(0,o.kt)("li",{parentName:"ul"},"Consistent language and dependency manager versions across all machines."),(0,o.kt)("li",{parentName:"ul"},"Built-in cpu and heap profiling (language specific)."),(0,o.kt)("li",{parentName:"ul"},"Automatic dependency installs when the lockfile changes."),(0,o.kt)("li",{parentName:"ul"},"And many more.")),(0,o.kt)("h2",{id:"javascript-ecosystem"},"JavaScript ecosystem"),(0,o.kt)("h3",{id:"can-we-use-packagejson-scripts"},"Can we use ",(0,o.kt)("inlineCode",{parentName:"h3"},"package.json")," scripts?"),(0,o.kt)("p",null,"We encourage everyone to define tasks in a ",(0,o.kt)("a",{parentName:"p",href:"./config/project#tasks"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file, as it allows\nfor additional metadata like ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"options"),", and more. However, if you'd like to\nkeep using ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, enable the\n",(0,o.kt)("a",{parentName:"p",href:"./config/toolchain#infertasksfromscripts"},(0,o.kt)("inlineCode",{parentName:"a"},"node.inferTasksFromScripts"))," setting."),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"./migrate-to-moon"},"official documentation")," for more information on this approach,\nincluding risks, disadvantages, and caveats."),(0,o.kt)("h3",{id:"can-moon-versionpublish-packages"},"Can moon version/publish packages?"),(0,o.kt)("p",null,"At this time, no, as we're focusing on the build and test aspect of development. With that being\nsaid, this is something we'd like to support first-class in the future, but until then, we suggest\nthe following popular tools:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://yarnpkg.com/features/release-workflow"},"Yarn releases")," (requires >= v2)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/changesets/changesets"},"Changesets")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/lerna/lerna"},"Lerna"))),(0,o.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("h3",{id:"how-to-resolve-the-version-glibc_xxx-not-found-error"},"How to resolve the \"version 'GLIBC_X.XX' not found\" error?"),(0,o.kt)("p",null,"This is typically caused by running moon in an old environment, like Ubuntu 18, and the minimum\nrequired libc doesn't exist or is too old. Since moon is Rust based, we're unable to support all\nenvironments and versions perpetually, and will only support relatively modern environments."),(0,o.kt)("p",null,"There's not an easy fix to this problem, but there are a few potential solutions, from easiest to\nhardest:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Run moon in a Docker container/image that has the correct environment and libs. For example, the\n",(0,o.kt)("inlineCode",{parentName:"li"},"node:latest")," image."),(0,o.kt)("li",{parentName:"ul"},"Upgrade the enviroment to a newer one. For example, Ubuntu 18 -> 22."),(0,o.kt)("li",{parentName:"ul"},"Try and install a newer libc\n(",(0,o.kt)("a",{parentName:"li",href:"https://stackoverflow.com/questions/72513993/how-install-glibc-2-29-or-higher-in-ubuntu-18-04"},"more information"),").")),(0,o.kt)("p",null,"For more information on this problem as a whole,\n",(0,o.kt)("a",{parentName:"p",href:"https://kobzol.github.io/rust/ci/2021/05/07/building-rust-binaries-in-ci-that-work-with-older-glibc.html"},"refer to this in-depth article"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ea313555.ec4a624b.js b/assets/js/ea313555.ec4a624b.js deleted file mode 100644 index 6dc8d492586..00000000000 --- a/assets/js/ea313555.ec4a624b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7937],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,h=u["".concat(l,".").concat(d)]||u[d]||c[d]||i;return n?a.createElement(h,r(r({ref:t},m),{},{components:n})):a.createElement(h,r({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},49511:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const i={title:"FAQ"},r=void 0,s={unversionedId:"faq",id:"faq",title:"FAQ",description:"General",source:"@site/docs/faq.mdx",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/faq.mdx",tags:[],version:"current",frontMatter:{title:"FAQ"},sidebar:"docs",previous:{title:"Terminology",permalink:"/docs/terminology"}},l={},p=[{value:"General",id:"general",level:2},{value:"Where did the name "moon" come from?",id:"where-did-the-name-moon-come-from",level:3},{value:"Will moon support other languages?",id:"will-moon-support-other-languages",level:3},{value:"Will moon support continuous deployment?",id:"will-moon-support-continuous-deployment",level:3},{value:"What should be considered the "source of truth"?",id:"what-should-be-considered-the-source-of-truth",level:3},{value:"How to stop moon formatting JSON and YAML files?",id:"how-to-stop-moon-formatting-json-and-yaml-files",level:3},{value:"Projects & tasks",id:"projects--tasks",level:2},{value:"How to pipe or redirect tasks?",id:"how-to-pipe-or-redirect-tasks",level:3},{value:"How to run multiple commands within a task?",id:"how-to-run-multiple-commands-within-a-task",level:3},{value:"How to run tasks in a shell?",id:"how-to-run-tasks-in-a-shell",level:3},{value:"Can we run other languages?",id:"can-we-run-other-languages",level:3},{value:"JavaScript ecosystem",id:"javascript-ecosystem",level:2},{value:"Can we use <code>package.json</code> scripts?",id:"can-we-use-packagejson-scripts",level:3},{value:"Can moon version/publish packages?",id:"can-moon-versionpublish-packages",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"How to resolve the "version 'GLIBC_X.XX' not found" error?",id:"how-to-resolve-the-version-glibc_xxx-not-found-error",level:3}],m={toc:p};function c(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"general"},"General"),(0,o.kt)("h3",{id:"where-did-the-name-moon-come-from"},'Where did the name "moon" come from?'),(0,o.kt)("p",null,"The first incarnation of the name was a misspelling of monorepo (= moonrepo). This is where the\ndomain moonrepo.dev came from, and our official company, moonrepo, Inc."),(0,o.kt)("p",null,"However, moonrepo is quite a long name with many syllables, and as someone who prefers short 1\nsyllable words, moon was perfect. The word moon also has great symmetry, as you can see in our logo!"),(0,o.kt)("p",null,"But that's not all... moon is also an acronym. It originally stood for ",(0,o.kt)("strong",{parentName:"p"},"m"),"onorepo,\n",(0,o.kt)("strong",{parentName:"p"},"o"),"rganization, ",(0,o.kt)("strong",{parentName:"p"},"o"),"rchestration, and ",(0,o.kt)("strong",{parentName:"p"},"n"),"otification tool. But since moon can also be used for\npolyrepos, we replaced monorepo with ",(0,o.kt)("strong",{parentName:"p"},"m"),"anagement (as shown on the homepage). This is a great\nacronym, as it embraces what moon is trying to solve:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"M"),"anage repos, projects, and tasks with ease."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"O"),"rganize projects and the repo to scale."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"O"),"rchestrate tasks as efficiently as possible."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"N"),"otify developers and systems about important events.")),(0,o.kt)("h3",{id:"will-moon-support-other-languages"},"Will moon support other languages?"),(0,o.kt)("p",null,"Yes! Although we're focusing right now on the web ecosystem (Node.js, Rust, Go, PHP, Python, etc),\nwe've designed moon to be language agnostic and easily pluggable in the future. View our\n",(0,o.kt)("a",{parentName:"p",href:"/docs#supported-languages"},"supported languages for more information"),"."),(0,o.kt)("h3",{id:"will-moon-support-continuous-deployment"},"Will moon support continuous deployment?"),(0,o.kt)("p",null,"Yes! We plan to integrate CD with the current build and CI system, but we are focusing on the latter\n2 for the time being. Why not start using moon today so that you can easily adopt CD when it's\nready?"),(0,o.kt)("h3",{id:"what-should-be-considered-the-source-of-truth"},'What should be considered the "source of truth"?'),(0,o.kt)("p",null,"If you're a frontend developer, you'll assume that a ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," is the source of truth for a\nproject, as it defines scripts, dependencies, and repo-local relations. While true, this breaks down\nwith additional tooling, like TypeScript project references, as now you must maintain\n",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," as well as ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". The risk of these falling out of sync is high."),(0,o.kt)("p",null,"This problem is further exacerbated by more tooling, or additional programming languages. What if\nyour frontend project is dependent on a backend project? This isn't easily modeled in\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json"),". What if the backend project needs to be built and ran before running the frontend\nproject? Again, while not impossible, it's quite cumbersome to model in ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts. So\non and so forth."),(0,o.kt)("p",null,"moon aims to solve this with a different approach, by standardizing all projects in the workspace on\n",(0,o.kt)("a",{parentName:"p",href:"./config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),". With this, the ",(0,o.kt)("inlineCode",{parentName:"p"},"moon.yml")," is the source of truth for each project,\nand provides us with the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The configuration is language agnostic. All projects are configured in a similar manner."),(0,o.kt)("li",{parentName:"ul"},"Tasks can reference other tasks easily. For example, npm scripts referencing rake tasks, and vice\nverse, is a non-ideal experience."),(0,o.kt)("li",{parentName:"ul"},"Dependencies defined with ",(0,o.kt)("a",{parentName:"li",href:"./config/project#dependson"},(0,o.kt)("inlineCode",{parentName:"a"},"dependsOn"))," use moon project names, and\nnot language specific semantics. This field also easily populates the dependency/project graphs."),(0,o.kt)("li",{parentName:"ul"},"For JavaScript projects:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"package.json")," dependencies (via ",(0,o.kt)("inlineCode",{parentName:"li"},"dependsOn"),") are kept in sync when\n",(0,o.kt)("a",{parentName:"li",href:"./config/toolchain#syncprojectworkspacedependencies"},(0,o.kt)("inlineCode",{parentName:"a"},"node.syncProjectWorkspaceDependencies")),"\nis enabled."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," project references (via ",(0,o.kt)("inlineCode",{parentName:"li"},"dependsOn"),") are kept in sync when\n",(0,o.kt)("a",{parentName:"li",href:"./config/toolchain#syncprojectreferences"},(0,o.kt)("inlineCode",{parentName:"a"},"typescript.syncProjectReferences"))," is enabled.")))),(0,o.kt)("p",null,"By using moon as the source of truth, we can ensure a healthy repository, by accurately keeping\neverything in sync, and modifying project/language configuration to operate effectively."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"With all that being said, moon supports\n",(0,o.kt)("a",{parentName:"p",href:"./concepts/project#dependencies"},"implicit dependency scanning"),", if you'd prefer to continue\nutilizing language specific functionality, instead of migrating entirely to moon.")),(0,o.kt)("h3",{id:"how-to-stop-moon-formatting-json-and-yaml-files"},"How to stop moon formatting JSON and YAML files?"),(0,o.kt)("p",null,"To ensure a healthy repository state, moon constantly modifies JSON and YAML files, specifically\n",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"tsconfig.json"),". This may result in a different formatting style in regards to\nindentation. While there is no way to stop or turn off this functionality, we respect\n",(0,o.kt)("a",{parentName:"p",href:"https://editorconfig.org/"},"EditorConfig")," during this process."),(0,o.kt)("p",null,"Create a root ",(0,o.kt)("inlineCode",{parentName:"p"},".editorconfig")," file to enforce a consistent syntax."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini",metastring:'title=".editorconfig"',title:'".editorconfig"'},"[*.{json,yaml,yml}]\nindent_style = space\nindent_size = 4\n")),(0,o.kt)("h2",{id:"projects--tasks"},"Projects & tasks"),(0,o.kt)("h3",{id:"how-to-pipe-or-redirect-tasks"},"How to pipe or redirect tasks?"),(0,o.kt)("p",null,"Piping (",(0,o.kt)("inlineCode",{parentName:"p"},"|"),") or redirecting (",(0,o.kt)("inlineCode",{parentName:"p"},">"),") the output of a task (maybe to another task), whether via stdin or\nthrough ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs"),", is currently not possible. However, you ",(0,o.kt)("em",{parentName:"p"},"could")," execute a custom bash script that\nhandles this for you, for example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="scripts/pipe.sh"',title:'"scripts/pipe.sh"'},"#!/usr/bin/env bash\nmoon project foo --json | jq ...\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n pipe:\n command: 'bash ./scripts/pipe.sh'\n platform: 'system'\n")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Be careful when using this approach, as it may not be portable across operating systems, nor will it\nutilize the toolchain. For example, if your Bash script uses ",(0,o.kt)("inlineCode",{parentName:"p"},"node"),", this will be the binary found\non your machine, and ",(0,o.kt)("em",{parentName:"p"},"not")," the one in moon's toolchain. ",(0,o.kt)("a",{parentName:"p",href:"/proto"},"proto")," helps to solve this, but\nit's not a perfect solution.")),(0,o.kt)("h3",{id:"how-to-run-multiple-commands-within-a-task"},"How to run multiple commands within a task?"),(0,o.kt)("p",null,"Only system tasks can run multiple commands via ",(0,o.kt)("inlineCode",{parentName:"p"},"&&")," or ",(0,o.kt)("inlineCode",{parentName:"p"},";")," syntax. This is possible as we execute\nthese commands within a shell, and not directly with the toolchain."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n multiple:\n command: 'mkdir test && cd test'\n platform: 'system'\n")),(0,o.kt)("p",null,"Non system-tasks cannot run multiple commands for the following reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"A task in moon is a represented as a single command, with its own arguments, inputs, outputs, and\nmore. This isolation is required for ",(0,o.kt)("a",{parentName:"li",href:"./concepts/task-inheritance"},"task inheritance")," to work\ncorrectly. For example, if you had multiple commands in a task and were using inheritance, where\nshould arguments be appended?"),(0,o.kt)("li",{parentName:"ul"},"If using the ",(0,o.kt)("a",{parentName:"li",href:"./concepts/toolchain"},"integrated toolchain"),", we cannot easily statically analyze the\ncommand string to determine where the binary is located. For example, given the multi-command\n",(0,o.kt)("inlineCode",{parentName:"li"},"rm -rf ./dist && node ./build.js && tsc --build"),", moon has no knowledge of where to find these\nbinaries without considerable effort at runtime.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"rm")," can be assumed to exist on the system, but what if it's actually an npm package? This also\nisn't portable on Windows."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"node")," is straight forward enough. This is Node.js."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"tsc")," is what exactly? A node module? An npm global? A system command? moon has no idea, and\nsince we can't use Node.js's built-in module resolution, we need to locate it ourselves."))),(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("inlineCode",{parentName:"li"},"platform")," setting on each task easily solves these problems, but requires a single command\nper task to avoid unnecessary complexity.")),(0,o.kt)("p",null,"However, we do suggest the following alternatives:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Create a task for each command, and link them as dependencies with\n",(0,o.kt)("a",{parentName:"li",href:"./config/project#deps"},(0,o.kt)("inlineCode",{parentName:"a"},"deps")),". This allows for each command to be incrementally cached (when\nenabled)."),(0,o.kt)("li",{parentName:"ul"},"Create a task for each command, and run them concurrently with ",(0,o.kt)("a",{parentName:"li",href:"./commands/run"},(0,o.kt)("inlineCode",{parentName:"a"},"moon run")),"."),(0,o.kt)("li",{parentName:"ul"},"Wrap all commands in an external file, and execute that file instead. Refer to the\n",(0,o.kt)("a",{parentName:"li",href:"#how-to-pipe-or-redirect-tasks"},"piping question")," above for an example."),(0,o.kt)("li",{parentName:"ul"},"Avoid using the toolchain and assume everything exists on ",(0,o.kt)("inlineCode",{parentName:"li"},"PATH"),".")),(0,o.kt)("h3",{id:"how-to-run-tasks-in-a-shell"},"How to run tasks in a shell?"),(0,o.kt)("p",null,"By default, all non-system tasks ",(0,o.kt)("em",{parentName:"p"},"will not")," run in a shell, as we interact with and execute a tool's\nbinary directly within the toolchain. We also provide no built-in support for wrapping language\nbased tasks within a shell, and have no plans to support this as it makes tasks less deterministic."),(0,o.kt)("p",null,"However, system based tasks do support shells, and will run in a shell based on the task's\n",(0,o.kt)("a",{parentName:"p",href:"./config/project#shell"},(0,o.kt)("inlineCode",{parentName:"a"},"shell"))," option, as demonstrated below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n # Runs in a shell\n global:\n command: 'some-command-on-path'\n platform: 'system'\n\n # Custom shells\n unix:\n command: 'bash -c some-command'\n platform: 'system'\n options:\n shell: false\n windows:\n command: 'pwsh.exe -c some-command'\n platform: 'system'\n options:\n shell: false\n")),(0,o.kt)("h3",{id:"can-we-run-other-languages"},"Can we run other languages?"),(0,o.kt)("p",null,"Yes! Although our toolchain only supports a few languages at this time, you can still run other\nlanguages within tasks by setting their ",(0,o.kt)("a",{parentName:"p",href:"./config/project#platform-1"},(0,o.kt)("inlineCode",{parentName:"a"},"platform")),' to "system".\nSystem tasks are an escape hatch that will use any command available on the current machine.'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n # Ruby\n lint:\n command: 'rubocop'\n platform: 'system'\n # PHP\n test:\n command: 'phpunit tests'\n platform: 'system'\n")),(0,o.kt)("p",null,"However, because these languages are not supported directly within our toolchain, they will not\nreceive the benefits of the toolchain. Some of which are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Automatic installation of the language. System tasks expect the command to already exist in the\nenvironment, which requires the user to manually install them."),(0,o.kt)("li",{parentName:"ul"},"Consistent language and dependency manager versions across all machines."),(0,o.kt)("li",{parentName:"ul"},"Built-in cpu and heap profiling (language specific)."),(0,o.kt)("li",{parentName:"ul"},"Automatic dependency installs when the lockfile changes."),(0,o.kt)("li",{parentName:"ul"},"And many more.")),(0,o.kt)("h2",{id:"javascript-ecosystem"},"JavaScript ecosystem"),(0,o.kt)("h3",{id:"can-we-use-packagejson-scripts"},"Can we use ",(0,o.kt)("inlineCode",{parentName:"h3"},"package.json")," scripts?"),(0,o.kt)("p",null,"We encourage everyone to define tasks in a ",(0,o.kt)("a",{parentName:"p",href:"./config/project#tasks"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file, as it allows\nfor additional metadata like ",(0,o.kt)("inlineCode",{parentName:"p"},"inputs"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"outputs"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"options"),", and more. However, if you'd like to\nkeep using ",(0,o.kt)("inlineCode",{parentName:"p"},"package.json")," scripts, enable the\n",(0,o.kt)("a",{parentName:"p",href:"./config/toolchain#infertasksfromscripts"},(0,o.kt)("inlineCode",{parentName:"a"},"node.inferTasksFromScripts"))," setting."),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"./migrate-to-moon"},"official documentation")," for more information on this approach,\nincluding risks, disadvantages, and caveats."),(0,o.kt)("h3",{id:"can-moon-versionpublish-packages"},"Can moon version/publish packages?"),(0,o.kt)("p",null,"At this time, no, as we're focusing on the build and test aspect of development. With that being\nsaid, this is something we'd like to support first-class in the future, but until then, we suggest\nthe following popular tools:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://yarnpkg.com/features/release-workflow"},"Yarn releases")," (requires >= v2)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/changesets/changesets"},"Changesets")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/lerna/lerna"},"Lerna"))),(0,o.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("h3",{id:"how-to-resolve-the-version-glibc_xxx-not-found-error"},"How to resolve the \"version 'GLIBC_X.XX' not found\" error?"),(0,o.kt)("p",null,"This is typically caused by running moon in an old environment, like Ubuntu 18, and the minimum\nrequired libc doesn't exist or is too old. Since moon is Rust based, we're unable to support all\nenvironments and versions perpetually, and will only support relatively modern environments."),(0,o.kt)("p",null,"There's not an easy fix to this problem, but there are a few potential solutions, from easiest to\nhardest:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Run moon in a Docker container/image that has the correct environment and libs. For example, the\n",(0,o.kt)("inlineCode",{parentName:"li"},"node:latest")," image."),(0,o.kt)("li",{parentName:"ul"},"Upgrade the enviroment to a newer one. For example, Ubuntu 18 -> 22."),(0,o.kt)("li",{parentName:"ul"},"Try and install a newer libc\n(",(0,o.kt)("a",{parentName:"li",href:"https://stackoverflow.com/questions/72513993/how-install-glibc-2-29-or-higher-in-ubuntu-18-04"},"more information"),").")),(0,o.kt)("p",null,"For more information on this problem as a whole,\n",(0,o.kt)("a",{parentName:"p",href:"https://kobzol.github.io/rust/ci/2021/05/07/building-rust-binaries-in-ci-that-work-with-older-glibc.html"},"refer to this in-depth article"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eb1a9ca0.7f1e8c4a.js b/assets/js/eb1a9ca0.7f1e8c4a.js new file mode 100644 index 00000000000..41861d6e8a5 --- /dev/null +++ b/assets/js/eb1a9ca0.7f1e8c4a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30841],{53295:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/clean","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/eb1a9ca0.b2ca298d.js b/assets/js/eb1a9ca0.b2ca298d.js deleted file mode 100644 index ca9e4da4a19..00000000000 --- a/assets/js/eb1a9ca0.b2ca298d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[841],{53295:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/clean","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/eb514dbf.66c0757e.js b/assets/js/eb514dbf.66c0757e.js new file mode 100644 index 00000000000..e1a0d6e068a --- /dev/null +++ b/assets/js/eb514dbf.66c0757e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16039],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),m=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=m(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=m(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var m=2;m<a;m++)i[m]=r[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},71276:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>m});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},i=void 0,l={permalink:"/blog/moon-v1.4",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx",source:"@site/blog/2023-05-01_moon-v1.4.mdx",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",description:"With this release, we're bringing further improvements to tags and MQL.",date:"2023-05-01T00:00:00.000Z",formattedDate:"May 1, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tag",permalink:"/blog/tags/tag"},{label:"alias",permalink:"/blog/tags/alias"}],readingTime:1.73,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},prevItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"},nextItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"}},s={image:r(914).Z,authorsImageUrls:[void 0]},m=[],p={toc:m};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're bringing further improvements to tags and MQL."))}c.isMDXComponent=!0},914:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.4-b1df8286618a63bb7bfdc2a708da9d6b.png"}}]); \ No newline at end of file diff --git a/assets/js/eb514dbf.f0ab3f8b.js b/assets/js/eb514dbf.f0ab3f8b.js deleted file mode 100644 index 8ac123d2e85..00000000000 --- a/assets/js/eb514dbf.f0ab3f8b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6039],{35318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),m=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=m(e.components);return n.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=m(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||c[g]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var m=2;m<a;m++)i[m]=r[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},71276:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>m});var n=r(25773),o=(r(27378),r(35318));const a={slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},i=void 0,l={permalink:"/blog/moon-v1.4",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx",source:"@site/blog/2023-05-01_moon-v1.4.mdx",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",description:"With this release, we're bringing further improvements to tags and MQL.",date:"2023-05-01T00:00:00.000Z",formattedDate:"May 1, 2023",tags:[{label:"query",permalink:"/blog/tags/query"},{label:"lang",permalink:"/blog/tags/lang"},{label:"tag",permalink:"/blog/tags/tag"},{label:"alias",permalink:"/blog/tags/alias"}],readingTime:1.73,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.4",title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",authors:["milesj"],tags:["query","lang","tag","alias"],image:"./img/moon/v1.4.png"},prevItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"},nextItem:{title:"proto v0.8 - Version detection and installation improvements",permalink:"/blog/proto-v0.8"}},s={image:r(914).Z,authorsImageUrls:[void 0]},m=[],p={toc:m};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we're bringing further improvements to tags and MQL."))}c.isMDXComponent=!0},914:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.4-b1df8286618a63bb7bfdc2a708da9d6b.png"}}]); \ No newline at end of file diff --git a/assets/js/ec4f6a24.5a68ea0e.js b/assets/js/ec4f6a24.5a68ea0e.js new file mode 100644 index 00000000000..1032719a487 --- /dev/null +++ b/assets/js/ec4f6a24.5a68ea0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32571],{79076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/project-graph","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ec4f6a24.75ea453c.js b/assets/js/ec4f6a24.75ea453c.js deleted file mode 100644 index aba49c0b724..00000000000 --- a/assets/js/ec4f6a24.75ea453c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8898],{79076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/project-graph","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ec9f380e.659353a2.js b/assets/js/ec9f380e.659353a2.js new file mode 100644 index 00000000000..3e0ce7a4f1a --- /dev/null +++ b/assets/js/ec9f380e.659353a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24744],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/ec9f380e.cbf2b84d.js b/assets/js/ec9f380e.cbf2b84d.js deleted file mode 100644 index 9535e62ed14..00000000000 --- a/assets/js/ec9f380e.cbf2b84d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4744],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/ed26bce9.03f71417.js b/assets/js/ed26bce9.03f71417.js deleted file mode 100644 index c2940a773b2..00000000000 --- a/assets/js/ed26bce9.03f71417.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6835],{36757:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/monorepo","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ed26bce9.8603abef.js b/assets/js/ed26bce9.8603abef.js new file mode 100644 index 00000000000..9e1aae5dc21 --- /dev/null +++ b/assets/js/ed26bce9.8603abef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16835],{36757:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/monorepo","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/eda853ca.38c686c2.js b/assets/js/eda853ca.38c686c2.js new file mode 100644 index 00000000000..e856530d142 --- /dev/null +++ b/assets/js/eda853ca.38c686c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60314],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=i(r),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,l[1]=p;for(var i=2;i<a;i++)l[i]=r[i];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},25799:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>i});var n=r(25773),o=(r(27378),r(35318));const a={title:"project-graph"},l=void 0,p={unversionedId:"commands/project-graph",id:"commands/project-graph",title:"project-graph",description:"The moon project-graph [name] (or moon pg) command will generate and serve a visual graph of all",source:"@site/docs/commands/project-graph.mdx",sourceDirName:"commands",slug:"/commands/project-graph",permalink:"/docs/commands/project-graph",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/project-graph.mdx",tags:[],version:"current",frontMatter:{title:"project-graph"},sidebar:"docs",previous:{title:"project",permalink:"/docs/commands/project"},next:{title:"query",permalink:"/docs/commands/query"}},c={},i=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],s={toc:i};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project-graph [name]")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon pg"),") command will generate and serve a visual graph of all\nconfigured projects as nodes, with dependencies between as edges, and can also output the graph in\n",(0,o.kt)("a",{parentName:"p",href:"https://graphviz.org/doc/info/lang.html"},"Graphviz DOT format"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Run the visualizer locally\n$ moon project-graph\n\n# Export to DOT format\n$ moon project-graph --dot > graph.dot\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"A project name can be passed to focus the graph to only that project and it's dependencies. For\nexample, ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project-graph app"),".")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[name]")," - Optional name or alias of a project to focus, as defined in\n",(0,o.kt)("a",{parentName:"li",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--dot")," - Output the graph in DOT format.")),(0,o.kt)("h2",{id:"example-output"},"Example output"),(0,o.kt)("p",null,"The following output is an example of the graph in DOT format."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-dot"},'digraph {\n 0 [ label="(workspace)" style=filled, shape=circle, fillcolor=black, fontcolor=white]\n 1 [ label="runtime" style=filled, shape=circle, fillcolor=gray, fontcolor=black]\n 2 [ label="website" style=filled, shape=circle, fillcolor=gray, fontcolor=black]\n 0 -> 1 [ arrowhead=none]\n 0 -> 2 [ arrowhead=none]\n}\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eda853ca.fd69bb83.js b/assets/js/eda853ca.fd69bb83.js deleted file mode 100644 index e53163197c3..00000000000 --- a/assets/js/eda853ca.fd69bb83.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[314],{35318:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=i(r),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,l[1]=p;for(var i=2;i<a;i++)l[i]=r[i];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},25799:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>i});var n=r(25773),o=(r(27378),r(35318));const a={title:"project-graph"},l=void 0,p={unversionedId:"commands/project-graph",id:"commands/project-graph",title:"project-graph",description:"The moon project-graph [name] (or moon pg) command will generate and serve a visual graph of all",source:"@site/docs/commands/project-graph.mdx",sourceDirName:"commands",slug:"/commands/project-graph",permalink:"/docs/commands/project-graph",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/project-graph.mdx",tags:[],version:"current",frontMatter:{title:"project-graph"},sidebar:"docs",previous:{title:"project",permalink:"/docs/commands/project"},next:{title:"query",permalink:"/docs/commands/query"}},c={},i=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Example output",id:"example-output",level:2}],s={toc:i};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project-graph [name]")," (or ",(0,o.kt)("inlineCode",{parentName:"p"},"moon pg"),") command will generate and serve a visual graph of all\nconfigured projects as nodes, with dependencies between as edges, and can also output the graph in\n",(0,o.kt)("a",{parentName:"p",href:"https://graphviz.org/doc/info/lang.html"},"Graphviz DOT format"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# Run the visualizer locally\n$ moon project-graph\n\n# Export to DOT format\n$ moon project-graph --dot > graph.dot\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"A project name can be passed to focus the graph to only that project and it's dependencies. For\nexample, ",(0,o.kt)("inlineCode",{parentName:"p"},"moon project-graph app"),".")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[name]")," - Optional name or alias of a project to focus, as defined in\n",(0,o.kt)("a",{parentName:"li",href:"../config/workspace#projects"},(0,o.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--dot")," - Output the graph in DOT format.")),(0,o.kt)("h2",{id:"example-output"},"Example output"),(0,o.kt)("p",null,"The following output is an example of the graph in DOT format."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-dot"},'digraph {\n 0 [ label="(workspace)" style=filled, shape=circle, fillcolor=black, fontcolor=white]\n 1 [ label="runtime" style=filled, shape=circle, fillcolor=gray, fontcolor=black]\n 2 [ label="website" style=filled, shape=circle, fillcolor=gray, fontcolor=black]\n 0 -> 1 [ arrowhead=none]\n 0 -> 2 [ arrowhead=none]\n}\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/edd7d65c.458e858f.js b/assets/js/edd7d65c.458e858f.js new file mode 100644 index 00000000000..53e056bf5b0 --- /dev/null +++ b/assets/js/edd7d65c.458e858f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[73250],{64186:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tag","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/edd7d65c.7b7f5bca.js b/assets/js/edd7d65c.7b7f5bca.js deleted file mode 100644 index 910870be257..00000000000 --- a/assets/js/edd7d65c.7b7f5bca.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3250],{64186:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/tag","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/edfea66c.b7f94265.js b/assets/js/edfea66c.b7f94265.js deleted file mode 100644 index 9477b51c14e..00000000000 --- a/assets/js/edfea66c.b7f94265.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6394],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),m=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=m(e.components);return o.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=m(n),u=a,g=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return n?o.createElement(g,i(i({ref:t},p),{},{components:n})):o.createElement(g,i({ref:t},p))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var m=2;m<r;m++)i[m]=n[m];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(27378);function a(e){let{src:t,width:n="90%",alt:a="",title:r,align:i="center",padding:l="1rem"}=e;return o.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},o.createElement("img",{src:t.default,width:n,alt:a,title:r,className:"inline-block"}))}},19106:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var o=n(25773),a=(n(27378),n(35318)),r=n(88109);const i={slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},l=void 0,s={permalink:"/blog/v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-31_v0.18.mdx",source:"@site/blog/2022-10-31_v0.18.mdx",title:"moon v0.18 - Improved configuration and initialization flow",description:"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and",date:"2022-10-31T00:00:00.000Z",formattedDate:"October 31, 2022",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"config",permalink:"/blog/tags/config"},{label:"init",permalink:"/blog/tags/init"},{label:"node",permalink:"/blog/tags/node"}],readingTime:2.09,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},prevItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"},nextItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"}},m={image:n(8706).Z,authorsImageUrls:[void 0]},p=[{value:"Improved projects configuration",id:"improved-projects-configuration",level:2},{value:"Improved <code>moon init</code> flow",id:"improved-moon-init-flow",level:2},{value:"Customize <code>node</code> execution arguments",id:"customize-node-execution-arguments",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and\nbenchmarking performance metrics, so it's rather light on new features, but we still have some to\nshow!"),(0,a.kt)("h2",{id:"improved-projects-configuration"},"Improved projects configuration"),(0,a.kt)("p",null,"When moon initially launched, it required defining all\n",(0,a.kt)("a",{parentName:"p",href:"../docs/config/workspace#projects"},(0,a.kt)("inlineCode",{parentName:"a"},"projects"))," using a map. In v0.3, we added support for globs to\nease the burden of defining many projects. At this point, you had to choose between the 2 patterns,\nwhich wasn't always ideal."),(0,a.kt)("p",null,"To improve upon this, you can now define a map ",(0,a.kt)("em",{parentName:"p"},"and")," globs using a 3rd pattern, like so."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n globs:\n - 'apps/*'\n - 'packages/*'\n sources:\n www: 'www'\n")),(0,a.kt)("h2",{id:"improved-moon-init-flow"},"Improved ",(0,a.kt)("inlineCode",{parentName:"h2"},"moon init")," flow"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon init")," command hasn't changed much since our v0.1 release, and with many new features and\nconfigurations over these last 18 releases, the initialization flow has fallen quite behind. We felt\nit was the perfect time to modernize this command a bit."),(0,a.kt)("p",null,"On top of automatically detecting settings from the environment, the command will also now prompt\nyou with additional questions while configuring Node.js or TypeScript. Here's an example of this\nflow:"),(0,a.kt)(r.Z,{src:n(27992),width:"80%",mdxType:"Image"}),(0,a.kt)("p",null,"Furthermore, the command also supports enabling a new tool (appending configuration to\n",(0,a.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml"),") into an ",(0,a.kt)("em",{parentName:"p"},"existing")," moon repository, by running ",(0,a.kt)("inlineCode",{parentName:"p"},"moon init --tool <name>"),"."),(0,a.kt)("h2",{id:"customize-node-execution-arguments"},"Customize ",(0,a.kt)("inlineCode",{parentName:"h2"},"node")," execution arguments"),(0,a.kt)("p",null,"moon manages the Node.js binary in our toolchain, and runs all Node.js based tasks using this\nbinary, instead of relying on the binary found in the developer's environment. Because of this, how\n",(0,a.kt)("inlineCode",{parentName:"p"},"node")," is executed is abstracted away from end users."),(0,a.kt)("p",null,"What if you wanted to use an ",(0,a.kt)("a",{parentName:"p",href:"https://nodejs.org/api/esm.html#loaders"},"experimental loader")," and\nexecute TypeScript code at ",(0,a.kt)("em",{parentName:"p"},"runtime"),"? Or to preserve symlinks? Well, you couldn't... but no longer,\nas we've added a new setting, ",(0,a.kt)("a",{parentName:"p",href:"../docs/config/toolchain#binexecargs"},(0,a.kt)("inlineCode",{parentName:"a"},"node.binExecArgs")),", that\nallows additional ",(0,a.kt)("inlineCode",{parentName:"p"},"node")," ",(0,a.kt)("a",{parentName:"p",href:"https://nodejs.org/api/cli.html#options"},"CLI arguments")," to be defined,\nthat will be passed to ",(0,a.kt)("em",{parentName:"p"},"all")," executions."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"node:\n binExecArgs:\n - '--loader'\n - '@boost/module/loader'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Learn more about the\n",(0,a.kt)("a",{parentName:"p",href:"https://boostlib.dev/docs/module#ecmascript-module-loaders"},"Boost module loader"),"!")),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.18.0"},"official release")," for a\nfull list of changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Default Node.js version has been updated to v18.12 (the new LTS) from v16.17."),(0,a.kt)("li",{parentName:"ul"},"Updated the ",(0,a.kt)("inlineCode",{parentName:"li"},"moon check")," command to support an ",(0,a.kt)("inlineCode",{parentName:"li"},"--all")," flag."),(0,a.kt)("li",{parentName:"ul"},"Improvements to how we store stdout/stderr logs for ran targets."),(0,a.kt)("li",{parentName:"ul"},"Work tree dirty checks when running migration commands.")),(0,a.kt)("h2",{id:"whats-next"},"What's next?"),(0,a.kt)("p",null,"Expect the following in the v0.19 release!"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Laying the groundwork for ",(0,a.kt)("em",{parentName:"li"},"remote caching"),"!"),(0,a.kt)("li",{parentName:"ul"},"An in-repo secrets management layer."),(0,a.kt)("li",{parentName:"ul"},"Performance and affected improvements.")))}d.isMDXComponent=!0},27992:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/init-flow-2a3ba1d56ee42c65dabf1f219d732e98.png"},8706:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.18-dbb354a41e8d2854b61b9680283d2e65.png"}}]); \ No newline at end of file diff --git a/assets/js/edfea66c.cec4f3d3.js b/assets/js/edfea66c.cec4f3d3.js new file mode 100644 index 00000000000..61bc24829cf --- /dev/null +++ b/assets/js/edfea66c.cec4f3d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36394],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var o=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),m=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=m(e.components);return o.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=m(n),u=a,g=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return n?o.createElement(g,i(i({ref:t},p),{},{components:n})):o.createElement(g,i({ref:t},p))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var m=2;m<r;m++)i[m]=n[m];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88109:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(27378);function a(e){let{src:t,width:n="90%",alt:a="",title:r,align:i="center",padding:l="1rem"}=e;return o.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},o.createElement("img",{src:t.default,width:n,alt:a,title:r,className:"inline-block"}))}},19106:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var o=n(25773),a=(n(27378),n(35318)),r=n(88109);const i={slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},l=void 0,s={permalink:"/blog/v0.18",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-10-31_v0.18.mdx",source:"@site/blog/2022-10-31_v0.18.mdx",title:"moon v0.18 - Improved configuration and initialization flow",description:"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and",date:"2022-10-31T00:00:00.000Z",formattedDate:"October 31, 2022",tags:[{label:"project",permalink:"/blog/tags/project"},{label:"config",permalink:"/blog/tags/config"},{label:"init",permalink:"/blog/tags/init"},{label:"node",permalink:"/blog/tags/node"}],readingTime:2.09,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.18",title:"moon v0.18 - Improved configuration and initialization flow",authors:["milesj"],tags:["project","config","init","node"],image:"./img/v0.18.png"},prevItem:{title:"moon v0.19 - Remote caching beta, affected files, and graph optimization",permalink:"/blog/v0.19"},nextItem:{title:"moon v0.17 - Webhooks, extended YAML, and improved runtime performance",permalink:"/blog/v0.17"}},m={image:n(8706).Z,authorsImageUrls:[void 0]},p=[{value:"Improved projects configuration",id:"improved-projects-configuration",level:2},{value:"Improved <code>moon init</code> flow",id:"improved-moon-init-flow",level:2},{value:"Customize <code>node</code> execution arguments",id:"customize-node-execution-arguments",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function d(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,o.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Happy Halloween \ud83c\udf83 \ud83d\udc7b! With this spooky release, we've focused heavily on our internals and\nbenchmarking performance metrics, so it's rather light on new features, but we still have some to\nshow!"),(0,a.kt)("h2",{id:"improved-projects-configuration"},"Improved projects configuration"),(0,a.kt)("p",null,"When moon initially launched, it required defining all\n",(0,a.kt)("a",{parentName:"p",href:"../docs/config/workspace#projects"},(0,a.kt)("inlineCode",{parentName:"a"},"projects"))," using a map. In v0.3, we added support for globs to\nease the burden of defining many projects. At this point, you had to choose between the 2 patterns,\nwhich wasn't always ideal."),(0,a.kt)("p",null,"To improve upon this, you can now define a map ",(0,a.kt)("em",{parentName:"p"},"and")," globs using a 3rd pattern, like so."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"projects:\n globs:\n - 'apps/*'\n - 'packages/*'\n sources:\n www: 'www'\n")),(0,a.kt)("h2",{id:"improved-moon-init-flow"},"Improved ",(0,a.kt)("inlineCode",{parentName:"h2"},"moon init")," flow"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"moon init")," command hasn't changed much since our v0.1 release, and with many new features and\nconfigurations over these last 18 releases, the initialization flow has fallen quite behind. We felt\nit was the perfect time to modernize this command a bit."),(0,a.kt)("p",null,"On top of automatically detecting settings from the environment, the command will also now prompt\nyou with additional questions while configuring Node.js or TypeScript. Here's an example of this\nflow:"),(0,a.kt)(r.Z,{src:n(27992),width:"80%",mdxType:"Image"}),(0,a.kt)("p",null,"Furthermore, the command also supports enabling a new tool (appending configuration to\n",(0,a.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml"),") into an ",(0,a.kt)("em",{parentName:"p"},"existing")," moon repository, by running ",(0,a.kt)("inlineCode",{parentName:"p"},"moon init --tool <name>"),"."),(0,a.kt)("h2",{id:"customize-node-execution-arguments"},"Customize ",(0,a.kt)("inlineCode",{parentName:"h2"},"node")," execution arguments"),(0,a.kt)("p",null,"moon manages the Node.js binary in our toolchain, and runs all Node.js based tasks using this\nbinary, instead of relying on the binary found in the developer's environment. Because of this, how\n",(0,a.kt)("inlineCode",{parentName:"p"},"node")," is executed is abstracted away from end users."),(0,a.kt)("p",null,"What if you wanted to use an ",(0,a.kt)("a",{parentName:"p",href:"https://nodejs.org/api/esm.html#loaders"},"experimental loader")," and\nexecute TypeScript code at ",(0,a.kt)("em",{parentName:"p"},"runtime"),"? Or to preserve symlinks? Well, you couldn't... but no longer,\nas we've added a new setting, ",(0,a.kt)("a",{parentName:"p",href:"../docs/config/toolchain#binexecargs"},(0,a.kt)("inlineCode",{parentName:"a"},"node.binExecArgs")),", that\nallows additional ",(0,a.kt)("inlineCode",{parentName:"p"},"node")," ",(0,a.kt)("a",{parentName:"p",href:"https://nodejs.org/api/cli.html#options"},"CLI arguments")," to be defined,\nthat will be passed to ",(0,a.kt)("em",{parentName:"p"},"all")," executions."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml" {2-4}',title:'".moon/workspace.yml"',"{2-4}":!0},"node:\n binExecArgs:\n - '--loader'\n - '@boost/module/loader'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Learn more about the\n",(0,a.kt)("a",{parentName:"p",href:"https://boostlib.dev/docs/module#ecmascript-module-loaders"},"Boost module loader"),"!")),(0,a.kt)("h2",{id:"other-changes"},"Other changes"),(0,a.kt)("p",null,"View the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.18.0"},"official release")," for a\nfull list of changes."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Default Node.js version has been updated to v18.12 (the new LTS) from v16.17."),(0,a.kt)("li",{parentName:"ul"},"Updated the ",(0,a.kt)("inlineCode",{parentName:"li"},"moon check")," command to support an ",(0,a.kt)("inlineCode",{parentName:"li"},"--all")," flag."),(0,a.kt)("li",{parentName:"ul"},"Improvements to how we store stdout/stderr logs for ran targets."),(0,a.kt)("li",{parentName:"ul"},"Work tree dirty checks when running migration commands.")),(0,a.kt)("h2",{id:"whats-next"},"What's next?"),(0,a.kt)("p",null,"Expect the following in the v0.19 release!"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Laying the groundwork for ",(0,a.kt)("em",{parentName:"li"},"remote caching"),"!"),(0,a.kt)("li",{parentName:"ul"},"An in-repo secrets management layer."),(0,a.kt)("li",{parentName:"ul"},"Performance and affected improvements.")))}d.isMDXComponent=!0},27992:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/init-flow-2a3ba1d56ee42c65dabf1f219d732e98.png"},8706:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.18-dbb354a41e8d2854b61b9680283d2e65.png"}}]); \ No newline at end of file diff --git a/assets/js/efef7eb9.2d0f50a0.js b/assets/js/efef7eb9.2d0f50a0.js deleted file mode 100644 index 963d9df2deb..00000000000 --- a/assets/js/efef7eb9.2d0f50a0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6040],{35318:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>h});var o=t(27378);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=o.createContext({}),p=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=p(e.components);return o.createElement(l.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(t),h=r,d=u["".concat(l,".").concat(h)]||u[h]||c[h]||a;return t?o.createElement(d,i(i({ref:n},m),{},{components:t})):o.createElement(d,i({ref:n},m))}));function h(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=u;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p<a;p++)i[p]=t[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},15381:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=t(25773),r=(t(27378),t(35318));const a={slug:"moon-v1.14",title:"moon v1.14 - Improvements to running targets and toolchain versions",authors:["milesj"],tags:["run","target","toolchain","version","ci","shorthand"],image:"./img/moon/v1.14.png"},i=void 0,s={permalink:"/blog/moon-v1.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-25_moon-v1.14.mdx",source:"@site/blog/2023-09-25_moon-v1.14.mdx",title:"moon v1.14 - Improvements to running targets and toolchain versions",description:"In this release, we've focused on loosening restrictions to improve the overall developer",date:"2023-09-25T00:00:00.000Z",formattedDate:"September 25, 2023",tags:[{label:"run",permalink:"/blog/tags/run"},{label:"target",permalink:"/blog/tags/target"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"version",permalink:"/blog/tags/version"},{label:"ci",permalink:"/blog/tags/ci"},{label:"shorthand",permalink:"/blog/tags/shorthand"}],readingTime:2.665,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.14",title:"moon v1.14 - Improvements to running targets and toolchain versions",authors:["milesj"],tags:["run","target","toolchain","version","ci","shorthand"],image:"./img/moon/v1.14.png"},prevItem:{title:"proto v0.19 - Version pinning and outdated checks",permalink:"/blog/proto-v0.19"},nextItem:{title:"proto v0.18 - List installed tools and configure HTTP client",permalink:"/blog/proto-v0.18"}},l={image:t(1816).Z,authorsImageUrls:[void 0]},p=[{value:"Shorthand for <code>moon run</code>",id:"shorthand-for-moon-run",level:2},{value:"Choose targets for <code>moon ci</code>",id:"choose-targets-for-moon-ci",level:2},{value:"Configure partial toolchain versions",id:"configure-partial-toolchain-versions",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function c(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this release, we've focused on loosening restrictions to improve the overall developer\nexperience."),(0,r.kt)("h2",{id:"shorthand-for-moon-run"},"Shorthand for ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon run")),(0,r.kt)("p",null,'This has been a long requested feature and we\'re happy to finally deliver it! You can now omit the\n"run" keyword for the ',(0,r.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command, just so long as the first non-option\nargument is a target (must contain a ",(0,r.kt)("inlineCode",{parentName:"p"},":"),")."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# v1.13\n$ moon run app:build\n\n# v1.14+\n$ moon app:build\n")),(0,r.kt)("h2",{id:"choose-targets-for-moon-ci"},"Choose targets for ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon ci")),(0,r.kt)("p",null,"When we initially built ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci")),", we wanted a solution that simply ran\neverything in CI that ",(0,r.kt)("em",{parentName:"p"},"should be ran"),", taking care of all the complicated logic to determine\naffected tasks, comparing Git branches, gathering targets, partitioning across jobs, etc... And it\ndoes just that, and it does it well!"),(0,r.kt)("p",null,"However, one major caveat to using ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci")," is that it runs ",(0,r.kt)("em",{parentName:"p"},"every task")," in the workspace (assuming\nthey're affected). This has been quite a blocker for adoption as teams may want fine-grained control\nof their CI. For example, running build tasks in one job, lint tasks in another, so on and so forth."),(0,r.kt)("p",null,"In this release, we've made the necessary changes to allow these workflows, by supporting a list of\ntargets for ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci"),", similar to how ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run"),' works. If no targets are provide, the existing "run\neverything" logic will be used.'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# v1.13\n$ moon ci\n\n# v1.14+\n$ moon ci :build :lint :etc\n")),(0,r.kt)("p",null,"Splitting targets across jobs is demonstrated with the following GitHub Action workflow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"name: 'CI'\non:\n push:\n branches:\n - 'master'\n pull_request:\njobs:\n build:\n name: 'Build'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci :build'\n format-lint:\n name: 'Format + Lint'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci :format :lint'\n test:\n name: 'Test'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci :test'\n")),(0,r.kt)("h2",{id:"configure-partial-toolchain-versions"},"Configure partial toolchain versions"),(0,r.kt)("p",null,"Since moon's inception, our ",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/toolchain"},"integrated toolchain"),' required fully\nqualified semantic versions (major.minor.patch) for tools. This was by design to ensure that we\ncould provide a consistent, reliable, and deterministic experience for all users. This solved the\nproblem of "Is X using the correct version of Y?".'),(0,r.kt)("p",null,"However, this also meant that we were unable to support partial versions (major.minor) of tools,\nwhich is a common use case and request for many users. Over the last few months, we've made immense\nprogress in ",(0,r.kt)("a",{parentName:"p",href:"/proto"},"proto")," on how it parses, resolves, and evaluates versions, known as the\n",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/version_spec"},"version specification"),"."),(0,r.kt)("p",null,"We felt the time was right to pull these changes into moon, and as such, all ",(0,r.kt)("inlineCode",{parentName:"p"},"version")," fields in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml"))," now support partial versions, version\nrequirements/ranges, and even aliases!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '20.7' # ~20.7\n npm:\n version: '^9'\n\nrust:\n version: 'stable'\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Learn more about how this works under the hood in the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/toolchain#version-specification"},"official version specification documentation"),".")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.14.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"packemon"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"sveltekit"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"vite"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"vitest")," to\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon-configs"},"moonrepo/moon-configs"),"."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks")," to support nested folders, for better organization of task files."),(0,r.kt)("li",{parentName:"ul"},"Improved handling of certificates and proxies."),(0,r.kt)("li",{parentName:"ul"},"Updated to proto v0.18.")))}c.isMDXComponent=!0},1816:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/v1.14-3ce565f42964d96ef37006c8ad92d6d6.png"}}]); \ No newline at end of file diff --git a/assets/js/efef7eb9.d3e2f109.js b/assets/js/efef7eb9.d3e2f109.js new file mode 100644 index 00000000000..c221d5f90e2 --- /dev/null +++ b/assets/js/efef7eb9.d3e2f109.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56040],{35318:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>h});var o=t(27378);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=o.createContext({}),p=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=p(e.components);return o.createElement(l.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(t),h=r,d=u["".concat(l,".").concat(h)]||u[h]||c[h]||a;return t?o.createElement(d,i(i({ref:n},m),{},{components:t})):o.createElement(d,i({ref:n},m))}));function h(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=u;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p<a;p++)i[p]=t[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,t)}u.displayName="MDXCreateElement"},15381:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=t(25773),r=(t(27378),t(35318));const a={slug:"moon-v1.14",title:"moon v1.14 - Improvements to running targets and toolchain versions",authors:["milesj"],tags:["run","target","toolchain","version","ci","shorthand"],image:"./img/moon/v1.14.png"},i=void 0,s={permalink:"/blog/moon-v1.14",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-25_moon-v1.14.mdx",source:"@site/blog/2023-09-25_moon-v1.14.mdx",title:"moon v1.14 - Improvements to running targets and toolchain versions",description:"In this release, we've focused on loosening restrictions to improve the overall developer",date:"2023-09-25T00:00:00.000Z",formattedDate:"September 25, 2023",tags:[{label:"run",permalink:"/blog/tags/run"},{label:"target",permalink:"/blog/tags/target"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"version",permalink:"/blog/tags/version"},{label:"ci",permalink:"/blog/tags/ci"},{label:"shorthand",permalink:"/blog/tags/shorthand"}],readingTime:2.665,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.14",title:"moon v1.14 - Improvements to running targets and toolchain versions",authors:["milesj"],tags:["run","target","toolchain","version","ci","shorthand"],image:"./img/moon/v1.14.png"},prevItem:{title:"proto v0.19 - Version pinning and outdated checks",permalink:"/blog/proto-v0.19"},nextItem:{title:"proto v0.18 - List installed tools and configure HTTP client",permalink:"/blog/proto-v0.18"}},l={image:t(1816).Z,authorsImageUrls:[void 0]},p=[{value:"Shorthand for <code>moon run</code>",id:"shorthand-for-moon-run",level:2},{value:"Choose targets for <code>moon ci</code>",id:"choose-targets-for-moon-ci",level:2},{value:"Configure partial toolchain versions",id:"configure-partial-toolchain-versions",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:p};function c(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this release, we've focused on loosening restrictions to improve the overall developer\nexperience."),(0,r.kt)("h2",{id:"shorthand-for-moon-run"},"Shorthand for ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon run")),(0,r.kt)("p",null,'This has been a long requested feature and we\'re happy to finally deliver it! You can now omit the\n"run" keyword for the ',(0,r.kt)("a",{parentName:"p",href:"/docs/commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run"))," command, just so long as the first non-option\nargument is a target (must contain a ",(0,r.kt)("inlineCode",{parentName:"p"},":"),")."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# v1.13\n$ moon run app:build\n\n# v1.14+\n$ moon app:build\n")),(0,r.kt)("h2",{id:"choose-targets-for-moon-ci"},"Choose targets for ",(0,r.kt)("inlineCode",{parentName:"h2"},"moon ci")),(0,r.kt)("p",null,"When we initially built ",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/ci"},(0,r.kt)("inlineCode",{parentName:"a"},"moon ci")),", we wanted a solution that simply ran\neverything in CI that ",(0,r.kt)("em",{parentName:"p"},"should be ran"),", taking care of all the complicated logic to determine\naffected tasks, comparing Git branches, gathering targets, partitioning across jobs, etc... And it\ndoes just that, and it does it well!"),(0,r.kt)("p",null,"However, one major caveat to using ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci")," is that it runs ",(0,r.kt)("em",{parentName:"p"},"every task")," in the workspace (assuming\nthey're affected). This has been quite a blocker for adoption as teams may want fine-grained control\nof their CI. For example, running build tasks in one job, lint tasks in another, so on and so forth."),(0,r.kt)("p",null,"In this release, we've made the necessary changes to allow these workflows, by supporting a list of\ntargets for ",(0,r.kt)("inlineCode",{parentName:"p"},"moon ci"),", similar to how ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run"),' works. If no targets are provide, the existing "run\neverything" logic will be used.'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# v1.13\n$ moon ci\n\n# v1.14+\n$ moon ci :build :lint :etc\n")),(0,r.kt)("p",null,"Splitting targets across jobs is demonstrated with the following GitHub Action workflow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".github/workflows/ci.yml"',title:'".github/workflows/ci.yml"'},"name: 'CI'\non:\n push:\n branches:\n - 'master'\n pull_request:\njobs:\n build:\n name: 'Build'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci :build'\n format-lint:\n name: 'Format + Lint'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci :format :lint'\n test:\n name: 'Test'\n runs-on: 'ubuntu-latest'\n steps:\n - uses: 'actions/checkout@v4'\n with:\n fetch-depth: 0\n - uses: 'moonrepo/setup-moon-action@v1'\n - run: 'moon ci :test'\n")),(0,r.kt)("h2",{id:"configure-partial-toolchain-versions"},"Configure partial toolchain versions"),(0,r.kt)("p",null,"Since moon's inception, our ",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/toolchain"},"integrated toolchain"),' required fully\nqualified semantic versions (major.minor.patch) for tools. This was by design to ensure that we\ncould provide a consistent, reliable, and deterministic experience for all users. This solved the\nproblem of "Is X using the correct version of Y?".'),(0,r.kt)("p",null,"However, this also meant that we were unable to support partial versions (major.minor) of tools,\nwhich is a common use case and request for many users. Over the last few months, we've made immense\nprogress in ",(0,r.kt)("a",{parentName:"p",href:"/proto"},"proto")," on how it parses, resolves, and evaluates versions, known as the\n",(0,r.kt)("a",{parentName:"p",href:"https://crates.io/crates/version_spec"},"version specification"),"."),(0,r.kt)("p",null,"We felt the time was right to pull these changes into moon, and as such, all ",(0,r.kt)("inlineCode",{parentName:"p"},"version")," fields in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/config/toolchain"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml"))," now support partial versions, version\nrequirements/ranges, and even aliases!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n version: '20.7' # ~20.7\n npm:\n version: '^9'\n\nrust:\n version: 'stable'\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Learn more about how this works under the hood in the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/toolchain#version-specification"},"official version specification documentation"),".")),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.14.0"},"official release")," for a full list\nof changes."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"packemon"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"sveltekit"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"vite"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"vitest")," to\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/moonrepo/moon-configs"},"moonrepo/moon-configs"),"."),(0,r.kt)("li",{parentName:"ul"},"Updated ",(0,r.kt)("inlineCode",{parentName:"li"},".moon/tasks")," to support nested folders, for better organization of task files."),(0,r.kt)("li",{parentName:"ul"},"Improved handling of certificates and proxies."),(0,r.kt)("li",{parentName:"ul"},"Updated to proto v0.18.")))}c.isMDXComponent=!0},1816:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/v1.14-3ce565f42964d96ef37006c8ad92d6d6.png"}}]); \ No newline at end of file diff --git a/assets/js/f01f44c3.d8d4c891.js b/assets/js/f01f44c3.d8d4c891.js deleted file mode 100644 index 3d66edc3b6e..00000000000 --- a/assets/js/f01f44c3.d8d4c891.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5852],{41862:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/remote-cache","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f01f44c3.fa2e6d38.js b/assets/js/f01f44c3.fa2e6d38.js new file mode 100644 index 00000000000..59ca35aaaf5 --- /dev/null +++ b/assets/js/f01f44c3.fa2e6d38.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75852],{41862:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/remote-cache","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f09f371a.8ceeb955.js b/assets/js/f09f371a.8ceeb955.js deleted file mode 100644 index bd1bc79f8f4..00000000000 --- a/assets/js/f09f371a.8ceeb955.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9186],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),g=o,b=u["".concat(p,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},81143:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},i=void 0,l={permalink:"/blog/proto-v0.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx",source:"@site/blog/2023-05-23_proto-v0.9.mdx",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",description:"This is a small release that provides many internal improvements.",date:"2023-05-23T00:00:00.000Z",formattedDate:"May 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"action",permalink:"/blog/tags/action"},{label:"github",permalink:"/blog/tags/github"}],readingTime:1.68,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},prevItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"},nextItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"}},p={image:r(22917).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a small release that provides many internal improvements."))}m.isMDXComponent=!0},22917:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.9-c189afd32d83182c9ce2677593363d17.png"}}]); \ No newline at end of file diff --git a/assets/js/f09f371a.a4a11aa9.js b/assets/js/f09f371a.a4a11aa9.js new file mode 100644 index 00000000000..c99d7b482bd --- /dev/null +++ b/assets/js/f09f371a.a4a11aa9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69186],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),g=o,b=u["".concat(p,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},81143:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(25773),o=(r(27378),r(35318));const a={slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},i=void 0,l={permalink:"/blog/proto-v0.9",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx",source:"@site/blog/2023-05-23_proto-v0.9.mdx",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",description:"This is a small release that provides many internal improvements.",date:"2023-05-23T00:00:00.000Z",formattedDate:"May 23, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"action",permalink:"/blog/tags/action"},{label:"github",permalink:"/blog/tags/github"}],readingTime:1.68,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.9",title:"proto v0.9 - New GitHub action, plugin unpacking, and more",authors:["milesj"],tags:["proto","action","github"],image:"./img/proto/v0.9.png"},prevItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"},nextItem:{title:"moon v1.6 - Persistent tasks and task extending RFC",permalink:"/blog/moon-v1.6"}},p={image:r(22917).Z,authorsImageUrls:[void 0]},s=[],c={toc:s};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is a small release that provides many internal improvements."))}m.isMDXComponent=!0},22917:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v0.9-c189afd32d83182c9ce2677593363d17.png"}}]); \ No newline at end of file diff --git a/assets/js/f18fbdcd.65b4b669.js b/assets/js/f18fbdcd.65b4b669.js deleted file mode 100644 index 0dc345648e3..00000000000 --- a/assets/js/f18fbdcd.65b4b669.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5050],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?r.createElement(f,l(l({ref:t},u),{},{components:n})):r.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var c=2;c<o;c++)l[c]=n[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),r=c[n].value;r!==i&&(m(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",u,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function d(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",c)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(m,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(d,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function c(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=c(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=m??f;return u({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(83469),o=n(9619);function l(e){let{text:t}=e;return r.createElement(o.Z,{text:t,icon:a.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(27378),a=n(81884),o=n(25773),l=n(9928),i=n(83469),s=n(31792);const c={discord:l.omb,github:l.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:l.mdU,workspace:i.emM,"workspace-config":i.cRF};function u(e){let{name:t,...n}=e;return r.createElement(s.Z,(0,o.Z)({},n,{icon:c[t]}))}function p(e){let{links:t}=e;return r.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>r.createElement(a.default,{key:e.url,href:e.url,className:"focus:outline-none"},r.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},r.createElement("div",{className:"flex-shrink-0"},r.createElement(u,{size:"lg",name:e.icon})),r.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},18287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var r=n(25773),a=(n(27378),n(35318)),o=(n(33337),n(39798),n(27915)),l=n(9634);const i={title:"Setup workspace"},s=void 0,c={unversionedId:"setup-workspace",id:"setup-workspace",title:"Setup workspace",description:"Once moon has been installed, we must setup the workspace, which is denoted",source:"@site/docs/setup-workspace.mdx",sourceDirName:".",slug:"/setup-workspace",permalink:"/docs/setup-workspace",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/setup-workspace.mdx",tags:[],version:"current",frontMatter:{title:"Setup workspace"},sidebar:"docs",previous:{title:"Install moon",permalink:"/docs/install"},next:{title:"Setup toolchain",permalink:"/docs/setup-toolchain"}},u={},p=[{value:"Initializing the repository",id:"initializing-the-repository",level:2},{value:"Configuring a version control system",id:"configuring-a-version-control-system",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,a.kt)("p",null,"Once moon has been installed, we must setup the ",(0,a.kt)("a",{parentName:"p",href:"./concepts/workspace"},"workspace"),", which is denoted\nby the ",(0,a.kt)("inlineCode",{parentName:"p"},".moon")," folder \u2014 this is known as the workspace root. The workspace is in charge of:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Integrating with a version control system."),(0,a.kt)("li",{parentName:"ul"},"Defining configuration that applies to its entire tree."),(0,a.kt)("li",{parentName:"ul"},"Housing ",(0,a.kt)("a",{parentName:"li",href:"./concepts/project"},"projects")," to build a ",(0,a.kt)("a",{parentName:"li",href:"./how-it-works/project-graph"},"project graph"),"."),(0,a.kt)("li",{parentName:"ul"},"Running tasks.")),(0,a.kt)("h2",{id:"initializing-the-repository"},"Initializing the repository"),(0,a.kt)("p",null,"Let's scaffold and initialize moon in a repository with the ",(0,a.kt)("a",{parentName:"p",href:"./commands/init"},(0,a.kt)("inlineCode",{parentName:"a"},"moon init"))," command.\nThis should typically be ran at the root, but can be nested within a directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init\n")),(0,a.kt)("p",null,"When executed, the following operations will be applied."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Creates a ",(0,a.kt)("inlineCode",{parentName:"li"},".moon")," folder with associated ",(0,a.kt)("a",{parentName:"li",href:"./config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),",\n",(0,a.kt)("a",{parentName:"li",href:"./config/toolchain"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and ",(0,a.kt)("a",{parentName:"li",href:"./config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," configuration\nfiles."),(0,a.kt)("li",{parentName:"ul"},"Appends necessary ignore patterns to the relative ",(0,a.kt)("inlineCode",{parentName:"li"},".gitignore"),"."),(0,a.kt)("li",{parentName:"ul"},"Infers languages and dependency managers to register in the toolchain."),(0,a.kt)("li",{parentName:"ul"},"Infers the version control system from the environment.")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"If you're investigating moon, or merely want to prototype, you can use ",(0,a.kt)("inlineCode",{parentName:"p"},"moon init --minimal")," to\nquickly initialize and create minimal configuration files.")),(0,a.kt)("h2",{id:"configuring-a-version-control-system"},"Configuring a version control system"),(0,a.kt)("p",null,"moon requires a version control system (VCS) to be present for functionality like file diffing,\nhashing, and revision comparison. The VCS and its default branch can be configured through the\n",(0,a.kt)("a",{parentName:"p",href:"./config/workspace#vcs"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs"))," setting."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n manager: 'git'\n defaultBranch: 'master'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"moon defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"git")," and the settings above, so feel free to skip this.")),(0,a.kt)("h2",{id:"next-steps"},"Next steps"),(0,a.kt)(l.Z,{links:[{icon:"toolchain-config",label:"Setup toolchain",url:"./setup-toolchain"},{icon:"workspace-config",label:(0,a.kt)("span",null,"Configure ",(0,a.kt)("code",null,".moon/workspace.yml")," further"),url:"./config/workspace"},{icon:"workspace",label:"Learn about the workspace",url:"./concepts/workspace"}],mdxType:"NextSteps"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f18fbdcd.cab1effa.js b/assets/js/f18fbdcd.cab1effa.js new file mode 100644 index 00000000000..8c4a6909e65 --- /dev/null +++ b/assets/js/f18fbdcd.cab1effa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15050],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?r.createElement(f,l(l({ref:t},u),{},{components:n})):r.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var c=2;c<o;c++)l[c]=n[c];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const c="tabList_J5MA",u="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:c}=e;const p=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),r=c[n].value;r!==i&&(m(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},c.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:d},l,{className:(0,o.Z)("tabs__item",u,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function m(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function d(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",c)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(m,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(d,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>m});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function c(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=c(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[m,d]=p({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=m??f;return u({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),g(e)}),[d,g,o]),tabValues:o}}},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(83469),o=n(9619);function l(e){let{text:t}=e;return r.createElement(o.Z,{text:t,icon:a.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9634:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(27378),a=n(81884),o=n(25773),l=n(9928),i=n(83469),s=n(31792);const c={discord:l.omb,github:l.zhw,moon:i.Gp0,"new-project":i.g6h,"new-task":i.EQ8,project:i.pL1,"project-config":i.dhu,"project-config-global":i.YdP,"project-graph":i.Bkj,"run-task":i.sl_,task:i.diR,"task-config":i.o$R,token:i.BwA,toolchain:i.AlB,"toolchain-config":i.eDR,twitter:l.mdU,workspace:i.emM,"workspace-config":i.cRF};function u(e){let{name:t,...n}=e;return r.createElement(s.Z,(0,o.Z)({},n,{icon:c[t]}))}function p(e){let{links:t}=e;return r.createElement("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2"},t.map((e=>r.createElement(a.default,{key:e.url,href:e.url,className:"focus:outline-none"},r.createElement("div",{className:"relative rounded-lg px-3 py-3 flex items-center space-x-2 border-solid border border-t-0 border-b-2 bg-gray-50 hover:bg-gray-100/90 border-gray-200/75 dark:bg-slate-700 dark:hover:bg-slate-600 dark:border-slate-900/75"},r.createElement("div",{className:"flex-shrink-0"},r.createElement(u,{size:"lg",name:e.icon})),r.createElement("div",{className:"flex-1 min-w-0 text-gray-900 dark:text-gray-100"},e.label))))))}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),a=n(40624),o=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,a.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(o.Z,{icon:n,className:"mr-1"}),i)}},18287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var r=n(25773),a=(n(27378),n(35318)),o=(n(33337),n(39798),n(27915)),l=n(9634);const i={title:"Setup workspace"},s=void 0,c={unversionedId:"setup-workspace",id:"setup-workspace",title:"Setup workspace",description:"Once moon has been installed, we must setup the workspace, which is denoted",source:"@site/docs/setup-workspace.mdx",sourceDirName:".",slug:"/setup-workspace",permalink:"/docs/setup-workspace",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/setup-workspace.mdx",tags:[],version:"current",frontMatter:{title:"Setup workspace"},sidebar:"docs",previous:{title:"Install moon",permalink:"/docs/install"},next:{title:"Setup toolchain",permalink:"/docs/setup-toolchain"}},u={},p=[{value:"Initializing the repository",id:"initializing-the-repository",level:2},{value:"Configuring a version control system",id:"configuring-a-version-control-system",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{text:"2 min",mdxType:"HeaderLabel"}),(0,a.kt)("p",null,"Once moon has been installed, we must setup the ",(0,a.kt)("a",{parentName:"p",href:"./concepts/workspace"},"workspace"),", which is denoted\nby the ",(0,a.kt)("inlineCode",{parentName:"p"},".moon")," folder \u2014 this is known as the workspace root. The workspace is in charge of:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Integrating with a version control system."),(0,a.kt)("li",{parentName:"ul"},"Defining configuration that applies to its entire tree."),(0,a.kt)("li",{parentName:"ul"},"Housing ",(0,a.kt)("a",{parentName:"li",href:"./concepts/project"},"projects")," to build a ",(0,a.kt)("a",{parentName:"li",href:"./how-it-works/project-graph"},"project graph"),"."),(0,a.kt)("li",{parentName:"ul"},"Running tasks.")),(0,a.kt)("h2",{id:"initializing-the-repository"},"Initializing the repository"),(0,a.kt)("p",null,"Let's scaffold and initialize moon in a repository with the ",(0,a.kt)("a",{parentName:"p",href:"./commands/init"},(0,a.kt)("inlineCode",{parentName:"a"},"moon init"))," command.\nThis should typically be ran at the root, but can be nested within a directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon init\n")),(0,a.kt)("p",null,"When executed, the following operations will be applied."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Creates a ",(0,a.kt)("inlineCode",{parentName:"li"},".moon")," folder with associated ",(0,a.kt)("a",{parentName:"li",href:"./config/workspace"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),",\n",(0,a.kt)("a",{parentName:"li",href:"./config/toolchain"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),", and ",(0,a.kt)("a",{parentName:"li",href:"./config/tasks"},(0,a.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml"))," configuration\nfiles."),(0,a.kt)("li",{parentName:"ul"},"Appends necessary ignore patterns to the relative ",(0,a.kt)("inlineCode",{parentName:"li"},".gitignore"),"."),(0,a.kt)("li",{parentName:"ul"},"Infers languages and dependency managers to register in the toolchain."),(0,a.kt)("li",{parentName:"ul"},"Infers the version control system from the environment.")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"If you're investigating moon, or merely want to prototype, you can use ",(0,a.kt)("inlineCode",{parentName:"p"},"moon init --minimal")," to\nquickly initialize and create minimal configuration files.")),(0,a.kt)("h2",{id:"configuring-a-version-control-system"},"Configuring a version control system"),(0,a.kt)("p",null,"moon requires a version control system (VCS) to be present for functionality like file diffing,\nhashing, and revision comparison. The VCS and its default branch can be configured through the\n",(0,a.kt)("a",{parentName:"p",href:"./config/workspace#vcs"},(0,a.kt)("inlineCode",{parentName:"a"},"vcs"))," setting."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"vcs:\n manager: 'git'\n defaultBranch: 'master'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"moon defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"git")," and the settings above, so feel free to skip this.")),(0,a.kt)("h2",{id:"next-steps"},"Next steps"),(0,a.kt)(l.Z,{links:[{icon:"toolchain-config",label:"Setup toolchain",url:"./setup-toolchain"},{icon:"workspace-config",label:(0,a.kt)("span",null,"Configure ",(0,a.kt)("code",null,".moon/workspace.yml")," further"),url:"./config/workspace"},{icon:"workspace",label:"Learn about the workspace",url:"./concepts/workspace"}],mdxType:"NextSteps"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f1d6ac1e.537b0fec.js b/assets/js/f1d6ac1e.537b0fec.js new file mode 100644 index 00000000000..a09414581e4 --- /dev/null +++ b/assets/js/f1d6ac1e.537b0fec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56720],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return n?o.createElement(f,i(i({ref:t},c),{},{components:n})):o.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},16699:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},i=void 0,l={permalink:"/blog/proto-v0.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx",source:"@site/blog/2023-04-28_proto-v0.8.mdx",title:"proto v0.8 - Version detection and installation improvements",description:"In this release, we're dropping some quality of life workflow improvements.",date:"2023-04-28T00:00:00.000Z",formattedDate:"April 28, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"detect",permalink:"/blog/tags/detect"}],readingTime:1.295,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},prevItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"},nextItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"}},s={image:n(62681).Z,authorsImageUrls:[void 0]},p=[{value:"Built-in detection for <code>proto use</code>",id:"built-in-detection-for-proto-use",level:2},{value:"Smarter version detection",id:"smarter-version-detection",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this release, we're dropping some quality of life workflow improvements."),(0,r.kt)("h2",{id:"built-in-detection-for-proto-use"},"Built-in detection for ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto use")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/use"},(0,r.kt)("inlineCode",{parentName:"a"},"proto use"))," command is extremely useful for bootstrapping your\ndevelopment environment with all necessary tooling, but it had a hard requirement on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,r.kt)("inlineCode",{parentName:"a"},".prototools"))," configuration file. But what if you're already using non-proto\nversion files, like ",(0,r.kt)("inlineCode",{parentName:"p"},".nvmrc")," or ",(0,r.kt)("inlineCode",{parentName:"p"},".dvmrc"),"? Or maybe manifest settings, like ",(0,r.kt)("inlineCode",{parentName:"p"},"packageManager")," or\n",(0,r.kt)("inlineCode",{parentName:"p"},"engines")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"?"),(0,r.kt)("p",null,"Great questions, and we agree! As such, we've updated ",(0,r.kt)("inlineCode",{parentName:"p"},"proto use")," to ",(0,r.kt)("em",{parentName:"p"},"also")," detect a version from\nthe environment for the current working directory. We suggest using ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools"),", but feel free to\nconfigure your environments as you so choose!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Install all the things!\n$ proto use\n")),(0,r.kt)("h2",{id:"smarter-version-detection"},"Smarter version detection"),(0,r.kt)("p",null,"One of proto's best features is its ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/detection"},"contextual version detection"),", but it\ndid have 1 shortcoming. When we detected a partial version, like ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2"),", we'd resolve to a fully\nqualified version with the latest patch version (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.3"),"). While this worked in most cases,\neverytime a new patch was released upstream (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.4"),"), proto would error and require a manual\ninstall of this new version. This was pretty annoying as ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.3")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.4")," are likely to be\ncompatible, and both satisfy the ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2")," version constraint."),(0,r.kt)("p",null,"To mitigate this scenario, we've updated the version detection to scan the locally installed\nversions ",(0,r.kt)("em",{parentName:"p"},"first")," when encountering a partial version. This solves the problem above by allowing\n",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.3")," to satisfy the requirement, instead of forcing an install of ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.4"),"."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.8.0"},"official release")," for a full list\nof changes."))}m.isMDXComponent=!0},62681:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.8-9fbf22972083ec9959ca9045d7ea8f95.png"}}]); \ No newline at end of file diff --git a/assets/js/f1d6ac1e.78f2fda6.js b/assets/js/f1d6ac1e.78f2fda6.js deleted file mode 100644 index 8ed54c6b617..00000000000 --- a/assets/js/f1d6ac1e.78f2fda6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6720],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return n?o.createElement(f,i(i({ref:t},c),{},{components:n})):o.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},16699:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var o=n(25773),r=(n(27378),n(35318));const a={slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},i=void 0,l={permalink:"/blog/proto-v0.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx",source:"@site/blog/2023-04-28_proto-v0.8.mdx",title:"proto v0.8 - Version detection and installation improvements",description:"In this release, we're dropping some quality of life workflow improvements.",date:"2023-04-28T00:00:00.000Z",formattedDate:"April 28, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"detect",permalink:"/blog/tags/detect"}],readingTime:1.295,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.8",title:"proto v0.8 - Version detection and installation improvements",authors:["milesj"],tags:["proto","detect"],image:"./img/proto/v0.8.png"},prevItem:{title:"moon v1.4 - New tag target scope, MQL support for query commands, and more!",permalink:"/blog/moon-v1.4"},nextItem:{title:"moon v1.3 - Advanced run targeting and an official proto plugin",permalink:"/blog/moon-v1.3"}},s={image:n(62681).Z,authorsImageUrls:[void 0]},p=[{value:"Built-in detection for <code>proto use</code>",id:"built-in-detection-for-proto-use",level:2},{value:"Smarter version detection",id:"smarter-version-detection",level:2},{value:"Other changes",id:"other-changes",level:2}],c={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this release, we're dropping some quality of life workflow improvements."),(0,r.kt)("h2",{id:"built-in-detection-for-proto-use"},"Built-in detection for ",(0,r.kt)("inlineCode",{parentName:"h2"},"proto use")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/commands/use"},(0,r.kt)("inlineCode",{parentName:"a"},"proto use"))," command is extremely useful for bootstrapping your\ndevelopment environment with all necessary tooling, but it had a hard requirement on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/config"},(0,r.kt)("inlineCode",{parentName:"a"},".prototools"))," configuration file. But what if you're already using non-proto\nversion files, like ",(0,r.kt)("inlineCode",{parentName:"p"},".nvmrc")," or ",(0,r.kt)("inlineCode",{parentName:"p"},".dvmrc"),"? Or maybe manifest settings, like ",(0,r.kt)("inlineCode",{parentName:"p"},"packageManager")," or\n",(0,r.kt)("inlineCode",{parentName:"p"},"engines")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"?"),(0,r.kt)("p",null,"Great questions, and we agree! As such, we've updated ",(0,r.kt)("inlineCode",{parentName:"p"},"proto use")," to ",(0,r.kt)("em",{parentName:"p"},"also")," detect a version from\nthe environment for the current working directory. We suggest using ",(0,r.kt)("inlineCode",{parentName:"p"},".prototools"),", but feel free to\nconfigure your environments as you so choose!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Install all the things!\n$ proto use\n")),(0,r.kt)("h2",{id:"smarter-version-detection"},"Smarter version detection"),(0,r.kt)("p",null,"One of proto's best features is its ",(0,r.kt)("a",{parentName:"p",href:"/docs/proto/detection"},"contextual version detection"),", but it\ndid have 1 shortcoming. When we detected a partial version, like ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2"),", we'd resolve to a fully\nqualified version with the latest patch version (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.3"),"). While this worked in most cases,\neverytime a new patch was released upstream (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.4"),"), proto would error and require a manual\ninstall of this new version. This was pretty annoying as ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.3")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.4")," are likely to be\ncompatible, and both satisfy the ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2")," version constraint."),(0,r.kt)("p",null,"To mitigate this scenario, we've updated the version detection to scan the locally installed\nversions ",(0,r.kt)("em",{parentName:"p"},"first")," when encountering a partial version. This solves the problem above by allowing\n",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.3")," to satisfy the requirement, instead of forcing an install of ",(0,r.kt)("inlineCode",{parentName:"p"},"1.2.4"),"."),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases/tag/v0.8.0"},"official release")," for a full list\nof changes."))}m.isMDXComponent=!0},62681:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v0.8-9fbf22972083ec9959ca9045d7ea8f95.png"}}]); \ No newline at end of file diff --git a/assets/js/f3f44898.3924bbec.js b/assets/js/f3f44898.3924bbec.js new file mode 100644 index 00000000000..c833ccd715d --- /dev/null +++ b/assets/js/f3f44898.3924bbec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54841],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/f3f44898.3ea2f523.js b/assets/js/f3f44898.3ea2f523.js deleted file mode 100644 index d71b1015562..00000000000 --- a/assets/js/f3f44898.3ea2f523.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4841],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/f41735e0.d56f7156.js b/assets/js/f41735e0.d56f7156.js new file mode 100644 index 00000000000..3c98871c527 --- /dev/null +++ b/assets/js/f41735e0.d56f7156.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65819],{79877:e=>{e.exports=JSON.parse('{"badge":false,"banner":null,"className":"api-version-current","docs":{},"docsSidebars":{"api":[{"collapsed":true,"collapsible":true,"items":[{"href":"/api/report","label":"Overview","type":"link"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/report/function/formatDuration","label":"formatDuration","type":"link"},{"href":"/api/report/function/formatTime","label":"formatTime","type":"link"},{"href":"/api/report/function/getDurationInMillis","label":"getDurationInMillis","type":"link"},{"href":"/api/report/function/getIconForStatus","label":"getIconForStatus","type":"link"},{"href":"/api/report/function/hasFailed","label":"hasFailed","type":"link"},{"href":"/api/report/function/hasPassed","label":"hasPassed","type":"link"},{"href":"/api/report/function/isFlaky","label":"isFlaky","type":"link"},{"href":"/api/report/function/isSlow","label":"isSlow","type":"link"},{"href":"/api/report/function/prepareReportActions","label":"prepareReportActions","type":"link"},{"href":"/api/report/function/sortReport","label":"sortReport","type":"link"}],"label":"Functions","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/report/interface/PreparedAction","label":"PreparedAction","type":"link"}],"label":"Interfaces","type":"category"}],"label":"@moonrepo/report","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/runtime","label":"Overview","type":"link"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/runtime/function/getContext","label":"getContext","type":"link"}],"label":"Functions","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/runtime/interface/RuntimeContext","label":"RuntimeContext","type":"link"}],"label":"Interfaces","type":"category"}],"label":"@moonrepo/runtime","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/types","label":"Overview","type":"link"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/types/interface/Action","label":"Action","type":"link"},{"href":"/api/types/interface/ActionContext","label":"ActionContext","type":"link"},{"href":"/api/types/interface/ActionNodeInstallDeps","label":"ActionNodeInstallDeps","type":"link"},{"href":"/api/types/interface/ActionNodeInstallProjectDeps","label":"ActionNodeInstallProjectDeps","type":"link"},{"href":"/api/types/interface/ActionNodeRunTask","label":"ActionNodeRunTask","type":"link"},{"href":"/api/types/interface/ActionNodeSetupTool","label":"ActionNodeSetupTool","type":"link"},{"href":"/api/types/interface/ActionNodeSyncProject","label":"ActionNodeSyncProject","type":"link"},{"href":"/api/types/interface/ActionNodeSyncWorkspace","label":"ActionNodeSyncWorkspace","type":"link"},{"href":"/api/types/interface/Attempt","label":"Attempt","type":"link"},{"href":"/api/types/interface/BinConfig","label":"BinConfig","type":"link"},{"href":"/api/types/interface/CodeownersConfig","label":"CodeownersConfig","type":"link"},{"href":"/api/types/interface/ConstraintsConfig","label":"ConstraintsConfig","type":"link"},{"href":"/api/types/interface/DenoConfig","label":"DenoConfig","type":"link"},{"href":"/api/types/interface/DependencyConfig","label":"DependencyConfig","type":"link"},{"href":"/api/types/interface/Duration","label":"Duration","type":"link"},{"href":"/api/types/interface/EventActionFinished","label":"EventActionFinished","type":"link"},{"href":"/api/types/interface/EventActionStarted","label":"EventActionStarted","type":"link"},{"href":"/api/types/interface/EventDependenciesInstalled","label":"EventDependenciesInstalled","type":"link"},{"href":"/api/types/interface/EventDependenciesInstalling","label":"EventDependenciesInstalling","type":"link"},{"href":"/api/types/interface/EventPipelineAborted","label":"EventPipelineAborted","type":"link"},{"href":"/api/types/interface/EventPipelineFinished","label":"EventPipelineFinished","type":"link"},{"href":"/api/types/interface/EventPipelineStarted","label":"EventPipelineStarted","type":"link"},{"href":"/api/types/interface/EventProjectSynced","label":"EventProjectSynced","type":"link"},{"href":"/api/types/interface/EventProjectSyncing","label":"EventProjectSyncing","type":"link"},{"href":"/api/types/interface/EventTargetOutputArchived","label":"EventTargetOutputArchived","type":"link"},{"href":"/api/types/interface/EventTargetOutputArchiving","label":"EventTargetOutputArchiving","type":"link"},{"href":"/api/types/interface/EventTargetOutputCacheCheck","label":"EventTargetOutputCacheCheck","type":"link"},{"href":"/api/types/interface/EventTargetOutputHydrated","label":"EventTargetOutputHydrated","type":"link"},{"href":"/api/types/interface/EventTargetOutputHydrating","label":"EventTargetOutputHydrating","type":"link"},{"href":"/api/types/interface/EventTargetRan","label":"EventTargetRan","type":"link"},{"href":"/api/types/interface/EventTargetRunning","label":"EventTargetRunning","type":"link"},{"href":"/api/types/interface/EventToolInstalled","label":"EventToolInstalled","type":"link"},{"href":"/api/types/interface/EventToolInstalling","label":"EventToolInstalling","type":"link"},{"href":"/api/types/interface/EventWorkspaceSynced","label":"EventWorkspaceSynced","type":"link"},{"href":"/api/types/interface/ExperimentsConfig","label":"ExperimentsConfig","type":"link"},{"href":"/api/types/interface/FileGroup","label":"FileGroup","type":"link"},{"href":"/api/types/interface/GeneratorConfig","label":"GeneratorConfig","type":"link"},{"href":"/api/types/interface/HasherConfig","label":"HasherConfig","type":"link"},{"href":"/api/types/interface/InheritedTasksConfig","label":"InheritedTasksConfig","type":"link"},{"href":"/api/types/interface/NodeConfig","label":"NodeConfig","type":"link"},{"href":"/api/types/interface/NotifierConfig","label":"NotifierConfig","type":"link"},{"href":"/api/types/interface/NpmConfig","label":"NpmConfig","type":"link"},{"href":"/api/types/interface/OwnersConfig","label":"OwnersConfig","type":"link"},{"href":"/api/types/interface/PartialBinConfig","label":"PartialBinConfig","type":"link"},{"href":"/api/types/interface/PartialCodeownersConfig","label":"PartialCodeownersConfig","type":"link"},{"href":"/api/types/interface/PartialConstraintsConfig","label":"PartialConstraintsConfig","type":"link"},{"href":"/api/types/interface/PartialDenoConfig","label":"PartialDenoConfig","type":"link"},{"href":"/api/types/interface/PartialDependencyConfig","label":"PartialDependencyConfig","type":"link"},{"href":"/api/types/interface/PartialExperimentsConfig","label":"PartialExperimentsConfig","type":"link"},{"href":"/api/types/interface/PartialGeneratorConfig","label":"PartialGeneratorConfig","type":"link"},{"href":"/api/types/interface/PartialHasherConfig","label":"PartialHasherConfig","type":"link"},{"href":"/api/types/interface/PartialInheritedTasksConfig","label":"PartialInheritedTasksConfig","type":"link"},{"href":"/api/types/interface/PartialNodeConfig","label":"PartialNodeConfig","type":"link"},{"href":"/api/types/interface/PartialNotifierConfig","label":"PartialNotifierConfig","type":"link"},{"href":"/api/types/interface/PartialNpmConfig","label":"PartialNpmConfig","type":"link"},{"href":"/api/types/interface/PartialOwnersConfig","label":"PartialOwnersConfig","type":"link"},{"href":"/api/types/interface/PartialPnpmConfig","label":"PartialPnpmConfig","type":"link"},{"href":"/api/types/interface/PartialProjectConfig","label":"PartialProjectConfig","type":"link"},{"href":"/api/types/interface/PartialProjectMetadataConfig","label":"PartialProjectMetadataConfig","type":"link"},{"href":"/api/types/interface/PartialProjectToolchainCommonToolConfig","label":"PartialProjectToolchainCommonToolConfig","type":"link"},{"href":"/api/types/interface/PartialProjectToolchainConfig","label":"PartialProjectToolchainConfig","type":"link"},{"href":"/api/types/interface/PartialProjectToolchainTypeScriptConfig","label":"PartialProjectToolchainTypeScriptConfig","type":"link"},{"href":"/api/types/interface/PartialProjectWorkspaceConfig","label":"PartialProjectWorkspaceConfig","type":"link"},{"href":"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig","label":"PartialProjectWorkspaceInheritedTasksConfig","type":"link"},{"href":"/api/types/interface/PartialRunnerConfig","label":"PartialRunnerConfig","type":"link"},{"href":"/api/types/interface/PartialRustConfig","label":"PartialRustConfig","type":"link"},{"href":"/api/types/interface/PartialTaskConfig","label":"PartialTaskConfig","type":"link"},{"href":"/api/types/interface/PartialTaskOptionsConfig","label":"PartialTaskOptionsConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateConfig","label":"PartialTemplateConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateFrontmatterConfig","label":"PartialTemplateFrontmatterConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableBoolSetting","label":"PartialTemplateVariableBoolSetting","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableEnumSetting","label":"PartialTemplateVariableEnumSetting","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableEnumValueConfig","label":"PartialTemplateVariableEnumValueConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableNumberSetting","label":"PartialTemplateVariableNumberSetting","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableStringSetting","label":"PartialTemplateVariableStringSetting","type":"link"},{"href":"/api/types/interface/PartialToolchainConfig","label":"PartialToolchainConfig","type":"link"},{"href":"/api/types/interface/PartialTypeScriptConfig","label":"PartialTypeScriptConfig","type":"link"},{"href":"/api/types/interface/PartialVcsConfig","label":"PartialVcsConfig","type":"link"},{"href":"/api/types/interface/PartialWorkspaceConfig","label":"PartialWorkspaceConfig","type":"link"},{"href":"/api/types/interface/PartialWorkspaceProjectsConfig","label":"PartialWorkspaceProjectsConfig","type":"link"},{"href":"/api/types/interface/PartialYarnConfig","label":"PartialYarnConfig","type":"link"},{"href":"/api/types/interface/PnpmConfig","label":"PnpmConfig","type":"link"},{"href":"/api/types/interface/Project","label":"Project","type":"link"},{"href":"/api/types/interface/ProjectConfig","label":"ProjectConfig","type":"link"},{"href":"/api/types/interface/ProjectMetadataConfig","label":"ProjectMetadataConfig","type":"link"},{"href":"/api/types/interface/ProjectToolchainCommonToolConfig","label":"ProjectToolchainCommonToolConfig","type":"link"},{"href":"/api/types/interface/ProjectToolchainConfig","label":"ProjectToolchainConfig","type":"link"},{"href":"/api/types/interface/ProjectToolchainTypeScriptConfig","label":"ProjectToolchainTypeScriptConfig","type":"link"},{"href":"/api/types/interface/ProjectWorkspaceConfig","label":"ProjectWorkspaceConfig","type":"link"},{"href":"/api/types/interface/ProjectWorkspaceInheritedTasksConfig","label":"ProjectWorkspaceInheritedTasksConfig","type":"link"},{"href":"/api/types/interface/ProviderEnvironment","label":"ProviderEnvironment","type":"link"},{"href":"/api/types/interface/RunReport","label":"RunReport","type":"link"},{"href":"/api/types/interface/RunnerConfig","label":"RunnerConfig","type":"link"},{"href":"/api/types/interface/Runtime","label":"Runtime","type":"link"},{"href":"/api/types/interface/RustConfig","label":"RustConfig","type":"link"},{"href":"/api/types/interface/TargetState","label":"TargetState","type":"link"},{"href":"/api/types/interface/Task","label":"Task","type":"link"},{"href":"/api/types/interface/TaskConfig","label":"TaskConfig","type":"link"},{"href":"/api/types/interface/TaskOptions","label":"TaskOptions","type":"link"},{"href":"/api/types/interface/TaskOptionsConfig","label":"TaskOptionsConfig","type":"link"},{"href":"/api/types/interface/TemplateConfig","label":"TemplateConfig","type":"link"},{"href":"/api/types/interface/TemplateFrontmatterConfig","label":"TemplateFrontmatterConfig","type":"link"},{"href":"/api/types/interface/TemplateVariableBoolSetting","label":"TemplateVariableBoolSetting","type":"link"},{"href":"/api/types/interface/TemplateVariableEnumSetting","label":"TemplateVariableEnumSetting","type":"link"},{"href":"/api/types/interface/TemplateVariableEnumValueConfig","label":"TemplateVariableEnumValueConfig","type":"link"},{"href":"/api/types/interface/TemplateVariableNumberSetting","label":"TemplateVariableNumberSetting","type":"link"},{"href":"/api/types/interface/TemplateVariableStringSetting","label":"TemplateVariableStringSetting","type":"link"},{"href":"/api/types/interface/ToolchainConfig","label":"ToolchainConfig","type":"link"},{"href":"/api/types/interface/TypeScriptConfig","label":"TypeScriptConfig","type":"link"},{"href":"/api/types/interface/VcsConfig","label":"VcsConfig","type":"link"},{"href":"/api/types/interface/WebhookPayload","label":"WebhookPayload","type":"link"},{"href":"/api/types/interface/WorkspaceConfig","label":"WorkspaceConfig","type":"link"},{"href":"/api/types/interface/WorkspaceProjectsConfig","label":"WorkspaceProjectsConfig","type":"link"},{"href":"/api/types/interface/YarnConfig","label":"YarnConfig","type":"link"}],"label":"Interfaces","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/types#ActionNode","label":"ActionNode","type":"link"},{"href":"/api/types#ActionStatus","label":"ActionStatus","type":"link"},{"href":"/api/types#BinEntry","label":"BinEntry","type":"link"},{"href":"/api/types#CodeownersOrderBy","label":"CodeownersOrderBy","type":"link"},{"href":"/api/types#DependencyScope","label":"DependencyScope","type":"link"},{"href":"/api/types#DependencySource","label":"DependencySource","type":"link"},{"href":"/api/types#EventType","label":"EventType","type":"link"},{"href":"/api/types#HasherOptimization","label":"HasherOptimization","type":"link"},{"href":"/api/types#HasherWalkStrategy","label":"HasherWalkStrategy","type":"link"},{"href":"/api/types#LanguageType","label":"LanguageType","type":"link"},{"href":"/api/types#NodePackageManager","label":"NodePackageManager","type":"link"},{"href":"/api/types#NodeProjectAliasFormat","label":"NodeProjectAliasFormat","type":"link"},{"href":"/api/types#NodeVersionFormat","label":"NodeVersionFormat","type":"link"},{"href":"/api/types#NodeVersionManager","label":"NodeVersionManager","type":"link"},{"href":"/api/types#Nullable","label":"Nullable","type":"link"},{"href":"/api/types#OwnersPaths","label":"OwnersPaths","type":"link"},{"href":"/api/types#PartialBinEntry","label":"PartialBinEntry","type":"link"},{"href":"/api/types#PartialOwnersPaths","label":"PartialOwnersPaths","type":"link"},{"href":"/api/types#PartialProjectDependsOn","label":"PartialProjectDependsOn","type":"link"},{"href":"/api/types#PartialTaskCommandArgs","label":"PartialTaskCommandArgs","type":"link"},{"href":"/api/types#PartialTemplateVariable","label":"PartialTemplateVariable","type":"link"},{"href":"/api/types#PartialTemplateVariableEnumValue","label":"PartialTemplateVariableEnumValue","type":"link"},{"href":"/api/types#PartialWorkspaceProjects","label":"PartialWorkspaceProjects","type":"link"},{"href":"/api/types#PayloadActionFinished","label":"PayloadActionFinished","type":"link"},{"href":"/api/types#PayloadActionStarted","label":"PayloadActionStarted","type":"link"},{"href":"/api/types#PayloadDependenciesInstalled","label":"PayloadDependenciesInstalled","type":"link"},{"href":"/api/types#PayloadDependenciesInstalling","label":"PayloadDependenciesInstalling","type":"link"},{"href":"/api/types#PayloadPipelineAborted","label":"PayloadPipelineAborted","type":"link"},{"href":"/api/types#PayloadPipelineFinished","label":"PayloadPipelineFinished","type":"link"},{"href":"/api/types#PayloadPipelineStarted","label":"PayloadPipelineStarted","type":"link"},{"href":"/api/types#PayloadProjectSynced","label":"PayloadProjectSynced","type":"link"},{"href":"/api/types#PayloadProjectSyncing","label":"PayloadProjectSyncing","type":"link"},{"href":"/api/types#PayloadTargetOutputArchived","label":"PayloadTargetOutputArchived","type":"link"},{"href":"/api/types#PayloadTargetOutputArchiving","label":"PayloadTargetOutputArchiving","type":"link"},{"href":"/api/types#PayloadTargetOutputCacheCheck","label":"PayloadTargetOutputCacheCheck","type":"link"},{"href":"/api/types#PayloadTargetOutputHydrated","label":"PayloadTargetOutputHydrated","type":"link"},{"href":"/api/types#PayloadTargetOutputHydrating","label":"PayloadTargetOutputHydrating","type":"link"},{"href":"/api/types#PayloadTargetRan","label":"PayloadTargetRan","type":"link"},{"href":"/api/types#PayloadTargetRunning","label":"PayloadTargetRunning","type":"link"},{"href":"/api/types#PayloadToolInstalled","label":"PayloadToolInstalled","type":"link"},{"href":"/api/types#PayloadToolInstalling","label":"PayloadToolInstalling","type":"link"},{"href":"/api/types#PayloadWorkspaceSynced","label":"PayloadWorkspaceSynced","type":"link"},{"href":"/api/types#PayloadWorkspaceSyncing","label":"PayloadWorkspaceSyncing","type":"link"},{"href":"/api/types#PlatformType","label":"PlatformType","type":"link"},{"href":"/api/types#ProjectDependsOn","label":"ProjectDependsOn","type":"link"},{"href":"/api/types#ProjectType","label":"ProjectType","type":"link"},{"href":"/api/types#TaskCommandArgs","label":"TaskCommandArgs","type":"link"},{"href":"/api/types#TaskMergeStrategy","label":"TaskMergeStrategy","type":"link"},{"href":"/api/types#TaskOptionAffectedFiles","label":"TaskOptionAffectedFiles","type":"link"},{"href":"/api/types#TaskOptionEnvFile","label":"TaskOptionEnvFile","type":"link"},{"href":"/api/types#TaskOutputStyle","label":"TaskOutputStyle","type":"link"},{"href":"/api/types#TaskType","label":"TaskType","type":"link"},{"href":"/api/types#TemplateVariable","label":"TemplateVariable","type":"link"},{"href":"/api/types#TemplateVariableEnumValue","label":"TemplateVariableEnumValue","type":"link"},{"href":"/api/types#VcsManager","label":"VcsManager","type":"link"},{"href":"/api/types#VcsProvider","label":"VcsProvider","type":"link"},{"href":"/api/types#WorkspaceProjects","label":"WorkspaceProjects","type":"link"}],"label":"Type Aliases","type":"category"}],"label":"@moonrepo/types","type":"category"}]},"isLast":true,"label":"Next","noIndex":false,"pluginId":"default","version":"current"}')}}]); \ No newline at end of file diff --git a/assets/js/f41735e0.d6bf1257.js b/assets/js/f41735e0.d6bf1257.js deleted file mode 100644 index 9f6a76e123b..00000000000 --- a/assets/js/f41735e0.d6bf1257.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5819],{79877:e=>{e.exports=JSON.parse('{"badge":false,"banner":null,"className":"api-version-current","docs":{},"docsSidebars":{"api":[{"collapsed":true,"collapsible":true,"items":[{"href":"/api/report","label":"Overview","type":"link"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/report/function/formatDuration","label":"formatDuration","type":"link"},{"href":"/api/report/function/formatTime","label":"formatTime","type":"link"},{"href":"/api/report/function/getDurationInMillis","label":"getDurationInMillis","type":"link"},{"href":"/api/report/function/getIconForStatus","label":"getIconForStatus","type":"link"},{"href":"/api/report/function/hasFailed","label":"hasFailed","type":"link"},{"href":"/api/report/function/hasPassed","label":"hasPassed","type":"link"},{"href":"/api/report/function/isFlaky","label":"isFlaky","type":"link"},{"href":"/api/report/function/isSlow","label":"isSlow","type":"link"},{"href":"/api/report/function/prepareReportActions","label":"prepareReportActions","type":"link"},{"href":"/api/report/function/sortReport","label":"sortReport","type":"link"}],"label":"Functions","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/report/interface/PreparedAction","label":"PreparedAction","type":"link"}],"label":"Interfaces","type":"category"}],"label":"@moonrepo/report","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/runtime","label":"Overview","type":"link"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/runtime/function/getContext","label":"getContext","type":"link"}],"label":"Functions","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/runtime/interface/RuntimeContext","label":"RuntimeContext","type":"link"}],"label":"Interfaces","type":"category"}],"label":"@moonrepo/runtime","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/types","label":"Overview","type":"link"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/types/interface/Action","label":"Action","type":"link"},{"href":"/api/types/interface/ActionContext","label":"ActionContext","type":"link"},{"href":"/api/types/interface/ActionNodeInstallDeps","label":"ActionNodeInstallDeps","type":"link"},{"href":"/api/types/interface/ActionNodeInstallProjectDeps","label":"ActionNodeInstallProjectDeps","type":"link"},{"href":"/api/types/interface/ActionNodeRunTask","label":"ActionNodeRunTask","type":"link"},{"href":"/api/types/interface/ActionNodeSetupTool","label":"ActionNodeSetupTool","type":"link"},{"href":"/api/types/interface/ActionNodeSyncProject","label":"ActionNodeSyncProject","type":"link"},{"href":"/api/types/interface/ActionNodeSyncWorkspace","label":"ActionNodeSyncWorkspace","type":"link"},{"href":"/api/types/interface/Attempt","label":"Attempt","type":"link"},{"href":"/api/types/interface/BinConfig","label":"BinConfig","type":"link"},{"href":"/api/types/interface/CodeownersConfig","label":"CodeownersConfig","type":"link"},{"href":"/api/types/interface/ConstraintsConfig","label":"ConstraintsConfig","type":"link"},{"href":"/api/types/interface/DenoConfig","label":"DenoConfig","type":"link"},{"href":"/api/types/interface/DependencyConfig","label":"DependencyConfig","type":"link"},{"href":"/api/types/interface/Duration","label":"Duration","type":"link"},{"href":"/api/types/interface/EventActionFinished","label":"EventActionFinished","type":"link"},{"href":"/api/types/interface/EventActionStarted","label":"EventActionStarted","type":"link"},{"href":"/api/types/interface/EventDependenciesInstalled","label":"EventDependenciesInstalled","type":"link"},{"href":"/api/types/interface/EventDependenciesInstalling","label":"EventDependenciesInstalling","type":"link"},{"href":"/api/types/interface/EventPipelineAborted","label":"EventPipelineAborted","type":"link"},{"href":"/api/types/interface/EventPipelineFinished","label":"EventPipelineFinished","type":"link"},{"href":"/api/types/interface/EventPipelineStarted","label":"EventPipelineStarted","type":"link"},{"href":"/api/types/interface/EventProjectSynced","label":"EventProjectSynced","type":"link"},{"href":"/api/types/interface/EventProjectSyncing","label":"EventProjectSyncing","type":"link"},{"href":"/api/types/interface/EventTargetOutputArchived","label":"EventTargetOutputArchived","type":"link"},{"href":"/api/types/interface/EventTargetOutputArchiving","label":"EventTargetOutputArchiving","type":"link"},{"href":"/api/types/interface/EventTargetOutputCacheCheck","label":"EventTargetOutputCacheCheck","type":"link"},{"href":"/api/types/interface/EventTargetOutputHydrated","label":"EventTargetOutputHydrated","type":"link"},{"href":"/api/types/interface/EventTargetOutputHydrating","label":"EventTargetOutputHydrating","type":"link"},{"href":"/api/types/interface/EventTargetRan","label":"EventTargetRan","type":"link"},{"href":"/api/types/interface/EventTargetRunning","label":"EventTargetRunning","type":"link"},{"href":"/api/types/interface/EventToolInstalled","label":"EventToolInstalled","type":"link"},{"href":"/api/types/interface/EventToolInstalling","label":"EventToolInstalling","type":"link"},{"href":"/api/types/interface/EventWorkspaceSynced","label":"EventWorkspaceSynced","type":"link"},{"href":"/api/types/interface/ExperimentsConfig","label":"ExperimentsConfig","type":"link"},{"href":"/api/types/interface/FileGroup","label":"FileGroup","type":"link"},{"href":"/api/types/interface/GeneratorConfig","label":"GeneratorConfig","type":"link"},{"href":"/api/types/interface/HasherConfig","label":"HasherConfig","type":"link"},{"href":"/api/types/interface/InheritedTasksConfig","label":"InheritedTasksConfig","type":"link"},{"href":"/api/types/interface/NodeConfig","label":"NodeConfig","type":"link"},{"href":"/api/types/interface/NotifierConfig","label":"NotifierConfig","type":"link"},{"href":"/api/types/interface/NpmConfig","label":"NpmConfig","type":"link"},{"href":"/api/types/interface/OwnersConfig","label":"OwnersConfig","type":"link"},{"href":"/api/types/interface/PartialBinConfig","label":"PartialBinConfig","type":"link"},{"href":"/api/types/interface/PartialCodeownersConfig","label":"PartialCodeownersConfig","type":"link"},{"href":"/api/types/interface/PartialConstraintsConfig","label":"PartialConstraintsConfig","type":"link"},{"href":"/api/types/interface/PartialDenoConfig","label":"PartialDenoConfig","type":"link"},{"href":"/api/types/interface/PartialDependencyConfig","label":"PartialDependencyConfig","type":"link"},{"href":"/api/types/interface/PartialExperimentsConfig","label":"PartialExperimentsConfig","type":"link"},{"href":"/api/types/interface/PartialGeneratorConfig","label":"PartialGeneratorConfig","type":"link"},{"href":"/api/types/interface/PartialHasherConfig","label":"PartialHasherConfig","type":"link"},{"href":"/api/types/interface/PartialInheritedTasksConfig","label":"PartialInheritedTasksConfig","type":"link"},{"href":"/api/types/interface/PartialNodeConfig","label":"PartialNodeConfig","type":"link"},{"href":"/api/types/interface/PartialNotifierConfig","label":"PartialNotifierConfig","type":"link"},{"href":"/api/types/interface/PartialNpmConfig","label":"PartialNpmConfig","type":"link"},{"href":"/api/types/interface/PartialOwnersConfig","label":"PartialOwnersConfig","type":"link"},{"href":"/api/types/interface/PartialPnpmConfig","label":"PartialPnpmConfig","type":"link"},{"href":"/api/types/interface/PartialProjectConfig","label":"PartialProjectConfig","type":"link"},{"href":"/api/types/interface/PartialProjectMetadataConfig","label":"PartialProjectMetadataConfig","type":"link"},{"href":"/api/types/interface/PartialProjectToolchainCommonToolConfig","label":"PartialProjectToolchainCommonToolConfig","type":"link"},{"href":"/api/types/interface/PartialProjectToolchainConfig","label":"PartialProjectToolchainConfig","type":"link"},{"href":"/api/types/interface/PartialProjectToolchainTypeScriptConfig","label":"PartialProjectToolchainTypeScriptConfig","type":"link"},{"href":"/api/types/interface/PartialProjectWorkspaceConfig","label":"PartialProjectWorkspaceConfig","type":"link"},{"href":"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig","label":"PartialProjectWorkspaceInheritedTasksConfig","type":"link"},{"href":"/api/types/interface/PartialRunnerConfig","label":"PartialRunnerConfig","type":"link"},{"href":"/api/types/interface/PartialRustConfig","label":"PartialRustConfig","type":"link"},{"href":"/api/types/interface/PartialTaskConfig","label":"PartialTaskConfig","type":"link"},{"href":"/api/types/interface/PartialTaskOptionsConfig","label":"PartialTaskOptionsConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateConfig","label":"PartialTemplateConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateFrontmatterConfig","label":"PartialTemplateFrontmatterConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableBoolSetting","label":"PartialTemplateVariableBoolSetting","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableEnumSetting","label":"PartialTemplateVariableEnumSetting","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableEnumValueConfig","label":"PartialTemplateVariableEnumValueConfig","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableNumberSetting","label":"PartialTemplateVariableNumberSetting","type":"link"},{"href":"/api/types/interface/PartialTemplateVariableStringSetting","label":"PartialTemplateVariableStringSetting","type":"link"},{"href":"/api/types/interface/PartialToolchainConfig","label":"PartialToolchainConfig","type":"link"},{"href":"/api/types/interface/PartialTypeScriptConfig","label":"PartialTypeScriptConfig","type":"link"},{"href":"/api/types/interface/PartialVcsConfig","label":"PartialVcsConfig","type":"link"},{"href":"/api/types/interface/PartialWorkspaceConfig","label":"PartialWorkspaceConfig","type":"link"},{"href":"/api/types/interface/PartialWorkspaceProjectsConfig","label":"PartialWorkspaceProjectsConfig","type":"link"},{"href":"/api/types/interface/PartialYarnConfig","label":"PartialYarnConfig","type":"link"},{"href":"/api/types/interface/PnpmConfig","label":"PnpmConfig","type":"link"},{"href":"/api/types/interface/Project","label":"Project","type":"link"},{"href":"/api/types/interface/ProjectConfig","label":"ProjectConfig","type":"link"},{"href":"/api/types/interface/ProjectMetadataConfig","label":"ProjectMetadataConfig","type":"link"},{"href":"/api/types/interface/ProjectToolchainCommonToolConfig","label":"ProjectToolchainCommonToolConfig","type":"link"},{"href":"/api/types/interface/ProjectToolchainConfig","label":"ProjectToolchainConfig","type":"link"},{"href":"/api/types/interface/ProjectToolchainTypeScriptConfig","label":"ProjectToolchainTypeScriptConfig","type":"link"},{"href":"/api/types/interface/ProjectWorkspaceConfig","label":"ProjectWorkspaceConfig","type":"link"},{"href":"/api/types/interface/ProjectWorkspaceInheritedTasksConfig","label":"ProjectWorkspaceInheritedTasksConfig","type":"link"},{"href":"/api/types/interface/ProviderEnvironment","label":"ProviderEnvironment","type":"link"},{"href":"/api/types/interface/RunReport","label":"RunReport","type":"link"},{"href":"/api/types/interface/RunnerConfig","label":"RunnerConfig","type":"link"},{"href":"/api/types/interface/Runtime","label":"Runtime","type":"link"},{"href":"/api/types/interface/RustConfig","label":"RustConfig","type":"link"},{"href":"/api/types/interface/TargetState","label":"TargetState","type":"link"},{"href":"/api/types/interface/Task","label":"Task","type":"link"},{"href":"/api/types/interface/TaskConfig","label":"TaskConfig","type":"link"},{"href":"/api/types/interface/TaskOptions","label":"TaskOptions","type":"link"},{"href":"/api/types/interface/TaskOptionsConfig","label":"TaskOptionsConfig","type":"link"},{"href":"/api/types/interface/TemplateConfig","label":"TemplateConfig","type":"link"},{"href":"/api/types/interface/TemplateFrontmatterConfig","label":"TemplateFrontmatterConfig","type":"link"},{"href":"/api/types/interface/TemplateVariableBoolSetting","label":"TemplateVariableBoolSetting","type":"link"},{"href":"/api/types/interface/TemplateVariableEnumSetting","label":"TemplateVariableEnumSetting","type":"link"},{"href":"/api/types/interface/TemplateVariableEnumValueConfig","label":"TemplateVariableEnumValueConfig","type":"link"},{"href":"/api/types/interface/TemplateVariableNumberSetting","label":"TemplateVariableNumberSetting","type":"link"},{"href":"/api/types/interface/TemplateVariableStringSetting","label":"TemplateVariableStringSetting","type":"link"},{"href":"/api/types/interface/ToolchainConfig","label":"ToolchainConfig","type":"link"},{"href":"/api/types/interface/TypeScriptConfig","label":"TypeScriptConfig","type":"link"},{"href":"/api/types/interface/VcsConfig","label":"VcsConfig","type":"link"},{"href":"/api/types/interface/WebhookPayload","label":"WebhookPayload","type":"link"},{"href":"/api/types/interface/WorkspaceConfig","label":"WorkspaceConfig","type":"link"},{"href":"/api/types/interface/WorkspaceProjectsConfig","label":"WorkspaceProjectsConfig","type":"link"},{"href":"/api/types/interface/YarnConfig","label":"YarnConfig","type":"link"}],"label":"Interfaces","type":"category"},{"collapsed":true,"collapsible":true,"items":[{"href":"/api/types#ActionNode","label":"ActionNode","type":"link"},{"href":"/api/types#ActionStatus","label":"ActionStatus","type":"link"},{"href":"/api/types#BinEntry","label":"BinEntry","type":"link"},{"href":"/api/types#CodeownersOrderBy","label":"CodeownersOrderBy","type":"link"},{"href":"/api/types#DependencyScope","label":"DependencyScope","type":"link"},{"href":"/api/types#DependencySource","label":"DependencySource","type":"link"},{"href":"/api/types#EventType","label":"EventType","type":"link"},{"href":"/api/types#HasherOptimization","label":"HasherOptimization","type":"link"},{"href":"/api/types#HasherWalkStrategy","label":"HasherWalkStrategy","type":"link"},{"href":"/api/types#LanguageType","label":"LanguageType","type":"link"},{"href":"/api/types#NodePackageManager","label":"NodePackageManager","type":"link"},{"href":"/api/types#NodeProjectAliasFormat","label":"NodeProjectAliasFormat","type":"link"},{"href":"/api/types#NodeVersionFormat","label":"NodeVersionFormat","type":"link"},{"href":"/api/types#NodeVersionManager","label":"NodeVersionManager","type":"link"},{"href":"/api/types#Nullable","label":"Nullable","type":"link"},{"href":"/api/types#OwnersPaths","label":"OwnersPaths","type":"link"},{"href":"/api/types#PartialBinEntry","label":"PartialBinEntry","type":"link"},{"href":"/api/types#PartialOwnersPaths","label":"PartialOwnersPaths","type":"link"},{"href":"/api/types#PartialProjectDependsOn","label":"PartialProjectDependsOn","type":"link"},{"href":"/api/types#PartialTaskCommandArgs","label":"PartialTaskCommandArgs","type":"link"},{"href":"/api/types#PartialTemplateVariable","label":"PartialTemplateVariable","type":"link"},{"href":"/api/types#PartialTemplateVariableEnumValue","label":"PartialTemplateVariableEnumValue","type":"link"},{"href":"/api/types#PartialWorkspaceProjects","label":"PartialWorkspaceProjects","type":"link"},{"href":"/api/types#PayloadActionFinished","label":"PayloadActionFinished","type":"link"},{"href":"/api/types#PayloadActionStarted","label":"PayloadActionStarted","type":"link"},{"href":"/api/types#PayloadDependenciesInstalled","label":"PayloadDependenciesInstalled","type":"link"},{"href":"/api/types#PayloadDependenciesInstalling","label":"PayloadDependenciesInstalling","type":"link"},{"href":"/api/types#PayloadPipelineAborted","label":"PayloadPipelineAborted","type":"link"},{"href":"/api/types#PayloadPipelineFinished","label":"PayloadPipelineFinished","type":"link"},{"href":"/api/types#PayloadPipelineStarted","label":"PayloadPipelineStarted","type":"link"},{"href":"/api/types#PayloadProjectSynced","label":"PayloadProjectSynced","type":"link"},{"href":"/api/types#PayloadProjectSyncing","label":"PayloadProjectSyncing","type":"link"},{"href":"/api/types#PayloadTargetOutputArchived","label":"PayloadTargetOutputArchived","type":"link"},{"href":"/api/types#PayloadTargetOutputArchiving","label":"PayloadTargetOutputArchiving","type":"link"},{"href":"/api/types#PayloadTargetOutputCacheCheck","label":"PayloadTargetOutputCacheCheck","type":"link"},{"href":"/api/types#PayloadTargetOutputHydrated","label":"PayloadTargetOutputHydrated","type":"link"},{"href":"/api/types#PayloadTargetOutputHydrating","label":"PayloadTargetOutputHydrating","type":"link"},{"href":"/api/types#PayloadTargetRan","label":"PayloadTargetRan","type":"link"},{"href":"/api/types#PayloadTargetRunning","label":"PayloadTargetRunning","type":"link"},{"href":"/api/types#PayloadToolInstalled","label":"PayloadToolInstalled","type":"link"},{"href":"/api/types#PayloadToolInstalling","label":"PayloadToolInstalling","type":"link"},{"href":"/api/types#PayloadWorkspaceSynced","label":"PayloadWorkspaceSynced","type":"link"},{"href":"/api/types#PayloadWorkspaceSyncing","label":"PayloadWorkspaceSyncing","type":"link"},{"href":"/api/types#PlatformType","label":"PlatformType","type":"link"},{"href":"/api/types#ProjectDependsOn","label":"ProjectDependsOn","type":"link"},{"href":"/api/types#ProjectType","label":"ProjectType","type":"link"},{"href":"/api/types#TaskCommandArgs","label":"TaskCommandArgs","type":"link"},{"href":"/api/types#TaskMergeStrategy","label":"TaskMergeStrategy","type":"link"},{"href":"/api/types#TaskOptionAffectedFiles","label":"TaskOptionAffectedFiles","type":"link"},{"href":"/api/types#TaskOptionEnvFile","label":"TaskOptionEnvFile","type":"link"},{"href":"/api/types#TaskOutputStyle","label":"TaskOutputStyle","type":"link"},{"href":"/api/types#TaskType","label":"TaskType","type":"link"},{"href":"/api/types#TemplateVariable","label":"TemplateVariable","type":"link"},{"href":"/api/types#TemplateVariableEnumValue","label":"TemplateVariableEnumValue","type":"link"},{"href":"/api/types#VcsManager","label":"VcsManager","type":"link"},{"href":"/api/types#VcsProvider","label":"VcsProvider","type":"link"},{"href":"/api/types#WorkspaceProjects","label":"WorkspaceProjects","type":"link"}],"label":"Type Aliases","type":"category"}],"label":"@moonrepo/types","type":"category"}]},"isLast":true,"label":"Next","noIndex":false,"pluginId":"default","version":"current"}')}}]); \ No newline at end of file diff --git a/assets/js/f41d5eb1.13081022.js b/assets/js/f41d5eb1.13081022.js new file mode 100644 index 00000000000..e023090e27d --- /dev/null +++ b/assets/js/f41d5eb1.13081022.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52201],{94476:e=>{e.exports=JSON.parse('{"title":"Editors","keywords":["editors","vscode"],"slug":"/editors","permalink":"/docs/editors","navigation":{"previous":{"title":"template.yml","permalink":"/docs/config/template"},"next":{"title":"VS Code","permalink":"/docs/editors/vscode"}}}')}}]); \ No newline at end of file diff --git a/assets/js/f41d5eb1.fcf9ad12.js b/assets/js/f41d5eb1.fcf9ad12.js deleted file mode 100644 index ae54d736a83..00000000000 --- a/assets/js/f41d5eb1.fcf9ad12.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2201],{94476:e=>{e.exports=JSON.parse('{"title":"Editors","keywords":["editors","vscode"],"slug":"/editors","permalink":"/docs/editors","navigation":{"previous":{"title":"template.yml","permalink":"/docs/config/template"},"next":{"title":"VS Code","permalink":"/docs/editors/vscode"}}}')}}]); \ No newline at end of file diff --git a/assets/js/f440db1d.1bcc53dd.js b/assets/js/f440db1d.1bcc53dd.js deleted file mode 100644 index 6212f8a467b..00000000000 --- a/assets/js/f440db1d.1bcc53dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3535],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||a;return n?r.createElement(g,l(l({ref:t},u),{},{components:n})):r.createElement(g,l({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(83469),a=n(9619);function l(e){let{text:t}=e;return r.createElement(a.Z,{text:t,icon:o.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(40624),a=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),i)}},10528:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var r=n(25773),o=(n(27378),n(35318)),a=n(27915);const l={title:"Install proto"},i=void 0,s={unversionedId:"proto/install",id:"proto/install",title:"Install proto",description:"The following guide can be used to install proto into your environment.",source:"@site/docs/proto/install.mdx",sourceDirName:"proto",slug:"/proto/install",permalink:"/docs/proto/install",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/install.mdx",tags:[],version:"current",frontMatter:{title:"Install proto"},sidebar:"proto",previous:{title:"What is proto?",permalink:"/docs/proto/"},next:{title:"Version detection",permalink:"/docs/proto/detection"}},p={},u=[{value:"Requirements",id:"requirements",level:2},{value:"Installing",id:"installing",level:2},{value:"Linux, macOS, WSL",id:"linux-macos-wsl",level:3},{value:"Windows",id:"windows",level:3},{value:"Other",id:"other",level:3},{value:"Upgrading",id:"upgrading",level:2},{value:"Uninstalling",id:"uninstalling",level:2}],c={toc:u};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{text:"1 min",mdxType:"HeaderLabel"}),(0,o.kt)("p",null,"The following guide can be used to install proto into your environment."),(0,o.kt)("h2",{id:"requirements"},"Requirements"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Git >= 2.22")),(0,o.kt)("h2",{id:"installing"},"Installing"),(0,o.kt)("p",null,"The entirety of proto is packaged and shipped as a single binary. It works on ",(0,o.kt)("em",{parentName:"p"},"most")," operating\nsystems, and does not require any external dependencies. For convenience, we provide the following\nscripts to download and install proto."),(0,o.kt)("h3",{id:"linux-macos-wsl"},"Linux, macOS, WSL"),(0,o.kt)("p",null,"In a terminal that supports Bash, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"curl -fsSL https://moonrepo.dev/install/proto.sh | bash\n")),(0,o.kt)("h3",{id:"windows"},"Windows"),(0,o.kt)("p",null,"In an ",(0,o.kt)("em",{parentName:"p"},"administrator")," Powershell or Windows Terminal, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"irm https://moonrepo.dev/install/proto.ps1 | iex\n")),(0,o.kt)("p",null,"You'll also need to run the following command for shims to be executable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"Set-ExecutionPolicy RemoteSigned\n\n# Without admin privileges\nSet-ExecutionPolicy -Scope CurrentUser RemoteSigned\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Windows support is currently experimental. Please report any issues!")),(0,o.kt)("h3",{id:"other"},"Other"),(0,o.kt)("p",null,"proto can also be downloaded and installed manually, by downloading an asset from\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases"},"https://github.com/moonrepo/proto/releases"),". Be sure to\nrename the file after downloading, and apply the executable bit (",(0,o.kt)("inlineCode",{parentName:"p"},"chmod +x"),") on macOS and Linux."),(0,o.kt)("h2",{id:"upgrading"},"Upgrading"),(0,o.kt)("p",null,"To upgrade proto, run the ",(0,o.kt)("a",{parentName:"p",href:"./commands/upgrade"},(0,o.kt)("inlineCode",{parentName:"a"},"proto upgrade"))," command, or re-run the install\nscripts above."),(0,o.kt)("h2",{id:"uninstalling"},"Uninstalling"),(0,o.kt)("p",null,"To uninstall proto, delete the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto")," directory, and remove any ",(0,o.kt)("inlineCode",{parentName:"p"},"PROTO_HOME")," references from\nyour shell profile."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f440db1d.23661477.js b/assets/js/f440db1d.23661477.js new file mode 100644 index 00000000000..ae1c13c4522 --- /dev/null +++ b/assets/js/f440db1d.23661477.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20984],{35318:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||a;return n?r.createElement(g,l(l({ref:t},u),{},{components:n})):r.createElement(g,l({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},27915:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),o=n(83469),a=n(9619);function l(e){let{text:t}=e;return r.createElement(a.Z,{text:t,icon:o.SZw,variant:"success",className:"absolute right-0 top-1.5"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(27378),o=n(40624),a=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function i(e){let{className:t,icon:n,text:i,variant:s}=e;return r.createElement("span",{className:(0,o.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&r.createElement(a.Z,{icon:n,className:"mr-1"}),i)}},10528:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var r=n(25773),o=(n(27378),n(35318)),a=n(27915);const l={title:"Install proto"},i=void 0,s={unversionedId:"proto/install",id:"proto/install",title:"Install proto",description:"The following guide can be used to install proto into your environment.",source:"@site/docs/proto/install.mdx",sourceDirName:"proto",slug:"/proto/install",permalink:"/docs/proto/install",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/install.mdx",tags:[],version:"current",frontMatter:{title:"Install proto"},sidebar:"proto",previous:{title:"What is proto?",permalink:"/docs/proto/"},next:{title:"Version detection",permalink:"/docs/proto/detection"}},p={},u=[{value:"Requirements",id:"requirements",level:2},{value:"Installing",id:"installing",level:2},{value:"Linux, macOS, WSL",id:"linux-macos-wsl",level:3},{value:"Windows",id:"windows",level:3},{value:"Other",id:"other",level:3},{value:"Upgrading",id:"upgrading",level:2},{value:"Uninstalling",id:"uninstalling",level:2}],c={toc:u};function d(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(a.Z,{text:"1 min",mdxType:"HeaderLabel"}),(0,o.kt)("p",null,"The following guide can be used to install proto into your environment."),(0,o.kt)("h2",{id:"requirements"},"Requirements"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Git >= 2.22")),(0,o.kt)("h2",{id:"installing"},"Installing"),(0,o.kt)("p",null,"The entirety of proto is packaged and shipped as a single binary. It works on ",(0,o.kt)("em",{parentName:"p"},"most")," operating\nsystems, and does not require any external dependencies. For convenience, we provide the following\nscripts to download and install proto."),(0,o.kt)("h3",{id:"linux-macos-wsl"},"Linux, macOS, WSL"),(0,o.kt)("p",null,"In a terminal that supports Bash, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"curl -fsSL https://moonrepo.dev/install/proto.sh | bash\n")),(0,o.kt)("h3",{id:"windows"},"Windows"),(0,o.kt)("p",null,"In an ",(0,o.kt)("em",{parentName:"p"},"administrator")," Powershell or Windows Terminal, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"irm https://moonrepo.dev/install/proto.ps1 | iex\n")),(0,o.kt)("p",null,"You'll also need to run the following command for shims to be executable:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"Set-ExecutionPolicy RemoteSigned\n\n# Without admin privileges\nSet-ExecutionPolicy -Scope CurrentUser RemoteSigned\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Windows support is currently experimental. Please report any issues!")),(0,o.kt)("h3",{id:"other"},"Other"),(0,o.kt)("p",null,"proto can also be downloaded and installed manually, by downloading an asset from\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/proto/releases"},"https://github.com/moonrepo/proto/releases"),". Be sure to\nrename the file after downloading, and apply the executable bit (",(0,o.kt)("inlineCode",{parentName:"p"},"chmod +x"),") on macOS and Linux."),(0,o.kt)("h2",{id:"upgrading"},"Upgrading"),(0,o.kt)("p",null,"To upgrade proto, run the ",(0,o.kt)("a",{parentName:"p",href:"./commands/upgrade"},(0,o.kt)("inlineCode",{parentName:"a"},"proto upgrade"))," command, or re-run the install\nscripts above."),(0,o.kt)("h2",{id:"uninstalling"},"Uninstalling"),(0,o.kt)("p",null,"To uninstall proto, delete the ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.proto")," directory, and remove any ",(0,o.kt)("inlineCode",{parentName:"p"},"PROTO_HOME")," references from\nyour shell profile."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f5b890ba.5a58db70.js b/assets/js/f5b890ba.5a58db70.js new file mode 100644 index 00000000000..b9bf85e8690 --- /dev/null +++ b/assets/js/f5b890ba.5a58db70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16502],{61762:e=>{e.exports=JSON.parse('{"label":"survey","permalink":"/blog/tags/survey","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/f5b890ba.98d7c669.js b/assets/js/f5b890ba.98d7c669.js deleted file mode 100644 index f72c3487fb9..00000000000 --- a/assets/js/f5b890ba.98d7c669.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6502],{61762:e=>{e.exports=JSON.parse('{"label":"survey","permalink":"/blog/tags/survey","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/f5f247cc.917d67ad.js b/assets/js/f5f247cc.917d67ad.js new file mode 100644 index 00000000000..3c412d6edcd --- /dev/null +++ b/assets/js/f5f247cc.917d67ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21258],{21083:e=>{e.exports=JSON.parse('{"label":"owners","permalink":"/blog/tags/owners","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/f5f247cc.966aced7.js b/assets/js/f5f247cc.966aced7.js deleted file mode 100644 index 9cd5d585a58..00000000000 --- a/assets/js/f5f247cc.966aced7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1258],{21083:e=>{e.exports=JSON.parse('{"label":"owners","permalink":"/blog/tags/owners","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/f616eec2.4eee968e.js b/assets/js/f616eec2.4eee968e.js new file mode 100644 index 00000000000..9395cfa2c38 --- /dev/null +++ b/assets/js/f616eec2.4eee968e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[79357],{35318:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>h});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var f=r.createContext({}),c=function(e){var t=r.useContext(f),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=c(e.components);return r.createElement(f.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,f=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,p=u["".concat(f,".").concat(h)]||u[h]||d[h]||i;return n?r.createElement(p,o(o({ref:t},l),{},{components:n})):r.createElement(p,o({ref:t},l))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var s={};for(var f in t)hasOwnProperty.call(t,f)&&(s[f]=t[f]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var c=2;c<i;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},99075:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318));const i={title:"query hash-diff",sidebar_label:"hash-diff"},o=void 0,s={unversionedId:"commands/query/hash-diff",id:"commands/query/hash-diff",title:"query hash-diff",description:"Use the moon query hash-diff sub-command to query the content and source differences between 2",source:"@site/docs/commands/query/hash-diff.mdx",sourceDirName:"commands/query",slug:"/commands/query/hash-diff",permalink:"/docs/commands/query/hash-diff",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/hash-diff.mdx",tags:[],version:"current",frontMatter:{title:"query hash-diff",sidebar_label:"hash-diff"},sidebar:"docs",previous:{title:"hash",permalink:"/docs/commands/query/hash"},next:{title:"projects",permalink:"/docs/commands/query/projects"}},f={},c=[{value:"Options",id:"options",level:3}],l={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query hash-diff")," sub-command to query the content and source differences between 2\ngenerated hashes. This is extremely useful in debugging task inputs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# Diff between 2 hashes\n$ moon query hash-diff 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171\n\n# Diff between 2 hashes using short form\n$ moon query hash-diff 0b55b234 2388552f\n")),(0,a.kt)("p",null,"By default, this will output the contents of a hash file (which is JSON), highlighting the\ndifferences between the left and right hashes. Lines that match will be printed in white, while the\nleft differences printed in green, and right differences printed in red. If you use ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff"),", this\nwill feel familiar to you."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-diff"},'Left: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\nRight: 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171\n\n{\n "command": "build",\n "args": [\n+ "./dist"\n- "./build"\n ],\n ...\n}\n')),(0,a.kt)("p",null,"The differences can also be output in JSON by passing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the\nfollowing structure:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"{\n left: string,\n left_hash: string,\n left_diffs: string[],\n right: string,\n right_hash: string,\n right_diffs: string[],\n}\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the manifest in JSON format.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f616eec2.eda63aa1.js b/assets/js/f616eec2.eda63aa1.js deleted file mode 100644 index ad0ed41fc9c..00000000000 --- a/assets/js/f616eec2.eda63aa1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9357],{35318:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>h});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var f=r.createContext({}),c=function(e){var t=r.useContext(f),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=c(e.components);return r.createElement(f.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,f=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,p=u["".concat(f,".").concat(h)]||u[h]||d[h]||i;return n?r.createElement(p,o(o({ref:t},l),{},{components:n})):r.createElement(p,o({ref:t},l))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var s={};for(var f in t)hasOwnProperty.call(t,f)&&(s[f]=t[f]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var c=2;c<i;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},99075:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318));const i={title:"query hash-diff",sidebar_label:"hash-diff"},o=void 0,s={unversionedId:"commands/query/hash-diff",id:"commands/query/hash-diff",title:"query hash-diff",description:"Use the moon query hash-diff sub-command to query the content and source differences between 2",source:"@site/docs/commands/query/hash-diff.mdx",sourceDirName:"commands/query",slug:"/commands/query/hash-diff",permalink:"/docs/commands/query/hash-diff",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/query/hash-diff.mdx",tags:[],version:"current",frontMatter:{title:"query hash-diff",sidebar_label:"hash-diff"},sidebar:"docs",previous:{title:"hash",permalink:"/docs/commands/query/hash"},next:{title:"projects",permalink:"/docs/commands/query/projects"}},f={},c=[{value:"Options",id:"options",level:3}],l={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"moon query hash-diff")," sub-command to query the content and source differences between 2\ngenerated hashes. This is extremely useful in debugging task inputs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# Diff between 2 hashes\n$ moon query hash-diff 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171\n\n# Diff between 2 hashes using short form\n$ moon query hash-diff 0b55b234 2388552f\n")),(0,a.kt)("p",null,"By default, this will output the contents of a hash file (which is JSON), highlighting the\ndifferences between the left and right hashes. Lines that match will be printed in white, while the\nleft differences printed in green, and right differences printed in red. If you use ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff"),", this\nwill feel familiar to you."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-diff"},'Left: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde\nRight: 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171\n\n{\n "command": "build",\n "args": [\n+ "./dist"\n- "./build"\n ],\n ...\n}\n')),(0,a.kt)("p",null,"The differences can also be output in JSON by passing the ",(0,a.kt)("inlineCode",{parentName:"p"},"--json")," flag. The output has the\nfollowing structure:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-ts"},"{\n left: string,\n left_hash: string,\n left_diffs: string[],\n right: string,\n right_hash: string,\n right_diffs: string[],\n}\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"--json")," - Display the manifest in JSON format.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f714495d.32dec193.js b/assets/js/f714495d.32dec193.js new file mode 100644 index 00000000000..5532de2e032 --- /dev/null +++ b/assets/js/f714495d.32dec193.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60026],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,m=r(e,["components","mdxType","originalType","parentName"]),d=p(n),u=i,h=d["".concat(s,".").concat(u)]||d[u]||c[u]||o;return n?a.createElement(h,l(l({ref:t},m),{},{components:n})):a.createElement(h,l({ref:t},m))}));function u(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=d;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r.mdxType="string"==typeof e?e:i,l[1]=r;for(var p=2;p<o;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},26648:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={title:"TOML plugin",sidebar_label:"TOML",toc_max_heading_level:5},l=void 0,r={unversionedId:"proto/toml-plugin",id:"proto/toml-plugin",title:"TOML plugin",description:"The TOML plugin is by design, very simple. It's a TOML file that describes a schema for the tool,",source:"@site/docs/proto/toml-plugin.mdx",sourceDirName:"proto",slug:"/proto/toml-plugin",permalink:"/docs/proto/toml-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/toml-plugin.mdx",tags:[],version:"current",frontMatter:{title:"TOML plugin",sidebar_label:"TOML",toc_max_heading_level:5},sidebar:"proto",previous:{title:"Plugins",permalink:"/docs/proto/plugins"},next:{title:"WASM",permalink:"/docs/proto/wasm-plugin"}},s={},p=[{value:"Create a plugin",id:"create-a-plugin",level:2},{value:"Platform variations",id:"platform-variations",level:3},{value:"Downloading and installing",id:"downloading-and-installing",level:3},{value:"Global packages",id:"global-packages",level:4},{value:"Resolving versions",id:"resolving-versions",level:3},{value:"Git tags",id:"git-tags",level:4},{value:"JSON manifest",id:"json-manifest",level:4},{value:"Detecting versions",id:"detecting-versions",level:3}],m={toc:p};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The TOML plugin is by design, very simple. It's a TOML file that describes a schema for the tool,\nhow it should be installed, and how it should be invoked. Since this is a static configuration file,\nit does not support any logic or complex behavior, and is merely for simple and common use cases,\nlike CLIs."),(0,i.kt)("h2",{id:"create-a-plugin"},"Create a plugin"),(0,i.kt)("p",null,"Let's start by creating a new plugin, and defining the ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"type")," fields. The type can either\nbe ",(0,i.kt)("inlineCode",{parentName:"p"},"language"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"dependency-manager"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"package-manager"),", or ",(0,i.kt)("inlineCode",{parentName:"p"},"cli"),". For this example, we'll create a\nplugin for our fake product called Protostar, a CLI tool."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'name = "Protostar"\ntype = "cli"\n')),(0,i.kt)("h3",{id:"platform-variations"},"Platform variations"),(0,i.kt)("p",null,"Native tools are often platform specific, and proto supports this by allowing you to define\nvariations based on operating system using the ",(0,i.kt)("inlineCode",{parentName:"p"},"[platform]")," section. For non-native tools, this\nsection can typically be skipped."),(0,i.kt)("p",null,"This section requires a mapping of Rust\n",(0,i.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/env/consts/constant.OS.html"},(0,i.kt)("inlineCode",{parentName:"a"},"OS")," strings")," to platform settings. The\nfollowing settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"archive-prefix")," - If the tool is distributed as an archive (zip, tar, etc), this is the name of\nthe direct folder within the archive that contains the tool, and will be removed when unpacking\nthe archive. If there is no prefix folder within the archive, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"bin-path")," - The path to the executable binary within the archive (without the prefix). If the\ntool is distributed as a single binary, this setting can be typically omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-file")," - Name of the checksum file to verify the downloaded file with. If the tool does\nnot support checksum verification, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download-file")," (required) - Name of the file to download.\n",(0,i.kt)("a",{parentName:"li",href:"#downloading-and-installing"},"Learn more about downloading"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[platform.linux]\narchive-prefix = "protostar-linux"\nbin-path = "bins/protostar"\nchecksum-file = "protostar-{arch}-unknown-linux-{libc}.sha256"\ndownload-file = "protostar-{arch}-unknown-linux-{libc}.tar.gz"\n\n[platform.macos]\narchive-prefix = "protostar-macos"\nbin-path = "bins/protostar"\nchecksum-file = "protostar-{arch}-apple-darwin.sha256"\ndownload-file = "protostar-{arch}-apple-darwin.tar.xz"\n\n[platform.windows]\narchive-prefix = "protostar-windows"\nbin-path = "bins/protostar.exe"\nchecksum-file = "protostar-{arch}-pc-windows-msvc.sha256"\ndownload-file = "protostar-{arch}-pc-windows-msvc.zip"\n')),(0,i.kt)("p",null,"You may have noticed tokens above, like ",(0,i.kt)("inlineCode",{parentName:"p"},"{arch}"),". These are special tokens that are replaced with a\ndynamic value at runtime, based on the current host machine executing the code. The following tokens\nare available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{version}")," - The currently resolved version, as a fully-qualifed semantic version:\n",(0,i.kt)("inlineCode",{parentName:"li"},"major.minor.patch"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{arch}")," - The architecture of the host machine, like ",(0,i.kt)("inlineCode",{parentName:"li"},"x86_64"),". These values map to Rust's\n",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/env/consts/constant.ARCH.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ARCH")," constant"),", but can be\ncustomized with ",(0,i.kt)("a",{parentName:"li",href:"#downloading-and-installing"},(0,i.kt)("inlineCode",{parentName:"a"},"install.arch")),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{os}")," - The operating system of the host machine, like ",(0,i.kt)("inlineCode",{parentName:"li"},"windows"),". These values map to Rust's\n",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/env/consts/constant.OS.html"},(0,i.kt)("inlineCode",{parentName:"a"},"OS")," constant"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{libc}")," - For Linux machines, this is the current libc implementation, either ",(0,i.kt)("inlineCode",{parentName:"li"},"gnu")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"musl"),".")),(0,i.kt)("h3",{id:"downloading-and-installing"},"Downloading and installing"),(0,i.kt)("p",null,"A TOML plugin ",(0,i.kt)("em",{parentName:"p"},"only")," supports downloading pre-built tools, typically as an archive, and does ",(0,i.kt)("em",{parentName:"p"},"not"),"\nsupport building from source. The ",(0,i.kt)("inlineCode",{parentName:"p"},"[install]")," section can be used to configure how the tool should\nbe downloaded and installed into the toolchain. The following settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"arch")," - A mapping of Rust\n",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/env/consts/constant.ARCH.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ARCH")," strings")," to custom values for\nthe ",(0,i.kt)("inlineCode",{parentName:"li"},"{arch}")," token. This is useful if the tool has different terminology."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-url")," - A secure URL to download the checksum file for verification. If the tool does not\nsupport checksum verification, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-url-canary")," - A URL for canary releases."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-public-key")," - Public key used for verifying checksums. Only used for ",(0,i.kt)("inlineCode",{parentName:"li"},".minisig")," files."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download-url")," (required) - A secure URL to download the tool/archive."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download-url-canary")," - A URL for canary releases.")),(0,i.kt)("p",null,"The URL settings support ",(0,i.kt)("inlineCode",{parentName:"p"},"{checksum_file}")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"{download_file}")," tokens, which will be replaced with\nthe values from the ",(0,i.kt)("inlineCode",{parentName:"p"},"[platform]")," section."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[install]\nchecksum-url = "https://github.com/moonrepo/protostar/releases/download/v{version}/{checksum_file}"\ndownload-url = "https://github.com/moonrepo/protostar/releases/download/v{version}/{download_file}"\n\n[install.arch]\naarch64 = "arm64"\nx86_64 = "x64"\n')),(0,i.kt)("h4",{id:"global-packages"},"Global packages"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"[globals]")," sections can be configured that dictates the installation of global binaries for the\ntool. If the tool does not support globals (is not a programming language), these settings can be\nomitted."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"lookup-dirs")," - A list of directories to locate and install the global binaries into. This setting\nsupports interpolating environment variables via the syntax ",(0,i.kt)("inlineCode",{parentName:"li"},"$ENV_VAR"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"install-args")," - A list of CLI arguments to pass to the tool to install a global binary. The name\nof the binary can be inserted using the ",(0,i.kt)("inlineCode",{parentName:"li"},"{dependency}")," token."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"uninstall-args")," - A list of CLI arguments to pass to the tool to uninstall a global binary. The\nname of the binary can be inserted using the ",(0,i.kt)("inlineCode",{parentName:"li"},"{dependency}")," token."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"package-prefix")," - A string that all package names are prefixed with. The prefix will be removed\nwhen filtering/listing packages. For example, Cargo/Rust binaries are prefixed wih ",(0,i.kt)("inlineCode",{parentName:"li"},"cargo-"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[globals]\nlookup-dirs = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]\ninstall-args = ["install", "--force", "{dependency}"]\nuninstall-args = ["uninstall", "{dependency}"]\n')),(0,i.kt)("h3",{id:"resolving-versions"},"Resolving versions"),(0,i.kt)("p",null,"Now that the tool can be downloaded and installed, we must configure how to resolve available\nversions. Resolving is configured through the ",(0,i.kt)("inlineCode",{parentName:"p"},"[resolve]")," section, which supports 2 patterns to\nresolve with: Git tags or a JSON manifest."),(0,i.kt)("h4",{id:"git-tags"},"Git tags"),(0,i.kt)("p",null,"To resolve a list of available versions using Git tags, the following settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"git-url")," - The remote URL to fetch tags from."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"git-tag-pattern")," - A regular expression to filter and match with. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"li"},"^v?((\\\\d+)\\\\.(\\\\d+)\\\\.(\\\\d+))"),". The capture group ",(0,i.kt)("inlineCode",{parentName:"li"},"1")," will be extracted as the version.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[resolve]\ngit-url = "https://github.com/moonrepo/protostar"\ngit-tag-pattern = "^@protostar/cli@((\\\\d+)\\\\.(\\\\d+)\\\\.(\\\\d+))"\n')),(0,i.kt)("h4",{id:"json-manifest"},"JSON manifest"),(0,i.kt)("p",null,"To resolve a list of available versions using a JSON manifest, the following settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"manifest-url")," - A URL that returns a JSON response of all versions. This response ",(0,i.kt)("em",{parentName:"li"},"must be")," an\narray of strings, or an array of objects."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"manifest-version-key")," - If the response is an array of objects, this is the key to extract the\nversion from. If the response is an array of strings, this setting can be omitted. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"li"},"version"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[resolve]\nmanifest-url = "https://someregistry.com/protostar/versions.json"\nmanifest-version-key = "latest_version"\n')),(0,i.kt)("h3",{id:"detecting-versions"},"Detecting versions"),(0,i.kt)("p",null,"And lastly, we can configure how to ",(0,i.kt)("a",{parentName:"p",href:"./detection"},"detect a version")," contextually at runtime, using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"[detect]")," setting. At this time, we only support 1 setting:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"version-files")," - A list of version files to extract from. The contents of these files can ",(0,i.kt)("em",{parentName:"li"},"only"),"\nbe the version string itself.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[detect]\nversion-files = [".protostar-version", ".protostarrc"]\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f714495d.9172398e.js b/assets/js/f714495d.9172398e.js deleted file mode 100644 index 2e3bb9cb3c7..00000000000 --- a/assets/js/f714495d.9172398e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var a=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,m=r(e,["components","mdxType","originalType","parentName"]),d=p(n),u=i,h=d["".concat(s,".").concat(u)]||d[u]||c[u]||o;return n?a.createElement(h,l(l({ref:t},m),{},{components:n})):a.createElement(h,l({ref:t},m))}));function u(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=d;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r.mdxType="string"==typeof e?e:i,l[1]=r;for(var p=2;p<o;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},26648:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>p});var a=n(25773),i=(n(27378),n(35318));const o={title:"TOML plugin",sidebar_label:"TOML",toc_max_heading_level:5},l=void 0,r={unversionedId:"proto/toml-plugin",id:"proto/toml-plugin",title:"TOML plugin",description:"The TOML plugin is by design, very simple. It's a TOML file that describes a schema for the tool,",source:"@site/docs/proto/toml-plugin.mdx",sourceDirName:"proto",slug:"/proto/toml-plugin",permalink:"/docs/proto/toml-plugin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/toml-plugin.mdx",tags:[],version:"current",frontMatter:{title:"TOML plugin",sidebar_label:"TOML",toc_max_heading_level:5},sidebar:"proto",previous:{title:"Plugins",permalink:"/docs/proto/plugins"},next:{title:"WASM",permalink:"/docs/proto/wasm-plugin"}},s={},p=[{value:"Create a plugin",id:"create-a-plugin",level:2},{value:"Platform variations",id:"platform-variations",level:3},{value:"Downloading and installing",id:"downloading-and-installing",level:3},{value:"Global packages",id:"global-packages",level:4},{value:"Resolving versions",id:"resolving-versions",level:3},{value:"Git tags",id:"git-tags",level:4},{value:"JSON manifest",id:"json-manifest",level:4},{value:"Detecting versions",id:"detecting-versions",level:3}],m={toc:p};function c(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The TOML plugin is by design, very simple. It's a TOML file that describes a schema for the tool,\nhow it should be installed, and how it should be invoked. Since this is a static configuration file,\nit does not support any logic or complex behavior, and is merely for simple and common use cases,\nlike CLIs."),(0,i.kt)("h2",{id:"create-a-plugin"},"Create a plugin"),(0,i.kt)("p",null,"Let's start by creating a new plugin, and defining the ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"type")," fields. The type can either\nbe ",(0,i.kt)("inlineCode",{parentName:"p"},"language"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"dependency-manager"),", or ",(0,i.kt)("inlineCode",{parentName:"p"},"cli"),". For this example, we'll create a plugin for our fake\nproduct called Protostar, a CLI tool."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'name = "Protostar"\ntype = "cli"\n')),(0,i.kt)("h3",{id:"platform-variations"},"Platform variations"),(0,i.kt)("p",null,"Native tools are often platform specific, and proto supports this by allowing you to define\nvariations based on operating system using the ",(0,i.kt)("inlineCode",{parentName:"p"},"[platform]")," section. For non-native tools, this\nsection can typically be skipped."),(0,i.kt)("p",null,"This section requires a mapping of Rust\n",(0,i.kt)("a",{parentName:"p",href:"https://doc.rust-lang.org/std/env/consts/constant.OS.html"},(0,i.kt)("inlineCode",{parentName:"a"},"OS")," strings")," to platform settings. The\nfollowing settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"archive-prefix")," - If the tool is distributed as an archive (zip, tar, etc), this is the name of\nthe direct folder within the archive that contains the tool, and will be removed when unpacking\nthe archive. If there is no prefix folder within the archive, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"bin-path")," - The path to the executable binary within the archive (without the prefix). If the\ntool is distributed as a single binary, this setting can be typically omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-file")," - Name of the checksum file to verify the downloaded file with. If the tool does\nnot support checksum verification, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download-file")," (required) - Name of the file to download.\n",(0,i.kt)("a",{parentName:"li",href:"#downloading-and-installing"},"Learn more about downloading"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[platform.linux]\narchive-prefix = "protostar-linux"\nbin-path = "bins/protostar"\nchecksum-file = "protostar-{arch}-unknown-linux-{libc}.sha256"\ndownload-file = "protostar-{arch}-unknown-linux-{libc}.tar.gz"\n\n[platform.macos]\narchive-prefix = "protostar-macos"\nbin-path = "bins/protostar"\nchecksum-file = "protostar-{arch}-apple-darwin.sha256"\ndownload-file = "protostar-{arch}-apple-darwin.tar.xz"\n\n[platform.windows]\narchive-prefix = "protostar-windows"\nbin-path = "bins/protostar.exe"\nchecksum-file = "protostar-{arch}-pc-windows-msvc.sha256"\ndownload-file = "protostar-{arch}-pc-windows-msvc.zip"\n')),(0,i.kt)("p",null,"You may have noticed tokens above, like ",(0,i.kt)("inlineCode",{parentName:"p"},"{arch}"),". These are special tokens that are replaced with a\ndynamic value at runtime, based on the current host machine executing the code. The following tokens\nare available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{version}")," - The currently resolved version, as a fully-qualifed semantic version:\n",(0,i.kt)("inlineCode",{parentName:"li"},"major.minor.patch"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{arch}")," - The architecture of the host machine, like ",(0,i.kt)("inlineCode",{parentName:"li"},"x86_64"),". These values map to Rust's\n",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/env/consts/constant.ARCH.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ARCH")," constant"),", but can be\ncustomized with ",(0,i.kt)("a",{parentName:"li",href:"#downloading-and-installing"},(0,i.kt)("inlineCode",{parentName:"a"},"install.arch")),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{os}")," - The operating system of the host machine, like ",(0,i.kt)("inlineCode",{parentName:"li"},"windows"),". These values map to Rust's\n",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/env/consts/constant.OS.html"},(0,i.kt)("inlineCode",{parentName:"a"},"OS")," constant"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"{libc}")," - For Linux machines, this is the current libc implementation, either ",(0,i.kt)("inlineCode",{parentName:"li"},"gnu")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"musl"),".")),(0,i.kt)("h3",{id:"downloading-and-installing"},"Downloading and installing"),(0,i.kt)("p",null,"A TOML plugin ",(0,i.kt)("em",{parentName:"p"},"only")," supports downloading pre-built tools, typically as an archive, and does ",(0,i.kt)("em",{parentName:"p"},"not"),"\nsupport building from source. The ",(0,i.kt)("inlineCode",{parentName:"p"},"[install]")," section can be used to configure how the tool should\nbe downloaded and installed into the toolchain. The following settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"arch")," - A mapping of Rust\n",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/env/consts/constant.ARCH.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ARCH")," strings")," to custom values for\nthe ",(0,i.kt)("inlineCode",{parentName:"li"},"{arch}")," token. This is useful if the tool has different terminology."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-url")," - A secure URL to download the checksum file for verification. If the tool does not\nsupport checksum verification, this setting can be omitted."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"checksum-url-canary")," - A URL for canary releases."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download-url")," (required) - A secure URL to download the tool/archive."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"download-url-canary")," - A URL for canary releases.")),(0,i.kt)("p",null,"The URL settings support ",(0,i.kt)("inlineCode",{parentName:"p"},"{checksum_file}")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"{download_file}")," tokens, which will be replaced with\nthe values from the ",(0,i.kt)("inlineCode",{parentName:"p"},"[platform]")," section."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[install]\nchecksum-url = "https://github.com/moonrepo/protostar/releases/download/v{version}/{checksum_file}"\ndownload-url = "https://github.com/moonrepo/protostar/releases/download/v{version}/{download_file}"\n\n[install.arch]\naarch64 = "arm64"\nx86_64 = "x64"\n')),(0,i.kt)("h4",{id:"global-packages"},"Global packages"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"[globals]")," sections can be configured that dictates the installation of global binaries for the\ntool. If the tool does not support globals (is not a programming language), these settings can be\nomitted."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"lookup-dirs")," - A list of directories to locate and install the global binaries into. This setting\nsupports interpolating environment variables via the syntax ",(0,i.kt)("inlineCode",{parentName:"li"},"$ENV_VAR"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"install-args")," - A list of CLI arguments to pass to the tool to install a global binary. The name\nof the binary can be inserted using the ",(0,i.kt)("inlineCode",{parentName:"li"},"{dependency}")," token."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"uninstall-args")," - A list of CLI arguments to pass to the tool to uninstall a global binary. The\nname of the binary can be inserted using the ",(0,i.kt)("inlineCode",{parentName:"li"},"{dependency}")," token."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"package-prefix")," - A string that all package names are prefixed with. The prefix will be removed\nwhen filtering/listing packages. For example, Cargo/Rust binaries are prefixed wih ",(0,i.kt)("inlineCode",{parentName:"li"},"cargo-"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[globals]\nlookup-dirs = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]\ninstall-args = ["install", "--force", "{dependency}"]\nuninstall-args = ["uninstall", "{dependency}"]\n')),(0,i.kt)("h3",{id:"resolving-versions"},"Resolving versions"),(0,i.kt)("p",null,"Now that the tool can be downloaded and installed, we must configure how to resolve available\nversions. Resolving is configured through the ",(0,i.kt)("inlineCode",{parentName:"p"},"[resolve]")," section, which supports 2 patterns to\nresolve with: Git tags or a JSON manifest."),(0,i.kt)("h4",{id:"git-tags"},"Git tags"),(0,i.kt)("p",null,"To resolve a list of available versions using Git tags, the following settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"git-url")," - The remote URL to fetch tags from."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"git-tag-pattern")," - A regular expression to filter and match with. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"li"},"^v?((\\\\d+)\\\\.(\\\\d+)\\\\.(\\\\d+))"),". The capture group ",(0,i.kt)("inlineCode",{parentName:"li"},"1")," will be extracted as the version.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[resolve]\ngit-url = "https://github.com/moonrepo/protostar"\ngit-tag-pattern = "^@protostar/cli@((\\\\d+)\\\\.(\\\\d+)\\\\.(\\\\d+))"\n')),(0,i.kt)("h4",{id:"json-manifest"},"JSON manifest"),(0,i.kt)("p",null,"To resolve a list of available versions using a JSON manifest, the following settings are available:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"manifest-url")," - A URL that returns a JSON response of all versions. This response ",(0,i.kt)("em",{parentName:"li"},"must be")," an\narray of strings, or an array of objects."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"manifest-version-key")," - If the response is an array of objects, this is the key to extract the\nversion from. If the response is an array of strings, this setting can be omitted. Defaults to\n",(0,i.kt)("inlineCode",{parentName:"li"},"version"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[resolve]\nmanifest-url = "https://someregistry.com/protostar/versions.json"\nmanifest-version-key = "latest_version"\n')),(0,i.kt)("h3",{id:"detecting-versions"},"Detecting versions"),(0,i.kt)("p",null,"And lastly, we can configure how to ",(0,i.kt)("a",{parentName:"p",href:"./detection"},"detect a version")," contextually at runtime, using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"[detect]")," setting. At this time, we only support 1 setting:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"version-files")," - A list of version files to extract from. The contents of these files can ",(0,i.kt)("em",{parentName:"li"},"only"),"\nbe the version string itself.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-toml",metastring:'title="protostar.toml"',title:'"protostar.toml"'},'# ...\n\n[detect]\nversion-files = [".protostar-version", ".protostarrc"]\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f761bd07.9dbe5b6a.js b/assets/js/f761bd07.9dbe5b6a.js new file mode 100644 index 00000000000..1beb2bbe2b8 --- /dev/null +++ b/assets/js/f761bd07.9dbe5b6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43310],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),s=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(r),f=n,g=m["".concat(p,".").concat(f)]||m[f]||c[f]||a;return r?o.createElement(g,i(i({ref:t},u),{},{components:r})):o.createElement(g,i({ref:t},u))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}m.displayName="MDXCreateElement"},22936:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));r(76911);const a={slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},i=void 0,l={permalink:"/blog/proto-v0.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx",source:"@site/blog/2023-07-07_proto-v0.12.mdx",title:"proto v0.12 - Experimental WASM plugins",description:"After months of hard work, we're excited to release our first iteration of WASM plugins for proto.",date:"2023-07-07T00:00:00.000Z",formattedDate:"July 7, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.885,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"},nextItem:{title:"moon v1.9 - VCS hooks management and improved task inheritance",permalink:"/blog/moon-v1.9"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"After months of hard work, we're excited to release our first iteration of WASM plugins for proto."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f761bd07.bfd3fa11.js b/assets/js/f761bd07.bfd3fa11.js deleted file mode 100644 index 490472555b8..00000000000 --- a/assets/js/f761bd07.bfd3fa11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3310],{35318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var o=r(27378);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),s=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(r),f=n,g=m["".concat(p,".").concat(f)]||m[f]||c[f]||a;return r?o.createElement(g,i(i({ref:t},u),{},{components:r})):o.createElement(g,i({ref:t},u))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}m.displayName="MDXCreateElement"},22936:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var o=r(25773),n=(r(27378),r(35318));r(76911);const a={slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},i=void 0,l={permalink:"/blog/proto-v0.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx",source:"@site/blog/2023-07-07_proto-v0.12.mdx",title:"proto v0.12 - Experimental WASM plugins",description:"After months of hard work, we're excited to release our first iteration of WASM plugins for proto.",date:"2023-07-07T00:00:00.000Z",formattedDate:"July 7, 2023",tags:[{label:"proto",permalink:"/blog/tags/proto"},{label:"wasm",permalink:"/blog/tags/wasm"},{label:"plugin",permalink:"/blog/tags/plugin"}],readingTime:1.885,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"proto-v0.12",title:"proto v0.12 - Experimental WASM plugins",authors:["milesj"],tags:["proto","wasm","plugin"]},prevItem:{title:"moon v1.10 - Mid-year quality of life improvements",permalink:"/blog/moon-v1.10"},nextItem:{title:"moon v1.9 - VCS hooks management and improved task inheritance",permalink:"/blog/moon-v1.9"}},p={authorsImageUrls:[void 0]},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"After months of hard work, we're excited to release our first iteration of WASM plugins for proto."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f7b99134.d4bc9035.js b/assets/js/f7b99134.d4bc9035.js deleted file mode 100644 index 433942744a5..00000000000 --- a/assets/js/f7b99134.d4bc9035.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9737],{99201:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/query","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f7b99134.da4a5579.js b/assets/js/f7b99134.da4a5579.js new file mode 100644 index 00000000000..45aabfbad40 --- /dev/null +++ b/assets/js/f7b99134.da4a5579.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29737],{99201:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/query","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f7bfbae9.38919970.js b/assets/js/f7bfbae9.38919970.js new file mode 100644 index 00000000000..a094eaa628b --- /dev/null +++ b/assets/js/f7bfbae9.38919970.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24404],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,u=d["".concat(s,".").concat(m)]||d[m]||h[m]||r;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88772:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"v0.20",title:"moon v0.20 - Toolchain, caching, and hydration improvements",authors:["milesj"],tags:["hydration","toolchain","generator","runner"],image:"./img/v0.20.png"},i=void 0,l={permalink:"/blog/v0.20",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-29_v0.20.mdx",source:"@site/blog/2022-11-29_v0.20.mdx",title:"moon v0.20 - Toolchain, caching, and hydration improvements",description:"With this release, we've focused heavily on future proofing our toolchain and how it integrates with",date:"2022-11-29T00:00:00.000Z",formattedDate:"November 29, 2022",tags:[{label:"hydration",permalink:"/blog/tags/hydration"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"generator",permalink:"/blog/tags/generator"},{label:"runner",permalink:"/blog/tags/runner"}],readingTime:3.79,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.20",title:"moon v0.20 - Toolchain, caching, and hydration improvements",authors:["milesj"],tags:["hydration","toolchain","generator","runner"],image:"./img/v0.20.png"},prevItem:{title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",permalink:"/blog/v0.21"},nextItem:{title:"Integrating TypeScript in a monorepo",permalink:"/blog/typescript-monorepo"}},s={image:n(52424).Z,authorsImageUrls:[void 0]},p=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Moved toolchain settings",id:"moved-toolchain-settings",level:3},{value:"Moved project-level overrides",id:"moved-project-level-overrides",level:3},{value:"Future of the toolchain",id:"future-of-the-toolchain",level:2},{value:"Increased output hydration by 8-10x",id:"increased-output-hydration-by-8-10x",level:2},{value:"Cache any and all targets",id:"cache-any-and-all-targets",level:2},{value:"Path handling in generator templates",id:"path-handling-in-generator-templates",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function h(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've focused heavily on future proofing our toolchain and how it integrates with\nmoon. We've also landed a handful of quality of life improvements."),(0,o.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,o.kt)("p",null,"To start, we have a few breaking changes this release to be aware of!"),(0,o.kt)("h3",{id:"moved-toolchain-settings"},"Moved toolchain settings"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml"))," config file was getting rather bloated and\ncomplicated, as it contained the projects list, settings for each toolchain language, and settings\nfor each supported service (runner, generator, etc). Furthermore, this file will keep getting larger\nwith each new language and service we support."),(0,o.kt)("p",null,"To future proof moon, and to land as many breaking changes before an official v1, we've decided to\nmove toolchain specific settings into a new file, ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),".\nThis new file will house all language and dependency manager specific settings."),(0,o.kt)("p",null,"To migrate, move the ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"typescript")," settings from ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," to\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon/toolchain.yml"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n # ...\n\ntypescript:\n # ...\n")),(0,o.kt)("h3",{id:"moved-project-level-overrides"},"Moved project-level overrides"),(0,o.kt)("p",null,"Continuing with the changes above, we've also moved the ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace.node")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace.typescript"),"\nfrom ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," into a new parent field, ",(0,o.kt)("inlineCode",{parentName:"p"},"toolchain"),". We think this makes\nmore sense."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"# Before\nworkspace:\n node:\n version: '...'\n\n# After\ntoolchain:\n node:\n version: '...'\n")),(0,o.kt)("h2",{id:"future-of-the-toolchain"},"Future of the toolchain"),(0,o.kt)("p",null,"We're really proud of our toolchain, as it avoids an array problems that developers deal with on a\nday to day basis, primarily around running tasks using the wrong version of Node.js or their chosen\npackage manager. While we're in the process of supporting additional languages, starting with\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/"},"Deno"),', we had an idea... Since this is basically a better "version manager for\ntools", why not extract this out into something else?'),(0,o.kt)("p",null,"And that's what we plan to do! Before we do so, we've had to make some architectural changes, many\nof which have landed in this release. During this process, we were able to implement an even better\ntoolchain, polish many of the edge cases, and improve performance! Stay tuned for more information\non this new tool!"),(0,o.kt)("h2",{id:"increased-output-hydration-by-8-10x"},"Increased output hydration by 8-10x"),(0,o.kt)("p",null,"In moon, hydration is the concept of unpacking an existing hashed artifact into a\n",(0,o.kt)("a",{parentName:"p",href:"../docs/config/project#outputs"},"task's outputs")," during a cache hit. In our previous implementation,\nwe would delete all existing outputs before unpacking the archive to ensure a clean slate and to\navoid stale files. While this worked, it wasn't the most performant, taking about 280ms for 1,000\nfiles (which is still reasonably fast!)."),(0,o.kt)("p",null,"In our new implementation, we now utilize a smart file tree diffing algorithm that will only unpack\nfiles ",(0,o.kt)("em",{parentName:"p"},"with different content"),", and will automatically remove stale files in the process. This has\nresulted in a 10x performance increase, taking about 30ms! Multiply this by many projects, the\nresults should be very apparent."),(0,o.kt)("p",null,"We hope you enjoy this improvement, as it's the first of many to come!"),(0,o.kt)("h2",{id:"cache-any-and-all-targets"},"Cache any and all targets"),(0,o.kt)("p",null,"By default, all ",(0,o.kt)("a",{parentName:"p",href:"../docs/concepts/target"},"targets")," that produce outputs are cached and archived. For\ntargets that ",(0,o.kt)("em",{parentName:"p"},"do not")," produce outputs, like testing, linting, and typechecking, these are not\ncached. This will result in slower CI times as they are continuously ran, even if nothing has\nchanged. However with our new ",(0,o.kt)("a",{parentName:"p",href:"../docs/guides/remote-cache"},"remote caching")," layer, we can skip these\nfrom running entirely!"),(0,o.kt)("p",null,"To achieve this, we've added a new setting to ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"\ncalled ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/workspace#archivabletargets"},(0,o.kt)("inlineCode",{parentName:"a"},"runner.archivableTargets")),". This setting\naccepts a list of targets that should be archived, regardless of whether or not they produce\noutputs."),(0,o.kt)("p",null,"For example, if we want to cache and archive testing, linting, and typechecking, we can define the\nfollowing:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"runner:\n archivableTargets:\n - ':lint'\n - ':test'\n - ':typecheck'\n")),(0,o.kt)("h2",{id:"path-handling-in-generator-templates"},"Path handling in generator templates"),(0,o.kt)("p",null,"Our code generation is powered by ",(0,o.kt)("a",{parentName:"p",href:"https://tera.netlify.app/docs/#built-ins"},"Tera"),", a templating\nengine with a ton of built-in utilities. However, it does not provide utilities for file paths, and\nas such, we now provide ",(0,o.kt)("inlineCode",{parentName:"p"},"path_join")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"path_relative")," filters."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-twig"},"{{ some_path | path_relative(from = workspace_root) }}\n")),(0,o.kt)("p",null,"We also now inject variables for the working directory, destination, and workspace root. This will\nhelp with custom paths, especially within frontmatter!\n",(0,o.kt)("a",{parentName:"p",href:"../docs/guides/codegen#variables"},"View the codegen docs for more information"),"."),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.20.0"},"official release")," for a\nfull list of changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added ",(0,o.kt)("inlineCode",{parentName:"li"},"vcs.remoteCandidates")," to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml")," to customize the remotes for Git to query\nagainst."),(0,o.kt)("li",{parentName:"ul"},"Added support for ",(0,o.kt)("inlineCode",{parentName:"li"},"moduleSuffixes")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"moduleDetection")," in TypeScript ",(0,o.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," compiler\noptions."),(0,o.kt)("li",{parentName:"ul"},"YAML files will now respect the closest ",(0,o.kt)("inlineCode",{parentName:"li"},".editorconfig")," file."),(0,o.kt)("li",{parentName:"ul"},"Refactored terminal output for bette readability.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v0.21 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"An interactive dependency and project graph visualizer."),(0,o.kt)("li",{parentName:"ul"},"A more performant project graph."),(0,o.kt)("li",{parentName:"ul"},"More quality of life improvements for affected files.")))}h.isMDXComponent=!0},52424:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.20-2a89b9d56c8a682f8427bd0138afb959.png"}}]); \ No newline at end of file diff --git a/assets/js/f7bfbae9.9d39fe55.js b/assets/js/f7bfbae9.9d39fe55.js deleted file mode 100644 index 35dbc5016c7..00000000000 --- a/assets/js/f7bfbae9.9d39fe55.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4404],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,u=d["".concat(s,".").concat(m)]||d[m]||h[m]||r;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},88772:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=n(25773),o=(n(27378),n(35318));const r={slug:"v0.20",title:"moon v0.20 - Toolchain, caching, and hydration improvements",authors:["milesj"],tags:["hydration","toolchain","generator","runner"],image:"./img/v0.20.png"},i=void 0,l={permalink:"/blog/v0.20",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2022-11-29_v0.20.mdx",source:"@site/blog/2022-11-29_v0.20.mdx",title:"moon v0.20 - Toolchain, caching, and hydration improvements",description:"With this release, we've focused heavily on future proofing our toolchain and how it integrates with",date:"2022-11-29T00:00:00.000Z",formattedDate:"November 29, 2022",tags:[{label:"hydration",permalink:"/blog/tags/hydration"},{label:"toolchain",permalink:"/blog/tags/toolchain"},{label:"generator",permalink:"/blog/tags/generator"},{label:"runner",permalink:"/blog/tags/runner"}],readingTime:3.79,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"v0.20",title:"moon v0.20 - Toolchain, caching, and hydration improvements",authors:["milesj"],tags:["hydration","toolchain","generator","runner"],image:"./img/v0.20.png"},prevItem:{title:"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust",permalink:"/blog/v0.21"},nextItem:{title:"Integrating TypeScript in a monorepo",permalink:"/blog/typescript-monorepo"}},s={image:n(52424).Z,authorsImageUrls:[void 0]},p=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Moved toolchain settings",id:"moved-toolchain-settings",level:3},{value:"Moved project-level overrides",id:"moved-project-level-overrides",level:3},{value:"Future of the toolchain",id:"future-of-the-toolchain",level:2},{value:"Increased output hydration by 8-10x",id:"increased-output-hydration-by-8-10x",level:2},{value:"Cache any and all targets",id:"cache-any-and-all-targets",level:2},{value:"Path handling in generator templates",id:"path-handling-in-generator-templates",level:2},{value:"Other changes",id:"other-changes",level:2},{value:"What's next?",id:"whats-next",level:2}],c={toc:p};function h(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've focused heavily on future proofing our toolchain and how it integrates with\nmoon. We've also landed a handful of quality of life improvements."),(0,o.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,o.kt)("p",null,"To start, we have a few breaking changes this release to be aware of!"),(0,o.kt)("h3",{id:"moved-toolchain-settings"},"Moved toolchain settings"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml"))," config file was getting rather bloated and\ncomplicated, as it contained the projects list, settings for each toolchain language, and settings\nfor each supported service (runner, generator, etc). Furthermore, this file will keep getting larger\nwith each new language and service we support."),(0,o.kt)("p",null,"To future proof moon, and to land as many breaking changes before an official v1, we've decided to\nmove toolchain specific settings into a new file, ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/toolchain"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/toolchain.yml")),".\nThis new file will house all language and dependency manager specific settings."),(0,o.kt)("p",null,"To migrate, move the ",(0,o.kt)("inlineCode",{parentName:"p"},"node")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"typescript")," settings from ",(0,o.kt)("inlineCode",{parentName:"p"},".moon/workspace.yml")," to\n",(0,o.kt)("inlineCode",{parentName:"p"},".moon/toolchain.yml"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/toolchain.yml"',title:'".moon/toolchain.yml"'},"node:\n # ...\n\ntypescript:\n # ...\n")),(0,o.kt)("h3",{id:"moved-project-level-overrides"},"Moved project-level overrides"),(0,o.kt)("p",null,"Continuing with the changes above, we've also moved the ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace.node")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace.typescript"),"\nfrom ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml"))," into a new parent field, ",(0,o.kt)("inlineCode",{parentName:"p"},"toolchain"),". We think this makes\nmore sense."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"# Before\nworkspace:\n node:\n version: '...'\n\n# After\ntoolchain:\n node:\n version: '...'\n")),(0,o.kt)("h2",{id:"future-of-the-toolchain"},"Future of the toolchain"),(0,o.kt)("p",null,"We're really proud of our toolchain, as it avoids an array problems that developers deal with on a\nday to day basis, primarily around running tasks using the wrong version of Node.js or their chosen\npackage manager. While we're in the process of supporting additional languages, starting with\n",(0,o.kt)("a",{parentName:"p",href:"https://deno.land/"},"Deno"),', we had an idea... Since this is basically a better "version manager for\ntools", why not extract this out into something else?'),(0,o.kt)("p",null,"And that's what we plan to do! Before we do so, we've had to make some architectural changes, many\nof which have landed in this release. During this process, we were able to implement an even better\ntoolchain, polish many of the edge cases, and improve performance! Stay tuned for more information\non this new tool!"),(0,o.kt)("h2",{id:"increased-output-hydration-by-8-10x"},"Increased output hydration by 8-10x"),(0,o.kt)("p",null,"In moon, hydration is the concept of unpacking an existing hashed artifact into a\n",(0,o.kt)("a",{parentName:"p",href:"../docs/config/project#outputs"},"task's outputs")," during a cache hit. In our previous implementation,\nwe would delete all existing outputs before unpacking the archive to ensure a clean slate and to\navoid stale files. While this worked, it wasn't the most performant, taking about 280ms for 1,000\nfiles (which is still reasonably fast!)."),(0,o.kt)("p",null,"In our new implementation, we now utilize a smart file tree diffing algorithm that will only unpack\nfiles ",(0,o.kt)("em",{parentName:"p"},"with different content"),", and will automatically remove stale files in the process. This has\nresulted in a 10x performance increase, taking about 30ms! Multiply this by many projects, the\nresults should be very apparent."),(0,o.kt)("p",null,"We hope you enjoy this improvement, as it's the first of many to come!"),(0,o.kt)("h2",{id:"cache-any-and-all-targets"},"Cache any and all targets"),(0,o.kt)("p",null,"By default, all ",(0,o.kt)("a",{parentName:"p",href:"../docs/concepts/target"},"targets")," that produce outputs are cached and archived. For\ntargets that ",(0,o.kt)("em",{parentName:"p"},"do not")," produce outputs, like testing, linting, and typechecking, these are not\ncached. This will result in slower CI times as they are continuously ran, even if nothing has\nchanged. However with our new ",(0,o.kt)("a",{parentName:"p",href:"../docs/guides/remote-cache"},"remote caching")," layer, we can skip these\nfrom running entirely!"),(0,o.kt)("p",null,"To achieve this, we've added a new setting to ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/workspace"},(0,o.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),"\ncalled ",(0,o.kt)("a",{parentName:"p",href:"../docs/config/workspace#archivabletargets"},(0,o.kt)("inlineCode",{parentName:"a"},"runner.archivableTargets")),". This setting\naccepts a list of targets that should be archived, regardless of whether or not they produce\noutputs."),(0,o.kt)("p",null,"For example, if we want to cache and archive testing, linting, and typechecking, we can define the\nfollowing:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"runner:\n archivableTargets:\n - ':lint'\n - ':test'\n - ':typecheck'\n")),(0,o.kt)("h2",{id:"path-handling-in-generator-templates"},"Path handling in generator templates"),(0,o.kt)("p",null,"Our code generation is powered by ",(0,o.kt)("a",{parentName:"p",href:"https://tera.netlify.app/docs/#built-ins"},"Tera"),", a templating\nengine with a ton of built-in utilities. However, it does not provide utilities for file paths, and\nas such, we now provide ",(0,o.kt)("inlineCode",{parentName:"p"},"path_join")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"path_relative")," filters."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-twig"},"{{ some_path | path_relative(from = workspace_root) }}\n")),(0,o.kt)("p",null,"We also now inject variables for the working directory, destination, and workspace root. This will\nhelp with custom paths, especially within frontmatter!\n",(0,o.kt)("a",{parentName:"p",href:"../docs/guides/codegen#variables"},"View the codegen docs for more information"),"."),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.20.0"},"official release")," for a\nfull list of changes."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Added ",(0,o.kt)("inlineCode",{parentName:"li"},"vcs.remoteCandidates")," to ",(0,o.kt)("inlineCode",{parentName:"li"},".moon/workspace.yml")," to customize the remotes for Git to query\nagainst."),(0,o.kt)("li",{parentName:"ul"},"Added support for ",(0,o.kt)("inlineCode",{parentName:"li"},"moduleSuffixes")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"moduleDetection")," in TypeScript ",(0,o.kt)("inlineCode",{parentName:"li"},"tsconfig.json")," compiler\noptions."),(0,o.kt)("li",{parentName:"ul"},"YAML files will now respect the closest ",(0,o.kt)("inlineCode",{parentName:"li"},".editorconfig")," file."),(0,o.kt)("li",{parentName:"ul"},"Refactored terminal output for bette readability.")),(0,o.kt)("h2",{id:"whats-next"},"What's next?"),(0,o.kt)("p",null,"Expect the following in the v0.21 release!"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"An interactive dependency and project graph visualizer."),(0,o.kt)("li",{parentName:"ul"},"A more performant project graph."),(0,o.kt)("li",{parentName:"ul"},"More quality of life improvements for affected files.")))}h.isMDXComponent=!0},52424:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v0.20-2a89b9d56c8a682f8427bd0138afb959.png"}}]); \ No newline at end of file diff --git a/assets/js/f7f505dc.a9b4212e.js b/assets/js/f7f505dc.a9b4212e.js new file mode 100644 index 00000000000..8b555e5334f --- /dev/null +++ b/assets/js/f7f505dc.a9b4212e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65537],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var u=2;u<o;u++)l[u]=n[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),r=u[n].value;r!==i&&(d(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",u)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=u(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=d??f;return c({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(27378),a=n(30780),o=n(39798),l=n(33337);function i(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),r.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(o.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},i(e,!1,!1))),r.createElement(o.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(o.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(o.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(83469),o=n(31792);function l(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(o.Z,{icon:a.dT$}))}},8401:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=(n(36642),n(32189));const l={title:"Vue example",sidebar_label:"Vue"},i=void 0,s={unversionedId:"guides/examples/vue",id:"guides/examples/vue",title:"Vue example",description:"Vue is an application or library concern, and not a build system one, since the bundling of Vue is",source:"@site/docs/guides/examples/vue.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/vue",permalink:"/docs/guides/examples/vue",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/vue.mdx",tags:[],version:"current",frontMatter:{title:"Vue example",sidebar_label:"Vue"},sidebar:"guides",previous:{title:"Vite & Vitest",permalink:"/docs/guides/examples/vite"},next:{title:"Handbook",permalink:"/docs/guides/rust/handbook"}},u={},c=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3}],p={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/vue-vite-app",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"Vue is an application or library concern, and not a build system one, since the bundling of Vue is\nabstracted away through other tools. Because of this, moon has no guidelines around utilizing Vue\ndirectly. You can use Vue however you wish!"),(0,a.kt)("p",null,"However, with that being said, Vue is typically coupled with ",(0,a.kt)("a",{parentName:"p",href:"https://vitejs.dev/"},"Vite"),". To\nscaffold a new Vue project with Vite, run the following command in a project root."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"npm init vue@latest\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"We highly suggest reading our documentation on ",(0,a.kt)("a",{parentName:"p",href:"./vite"},"using Vite (and Vitest) with moon")," for a\nmore holistic view.")),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"This section assumes Vue is being used with Vite."),(0,a.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,a.kt)("p",null,"When linting with ",(0,a.kt)("a",{parentName:"p",href:"./eslint"},"ESLint")," and the\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.vuejs.org/user-guide/#installation"},(0,a.kt)("inlineCode",{parentName:"a"},"eslint-plugin-vue"))," library, you'll need to\ninclude the ",(0,a.kt)("inlineCode",{parentName:"p"},".vue")," extension within the ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task. This can be done by extending the top-level\ntask within the project (below), or by adding it to the top-level entirely."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n args:\n - '--ext'\n - '.js,.ts,.vue'\n")),(0,a.kt)("p",null,"Furthermore, when using TypeScript within ESLint, we need to make a few additional changes to the\n",(0,a.kt)("inlineCode",{parentName:"p"},".eslintrc.js")," config found in the root (if the entire repo is Vue), or within the project (if only\nthe project is Vue)."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"module.exports = {\n parser: 'vue-eslint-parser',\n parserOptions: {\n extraFileExtensions: ['.vue'],\n parser: '@typescript-eslint/parser',\n project: 'tsconfig.json', // Or another config\n tsconfigRootDir: __dirname,\n },\n};\n")),(0,a.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,a.kt)("p",null,"Vue does not use ",(0,a.kt)("a",{parentName:"p",href:"./typescript"},"TypeScript"),"'s ",(0,a.kt)("inlineCode",{parentName:"p"},"tsc")," binary directly, but instead uses\n",(0,a.kt)("a",{parentName:"p",href:"https://vuejs.org/guide/typescript/overview.html"},(0,a.kt)("inlineCode",{parentName:"a"},"vue-tsc")),", which is a thin wrapper around ",(0,a.kt)("inlineCode",{parentName:"p"},"tsc"),"\nto support Vue components. Because of this, we should update the ",(0,a.kt)("inlineCode",{parentName:"p"},"typecheck")," task in the project to\nutilize this command instead."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['typecheck']\n\ntasks:\n typecheck:\n command:\n - 'vue-tsc'\n - '--noEmit'\n # Always use pretty output\n - '--pretty'\n inputs:\n - 'env.d.ts'\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Project configs\n - 'tsconfig.json'\n - 'tsconfig.*.json'\n # Root configs (extended from only)\n - '/tsconfig.options.json'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Be sure ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," compiler options are based on\n",(0,a.kt)("a",{parentName:"p",href:"https://vuejs.org/guide/typescript/overview.html#configuring-tsconfig-json"},(0,a.kt)("inlineCode",{parentName:"a"},"@vue/tsconfig")),".")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f7f505dc.fbecb8f4.js b/assets/js/f7f505dc.fbecb8f4.js deleted file mode 100644 index 60d7a4b13eb..00000000000 --- a/assets/js/f7f505dc.fbecb8f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8881],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(27378);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var u=2;u<o;u++)l[u]=n[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var r=n(25773),a=n(27378),o=n(37140),l=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),r=u[n].value;r!==i&&(d(t),s(r))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function m(e){const t=(0,i.Y)(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",u)},a.createElement(p,(0,r.Z)({},e,t)),a.createElement(d,(0,r.Z)({},e,t)))}function f(e){const t=(0,s.Z)();return a.createElement(m,(0,r.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var r=n(27378),a=n(35331),o=n(30654),l=n(70784),i=n(71819);function s(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,a.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(l.location.search);t.set(i,e),l.replace({...l.location,search:t.toString()})}),[i,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=u(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),h=(()=>{const e=d??f;return c({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(27378),a=n(30780),o=n(39798),l=n(33337);function i(e,t,n){let r=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?r+="--dev ":e.peer&&(r+="--peer "),n&&t&&!e.package&&(r+="-W "),r+=e.dep,r}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),r.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},r.createElement(o.Z,{value:"yarn"},r.createElement(a.Z,{language:"shell"},i(e,!1,!1))),r.createElement(o.Z,{value:"yarn1"},r.createElement(a.Z,{language:"shell"},t)),r.createElement(o.Z,{value:"npm"},r.createElement(a.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),r.createElement(o.Z,{value:"pnpm"},r.createElement(a.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(27378),a=n(83469),o=n(31792);function l(e){let{to:t}=e;return r.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},r.createElement(o.Z,{icon:a.dT$}))}},8401:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=n(25773),a=(n(27378),n(35318)),o=(n(36642),n(32189));const l={title:"Vue example",sidebar_label:"Vue"},i=void 0,s={unversionedId:"guides/examples/vue",id:"guides/examples/vue",title:"Vue example",description:"Vue is an application or library concern, and not a build system one, since the bundling of Vue is",source:"@site/docs/guides/examples/vue.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/vue",permalink:"/docs/guides/examples/vue",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/vue.mdx",tags:[],version:"current",frontMatter:{title:"Vue example",sidebar_label:"Vue"},sidebar:"guides",previous:{title:"Vite & Vitest",permalink:"/docs/guides/examples/vite"},next:{title:"Handbook",permalink:"/docs/guides/rust/handbook"}},u={},c=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3}],p={toc:c};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(o.Z,{to:"https://github.com/moonrepo/examples/tree/master/apps/vue-vite-app",mdxType:"HeadingApiLink"}),(0,a.kt)("p",null,"Vue is an application or library concern, and not a build system one, since the bundling of Vue is\nabstracted away through other tools. Because of this, moon has no guidelines around utilizing Vue\ndirectly. You can use Vue however you wish!"),(0,a.kt)("p",null,"However, with that being said, Vue is typically coupled with ",(0,a.kt)("a",{parentName:"p",href:"https://vitejs.dev/"},"Vite"),". To\nscaffold a new Vue project with Vite, run the following command in a project root."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"npm init vue@latest\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"We highly suggest reading our documentation on ",(0,a.kt)("a",{parentName:"p",href:"./vite"},"using Vite (and Vitest) with moon")," for a\nmore holistic view.")),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"This section assumes Vue is being used with Vite."),(0,a.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,a.kt)("p",null,"When linting with ",(0,a.kt)("a",{parentName:"p",href:"./eslint"},"ESLint")," and the\n",(0,a.kt)("a",{parentName:"p",href:"https://eslint.vuejs.org/user-guide/#installation"},(0,a.kt)("inlineCode",{parentName:"a"},"eslint-plugin-vue"))," library, you'll need to\ninclude the ",(0,a.kt)("inlineCode",{parentName:"p"},".vue")," extension within the ",(0,a.kt)("inlineCode",{parentName:"p"},"lint")," task. This can be done by extending the top-level\ntask within the project (below), or by adding it to the top-level entirely."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n args:\n - '--ext'\n - '.js,.ts,.vue'\n")),(0,a.kt)("p",null,"Furthermore, when using TypeScript within ESLint, we need to make a few additional changes to the\n",(0,a.kt)("inlineCode",{parentName:"p"},".eslintrc.js")," config found in the root (if the entire repo is Vue), or within the project (if only\nthe project is Vue)."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"module.exports = {\n parser: 'vue-eslint-parser',\n parserOptions: {\n extraFileExtensions: ['.vue'],\n parser: '@typescript-eslint/parser',\n project: 'tsconfig.json', // Or another config\n tsconfigRootDir: __dirname,\n },\n};\n")),(0,a.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,a.kt)("p",null,"Vue does not use ",(0,a.kt)("a",{parentName:"p",href:"./typescript"},"TypeScript"),"'s ",(0,a.kt)("inlineCode",{parentName:"p"},"tsc")," binary directly, but instead uses\n",(0,a.kt)("a",{parentName:"p",href:"https://vuejs.org/guide/typescript/overview.html"},(0,a.kt)("inlineCode",{parentName:"a"},"vue-tsc")),", which is a thin wrapper around ",(0,a.kt)("inlineCode",{parentName:"p"},"tsc"),"\nto support Vue components. Because of this, we should update the ",(0,a.kt)("inlineCode",{parentName:"p"},"typecheck")," task in the project to\nutilize this command instead."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['typecheck']\n\ntasks:\n typecheck:\n command:\n - 'vue-tsc'\n - '--noEmit'\n # Always use pretty output\n - '--pretty'\n inputs:\n - 'env.d.ts'\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Project configs\n - 'tsconfig.json'\n - 'tsconfig.*.json'\n # Root configs (extended from only)\n - '/tsconfig.options.json'\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Be sure ",(0,a.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," compiler options are based on\n",(0,a.kt)("a",{parentName:"p",href:"https://vuejs.org/guide/typescript/overview.html#configuring-tsconfig-json"},(0,a.kt)("inlineCode",{parentName:"a"},"@vue/tsconfig")),".")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f8deddba.532a2fa6.js b/assets/js/f8deddba.532a2fa6.js deleted file mode 100644 index 21dca807f5a..00000000000 --- a/assets/js/f8deddba.532a2fa6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[938],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=r[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},47685:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));r(76911);const a={slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},l=void 0,i={permalink:"/blog/moon-v1.10",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx",source:"@site/blog/2023-07-10_moon-v1.10.mdx",title:"moon v1.10 - Mid-year quality of life improvements",description:"Instead of launching a large feature this release, we're focusing on quality of life and developer",date:"2023-07-10T00:00:00.000Z",formattedDate:"July 10, 2023",tags:[{label:"quality",permalink:"/blog/tags/quality"},{label:"life",permalink:"/blog/tags/life"},{label:"qol",permalink:"/blog/tags/qol"},{label:"ignore",permalink:"/blog/tags/ignore"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"vcs",permalink:"/blog/tags/vcs"},{label:"ci",permalink:"/blog/tags/ci"},{label:"debug",permalink:"/blog/tags/debug"}],readingTime:3.6,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},prevItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"},nextItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"}},s={image:r(76703).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Instead of launching a large feature this release, we're focusing on quality of life and developer\nexperience improvements."))}m.isMDXComponent=!0},76703:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.10-53b156788cb2d411508597208ffd8fea.png"}}]); \ No newline at end of file diff --git a/assets/js/f8deddba.f0bb0eb0.js b/assets/js/f8deddba.f0bb0eb0.js new file mode 100644 index 00000000000..3b4c3756b2d --- /dev/null +++ b/assets/js/f8deddba.f0bb0eb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10938],{35318:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||m[g]||a;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=r[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},47685:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(25773),o=(r(27378),r(35318));r(76911);const a={slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},l=void 0,i={permalink:"/blog/moon-v1.10",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx",source:"@site/blog/2023-07-10_moon-v1.10.mdx",title:"moon v1.10 - Mid-year quality of life improvements",description:"Instead of launching a large feature this release, we're focusing on quality of life and developer",date:"2023-07-10T00:00:00.000Z",formattedDate:"July 10, 2023",tags:[{label:"quality",permalink:"/blog/tags/quality"},{label:"life",permalink:"/blog/tags/life"},{label:"qol",permalink:"/blog/tags/qol"},{label:"ignore",permalink:"/blog/tags/ignore"},{label:"hasher",permalink:"/blog/tags/hasher"},{label:"vcs",permalink:"/blog/tags/vcs"},{label:"ci",permalink:"/blog/tags/ci"},{label:"debug",permalink:"/blog/tags/debug"}],readingTime:3.6,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.10",title:"moon v1.10 - Mid-year quality of life improvements",authors:["milesj"],tags:["quality","life","qol","ignore","hasher","vcs","ci","debug"],image:"./img/moon/v1.10.png"},prevItem:{title:"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins",permalink:"/blog/proto-v0.13"},nextItem:{title:"proto v0.12 - Experimental WASM plugins",permalink:"/blog/proto-v0.12"}},s={image:r(76703).Z,authorsImageUrls:[void 0]},p=[],c={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Instead of launching a large feature this release, we're focusing on quality of life and developer\nexperience improvements."))}m.isMDXComponent=!0},76703:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.10-53b156788cb2d411508597208ffd8fea.png"}}]); \ No newline at end of file diff --git a/assets/js/f90d8a46.309ea049.js b/assets/js/f90d8a46.309ea049.js new file mode 100644 index 00000000000..95c6cd7a339 --- /dev/null +++ b/assets/js/f90d8a46.309ea049.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44497],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=c(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||p[g]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:a,align:i="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:o,title:a,className:"inline-block"}))}},90653:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));r(88109);const a={slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},i=void 0,l={permalink:"/blog/moon-v1.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx",source:"@site/blog/2023-05-30_moon-v1.7.mdx",title:"moon v1.7 - Next-generation configuration and errors",description:"With this release, we've rewritten configuration from the ground up, improved error messages, and",date:"2023-05-30T00:00:00.000Z",formattedDate:"May 30, 2023",tags:[{label:"config",permalink:"/blog/tags/config"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.43,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},prevItem:{title:"moon v1.8 - Code owners and shared configuration",permalink:"/blog/moon-v1.8"},nextItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"}},s={image:r(46037).Z,authorsImageUrls:[void 0]},c=[],m={toc:c};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've rewritten configuration from the ground up, improved error messages, and\nstarted work on diagnostics!"))}p.isMDXComponent=!0},46037:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.7-1356b391b5588236312e2f059de16e2a.png"}}]); \ No newline at end of file diff --git a/assets/js/f90d8a46.a64dbc04.js b/assets/js/f90d8a46.a64dbc04.js deleted file mode 100644 index 05caff023b8..00000000000 --- a/assets/js/f90d8a46.a64dbc04.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4497],{35318:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>g});var n=r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=c(r),g=o,f=u["".concat(s,".").concat(g)]||u[g]||p[g]||a;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},88109:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(27378);function o(e){let{src:t,width:r="90%",alt:o="",title:a,align:i="center",padding:l="1rem"}=e;return n.createElement("div",{style:{marginBottom:l,marginTop:l,textAlign:i}},n.createElement("img",{src:t.default,width:r,alt:o,title:a,className:"inline-block"}))}},90653:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(25773),o=(r(27378),r(35318));r(88109);const a={slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},i=void 0,l={permalink:"/blog/moon-v1.7",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx",source:"@site/blog/2023-05-30_moon-v1.7.mdx",title:"moon v1.7 - Next-generation configuration and errors",description:"With this release, we've rewritten configuration from the ground up, improved error messages, and",date:"2023-05-30T00:00:00.000Z",formattedDate:"May 30, 2023",tags:[{label:"config",permalink:"/blog/tags/config"},{label:"errors",permalink:"/blog/tags/errors"}],readingTime:2.43,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.7",title:"moon v1.7 - Next-generation configuration and errors",authors:["milesj"],tags:["config","errors"],image:"./img/moon/v1.7.png"},prevItem:{title:"moon v1.8 - Code owners and shared configuration",permalink:"/blog/moon-v1.8"},nextItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"}},s={image:r(46037).Z,authorsImageUrls:[void 0]},c=[],m={toc:c};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"With this release, we've rewritten configuration from the ground up, improved error messages, and\nstarted work on diagnostics!"))}p.isMDXComponent=!0},46037:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/v1.7-1356b391b5588236312e2f059de16e2a.png"}}]); \ No newline at end of file diff --git a/assets/js/f9651623.7173ae43.js b/assets/js/f9651623.7173ae43.js deleted file mode 100644 index 2c48617b50e..00000000000 --- a/assets/js/f9651623.7173ae43.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5494],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),g=p(n),d=o,u=g["".concat(l,".").concat(d)]||g[d]||m[d]||r;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}g.displayName="MDXCreateElement"},31848:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=n(25773),o=(n(27378),n(35318)),r=n(76911);const i={slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},s=void 0,l={permalink:"/blog/moon-v1.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx",source:"@site/blog/2023-05-15_moon-v1.6.mdx",title:"moon v1.6 - Persistent tasks and task extending RFC",description:"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending",date:"2023-05-15T00:00:00.000Z",formattedDate:"May 15, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"rfc",permalink:"/blog/tags/rfc"},{label:"log",permalink:"/blog/tags/log"}],readingTime:3.155,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},prevItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"},nextItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"}},p={image:n(69922).Z,authorsImageUrls:[void 0]},c=[{value:"RFC: Task extending/variants",id:"rfc-task-extendingvariants",level:2},{value:"Persistent tasks",id:"persistent-tasks",level:2},{value:"Logging migration",id:"logging-migration",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:c};function g(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending\ntasks."),(0,o.kt)("h2",{id:"rfc-task-extendingvariants"},"RFC: Task extending/variants"),(0,o.kt)("p",null,"Before we dive into this release, we want to briefly talk about a new RFC that we're looking for\nfeedback on, ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/849"},"task extending/variants"),". This is a\nfeature that has been top-of-mind since moon's inception, but we haven't had the foundation in place\nto support it, nor what the API should look like."),(0,o.kt)("p",null,"The gist of the RFC is that we want to support tasks that extend other tasks with additional\narguments. This is a common workflow with npm scripts:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "scripts": {\n "lint": "eslint .",\n "lint:fix": "npm run lint --fix"\n }\n}\n')),(0,o.kt)("p",null,"As consumers of moon, we'd appreciate any feedback on the RFC before we move forward!"),(0,o.kt)("div",{class:"flex justify-center"},(0,o.kt)(r.Z,{label:"View RFC",href:"https://github.com/moonrepo/moon/issues/849",size:"lg",mdxType:"Button"})),(0,o.kt)("h2",{id:"persistent-tasks"},"Persistent tasks"),(0,o.kt)("p",null,"Tasks that never complete, like servers and watchers, are known as persistent tasks. Historically we\nhad support for these kinds of tasks through the ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#local"},(0,o.kt)("inlineCode",{parentName:"a"},"local"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),". This setting would modify the task for continuous execution by\ndisabling caching, streaming output, and not running in CI."),(0,o.kt)("p",null,"While this worked for the most part, there was one scenario that was still problematic, and that was\nrunning multiple persistent tasks in parallel. Depending on the task dependency chain, sometimes\nthese tasks would ",(0,o.kt)("em",{parentName:"p"},"not")," run in parallel, some may never start (blocked on another tasks), or the\norder of nodes in the graph is non-ideal. A great example of this can be found in this\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/discussions/830"},"discussion thread"),"."),(0,o.kt)("p",null,"To mitigate this problem, we're introducing a new task option,\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#persistent"},(0,o.kt)("inlineCode",{parentName:"a"},"persistent"))," (which is also enabled by the ",(0,o.kt)("inlineCode",{parentName:"p"},"local")," setting). When\na task is marked as persistent, it will always ",(0,o.kt)("em",{parentName:"p"},"run last and in parallel")," within the dependency\ngraph, after all dependencies (from all other persistent tasks) have completed."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'next dev'\n local: true\n # OR\n options:\n persistent: true\n")),(0,o.kt)("p",null,"This is a perfect solution to running multiple development servers and tools in watch mode:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'noop'\n deps:\n - 'frontend:dev'\n - 'backend:dev'\n - 'database:start'\n - 'tailwind:watch'\n")),(0,o.kt)("h2",{id:"logging-migration"},"Logging migration"),(0,o.kt)("p",null,"This is more of a heads up than anything, but we've started an internal Rust migration from the old\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/log"},"log")," crate to the new ",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/tracing"},"tracing"),"\ncrate. Tracing provides is with far more information, metrics, and instrumentation, which we hope to\ntake advantage of in the future."),(0,o.kt)("p",null,"This will be an ongoing migration that will last for many releases, and during this time while we\nsupport both ",(0,o.kt)("inlineCode",{parentName:"p"},"log")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"tracing")," in unison, the logs will be a bit noisy. We'll be working to clean\nup the logs as we gradually convert the codebase."),(0,o.kt)("p",null,"And lastly, the move to ",(0,o.kt)("inlineCode",{parentName:"p"},"tracing"),' has also caused the log output to change. For example, in the log\nexcerpt below, all messages with "log" after the date are the old ',(0,o.kt)("inlineCode",{parentName:"p"},"log")," crate, while the others with\ndistinct module names are the new ",(0,o.kt)("inlineCode",{parentName:"p"},"tracing")," crate."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-log"},'[DEBUG 14:44:19] moon_process::command_inspector Running command git status --porcelain --untracked-files -z env_vars={} working_dir="~/Projects/moon"\n[DEBUG 14:44:19] log Filtering based on touched status "all" log.target="moon:query:touched-files" log.module_path="moon_cli::queries::touched_files" log.file="crates/cli/src/queries/touched_files.rs" log.line=85\n[DEBUG 14:44:19] log Creating dependency graph log.target="moon:dep-graph" log.module_path="moon_dep_graph::dep_builder" log.file="crates/core/dep-graph/src/dep_builder.rs" log.line=35\n[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target="moon:action-pipeline" log.module_path="moon_action_pipeline::pipeline" log.file="crates/core/action-pipeline/src/pipeline.rs" log.line=93\n[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target="moon:action:setup-tool" log.module_path="moon_action_pipeline::actions::setup_tool" log.file="crates/core/action-pipeline/src/actions/setup_tool.rs" log.line=26\n[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for "20.0.0"\n[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json\n')),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.6.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Updated long running processes to log a checkpoint indicating it's still running."),(0,o.kt)("li",{parentName:"ul"},"Reworked file groups to use workspace relative paths, instead of project relative."),(0,o.kt)("li",{parentName:"ul"},"Reworked processes to better handle command line arguments, shells, and piped stdin input.")))}g.isMDXComponent=!0},69922:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.6-5fc0fb4e6b0bbe85a5016ff7f3c28b89.png"}}]); \ No newline at end of file diff --git a/assets/js/f9651623.95685a4a.js b/assets/js/f9651623.95685a4a.js new file mode 100644 index 00000000000..4ece6de2af6 --- /dev/null +++ b/assets/js/f9651623.95685a4a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15494],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),g=p(n),d=o,u=g["".concat(l,".").concat(d)]||g[d]||m[d]||r;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}g.displayName="MDXCreateElement"},31848:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=n(25773),o=(n(27378),n(35318)),r=n(76911);const i={slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},s=void 0,l={permalink:"/blog/moon-v1.6",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx",source:"@site/blog/2023-05-15_moon-v1.6.mdx",title:"moon v1.6 - Persistent tasks and task extending RFC",description:"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending",date:"2023-05-15T00:00:00.000Z",formattedDate:"May 15, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"rfc",permalink:"/blog/tags/rfc"},{label:"log",permalink:"/blog/tags/log"}],readingTime:3.155,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.6",title:"moon v1.6 - Persistent tasks and task extending RFC",authors:["milesj"],tags:["tasks","rfc","log"],image:"./img/moon/v1.6.png"},prevItem:{title:"proto v0.9 - New GitHub action, plugin unpacking, and more",permalink:"/blog/proto-v0.9"},nextItem:{title:"moon v1.5 - Rust tier 2 and 3 support",permalink:"/blog/moon-v1.5"}},p={image:n(69922).Z,authorsImageUrls:[void 0]},c=[{value:"RFC: Task extending/variants",id:"rfc-task-extendingvariants",level:2},{value:"Persistent tasks",id:"persistent-tasks",level:2},{value:"Logging migration",id:"logging-migration",level:2},{value:"Other changes",id:"other-changes",level:2}],m={toc:c};function g(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we're introducing a new feature called persistent tasks, and an RFC for extending\ntasks."),(0,o.kt)("h2",{id:"rfc-task-extendingvariants"},"RFC: Task extending/variants"),(0,o.kt)("p",null,"Before we dive into this release, we want to briefly talk about a new RFC that we're looking for\nfeedback on, ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/issues/849"},"task extending/variants"),". This is a\nfeature that has been top-of-mind since moon's inception, but we haven't had the foundation in place\nto support it, nor what the API should look like."),(0,o.kt)("p",null,"The gist of the RFC is that we want to support tasks that extend other tasks with additional\narguments. This is a common workflow with npm scripts:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "scripts": {\n "lint": "eslint .",\n "lint:fix": "npm run lint --fix"\n }\n}\n')),(0,o.kt)("p",null,"As consumers of moon, we'd appreciate any feedback on the RFC before we move forward!"),(0,o.kt)("div",{class:"flex justify-center"},(0,o.kt)(r.Z,{label:"View RFC",href:"https://github.com/moonrepo/moon/issues/849",size:"lg",mdxType:"Button"})),(0,o.kt)("h2",{id:"persistent-tasks"},"Persistent tasks"),(0,o.kt)("p",null,"Tasks that never complete, like servers and watchers, are known as persistent tasks. Historically we\nhad support for these kinds of tasks through the ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#local"},(0,o.kt)("inlineCode",{parentName:"a"},"local"))," setting in\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,o.kt)("inlineCode",{parentName:"a"},"moon.yml")),". This setting would modify the task for continuous execution by\ndisabling caching, streaming output, and not running in CI."),(0,o.kt)("p",null,"While this worked for the most part, there was one scenario that was still problematic, and that was\nrunning multiple persistent tasks in parallel. Depending on the task dependency chain, sometimes\nthese tasks would ",(0,o.kt)("em",{parentName:"p"},"not")," run in parallel, some may never start (blocked on another tasks), or the\norder of nodes in the graph is non-ideal. A great example of this can be found in this\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/discussions/830"},"discussion thread"),"."),(0,o.kt)("p",null,"To mitigate this problem, we're introducing a new task option,\n",(0,o.kt)("a",{parentName:"p",href:"/docs/config/project#persistent"},(0,o.kt)("inlineCode",{parentName:"a"},"persistent"))," (which is also enabled by the ",(0,o.kt)("inlineCode",{parentName:"p"},"local")," setting). When\na task is marked as persistent, it will always ",(0,o.kt)("em",{parentName:"p"},"run last and in parallel")," within the dependency\ngraph, after all dependencies (from all other persistent tasks) have completed."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'next dev'\n local: true\n # OR\n options:\n persistent: true\n")),(0,o.kt)("p",null,"This is a perfect solution to running multiple development servers and tools in watch mode:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"tasks:\n dev:\n command: 'noop'\n deps:\n - 'frontend:dev'\n - 'backend:dev'\n - 'database:start'\n - 'tailwind:watch'\n")),(0,o.kt)("h2",{id:"logging-migration"},"Logging migration"),(0,o.kt)("p",null,"This is more of a heads up than anything, but we've started an internal Rust migration from the old\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/log"},"log")," crate to the new ",(0,o.kt)("a",{parentName:"p",href:"https://crates.io/crates/tracing"},"tracing"),"\ncrate. Tracing provides is with far more information, metrics, and instrumentation, which we hope to\ntake advantage of in the future."),(0,o.kt)("p",null,"This will be an ongoing migration that will last for many releases, and during this time while we\nsupport both ",(0,o.kt)("inlineCode",{parentName:"p"},"log")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"tracing")," in unison, the logs will be a bit noisy. We'll be working to clean\nup the logs as we gradually convert the codebase."),(0,o.kt)("p",null,"And lastly, the move to ",(0,o.kt)("inlineCode",{parentName:"p"},"tracing"),' has also caused the log output to change. For example, in the log\nexcerpt below, all messages with "log" after the date are the old ',(0,o.kt)("inlineCode",{parentName:"p"},"log")," crate, while the others with\ndistinct module names are the new ",(0,o.kt)("inlineCode",{parentName:"p"},"tracing")," crate."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-log"},'[DEBUG 14:44:19] moon_process::command_inspector Running command git status --porcelain --untracked-files -z env_vars={} working_dir="~/Projects/moon"\n[DEBUG 14:44:19] log Filtering based on touched status "all" log.target="moon:query:touched-files" log.module_path="moon_cli::queries::touched_files" log.file="crates/cli/src/queries/touched_files.rs" log.line=85\n[DEBUG 14:44:19] log Creating dependency graph log.target="moon:dep-graph" log.module_path="moon_dep_graph::dep_builder" log.file="crates/core/dep-graph/src/dep_builder.rs" log.line=35\n[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target="moon:action-pipeline" log.module_path="moon_action_pipeline::pipeline" log.file="crates/core/action-pipeline/src/pipeline.rs" log.line=93\n[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target="moon:action:setup-tool" log.module_path="moon_action_pipeline::actions::setup_tool" log.file="crates/core/action-pipeline/src/actions/setup_tool.rs" log.line=26\n[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for "20.0.0"\n[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json\n')),(0,o.kt)("h2",{id:"other-changes"},"Other changes"),(0,o.kt)("p",null,"View the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.6.0"},"official release")," for a full list of\nchanges."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Updated long running processes to log a checkpoint indicating it's still running."),(0,o.kt)("li",{parentName:"ul"},"Reworked file groups to use workspace relative paths, instead of project relative."),(0,o.kt)("li",{parentName:"ul"},"Reworked processes to better handle command line arguments, shells, and piped stdin input.")))}g.isMDXComponent=!0},69922:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/v1.6-5fc0fb4e6b0bbe85a5016ff7f3c28b89.png"}}]); \ No newline at end of file diff --git a/assets/js/f9cc98ab.56eea9b0.js b/assets/js/f9cc98ab.56eea9b0.js new file mode 100644 index 00000000000..376e04bbc8d --- /dev/null +++ b/assets/js/f9cc98ab.56eea9b0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58751],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=p(n),u=r,f=d["".concat(s,".").concat(u)]||d[u]||c[u]||i;return n?a.createElement(f,l(l({ref:t},m),{},{components:n})):a.createElement(f,l({ref:t},m))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;p<i;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{header:t,inline:n,updated:i,version:l}=e;return a.createElement(r.Z,{text:`v${l}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},21612:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),i=n(79022);const l={title:"run"},o=void 0,s={unversionedId:"commands/run",id:"commands/run",title:"run",description:"The moon run (or moon r) command will run one or many targets and all of",source:"@site/docs/commands/run.mdx",sourceDirName:"commands",slug:"/commands/run",permalink:"/docs/commands/run",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/run.mdx",tags:[],version:"current",frontMatter:{title:"run"},sidebar:"docs",previous:{title:"touched-files",permalink:"/docs/commands/query/touched-files"},next:{title:"setup",permalink:"/docs/commands/setup"}},p={},m=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Affected",id:"affected",level:4}],c={toc:m};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"moon r"),") command will run one or many ",(0,r.kt)("a",{parentName:"p",href:"../concepts/target"},"targets")," and all of\nits dependencies in topological order. Each run will incrementally cache each task, improving speed\nand development times... over time. View the official ",(0,r.kt)("a",{parentName:"p",href:"../run-task"},"Run a task")," and\n",(0,r.kt)("a",{parentName:"p",href:"../cheat-sheet#tasks"},"Cheat sheet")," articles for more information!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in project `app`\n$ moon run app:lint\n$ moon app:lint\n\n# Run `dev` in project `client` and `server`\n$ moon run client:dev server:dev\n\n# Run `test` in all projects\n$ moon run :test\n\n# Run `test` in all projects with tag `frontend`\n$ moon run '#frontend:test'\n\n# Run `format` in closest project (`client`)\n$ cd apps/client\n$ moon run format\n\n# Run `build` in projects matching the query\n$ moon run :build --query \"language=javascript && projectType=library\"\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"How affected status is determined is highly dependent on whether the command is running locally, in\nCI, and what options are provided. The following scenarios are possible:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"When ",(0,r.kt)("inlineCode",{parentName:"li"},"--affected")," is provided, will explicitly use ",(0,r.kt)("inlineCode",{parentName:"li"},"--remote")," to determine CI or local."),(0,r.kt)("li",{parentName:"ul"},"When not provided, will use ",(0,r.kt)("inlineCode",{parentName:"li"},"git diff")," in CI, or ",(0,r.kt)("inlineCode",{parentName:"li"},"git status")," for local."),(0,r.kt)("li",{parentName:"ul"},"To bypass affected logic entirely, use ",(0,r.kt)("inlineCode",{parentName:"li"},"--force"),"."))),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"...<target>")," - ",(0,r.kt)("a",{parentName:"li",href:"../concepts/target"},"Targets")," or project relative tasks to run."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[-- <args>]")," - Additional arguments to\n",(0,r.kt)("a",{parentName:"li",href:"../run-task#passing-arguments-to-the-underlying-command"},"pass to the underlying command"),".")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-f"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"--force")," - Force run and ignore touched files and affected status. Will not query VCS."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--dependents")," - Run downstream dependent targets (of the same task name) as well."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-i"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"--interactive")," - Run the target in an interactive mode."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--profile <type>")," - Record and ",(0,r.kt)("a",{parentName:"li",href:"../guides/profile"},"generate a profile")," for ran tasks.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Types: ",(0,r.kt)("inlineCode",{parentName:"li"},"cpu"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"heap")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--query")," - Filter projects to run targets against using\n",(0,r.kt)("a",{parentName:"li",href:"../concepts/query-lang"},"a query statement"),". ",(0,r.kt)(i.Z,{version:"1.3.0",mdxType:"VersionLabel"})),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-u"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"--updateCache")," - Bypass cache and force update any existing items.")),(0,r.kt)("h4",{id:"affected"},"Affected"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--affected")," - Only run target if affected by changed files, ",(0,r.kt)("em",{parentName:"li"},"otherwise")," will always run."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--remote")," - Determine affected against remote by comparing ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD")," against a base revision\n(default branch), ",(0,r.kt)("em",{parentName:"li"},"otherwise")," uses local changes.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Can control revisions with ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_BASE")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_HEAD"),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--status <type>")," - Filter affected based on a change status. Can be passed multiple times.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Types: ",(0,r.kt)("inlineCode",{parentName:"li"},"all")," (default), ",(0,r.kt)("inlineCode",{parentName:"li"},"added"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"deleted"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"modified"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"staged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"unstaged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"untracked"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f9cc98ab.c9821767.js b/assets/js/f9cc98ab.c9821767.js deleted file mode 100644 index ef8f26455f1..00000000000 --- a/assets/js/f9cc98ab.c9821767.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8751],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=p(n),u=r,f=d["".concat(s,".").concat(u)]||d[u]||c[u]||i;return n?a.createElement(f,l(l({ref:t},m),{},{components:n})):a.createElement(f,l({ref:t},m))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;p<i;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(9619);function i(e){let{header:t,inline:n,updated:i,version:l}=e;return a.createElement(r.Z,{text:`v${l}`,variant:i?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(40624),i=n(31792);const l={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function o(e){let{className:t,icon:n,text:o,variant:s}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",s?l[s]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(i.Z,{icon:n,className:"mr-1"}),o)}},21612:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),i=n(79022);const l={title:"run"},o=void 0,s={unversionedId:"commands/run",id:"commands/run",title:"run",description:"The moon run (or moon r) command will run one or many targets and all of",source:"@site/docs/commands/run.mdx",sourceDirName:"commands",slug:"/commands/run",permalink:"/docs/commands/run",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/run.mdx",tags:[],version:"current",frontMatter:{title:"run"},sidebar:"docs",previous:{title:"touched-files",permalink:"/docs/commands/query/touched-files"},next:{title:"setup",permalink:"/docs/commands/setup"}},p={},m=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3},{value:"Affected",id:"affected",level:4}],c={toc:m};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"moon r"),") command will run one or many ",(0,r.kt)("a",{parentName:"p",href:"../concepts/target"},"targets")," and all of\nits dependencies in topological order. Each run will incrementally cache each task, improving speed\nand development times... over time. View the official ",(0,r.kt)("a",{parentName:"p",href:"../run-task"},"Run a task")," and\n",(0,r.kt)("a",{parentName:"p",href:"../cheat-sheet#tasks"},"Cheat sheet")," articles for more information!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in project `app`\n$ moon run app:lint\n$ moon app:lint\n\n# Run `dev` in project `client` and `server`\n$ moon run client:dev server:dev\n\n# Run `test` in all projects\n$ moon run :test\n\n# Run `test` in all projects with tag `frontend`\n$ moon run '#frontend:test'\n\n# Run `format` in closest project (`client`)\n$ cd apps/client\n$ moon run format\n\n# Run `build` in projects matching the query\n$ moon run :build --query \"language=javascript && projectType=library\"\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"How affected status is determined is highly dependent on whether the command is running locally, in\nCI, and what options are provided. The following scenarios are possible:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"When ",(0,r.kt)("inlineCode",{parentName:"li"},"--affected")," is provided, will explicitly use ",(0,r.kt)("inlineCode",{parentName:"li"},"--remote")," to determine CI or local."),(0,r.kt)("li",{parentName:"ul"},"When not provided, will use ",(0,r.kt)("inlineCode",{parentName:"li"},"git diff")," in CI, or ",(0,r.kt)("inlineCode",{parentName:"li"},"git status")," for local."),(0,r.kt)("li",{parentName:"ul"},"To bypass affected logic entirely, use ",(0,r.kt)("inlineCode",{parentName:"li"},"--force"),"."))),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"...<target>")," - ",(0,r.kt)("a",{parentName:"li",href:"../concepts/target"},"Targets")," or project relative tasks to run."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[-- <args>]")," - Additional arguments to\n",(0,r.kt)("a",{parentName:"li",href:"../run-task#passing-arguments-to-the-underlying-command"},"pass to the underlying command"),".")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-f"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"--force")," - Force run and ignore touched files and affected status. Will not query VCS."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--dependents")," - Run downstream dependent targets (of the same task name) as well."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-i"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"--interactive")," - Run the target in an interactive mode."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--profile <type>")," - Record and ",(0,r.kt)("a",{parentName:"li",href:"../guides/profile"},"generate a profile")," for ran tasks.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Types: ",(0,r.kt)("inlineCode",{parentName:"li"},"cpu"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"heap")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--query")," - Filter projects to run targets against using\n",(0,r.kt)("a",{parentName:"li",href:"../concepts/query-lang"},"a query statement"),". ",(0,r.kt)(i.Z,{version:"1.3.0",mdxType:"VersionLabel"})),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-u"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"--updateCache")," - Bypass cache and force update any existing items.")),(0,r.kt)("h4",{id:"affected"},"Affected"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--affected")," - Only run target if affected by changed files, ",(0,r.kt)("em",{parentName:"li"},"otherwise")," will always run."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--remote")," - Determine affected against remote by comparing ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD")," against a base revision\n(default branch), ",(0,r.kt)("em",{parentName:"li"},"otherwise")," uses local changes.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Can control revisions with ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_BASE")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_HEAD"),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--status <type>")," - Filter affected based on a change status. Can be passed multiple times.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Types: ",(0,r.kt)("inlineCode",{parentName:"li"},"all")," (default), ",(0,r.kt)("inlineCode",{parentName:"li"},"added"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"deleted"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"modified"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"staged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"unstaged"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"untracked"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fab64b27.0283795c.js b/assets/js/fab64b27.0283795c.js new file mode 100644 index 00000000000..8f8b7a04b6f --- /dev/null +++ b/assets/js/fab64b27.0283795c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67964],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(n),d=o,b=u["".concat(p,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(b,i(i({ref:t},s),{},{components:n})):r.createElement(b,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},36630:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"bin"},i=void 0,l={unversionedId:"proto/commands/bin",id:"proto/commands/bin",title:"bin",description:"The proto bin command will return an absolute path to a tool's binary within the toolchain.",source:"@site/docs/proto/commands/bin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/bin",permalink:"/docs/proto/commands/bin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/bin.mdx",tags:[],version:"current",frontMatter:{title:"bin"},sidebar:"proto",previous:{title:"alias",permalink:"/docs/proto/commands/alias"},next:{title:"clean",permalink:"/docs/proto/commands/clean"}},p={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],s={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto bin <tool>")," command will return an absolute path to a tool's binary within the toolchain.\nWhen a tool has not been installed, or a version cannot be resolved, the command will exit with a\nfailure."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto bin node 16.10.0\n/Users/example/.proto/tools/node/16.10.0/bin/node\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[version]")," - Version of tool. If not provided, will attempt to\n",(0,o.kt)("a",{parentName:"li",href:"../detection"},"detect the version"),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--shim")," - When applicable, return an absolute path to a tool's local shim file.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fab64b27.cfe1e3a3.js b/assets/js/fab64b27.cfe1e3a3.js deleted file mode 100644 index 81cb546091d..00000000000 --- a/assets/js/fab64b27.cfe1e3a3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7964],{35318:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(n),d=o,b=u["".concat(p,".").concat(d)]||u[d]||m[d]||a;return n?r.createElement(b,i(i({ref:t},s),{},{components:n})):r.createElement(b,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},36630:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(25773),o=(n(27378),n(35318));const a={title:"bin"},i=void 0,l={unversionedId:"proto/commands/bin",id:"proto/commands/bin",title:"bin",description:"The proto bin command will return an absolute path to a tool's binary within the toolchain.",source:"@site/docs/proto/commands/bin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/bin",permalink:"/docs/proto/commands/bin",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/bin.mdx",tags:[],version:"current",frontMatter:{title:"bin"},sidebar:"proto",previous:{title:"alias",permalink:"/docs/proto/commands/alias"},next:{title:"clean",permalink:"/docs/proto/commands/clean"}},p={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],s={toc:c};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"proto bin <tool>")," command will return an absolute path to a tool's binary within the toolchain.\nWhen a tool has not been installed, or a version cannot be resolved, the command will exit with a\nfailure."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto bin node 16.10.0\n/Users/example/.proto/tools/node/16.10.0/bin/node\n")),(0,o.kt)("h3",{id:"arguments"},"Arguments"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"<tool>")," - Type of tool."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"[version]")," - Version of tool. If not provided, will attempt to\n",(0,o.kt)("a",{parentName:"li",href:"../detection"},"detect the version"),".")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"--shim")," - When applicable, return an absolute path to a tool's local shim file.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fac0f815.74920a49.js b/assets/js/fac0f815.74920a49.js new file mode 100644 index 00000000000..0b1f3c9722c --- /dev/null +++ b/assets/js/fac0f815.74920a49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53941],{62698:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/graph","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/fac0f815.a637b488.js b/assets/js/fac0f815.a637b488.js deleted file mode 100644 index dac34ac63aa..00000000000 --- a/assets/js/fac0f815.a637b488.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3941],{62698:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/graph","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/fb2dd7db.4855a250.js b/assets/js/fb2dd7db.4855a250.js deleted file mode 100644 index d47dba7d467..00000000000 --- a/assets/js/fb2dd7db.4855a250.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9818],{71673:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/lang","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/fb2dd7db.c4cf94ec.js b/assets/js/fb2dd7db.c4cf94ec.js new file mode 100644 index 00000000000..c534f74d5ba --- /dev/null +++ b/assets/js/fb2dd7db.c4cf94ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39818],{71673:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/lang","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/fba28ebc.10468891.js b/assets/js/fba28ebc.10468891.js deleted file mode 100644 index d217cd9de57..00000000000 --- a/assets/js/fba28ebc.10468891.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[514],{64234:e=>{e.exports=JSON.parse('{"label":"outdated","permalink":"/blog/tags/outdated","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fba28ebc.3f032014.js b/assets/js/fba28ebc.3f032014.js new file mode 100644 index 00000000000..8d85252b8f6 --- /dev/null +++ b/assets/js/fba28ebc.3f032014.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90514],{64234:e=>{e.exports=JSON.parse('{"label":"outdated","permalink":"/blog/tags/outdated","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fbcfc993.1736e04b.js b/assets/js/fbcfc993.1736e04b.js new file mode 100644 index 00000000000..1f7f84828ad --- /dev/null +++ b/assets/js/fbcfc993.1736e04b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53647],{48435:e=>{e.exports=JSON.parse('{"label":"pin","permalink":"/blog/tags/pin","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fbcfc993.2caa3c49.js b/assets/js/fbcfc993.2caa3c49.js deleted file mode 100644 index 750b933200c..00000000000 --- a/assets/js/fbcfc993.2caa3c49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3647],{48435:e=>{e.exports=JSON.parse('{"label":"pin","permalink":"/blog/tags/pin","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fc3ae8bf.a318dd9f.js b/assets/js/fc3ae8bf.a318dd9f.js new file mode 100644 index 00000000000..255ae98fa35 --- /dev/null +++ b/assets/js/fc3ae8bf.a318dd9f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15411],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),d=p(n),k=r,u=d["".concat(l,".").concat(k)]||d[k]||c[k]||o;return n?a.createElement(u,i(i({ref:t},m),{},{components:n})):a.createElement(u,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(83469),o=n(31792);function i(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:r.dT$}))}},97168:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),o=n(32189);const i={title:".moon/tasks.yml, .moon/tasks/**/*.yml",sidebar_label:".moon/tasks..."},s=void 0,l={unversionedId:"config/tasks",id:"config/tasks",title:".moon/tasks.yml, .moon/tasks/**/*.yml",description:"The .moon/tasks.yml file configures file groups and tasks that are inherited by every project in",source:"@site/docs/config/tasks.mdx",sourceDirName:"config",slug:"/config/tasks",permalink:"/docs/config/tasks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/tasks.mdx",tags:[],version:"current",frontMatter:{title:".moon/tasks.yml, .moon/tasks/**/*.yml",sidebar_label:".moon/tasks..."},sidebar:"docs",previous:{title:".moon/toolchain.yml",permalink:"/docs/config/toolchain"},next:{title:"moon.yml",permalink:"/docs/config/project"}},p={},m=[{value:"<code>extends</code>",id:"extends",level:2},{value:"<code>fileGroups</code>",id:"filegroups",level:2},{value:"<code>implicitDeps</code>",id:"implicitdeps",level:2},{value:"<code>implicitInputs</code>",id:"implicitinputs",level:2},{value:"<code>tasks</code>",id:"tasks",level:2}],c={toc:m};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks.yml")," file configures file groups and tasks that are inherited by ",(0,r.kt)("em",{parentName:"p"},"every")," project in\nthe workspace, while ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks/**/*.yml")," configures for projects based on their language or type.\n",(0,r.kt)("a",{parentName:"p",href:"../concepts/task-inheritance"},"Learn more about task inheritance!")),(0,r.kt)("p",null,"Projects can override or merge with these settings within their respective ",(0,r.kt)("a",{parentName:"p",href:"./project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"$schema: 'https://moonrepo.dev/schemas/tasks.json'\n")),(0,r.kt)("h2",{id:"extends"},(0,r.kt)("inlineCode",{parentName:"h2"},"extends")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#extends",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines an external ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks.yml")," to extend and inherit settings from. Perfect for reusability\nand sharing configuration across repositories and projects. When defined, this setting must be an\nHTTPS URL ",(0,r.kt)("em",{parentName:"p"},"or")," relative file system path that points to a valid YAML document!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml" {1}',title:'".moon/tasks.yml"',"{1}":!0},"extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/tasks.yml'\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"For map-based settings, ",(0,r.kt)("inlineCode",{parentName:"p"},"fileGroups")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"tasks"),", entries from both the extended configuration and\nlocal configuration are merged into a new map, with the values of the local taking precedence. Map\nvalues ",(0,r.kt)("em",{parentName:"p"},"are not")," deep merged!")),(0,r.kt)("h2",{id:"filegroups"},(0,r.kt)("inlineCode",{parentName:"h2"},"fileGroups")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#fileGroups",mdxType:"HeadingApiLink"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"For more information on file group configuration, refer to the\n",(0,r.kt)("a",{parentName:"p",href:"./project#filegroups"},(0,r.kt)("inlineCode",{parentName:"a"},"fileGroups"))," section in the ",(0,r.kt)("a",{parentName:"p",href:"./project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," doc.")),(0,r.kt)("p",null,"Defines ",(0,r.kt)("a",{parentName:"p",href:"../concepts/file-group"},"file groups")," that will be inherited by projects, and also enables\nenforcement of organizational patterns and file locations. For example, encourage projects to place\nsource files in a ",(0,r.kt)("inlineCode",{parentName:"p"},"src")," folder, and all test files in ",(0,r.kt)("inlineCode",{parentName:"p"},"tests"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"fileGroups:\n configs:\n - '*.config.{js,cjs,mjs}'\n - '*.json'\n sources:\n - 'src/**/*'\n - 'types/**/*'\n tests:\n - 'tests/**/*'\n - '**/__tests__/**/*'\n assets:\n - 'assets/**/*'\n - 'images/**/*'\n - 'static/**/*'\n - '**/*.{scss,css}'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"File paths and globs used within a file group are relative from the inherited project's root, and\nnot the workspace.")),(0,r.kt)("h2",{id:"implicitdeps"},(0,r.kt)("inlineCode",{parentName:"h2"},"implicitDeps")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#implicitDeps",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines task ",(0,r.kt)("a",{parentName:"p",href:"./project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps"))," that are implicitly inserted into ",(0,r.kt)("em",{parentName:"p"},"all")," inherited tasks within\na project. This is extremely useful for pre-building projects that are used extensively throughout\nthe repo, or always building project dependencies. Defaults to an empty list."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml" {1-2}',title:'".moon/tasks.yml"',"{1-2}":!0},"implicitDeps:\n - '^:build'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Implicit dependencies are ",(0,r.kt)("em",{parentName:"p"},"always")," inherited, regardless of the ",(0,r.kt)("a",{parentName:"p",href:"#mergedeps"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeDeps"))," option.")),(0,r.kt)("h2",{id:"implicitinputs"},(0,r.kt)("inlineCode",{parentName:"h2"},"implicitInputs")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#implicitInputs",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines task ",(0,r.kt)("a",{parentName:"p",href:"./project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs"))," that are implicitly inserted into ",(0,r.kt)("em",{parentName:"p"},"all"),' inherited tasks\nwithin a project. This is extremely useful for the "changes to these files should always trigger a\ntask" scenario.'),(0,r.kt)("p",null,"Like ",(0,r.kt)("inlineCode",{parentName:"p"},"inputs"),", file paths/globs defined here are relative from the inheriting project.\n",(0,r.kt)("a",{parentName:"p",href:"../concepts/file-pattern#project-relative"},"Project and workspace relative file patterns")," are\nsupported and encouraged."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml" {1-2}',title:'".moon/tasks/node.yml"',"{1-2}":!0},"implicitInputs:\n - 'package.json'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Implicit inputs are ",(0,r.kt)("em",{parentName:"p"},"always")," inherited, regardless of the ",(0,r.kt)("a",{parentName:"p",href:"#mergeinputs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeInputs"))," option.")),(0,r.kt)("h2",{id:"tasks"},(0,r.kt)("inlineCode",{parentName:"h2"},"tasks")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#tasks",mdxType:"HeadingApiLink"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"For more information on task configuration, refer to the ",(0,r.kt)("a",{parentName:"p",href:"./project#tasks"},(0,r.kt)("inlineCode",{parentName:"a"},"tasks"))," section in the\n",(0,r.kt)("a",{parentName:"p",href:"./project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," doc.")),(0,r.kt)("p",null,"As mentioned in the link above, ",(0,r.kt)("a",{parentName:"p",href:"../concepts/task"},"tasks")," are actions that are ran within the\ncontext of a project, and commonly wrap a system command. For most workspaces, every project\n",(0,r.kt)("em",{parentName:"p"},"should")," have linting, typechecking, testing, code formatting, so on and so forth. To reduce the\namount of boilerplate that ",(0,r.kt)("em",{parentName:"p"},"every")," project would require, this setting offers the ability to define\ntasks that are inherited by many projects within the workspace, but can also be overridden per\nproject."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"tasks:\n format:\n command: 'prettier --check .'\n\n lint:\n command: 'eslint --no-error-on-unmatched-pattern .'\n\n test:\n command: 'jest --passWithNoTests'\n\n typecheck:\n command: 'tsc --build'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Relative file paths and globs used within a task are relative from the inherited project's root,\nand not the workspace.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fc3ae8bf.b465b9a0.js b/assets/js/fc3ae8bf.b465b9a0.js deleted file mode 100644 index 0ccabfb67ee..00000000000 --- a/assets/js/fc3ae8bf.b465b9a0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5411],{35318:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),d=p(n),k=r,u=d["".concat(l,".").concat(k)]||d[k]||c[k]||o;return n?a.createElement(u,i(i({ref:t},m),{},{components:n})):a.createElement(u,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},32189:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(27378),r=n(83469),o=n(31792);function i(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:r.dT$}))}},97168:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var a=n(25773),r=(n(27378),n(35318)),o=n(32189);const i={title:".moon/tasks.yml, .moon/tasks/**/*.yml",sidebar_label:".moon/tasks..."},s=void 0,l={unversionedId:"config/tasks",id:"config/tasks",title:".moon/tasks.yml, .moon/tasks/**/*.yml",description:"The .moon/tasks.yml file configures file groups and tasks that are inherited by every project in",source:"@site/docs/config/tasks.mdx",sourceDirName:"config",slug:"/config/tasks",permalink:"/docs/config/tasks",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/config/tasks.mdx",tags:[],version:"current",frontMatter:{title:".moon/tasks.yml, .moon/tasks/**/*.yml",sidebar_label:".moon/tasks..."},sidebar:"docs",previous:{title:".moon/toolchain.yml",permalink:"/docs/config/toolchain"},next:{title:"moon.yml",permalink:"/docs/config/project"}},p={},m=[{value:"<code>extends</code>",id:"extends",level:2},{value:"<code>fileGroups</code>",id:"filegroups",level:2},{value:"<code>implicitDeps</code>",id:"implicitdeps",level:2},{value:"<code>implicitInputs</code>",id:"implicitinputs",level:2},{value:"<code>tasks</code>",id:"tasks",level:2}],c={toc:m};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks.yml")," file configures file groups and tasks that are inherited by ",(0,r.kt)("em",{parentName:"p"},"every")," project in\nthe workspace, while ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks/**/*.yml")," configures for projects based on their language or type.\n",(0,r.kt)("a",{parentName:"p",href:"../concepts/task-inheritance"},"Learn more about task inheritance!")),(0,r.kt)("p",null,"Projects can override or merge with these settings within their respective ",(0,r.kt)("a",{parentName:"p",href:"./project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"$schema: 'https://moonrepo.dev/schemas/tasks.json'\n")),(0,r.kt)("h2",{id:"extends"},(0,r.kt)("inlineCode",{parentName:"h2"},"extends")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#extends",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines an external ",(0,r.kt)("inlineCode",{parentName:"p"},".moon/tasks.yml")," to extend and inherit settings from. Perfect for reusability\nand sharing configuration across repositories and projects. When defined, this setting must be an\nHTTPS URL ",(0,r.kt)("em",{parentName:"p"},"or")," relative file system path that points to a valid YAML document!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml" {1}',title:'".moon/tasks.yml"',"{1}":!0},"extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/tasks.yml'\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"For map-based settings, ",(0,r.kt)("inlineCode",{parentName:"p"},"fileGroups")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"tasks"),", entries from both the extended configuration and\nlocal configuration are merged into a new map, with the values of the local taking precedence. Map\nvalues ",(0,r.kt)("em",{parentName:"p"},"are not")," deep merged!")),(0,r.kt)("h2",{id:"filegroups"},(0,r.kt)("inlineCode",{parentName:"h2"},"fileGroups")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#fileGroups",mdxType:"HeadingApiLink"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"For more information on file group configuration, refer to the\n",(0,r.kt)("a",{parentName:"p",href:"./project#filegroups"},(0,r.kt)("inlineCode",{parentName:"a"},"fileGroups"))," section in the ",(0,r.kt)("a",{parentName:"p",href:"./project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," doc.")),(0,r.kt)("p",null,"Defines ",(0,r.kt)("a",{parentName:"p",href:"../concepts/file-group"},"file groups")," that will be inherited by projects, and also enables\nenforcement of organizational patterns and file locations. For example, encourage projects to place\nsource files in a ",(0,r.kt)("inlineCode",{parentName:"p"},"src")," folder, and all test files in ",(0,r.kt)("inlineCode",{parentName:"p"},"tests"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"fileGroups:\n configs:\n - '*.config.{js,cjs,mjs}'\n - '*.json'\n sources:\n - 'src/**/*'\n - 'types/**/*'\n tests:\n - 'tests/**/*'\n - '**/__tests__/**/*'\n assets:\n - 'assets/**/*'\n - 'images/**/*'\n - 'static/**/*'\n - '**/*.{scss,css}'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"File paths and globs used within a file group are relative from the inherited project's root, and\nnot the workspace.")),(0,r.kt)("h2",{id:"implicitdeps"},(0,r.kt)("inlineCode",{parentName:"h2"},"implicitDeps")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#implicitDeps",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines task ",(0,r.kt)("a",{parentName:"p",href:"./project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps"))," that are implicitly inserted into ",(0,r.kt)("em",{parentName:"p"},"all")," inherited tasks within\na project. This is extremely useful for pre-building projects that are used extensively throughout\nthe repo, or always building project dependencies. Defaults to an empty list."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml" {1-2}',title:'".moon/tasks.yml"',"{1-2}":!0},"implicitDeps:\n - '^:build'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Implicit dependencies are ",(0,r.kt)("em",{parentName:"p"},"always")," inherited, regardless of the ",(0,r.kt)("a",{parentName:"p",href:"#mergedeps"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeDeps"))," option.")),(0,r.kt)("h2",{id:"implicitinputs"},(0,r.kt)("inlineCode",{parentName:"h2"},"implicitInputs")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#implicitInputs",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"Defines task ",(0,r.kt)("a",{parentName:"p",href:"./project#inputs"},(0,r.kt)("inlineCode",{parentName:"a"},"inputs"))," that are implicitly inserted into ",(0,r.kt)("em",{parentName:"p"},"all"),' inherited tasks\nwithin a project. This is extremely useful for the "changes to these files should always trigger a\ntask" scenario.'),(0,r.kt)("p",null,"Like ",(0,r.kt)("inlineCode",{parentName:"p"},"inputs"),", file paths/globs defined here are relative from the inheriting project.\n",(0,r.kt)("a",{parentName:"p",href:"../concepts/file-pattern#project-relative"},"Project and workspace relative file patterns")," are\nsupported and encouraged."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml" {1-2}',title:'".moon/tasks/node.yml"',"{1-2}":!0},"implicitInputs:\n - 'package.json'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Implicit inputs are ",(0,r.kt)("em",{parentName:"p"},"always")," inherited, regardless of the ",(0,r.kt)("a",{parentName:"p",href:"#mergeinputs"},(0,r.kt)("inlineCode",{parentName:"a"},"mergeInputs"))," option.")),(0,r.kt)("h2",{id:"tasks"},(0,r.kt)("inlineCode",{parentName:"h2"},"tasks")),(0,r.kt)(o.Z,{to:"/api/types/interface/InheritedTasksConfig#tasks",mdxType:"HeadingApiLink"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"For more information on task configuration, refer to the ",(0,r.kt)("a",{parentName:"p",href:"./project#tasks"},(0,r.kt)("inlineCode",{parentName:"a"},"tasks"))," section in the\n",(0,r.kt)("a",{parentName:"p",href:"./project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," doc.")),(0,r.kt)("p",null,"As mentioned in the link above, ",(0,r.kt)("a",{parentName:"p",href:"../concepts/task"},"tasks")," are actions that are ran within the\ncontext of a project, and commonly wrap a system command. For most workspaces, every project\n",(0,r.kt)("em",{parentName:"p"},"should")," have linting, typechecking, testing, code formatting, so on and so forth. To reduce the\namount of boilerplate that ",(0,r.kt)("em",{parentName:"p"},"every")," project would require, this setting offers the ability to define\ntasks that are inherited by many projects within the workspace, but can also be overridden per\nproject."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"tasks:\n format:\n command: 'prettier --check .'\n\n lint:\n command: 'eslint --no-error-on-unmatched-pattern .'\n\n test:\n command: 'jest --passWithNoTests'\n\n typecheck:\n command: 'tsc --build'\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Relative file paths and globs used within a task are relative from the inherited project's root,\nand not the workspace.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fc3deafd.c41e85b6.js b/assets/js/fc3deafd.c41e85b6.js deleted file mode 100644 index 5c8c31f8ca8..00000000000 --- a/assets/js/fc3deafd.c41e85b6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7659],{54568:e=>{e.exports=JSON.parse('{"label":"go","permalink":"/blog/tags/go","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fc3deafd.d7f57ef0.js b/assets/js/fc3deafd.d7f57ef0.js new file mode 100644 index 00000000000..05931e92891 --- /dev/null +++ b/assets/js/fc3deafd.d7f57ef0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77659],{54568:e=>{e.exports=JSON.parse('{"label":"go","permalink":"/blog/tags/go","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fc62dd75.3c243465.js b/assets/js/fc62dd75.3c243465.js new file mode 100644 index 00000000000..90d45b2e698 --- /dev/null +++ b/assets/js/fc62dd75.3c243465.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11280],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),p=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||l;return n?o.createElement(f,a(a({ref:t},c),{},{components:n})):o.createElement(f,a({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,a=new Array(l);a[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var p=2;p<l;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(27378),r=n(9619);function l(e){let{header:t,inline:n,updated:l,version:a}=e;return o.createElement(r.Z,{text:`v${a}`,variant:l?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var o=n(27378),r=n(40624),l=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:i}=e;return o.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?a[i]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(l.Z,{icon:n,className:"mr-1"}),s)}},83950:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=n(25773),r=(n(27378),n(35318)),l=n(79022);const a={title:"tools"},s=void 0,i={unversionedId:"proto/commands/tools",id:"proto/commands/tools",title:"tools",description:"The proto tools command will list all tools that have been installed, along with their installed",source:"@site/docs/proto/commands/tools.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/tools",permalink:"/docs/proto/commands/tools",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/tools.mdx",tags:[],version:"current",frontMatter:{title:"tools"},sidebar:"proto",previous:{title:"setup",permalink:"/docs/proto/commands/setup"},next:{title:"unalias",permalink:"/docs/proto/commands/unalias"}},p={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{version:"0.18.0",header:!0,mdxType:"VersionLabel"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto tools")," command will list all tools that have been installed, along with their installed\nversions, relevant timestamps, available aliases, and store location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ proto tools\n\ngo - Go\n Store: ~/.proto/tools/go\n Versions:\n 1.20.0 - installed 08/24/23, last used 09/18/23\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\n\nnode - Node.js\n Store: ~/.proto/tools/node\n Aliases:\n ~20 = stable\n Versions:\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\n 18.14.0 - installed 09/04/23, last used 09/04/23\n 18.17.1 - installed 09/04/23, last used 09/04/23\n 19.0.0 - installed 09/03/23\n 20.0.0 - installed 09/03/23\n 20.6.0 - installed 09/04/23, last used 09/18/23\n")),(0,r.kt)("p",null,"A list of tool IDs can be provided to filter the output list."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto tools node npm\n")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[id...]")," - IDs of plugins.")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--json")," - Print the list in JSON format.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fc62dd75.54c3e13f.js b/assets/js/fc62dd75.54c3e13f.js deleted file mode 100644 index 9f330e396df..00000000000 --- a/assets/js/fc62dd75.54c3e13f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1280],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var o=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),p=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||l;return n?o.createElement(f,a(a({ref:t},c),{},{components:n})):o.createElement(f,a({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,a=new Array(l);a[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var p=2;p<l;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(27378),r=n(9619);function l(e){let{header:t,inline:n,updated:l,version:a}=e;return o.createElement(r.Z,{text:`v${a}`,variant:l?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var o=n(27378),r=n(40624),l=n(31792);const a={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:i}=e;return o.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",i?a[i]:"bg-gray-100 text-gray-800",t)},n&&o.createElement(l.Z,{icon:n,className:"mr-1"}),s)}},83950:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=n(25773),r=(n(27378),n(35318)),l=n(79022);const a={title:"tools"},s=void 0,i={unversionedId:"proto/commands/tools",id:"proto/commands/tools",title:"tools",description:"The proto tools command will list all tools that have been installed, along with their installed",source:"@site/docs/proto/commands/tools.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/tools",permalink:"/docs/proto/commands/tools",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/tools.mdx",tags:[],version:"current",frontMatter:{title:"tools"},sidebar:"proto",previous:{title:"setup",permalink:"/docs/proto/commands/setup"},next:{title:"unalias",permalink:"/docs/proto/commands/unalias"}},p={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{version:"0.18.0",header:!0,mdxType:"VersionLabel"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"proto tools")," command will list all tools that have been installed, along with their installed\nversions, relevant timestamps, available aliases, and store location."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"$ proto tools\n\ngo - Go\n Store: ~/.proto/tools/go\n Versions:\n 1.20.0 - installed 08/24/23, last used 09/18/23\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\n\nnode - Node.js\n Store: ~/.proto/tools/node\n Aliases:\n ~20 = stable\n Versions:\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\n 18.14.0 - installed 09/04/23, last used 09/04/23\n 18.17.1 - installed 09/04/23, last used 09/04/23\n 19.0.0 - installed 09/03/23\n 20.0.0 - installed 09/03/23\n 20.6.0 - installed 09/04/23, last used 09/18/23\n")),(0,r.kt)("p",null,"A list of tool IDs can be provided to filter the output list."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ proto tools node npm\n")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[id...]")," - IDs of plugins.")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--json")," - Print the list in JSON format.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fcb295ad.e39762a9.js b/assets/js/fcb295ad.e39762a9.js deleted file mode 100644 index 7b016f252f8..00000000000 --- a/assets/js/fcb295ad.e39762a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7642],{22118:s=>{s.exports=JSON.parse('{"label":"vcs","permalink":"/docs/tags/vcs","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/fcb295ad.e4bd04c4.js b/assets/js/fcb295ad.e4bd04c4.js new file mode 100644 index 00000000000..309fd46c9e8 --- /dev/null +++ b/assets/js/fcb295ad.e4bd04c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[17642],{22118:s=>{s.exports=JSON.parse('{"label":"vcs","permalink":"/docs/tags/vcs","allTagsPath":"/docs/tags","count":1,"items":[{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","permalink":"/docs/guides/vcs-hooks"}]}')}}]); \ No newline at end of file diff --git a/assets/js/fcbcdf3c.afa2dd54.js b/assets/js/fcbcdf3c.afa2dd54.js new file mode 100644 index 00000000000..f70ff6dd609 --- /dev/null +++ b/assets/js/fcbcdf3c.afa2dd54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90439],{92942:e=>{e.exports=JSON.parse('{"label":"pipeline","permalink":"/blog/tags/pipeline","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/fcbcdf3c.cdb71939.js b/assets/js/fcbcdf3c.cdb71939.js deleted file mode 100644 index 258d9cc04b4..00000000000 --- a/assets/js/fcbcdf3c.cdb71939.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[439],{92942:e=>{e.exports=JSON.parse('{"label":"pipeline","permalink":"/blog/tags/pipeline","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/fd27c808.5e1d9661.js b/assets/js/fd27c808.5e1d9661.js deleted file mode 100644 index c87a70eef7a..00000000000 --- a/assets/js/fd27c808.5e1d9661.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[661],{35171:e=>{e.exports=JSON.parse('{"title":"How it works","keywords":["how","works","mental-model","languages","project-graph","action-graph","dep-graph","dependency-graph","task-graph"],"slug":"/how-it-works","permalink":"/docs/how-it-works","navigation":{"previous":{"title":"Introduction","permalink":"/docs/"},"next":{"title":"Languages","permalink":"/docs/how-it-works/languages"}}}')}}]); \ No newline at end of file diff --git a/assets/js/fd27c808.b008d09b.js b/assets/js/fd27c808.b008d09b.js new file mode 100644 index 00000000000..2bfc2cb68ae --- /dev/null +++ b/assets/js/fd27c808.b008d09b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90661],{35171:e=>{e.exports=JSON.parse('{"title":"How it works","keywords":["how","works","mental-model","languages","project-graph","action-graph","dep-graph","dependency-graph","task-graph"],"slug":"/how-it-works","permalink":"/docs/how-it-works","navigation":{"previous":{"title":"Introduction","permalink":"/docs/"},"next":{"title":"Languages","permalink":"/docs/how-it-works/languages"}}}')}}]); \ No newline at end of file diff --git a/assets/js/fd485bd3.5078cdf1.js b/assets/js/fd485bd3.5078cdf1.js new file mode 100644 index 00000000000..9895129d4a3 --- /dev/null +++ b/assets/js/fd485bd3.5078cdf1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90543],{35318:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>u});var o=t(27378);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=o.createContext({}),c=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=c(e.components);return o.createElement(l.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(t),u=r,h=d["".concat(l,".").concat(u)]||d[u]||m[u]||a;return t?o.createElement(h,i(i({ref:n},p),{},{components:t})):o.createElement(h,i({ref:n},p))}));function u(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=d;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c<a;c++)i[c]=t[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,t)}d.displayName="MDXCreateElement"},9351:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=t(25773),r=(t(27378),t(35318));const a={slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},i=void 0,s={permalink:"/blog/moon-v1.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx",source:"@site/blog/2023-06-12_moon-v1.8.mdx",title:"moon v1.8 - Code owners and shared configuration",description:"With this release, we've focused on a critical facet of managing a large codebase, source code",date:"2023-06-12T00:00:00.000Z",formattedDate:"June 12, 2023",tags:[{label:"source",permalink:"/blog/tags/source"},{label:"code",permalink:"/blog/tags/code"},{label:"owners",permalink:"/blog/tags/owners"},{label:"ownership",permalink:"/blog/tags/ownership"}],readingTime:3.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},prevItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"},nextItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"}},l={image:t(18429).Z,authorsImageUrls:[void 0]},c=[{value:"Support for code ownership",id:"support-for-code-ownership",level:2},{value:"Generate a <code>CODEOWNERS</code>",id:"generate-a-codeowners",level:3},{value:"New project <code>owners</code> setting",id:"new-project-owners-setting",level:3},{value:"New <code>moon sync codeowners</code> command",id:"new-moon-sync-codeowners-command",level:3},{value:"Community-driven task configuration",id:"community-driven-task-configuration",level:2},{value:"Other changes",id:"other-changes",level:2}],p={toc:c};function m(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've focused on a critical facet of managing a large codebase, source code\nownership, and sharing task configuration."),(0,r.kt)("h2",{id:"support-for-code-ownership"},"Support for code ownership"),(0,r.kt)("p",null,"An important workflow for companies of any size is reviewing code, and ensuring the right people are\nreviewing and approving that code. This is especially true for large companies with hundreds of\ndevelopers, or many distinct teams working in a single codebase."),(0,r.kt)("p",null,"Popular VCS providers like ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/"},"GitHub"),", ",(0,r.kt)("a",{parentName:"p",href:"https://about.gitlab.com/"},"GitLab"),", and\n",(0,r.kt)("a",{parentName:"p",href:"https://bitbucket.org/product/"},"Bitbucket")," provide built-in features to handle such workflows,\naptly named code owners. They all achieve this through a similar mechanism, a single ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS"),"\nfile that maps file system paths to owners (users, teams, groups, etc). These owners are then\nrequired to approve a pull/merge request because it can be merged into the base branch."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For more information, view our official in-depth ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/codeowners"},"code owners guide"),"!")),(0,r.kt)("h3",{id:"generate-a-codeowners"},"Generate a ",(0,r.kt)("inlineCode",{parentName:"h3"},"CODEOWNERS")),(0,r.kt)("p",null,"Managing the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file manually can be a tedious task, especially when you have hundreds of\nprojects. To help with this, moon can generate the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file for you,\n",(0,r.kt)("a",{parentName:"p",href:"#new-project-owners-setting"},"based on project owners"),", formatted to your VCS provider of choice.\nThis helps to avoid an out-of-date ownership file!"),(0,r.kt)("p",null,"We're introducing a few new workspace settings to handle this, the first is\n",(0,r.kt)("a",{parentName:"p",href:"/docs/config/workspace#codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},"codeowners")),", which enables and configure code ownership as a\nwhole, and the second is ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/workspace#provider"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.provider")),", which determines the VCS\nprovider to generate the file for (and unlocks future features)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"codeowners:\n syncOnRun: true\n globalPaths:\n '*': ['@admins']\n\nvcs:\n manager: 'git'\n provider: 'github'\n")),(0,r.kt)("p",null,"The settings above will generate the following file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# (workspace)\n* @admins\n")),(0,r.kt)("p",null,"While this looks very simple, it really shines once projects start adding their own granular code\nownership. Continue reading for more information!"),(0,r.kt)("h3",{id:"new-project-owners-setting"},"New project ",(0,r.kt)("inlineCode",{parentName:"h3"},"owners")," setting"),(0,r.kt)("p",null,"To make use of code owners, you'll need to define an ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#owners"},(0,r.kt)("inlineCode",{parentName:"a"},"owners"))," setting\nin a project's ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file. This setting requires a list/map of owners\n(contributors required to review) associated to file paths/patterns, relative from the current\nproject's root."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="packages/components/moon.yml"',title:'"packages/components/moon.yml"'},"owners:\n paths:\n 'src/': ['@frontend', '@design-system']\n '*.config.js': ['@frontend-infra']\n '*.json': ['@frontend-infra']\n")),(0,r.kt)("p",null,"These paths will then be prefixed with the project source when\n",(0,r.kt)("a",{parentName:"p",href:"#generate-a-codeowners"},"generating the ",(0,r.kt)("inlineCode",{parentName:"a"},"CODEOWNERS"))," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# components\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n")),(0,r.kt)("h3",{id:"new-moon-sync-codeowners-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h3"},"moon sync codeowners")," command"),(0,r.kt)("p",null,"Although moon can ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/workspace#synconrun"},"automatically generate")," the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file\nwhen running a target, there may be situations where this is disabled, or teams/developers would\nlike to generate the file manually. To handle this, we're providing the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/sync/codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},"moon sync codeowners"))," command, which will trigger the generation\nprocess."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync codeowners\n")),(0,r.kt)("h2",{id:"community-driven-task-configuration"},"Community-driven task configuration"),(0,r.kt)("p",null,"A powerful but often overlooked feature of moon is the ability to\n",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/sharing-config"},"share and extend task configuration")," from remote sources. This is\nextremely useful in..."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Providing a single source of truth for configuration."),(0,r.kt)("li",{parentName:"ul"},"Reducing task duplication across projects."),(0,r.kt)("li",{parentName:"ul"},"Ensuring tasks are battle-tested and ready for use.")),(0,r.kt)("p",null,"The other upside of this approach is that configuration can be ",(0,r.kt)("em",{parentName:"p"},"community-driven"),"! To support this\nas a first-class feature, we're launching the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs"},(0,r.kt)("inlineCode",{parentName:"a"},"moon-configs")," repository"),", a collection of task\nconfigurations for popular programming languages, frameworks, libraries, and more! As of now, the\nrepository is kind of empty, but we're hoping to grow it over time, so feel free to contribute!"),(0,r.kt)("p",null,"If you're curious how this works in practice, we'll use our Rust configuration as an example. The\nentire system is based around ",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/task-inheritance"},"tag inheritance"),", where a project\ncan inherit tasks from a remote source, and then extend or override them as needed. For example,\ncreate the tag-based config:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/tag-rust.yml"',title:'".moon/tasks/tag-rust.yml"'},"extends: 'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml'\n")),(0,r.kt)("p",null,"And then in Rust projects that you'd like to inherit these tasks, add the following tags:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tags: ['rust']\n")),(0,r.kt)("p",null,"It's as simple as that!"),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.8.0"},"official release")," for a full list of\nchanges."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added a new action to the graph, ",(0,r.kt)("inlineCode",{parentName:"li"},"SyncWorkspace"),", that'll be used for workspace-level checks."),(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_OUTPUT_STYLE")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_RETRY_COUNT")," environment variables.")))}m.isMDXComponent=!0},18429:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/v1.8-39d52ddb273bfa80248ada1b595a488e.png"}}]); \ No newline at end of file diff --git a/assets/js/fd485bd3.7daeec12.js b/assets/js/fd485bd3.7daeec12.js deleted file mode 100644 index 5a500dce613..00000000000 --- a/assets/js/fd485bd3.7daeec12.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[543],{35318:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>u});var o=t(27378);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=o.createContext({}),c=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=c(e.components);return o.createElement(l.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(t),u=r,h=d["".concat(l,".").concat(u)]||d[u]||m[u]||a;return t?o.createElement(h,i(i({ref:n},p),{},{components:t})):o.createElement(h,i({ref:n},p))}));function u(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=d;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c<a;c++)i[c]=t[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,t)}d.displayName="MDXCreateElement"},9351:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=t(25773),r=(t(27378),t(35318));const a={slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},i=void 0,s={permalink:"/blog/moon-v1.8",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx",source:"@site/blog/2023-06-12_moon-v1.8.mdx",title:"moon v1.8 - Code owners and shared configuration",description:"With this release, we've focused on a critical facet of managing a large codebase, source code",date:"2023-06-12T00:00:00.000Z",formattedDate:"June 12, 2023",tags:[{label:"source",permalink:"/blog/tags/source"},{label:"code",permalink:"/blog/tags/code"},{label:"owners",permalink:"/blog/tags/owners"},{label:"ownership",permalink:"/blog/tags/ownership"}],readingTime:3.265,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.8",title:"moon v1.8 - Code owners and shared configuration",authors:["milesj"],tags:["source","code","owners","ownership"],image:"./img/moon/v1.8.png"},prevItem:{title:"proto v0.11 - New shims and better logging",permalink:"/blog/proto-v0.11"},nextItem:{title:"moon v1.7 - Next-generation configuration and errors",permalink:"/blog/moon-v1.7"}},l={image:t(18429).Z,authorsImageUrls:[void 0]},c=[{value:"Support for code ownership",id:"support-for-code-ownership",level:2},{value:"Generate a <code>CODEOWNERS</code>",id:"generate-a-codeowners",level:3},{value:"New project <code>owners</code> setting",id:"new-project-owners-setting",level:3},{value:"New <code>moon sync codeowners</code> command",id:"new-moon-sync-codeowners-command",level:3},{value:"Community-driven task configuration",id:"community-driven-task-configuration",level:2},{value:"Other changes",id:"other-changes",level:2}],p={toc:c};function m(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,o.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With this release, we've focused on a critical facet of managing a large codebase, source code\nownership, and sharing task configuration."),(0,r.kt)("h2",{id:"support-for-code-ownership"},"Support for code ownership"),(0,r.kt)("p",null,"An important workflow for companies of any size is reviewing code, and ensuring the right people are\nreviewing and approving that code. This is especially true for large companies with hundreds of\ndevelopers, or many distinct teams working in a single codebase."),(0,r.kt)("p",null,"Popular VCS providers like ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/"},"GitHub"),", ",(0,r.kt)("a",{parentName:"p",href:"https://about.gitlab.com/"},"GitLab"),", and\n",(0,r.kt)("a",{parentName:"p",href:"https://bitbucket.org/product/"},"Bitbucket")," provide built-in features to handle such workflows,\naptly named code owners. They all achieve this through a similar mechanism, a single ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS"),"\nfile that maps file system paths to owners (users, teams, groups, etc). These owners are then\nrequired to approve a pull/merge request because it can be merged into the base branch."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For more information, view our official in-depth ",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/codeowners"},"code owners guide"),"!")),(0,r.kt)("h3",{id:"generate-a-codeowners"},"Generate a ",(0,r.kt)("inlineCode",{parentName:"h3"},"CODEOWNERS")),(0,r.kt)("p",null,"Managing the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file manually can be a tedious task, especially when you have hundreds of\nprojects. To help with this, moon can generate the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file for you,\n",(0,r.kt)("a",{parentName:"p",href:"#new-project-owners-setting"},"based on project owners"),", formatted to your VCS provider of choice.\nThis helps to avoid an out-of-date ownership file!"),(0,r.kt)("p",null,"We're introducing a few new workspace settings to handle this, the first is\n",(0,r.kt)("a",{parentName:"p",href:"/docs/config/workspace#codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},"codeowners")),", which enables and configure code ownership as a\nwhole, and the second is ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/workspace#provider"},(0,r.kt)("inlineCode",{parentName:"a"},"vcs.provider")),", which determines the VCS\nprovider to generate the file for (and unlocks future features)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/workspace.yml"',title:'".moon/workspace.yml"'},"codeowners:\n syncOnRun: true\n globalPaths:\n '*': ['@admins']\n\nvcs:\n manager: 'git'\n provider: 'github'\n")),(0,r.kt)("p",null,"The settings above will generate the following file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# (workspace)\n* @admins\n")),(0,r.kt)("p",null,"While this looks very simple, it really shines once projects start adding their own granular code\nownership. Continue reading for more information!"),(0,r.kt)("h3",{id:"new-project-owners-setting"},"New project ",(0,r.kt)("inlineCode",{parentName:"h3"},"owners")," setting"),(0,r.kt)("p",null,"To make use of code owners, you'll need to define an ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project#owners"},(0,r.kt)("inlineCode",{parentName:"a"},"owners"))," setting\nin a project's ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file. This setting requires a list/map of owners\n(contributors required to review) associated to file paths/patterns, relative from the current\nproject's root."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="packages/components/moon.yml"',title:'"packages/components/moon.yml"'},"owners:\n paths:\n 'src/': ['@frontend', '@design-system']\n '*.config.js': ['@frontend-infra']\n '*.json': ['@frontend-infra']\n")),(0,r.kt)("p",null,"These paths will then be prefixed with the project source when\n",(0,r.kt)("a",{parentName:"p",href:"#generate-a-codeowners"},"generating the ",(0,r.kt)("inlineCode",{parentName:"a"},"CODEOWNERS"))," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:'title=".github/CODEOWNERS"',title:'".github/CODEOWNERS"'},"# components\n/packages/components/src/ @frontend @design-system\n/packages/components/*.config.js @frontend-infra\n/packages/components/*.json @frontend-infra\n")),(0,r.kt)("h3",{id:"new-moon-sync-codeowners-command"},"New ",(0,r.kt)("inlineCode",{parentName:"h3"},"moon sync codeowners")," command"),(0,r.kt)("p",null,"Although moon can ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/workspace#synconrun"},"automatically generate")," the ",(0,r.kt)("inlineCode",{parentName:"p"},"CODEOWNERS")," file\nwhen running a target, there may be situations where this is disabled, or teams/developers would\nlike to generate the file manually. To handle this, we're providing the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/commands/sync/codeowners"},(0,r.kt)("inlineCode",{parentName:"a"},"moon sync codeowners"))," command, which will trigger the generation\nprocess."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon sync codeowners\n")),(0,r.kt)("h2",{id:"community-driven-task-configuration"},"Community-driven task configuration"),(0,r.kt)("p",null,"A powerful but often overlooked feature of moon is the ability to\n",(0,r.kt)("a",{parentName:"p",href:"/docs/guides/sharing-config"},"share and extend task configuration")," from remote sources. This is\nextremely useful in..."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Providing a single source of truth for configuration."),(0,r.kt)("li",{parentName:"ul"},"Reducing task duplication across projects."),(0,r.kt)("li",{parentName:"ul"},"Ensuring tasks are battle-tested and ready for use.")),(0,r.kt)("p",null,"The other upside of this approach is that configuration can be ",(0,r.kt)("em",{parentName:"p"},"community-driven"),"! To support this\nas a first-class feature, we're launching the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon-configs"},(0,r.kt)("inlineCode",{parentName:"a"},"moon-configs")," repository"),", a collection of task\nconfigurations for popular programming languages, frameworks, libraries, and more! As of now, the\nrepository is kind of empty, but we're hoping to grow it over time, so feel free to contribute!"),(0,r.kt)("p",null,"If you're curious how this works in practice, we'll use our Rust configuration as an example. The\nentire system is based around ",(0,r.kt)("a",{parentName:"p",href:"/docs/concepts/task-inheritance"},"tag inheritance"),", where a project\ncan inherit tasks from a remote source, and then extend or override them as needed. For example,\ncreate the tag-based config:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/tag-rust.yml"',title:'".moon/tasks/tag-rust.yml"'},"extends: 'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml'\n")),(0,r.kt)("p",null,"And then in Rust projects that you'd like to inherit these tasks, add the following tags:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tags: ['rust']\n")),(0,r.kt)("p",null,"It's as simple as that!"),(0,r.kt)("h2",{id:"other-changes"},"Other changes"),(0,r.kt)("p",null,"View the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/moonrepo/moon/releases/tag/v1.8.0"},"official release")," for a full list of\nchanges."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added a new action to the graph, ",(0,r.kt)("inlineCode",{parentName:"li"},"SyncWorkspace"),", that'll be used for workspace-level checks."),(0,r.kt)("li",{parentName:"ul"},"Added ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_OUTPUT_STYLE")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"MOON_RETRY_COUNT")," environment variables.")))}m.isMDXComponent=!0},18429:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/v1.8-39d52ddb273bfa80248ada1b595a488e.png"}}]); \ No newline at end of file diff --git a/assets/js/fd8ac5c7.37ac192a.js b/assets/js/fd8ac5c7.37ac192a.js new file mode 100644 index 00000000000..718e3908a03 --- /dev/null +++ b/assets/js/fd8ac5c7.37ac192a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23664],{2829:s=>{s.exports=JSON.parse('{"label":"tasks","permalink":"/blog/tags/tasks","allTagsPath":"/blog/tags","count":6}')}}]); \ No newline at end of file diff --git a/assets/js/fd8ac5c7.80dd90a4.js b/assets/js/fd8ac5c7.80dd90a4.js deleted file mode 100644 index cac061e9c83..00000000000 --- a/assets/js/fd8ac5c7.80dd90a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3664],{2829:s=>{s.exports=JSON.parse('{"label":"tasks","permalink":"/blog/tags/tasks","allTagsPath":"/blog/tags","count":6}')}}]); \ No newline at end of file diff --git a/assets/js/fe36d4cd.9ea8e682.js b/assets/js/fe36d4cd.9ea8e682.js new file mode 100644 index 00000000000..f289a0882a7 --- /dev/null +++ b/assets/js/fe36d4cd.9ea8e682.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45420],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),u=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,l(l({ref:t},c),{},{components:n})):a.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var u=2;u<o;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),s=n(35595),i=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==s&&(d(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":s===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,s.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),s=n(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??i(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(l.location.search);t.set(s,e),l.replace({...l.location,search:t.toString()})}),[s,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,s.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),h=(()=>{const e=d??f;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{h&&i(h)}),[h]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),o=n(39798),l=n(33337);function s(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function i(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=s(e,!1,!0),n=i(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=s(e,!0,!0),n+=i(e,!0)),a.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(o.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},s(e,!1,!1))),a.createElement(o.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(o.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(o.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(83469),o=n(31792);function l(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:r.dT$}))}},21727:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>u,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=n(36642),l=n(32189);const s={title:"Jest example",sidebar_label:"Jest"},i=void 0,u={unversionedId:"guides/examples/jest",id:"guides/examples/jest",title:"Jest example",description:"In this guide, you'll learn how to integrate Jest into moon.",source:"@site/docs/guides/examples/jest.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/jest",permalink:"/docs/guides/examples/jest",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/jest.mdx",tags:[],version:"current",frontMatter:{title:"Jest example",sidebar_label:"Jest"},sidebar:"guides",previous:{title:"ESLint",permalink:"/docs/guides/examples/eslint"},next:{title:"Nest",permalink:"/docs/guides/examples/nest"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Sharing",id:"sharing",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to test a single file or folder?",id:"how-to-test-a-single-file-or-folder",level:3},{value:"How to use <code>projects</code>?",id:"how-to-use-projects",level:3}],d={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L83",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://jestjs.io/"},"Jest")," into moon."),(0,r.kt)("p",null,"Begin by installing ",(0,r.kt)("inlineCode",{parentName:"p"},"jest")," in your root. We suggest using the same version across the entire\nrepository."),(0,r.kt)(o.Z,{dep:"jest",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since testing is a universal workflow, add a ",(0,r.kt)("inlineCode",{parentName:"p"},"test")," task to\n",(0,r.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n test:\n command:\n - 'jest'\n # Always run code coverage\n - '--coverage'\n # Dont fail if a project has no tests\n - '--passWithNoTests'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Project configs, any format\n - 'jest.config.*'\n")),(0,r.kt)("p",null,"Projects can extend this task and provide additional parameters if need be, for example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n test:\n args:\n # Disable caching for this project\n - '--no-cache'\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"A root-level Jest config is not required and should be avoided, instead, use a ",(0,r.kt)("a",{parentName:"p",href:"#sharing"},"preset")," to\nshare configuration."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"A project-level Jest config can be utilized by creating a ",(0,r.kt)("inlineCode",{parentName:"p"},"jest.config.<js|ts|cjs|mjs>")," in the\nproject root. This is optional, but necessary when defining project specific settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/jest.config.js"',title:'"<project>/jest.config.js"'},"module.exports = {\n // Project specific settings\n testEnvironment: 'node',\n};\n")),(0,r.kt)("h3",{id:"sharing"},"Sharing"),(0,r.kt)("p",null,"To share configuration across projects, you can utilize Jest's built-in\n",(0,r.kt)("a",{parentName:"p",href:"https://jestjs.io/docs/configuration#preset-string"},(0,r.kt)("inlineCode",{parentName:"a"},"preset"))," functionality. If you're utilizing\npackage workspaces, create a local package with the following content, otherwise publish the npm\npackage for consumption."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="packages/company-jest-preset/jest-preset.js"',title:'"packages/company-jest-preset/jest-preset.js"'},"module.exports = {\n testEnvironment: 'jsdom',\n watchman: true,\n};\n")),(0,r.kt)("p",null,"Within your project-level Jest config, you can extend the preset to inherit the settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/jest.config.js"',title:'"<project>/jest.config.js"'},"module.exports = {\n preset: 'company-jest-preset',\n};\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"You can take this a step further by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--preset")," option in the ",(0,r.kt)("a",{parentName:"p",href:"#setup"},"task above"),", so\nthat all projects inherit the preset by default.")),(0,r.kt)("h2",{id:"faq"},"FAQ"),(0,r.kt)("h3",{id:"how-to-test-a-single-file-or-folder"},"How to test a single file or folder?"),(0,r.kt)("p",null,"You can filter tests by passing a file name, folder name, glob, or regex pattern after ",(0,r.kt)("inlineCode",{parentName:"p"},"--"),". Any\npassed files are relative from the project's root, regardless of where the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," command is being\nran."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run <project>:test -- filename\n")),(0,r.kt)("h3",{id:"how-to-use-projects"},"How to use ",(0,r.kt)("inlineCode",{parentName:"h3"},"projects"),"?"),(0,r.kt)("p",null,"With moon, there's no reason to use\n",(0,r.kt)("a",{parentName:"p",href:"https://jestjs.io/docs/configuration#projects-arraystring--projectconfig"},(0,r.kt)("inlineCode",{parentName:"a"},"projects"))," as the ",(0,r.kt)("inlineCode",{parentName:"p"},"test"),"\ntask is ran ",(0,r.kt)("em",{parentName:"p"},"per")," project. If you'd like to test multiple projects, use\n",(0,r.kt)("a",{parentName:"p",href:"../../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run :test")),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fe36d4cd.f5f3d960.js b/assets/js/fe36d4cd.f5f3d960.js deleted file mode 100644 index e351d98f65d..00000000000 --- a/assets/js/fe36d4cd.f5f3d960.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5420],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),u=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||o;return n?a.createElement(f,l(l({ref:t},c),{},{components:n})):a.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:r,l[1]=s;for(var u=2;u<o;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(37140);const o="tabItem_wHwb";function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o,l),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(25773),r=n(27378),o=n(37140),l=n(83457),s=n(35595),i=n(76457);const u="tabList_J5MA",c="tabItem_l0OV";function p(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,l.o5)(),m=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==s&&(d(t),i(a))},f=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>p.push(e),onKeyDown:f,onClick:m},l,{className:(0,o.Z)("tabs__item",c,l?.className,{"tabs__item--active":s===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,s.Y)(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",u)},r.createElement(p,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function f(e){const t=(0,i.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),o=n(30654),l=n(70784),s=n(71819);function i(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??i(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function c(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const l=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(l.location.search);t.set(s,e),l.replace({...l.location,search:t.toString()})}),[s,l])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=u(e),[l,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[d,m]=p({queryString:n,groupId:r}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,s.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),h=(()=>{const e=d??f;return c({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{h&&i(h)}),[h]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!c({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),m(e),g(e)}),[m,g,o]),tabValues:o}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),o=n(39798),l=n(33337);function s(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function i(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=s(e,!1,!0),n=i(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=s(e,!0,!0),n+=i(e,!0)),a.createElement(l.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(o.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},s(e,!1,!1))),a.createElement(o.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(o.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(o.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},32189:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(27378),r=n(83469),o=n(31792);function l(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(o.Z,{icon:r.dT$}))}},21727:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>u,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=n(36642),l=n(32189);const s={title:"Jest example",sidebar_label:"Jest"},i=void 0,u={unversionedId:"guides/examples/jest",id:"guides/examples/jest",title:"Jest example",description:"In this guide, you'll learn how to integrate Jest into moon.",source:"@site/docs/guides/examples/jest.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/jest",permalink:"/docs/guides/examples/jest",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/jest.mdx",tags:[],version:"current",frontMatter:{title:"Jest example",sidebar_label:"Jest"},sidebar:"guides",previous:{title:"ESLint",permalink:"/docs/guides/examples/eslint"},next:{title:"Nest",permalink:"/docs/guides/examples/nest"}},c={},p=[{value:"Setup",id:"setup",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3},{value:"Sharing",id:"sharing",level:3},{value:"FAQ",id:"faq",level:2},{value:"How to test a single file or folder?",id:"how-to-test-a-single-file-or-folder",level:3},{value:"How to use <code>projects</code>?",id:"how-to-use-projects",level:3}],d={toc:p};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.Z,{to:"https://github.com/moonrepo/examples/blob/master/.moon/tasks/node.yml#L83",mdxType:"HeadingApiLink"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://jestjs.io/"},"Jest")," into moon."),(0,r.kt)("p",null,"Begin by installing ",(0,r.kt)("inlineCode",{parentName:"p"},"jest")," in your root. We suggest using the same version across the entire\nrepository."),(0,r.kt)(o.Z,{dep:"jest",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since testing is a universal workflow, add a ",(0,r.kt)("inlineCode",{parentName:"p"},"test")," task to\n",(0,r.kt)("a",{parentName:"p",href:"../../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks/node.yml"))," with the following parameters."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks/node.yml"',title:'".moon/tasks/node.yml"'},"tasks:\n test:\n command:\n - 'jest'\n # Always run code coverage\n - '--coverage'\n # Dont fail if a project has no tests\n - '--passWithNoTests'\n inputs:\n # Source and test files\n - 'src/**/*'\n - 'tests/**/*'\n # Project configs, any format\n - 'jest.config.*'\n")),(0,r.kt)("p",null,"Projects can extend this task and provide additional parameters if need be, for example."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n test:\n args:\n # Disable caching for this project\n - '--no-cache'\n")),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"A root-level Jest config is not required and should be avoided, instead, use a ",(0,r.kt)("a",{parentName:"p",href:"#sharing"},"preset")," to\nshare configuration."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"A project-level Jest config can be utilized by creating a ",(0,r.kt)("inlineCode",{parentName:"p"},"jest.config.<js|ts|cjs|mjs>")," in the\nproject root. This is optional, but necessary when defining project specific settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/jest.config.js"',title:'"<project>/jest.config.js"'},"module.exports = {\n // Project specific settings\n testEnvironment: 'node',\n};\n")),(0,r.kt)("h3",{id:"sharing"},"Sharing"),(0,r.kt)("p",null,"To share configuration across projects, you can utilize Jest's built-in\n",(0,r.kt)("a",{parentName:"p",href:"https://jestjs.io/docs/configuration#preset-string"},(0,r.kt)("inlineCode",{parentName:"a"},"preset"))," functionality. If you're utilizing\npackage workspaces, create a local package with the following content, otherwise publish the npm\npackage for consumption."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="packages/company-jest-preset/jest-preset.js"',title:'"packages/company-jest-preset/jest-preset.js"'},"module.exports = {\n testEnvironment: 'jsdom',\n watchman: true,\n};\n")),(0,r.kt)("p",null,"Within your project-level Jest config, you can extend the preset to inherit the settings."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="<project>/jest.config.js"',title:'"<project>/jest.config.js"'},"module.exports = {\n preset: 'company-jest-preset',\n};\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"You can take this a step further by passing the ",(0,r.kt)("inlineCode",{parentName:"p"},"--preset")," option in the ",(0,r.kt)("a",{parentName:"p",href:"#setup"},"task above"),", so\nthat all projects inherit the preset by default.")),(0,r.kt)("h2",{id:"faq"},"FAQ"),(0,r.kt)("h3",{id:"how-to-test-a-single-file-or-folder"},"How to test a single file or folder?"),(0,r.kt)("p",null,"You can filter tests by passing a file name, folder name, glob, or regex pattern after ",(0,r.kt)("inlineCode",{parentName:"p"},"--"),". Any\npassed files are relative from the project's root, regardless of where the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon")," command is being\nran."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run <project>:test -- filename\n")),(0,r.kt)("h3",{id:"how-to-use-projects"},"How to use ",(0,r.kt)("inlineCode",{parentName:"h3"},"projects"),"?"),(0,r.kt)("p",null,"With moon, there's no reason to use\n",(0,r.kt)("a",{parentName:"p",href:"https://jestjs.io/docs/configuration#projects-arraystring--projectconfig"},(0,r.kt)("inlineCode",{parentName:"a"},"projects"))," as the ",(0,r.kt)("inlineCode",{parentName:"p"},"test"),"\ntask is ran ",(0,r.kt)("em",{parentName:"p"},"per")," project. If you'd like to test multiple projects, use\n",(0,r.kt)("a",{parentName:"p",href:"../../commands/run"},(0,r.kt)("inlineCode",{parentName:"a"},"moon run :test")),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fe55d425.a8681006.js b/assets/js/fe55d425.a8681006.js deleted file mode 100644 index d91ef28dc87..00000000000 --- a/assets/js/fe55d425.a8681006.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1133],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),m=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=m(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=m(n),g=o,f=u["".concat(l,".").concat(g)]||u[g]||p[g]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var m=2;m<a;m++)i[m]=n[m];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},56099:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>m});var r=n(25773),o=(n(27378),n(35318));const a={slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},i=void 0,s={permalink:"/blog/moon-v1.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx",source:"@site/blog/2023-08-21_moon-v1.12.mdx",title:"moon v1.12 - Task improvements: extending, interactive, and more",description:"In this release, we focused heavily on improving tasks, its configuration, and related systems.",date:"2023-08-21T00:00:00.000Z",formattedDate:"August 21, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:3.32,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},prevItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"},nextItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"}},l={image:n(86612).Z,authorsImageUrls:[void 0]},m=[],c={toc:m};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we focused heavily on improving tasks, its configuration, and related systems."))}p.isMDXComponent=!0},86612:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.12-3a89ebd0fa3a2732d0f38951967f4d19.png"}}]); \ No newline at end of file diff --git a/assets/js/fe55d425.e5005393.js b/assets/js/fe55d425.e5005393.js new file mode 100644 index 00000000000..eb291443c33 --- /dev/null +++ b/assets/js/fe55d425.e5005393.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[71133],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),m=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=m(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=m(n),g=o,f=u["".concat(l,".").concat(g)]||u[g]||p[g]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var m=2;m<a;m++)i[m]=n[m];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},56099:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>m});var r=n(25773),o=(n(27378),n(35318));const a={slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},i=void 0,s={permalink:"/blog/moon-v1.12",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx",source:"@site/blog/2023-08-21_moon-v1.12.mdx",title:"moon v1.12 - Task improvements: extending, interactive, and more",description:"In this release, we focused heavily on improving tasks, its configuration, and related systems.",date:"2023-08-21T00:00:00.000Z",formattedDate:"August 21, 2023",tags:[{label:"tasks",permalink:"/blog/tags/tasks"},{label:"inheritance",permalink:"/blog/tags/inheritance"}],readingTime:3.32,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.12",title:"moon v1.12 - Task improvements: extending, interactive, and more",authors:["milesj"],tags:["tasks","inheritance"],image:"./img/moon/v1.12.png"},prevItem:{title:"proto v0.15 - Install and uninstall globals",permalink:"/blog/proto-v0.15"},nextItem:{title:"proto v0.14 - Node.js and Rust now powered by WASM plugins",permalink:"/blog/proto-v0.14"}},l={image:n(86612).Z,authorsImageUrls:[void 0]},m=[],c={toc:m};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In this release, we focused heavily on improving tasks, its configuration, and related systems."))}p.isMDXComponent=!0},86612:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/v1.12-3a89ebd0fa3a2732d0f38951967f4d19.png"}}]); \ No newline at end of file diff --git a/assets/js/fea2b255.4388d1fe.js b/assets/js/fea2b255.4388d1fe.js new file mode 100644 index 00000000000..4dd1bdde1a7 --- /dev/null +++ b/assets/js/fea2b255.4388d1fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93287],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),u=r,f=d["".concat(l,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c<o;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return a.createElement(r.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},90360:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=n(79022);const i={title:"Targets"},s=void 0,l={unversionedId:"concepts/target",id:"concepts/target",title:"Targets",description:"A target is a compound identifier that pairs a scope to a task, separated by a",source:"@site/docs/concepts/target.mdx",sourceDirName:"concepts",slug:"/concepts/target",permalink:"/docs/concepts/target",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/target.mdx",tags:[],version:"current",frontMatter:{title:"Targets"},sidebar:"docs",previous:{title:"Projects",permalink:"/docs/concepts/project"},next:{title:"Tasks",permalink:"/docs/concepts/task"}},c={},p=[{value:"Common scopes",id:"common-scopes",level:2},{value:"By project",id:"by-project",level:3},{value:'By tag<VersionLabel version="1.4.0" />',id:"by-tag",level:3},{value:"Run scopes",id:"run-scopes",level:2},{value:"All projects",id:"all-projects",level:3},{value:"Config scopes",id:"config-scopes",level:2},{value:"Dependencies <code>^</code>",id:"dependencies-",level:3},{value:"Self <code>~</code>",id:"self-",level:3}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A target is a compound identifier that pairs a ",(0,r.kt)("a",{parentName:"p",href:"#scope"},"scope")," to a ",(0,r.kt)("a",{parentName:"p",href:"./task"},"task"),", separated by a\n",(0,r.kt)("inlineCode",{parentName:"p"},":"),", in the format of ",(0,r.kt)("inlineCode",{parentName:"p"},"scope:task"),"."),(0,r.kt)("p",null,"Targets are used by terminal commands..."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run designSystem:build\n")),(0,r.kt)("p",null,"And configurations for declaring cross-project or cross-task dependencies."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n build:\n command: 'webpack'\n deps:\n - 'designSystem:build'\n")),(0,r.kt)("h2",{id:"common-scopes"},"Common scopes"),(0,r.kt)("p",null,"These scopes are available for both running targets and configuring them."),(0,r.kt)("h3",{id:"by-project"},"By project"),(0,r.kt)("p",null,"The most common scope is the project scope, which requires the name of a project, as defined in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". When paired with a task name, it will run a specific\ntask from that project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in project `app`\n$ moon run app:lint\n")),(0,r.kt)("h3",{id:"by-tag"},"By tag",(0,r.kt)(o.Z,{version:"1.4.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Another way to target projects is with the tag scope, which requires the name of a tag prefixed with\n",(0,r.kt)("inlineCode",{parentName:"p"},"#"),", and will run a specific task in all projects with that tag."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in projects with the tag `frontend`\n$ moon run '#frontend:lint'\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Because ",(0,r.kt)("inlineCode",{parentName:"p"},"#")," is a special character in the terminal (is considered a comment), you'll need to wrap\nthe target in quotes, or escape it like so ",(0,r.kt)("inlineCode",{parentName:"p"},"\\#"),".")),(0,r.kt)("h2",{id:"run-scopes"},"Run scopes"),(0,r.kt)("p",null,"These scopes are only available on the command line when running targets."),(0,r.kt)("h3",{id:"all-projects"},"All projects"),(0,r.kt)("p",null,"For situations where you want to run a specific target in ",(0,r.kt)("em",{parentName:"p"},"all")," projects, for example ",(0,r.kt)("inlineCode",{parentName:"p"},"lint"),"ing, you\ncan utilize the all projects scope by omitting the project name from the target: ",(0,r.kt)("inlineCode",{parentName:"p"},":lint"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in all projects\n$ moon run :lint\n")),(0,r.kt)("h2",{id:"config-scopes"},"Config scopes"),(0,r.kt)("p",null,"These scopes are only available when configuring a task."),(0,r.kt)("h3",{id:"dependencies-"},"Dependencies ",(0,r.kt)("inlineCode",{parentName:"h3"},"^")),(0,r.kt)("p",null,"When you want to include a reference for each project ",(0,r.kt)("a",{parentName:"p",href:"./project#dependencies"},"that's depended on"),",\nyou can utilize the ",(0,r.kt)("inlineCode",{parentName:"p"},"^")," scope. This will be expanded to ",(0,r.kt)("em",{parentName:"p"},"all")," depended on projects. If you do not\nwant all projects, then you'll need to explicitly define them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'apiClients'\n - 'designSystem'\n\n# Configured as\ntasks:\n build:\n command: 'webpack'\n deps:\n - '^:build'\n\n# Resolves to\ntasks:\n build:\n command: 'webpack'\n deps:\n - 'apiClients:build'\n - 'designSystem:build'\n")),(0,r.kt)("h3",{id:"self-"},"Self ",(0,r.kt)("inlineCode",{parentName:"h3"},"~")),(0,r.kt)("p",null,"When referring to another task within the current project, you can utilize the ",(0,r.kt)("inlineCode",{parentName:"p"},"~")," scope, or emit\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"~:")," prefix altogether, which will be expanded to the current project's name. This is useful for\nsituations where the name is unknown, for example, when configuring\n",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),", or if you just want a shortcut!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"# Configured as\ntasks:\n lint:\n command: 'eslint'\n deps:\n - '~:typecheck'\n # OR\n - 'typecheck'\n typecheck:\n command: 'tsc'\n\n# Resolves to (assuming project is \"foo\")\ntasks:\n lint:\n command: 'eslint'\n deps:\n - 'foo:typecheck'\n typecheck:\n command: 'tsc'\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fea2b255.d272d8bc.js b/assets/js/fea2b255.d272d8bc.js deleted file mode 100644 index be205f1c471..00000000000 --- a/assets/js/fea2b255.d272d8bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3287],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>u});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),u=r,f=d["".concat(l,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c<o;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},79022:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(9619);function o(e){let{header:t,inline:n,updated:o,version:i}=e;return a.createElement(r.Z,{text:`v${i}`,variant:o?"success":"info",className:t?"absolute right-0 top-1.5":n?"inline-block":"ml-2"})}},9619:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(40624),o=n(31792);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function s(e){let{className:t,icon:n,text:s,variant:l}=e;return a.createElement("span",{className:(0,r.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",t)},n&&a.createElement(o.Z,{icon:n,className:"mr-1"}),s)}},90360:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(25773),r=(n(27378),n(35318)),o=n(79022);const i={title:"Targets"},s=void 0,l={unversionedId:"concepts/target",id:"concepts/target",title:"Targets",description:"A target is a compound identifier that pairs a scope to a task, separated by a",source:"@site/docs/concepts/target.mdx",sourceDirName:"concepts",slug:"/concepts/target",permalink:"/docs/concepts/target",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/concepts/target.mdx",tags:[],version:"current",frontMatter:{title:"Targets"},sidebar:"docs",previous:{title:"Projects",permalink:"/docs/concepts/project"},next:{title:"Tasks",permalink:"/docs/concepts/task"}},c={},p=[{value:"Common scopes",id:"common-scopes",level:2},{value:"By project",id:"by-project",level:3},{value:'By tag<VersionLabel version="1.4.0" />',id:"by-tag",level:3},{value:"Run scopes",id:"run-scopes",level:2},{value:"All projects",id:"all-projects",level:3},{value:"Config scopes",id:"config-scopes",level:2},{value:"Dependencies <code>^</code>",id:"dependencies-",level:3},{value:"Self <code>~</code>",id:"self-",level:3}],m={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A target is a compound identifier that pairs a ",(0,r.kt)("a",{parentName:"p",href:"#scope"},"scope")," to a ",(0,r.kt)("a",{parentName:"p",href:"./task"},"task"),", separated by a\n",(0,r.kt)("inlineCode",{parentName:"p"},":"),", in the format of ",(0,r.kt)("inlineCode",{parentName:"p"},"scope:task"),"."),(0,r.kt)("p",null,"Targets are used by terminal commands..."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon run designSystem:build\n")),(0,r.kt)("p",null,"And configurations for declaring cross-project or cross-task dependencies."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"tasks:\n build:\n command: 'webpack'\n deps:\n - 'designSystem:build'\n")),(0,r.kt)("h2",{id:"common-scopes"},"Common scopes"),(0,r.kt)("p",null,"These scopes are available for both running targets and configuring them."),(0,r.kt)("h3",{id:"by-project"},"By project"),(0,r.kt)("p",null,"The most common scope is the project scope, which requires the name of a project, as defined in\n",(0,r.kt)("a",{parentName:"p",href:"../config/workspace"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/workspace.yml")),". When paired with a task name, it will run a specific\ntask from that project."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in project `app`\n$ moon run app:lint\n")),(0,r.kt)("h3",{id:"by-tag"},"By tag",(0,r.kt)(o.Z,{version:"1.4.0",mdxType:"VersionLabel"})),(0,r.kt)("p",null,"Another way to target projects is with the tag scope, which requires the name of a tag prefixed with\n",(0,r.kt)("inlineCode",{parentName:"p"},"#"),", and will run a specific task in all projects with that tag."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in projects with the tag `frontend`\n$ moon run '#frontend:lint'\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Because ",(0,r.kt)("inlineCode",{parentName:"p"},"#")," is a special character in the terminal (is considered a comment), you'll need to wrap\nthe target in quotes, or escape it like so ",(0,r.kt)("inlineCode",{parentName:"p"},"\\#"),".")),(0,r.kt)("h2",{id:"run-scopes"},"Run scopes"),(0,r.kt)("p",null,"These scopes are only available on the command line when running targets."),(0,r.kt)("h3",{id:"all-projects"},"All projects"),(0,r.kt)("p",null,"For situations where you want to run a specific target in ",(0,r.kt)("em",{parentName:"p"},"all")," projects, for example ",(0,r.kt)("inlineCode",{parentName:"p"},"lint"),"ing, you\ncan utilize the all projects scope by omitting the project name from the target: ",(0,r.kt)("inlineCode",{parentName:"p"},":lint"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Run `lint` in all projects\n$ moon run :lint\n")),(0,r.kt)("h2",{id:"config-scopes"},"Config scopes"),(0,r.kt)("p",null,"These scopes are only available when configuring a task."),(0,r.kt)("h3",{id:"dependencies-"},"Dependencies ",(0,r.kt)("inlineCode",{parentName:"h3"},"^")),(0,r.kt)("p",null,"When you want to include a reference for each project ",(0,r.kt)("a",{parentName:"p",href:"./project#dependencies"},"that's depended on"),",\nyou can utilize the ",(0,r.kt)("inlineCode",{parentName:"p"},"^")," scope. This will be expanded to ",(0,r.kt)("em",{parentName:"p"},"all")," depended on projects. If you do not\nwant all projects, then you'll need to explicitly define them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="moon.yml"',title:'"moon.yml"'},"dependsOn:\n - 'apiClients'\n - 'designSystem'\n\n# Configured as\ntasks:\n build:\n command: 'webpack'\n deps:\n - '^:build'\n\n# Resolves to\ntasks:\n build:\n command: 'webpack'\n deps:\n - 'apiClients:build'\n - 'designSystem:build'\n")),(0,r.kt)("h3",{id:"self-"},"Self ",(0,r.kt)("inlineCode",{parentName:"h3"},"~")),(0,r.kt)("p",null,"When referring to another task within the current project, you can utilize the ",(0,r.kt)("inlineCode",{parentName:"p"},"~")," scope, or emit\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"~:")," prefix altogether, which will be expanded to the current project's name. This is useful for\nsituations where the name is unknown, for example, when configuring\n",(0,r.kt)("a",{parentName:"p",href:"../config/tasks"},(0,r.kt)("inlineCode",{parentName:"a"},".moon/tasks.yml")),", or if you just want a shortcut!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title=".moon/tasks.yml"',title:'".moon/tasks.yml"'},"# Configured as\ntasks:\n lint:\n command: 'eslint'\n deps:\n - '~:typecheck'\n # OR\n - 'typecheck'\n typecheck:\n command: 'tsc'\n\n# Resolves to (assuming project is \"foo\")\ntasks:\n lint:\n command: 'eslint'\n deps:\n - 'foo:typecheck'\n typecheck:\n command: 'tsc'\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff13fcd4.20b181cf.js b/assets/js/ff13fcd4.20b181cf.js deleted file mode 100644 index 362d8a35ef8..00000000000 --- a/assets/js/ff13fcd4.20b181cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2174],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||l;return n?a.createElement(g,o(o({ref:t},p),{},{components:n})):a.createElement(g,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u<l;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",p="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=u[n].value;a!==i&&(d(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},o,{className:(0,l.Z)("tabs__item",p,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=c({queryString:n,groupId:r}),[g,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),f=(()=>{const e=d??g;return p({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),h(e)}),[m,h,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},90992:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=(n(27457),n(33337)),i=n(39798);n(32189);const s={title:"Angular example",sidebar_label:"Angular"},u=void 0,p={unversionedId:"guides/examples/angular",id:"guides/examples/angular",title:"Angular example",description:"In this guide, you'll learn how to integrate Angular into moon.",source:"@site/docs/guides/examples/angular.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/angular",permalink:"/docs/guides/examples/angular",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/angular.mdx",tags:[],version:"current",frontMatter:{title:"Angular example",sidebar_label:"Angular"},sidebar:"guides",previous:{title:"Examples",permalink:"/docs/guides/node/examples"},next:{title:"Astro",permalink:"/docs/guides/examples/astro"}},c={},d=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],m={toc:d};function g(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/"},"Angular")," into moon."),(0,r.kt)("p",null,"Begin by creating a new Angular project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npx -p @angular/cli@latest ng new angular-app\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/start"},"official Angular docs")," for a more in-depth guide to getting\nstarted!")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Angular is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"fileGroups:\n app:\n - 'src/**/*'\n - 'angular.*'\n\ntasks:\n dev:\n command: 'ng serve'\n local: true\n\n build:\n command: 'ng build'\n inputs:\n - '@group(app)'\n - '@group(sources)'\n outputs:\n - 'dist'\n\n # Extends the top-level lint\n lint:\n args:\n - '--ext'\n - '.ts'\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"Angular does not provide a built-in linting abstraction, but instead there is an\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/angular-eslint/angular-eslint"},"ESLint package"),", which is great, but complicates\nthings a bit. Because of this, you have two options for moving forward:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use a ",(0,r.kt)("a",{parentName:"li",href:"./eslint"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"lint")," task")," and bypass Angular's solution (preferred)."),(0,r.kt)("li",{parentName:"ul"},"Use Angular's ESLint package solution only.")),(0,r.kt)("p",null,"Regardless of which option is chosen, the following changes are applicable to all options and should\nbe made. Begin be installing the dependencies that the\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/eslint#eslint-config"},(0,r.kt)("inlineCode",{parentName:"a"},"@angular-eslint"))," package need in the\napplication's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,r.kt)(l.Z,{dep:"@angular-eslint/builder @angular-eslint/eslint-plugin @angular-eslint/eslint-plugin-template @angular-eslint/schematics @angular-eslint/template-parser",package:"<project>",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("p",null,"Since Angular has some specific rules, we'll need to tell the ESLint package to overrides the\ndefault ones. This can be achieved with a project-level ",(0,r.kt)("inlineCode",{parentName:"p"},".eslintrc.json")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/.eslintrc.json"',title:'"<project>/.eslintrc.json"'},'{\n "root": true,\n "ignorePatterns": ["projects/**/*"],\n "overrides": [\n {\n "files": ["*.ts"],\n "extends": [\n "eslint:recommended",\n "plugin:@typescript-eslint/recommended",\n "plugin:@angular-eslint/recommended",\n // This is required if you use inline templates in Components\n "plugin:@angular-eslint/template/process-inline-templates"\n ],\n "rules": {\n /**\n * Any TypeScript source code (NOT TEMPLATE) related rules you wish to use/reconfigure over and above the\n * recommended set provided by the @angular-eslint project would go here.\n */\n "@angular-eslint/directive-selector": [\n "error",\n { "type": "attribute", "prefix": "app", "style": "camelCase" }\n ],\n "@angular-eslint/component-selector": [\n "error",\n { "type": "element", "prefix": "app", "style": "kebab-case" }\n ]\n }\n },\n {\n "files": ["*.html"],\n "extends": [\n "plugin:@angular-eslint/template/recommended",\n "plugin:@angular-eslint/template/accessibility"\n ],\n "rules": {\n /**\n * Any template/HTML related rules you wish to use/reconfigure over and above the\n * recommended set provided by the @angular-eslint project would go here.\n */\n }\n }\n ]\n}\n')),(0,r.kt)("p",null,"With the basics now setup, choose the option that works best for you."),(0,r.kt)(o.Z,{groupId:"lint-type",defaultValue:"global",values:[{label:"Global lint",value:"global"},{label:"Angular lint",value:"angular"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"global",mdxType:"TabItem"},(0,r.kt)("p",null,"We encourage using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task for consistency across all projects within the repository.\nWith this approach, the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint")," command itself will be ran and the ",(0,r.kt)("inlineCode",{parentName:"p"},"ng lint")," command will be\nignored, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"@angular-eslint")," rules will still be used.")),(0,r.kt)(i.Z,{value:"angular",mdxType:"TabItem"},(0,r.kt)("p",null,"If you'd prefer to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"ng lint")," command, add it as a task to the project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n command: 'ng lint'\n inputs:\n - '@group(angular)'\n")),(0,r.kt)("p",null,"Furthermore, if a global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task exists, be sure to exclude it from being inherited."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['lint']\n")),(0,r.kt)("p",null,"In addition to configuring ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml"),", you also need to add a lint target in the ",(0,r.kt)("inlineCode",{parentName:"p"},"angular.json")," file\nfor linting to work properly. The lint target specifies which builder to use for linting, as well as\nthe file patterns that should be linted."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/angular.json"',title:'"<project>/angular.json"'},'{\n "projects": {\n "angular-app": {\n "architect": {\n "lint": {\n "builder": "@angular-eslint/builder:lint",\n "options": {\n "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"]\n }\n }\n }\n }\n }\n}\n')),(0,r.kt)("p",null,"Adding this lint target is crucial for ensuring that the linting process is properly configured and\nintegrated with Angular's build system."))),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Angular has ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/guide/typescript-configuration"},"built-in support for TypeScript"),", so\nthere is no need for additional configuration to enable TypeScript support."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository."),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Angular should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"ng")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Angular project, a ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/guide/workspace-config"},(0,r.kt)("inlineCode",{parentName:"a"},"angular.json")),"\nis created, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure Angular for\ntheir needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/angular.json"',title:'"<project>/angular.json"'},'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "projects": {\n "angular-app": {\n "projectType": "application",\n ...\n }\n },\n ...\n}\n')))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff13fcd4.5c654c20.js b/assets/js/ff13fcd4.5c654c20.js new file mode 100644 index 00000000000..7aa662c1be6 --- /dev/null +++ b/assets/js/ff13fcd4.5c654c20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12174],{35318:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||l;return n?a.createElement(g,o(o({ref:t},p),{},{components:n})):a.createElement(g,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u<l;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},39798:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(37140);const l="tabItem_wHwb";function o(e){let{children:t,hidden:n,className:o}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l,o),hidden:n},t)}},33337:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(25773),r=n(27378),l=n(37140),o=n(83457),i=n(35595),s=n(76457);const u="tabList_J5MA",p="tabItem_l0OV";function c(e){let{className:t,block:n,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=u[n].value;a!==i&&(d(t),s(a))},g=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:o}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:g,onClick:m},o,{className:(0,l.Z)("tabs__item",p,o?.className,{"tabs__item--active":i===t})}),n??t)})))}function d(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function m(e){const t=(0,i.Y)(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",u)},r.createElement(c,(0,a.Z)({},e,t)),r.createElement(d,(0,a.Z)({},e,t)))}function g(e){const t=(0,s.Z)();return r.createElement(m,(0,a.Z)({key:String(t)},e))}},35595:(e,t,n)=>{n.d(t,{Y:()=>d});var a=n(27378),r=n(35331),l=n(30654),o=n(70784),i=n(71819);function s(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function u(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??s(n);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function c(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function d(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,l=u(e),[o,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[d,m]=c({queryString:n,groupId:r}),[g,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,i.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:r}),f=(()=>{const e=d??g;return p({value:e,tabValues:l})?e:null})();(0,a.useLayoutEffect)((()=>{f&&s(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);s(e),m(e),h(e)}),[m,h,l]),tabValues:l}}},36642:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){let a=e.package?`yarn workspace ${e.package} add `:"yarn add ";return e.dev?a+="--dev ":e.peer&&(a+="--peer "),n&&t&&!e.package&&(a+="-W "),a+=e.dep,a}function s(e,t){let n="pnpm add ";return e.dev?n+="--save-dev ":e.peer&&(n+="--save-peer "),e.package?n+=`--filter ${e.package} `:t&&(n+="-w "),n+=e.dep,n}function u(e){let t=i(e,!1,!0),n=s(e,!1);return e.package||(t+="\n\n# If using workspaces\n",n+="\n\n# If using workspaces\n",t+=i(e,!0,!0),n+=s(e,!0)),a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i(e,!1,!1))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},t)),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},function(e){let t="npm install ";return e.dev?t+="--save-dev ":e.peer&&(t+="--save-peer "),e.package&&(t+=`--workspace ${e.package} `),t+=e.dep,t}(e))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},n)))}},27457:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(27378),r=n(30780),l=n(39798),o=n(33337);function i(e,t,n){return`${e} create ${t} ${n.join(" ")}`.trim()}function s(e){let{dep:t,args:n=[]}=e;return a.createElement(o.Z,{groupId:"package-manager",defaultValue:"yarn",values:[{label:"Yarn",value:"yarn"},{label:"Yarn (classic)",value:"yarn1"},{label:"npm",value:"npm"},{label:"pnpm",value:"pnpm"}]},a.createElement(l.Z,{value:"yarn"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"yarn1"},a.createElement(r.Z,{language:"shell"},i("yarn",t,n))),a.createElement(l.Z,{value:"npm"},a.createElement(r.Z,{language:"shell"},i("npm",t,n))),a.createElement(l.Z,{value:"pnpm"},a.createElement(r.Z,{language:"shell"},i("pnpm",t,n))))}},32189:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(27378),r=n(83469),l=n(31792);function o(e){let{to:t}=e;return a.createElement("a",{href:t,target:"_blank",className:"float-right inline-block",style:{marginTop:"-3em"}},a.createElement(l.Z,{icon:r.dT$}))}},90992:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var a=n(25773),r=(n(27378),n(35318)),l=n(36642),o=(n(27457),n(33337)),i=n(39798);n(32189);const s={title:"Angular example",sidebar_label:"Angular"},u=void 0,p={unversionedId:"guides/examples/angular",id:"guides/examples/angular",title:"Angular example",description:"In this guide, you'll learn how to integrate Angular into moon.",source:"@site/docs/guides/examples/angular.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/angular",permalink:"/docs/guides/examples/angular",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/guides/examples/angular.mdx",tags:[],version:"current",frontMatter:{title:"Angular example",sidebar_label:"Angular"},sidebar:"guides",previous:{title:"Examples",permalink:"/docs/guides/node/examples"},next:{title:"Astro",permalink:"/docs/guides/examples/astro"}},c={},d=[{value:"Setup",id:"setup",level:2},{value:"ESLint integration",id:"eslint-integration",level:3},{value:"TypeScript integration",id:"typescript-integration",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Root-level",id:"root-level",level:3},{value:"Project-level",id:"project-level",level:3}],m={toc:d};function g(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this guide, you'll learn how to integrate ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/"},"Angular")," into moon."),(0,r.kt)("p",null,"Begin by creating a new Angular project in the root of an existing moon project (this should not be\ncreated in the workspace root, unless a polyrepo)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cd apps && npx -p @angular/cli@latest ng new angular-app\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"View the ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/start"},"official Angular docs")," for a more in-depth guide to getting\nstarted!")),(0,r.kt)("h2",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Since Angular is per-project, the associated moon tasks should be defined in each project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"fileGroups:\n app:\n - 'src/**/*'\n - 'angular.*'\n\ntasks:\n dev:\n command: 'ng serve'\n local: true\n\n build:\n command: 'ng build'\n inputs:\n - '@group(app)'\n - '@group(sources)'\n outputs:\n - 'dist'\n\n # Extends the top-level lint\n lint:\n args:\n - '--ext'\n - '.ts'\n")),(0,r.kt)("h3",{id:"eslint-integration"},"ESLint integration"),(0,r.kt)("p",null,"Angular does not provide a built-in linting abstraction, but instead there is an\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/angular-eslint/angular-eslint"},"ESLint package"),", which is great, but complicates\nthings a bit. Because of this, you have two options for moving forward:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use a ",(0,r.kt)("a",{parentName:"li",href:"./eslint"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"lint")," task")," and bypass Angular's solution (preferred)."),(0,r.kt)("li",{parentName:"ul"},"Use Angular's ESLint package solution only.")),(0,r.kt)("p",null,"Regardless of which option is chosen, the following changes are applicable to all options and should\nbe made. Begin be installing the dependencies that the\n",(0,r.kt)("a",{parentName:"p",href:"https://nextjs.org/docs/basic-features/eslint#eslint-config"},(0,r.kt)("inlineCode",{parentName:"a"},"@angular-eslint"))," package need in the\napplication's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"."),(0,r.kt)(l.Z,{dep:"@angular-eslint/builder @angular-eslint/eslint-plugin @angular-eslint/eslint-plugin-template @angular-eslint/schematics @angular-eslint/template-parser",package:"<project>",dev:!0,mdxType:"AddDepsTabs"}),(0,r.kt)("p",null,"Since Angular has some specific rules, we'll need to tell the ESLint package to overrides the\ndefault ones. This can be achieved with a project-level ",(0,r.kt)("inlineCode",{parentName:"p"},".eslintrc.json")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/.eslintrc.json"',title:'"<project>/.eslintrc.json"'},'{\n "root": true,\n "ignorePatterns": ["projects/**/*"],\n "overrides": [\n {\n "files": ["*.ts"],\n "extends": [\n "eslint:recommended",\n "plugin:@typescript-eslint/recommended",\n "plugin:@angular-eslint/recommended",\n // This is required if you use inline templates in Components\n "plugin:@angular-eslint/template/process-inline-templates"\n ],\n "rules": {\n /**\n * Any TypeScript source code (NOT TEMPLATE) related rules you wish to use/reconfigure over and above the\n * recommended set provided by the @angular-eslint project would go here.\n */\n "@angular-eslint/directive-selector": [\n "error",\n { "type": "attribute", "prefix": "app", "style": "camelCase" }\n ],\n "@angular-eslint/component-selector": [\n "error",\n { "type": "element", "prefix": "app", "style": "kebab-case" }\n ]\n }\n },\n {\n "files": ["*.html"],\n "extends": [\n "plugin:@angular-eslint/template/recommended",\n "plugin:@angular-eslint/template/accessibility"\n ],\n "rules": {\n /**\n * Any template/HTML related rules you wish to use/reconfigure over and above the\n * recommended set provided by the @angular-eslint project would go here.\n */\n }\n }\n ]\n}\n')),(0,r.kt)("p",null,"With the basics now setup, choose the option that works best for you."),(0,r.kt)(o.Z,{groupId:"lint-type",defaultValue:"global",values:[{label:"Global lint",value:"global"},{label:"Angular lint",value:"angular"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"global",mdxType:"TabItem"},(0,r.kt)("p",null,"We encourage using the global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task for consistency across all projects within the repository.\nWith this approach, the ",(0,r.kt)("inlineCode",{parentName:"p"},"eslint")," command itself will be ran and the ",(0,r.kt)("inlineCode",{parentName:"p"},"ng lint")," command will be\nignored, but the ",(0,r.kt)("inlineCode",{parentName:"p"},"@angular-eslint")," rules will still be used.")),(0,r.kt)(i.Z,{value:"angular",mdxType:"TabItem"},(0,r.kt)("p",null,"If you'd prefer to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"ng lint")," command, add it as a task to the project's\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"tasks:\n lint:\n command: 'ng lint'\n inputs:\n - '@group(angular)'\n")),(0,r.kt)("p",null,"Furthermore, if a global ",(0,r.kt)("inlineCode",{parentName:"p"},"lint")," task exists, be sure to exclude it from being inherited."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="<project>/moon.yml"',title:'"<project>/moon.yml"'},"workspace:\n inheritedTasks:\n exclude: ['lint']\n")),(0,r.kt)("p",null,"In addition to configuring ",(0,r.kt)("inlineCode",{parentName:"p"},"moon.yml"),", you also need to add a lint target in the ",(0,r.kt)("inlineCode",{parentName:"p"},"angular.json")," file\nfor linting to work properly. The lint target specifies which builder to use for linting, as well as\nthe file patterns that should be linted."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/angular.json"',title:'"<project>/angular.json"'},'{\n "projects": {\n "angular-app": {\n "architect": {\n "lint": {\n "builder": "@angular-eslint/builder:lint",\n "options": {\n "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"]\n }\n }\n }\n }\n }\n}\n')),(0,r.kt)("p",null,"Adding this lint target is crucial for ensuring that the linting process is properly configured and\nintegrated with Angular's build system."))),(0,r.kt)("h3",{id:"typescript-integration"},"TypeScript integration"),(0,r.kt)("p",null,"Angular has ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/guide/typescript-configuration"},"built-in support for TypeScript"),", so\nthere is no need for additional configuration to enable TypeScript support."),(0,r.kt)("p",null,"At this point we'll assume that a ",(0,r.kt)("inlineCode",{parentName:"p"},"tsconfig.json")," has been created in the application, and\ntypechecking works. From here we suggest utilizing a ",(0,r.kt)("a",{parentName:"p",href:"./typescript"},"global ",(0,r.kt)("inlineCode",{parentName:"a"},"typecheck")," task")," for\nconsistency across all projects within the repository."),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("h3",{id:"root-level"},"Root-level"),(0,r.kt)("p",null,"We suggest ",(0,r.kt)("em",{parentName:"p"},"against")," root-level configuration, as Angular should be installed per-project, and the\n",(0,r.kt)("inlineCode",{parentName:"p"},"ng")," command expects the configuration to live relative to the project root."),(0,r.kt)("h3",{id:"project-level"},"Project-level"),(0,r.kt)("p",null,"When creating a new Angular project, a ",(0,r.kt)("a",{parentName:"p",href:"https://angular.io/guide/workspace-config"},(0,r.kt)("inlineCode",{parentName:"a"},"angular.json")),"\nis created, and ",(0,r.kt)("em",{parentName:"p"},"must")," exist in the project root. This allows each project to configure Angular for\ntheir needs."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="<project>/angular.json"',title:'"<project>/angular.json"'},'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "projects": {\n "angular-app": {\n "projectType": "application",\n ...\n }\n },\n ...\n}\n')))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ffc0ac08.1f345f67.js b/assets/js/ffc0ac08.1f345f67.js deleted file mode 100644 index ee49eb0ae9b..00000000000 --- a/assets/js/ffc0ac08.1f345f67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2105],{68784:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/plugins","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ffc0ac08.7e5dd17b.js b/assets/js/ffc0ac08.7e5dd17b.js new file mode 100644 index 00000000000..7efa7b9c024 --- /dev/null +++ b/assets/js/ffc0ac08.7e5dd17b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92105],{68784:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/plugins","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ffef4e04.cc7c1eac.js b/assets/js/ffef4e04.cc7c1eac.js new file mode 100644 index 00000000000..be257c328fc --- /dev/null +++ b/assets/js/ffef4e04.cc7c1eac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26027],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),l=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=l(n),k=r,u=d["".concat(s,".").concat(k)]||d[k]||m[k]||o;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p.mdxType="string"==typeof e?e:r,i[1]=p;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},19303:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>l});var a=n(25773),r=(n(27378),n(35318));const o={title:"migrate from-package-json",sidebar_label:"from-package-json"},i=void 0,p={unversionedId:"commands/migrate/from-package-json",id:"commands/migrate/from-package-json",title:"migrate from-package-json",description:"Use the moon migrate from-package-json sub-command to migrate a project's package.json",source:"@site/docs/commands/migrate/from-package-json.mdx",sourceDirName:"commands/migrate",slug:"/commands/migrate/from-package-json",permalink:"/docs/commands/migrate/from-package-json",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/migrate/from-package-json.mdx",tags:[],version:"current",frontMatter:{title:"migrate from-package-json",sidebar_label:"from-package-json"},sidebar:"docs",previous:{title:"migrate",permalink:"/docs/commands/migrate"},next:{title:"from-turborepo",permalink:"/docs/commands/migrate/from-turborepo"}},s={},l=[{value:"Arguments",id:"arguments",level:3},{value:"Caveats",id:"caveats",level:2}],c={toc:l};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon migrate from-package-json <project>")," sub-command to migrate a project's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"\nto our ",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," format. When ran, the following changes are made:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Converts ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," scripts to ",(0,r.kt)("inlineCode",{parentName:"li"},"moon.yml")," ",(0,r.kt)("a",{parentName:"li",href:"../../config/project#tasks"},"tasks"),". Scripts and\ntasks are not 1:1, so we'll convert as close as possible while retaining functionality."),(0,r.kt)("li",{parentName:"ul"},"Updates ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," by removing all converted scripts. If all scripts were converted, the\nentire block is removed."),(0,r.kt)("li",{parentName:"ul"},"Links ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," dependencies as ",(0,r.kt)("inlineCode",{parentName:"li"},"moon.yml")," ",(0,r.kt)("a",{parentName:"li",href:"../../config/project#dependson"},"dependencies"),"\n(",(0,r.kt)("inlineCode",{parentName:"li"},"dependsOn"),"). Will map a package's name to their moon project name.")),(0,r.kt)("p",null,"This command is ran ",(0,r.kt)("em",{parentName:"p"},"per project"),", and for this to operate correctly, requires all\n",(0,r.kt)("a",{parentName:"p",href:"../../config/workspace#projects"},"projects to be configured in the workspace"),". There's also a\nhandful of ",(0,r.kt)("a",{parentName:"p",href:"#caveats"},"requirements and caveats")," to be aware of!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon --log debug migrate from-package-json app\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"moon does its best to infer the ",(0,r.kt)("a",{parentName:"p",href:"../../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," option, given the small amount\nof information available to use. When this option is incorrectly set, it'll result in CI\nenvironments hanging for tasks that are long-running or never-ending (development servers, etc), or\nwon't run builds that should be. Be sure to audit each task after migration!")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<project>")," - Name of a project, as defined in ",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#projects"},(0,r.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,r.kt)("h2",{id:"caveats"},"Caveats"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"When running a script within another script, the full invocation of ",(0,r.kt)("inlineCode",{parentName:"p"},"npm run ..."),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pnpm run ..."),",\nor ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn run ...")," must be used. Shorthand variants are ",(0,r.kt)("strong",{parentName:"p"},"not")," supported, for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"npm test"),"\nor ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn lint")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"pnpm format"),". We cannot guarantee that moon will parse these correctly\notherwise."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n "lint": "eslint .",\n- "lint:fix": "yarn lint --fix",\n+ "lint:fix": "yarn run lint --fix",\n }\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Scripts that run multiple commands with the AND operator (",(0,r.kt)("inlineCode",{parentName:"p"},"&&"),") will create an individual\ntransient task for each command, with all tasks linked ",(0,r.kt)("em",{parentName:"p"},"in-order")," using task\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps")),". These commands ",(0,r.kt)("em",{parentName:"p"},"will not")," run in parallel. For example, given\nthe following script:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n // ...\n "check": "yarn run lint && yarn run test && yarn run typecheck"\n }\n}\n')),(0,r.kt)("p",{parentName:"li"},"Would create 3 tasks that create the dependency chain:\n",(0,r.kt)("inlineCode",{parentName:"p"},"check-dep1 (lint) -> check-dep2 (test) -> check (typecheck)"),", instead of the expected parallel\nexecution of ",(0,r.kt)("inlineCode",{parentName:"p"},"lint | test | typecheck -> check"),". If you would prefer these commands to run in\nparallel, then you'll need to craft your tasks manually.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Scripts that change directory (",(0,r.kt)("inlineCode",{parentName:"p"},"cd ..."),"), use pipes (",(0,r.kt)("inlineCode",{parentName:"p"},"|"),"), redirects (",(0,r.kt)("inlineCode",{parentName:"p"},">"),"), or the OR operator\n(",(0,r.kt)("inlineCode",{parentName:"p"},"||"),") are ",(0,r.kt)("strong",{parentName:"p"},"not")," supported and will be skipped. Tasks and scripts are not 1:1 in functionality,\nas tasks represent that state of a single command execution. However, you can wrap this\nfunctionality in a\n",(0,r.kt)("a",{parentName:"p",href:"../../faq#how-to-pipe-or-redirect-tasks"},"custom script that executes it on the task's behalf"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-scripts"},"Life cycle scripts")," are\n",(0,r.kt)("strong",{parentName:"p"},"not")," converted to tasks and will remain in ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," since they're required by npm (and\nother package managers). However, their commands ",(0,r.kt)("em",{parentName:"p"},"will")," be updated to execute moon commands when\napplicable."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n- "preversion": "yarn run lint && yarn run test",\n+ "preversion": "moon run project:lint && moon run project:test",\n }\n}\n')),(0,r.kt)("blockquote",{parentName:"li"},(0,r.kt)("p",{parentName:"blockquote"},"This ",(0,r.kt)("em",{parentName:"p"},"does not")," apply to ",(0,r.kt)("inlineCode",{parentName:"p"},"run"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"start"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"stop"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"test")," life cycles."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'"Post" life cycles for\n',(0,r.kt)("a",{parentName:"p",href:"https://docs.npmjs.com/cli/v8/using-npm/scripts#npm-run-user-defined"},"user defined scripts"),' do\nnot work, as moon tasks have no concept of "run this after the task completes", so we suggest\n',(0,r.kt)("em",{parentName:"p"},"against using these entirely"),". However, we still convert the script and include the base script\nas a task dependency."),(0,r.kt)("p",{parentName:"li"},"For example, a ",(0,r.kt)("inlineCode",{parentName:"p"},"posttest")," script would be converted into a ",(0,r.kt)("inlineCode",{parentName:"p"},"posttest")," task, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"test")," task\nincluded in ",(0,r.kt)("a",{parentName:"p",href:"../../config/project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps")),". For this to actually run correctly, you'll need\nto use ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run <project>:posttest")," AND NOT ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run <project>:test"),"."))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ffef4e04.d2ae2a50.js b/assets/js/ffef4e04.d2ae2a50.js deleted file mode 100644 index c6c528e4971..00000000000 --- a/assets/js/ffef4e04.d2ae2a50.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6027],{35318:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var a=n(27378);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),l=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=l(n),k=r,u=d["".concat(s,".").concat(k)]||d[k]||m[k]||o;return n?a.createElement(u,i(i({ref:t},c),{},{components:n})):a.createElement(u,i({ref:t},c))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p.mdxType="string"==typeof e?e:r,i[1]=p;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},19303:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>l});var a=n(25773),r=(n(27378),n(35318));const o={title:"migrate from-package-json",sidebar_label:"from-package-json"},i=void 0,p={unversionedId:"commands/migrate/from-package-json",id:"commands/migrate/from-package-json",title:"migrate from-package-json",description:"Use the moon migrate from-package-json sub-command to migrate a project's package.json",source:"@site/docs/commands/migrate/from-package-json.mdx",sourceDirName:"commands/migrate",slug:"/commands/migrate/from-package-json",permalink:"/docs/commands/migrate/from-package-json",draft:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/commands/migrate/from-package-json.mdx",tags:[],version:"current",frontMatter:{title:"migrate from-package-json",sidebar_label:"from-package-json"},sidebar:"docs",previous:{title:"migrate",permalink:"/docs/commands/migrate"},next:{title:"from-turborepo",permalink:"/docs/commands/migrate/from-turborepo"}},s={},l=[{value:"Arguments",id:"arguments",level:3},{value:"Caveats",id:"caveats",level:2}],c={toc:l};function m(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"moon migrate from-package-json <project>")," sub-command to migrate a project's ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json"),"\nto our ",(0,r.kt)("a",{parentName:"p",href:"../../config/project"},(0,r.kt)("inlineCode",{parentName:"a"},"moon.yml"))," format. When ran, the following changes are made:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Converts ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," scripts to ",(0,r.kt)("inlineCode",{parentName:"li"},"moon.yml")," ",(0,r.kt)("a",{parentName:"li",href:"../../config/project#tasks"},"tasks"),". Scripts and\ntasks are not 1:1, so we'll convert as close as possible while retaining functionality."),(0,r.kt)("li",{parentName:"ul"},"Updates ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," by removing all converted scripts. If all scripts were converted, the\nentire block is removed."),(0,r.kt)("li",{parentName:"ul"},"Links ",(0,r.kt)("inlineCode",{parentName:"li"},"package.json")," dependencies as ",(0,r.kt)("inlineCode",{parentName:"li"},"moon.yml")," ",(0,r.kt)("a",{parentName:"li",href:"../../config/project#dependson"},"dependencies"),"\n(",(0,r.kt)("inlineCode",{parentName:"li"},"dependsOn"),"). Will map a package's name to their moon project name.")),(0,r.kt)("p",null,"This command is ran ",(0,r.kt)("em",{parentName:"p"},"per project"),", and for this to operate correctly, requires all\n",(0,r.kt)("a",{parentName:"p",href:"../../config/workspace#projects"},"projects to be configured in the workspace"),". There's also a\nhandful of ",(0,r.kt)("a",{parentName:"p",href:"#caveats"},"requirements and caveats")," to be aware of!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ moon --log debug migrate from-package-json app\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"moon does its best to infer the ",(0,r.kt)("a",{parentName:"p",href:"../../config/project#local"},(0,r.kt)("inlineCode",{parentName:"a"},"local"))," option, given the small amount\nof information available to use. When this option is incorrectly set, it'll result in CI\nenvironments hanging for tasks that are long-running or never-ending (development servers, etc), or\nwon't run builds that should be. Be sure to audit each task after migration!")),(0,r.kt)("h3",{id:"arguments"},"Arguments"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"<project>")," - Name of a project, as defined in ",(0,r.kt)("a",{parentName:"li",href:"../../config/workspace#projects"},(0,r.kt)("inlineCode",{parentName:"a"},"projects")),".")),(0,r.kt)("h2",{id:"caveats"},"Caveats"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"When running a script within another script, the full invocation of ",(0,r.kt)("inlineCode",{parentName:"p"},"npm run ..."),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pnpm run ..."),",\nor ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn run ...")," must be used. Shorthand variants are ",(0,r.kt)("strong",{parentName:"p"},"not")," supported, for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"npm test"),"\nor ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn lint")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"pnpm format"),". We cannot guarantee that moon will parse these correctly\notherwise."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n "lint": "eslint .",\n- "lint:fix": "yarn lint --fix",\n+ "lint:fix": "yarn run lint --fix",\n }\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Scripts that run multiple commands with the AND operator (",(0,r.kt)("inlineCode",{parentName:"p"},"&&"),") will create an individual\ntransient task for each command, with all tasks linked ",(0,r.kt)("em",{parentName:"p"},"in-order")," using task\n",(0,r.kt)("a",{parentName:"p",href:"../../config/project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps")),". These commands ",(0,r.kt)("em",{parentName:"p"},"will not")," run in parallel. For example, given\nthe following script:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n // ...\n "check": "yarn run lint && yarn run test && yarn run typecheck"\n }\n}\n')),(0,r.kt)("p",{parentName:"li"},"Would create 3 tasks that create the dependency chain:\n",(0,r.kt)("inlineCode",{parentName:"p"},"check-dep1 (lint) -> check-dep2 (test) -> check (typecheck)"),", instead of the expected parallel\nexecution of ",(0,r.kt)("inlineCode",{parentName:"p"},"lint | test | typecheck -> check"),". If you would prefer these commands to run in\nparallel, then you'll need to craft your tasks manually.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Scripts that change directory (",(0,r.kt)("inlineCode",{parentName:"p"},"cd ..."),"), use pipes (",(0,r.kt)("inlineCode",{parentName:"p"},"|"),"), redirects (",(0,r.kt)("inlineCode",{parentName:"p"},">"),"), or the OR operator\n(",(0,r.kt)("inlineCode",{parentName:"p"},"||"),") are ",(0,r.kt)("strong",{parentName:"p"},"not")," supported and will be skipped. Tasks and scripts are not 1:1 in functionality,\nas tasks represent that state of a single command execution. However, you can wrap this\nfunctionality in a\n",(0,r.kt)("a",{parentName:"p",href:"../../faq#how-to-pipe-or-redirect-tasks"},"custom script that executes it on the task's behalf"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-scripts"},"Life cycle scripts")," are\n",(0,r.kt)("strong",{parentName:"p"},"not")," converted to tasks and will remain in ",(0,r.kt)("inlineCode",{parentName:"p"},"package.json")," since they're required by npm (and\nother package managers). However, their commands ",(0,r.kt)("em",{parentName:"p"},"will")," be updated to execute moon commands when\napplicable."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="package.json"',title:'"package.json"'},'{\n // ...\n "scripts": {\n- "preversion": "yarn run lint && yarn run test",\n+ "preversion": "moon run project:lint && moon run project:test",\n }\n}\n')),(0,r.kt)("blockquote",{parentName:"li"},(0,r.kt)("p",{parentName:"blockquote"},"This ",(0,r.kt)("em",{parentName:"p"},"does not")," apply to ",(0,r.kt)("inlineCode",{parentName:"p"},"run"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"start"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"stop"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"test")," life cycles."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'"Post" life cycles for\n',(0,r.kt)("a",{parentName:"p",href:"https://docs.npmjs.com/cli/v8/using-npm/scripts#npm-run-user-defined"},"user defined scripts"),' do\nnot work, as moon tasks have no concept of "run this after the task completes", so we suggest\n',(0,r.kt)("em",{parentName:"p"},"against using these entirely"),". However, we still convert the script and include the base script\nas a task dependency."),(0,r.kt)("p",{parentName:"li"},"For example, a ",(0,r.kt)("inlineCode",{parentName:"p"},"posttest")," script would be converted into a ",(0,r.kt)("inlineCode",{parentName:"p"},"posttest")," task, with the ",(0,r.kt)("inlineCode",{parentName:"p"},"test")," task\nincluded in ",(0,r.kt)("a",{parentName:"p",href:"../../config/project#deps"},(0,r.kt)("inlineCode",{parentName:"a"},"deps")),". For this to actually run correctly, you'll need\nto use ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run <project>:posttest")," AND NOT ",(0,r.kt)("inlineCode",{parentName:"p"},"moon run <project>:test"),"."))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fff5a6d1.29a7ddae.js b/assets/js/fff5a6d1.29a7ddae.js new file mode 100644 index 00000000000..2cbe221d60f --- /dev/null +++ b/assets/js/fff5a6d1.29a7ddae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97547],{11455:e=>{e.exports=JSON.parse('{"label":"detect","permalink":"/blog/tags/detect","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fff5a6d1.7390e3ff.js b/assets/js/fff5a6d1.7390e3ff.js deleted file mode 100644 index 2015c5221eb..00000000000 --- a/assets/js/fff5a6d1.7390e3ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7547],{11455:e=>{e.exports=JSON.parse('{"label":"detect","permalink":"/blog/tags/detect","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/fffcdd84.e84fb357.js b/assets/js/fffcdd84.e84fb357.js new file mode 100644 index 00000000000..bfa5442e2b7 --- /dev/null +++ b/assets/js/fffcdd84.e84fb357.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78158],{4156:e=>{e.exports=JSON.parse('{"label":"checksum","permalink":"/blog/tags/checksum","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/main.6a2889a1.js b/assets/js/main.6a2889a1.js deleted file mode 100644 index c0a2f795af5..00000000000 --- a/assets/js/main.6a2889a1.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.6a2889a1.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[179],{56573:(e,t,n)=>{"use strict";n.d(t,{W:()=>o});var a=n(27378);function o(){return a.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},a.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},37140:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(o&&(o+=" "),o+=t);return o}},33441:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(o&&(o+=" "),o+=t);return o}},50615:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a,o,r,i=n(27378);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(this,arguments)}const c=e=>{let{title:t,titleId:n,...c}=e;return i.createElement("svg",s({id:"Layer_1",xmlns:"http://www.w3.org/2000/svg",x:0,y:0,viewBox:"0 0 1604 320",style:{enableBackground:"new 0 0 1604 320"},xmlSpace:"preserve",role:"img","aria-labelledby":n},c),t?i.createElement("title",{id:n},t):null,a||(a=i.createElement("style",null,".st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}")),i.createElement("g",{id:"Group-19"},o||(o=i.createElement("path",{id:"Fill-1",className:"st0",d:"M0 320h320V0H0z"})),i.createElement("path",{id:"Fill-2",style:{fillRule:"evenodd",clipRule:"evenodd",fill:"#fff"},d:"M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"}),r||(r=i.createElement("g",{id:"Group-18",transform:"translate(425.854 73.217)"},i.createElement("path",{id:"Fill-3",className:"st0",d:"M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"}),i.createElement("path",{id:"Fill-5",className:"st0",d:"M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"}),i.createElement("path",{id:"Fill-7",className:"st0",d:"M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"}),i.createElement("path",{id:"Fill-9",className:"st0",d:"M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"}),i.createElement("path",{id:"Fill-11",className:"st0",d:"M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"}),i.createElement("path",{id:"Fill-13",className:"st0",d:"M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"}),i.createElement("path",{id:"Fill-14",className:"st0",d:"M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"}),i.createElement("path",{id:"Fill-15",className:"st0",d:"M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"}),i.createElement("path",{id:"Fill-16",className:"st0",d:"M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"}),i.createElement("path",{id:"Fill-17",className:"st0",d:"M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"})))))}},23427:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>r});var a=n(27378);const o=a.createContext(!1);function r(e){let{children:t}=e;const[n,r]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{r(!0)}),[]),a.createElement(o.Provider,{value:n},t)}},93002:(e,t,n)=>{"use strict";var a=n(27378),o=n(31542),r=n(4289),i=n(92883),s=n(161);const c=[n(86945),n(70142),n(81282),n(54374),n(59887),n(26222),n(53971)];var l=n(76623),u=n(35331),d=n(95473);function p(e){let{children:t}=e;return a.createElement(a.Fragment,null,t)}var f=n(25773),m=n(7092),g=n(50353),b=n(98948),h=n(20624),v=n(1123),y=n(43714),x=n(70174),_=n(13149),k=n(51721),w=n(60505);function E(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.default)(),n=(0,y.l)();return a.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return a.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),a.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.default)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.default)(),{pathname:a}=(0,u.TH)();return e+(0,k.applyTrailingSlash)((0,b.Z)(a),{trailingSlash:n,baseUrl:t})}(),r=t?`${n}${t}`:o;return a.createElement(m.Z,null,a.createElement("meta",{property:"og:url",content:r}),a.createElement("link",{rel:"canonical",href:r}))}function C(){const{i18n:{currentLocale:e}}=(0,g.default)(),{metadata:t,image:n}=(0,h.L)();return a.createElement(a.Fragment,null,a.createElement(m.Z,null,a.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),a.createElement("body",{className:x.h})),n&&a.createElement(v.d,{image:n}),a.createElement(S,null),a.createElement(E,null),a.createElement(w.Z,{tag:_.HX,locale:e}),a.createElement(m.Z,null,t.map(((e,t)=>a.createElement("meta",(0,f.Z)({key:t},e))))))}const T=new Map;function P(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(l.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(23427),N=n(83340);function O(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];const o=c.map((t=>(t.default?.[e]??t[e])?.(...n)));return()=>o.forEach((e=>e?.()))}const j=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,a.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const a=t.pathname===n.pathname,o=t.hash===n.hash,r=t.search===n.search;if(a&&o&&!r)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1));document.getElementById(e)?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),O("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(l.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class M extends a.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?O("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=O("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return a.createElement(j,{previousLocation:this.previousLocation,location:t},a.createElement(u.AW,{location:t,render:()=>e}))}}const I=M,R="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner-suggestion-container",z="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${z}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${z}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${D}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${D}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function B(){const{siteConfig:{baseUrl:e}}=(0,g.default)();return(0,a.useLayoutEffect)((()=>{window[z]=!1}),[]),a.createElement(a.Fragment,null,!s.Z.canUseDOM&&a.createElement(m.Z,null,a.createElement("script",null,F(e))),a.createElement("div",{id:R}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.default)(),{pathname:n}=(0,u.TH)();return t&&n===e?a.createElement(B,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:r}}=(0,g.default)(),i=(0,b.Z)(e),{htmlLang:s,direction:c}=r[o];return a.createElement(m.Z,null,a.createElement("html",{lang:s,dir:c}),a.createElement("title",null,t),a.createElement("meta",{property:"og:title",content:t}),a.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&a.createElement("link",{rel:"icon",href:i}))}var H=n(46293),V=n(76457);function Z(){const e=(0,V.Z)();return a.createElement(m.Z,null,a.createElement("html",{"data-has-hydrated":e}))}function q(){const e=(0,d.H)(l.Z),t=(0,u.TH)();return a.createElement(H.Z,null,a.createElement(N.M,null,a.createElement(A.t,null,a.createElement(p,null,a.createElement(U,null),a.createElement(C,null),a.createElement($,null),a.createElement(I,{location:P(t)},e)),a.createElement(Z,null))))}var W=n(16887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();(document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode)?.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const a=new XMLHttpRequest;a.open("GET",e,!0),a.withCredentials=!0,a.onload=()=>{200===a.status?t():n()},a.send(null)}))};var Y=n(13361);const K=new Set,Q=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch(e){if(!(e=>!X()&&!Q.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(l.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!Q.has(e))(e)&&(Q.add(e),L(e))},ee=Object.freeze(J);if(s.Z.canUseDOM){window.docusaurus=ee;const e=o.hydrate;L(window.location.pathname).then((()=>{e(a.createElement(i.B6,null,a.createElement(r.VK,null,a.createElement(q,null))),document.getElementById("__docusaurus"))}))}},83340:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var a=n(27378),o=n(36809);const r=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-LB233GTZD3"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"cheat-sheet","path":"/docs/cheat-sheet","sidebar":"docs"},{"id":"commands/action-graph","path":"/docs/commands/action-graph","sidebar":"docs"},{"id":"commands/bin","path":"/docs/commands/bin","sidebar":"docs"},{"id":"commands/check","path":"/docs/commands/check","sidebar":"docs"},{"id":"commands/ci","path":"/docs/commands/ci","sidebar":"docs"},{"id":"commands/clean","path":"/docs/commands/clean","sidebar":"docs"},{"id":"commands/completions","path":"/docs/commands/completions","sidebar":"docs"},{"id":"commands/docker/prune","path":"/docs/commands/docker/prune","sidebar":"docs"},{"id":"commands/docker/scaffold","path":"/docs/commands/docker/scaffold","sidebar":"docs"},{"id":"commands/docker/setup","path":"/docs/commands/docker/setup","sidebar":"docs"},{"id":"commands/generate","path":"/docs/commands/generate","sidebar":"docs"},{"id":"commands/init","path":"/docs/commands/init","sidebar":"docs"},{"id":"commands/migrate/from-package-json","path":"/docs/commands/migrate/from-package-json","sidebar":"docs"},{"id":"commands/migrate/from-turborepo","path":"/docs/commands/migrate/from-turborepo","sidebar":"docs"},{"id":"commands/overview","path":"/docs/commands/overview","sidebar":"docs"},{"id":"commands/project","path":"/docs/commands/project","sidebar":"docs"},{"id":"commands/project-graph","path":"/docs/commands/project-graph","sidebar":"docs"},{"id":"commands/query/hash","path":"/docs/commands/query/hash","sidebar":"docs"},{"id":"commands/query/hash-diff","path":"/docs/commands/query/hash-diff","sidebar":"docs"},{"id":"commands/query/projects","path":"/docs/commands/query/projects","sidebar":"docs"},{"id":"commands/query/tasks","path":"/docs/commands/query/tasks","sidebar":"docs"},{"id":"commands/query/touched-files","path":"/docs/commands/query/touched-files","sidebar":"docs"},{"id":"commands/run","path":"/docs/commands/run","sidebar":"docs"},{"id":"commands/setup","path":"/docs/commands/setup","sidebar":"docs"},{"id":"commands/sync/codeowners","path":"/docs/commands/sync/codeowners","sidebar":"docs"},{"id":"commands/sync/hooks","path":"/docs/commands/sync/hooks","sidebar":"docs"},{"id":"commands/sync/projects","path":"/docs/commands/sync/projects","sidebar":"docs"},{"id":"commands/task","path":"/docs/commands/task","sidebar":"docs"},{"id":"commands/teardown","path":"/docs/commands/teardown","sidebar":"docs"},{"id":"commands/upgrade","path":"/docs/commands/upgrade","sidebar":"docs"},{"id":"comparison","path":"/docs/comparison","sidebar":"docs"},{"id":"concepts/cache","path":"/docs/concepts/cache","sidebar":"docs"},{"id":"concepts/file-group","path":"/docs/concepts/file-group","sidebar":"docs"},{"id":"concepts/file-pattern","path":"/docs/concepts/file-pattern","sidebar":"docs"},{"id":"concepts/project","path":"/docs/concepts/project","sidebar":"docs"},{"id":"concepts/query-lang","path":"/docs/concepts/query-lang","sidebar":"docs"},{"id":"concepts/target","path":"/docs/concepts/target","sidebar":"docs"},{"id":"concepts/task","path":"/docs/concepts/task","sidebar":"docs"},{"id":"concepts/task-inheritance","path":"/docs/concepts/task-inheritance","sidebar":"docs"},{"id":"concepts/token","path":"/docs/concepts/token","sidebar":"docs"},{"id":"concepts/toolchain","path":"/docs/concepts/toolchain","sidebar":"docs"},{"id":"concepts/workspace","path":"/docs/concepts/workspace","sidebar":"docs"},{"id":"config/project","path":"/docs/config/project","sidebar":"docs"},{"id":"config/tasks","path":"/docs/config/tasks","sidebar":"docs"},{"id":"config/template","path":"/docs/config/template","sidebar":"docs"},{"id":"config/toolchain","path":"/docs/config/toolchain","sidebar":"docs"},{"id":"config/workspace","path":"/docs/config/workspace","sidebar":"docs"},{"id":"create-project","path":"/docs/create-project","sidebar":"docs"},{"id":"create-task","path":"/docs/create-task","sidebar":"docs"},{"id":"editors/vscode","path":"/docs/editors/vscode","sidebar":"docs"},{"id":"faq","path":"/docs/faq","sidebar":"docs"},{"id":"guides/ci","path":"/docs/guides/ci","sidebar":"guides"},{"id":"guides/codegen","path":"/docs/guides/codegen","sidebar":"guides"},{"id":"guides/codeowners","path":"/docs/guides/codeowners","sidebar":"guides"},{"id":"guides/debug-task","path":"/docs/guides/debug-task","sidebar":"guides"},{"id":"guides/docker","path":"/docs/guides/docker","sidebar":"guides"},{"id":"guides/examples/angular","path":"/docs/guides/examples/angular","sidebar":"guides"},{"id":"guides/examples/astro","path":"/docs/guides/examples/astro","sidebar":"guides"},{"id":"guides/examples/eslint","path":"/docs/guides/examples/eslint","sidebar":"guides"},{"id":"guides/examples/jest","path":"/docs/guides/examples/jest","sidebar":"guides"},{"id":"guides/examples/nest","path":"/docs/guides/examples/nest","sidebar":"guides"},{"id":"guides/examples/next","path":"/docs/guides/examples/next","sidebar":"guides"},{"id":"guides/examples/nuxt","path":"/docs/guides/examples/nuxt","sidebar":"guides"},{"id":"guides/examples/packemon","path":"/docs/guides/examples/packemon","sidebar":"guides"},{"id":"guides/examples/prettier","path":"/docs/guides/examples/prettier","sidebar":"guides"},{"id":"guides/examples/react","path":"/docs/guides/examples/react","sidebar":"guides"},{"id":"guides/examples/remix","path":"/docs/guides/examples/remix","sidebar":"guides"},{"id":"guides/examples/solid","path":"/docs/guides/examples/solid","sidebar":"guides"},{"id":"guides/examples/storybook","path":"/docs/guides/examples/storybook","sidebar":"guides"},{"id":"guides/examples/sveltekit","path":"/docs/guides/examples/sveltekit","sidebar":"guides"},{"id":"guides/examples/typescript","path":"/docs/guides/examples/typescript","sidebar":"guides"},{"id":"guides/examples/vite","path":"/docs/guides/examples/vite","sidebar":"guides"},{"id":"guides/examples/vue","path":"/docs/guides/examples/vue","sidebar":"guides"},{"id":"guides/javascript/deno-handbook","path":"/docs/guides/javascript/deno-handbook","sidebar":"guides"},{"id":"guides/javascript/node-handbook","path":"/docs/guides/javascript/node-handbook","sidebar":"guides"},{"id":"guides/javascript/typescript-eslint","path":"/docs/guides/javascript/typescript-eslint"},{"id":"guides/javascript/typescript-project-refs","path":"/docs/guides/javascript/typescript-project-refs","sidebar":"guides"},{"id":"guides/offline-mode","path":"/docs/guides/offline-mode","sidebar":"guides"},{"id":"guides/open-source","path":"/docs/guides/open-source","sidebar":"guides"},{"id":"guides/profile","path":"/docs/guides/profile","sidebar":"guides"},{"id":"guides/remote-cache","path":"/docs/guides/remote-cache","sidebar":"guides"},{"id":"guides/root-project","path":"/docs/guides/root-project","sidebar":"guides"},{"id":"guides/rust/handbook","path":"/docs/guides/rust/handbook","sidebar":"guides"},{"id":"guides/sharing-config","path":"/docs/guides/sharing-config","sidebar":"guides"},{"id":"guides/vcs-hooks","path":"/docs/guides/vcs-hooks","sidebar":"guides"},{"id":"guides/webhooks","path":"/docs/guides/webhooks","sidebar":"guides"},{"id":"how-it-works/action-graph","path":"/docs/how-it-works/action-graph","sidebar":"docs"},{"id":"how-it-works/languages","path":"/docs/how-it-works/languages","sidebar":"docs"},{"id":"how-it-works/project-graph","path":"/docs/how-it-works/project-graph","sidebar":"docs"},{"id":"install","path":"/docs/install","sidebar":"docs"},{"id":"intro","path":"/docs/","sidebar":"docs"},{"id":"migrate-to-moon","path":"/docs/migrate-to-moon","sidebar":"docs"},{"id":"proto/commands/add-plugin","path":"/docs/proto/commands/add-plugin","sidebar":"proto"},{"id":"proto/commands/alias","path":"/docs/proto/commands/alias","sidebar":"proto"},{"id":"proto/commands/bin","path":"/docs/proto/commands/bin","sidebar":"proto"},{"id":"proto/commands/clean","path":"/docs/proto/commands/clean","sidebar":"proto"},{"id":"proto/commands/completions","path":"/docs/proto/commands/completions","sidebar":"proto"},{"id":"proto/commands/install","path":"/docs/proto/commands/install","sidebar":"proto"},{"id":"proto/commands/install-global","path":"/docs/proto/commands/install-global","sidebar":"proto"},{"id":"proto/commands/list","path":"/docs/proto/commands/list","sidebar":"proto"},{"id":"proto/commands/list-global","path":"/docs/proto/commands/list-global","sidebar":"proto"},{"id":"proto/commands/list-remote","path":"/docs/proto/commands/list-remote","sidebar":"proto"},{"id":"proto/commands/outdated","path":"/docs/proto/commands/outdated","sidebar":"proto"},{"id":"proto/commands/pin","path":"/docs/proto/commands/pin","sidebar":"proto"},{"id":"proto/commands/plugins","path":"/docs/proto/commands/plugins","sidebar":"proto"},{"id":"proto/commands/remove-plugin","path":"/docs/proto/commands/remove-plugin","sidebar":"proto"},{"id":"proto/commands/run","path":"/docs/proto/commands/run","sidebar":"proto"},{"id":"proto/commands/setup","path":"/docs/proto/commands/setup","sidebar":"proto"},{"id":"proto/commands/tools","path":"/docs/proto/commands/tools","sidebar":"proto"},{"id":"proto/commands/unalias","path":"/docs/proto/commands/unalias","sidebar":"proto"},{"id":"proto/commands/uninstall","path":"/docs/proto/commands/uninstall","sidebar":"proto"},{"id":"proto/commands/uninstall-global","path":"/docs/proto/commands/uninstall-global","sidebar":"proto"},{"id":"proto/commands/upgrade","path":"/docs/proto/commands/upgrade","sidebar":"proto"},{"id":"proto/commands/use","path":"/docs/proto/commands/use","sidebar":"proto"},{"id":"proto/config","path":"/docs/proto/config","sidebar":"proto"},{"id":"proto/detection","path":"/docs/proto/detection","sidebar":"proto"},{"id":"proto/faq","path":"/docs/proto/faq","sidebar":"proto"},{"id":"proto/index","path":"/docs/proto/","sidebar":"proto"},{"id":"proto/install","path":"/docs/proto/install","sidebar":"proto"},{"id":"proto/plugins","path":"/docs/proto/plugins","sidebar":"proto"},{"id":"proto/toml-plugin","path":"/docs/proto/toml-plugin","sidebar":"proto"},{"id":"proto/tools","path":"/docs/proto/tools","sidebar":"proto"},{"id":"proto/wasm-plugin","path":"/docs/proto/wasm-plugin","sidebar":"proto"},{"id":"run-task","path":"/docs/run-task","sidebar":"docs"},{"id":"setup-toolchain","path":"/docs/setup-toolchain","sidebar":"docs"},{"id":"setup-workspace","path":"/docs/setup-workspace","sidebar":"docs"},{"id":"terminology","path":"/docs/terminology","sidebar":"docs"},{"id":"/how-it-works","path":"/docs/how-it-works","sidebar":"docs"},{"id":"/concepts","path":"/docs/concepts","sidebar":"docs"},{"id":"/config","path":"/docs/config","sidebar":"docs"},{"id":"/editors","path":"/docs/editors","sidebar":"docs"},{"id":"/commands","path":"/docs/commands","sidebar":"docs"},{"id":"/commands/docker","path":"/docs/commands/docker","sidebar":"docs"},{"id":"/commands/migrate","path":"/docs/commands/migrate","sidebar":"docs"},{"id":"/commands/query","path":"/docs/commands/query","sidebar":"docs"},{"id":"/commands/sync","path":"/docs/commands/sync","sidebar":"docs"},{"id":"/guides/node/examples","path":"/docs/guides/node/examples","sidebar":"guides"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/","label":"intro"}},"guides":{"link":{"path":"/docs/guides/ci","label":"guides/ci"}},"proto":{"link":{"path":"/docs/proto/","label":"proto/index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const c=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.1.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.3"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.3"},"docusaurus-plugin-typedoc-api":{"type":"package","name":"docusaurus-plugin-typedoc-api","version":"3.0.0"},"docusaurus-tailwindcss":{"type":"local"}}}'),l={siteConfig:o.default,siteMetadata:c,globalData:r,i18n:i,codeTranslations:s},u=a.createContext(l);function d(e){let{children:t}=e;return a.createElement(u.Provider,{value:l},t)}},46293:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(27378),o=n(161),r=n(7092),i=n(51721),s=n(64654);function c(e){let{error:t,tryAgain:n}=e;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(l,{error:t}))}function l(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return a.createElement(p,{fallback:()=>a.createElement(c,{error:t,tryAgain:n})},a.createElement(r.Z,null,a.createElement("title",null,"Page Error")),a.createElement(s.Z,null,a.createElement(c,{error:t,tryAgain:n})))}const d=e=>a.createElement(u,e);class p extends a.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},161:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const a="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:a,canUseEventListeners:a&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:a&&"IntersectionObserver"in window,canUseViewport:a&&"screen"in window}},7092:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378),o=n(92883);function r(e){return a.createElement(o.ql,e)}},81884:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var a=n(25773),o=n(27378),r=n(4289),i=n(51721),s=n(50353),c=n(45626),l=n(161);const u=o.createContext({collectLink:()=>{}});var d=n(98948);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":b,autoAddBaseUrl:h=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:x}}=(0,s.default)(),{withBaseUrl:_}=(0,d.C)(),k=(0,o.useContext)(u),w=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>w.current));const E=p||f;const S=(0,c.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(P=C,h&&(e=>e.startsWith("/"))(P)?_(P):P):void 0;var P;T&&S&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:x}));const A=(0,o.useRef)(!1),N=n?r.OL:r.rU,O=l.Z.canUseIntersectionObserver,j=(0,o.useRef)(),L=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,o.useEffect)((()=>(!O&&S&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&j.current&&j.current.disconnect()})),[j,T,O,S]);const M=T?.startsWith("#")??!1,I=!T||!S||M;return I||b||k.collectLink(T),I?o.createElement("a",(0,a.Z)({ref:w,href:T},E&&!S&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(N,(0,a.Z)({},v,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{w.current=e,O&&e&&S&&(j.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(j.current.unobserve(e),j.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),j.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const f=o.forwardRef(p)},99213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>s});var a=n(27378);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,a.isValidElement)(e)))?n.map(((e,t)=>(0,a.isValidElement)(e)?a.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var r=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return r[t??n]??n??t}function s(e,t){let{message:n,id:a}=e;return o(i({message:n,id:a}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return a.createElement(a.Fragment,null,o(s,r))}},45688:(e,t,n)=>{"use strict";n.d(t,{m:()=>a});const a="default"},45626:(e,t,n)=>{"use strict";function a(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!a(e)}n.d(t,{Z:()=>o,b:()=>a})},98948:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var a=n(27378),o=n(50353),r=n(45626);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.default)(),n=(0,a.useCallback)(((n,a)=>function(e,t,n,a){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===a?{}:a;if(!n||n.startsWith("#")||(0,r.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,a)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},50353:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var a=n(27378),o=n(83340);function r(){return(0,a.useContext)(o._)}},76457:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378),o=n(23427);function r(){return(0,a.useContext)(o._)}},13361:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,r]=n;const i=a?`${a}.${o}`:o;var s;"object"==typeof(s=r)&&s&&Object.keys(s).length>0?e(r,i):t[i]=r}))}(e),t}},66881:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>r});var a=n(27378);const o=a.createContext(null);function r(e){let{children:t,value:n}=e;const r=a.useContext(o),i=(0,a.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const a={...t.data,...n?.data};return{plugin:t.plugin,data:a}}({parent:r,value:n})),[r,n]);return a.createElement(o.Provider,{value:i},t)}},62935:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useActiveDocContext:()=>v,useActivePlugin:()=>f,useActivePluginAndVersion:()=>m,useActiveVersion:()=>h,useAllDocsData:()=>d,useDocVersionSuggestions:()=>y,useDocsData:()=>p,useLatestVersion:()=>b,useVersions:()=>g});var a=n(35331),o=n(50353),r=n(45688);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.default)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function c(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,a.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=c(e,t),o=n?.docs.find((e=>!!(0,a.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((a=>{a.id===t&&(n[e.name]=a)}))})),n}(o.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>function(e,t,n){void 0===t&&(t=r.m),void 0===n&&(n={});const a=i(e)?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,a.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,a.LX)(t,{path:n.path,exact:!1,strict:!1})})),r=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!r&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return r}(t,n,e)}function m(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,a.TH)();if(!t)return;return{activePlugin:t,activeVersion:c(t.pluginData,n)}}function g(e){return p(e).versions}function b(e){const t=p(e);return s(t)}function h(e){const t=p(e),{pathname:n}=(0,a.TH)();return c(t,n)}function v(e){const t=p(e),{pathname:n}=(0,a.TH)();return l(t,n)}function y(e){const t=p(e),{pathname:n}=(0,a.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},86945:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const a={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},54374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var a=n(8504),o=n.n(a);o().configure({showSpinner:!1});const r={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},81282:(e,t,n)=>{"use strict";n.r(t);var a=n(52349),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:a}=t;globalThis.Prism=e,a.forEach((e=>{n(59341)(`./prism-${e}`)}))}(a.Z)},6125:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378);const o="iconExternalLink_nPrP";function r(e){let{width:t=13.5,height:n=13.5}=e;return a.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o},a.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64654:(e,t,n)=>{"use strict";n.d(t,{Z:()=>It});var a=n(27378),o=n(37140),r=n(46293),i=n(1123),s=n(39360),c=n(75484),l=n(70174);const u="skipToContent_oPtH";function d(){return a.createElement(s.l,{className:u})}var p=n(20624),f=n(10),m=n(25773),g=n(99213);function b(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:r=1.2,className:i,...s}=e;return a.createElement("svg",(0,m.Z)({viewBox:"0 0 15 15",width:t,height:n},s),a.createElement("g",{stroke:o,strokeWidth:r},a.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const h="closeButton_J5rP";function v(e){return a.createElement("button",(0,m.Z)({type:"button","aria-label":(0,g.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",h,e.className)}),a.createElement(b,{width:14,height:14,strokeWidth:3.1}))}const y="content_bSb_";function x(e){const{announcementBar:t}=(0,p.L)(),{content:n}=t;return a.createElement("div",(0,m.Z)({},e,{className:(0,o.Z)(y,e.className),dangerouslySetInnerHTML:{__html:n}}))}const _="announcementBar_zJRd",k="announcementBarPlaceholder_NpUd",w="announcementBarClose_Jjdj",E="announcementBarContent_t7IR";function S(){const{announcementBar:e}=(0,p.L)(),{isActive:t,close:n}=(0,f.nT)();if(!t)return null;const{backgroundColor:o,textColor:r,isCloseable:i}=e;return a.createElement("div",{className:_,style:{backgroundColor:o,color:r},role:"banner"},i&&a.createElement("div",{className:k}),a.createElement(x,{className:E}),i&&a.createElement(v,{onClick:n,className:w}))}var C=n(85536),T=n(82561),P=n(37930),A=n(15530);function N(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:i}=(0,A.Y)();return a.createElement("div",{className:"navbar-sidebar"},t,a.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},a.createElement("div",{className:"navbar-sidebar__item menu"},n),a.createElement("div",{className:"navbar-sidebar__item menu"},r)))}var O=n(55421),j=n(76457);function L(e){return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function M(e){return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const I={toggle:"toggle_ki11",toggleButton:"toggleButton_MMFG",darkToggleIcon:"darkToggleIcon_U96C",lightToggleIcon:"lightToggleIcon_lgto",toggleButtonDisabled:"toggleButtonDisabled_Uw7m"};function R(e){let{className:t,buttonClassName:n,value:r,onChange:i}=e;const s=(0,j.Z)(),c=(0,g.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,g.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,g.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return a.createElement("div",{className:(0,o.Z)(I.toggle,t)},a.createElement("button",{className:(0,o.Z)("clean-btn",I.toggleButton,!s&&I.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===r?"light":"dark"),disabled:!s,title:c,"aria-label":c,"aria-live":"polite"},a.createElement(L,{className:(0,o.Z)(I.toggleIcon,I.lightToggleIcon)}),a.createElement(M,{className:(0,o.Z)(I.toggleIcon,I.darkToggleIcon)})))}const D=a.memo(R),z="darkNavbarColorModeToggle_m8pZ";function F(e){let{className:t}=e;const n=(0,p.L)().navbar.style,o=(0,p.L)().colorMode.disableSwitch,{colorMode:r,setColorMode:i}=(0,O.I)();return o?null:a.createElement(D,{className:t,buttonClassName:"dark"===n?z:void 0,value:r,onChange:i})}var B=n(10898);function $(){return a.createElement(B.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function U(){const e=(0,C.e)();return a.createElement("button",{type:"button","aria-label":(0,g.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},a.createElement(b,{color:"var(--ifm-color-emphasis-600)"}))}function H(){return a.createElement("div",{className:"navbar-sidebar__brand"},a.createElement($,null),a.createElement(F,{className:"margin-right--md"}),a.createElement(U,null))}var V=n(81884),Z=n(98948),q=n(45626),W=n(61503),G=n(6125);function Y(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:r,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:l,...u}=e;const d=(0,Z.Z)(o),p=(0,Z.Z)(t),f=(0,Z.Z)(r,{forcePrependBaseUrl:!0}),g=i&&r&&!(0,q.Z)(r),b=s?{dangerouslySetInnerHTML:{__html:s}}:{children:a.createElement(a.Fragment,null,i,g&&a.createElement(G.Z,c&&{width:12,height:12}))};return r?a.createElement(V.default,(0,m.Z)({href:l?f:r},u,b)):a.createElement(V.default,(0,m.Z)({to:d,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,W.F)(n,t.pathname):t.pathname.startsWith(p)},u,b))}function K(e){let{className:t,isDropdownItem:n=!1,...r}=e;const i=a.createElement(Y,(0,m.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},r));return n?a.createElement("li",null,i):i}function Q(e){let{className:t,isDropdownItem:n,...r}=e;return a.createElement("li",{className:"menu__list-item"},a.createElement(Y,(0,m.Z)({className:(0,o.Z)("menu__link",t)},r)))}function X(e){let{mobile:t=!1,position:n,...o}=e;const r=t?Q:K;return a.createElement(r,(0,m.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var J=n(80376),ee=n(8862),te=n(43511);function ne(e,t){return e.some((e=>function(e,t){return!!(0,ee.Mg)(e.to,t)||!!(0,W.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ae(e){let{items:t,position:n,className:r,onClick:i,...s}=e;const c=(0,a.useRef)(null),[l,u]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&u(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),a.createElement("div",{ref:c,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":l})},a.createElement(Y,(0,m.Z)({"aria-haspopup":"true","aria-expanded":l,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",r)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),u(!l))}}),s.children??s.label),a.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>a.createElement(ze,(0,m.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function oe(e){let{items:t,className:n,position:r,onClick:i,...s}=e;const c=(0,te.b)(),l=ne(t,c),{collapsed:u,toggleCollapsed:d,setCollapsed:p}=(0,J.u)({initialState:()=>!l});return(0,a.useEffect)((()=>{l&&p(!l)}),[c,l,p]),a.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":u})},a.createElement(Y,(0,m.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},s,{onClick:e=>{e.preventDefault(),d()}}),s.children??s.label),a.createElement(J.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:u},t.map(((e,t)=>a.createElement(ze,(0,m.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function re(e){let{mobile:t=!1,...n}=e;const o=t?oe:ae;return a.createElement(o,n)}var ie=n(50353),se=n(43714),ce=n(35331);function le(e){let{width:t=20,height:n=20,...o}=e;return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),a.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ue="iconLanguage_kvP7";function de(){return a.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},a.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var pe=n(56573),fe=["translations"];function me(){return me=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},me.apply(this,arguments)}function ge(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var a,o,r=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(r.push(a.value),!t||r.length!==t);i=!0);}catch(c){s=!0,o=c}finally{try{i||null==n.return||n.return()}finally{if(s)throw o}}return r}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return be(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return be(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function he(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var ve="Ctrl";var ye=a.forwardRef((function(e,t){var n=e.translations,o=void 0===n?{}:n,r=he(e,fe),i=o.buttonText,s=void 0===i?"Search":i,c=o.buttonAriaLabel,l=void 0===c?"Search":c,u=ge((0,a.useState)(null),2),d=u[0],p=u[1];return(0,a.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(ve))}),[]),a.createElement("button",me({type:"button",className:"DocSearch DocSearch-Button","aria-label":l},r,{ref:t}),a.createElement("span",{className:"DocSearch-Button-Container"},a.createElement(pe.W,null),a.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),a.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&a.createElement(a.Fragment,null,a.createElement("kbd",{className:"DocSearch-Button-Key"},d===ve?a.createElement(de,null):d),a.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),xe=n(7092),_e=n(53584),ke=n(42473),we=n(13149);var Ee=n(31542);const Se={button:{buttonText:(0,g.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,g.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,g.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,g.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,g.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,g.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,g.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,g.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,g.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,g.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,g.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,g.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,g.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,g.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,g.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,g.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,g.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,g.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,g.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Ce=null;function Te(e){let{hit:t,children:n}=e;return a.createElement(V.default,{to:t.url},n)}function Pe(e){let{state:t,onClose:n}=e;const o=(0,_e.M)();return a.createElement(V.default,{to:o(t.query),onClick:n},a.createElement(g.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Ae(e){let{contextualSearch:t,externalUrlRegex:o,...r}=e;const{siteMetadata:i}=(0,ie.default)(),s=(0,ke.l)(),c=function(){const{locale:e,tags:t}=(0,we._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),l=r.searchParameters?.facetFilters??[],u=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,l):l,d={...r.searchParameters,facetFilters:u},p=(0,ce.k6)(),f=(0,a.useRef)(null),g=(0,a.useRef)(null),[b,h]=(0,a.useState)(!1),[v,y]=(0,a.useState)(void 0),x=(0,a.useCallback)((()=>Ce?Promise.resolve():Promise.all([n.e(8777).then(n.bind(n,88777)),Promise.all([n.e(532),n.e(9127)]).then(n.bind(n,89127)),Promise.all([n.e(532),n.e(4670)]).then(n.bind(n,34670))]).then((e=>{let[{DocSearchModal:t}]=e;Ce=t}))),[]),_=(0,a.useCallback)((()=>{x().then((()=>{f.current=document.createElement("div"),document.body.insertBefore(f.current,document.body.firstChild),h(!0)}))}),[x,h]),k=(0,a.useCallback)((()=>{h(!1),f.current?.remove()}),[h]),w=(0,a.useCallback)((e=>{x().then((()=>{h(!0),y(e.key)}))}),[x,h,y]),E=(0,a.useRef)({navigate(e){let{itemUrl:t}=e;(0,W.F)(o,t)?window.location.href=t:p.push(t)}}).current,S=(0,a.useRef)((e=>r.transformItems?r.transformItems(e):e.map((e=>({...e,url:s(e.url)}))))).current,C=(0,a.useMemo)((()=>e=>a.createElement(Pe,(0,m.Z)({},e,{onClose:k}))),[k]),T=(0,a.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,o=e.onClose,r=e.onInput,i=e.searchButtonRef;a.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?o():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&r&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&r(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,o,r,i])}({isOpen:b,onOpen:_,onClose:k,onInput:w,searchButtonRef:g}),a.createElement(a.Fragment,null,a.createElement(xe.Z,null,a.createElement("link",{rel:"preconnect",href:`https://${r.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})),a.createElement(ye,{onTouchStart:x,onFocus:x,onMouseOver:x,onClick:_,ref:g,translations:Se.button}),b&&Ce&&f.current&&(0,Ee.createPortal)(a.createElement(Ce,(0,m.Z)({onClose:k,initialScrollY:window.scrollY,initialQuery:v,navigator:E,transformItems:S,hitComponent:Te,transformSearchClient:T},r.searchPagePath&&{resultsFooterComponent:C},r,{searchParameters:d,placeholder:Se.placeholder,translations:Se.modal})),f.current))}function Ne(){const{siteConfig:e}=(0,ie.default)();return a.createElement(Ae,e.themeConfig.algolia)}const Oe="searchBox_WqAV";function je(e){let{children:t,className:n}=e;return a.createElement("div",{className:(0,o.Z)(n,Oe)},t)}var Le=n(62935),Me=n(45161);var Ie=n(24453);const Re=e=>e.docs.find((t=>t.id===e.mainDocId));const De={default:X,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...r}=e;const{i18n:{currentLocale:i,locales:s,localeConfigs:c}}=(0,ie.default)(),l=(0,se.l)(),{search:u,hash:d}=(0,ce.TH)(),p=[...n,...s.map((e=>{const n=`${`pathname://${l.createUrl({locale:e,fullyQualified:!1})}`}${u}${d}`;return{label:c[e].label,lang:c[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],f=t?(0,g.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):c[i].label;return a.createElement(re,(0,m.Z)({},r,{mobile:t,label:a.createElement(a.Fragment,null,a.createElement(le,{className:ue}),f),items:p}))},search:function(e){let{mobile:t,className:n}=e;return t?null:a.createElement(je,{className:n},a.createElement(Ne,null))},dropdown:re,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return a.createElement(s,{className:(0,o.Z)({navbar__item:!r&&!i,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...r}=e;const{activeDoc:i}=(0,Le.useActiveDocContext)(o),s=(0,Me.vY)(t,o);return null===s?null:a.createElement(X,(0,m.Z)({exact:!0},r,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...r}=e;const{activeDoc:i}=(0,Le.useActiveDocContext)(o),s=(0,Me.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return a.createElement(X,(0,m.Z)({exact:!0},r,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...r}=e;const i=(0,Me.lO)(o)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return a.createElement(X,(0,m.Z)({},r,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:r,dropdownItemsAfter:i,...s}=e;const{search:c,hash:l}=(0,ce.TH)(),u=(0,Le.useActiveDocContext)(n),d=(0,Le.useVersions)(n),{savePreferredVersionName:p}=(0,Ie.J)(n),f=[...r,...d.map((e=>{const t=u.alternateDocVersions[e.name]??Re(e);return{label:e.label,to:`${t.path}${c}${l}`,isActive:()=>e===u.activeVersion,onClick:()=>p(e.name)}})),...i],b=(0,Me.lO)(n)[0],h=t&&f.length>1?(0,g.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&f.length>1?void 0:Re(b).path;return f.length<=1?a.createElement(X,(0,m.Z)({},s,{mobile:t,label:h,to:v,isActive:o?()=>!1:void 0})):a.createElement(re,(0,m.Z)({},s,{mobile:t,label:h,to:v,items:f,isActive:o?()=>!1:void 0}))}};function ze(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),r=De[o];if(!r)throw new Error(`No NavbarItem component found for type "${t}".`);return a.createElement(r,n)}function Fe(){const e=(0,C.e)(),t=(0,p.L)().navbar.items;return a.createElement("ul",{className:"menu__list"},t.map(((t,n)=>a.createElement(ze,(0,m.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Be(e){return a.createElement("button",(0,m.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),a.createElement(g.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function $e(){const e=0===(0,p.L)().navbar.items.length,t=(0,A.Y)();return a.createElement(a.Fragment,null,!e&&a.createElement(Be,{onClick:()=>t.hide()}),t.content)}function Ue(){const e=(0,C.e)();return(0,P.N)(e.shown),e.shouldRender?a.createElement(N,{header:a.createElement(H,null),primaryMenu:a.createElement(Fe,null),secondaryMenu:a.createElement($e,null)}):null}const He="navbarHideable_hhpl",Ve="navbarHidden_nmcs";function Ze(e){return a.createElement("div",(0,m.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function qe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:r}}=(0,p.L)(),i=(0,C.e)(),{navbarRef:s,isNavbarVisible:c}=(0,T.c)(n);return a.createElement("nav",{ref:s,"aria-label":(0,g.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[He,!c&&Ve],{"navbar--dark":"dark"===r,"navbar--primary":"primary"===r,"navbar-sidebar--show":i.shown})},t,a.createElement(Ze,{onClick:i.toggle}),a.createElement(Ue,null))}var We=n(19441),Ge=n(63211);function Ye(e){let{width:t=30,height:n=30,className:o,...r}=e;return a.createElement("svg",(0,m.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},r),a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ke(){const{toggle:e,shown:t}=(0,C.e)();return a.createElement("button",{onClick:e,"aria-label":(0,g.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},a.createElement(Ye,null))}const Qe="colorModeToggle_Hewu";function Xe(e){let{items:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(We.QW,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},a.createElement(ze,e)))))}function Je(e){let{left:t,right:n}=e;return a.createElement("div",{className:"navbar__inner"},a.createElement("div",{className:"navbar__items"},t),a.createElement("div",{className:"navbar__items navbar__items--right"},n))}function et(){const e=(0,C.e)(),t=(0,p.L)().navbar.items,[n,o]=(0,Ge.A)(t),r=t.find((e=>"search"===e.type));return a.createElement(Je,{left:a.createElement(a.Fragment,null,!e.disabled&&a.createElement(Ke,null),a.createElement($,null),a.createElement(Xe,{items:n})),right:a.createElement(a.Fragment,null,a.createElement(Xe,{items:o}),a.createElement(F,{className:Qe}),!r&&a.createElement(je,null,a.createElement(Ne,null)))})}function tt(){return a.createElement(qe,null,a.createElement(et,null))}var nt=n(33922),at=n(9187),ot=n(90728);function rt(e){let{item:t}=e;const{to:n,href:o,label:r,prependBaseUrlToHref:i,...s}=t,c=(0,Z.Z)(n),l=(0,Z.Z)(o,{forcePrependBaseUrl:!0});return a.createElement(ot.Z,(0,m.Z)({},o?{href:i?l:o}:{to:c},s),r)}function it(e){let{column:t}=e;return a.createElement("div",null,a.createElement(at.Z,{level:6,transform:"uppercase"},t.title),a.createElement("ul",{role:"list",className:"m-0 mt-2 p-0 space-y-1 list-none"},t.items.map((e=>a.createElement("li",{key:e.href??e.to},a.createElement(rt,{item:e}))))))}function st(e){let{columns:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(it,{key:t,column:e}))))}function ct(e){let{item:t}=e;const{to:n,href:o,label:r,prependBaseUrlToHref:i,...s}=t,c=(0,Z.Z)(n),l=(0,Z.Z)(o,{forcePrependBaseUrl:!0});return a.createElement(V.default,(0,m.Z)({className:"footer__link-item"},o?{href:i?l:o}:{to:c},s),r,o&&!(0,q.Z)(o)&&a.createElement(G.Z,null))}function lt(){return a.createElement("span",{className:"footer__link-separator"},"\xb7")}function ut(e){let{item:t}=e;return t.html?a.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement(ct,{item:t})}function dt(e){let{links:t}=e;return a.createElement("div",{className:"footer__links text--center"},a.createElement("div",{className:"footer__links"},t.map(((e,n)=>a.createElement(a.Fragment,{key:n},a.createElement(ut,{item:e}),t.length!==n+1&&a.createElement(lt,null))))))}function pt(e){let{links:t}=e;return(0,nt.a)(t)?a.createElement(st,{columns:t}):a.createElement(dt,{links:t})}var ft=n(14034);const mt="footerLogoLink_tutC";function gt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Z.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return a.createElement(ft.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function bt(e){let{logo:t}=e;return t.href?a.createElement(V.default,{href:t.href,className:mt,target:t.target},a.createElement(gt,{logo:t})):a.createElement(gt,{logo:t})}function ht(e){let{copyright:t}=e;return a.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}var vt=n(9928),yt=n(31792),xt=n(30658),_t=n(83469),kt=n(50615),wt=n(76911);function Et(e){return a.createElement(wt.Z,(0,m.Z)({},e,{label:"Next",id:"contact-next",className:"w-1/4"}))}function St(){const[e,t]=(0,a.useState)(1),[n,o]=(0,a.useState)(""),[r,i]=(0,a.useState)(""),[s,c]=(0,a.useState)(""),[l,u]=(0,a.useState)(!1),[d,p]=(0,a.useState)(!1),f=(0,a.useCallback)((()=>{t(1),o(""),i(""),c(""),u(!1),p(!1)}),[]),m=(0,a.useCallback)((()=>{t((e=>e+1))}),[]),g=(0,a.useCallback)((e=>{o(e.target.value)}),[]),b=(0,a.useCallback)((e=>{i(e.target.value)}),[]),h=(0,a.useCallback)((e=>{c(e.target.value)}),[]),v=(0,a.useCallback)((()=>{u(!0),fetch("https://formspree.io/f/xnqrnvgw",{body:JSON.stringify({email:r,message:s,subject:n}),headers:{Accept:"application/json"},method:"post"}).then((e=>{p(!e.ok)})).catch((()=>{p(!0)})).finally((()=>{u(!1),m()}))}),[r,s,n,m]),y=!!r.match(/^.+@.+$/),x=s.length>10;return a.createElement(a.Fragment,null,n?a.createElement(xt.ZP,null,a.createElement(ot.Z,{className:"float-right text-lg px-1",onClick:f},a.createElement(yt.Z,{icon:_t.g82})),"Contacting about ",a.createElement("b",null,n)):a.createElement(xt.ZP,{variant:"muted"},"Want to learn more about moonrepo? Have questions?"),a.createElement("div",{className:"mt-2"},1===e&&a.createElement("div",{className:"flex justify-between gap-x-1"},a.createElement("div",{className:"w-3/4"},a.createElement("label",{htmlFor:"subject",className:"sr-only"},"Subject"),a.createElement("select",{id:"subject",name:"subject",required:!0,className:"outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans",onChange:g,value:n},a.createElement("option",{value:""}),a.createElement("option",{value:"Consultation"},"Consultation"),a.createElement("option",{value:"Partnership"},"Partnership"),a.createElement("option",{value:"Affiliation"},"Affiliation"))),a.createElement(Et,{disabled:!n,onClick:m})),2===e&&a.createElement("div",{className:"flex justify-between gap-x-1"},a.createElement("div",{className:"w-3/4"},a.createElement("label",{htmlFor:"email",className:"sr-only"},"Email address"),a.createElement("input",{type:"email",name:"email",id:"email",autoComplete:"email",required:!0,className:"appearance-none outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans",placeholder:"Email address",onChange:b,value:r})),a.createElement(Et,{disabled:!y,onClick:m})),3===e&&a.createElement("div",null,a.createElement("textarea",{id:"message",name:"message",required:!0,className:"appearance-none outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 font-sans",placeholder:"Message...",onChange:h}),a.createElement("div",{className:"flex justify-end"},a.createElement(Et,{disabled:!x||l,label:"Send",onClick:v}))),4===e&&a.createElement("div",null,a.createElement(xt.ZP,null,d?"Failed to send message. Please try again.":"Thanks for contacting us! We'll get back to you as soon as possible."))),a.createElement("div",{className:"mt-4 flex justify-end items-start gap-1"},a.createElement("div",null,a.createElement(xt.ZP,{variant:"muted",size:"sm"},"Backed by")),a.createElement("div",null,a.createElement(kt.Z,{height:22}))))}function Ct(e){let{links:t,copyright:n}=e;return a.createElement("footer",{className:"bg-gray-100 dark:bg-slate-600","aria-labelledby":"footer-heading"},a.createElement("h2",{id:"footer-heading",className:"sr-only"},"Footer"),a.createElement("div",{className:"max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"},a.createElement("div",{className:"lg:grid lg:grid-cols-5 lg:gap-3"},a.createElement("div",{className:"grid grid-cols-3 gap-3 lg:col-span-3"},t),a.createElement("div",{className:"mt-4 lg:mt-0 col-span-2"},a.createElement(at.Z,{level:6,transform:"uppercase"},"Contact us"),a.createElement(St,null))),a.createElement("div",{className:"mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"},a.createElement(xt.ZP,{className:"m-0",variant:"muted",size:"sm",as:"div"},n),a.createElement("div",{className:"flex space-x-2"},a.createElement(ot.Z,{href:"https://github.com/moonrepo"},a.createElement("span",{className:"sr-only"},"GitHub"),a.createElement(yt.Z,{icon:vt.zhw})),a.createElement(ot.Z,{href:"https://discord.gg/qCh9MEynv2"},a.createElement("span",{className:"sr-only"},"Discord"),a.createElement(yt.Z,{icon:vt.omb})),a.createElement(ot.Z,{href:"https://twitter.com/tothemoonrepo"},a.createElement("span",{className:"sr-only"},"Twitter"),a.createElement(yt.Z,{icon:vt.mdU}))))))}function Tt(){const{footer:e}=(0,p.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:r}=e;return a.createElement(Ct,{style:r,links:n&&n.length>0&&a.createElement(pt,{links:n}),logo:o&&a.createElement(bt,{logo:o}),copyright:t&&a.createElement(ht,{copyright:t})})}const Pt=a.memo(Tt);var At=n(41763),Nt=n(83457);const Ot=(0,At.Qc)([O.S,f.pl,Nt.OC,Ie.L5,i.VC,Ge.V]);function jt(e){let{children:t}=e;return a.createElement(Ot,null,t)}function Lt(e){let{error:t,tryAgain:n}=e;return a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(g.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),a.createElement("div",{className:"margin-vert--lg"},a.createElement(We.Cw,{onClick:n,className:"button button--primary shadow--lw"})),a.createElement("hr",null),a.createElement("div",{className:"margin-vert--md"},a.createElement(We.aG,{error:t})))))}const Mt="mainWrapper_MB5r";function It(e){const{children:t,noFooter:n,wrapperClassName:u,title:p,description:f}=e;return(0,l.t)(),a.createElement(jt,null,a.createElement(i.d,{title:p,description:f}),a.createElement(d,null),a.createElement(S,null),a.createElement(tt,null),a.createElement("div",{id:s.u,className:(0,o.Z)(c.k.wrapper.main,Mt,u)},a.createElement(r.Z,{fallback:e=>a.createElement(Lt,e)},t)),!n&&a.createElement(Pt,null))}},10898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var a=n(25773),o=n(27378),r=n(81884),i=n(98948),s=n(50353),c=n(20624),l=n(14034);function u(e){let{logo:t,alt:n,imageClassName:a}=e;const r={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=o.createElement(l.Z,{className:t.className,sources:r,height:t.height,width:t.width,alt:n,style:t.style});return a?o.createElement("div",{className:a},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.default)(),{navbar:{title:n,logo:l}}=(0,c.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(l?.href||"/"),g=n?"":t,b=l?.alt??g;return o.createElement(r.default,(0,a.Z)({to:m},f,l?.target&&{target:l.target}),l&&o.createElement(u,{logo:l,alt:b,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},60505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378),o=n(7092);function r(e){let{locale:t,version:n,tag:r}=e;const i=t;return a.createElement(o.Z,null,t&&a.createElement("meta",{name:"docusaurus_locale",content:t}),n&&a.createElement("meta",{name:"docusaurus_version",content:n}),r&&a.createElement("meta",{name:"docusaurus_tag",content:r}),i&&a.createElement("meta",{name:"docsearch:language",content:i}),n&&a.createElement("meta",{name:"docsearch:version",content:n}),r&&a.createElement("meta",{name:"docsearch:docusaurus_tag",content:r}))}},14034:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var a=n(25773),o=n(27378),r=n(37140),i=n(76457),s=n(55421);const c={themedImage:"themedImage_BQGR","themedImage--light":"themedImage--light_HAxW","themedImage--dark":"themedImage--dark_bGx0"};function l(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:l,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,a.Z)({key:e,src:l[e],alt:d,className:(0,r.Z)(c.themedImage,c[`themedImage--${e}`],u)},p)))))}},80376:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var a=n(25773),o=n(27378),r=n(161),i=n(56903);function s(e){let{initialState:t}=e;const[n,a]=(0,o.useState)(t??!1),r=(0,o.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:r}}const c={display:"none",overflow:"hidden",height:"0px"},l={display:"block",overflow:"visible",height:"auto"};function u(e,t){const n=t?c:l;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const r=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??"ease-in-out"}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!r.current)return u(e,n),void(r.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function p(e){if(!r.Z.canUseDOM)return e?c:l}function f(e){let{as:t="div",collapsed:n,children:a,animation:r,onCollapseTransitionEnd:i,className:s,disableSSRStyle:c}=e;const l=(0,o.useRef)(null);return d({collapsibleRef:l,collapsed:n,animation:r}),o.createElement(t,{ref:l,style:c?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(u(l.current,n),i?.(n))},className:s},a)}function m(e){let{collapsed:t,...n}=e;const[r,i]=(0,o.useState)(!t),[s,c]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{r&&c(t)}),[r,t]),r?o.createElement(f,(0,a.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const a=t?m:f;return o.createElement(a,n)}},10:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var a=n(27378),o=n(76457),r=n(71819),i=n(41763),s=n(20624);const c=(0,r.WA)("docusaurus.announcement.dismiss"),l=(0,r.WA)("docusaurus.announcement.id"),u=()=>"true"===c.get(),d=e=>c.set(String(e)),p=a.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,r]=(0,a.useState)((()=>!!t&&u()));(0,a.useEffect)((()=>{r(u())}),[]);const i=(0,a.useCallback)((()=>{d(!0),r(!0)}),[]);return(0,a.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=l.get();"annoucement-bar"===n&&(n="announcement-bar");const a=t!==n;l.set(t),a&&d(!1),!a&&u()||r(!1)}),[e]),(0,a.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return a.createElement(p.Provider,{value:n},t)}function m(){const e=(0,a.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},55421:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>g});var a=n(27378),o=n(161),r=n(41763),i=n(71819),s=n(20624);const c=a.createContext(void 0),l="theme",u=(0,i.WA)(l),d="light",p="dark",f=e=>e===p?p:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[r,i]=(0,a.useState)((e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e))(e));(0,a.useEffect)((()=>{t&&u.del()}),[t]);const c=(0,a.useCallback)((function(t,a){void 0===a&&(a={});const{persist:o=!0}=a;t?(i(t),o&&(e=>{u.set(f(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p:d:e),u.del())}),[n,e]);(0,a.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(r))}),[r]),(0,a.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==l)return;const t=u.get();null!==t&&c(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,c]);const m=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),a=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:c(null)};return e.addListener(a),()=>e.removeListener(a)}),[c,t,n]),(0,a.useMemo)((()=>({colorMode:r,setColorMode:c,get isDarkTheme(){return r===p},setLightTheme(){c(d)},setDarkTheme(){c(p)}})),[r,c])}function g(e){let{children:t}=e;const n=m();return a.createElement(c.Provider,{value:n},t)}function b(){const e=(0,a.useContext)(c);if(null==e)throw new r.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},24453:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>h,Oh:()=>x});var a=n(27378),o=n(62935),r=n(45688),i=n(20624),s=n(45161),c=n(41763),l=n(71819);const u=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,l.WA)(u(e),{persistence:t}).set(n)},p=(e,t)=>(0,l.WA)(u(e),{persistence:t}).get(),f=(e,t)=>{(0,l.WA)(u(e),{persistence:t}).del()};const m=a.createContext(null);function g(){const e=(0,o.useAllDocsData)(),t=(0,i.L)().docs.versionPersistence,n=(0,a.useMemo)((()=>Object.keys(e)),[e]),[r,s]=(0,a.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,a.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:a}=e;function o(e){const t=p(e,n);return a[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[r,(0,a.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function b(e){let{children:t}=e;const n=g();return a.createElement(m.Provider,{value:n},t)}function h(e){let{children:t}=e;return s.cE?a.createElement(b,null,t):a.createElement(a.Fragment,null,t)}function v(){const e=(0,a.useContext)(m);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=r.m);const t=(0,o.useDocsData)(e),[n,i]=v(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,a.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function x(){const e=(0,o.useAllDocsData)(),[t]=v();function n(n){const a=e[n],{preferredVersionName:o}=t[n];return a.versions.find((e=>e.name===o))??null}const a=Object.keys(e);return Object.fromEntries(a.map((e=>[e,n(e)])))}},52095:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>s});var a=n(27378),o=n(41763);const r=Symbol("EmptyContext"),i=a.createContext(r);function s(e){let{children:t,name:n,items:o}=e;const r=(0,a.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return a.createElement(i.Provider,{value:r},t)}function c(){const e=(0,a.useContext)(i);if(e===r)throw new o.i6("DocsSidebarProvider");return e}},25611:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var a=n(27378),o=n(41763);const r=a.createContext(null);function i(e){let{children:t,version:n}=e;return a.createElement(r.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new o.i6("DocsVersionProvider");return e}},85536:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>p});var a=n(27378),o=n(63471),r=n(58357),i=n(30654),s=n(20624),c=n(41763);const l=a.createContext(void 0);function u(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,r.i)(),n=!e&&"mobile"===t,[c,l]=(0,a.useState)(!1);(0,i.Rb)((()=>{if(c)return l(!1),!1}));const u=(0,a.useCallback)((()=>{l((e=>!e))}),[]);return(0,a.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,a.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:c})),[e,n,u,c])}function d(e){let{children:t}=e;const n=u();return a.createElement(l.Provider,{value:n},t)}function p(){const e=a.useContext(l);if(void 0===e)throw new c.i6("NavbarMobileSidebarProvider");return e}},63471:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>c,n2:()=>i});var a=n(27378),o=n(41763);const r=a.createContext(null);function i(e){let{children:t}=e;const n=(0,a.useState)({component:null,props:null});return a.createElement(r.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(r);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const i=(0,a.useContext)(r);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,c=(0,o.Ql)(n);return(0,a.useEffect)((()=>{s({component:t,props:c})}),[s,t,c]),(0,a.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},15530:(e,t,n)=>{"use strict";n.d(t,{P:()=>c,Y:()=>u});var a=n(27378),o=n(41763),r=n(85536),i=n(63471);const s=a.createContext(null);function c(e){let{children:t}=e;const n=function(){const e=(0,r.e)(),t=(0,i.HY)(),[n,s]=(0,a.useState)(!1),c=null!==t.component,l=(0,o.D9)(c);return(0,a.useEffect)((()=>{c&&!l&&s(!0)}),[c,l]),(0,a.useEffect)((()=>{c?e.shown||s(!0):s(!1)}),[e.shown,c]),(0,a.useMemo)((()=>[n,s]),[n])}();return a.createElement(s.Provider,{value:n},t)}function l(e){if(e.component){const t=e.component;return a.createElement(t,e.props)}}function u(){const e=(0,a.useContext)(s);if(!e)throw new o.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,r=(0,a.useCallback)((()=>n(!1)),[n]),c=(0,i.HY)();return(0,a.useMemo)((()=>({shown:t,hide:r,content:l(c)})),[r,c,t])}},82561:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var a=n(27378),o=n(24993),r=n(83457);function i(e){const[t,n]=(0,a.useState)(e),i=(0,a.useRef)(!1),s=(0,a.useRef)(0),c=(0,a.useCallback)((e=>{null!==e&&(s.current=e.getBoundingClientRect().height)}),[]);return(0,r.RF)(((t,a)=>{let{scrollY:o}=t;if(!e)return;if(o<s.current)return void n(!0);if(i.current)return void(i.current=!1);const r=a?.scrollY,c=document.documentElement.scrollHeight-s.current,l=window.innerHeight;r&&o>=r?n(!1):o+l<c&&n(!0)})),(0,o.S)((t=>{if(!e)return;const a=t.location.hash;if(a?document.getElementById(a.substring(1)):void 0)return i.current=!0,void n(!1);n(!0)})),{navbarRef:c,isNavbarVisible:t}}},70174:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>r});var a=n(27378);const o="navigation-with-keyboard";function r(){(0,a.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},37930:(e,t,n)=>{"use strict";n.d(t,{N:()=>o});var a=n(27378);function o(e){void 0===e&&(e=!0),(0,a.useEffect)((()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[e])}},53584:(e,t,n)=>{"use strict";n.d(t,{K:()=>i,M:()=>s});var a=n(27378),o=n(50353),r=n(30654);function i(){return(0,r.Nc)("q")}function s(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,o.default)(),{algolia:{searchPagePath:n}}=t;return(0,a.useCallback)((t=>`${e}${n}?q=${encodeURIComponent(t)}`),[e,n])}},58357:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var a=n(27378),o=n(161);const r="desktop",i="mobile",s="ssr";function c(){return o.Z.canUseDOM?window.innerWidth>996?r:i:s}function l(){const[e,t]=(0,a.useState)((()=>c()));return(0,a.useEffect)((()=>{function e(){t(c())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},75484:(e,t,n)=>{"use strict";n.d(t,{k:()=>a});const a={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},56903:(e,t,n)=>{"use strict";function a(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>a})},45161:(e,t,n)=>{"use strict";n.d(t,{MN:()=>S,Wl:()=>g,_F:()=>v,cE:()=>p,em:()=>m,hI:()=>E,jA:()=>b,lO:()=>_,oz:()=>k,s1:()=>x,vY:()=>w,xz:()=>f});var a=n(27378),o=n(35331),r=n(95473),i=n(62935),s=n(24453),c=n(25611),l=n(52095),u=n(70784),d=n(8862);const p=!!i.useAllDocsData;function f(e){const t=(0,c.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e,t){for(const n of e)if("category"===n.type){if(t(n))return n;const e=m(n.items,t);if(e)return e}}function g(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=g(t);if(e)return e}}}function b(){const{pathname:e}=(0,o.TH)(),t=(0,l.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t);function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||((e,t)=>e.some((e=>v(e,t))))(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:a=!1}=e;const o=[];return function e(t){for(const r of t)if("category"===r.type&&((0,d.Mg)(r.href,n)||e(r.items))||"link"===r.type&&(0,d.Mg)(r.href,n)){return a&&"category"!==r.type||o.unshift(r),!0}return!1}(t),o}function x(){const e=(0,l.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.useActivePlugin)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function _(e){const{activeVersion:t}=(0,i.useActiveDocContext)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.useLatestVersion)(e);return(0,a.useMemo)((()=>(0,u.j)([t,n,o].filter(Boolean))),[t,n,o])}function k(e,t){const n=_(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),a=t.find((t=>t[0]===e));if(!a)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return a[1]}),[e,n])}function w(e,t){const n=_(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),a=t.find((t=>t.id===e));if(!a){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return a}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const a=(0,o.TH)(),i=t.routes,s=i.find((e=>(0,o.LX)(a.pathname,e)));if(!s)return null;const c=s.sidebar,l=c?n.docsSidebars[c]:void 0;return{docElement:(0,r.H)(i),sidebarName:c,sidebarItems:l}}function S(e){return e.filter((e=>"category"!==e.type||!!g(e)))}},19441:(e,t,n)=>{"use strict";n.d(t,{aG:()=>l,Cw:()=>c,QW:()=>u});var a=n(25773),o=n(27378),r=n(99213),i=n(51721);const s="errorBoundaryError_WE6Q";function c(e){return o.createElement("button",(0,a.Z)({type:"button"},e),o.createElement(r.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function l(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return o.createElement("p",{className:s},n)}class u extends o.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},33922:(e,t,n)=>{"use strict";function a(e){return"title"in e[0]}n.d(t,{a:()=>a})},99162:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var a=n(50353);function o(e){const{siteConfig:t}=(0,a.default)(),{title:n,titleDelimiter:o}=t;return e?.trim().length?`${e.trim()} ${o} ${n}`:n}},30654:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>u,Rb:()=>s,_X:()=>l,xL:()=>c});var a=n(27378),o=n(35331),r=n(70644),i=n(41763);function s(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,a.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function c(e){const t=(0,o.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return c((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function u(e){const t=l(e)??"",n=function(){const e=(0,o.k6)();return(0,a.useCallback)(((t,n,a)=>{const o=new URLSearchParams(e.location.search);n?o.set(t,n):o.delete(t),(a?.push?e.push:e.replace)({search:o.toString()})}),[e])}();return[t,(0,a.useCallback)(((t,a)=>{n(e,t,a)}),[n,e])]}},70784:(e,t,n)=>{"use strict";function a(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,a)=>e.findIndex((e=>t(e,n)))!==a))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>a})},1123:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var a=n(27378),o=n(33441),r=n(7092),i=n(66881);function s(){const e=a.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=n(98948),l=n(99162);function u(e){let{title:t,description:n,keywords:o,image:i,children:s}=e;const u=(0,l.p)(t),{withBaseUrl:d}=(0,c.C)(),p=i?d(i,{absolute:!0}):void 0;return a.createElement(r.Z,null,t&&a.createElement("title",null,u),t&&a.createElement("meta",{property:"og:title",content:u}),n&&a.createElement("meta",{name:"description",content:n}),n&&a.createElement("meta",{property:"og:description",content:n}),o&&a.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&a.createElement("meta",{property:"og:image",content:p}),p&&a.createElement("meta",{name:"twitter:image",content:p}),s)}const d=a.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=a.useContext(d),s=(0,o.Z)(i,t);return a.createElement(d.Provider,{value:s},a.createElement(r.Z,null,a.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return a.createElement(p,{className:(0,o.Z)(r,i)},t)}},63211:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,V:()=>c});var a=n(27378),o=n(85536),r=n(63471),i=n(15530);function s(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}function c(e){let{children:t}=e;return a.createElement(r.n2,null,a.createElement(o.M,null,a.createElement(i.P,null,t)))}},41763:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,LI:()=>o,Qc:()=>l,Ql:()=>c,i6:()=>s,zX:()=>r});var a=n(27378);const o=n(161).Z.canUseDOM?a.useLayoutEffect:a.useEffect;function r(e){const t=(0,a.useRef)(e);return o((()=>{t.current=e}),[e]),(0,a.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,a.useRef)();return o((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,a.useMemo)((()=>e),t.flat())}function l(e){return t=>{let{children:n}=t;return a.createElement(a.Fragment,null,e.reduceRight(((e,t)=>a.createElement(t,null,e)),n))}}},61503:(e,t,n)=>{"use strict";function a(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>a})},8862:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var a=n(27378),o=n(76623),r=n(50353);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,r.default)().siteConfig;return(0,a.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function a(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(a)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},83457:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>d,o5:()=>p,sG:()=>l});var a=n(27378),o=n(161),r=n(76457),i=n(41763);const s=a.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,a.useRef)(!0);return(0,a.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return a.createElement(s.Provider,{value:n},t)}function l(){const e=(0,a.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=l(),o=(0,a.useRef)(u()),r=(0,i.zX)(e);(0,a.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();r(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[r,n,...t])}function p(){const e=l(),t=function(){const e=(0,a.useRef)({elem:null,top:0}),t=(0,a.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,a.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const a=t.getBoundingClientRect().top-n;return a&&window.scrollBy({left:0,top:a}),e.current={elem:null,top:0},{restored:0!==a}}),[]);return(0,a.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,a.useRef)(void 0),o=(0,a.useCallback)((a=>{t.save(a),e.disableScrollEvents(),n.current=()=>{const{restored:a}=t.restore();if(n.current=void 0,a){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,a.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function f(){const e=(0,a.useRef)(null),t=(0,r.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function a(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(a),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},13149:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>c,os:()=>s});var a=n(62935),o=n(50353),r=n(24453);const i="default";function s(e,t){return`docs-${e}-${t}`}function c(){const{i18n:e}=(0,o.default)(),t=(0,a.useAllDocsData)(),n=(0,a.useActivePluginAndVersion)(),c=(0,r.Oh)();const l=[i,...Object.keys(t).map((function(e){const a=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=c[e],r=t[e].versions.find((e=>e.isLast));return s(e,(a??o??r).name)}))];return{locale:e.currentLocale,tags:l}}},39360:(e,t,n)=>{"use strict";n.d(t,{l:()=>p,u:()=>c});var a=n(25773),o=n(27378),r=n(35331),i=n(99213),s=n(24993);const c="__docusaurus_skipToContent_fallback";function l(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function u(){const e=(0,o.useRef)(null),{action:t}=(0,r.k6)(),n=(0,o.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(c);t&&l(t)}),[]);return(0,s.S)((n=>{let{location:a}=n;e.current&&!a.hash&&"PUSH"===t&&l(e.current)})),{containerRef:e,onClick:n}}const d=(0,i.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function p(e){const t=e.children??d,{containerRef:n,onClick:r}=u();return o.createElement("div",{ref:n,role:"region","aria-label":d},o.createElement("a",(0,a.Z)({},e,{href:`#${c}`,onClick:r}),t))}},71819:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u,_f:()=>p});var a=n(27378),o=n(70644);const r="localStorage";function i(e){let{key:t,oldValue:n,newValue:a,storage:o}=e;if(n===a)return;const r=document.createEvent("StorageEvent");r.initStorageEvent("storage",!1,!1,t,n,a,window.location.href,o),window.dispatchEvent(r)}function s(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,c||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),c=!0),null}var t}let c=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=s(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const a=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:a,newValue:t,storage:n})}catch(a){console.error(`Docusaurus storage error, can't set ${e}=${t}`,a)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const a=a=>{a.storageArea===n&&a.key===e&&t(a)};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)}catch(a){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,a),()=>{}}}}}function d(e,t){const n=(0,a.useRef)((()=>null===e?l:u(e,t))).current(),r=(0,a.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(r,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}function p(e){void 0===e&&(e=r);const t=s(e);if(!t)return[];const n=[];for(let a=0;a<t.length;a+=1){const e=t.key(a);null!==e&&n.push(e)}return n}},43714:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var a=n(50353),o=n(35331),r=n(51721);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,a.default)(),{pathname:c}=(0,o.TH)(),l=(0,r.applyTrailingSlash)(c,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=l.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},43511:(e,t,n)=>{"use strict";n.d(t,{b:()=>r});var a=n(35331),o=n(50353);function r(){const{siteConfig:{baseUrl:e}}=(0,o.default)(),{pathname:t}=(0,a.TH)();return t.replace(e,"/")}},24993:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var a=n(27378),o=n(35331),r=n(41763);function i(e){const t=(0,o.TH)(),n=(0,r.D9)(t),i=(0,r.zX)(e);(0,a.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},20624:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var a=n(50353);function o(){return(0,a.default)().siteConfig.themeConfig}},80632:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var a=n(50353);function o(){const{siteConfig:{themeConfig:e}}=(0,a.default)();return e}},42473:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var a=n(27378),o=n(61503),r=n(98948),i=n(80632);function s(){const{withBaseUrl:e}=(0,r.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,a.useCallback)((a=>{const r=new URL(a);if((0,o.F)(t,r.href))return a;const i=`${r.pathname+r.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},42520:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:a}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),r="/"===o||o===a?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,r)}},86102:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},51721:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(42520);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return a(o).default}});var r=n(86102);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return r.getErrorCausalChain}})},76623:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(27378),o=n(25773),r=n(51237),i=n.n(r),s=n(16887);const c={"0034bcd6":[()=>Promise.all([n.e(532),n.e(780),n.e(7424)]).then(n.bind(n,88297)),"@site/docs/guides/examples/sveltekit.mdx",88297],"00568285":[()=>n.e(4470).then(n.t.bind(n,24422,19)),"~docs/default/category-docs-docs-category-sync-750.json",24422],"016d6d21":[()=>n.e(2056).then(n.t.bind(n,93105,19)),"~blog/default/blog-tags-deno-02d-list.json",93105],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,79898)),"@theme/BlogTagsListPage",79898],"01b81367":[()=>n.e(601).then(n.t.bind(n,24469,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"02401b2b":[()=>Promise.all([n.e(532),n.e(5027)]).then(n.bind(n,84851)),"@site/docs/guides/javascript/deno-handbook.mdx",84851],"03193cc0":[()=>Promise.all([n.e(532),n.e(780),n.e(3363)]).then(n.bind(n,21311)),"@site/docs/guides/examples/typescript.mdx",21311],"046e2194":[()=>Promise.all([n.e(532),n.e(780),n.e(8667)]).then(n.bind(n,96841)),"@site/docs/install.mdx",96841],"04d8c43e":[()=>n.e(6551).then(n.t.bind(n,48632,19)),"~blog/default/blog-tags-global-167-list.json",48632],"0627e785":[()=>n.e(4824).then(n.bind(n,33440)),"@site/docs/proto/config.mdx",33440],"062a1a43":[()=>n.e(4403).then(n.t.bind(n,88217,19)),"~docs/default/tag-docs-tags-git-hooks-0f1.json",88217],"0681d8e1":[()=>n.e(8357).then(n.t.bind(n,99663,19)),"~blog/default/blog-tags-version-acf.json",99663],"0684a904":[()=>n.e(670).then(n.bind(n,11259)),"@site/blog/2023-05-23_proto-v0.9.mdx",11259],"068b8e98":[()=>n.e(5666).then(n.bind(n,83260)),"@site/docs/commands/ci.mdx",83260],"073e718f":[()=>n.e(2656).then(n.bind(n,29759)),"@site/docs/guides/root-project.mdx",29759],"088b3228":[()=>n.e(2882).then(n.t.bind(n,596,19)),"~blog/default/blog-tags-typescript-2e3-list.json",596],"09d7020f":[()=>n.e(959).then(n.t.bind(n,1150,19)),"~docs/default/tag-docs-tags-code-40a.json",1150],"0ae21139":[()=>n.e(4788).then(n.t.bind(n,36585,19)),"~blog/default/blog-tags-projects-924-list.json",36585],"0b1dc2cd":[()=>n.e(5971).then(n.t.bind(n,51973,19)),"~docs/default/category-docs-docs-category-query-cf5.json",51973],"0b289f4d":[()=>Promise.all([n.e(532),n.e(1575)]).then(n.bind(n,239)),"@site/blog/2022-10-21_v0.17.mdx",239],"0c7f16c1":[()=>n.e(6297).then(n.t.bind(n,43871,19)),"~docs/default/tag-docs-tags-mql-730.json",43871],"0cb5fac6":[()=>Promise.all([n.e(532),n.e(780),n.e(1719)]).then(n.bind(n,11911)),"@site/docs/guides/examples/storybook.mdx",11911],"0cd40d9b":[()=>Promise.all([n.e(532),n.e(780),n.e(1175)]).then(n.bind(n,53488)),"@site/docs/guides/examples/remix.mdx",53488],"0e22a4b2":[()=>n.e(1558).then(n.t.bind(n,60335,19)),"~blog/default/blog-tags-projects-924.json",60335],"0e736169":[()=>n.e(3972).then(n.bind(n,95650)),"@site/blog/2023-05-15_moon-v1.6.mdx?truncated=true",95650],"0f8a713b":[()=>n.e(6759).then(n.bind(n,98197)),"@site/docs/commands/generate.mdx",98197],"110403ef":[()=>n.e(3443).then(n.t.bind(n,85687,19)),"~blog/default/blog-tags-project-34b.json",85687],"11ce4159":[()=>n.e(1531).then(n.t.bind(n,75034,19)),"~blog/default/blog-page-5-c6b.json",75034],"1202c0b0":[()=>n.e(9673).then(n.t.bind(n,96822,19)),"~blog/default/blog-tags-hash-686-list.json",96822],"125698e9":[()=>n.e(7037).then(n.t.bind(n,4490,19)),"~blog/default/blog-tags-tokens-6f1-list.json",4490],"128a5f34":[()=>n.e(5244).then(n.t.bind(n,49877,19)),"~blog/default/blog-tags-cache-6ff.json",49877],"1365e0a6":[()=>n.e(9917).then(n.bind(n,38126)),"@site/blog/2023-05-08_moon-v1.5.mdx",38126],"140321b2":[()=>n.e(175).then(n.t.bind(n,89006,19)),"~blog/default/blog-tags-detect-153-list.json",89006],"146ca1ad":[()=>n.e(2753).then(n.bind(n,89478)),"@site/docs/commands/query/tasks.mdx",89478],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,80777)),"@theme/DocCategoryGeneratedIndexPage",80777],"14f81d84":[()=>Promise.all([n.e(532),n.e(2463)]).then(n.bind(n,81793)),"@site/blog/2023-01-30_v0.23.mdx?truncated=true",81793],"14f9b0f2":[()=>n.e(433).then(n.t.bind(n,5455,19)),"~blog/default/blog-tags-lang-462.json",5455],"151c652b":[()=>n.e(7394).then(n.t.bind(n,7356,19)),"~blog/default/blog-tags-globals-7ef-list.json",7356],"15a4ce61":[()=>n.e(2129).then(n.t.bind(n,86596,19)),"~blog/default/blog-tags-railway-ade-list.json",86596],"163fb342":[()=>n.e(6371).then(n.bind(n,80678)),"@site/docs/commands/upgrade.mdx",80678],"16ea2389":[()=>n.e(4414).then(n.t.bind(n,91511,19)),"~blog/default/blog-tags-source-541-list.json",91511],"170d6c86":[()=>n.e(2839).then(n.t.bind(n,56832,19)),"~blog/default/blog-tags-roadmap-d2e.json",56832],"1740b646":[()=>n.e(7448).then(n.t.bind(n,17832,19)),"~blog/default/blog-tags-logging-c85-list.json",17832],17896441:[()=>Promise.all([n.e(532),n.e(780),n.e(5730),n.e(7918)]).then(n.bind(n,74764)),"@theme/DocItem",74764],"17ae22f4":[()=>n.e(6352).then(n.bind(n,64851)),"@site/blog/2023-09-11_proto-v0.17.mdx",64851],"17cacc08":[()=>Promise.all([n.e(532),n.e(8893)]).then(n.bind(n,28137)),"@site/docs/config/workspace.mdx",28137],"18dd62e9":[()=>n.e(6285).then(n.t.bind(n,33310,19)),"~blog/default/blog-tags-vscode-a6c-list.json",33310],"1910946c":[()=>n.e(4873).then(n.t.bind(n,87136,19)),"~blog/default/blog-tags-deno-02d.json",87136],"193b481a":[()=>Promise.all([n.e(1947),n.e(9662)]).then(n.bind(n,45655)),"@site/src/pages/moon.tsx",45655],"195293b6":[()=>Promise.all([n.e(532),n.e(780),n.e(2484)]).then(n.bind(n,78032)),"@site/docs/guides/examples/astro.mdx",78032],"19ca9089":[()=>n.e(6388).then(n.t.bind(n,72768,19)),"~blog/default/blog-tags-dependency-e04-list.json",72768],"1a2b669c":[()=>n.e(7999).then(n.t.bind(n,85824,19)),"~blog/default/blog-tags-proto-page-2-892-list.json",85824],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,11895)),"@theme/SearchPage",11895],"1aa28b52":[()=>n.e(8450).then(n.bind(n,25702)),"@site/docs/commands/overview.mdx",25702],"1aebc10b":[()=>n.e(9959).then(n.bind(n,91981)),"@site/blog/2023-03-31_proto-v0.4.mdx",91981],"1b469a71":[()=>n.e(7451).then(n.t.bind(n,457,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/packages-current.json",457],"1badf320":[()=>n.e(4068).then(n.bind(n,57500)),"@site/blog/2023-04-06_proto-v0.5.mdx?truncated=true",57500],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,72214)),"@theme/DocPage",72214],"1cb65c7d":[()=>Promise.all([n.e(532),n.e(780),n.e(1947),n.e(3168)]).then(n.bind(n,79090)),"@site/src/pages/proto.tsx",79090],"1cbc9cf3":[()=>n.e(9219).then(n.t.bind(n,4127,19)),"~blog/default/blog-tags-http-5fb.json",4127],"1d14c2f4":[()=>n.e(3811).then(n.t.bind(n,34198,19)),"~blog/default/blog-tags-npm-f95.json",34198],"1df93b7f":[()=>Promise.all([n.e(1947),n.e(3237)]).then(n.bind(n,75278)),"@site/src/pages/index.tsx",75278],"1e070f27":[()=>n.e(2571).then(n.t.bind(n,91786,19)),"~blog/default/blog-tags-quality-be6-list.json",91786],"1e542d68":[()=>n.e(7278).then(n.t.bind(n,45313,19)),"~blog/default/blog-tags-log-760-list.json",45313],"1e76467f":[()=>n.e(6939).then(n.bind(n,951)),"@site/docs/proto/commands/list-global.mdx",951],"1e90ea6d":[()=>n.e(8428).then(n.t.bind(n,1394,19)),"~blog/default/blog-tags-vcs-ff1-list.json",1394],"202af6b6":[()=>n.e(2801).then(n.t.bind(n,89338,19)),"~blog/default/blog-tags-hash-686.json",89338],"2048b789":[()=>n.e(6861).then(n.bind(n,62031)),"@site/blog/2023-03-15_proto-v0.3.mdx?truncated=true",62031],"204dd830":[()=>Promise.all([n.e(532),n.e(2391)]).then(n.bind(n,53293)),"@site/blog/2023-02-27_v0.25.mdx?truncated=true",53293],"2172420b":[()=>n.e(2441).then(n.t.bind(n,16728,19)),"~blog/default/blog-tags-generator-109-list.json",16728],"22e78681":[()=>n.e(4825).then(n.bind(n,46071)),"@site/blog/2023-01-16_v0.22.mdx",46071],"22eddac1":[()=>n.e(5950).then(n.bind(n,3697)),"@site/blog/2023-04-21_proto-v0.7.mdx",3697],"232c92ba":[()=>n.e(6974).then(n.t.bind(n,12725,19)),"~blog/default/blog-tags-python-667.json",12725],"23ef67df":[()=>n.e(4247).then(n.bind(n,97281)),"@site/blog/2023-09-18_proto-v0.18.mdx?truncated=true",97281],"24556f49":[()=>n.e(744).then(n.bind(n,21721)),"@site/docs/concepts/file-pattern.mdx",21721],"245d4974":[()=>n.e(3733).then(n.bind(n,39016)),"@site/blog/2023-03-27_moon-v1.0.mdx",39016],"2497986c":[()=>n.e(8114).then(n.t.bind(n,80674,19)),"~blog/default/blog-tags-plugin-95c-list.json",80674],"24a07a83":[()=>n.e(4871).then(n.t.bind(n,7222,19)),"~docs/default/tag-docs-tags-generator-e43.json",7222],"24adbf31":[()=>n.e(3160).then(n.t.bind(n,57059,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/options.json",57059],"250d5d50":[()=>n.e(8007).then(n.t.bind(n,69537,19)),"~blog/default/blog-tags-tier-6c7-list.json",69537],"2573a9a7":[()=>n.e(8195).then(n.t.bind(n,78526,19)),"~blog/default/blog-tags-registry-d31-list.json",78526],26419218:[()=>n.e(2865).then(n.t.bind(n,52770,19)),"~blog/default/blog-tags-platform-9d7-list.json",52770],"271a7b09":[()=>n.e(808).then(n.t.bind(n,91428,19)),"~blog/default/blog-tags-wasm-a9b-list.json",91428],"2804bc6d":[()=>n.e(8670).then(n.bind(n,11430)),"@site/blog/2023-04-24_moon-v1.3.mdx?truncated=true",11430],"28508d4c":[()=>n.e(1816).then(n.bind(n,27833)),"@site/blog/2023-04-21_proto-v0.7.mdx?truncated=true",27833],"2994c7d6":[()=>Promise.all([n.e(532),n.e(3088)]).then(n.bind(n,72183)),"@site/blog/2023-01-30_v0.23.mdx",72183],"2adc0ba4":[()=>n.e(731).then(n.t.bind(n,71365,19)),"~blog/default/blog-tags-rust-0c9-list.json",71365],"2b3490d9":[()=>n.e(9200).then(n.t.bind(n,16019,19)),"~docs/default/tag-docs-tags-query-90d.json",16019],"2bd8a6cf":[()=>n.e(7143).then(n.t.bind(n,57514,19)),"~blog/default/blog-tags-vcs-ff1.json",57514],"2c114e85":[()=>n.e(8663).then(n.bind(n,30560)),"@site/docs/commands/project.mdx",30560],"2cd5cbb6":[()=>n.e(2074).then(n.bind(n,24674)),"@site/blog/2022-10-06_v0.16.mdx?truncated=true",24674],"2d15743f":[()=>n.e(7941).then(n.bind(n,31462)),"@site/docs/guides/offline-mode.mdx",31462],"2d92dfb9":[()=>n.e(7690).then(n.t.bind(n,99010,19)),"~blog/default/blog-tags-rust-0c9.json",99010],"2df21221":[()=>n.e(1909).then(n.t.bind(n,43765,19)),"~blog/default/blog-tags-runner-f5a-list.json",43765],"2dffafe2":[()=>Promise.all([n.e(532),n.e(9631)]).then(n.bind(n,47295)),"@site/docs/guides/javascript/node-handbook.mdx",47295],"2e1ef406":[()=>n.e(1665).then(n.bind(n,65614)),"@site/docs/proto/commands/remove-plugin.mdx",65614],"2e4722bd":[()=>n.e(5847).then(n.bind(n,1480)),"@site/blog/2023-04-17_moon-v1.2.mdx",1480],"2eaf3a2f":[()=>n.e(5758).then(n.bind(n,23426)),"@site/blog/2023-06-25_proto-v0.11.mdx",23426],"2ed8359a":[()=>n.e(2121).then(n.bind(n,38237)),"@site/docs/concepts/toolchain.mdx",38237],"2fafdb99":[()=>n.e(464).then(n.bind(n,52226)),"@site/blog/2023-07-21_proto-v0.13.mdx",52226],"303db6c1":[()=>Promise.all([n.e(532),n.e(780),n.e(6065)]).then(n.bind(n,75453)),"@site/docs/guides/examples/packemon.mdx",75453],"318f6953":[()=>n.e(3774).then(n.bind(n,57645)),"@site/docs/commands/setup.mdx",57645],"31fff4a5":[()=>n.e(4817).then(n.t.bind(n,92052,19)),"~blog/default/blog-tags-action-340-list.json",92052],32632728:[()=>n.e(4672).then(n.t.bind(n,18507,19)),"~blog/default/blog-tags-globals-7ef.json",18507],"3353503a":[()=>n.e(27).then(n.t.bind(n,63572,19)),"~blog/default/blog-tags-wasm-a9b.json",63572],"33d935e4":[()=>n.e(3523).then(n.t.bind(n,81471,19)),"~blog/default/blog-tags-roadmap-d2e-list.json",81471],"350ea002":[()=>n.e(7889).then(n.t.bind(n,40387,19)),"~docs/default/tag-docs-tags-codeowners-3c5.json",40387],"351d319b":[()=>n.e(5084).then(n.bind(n,36522)),"@site/docs/commands/action-graph.mdx",36522],"357f2143":[()=>n.e(5129).then(n.bind(n,50271)),"@site/docs/commands/sync/hooks.mdx",50271],36027025:[()=>n.e(8129).then(n.bind(n,98049)),"@site/docs/guides/debug-task.mdx",98049],"365a10b6":[()=>n.e(4067).then(n.t.bind(n,18476,19)),"~blog/default/blog-tags-cache-6ff-list.json",18476],"3691c6ec":[()=>n.e(846).then(n.t.bind(n,42461,19)),"~blog/default/blog-tags-config-2d7-list.json",42461],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,84889)),"@theme/DocTagsListPage",84889],"376f2f8c":[()=>n.e(8444).then(n.t.bind(n,81327,19)),"~blog/default/blog-tags-remote-cache-1d2.json",81327],"37e4cb73":[()=>n.e(4488).then(n.bind(n,96154)),"@site/blog/2023-09-29_proto-v0.19.mdx?truncated=true",96154],"39a2c297":[()=>n.e(7756).then(n.bind(n,53257)),"@site/blog/2023-07-07_proto-v0.12.mdx",53257],"39b245d7":[()=>n.e(1042).then(n.bind(n,7196)),"@site/docs/guides/vcs-hooks.mdx",7196],"3b568f5a":[()=>n.e(1756).then(n.t.bind(n,33759,19)),"~blog/default/blog-tags-pin-fa7-list.json",33759],"3c3b6fb9":[()=>n.e(6795).then(n.t.bind(n,20104,19)),"~blog/default/blog-tags-survey-f63-list.json",20104],"3d0b0327":[()=>n.e(4969).then(n.t.bind(n,89035,19)),"~blog/default/blog-tags-hasher-783.json",89035],"3d4b58f3":[()=>n.e(9094).then(n.t.bind(n,7579,19)),"~docs/default/tag-docs-tags-template-df7.json",7579],"3db5b877":[()=>n.e(252).then(n.t.bind(n,19354,19)),"~blog/default/blog-tags-proto-page-3-5b6.json",19354],"3db947d3":[()=>n.e(7265).then(n.t.bind(n,2993,19)),"~blog/default/blog-tags-project-graph-b9c.json",2993],"3dc68565":[()=>n.e(7566).then(n.bind(n,2502)),"@site/docs/concepts/token.mdx",2502],"3df11149":[()=>n.e(9015).then(n.bind(n,35645)),"@site/docs/commands/migrate/from-turborepo.mdx",35645],"3e1aa1b6":[()=>n.e(6051).then(n.t.bind(n,46540,19)),"~blog/default/blog-tags-init-e2a-list.json",46540],"3e7d7789":[()=>Promise.all([n.e(532),n.e(780),n.e(5730),n.e(9926),n.e(7279),n.e(2392),n.e(2108)]).then(n.t.bind(n,32392,23)),"/home/runner/work/moon/moon/node_modules/docusaurus-plugin-typedoc-api/lib/components/ApiItem.js",32392],"3f2d0a0e":[()=>n.e(6336).then(n.bind(n,41510)),"@site/blog/2022-09-13_v0.14.mdx?truncated=true",41510],"3f5148d4":[()=>n.e(9754).then(n.bind(n,82718)),"@site/docs/concepts/task.mdx",82718],"3f885d22":[()=>n.e(1684).then(n.bind(n,24053)),"@site/blog/2023-03-15_proto-v0.3.mdx",24053],"3fc19409":[()=>n.e(735).then(n.t.bind(n,54867,19)),"~blog/default/blog-tags-schema-251-list.json",54867],"405d593f":[()=>n.e(1812).then(n.bind(n,77565)),"@site/docs/cheat-sheet.mdx",77565],"409da100":[()=>n.e(1).then(n.t.bind(n,37656,19)),"~blog/default/blog-tags-outdated-17a-list.json",37656],"40c69ef1":[()=>n.e(3869).then(n.t.bind(n,97754,19)),"~blog/default/blog-tags-moonbase-527.json",97754],"413318e8":[()=>n.e(3508).then(n.bind(n,14821)),"@site/docs/proto/commands/clean.mdx",14821],"4178efb8":[()=>Promise.all([n.e(532),n.e(780),n.e(537)]).then(n.bind(n,11690)),"@site/docs/proto/tools.mdx",11690],"423a0e62":[()=>n.e(6167).then(n.t.bind(n,94213,19)),"~blog/default/blog-tags-tokens-6f1.json",94213],"42611ca7":[()=>n.e(6144).then(n.bind(n,45964)),"@site/blog/2023-06-12_moon-v1.8.mdx?truncated=true",45964],"427e2c3d":[()=>n.e(6836).then(n.bind(n,13105)),"@site/blog/2023-07-31_moon-v1.11.mdx?truncated=true",13105],"43bdf210":[()=>n.e(5379).then(n.bind(n,85310)),"@site/blog/2023-01-04_2023-roadmap.mdx?truncated=true",85310],"43dc46d9":[()=>n.e(6370).then(n.t.bind(n,4799,19)),"~blog/default/blog-tags-qol-753.json",4799],"44183a86":[()=>n.e(8149).then(n.t.bind(n,69862,19)),"~blog/default/blog-tags-ci-5d6-list.json",69862],"44ac4dbb":[()=>n.e(7142).then(n.t.bind(n,90399,19)),"~blog/default/blog-page-6-772.json",90399],"450b14c3":[()=>n.e(4979).then(n.t.bind(n,22109,19)),"~blog/default/blog-tags-local-757-list.json",22109],"459b1c5c":[()=>n.e(1396).then(n.t.bind(n,55145,19)),"~blog/default/blog-tags-global-167.json",55145],46561613:[()=>n.e(2636).then(n.t.bind(n,64689,19)),"~blog/default/blog-tags-runner-f5a.json",64689],"4665933c":[()=>n.e(5924).then(n.bind(n,61664)),"@site/blog/2022-11-14_v0.19.mdx",61664],"479321cf":[()=>n.e(2454).then(n.t.bind(n,9807,19)),"~blog/default/blog-tags-git-b15-list.json",9807],"47b3b041":[()=>n.e(824).then(n.t.bind(n,55691,19)),"~blog/default/blog-tags-shim-887-list.json",55691],"488a99ce":[()=>n.e(2258).then(n.bind(n,74889)),"@site/docs/guides/codegen.mdx",74889],"48b0f434":[()=>n.e(5867).then(n.t.bind(n,81755,19)),"~blog/default/blog-tags-github-f68-list.json",81755],"4931a616":[()=>Promise.all([n.e(532),n.e(8529)]).then(n.bind(n,88497)),"@site/blog/2023-02-13_v0.24.mdx",88497],"49af4b98":[()=>n.e(7217).then(n.t.bind(n,44468,19)),"~blog/default/blog-tags-language-ef0.json",44468],"49b772d3":[()=>Promise.all([n.e(532),n.e(6458)]).then(n.bind(n,55835)),"@site/docs/guides/rust/handbook.mdx",55835],"4a1ab9c8":[()=>n.e(7008).then(n.t.bind(n,59202,19)),"~docs/default/category-docs-docs-category-commands-733.json",59202],"4a3d03f6":[()=>n.e(3884).then(n.t.bind(n,65585,19)),"~docs/default/tag-docs-tags-owners-6d9.json",65585],"4aa262b7":[()=>n.e(6897).then(n.bind(n,93365)),"@site/blog/2023-05-30_moon-v1.7.mdx",93365],"4ab2bb95":[()=>n.e(6282).then(n.t.bind(n,27592,19)),"~blog/default/blog-tags-local-757.json",27592],"4b8535eb":[()=>n.e(612).then(n.t.bind(n,1360,19)),"~blog/default/blog-tags-tier-6c7.json",1360],"4bddfbdb":[()=>n.e(5437).then(n.t.bind(n,26325,19)),"~blog/default/blog-tags-vscode-a6c.json",26325],"4c2d8fdb":[()=>n.e(1148).then(n.t.bind(n,81467,19)),"~blog/default/blog-tags-npm-f95-list.json",81467],"4c8cef38":[()=>n.e(1126).then(n.bind(n,11126)),"@site/blog/2022-09-01_v0.13.mdx?truncated=true",11126],"4d66ab66":[()=>n.e(2293).then(n.bind(n,88612)),"@site/docs/proto/commands/install-global.mdx",88612],"4d69ebec":[()=>n.e(6480).then(n.bind(n,41723)),"@site/blog/2023-10-09_moon-v1.15.mdx?truncated=true",41723],"4ddbfcdc":[()=>n.e(6758).then(n.bind(n,17078)),"@site/blog/2023-09-04_proto-v0.16.mdx",17078],"4e9707d9":[()=>n.e(8159).then(n.t.bind(n,24556,19)),"~docs/default/category-docs-guides-category-nodejs-examples-09d.json",24556],"4e986fc6":[()=>Promise.all([n.e(532),n.e(8233)]).then(n.bind(n,92969)),"@site/blog/2023-03-13_v0.26.mdx?truncated=true",92969],"4ec8a4a9":[()=>n.e(818).then(n.bind(n,44501)),"@site/docs/config/project.mdx",44501],"4f0c5301":[()=>n.e(6361).then(n.t.bind(n,32535,19)),"~blog/default/blog-tags-code-452.json",32535],"4fa82ff8":[()=>Promise.all([n.e(9262),n.e(9769)]).then(n.bind(n,23706)),"@site/docs/how-it-works/languages.mdx",23706],"4fd1aaa1":[()=>n.e(6842).then(n.t.bind(n,29340,19)),"~blog/default/blog-tags-config-2d7.json",29340],"51985ffa":[()=>Promise.all([n.e(532),n.e(9926),n.e(6353)]).then(n.t.bind(n,51739,23)),"/home/runner/work/moon/moon/node_modules/docusaurus-plugin-typedoc-api/lib/components/ApiIndex.js",51739],"51ada3e3":[()=>n.e(1294).then(n.bind(n,80144)),"@site/blog/2023-07-21_proto-v0.13.mdx?truncated=true",80144],"53df8e83":[()=>n.e(3439).then(n.bind(n,67887)),"@site/blog/2022-11-21_typescript-monorepo.mdx?truncated=true",67887],"54024cf2":[()=>n.e(1783).then(n.t.bind(n,54712,19)),"~blog/default/blog-tags-node-4f7-list.json",54712],"5419aa43":[()=>n.e(8914).then(n.t.bind(n,12349,19)),"~blog/default/blog-tags-migrate-aaf-list.json",12349],"54350ada":[()=>n.e(6154).then(n.bind(n,62265)),"@site/blog/2023-08-23_proto-v0.15.mdx",62265],"54eec65a":[()=>n.e(984).then(n.t.bind(n,73757,19)),"~blog/default/blog-tags-project-34b-list.json",73757],"5534fb85":[()=>n.e(3238).then(n.t.bind(n,26577,19)),"~blog/default/blog-tags-log-760.json",26577],"5552634a":[()=>n.e(9719).then(n.bind(n,70978)),"@site/docs/proto/commands/uninstall-global.mdx",70978],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,88070,19)),"~docs/default/tags-list-current-prop-15a.json",88070],"5613e7cf":[()=>n.e(4492).then(n.bind(n,41560)),"@site/blog/2023-06-26_moon-v1.9.mdx?truncated=true",41560],"56a06382":[()=>Promise.all([n.e(532),n.e(780),n.e(5091)]).then(n.bind(n,55210)),"@site/docs/guides/examples/next.mdx",55210],"5794c75f":[()=>n.e(3210).then(n.t.bind(n,23756,19)),"~blog/default/blog-tags-dep-graph-b83.json",23756],"57bd32c7":[()=>Promise.all([n.e(532),n.e(5911)]).then(n.bind(n,96570)),"@site/docs/create-project.mdx",96570],"59abedb6":[()=>n.e(632).then(n.t.bind(n,48381,19)),"~blog/default/blog-tags-index-96c-list.json",48381],"5a3a719f":[()=>n.e(3109).then(n.t.bind(n,99402,19)),"~blog/default/blog-tags-canary-b38.json",99402],"5b4d43ff":[()=>n.e(3058).then(n.t.bind(n,92095,19)),"~blog/default/blog-tags-source-541.json",92095],"5c653e8d":[()=>n.e(6256).then(n.bind(n,80251)),"@site/blog/2023-01-04_2023-roadmap.mdx",80251],"5cde4d5c":[()=>n.e(8496).then(n.t.bind(n,31056,19)),"~blog/default/blog-tags-env-vars-f85-list.json",31056],"5d48ec89":[()=>n.e(1303).then(n.bind(n,3852)),"@site/blog/2022-12-19_v0.21.mdx",3852],"5e371f0f":[()=>n.e(2945).then(n.bind(n,40657)),"@site/docs/proto/commands/outdated.mdx",40657],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f3507b2":[()=>Promise.all([n.e(532),n.e(780),n.e(3986)]).then(n.bind(n,64701)),"@site/docs/guides/examples/solid.mdx",64701],"600433a8":[()=>n.e(7930).then(n.t.bind(n,10952,19)),"~docs/default/category-docs-docs-category-migrate-35b.json",10952],"60262e21":[()=>n.e(727).then(n.t.bind(n,99027,19)),"~blog/default/blog-tags-git-b15.json",99027],"60fa46e1":[()=>n.e(4043).then(n.bind(n,23574)),"@site/blog/2023-04-03_moon-v1.1.mdx",23574],61486960:[()=>n.e(8869).then(n.bind(n,78708)),"@site/blog/2023-02-08_moonbase.mdx",78708],"6196de5a":[()=>n.e(8696).then(n.t.bind(n,87428,19)),"~blog/default/blog-tags-migrate-aaf.json",87428],"620e72fa":[()=>n.e(368).then(n.t.bind(n,16067,19)),"~blog/default/blog-tags-moonbase-527-list.json",16067],"626ef9ce":[()=>n.e(2080).then(n.bind(n,42729)),"@site/docs/commands/check.mdx",42729],"63243ad1":[()=>n.e(7594).then(n.bind(n,79835)),"/home/runner/work/moon/moon/packages/report/README.md",79835],"63aeb80b":[()=>n.e(7418).then(n.t.bind(n,91015,19)),"~blog/default/blog-tags-language-ef0-list.json",91015],66222453:[()=>n.e(6500).then(n.t.bind(n,69376,19)),"~blog/default/blog-tags-canary-b38-list.json",69376],"66926af2":[()=>n.e(2287).then(n.bind(n,71798)),"@site/blog/2023-04-13_proto-v0.6.mdx?truncated=true",71798],"66a08410":[()=>n.e(3062).then(n.t.bind(n,59929,19)),"~docs/default/tag-docs-tags-lang-e70.json",59929],"676566fe":[()=>n.e(8876).then(n.t.bind(n,7133,19)),"~blog/default/blog-tags-hooks-29a-list.json",7133],"679bd524":[()=>n.e(4252).then(n.t.bind(n,60604,19)),"~blog/default/blog-tags-qol-753-list.json",60604],"686e1776":[()=>n.e(323).then(n.bind(n,63095)),"@site/docs/commands/clean.mdx",63095],"6875c492":[()=>Promise.all([n.e(532),n.e(780),n.e(5730),n.e(6432),n.e(8610)]).then(n.bind(n,41071)),"@theme/BlogTagsPostsPage",41071],"688193a4":[()=>n.e(9201).then(n.t.bind(n,67575,19)),"~blog/default/blog-tags-registry-d31.json",67575],"68d17c71":[()=>n.e(5425).then(n.bind(n,67107)),"@site/blog/2023-10-09_moon-v1.15.mdx",67107],"69bc0e2c":[()=>n.e(4752).then(n.bind(n,50455)),"@site/docs/proto/commands/add-plugin.mdx",50455],"69c95af3":[()=>n.e(7363).then(n.bind(n,88819)),"@site/docs/commands/completions.mdx",88819],"69e0bfe1":[()=>n.e(5029).then(n.t.bind(n,30076,19)),"~blog/default/blog-tags-proto-page-3-5b6-list.json",30076],"69ea3d78":[()=>n.e(6095).then(n.t.bind(n,73762,19)),"~blog/default/blog-tags-code-452-list.json",73762],"6b50e60a":[()=>n.e(4268).then(n.bind(n,37404)),"@site/docs/terminology.md",37404],"6be7ee83":[()=>n.e(9197).then(n.bind(n,41150)),"@site/blog/2023-02-08_moonbase.mdx?truncated=true",41150],"6c24c6c6":[()=>Promise.all([n.e(532),n.e(8026)]).then(n.bind(n,8e3)),"@site/docs/guides/javascript/typescript-project-refs.mdx",8e3],"6dd55018":[()=>n.e(5390).then(n.bind(n,37116)),"@site/docs/guides/javascript/typescript-eslint.mdx",37116],"6e15e01b":[()=>n.e(216).then(n.t.bind(n,39073,19)),"~blog/default/blog-tags-env-vars-f85.json",39073],"6ea8a316":[()=>n.e(5723).then(n.t.bind(n,18537,19)),"~blog/default/blog-tags-offline-83f-list.json",18537],"6eae5b23":[()=>n.e(2687).then(n.bind(n,48387)),"@site/docs/proto/commands/completions.mdx",48387],"6fb24ff7":[()=>Promise.all([n.e(9262),n.e(1358)]).then(n.bind(n,87953)),"@site/docs/how-it-works/action-graph.mdx",87953],"6fe6957f":[()=>n.e(7465).then(n.t.bind(n,88057,19)),"~blog/default/blog-tags-editors-8f6-list.json",88057],"711949de":[()=>n.e(7012).then(n.bind(n,61228)),"@site/blog/2022-09-01_v0.13.mdx",61228],"71dfd0a8":[()=>n.e(3615).then(n.bind(n,19634)),"@site/blog/2023-07-31_moon-v1.11.mdx",19634],"722146fe":[()=>n.e(722).then(n.t.bind(n,97160,19)),"~docs/default/tag-docs-tags-solid-a3b.json",97160],"750b9005":[()=>n.e(2814).then(n.t.bind(n,48597,19)),"~blog/default/blog-tags-quality-be6.json",48597],"752283db":[()=>n.e(6947).then(n.t.bind(n,90363,19)),"~blog/default/blog-tags-plugin-95c.json",90363],"752c6bfa":[()=>n.e(384).then(n.t.bind(n,20891,19)),"~blog/default/blog-tags-plugins-0a9.json",20891],75408299:[()=>n.e(6630).then(n.t.bind(n,31796,19)),"~blog/default/blog-tags-run-471.json",31796],"7599f4f1":[()=>n.e(5217).then(n.t.bind(n,67049,19)),"~blog/default/blog-tags-proto-962-list.json",67049],"759c01e9":[()=>Promise.all([n.e(532),n.e(780),n.e(8488)]).then(n.bind(n,74273)),"@site/docs/guides/examples/react.mdx",74273],"766b2171":[()=>n.e(3358).then(n.bind(n,4722)),"@site/docs/guides/open-source.mdx",4722],"769e9ed2":[()=>n.e(6728).then(n.t.bind(n,91187,19)),"~blog/default/blog-tags-notifier-b98.json",91187],"771f38eb":[()=>n.e(1478).then(n.t.bind(n,59811,19)),"~blog/default/blog-tags-ci-5d6.json",59811],"77530bb9":[()=>n.e(6070).then(n.bind(n,11666)),"@site/blog/2023-03-09_proto.mdx?truncated=true",11666],"77b7a366":[()=>n.e(5624).then(n.bind(n,2335)),"@site/blog/2023-04-28_proto-v0.8.mdx?truncated=true",2335],"78060cbc":[()=>n.e(6652).then(n.t.bind(n,19724,19)),"~blog/default/blog-tags-github-f68.json",19724],"788e7a3c":[()=>n.e(354).then(n.t.bind(n,65592,19)),"~blog/default/blog-tags-toml-a88.json",65592],"78dd992d":[()=>n.e(7869).then(n.t.bind(n,3357,19)),"~blog/default/blog-tags-tags-87e.json",3357],"79765aba":[()=>n.e(7440).then(n.bind(n,4758)),"@site/docs/proto/commands/pin.mdx",4758],"7aad579e":[()=>n.e(6517).then(n.t.bind(n,58259,19)),"~blog/default/blog-tags-tasks-49e-list.json",58259],"7b667a7f":[()=>n.e(5649).then(n.t.bind(n,85274,19)),"~docs/default/tag-docs-tags-git-514.json",85274],"7c4e6415":[()=>n.e(1393).then(n.t.bind(n,94940,19)),"~blog/default/blog-tags-editors-8f6.json",94940],"7c9b29bb":[()=>n.e(2334).then(n.bind(n,99484)),"@site/blog/2023-06-26_moon-v1.9.mdx",99484],"7d19a980":[()=>n.e(3549).then(n.t.bind(n,91482,19)),"~blog/default/blog-tags-hasher-783-list.json",91482],"7d55a0f0":[()=>Promise.all([n.e(532),n.e(6920)]).then(n.bind(n,55885)),"@site/blog/2023-02-27_v0.25.mdx",55885],"7d9726a8":[()=>n.e(7429).then(n.t.bind(n,89494,19)),"~blog/default/blog-page-4-30b.json",89494],"7e9fb3d2":[()=>n.e(9702).then(n.t.bind(n,97517,19)),"~blog/default/blog-tags-errors-d0b.json",97517],"7ec3d878":[()=>n.e(2178).then(n.t.bind(n,15655,19)),"~blog/default/blog-tags-version-acf-list.json",15655],"7f3e2518":[()=>n.e(6647).then(n.t.bind(n,41640,19)),"~blog/default/blog-tags-debug-53a.json",41640],"7f6c6f55":[()=>n.e(3561).then(n.t.bind(n,8801,19)),"~blog/default/blog-tags-toolchain-230-list.json",8801],80514956:[()=>n.e(609).then(n.t.bind(n,29708,19)),"~blog/default/blog-tags-clean-516.json",29708],"814f3328":[()=>n.e(2535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"819f977d":[()=>Promise.all([n.e(532),n.e(1622)]).then(n.bind(n,84102)),"@site/docs/run-task.mdx",84102],"81d944d1":[()=>n.e(4875).then(n.bind(n,79967)),"@site/blog/2023-04-03_moon-v1.1.mdx?truncated=true",79967],"83943ce1":[()=>Promise.all([n.e(532),n.e(9821)]).then(n.t.bind(n,26723,23)),"/home/runner/work/moon/moon/node_modules/docusaurus-plugin-typedoc-api/lib/components/ApiPage.js",26723],"8526ffa3":[()=>n.e(5620).then(n.t.bind(n,52991,19)),"~blog/default/blog-tags-target-7a0-list.json",52991],"8593ff01":[()=>n.e(7007).then(n.t.bind(n,89064,19)),"~blog/default/blog-tags-docker-f07.json",89064],"860d7f34":[()=>n.e(8495).then(n.t.bind(n,80806,19)),"~blog/default/blog-tags-shim-887.json",80806],"861abce9":[()=>n.e(5995).then(n.bind(n,43633)),"@site/docs/commands/sync/projects.mdx",43633],"86257f88":[()=>Promise.all([n.e(532),n.e(780),n.e(5730),n.e(9926),n.e(7279),n.e(1795)]).then(n.bind(n,65530)),"@site/docs/comparison.mdx",65530],"87d62477":[()=>n.e(9551).then(n.bind(n,69051)),"@site/docs/guides/webhooks.mdx",69051],"87f861ef":[()=>n.e(3408).then(n.t.bind(n,97390,19)),"~blog/default/blog-tags-dependency-e04.json",97390],"8876813e":[()=>Promise.all([n.e(9262),n.e(2615)]).then(n.bind(n,17242)),"@site/docs/how-it-works/project-graph.mdx",17242],"88aaac27":[()=>Promise.all([n.e(532),n.e(4138)]).then(n.bind(n,31509)),"@site/docs/create-task.mdx",31509],"89a53707":[()=>Promise.all([n.e(532),n.e(3157)]).then(n.bind(n,55946)),"@site/docs/guides/docker.mdx",55946],"89c16be8":[()=>n.e(7969).then(n.bind(n,82134)),"@site/docs/concepts/cache.mdx",82134],"8b38bcbd":[()=>n.e(8900).then(n.t.bind(n,3025,19)),"~blog/default/blog-tags-alias-144.json",3025],"8c079f7d":[()=>n.e(5880).then(n.bind(n,57920)),"@site/docs/commands/init.mdx",57920],"8c241076":[()=>n.e(1324).then(n.t.bind(n,92687,19)),"~blog/default/blog-tags-graph-658.json",92687],"8c4a23a7":[()=>n.e(739).then(n.bind(n,79217)),"@site/docs/commands/docker/setup.mdx",79217],"8d06f620":[()=>n.e(8678).then(n.t.bind(n,62278,19)),"~blog/default/blog-tags-rfc-616.json",62278],"8d701eb4":[()=>n.e(6622).then(n.t.bind(n,13762,19)),"~blog/default/blog-tags-hooks-29a.json",13762],"8de38bef":[()=>Promise.all([n.e(532),n.e(4197)]).then(n.bind(n,74685)),"@site/docs/config/toolchain.mdx",74685],"8e65fbae":[()=>n.e(1578).then(n.t.bind(n,37701,19)),"~docs/default/tag-docs-tags-scaffold-e17.json",37701],"8e9e3e30":[()=>n.e(4675).then(n.bind(n,96433)),"@site/blog/2023-09-04_proto-v0.16.mdx?truncated=true",96433],"8eb4e46b":[()=>n.e(6018).then(n.t.bind(n,82638,19)),"~blog/default/blog-page-2-677.json",82638],"8f6f7bb5":[()=>n.e(9950).then(n.bind(n,68523)),"@site/docs/guides/profile.mdx",68523],"907bfa82":[()=>n.e(7633).then(n.t.bind(n,98818,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/plugin-route-context-module-100.json",98818],"90b14878":[()=>n.e(1512).then(n.t.bind(n,24833,19)),"~docs/default/category-docs-docs-category-config-files-a6b.json",24833],"90f88783":[()=>Promise.all([n.e(532),n.e(780),n.e(3481)]).then(n.bind(n,9123)),"@site/docs/guides/examples/prettier.mdx",9123],"90fdb9b5":[()=>n.e(6321).then(n.t.bind(n,27488,19)),"~blog/default/blog-tags-offline-83f.json",27488],"92999a1c":[()=>n.e(8442).then(n.t.bind(n,15310,19)),"~blog/default/blog-page-3-fd4.json",15310],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"937d7adc":[()=>n.e(3071).then(n.bind(n,14097)),"@site/blog/2022-11-21_typescript-monorepo.mdx",14097],"93bce8ec":[()=>n.e(4859).then(n.t.bind(n,34284,19)),"~blog/default/blog-tags-generator-109.json",34284],"9529487c":[()=>n.e(5537).then(n.t.bind(n,40543,19)),"~blog/default/blog-tags-tags-87e-list.json",40543],"957809ee":[()=>n.e(2785).then(n.bind(n,57828)),"@site/blog/2023-09-05_moon-v1.13.mdx?truncated=true",57828],"976dc663":[()=>n.e(1109).then(n.t.bind(n,70886,19)),"~blog/default/blog-tags-life-ab7.json",70886],"97878c65":[()=>n.e(948).then(n.bind(n,25132)),"@site/blog/2023-03-09_proto.mdx",25132],"98738a6c":[()=>n.e(4734).then(n.bind(n,32369)),"@site/blog/2023-09-29_proto-v0.19.mdx",32369],"98ae4a66":[()=>n.e(7619).then(n.bind(n,67013)),"@site/blog/2023-08-11_proto-v0.14.mdx",67013],"99b94e0d":[()=>n.e(9531).then(n.t.bind(n,55513,19)),"~blog/default/blog-tags-ignore-60c-list.json",55513],"9a062e52":[()=>Promise.all([n.e(532),n.e(6855)]).then(n.bind(n,86101)),"@site/blog/2023-03-13_v0.26.mdx",86101],"9c090340":[()=>n.e(7538).then(n.t.bind(n,61086,19)),"~blog/default/blog-tags-init-e2a.json",61086],"9d3c1a44":[()=>n.e(5428).then(n.t.bind(n,77957,19)),"~blog/default/blog-tags-index-96c.json",77957],"9e4087bc":[()=>n.e(3608).then(n.bind(n,7507)),"@theme/BlogArchivePage",7507],"9e4ae2cc":[()=>n.e(5706).then(n.t.bind(n,74525,19)),"~blog/default/blog-tags-run-471-list.json",74525],"9e528cee":[()=>n.e(6633).then(n.bind(n,92510)),"@site/docs/proto/wasm-plugin.mdx",92510],"9edb948e":[()=>Promise.all([n.e(532),n.e(4436)]).then(n.bind(n,31901)),"@site/docs/setup-toolchain.mdx",31901],"9f025583":[()=>n.e(4343).then(n.bind(n,35558)),"@site/docs/proto/commands/alias.mdx",35558],"9f838734":[()=>Promise.all([n.e(532),n.e(3231)]).then(n.bind(n,48764)),"@site/docs/guides/codeowners.mdx",48764],"9ff86157":[()=>n.e(8830).then(n.bind(n,24158)),"/home/runner/work/moon/moon/packages/types/README.md",24158],a0d8b188:[()=>n.e(5547).then(n.bind(n,96927)),"@site/docs/config/template.mdx",96927],a18798d1:[()=>n.e(7460).then(n.bind(n,92912)),"@site/docs/proto/commands/unalias.mdx",92912],a20401e4:[()=>n.e(969).then(n.bind(n,96681)),"@site/docs/proto/commands/install.mdx",96681],a219b733:[()=>n.e(7749).then(n.bind(n,11558)),"@site/docs/commands/docker/scaffold.mdx",11558],a26a8dd3:[()=>n.e(7838).then(n.bind(n,61643)),"@site/docs/commands/docker/prune.mdx",61643],a33962b9:[()=>n.e(2763).then(n.bind(n,67714)),"@site/docs/guides/sharing-config.mdx",67714],a372a63b:[()=>n.e(4590).then(n.t.bind(n,61127,19)),"~blog/default/blog-tags-query-8a9.json",61127],a452709a:[()=>n.e(6526).then(n.bind(n,19107)),"@site/docs/proto/commands/use.mdx",19107],a581e456:[()=>Promise.all([n.e(532),n.e(780),n.e(2778)]).then(n.bind(n,4496)),"@site/docs/guides/examples/eslint.mdx",4496],a5a57258:[()=>n.e(2192).then(n.bind(n,43843)),"@site/blog/2023-07-10_moon-v1.10.mdx",43843],a641c963:[()=>n.e(3931).then(n.bind(n,322)),"@site/docs/proto/detection.mdx",322],a65441a5:[()=>n.e(2033).then(n.bind(n,48794)),"@site/docs/commands/bin.mdx",48794],a6746ab5:[()=>n.e(1705).then(n.bind(n,8618)),"@site/blog/2023-04-06_proto-v0.5.mdx",8618],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(780),n.e(5730),n.e(6432),n.e(3089)]).then(n.bind(n,63462)),"@theme/BlogListPage",63462],a6d9fcee:[()=>n.e(9958).then(n.bind(n,91038)),"@site/blog/2022-11-14_v0.19.mdx?truncated=true",91038],a701d349:[()=>n.e(3068).then(n.bind(n,47049)),"@site/docs/proto/commands/list-remote.mdx",47049],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a86b7c98:[()=>n.e(827).then(n.t.bind(n,17091,19)),"~blog/default/blog-tags-schema-251.json",17091],a88c4343:[()=>n.e(8282).then(n.bind(n,70390)),"@site/docs/commands/query/projects.mdx",70390],a91ae4c2:[()=>n.e(8005).then(n.t.bind(n,10877,19)),"~blog/default/blog-tags-target-7a0.json",10877],a9e1900f:[()=>n.e(6009).then(n.bind(n,60930)),"@site/docs/proto/commands/plugins.mdx",60930],aa431e4a:[()=>n.e(3512).then(n.bind(n,12690)),"@site/docs/guides/examples/nuxt.mdx",12690],aacc3e35:[()=>Promise.all([n.e(532),n.e(2702)]).then(n.bind(n,42479)),"@site/blog/2023-02-13_v0.24.mdx?truncated=true",42479],ac1be023:[()=>n.e(3075).then(n.t.bind(n,51491,19)),"~blog/default/blog-tags-hydration-583-list.json",51491],ad536080:[()=>n.e(5077).then(n.bind(n,16621)),"@site/docs/proto/index.mdx",16621],affd832d:[()=>n.e(9453).then(n.t.bind(n,72067,19)),"~blog/default/blog-tags-ownership-1a2-list.json",72067],b03b3eac:[()=>n.e(5334).then(n.bind(n,86963)),"@site/blog/2022-10-06_v0.16.mdx",86963],b072568e:[()=>Promise.all([n.e(532),n.e(2433)]).then(n.bind(n,3688)),"@site/blog/2022-10-21_v0.17.mdx?truncated=true",3688],b0cf9b20:[()=>n.e(499).then(n.t.bind(n,57812,19)),"~blog/default/blog-tags-dep-graph-b83-list.json",57812],b0e766b4:[()=>Promise.all([n.e(532),n.e(2949)]).then(n.bind(n,60992)),"@site/blog/2022-09-26_v0.15.mdx?truncated=true",60992],b104f86f:[()=>n.e(4536).then(n.bind(n,20626)),"@site/docs/commands/teardown.mdx",20626],b1144183:[()=>n.e(7822).then(n.t.bind(n,42234,19)),"~blog/default/blog-tags-tag-d3f.json",42234],b15686f4:[()=>n.e(4147).then(n.t.bind(n,19687,19)),"~docs/default/tag-docs-tags-hooks-0eb.json",19687],b184781f:[()=>n.e(6911).then(n.bind(n,16858)),"@site/blog/2022-12-19_v0.21.mdx?truncated=true",16858],b1c60aef:[()=>n.e(8074).then(n.t.bind(n,81077,19)),"~blog/default/blog-tags-errors-d0b-list.json",81077],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2d692e7:[()=>n.e(9716).then(n.t.bind(n,7085,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b38a02d7:[()=>n.e(8685).then(n.t.bind(n,42683,19)),"~blog/default/blog-tags-railway-ade.json",42683],b49860f1:[()=>n.e(2700).then(n.bind(n,79353)),"@site/docs/proto/plugins.mdx",79353],b652e05c:[()=>n.e(5653).then(n.t.bind(n,31566,19)),"~blog/default/blog-tags-node-4f7.json",31566],b65c3624:[()=>Promise.all([n.e(532),n.e(730)]).then(n.bind(n,52746)),"@site/docs/migrate-to-moon.mdx",52746],b6e1085a:[()=>Promise.all([n.e(532),n.e(9624)]).then(n.bind(n,1710)),"@site/blog/2022-09-26_v0.15.mdx",1710],b717531a:[()=>n.e(115).then(n.bind(n,84501)),"@site/blog/2023-08-21_moon-v1.12.mdx",84501],b78f40a6:[()=>Promise.all([n.e(532),n.e(6629)]).then(n.bind(n,11279)),"@site/docs/guides/ci.mdx",11279],b7a8f57a:[()=>n.e(7890).then(n.bind(n,49286)),"@site/blog/2023-09-18_proto-v0.18.mdx",49286],b80596f4:[()=>n.e(8463).then(n.bind(n,47076)),"@site/blog/2023-09-05_moon-v1.13.mdx",47076],b819cecb:[()=>n.e(3380).then(n.bind(n,82136)),"@site/blog/2022-10-17_vscode-extension.mdx",82136],b831fe65:[()=>n.e(9157).then(n.bind(n,17467)),"@site/docs/concepts/project.mdx",17467],b8f3d4c8:[()=>n.e(2444).then(n.bind(n,21953)),"@site/docs/editors/vscode.mdx",21953],b972506a:[()=>n.e(1187).then(n.t.bind(n,66037,19)),"~blog/default/blog-tags-monorepo-88d.json",66037],b9e9925e:[()=>n.e(297).then(n.bind(n,62328)),"@site/docs/concepts/file-group.mdx",62328],bb624440:[()=>n.e(1364).then(n.bind(n,24588)),"@site/blog/2023-05-08_moon-v1.5.mdx?truncated=true",24588],bb86fac5:[()=>n.e(9067).then(n.t.bind(n,56543,19)),"~blog/default/blog-tags-http-5fb-list.json",56543],bc6c5049:[()=>n.e(5370).then(n.t.bind(n,5540,19)),"~blog/default/blog-tags-rfc-616-list.json",5540],bc74446d:[()=>n.e(3134).then(n.t.bind(n,90063,19)),"~blog/default/blog-tags-debug-53a-list.json",90063],bcbbf42e:[()=>n.e(2606).then(n.t.bind(n,26090,19)),"~blog/default/blog-tags-typescript-2e3.json",26090],bd6bded1:[()=>n.e(4903).then(n.t.bind(n,32443,19)),"~blog/default/blog-tags-inheritance-8f5.json",32443],be0fdac8:[()=>n.e(6331).then(n.t.bind(n,74962,19)),"~blog/default/blog-tags-logging-c85.json",74962],be1609b7:[()=>n.e(6448).then(n.t.bind(n,56277,19)),"~blog/default/blog-tags-toolchain-230.json",56277],be1aaa14:[()=>n.e(7133).then(n.bind(n,78817)),"@site/docs/commands/query/hash.mdx",78817],be324e15:[()=>n.e(9847).then(n.bind(n,73530)),"@site/docs/proto/commands/upgrade.mdx",73530],bec065e9:[()=>n.e(6819).then(n.t.bind(n,52695,19)),"~blog/default/blog-tags-action-340.json",52695],bf04367c:[()=>n.e(3916).then(n.bind(n,63261)),"@site/blog/2023-05-01_moon-v1.4.mdx",63261],bf5d9784:[()=>n.e(9827).then(n.t.bind(n,40475,19)),"~blog/default/blog-tags-life-ab7-list.json",40475],bf95ed3d:[()=>n.e(9639).then(n.t.bind(n,26718,19)),"~blog/default/blog-tags-toml-a88-list.json",26718],c095dcfa:[()=>n.e(8057).then(n.bind(n,89908)),"@site/blog/2023-03-31_proto-v0.4.mdx?truncated=true",89908],c1721191:[()=>n.e(4362).then(n.t.bind(n,45332,19)),"~blog/default/blog-tags-tool-798.json",45332],c19ad3d7:[()=>n.e(805).then(n.t.bind(n,76656,19)),"~blog/default/blog-tags-proto-page-2-892.json",76656],c413f1b7:[()=>n.e(4384).then(n.bind(n,35971)),"@site/blog/2022-10-31_v0.18.mdx?truncated=true",35971],c4542d8c:[()=>n.e(1988).then(n.t.bind(n,25,19)),"~blog/default/blog-tags-shorthand-f31.json",25],c4f95133:[()=>n.e(8401).then(n.bind(n,32080)),"/home/runner/work/moon/moon/packages/runtime/README.md",32080],c532175a:[()=>n.e(8573).then(n.t.bind(n,70953,19)),"~blog/default/blog-tags-task-d4c.json",70953],c5980a65:[()=>n.e(1525).then(n.bind(n,85169)),"@site/docs/proto/commands/uninstall.mdx",85169],c5de23c8:[()=>n.e(7963).then(n.t.bind(n,10401,19)),"~blog/default/blog-tags-constraints-91e-list.json",10401],c5ed658f:[()=>n.e(3131).then(n.t.bind(n,56744,19)),"~docs/default/category-docs-docs-category-concepts-0f9.json",56744],c6200b76:[()=>n.e(3643).then(n.bind(n,77817)),"@site/blog/2023-04-17_moon-v1.2.mdx?truncated=true",77817],c67cfbac:[()=>n.e(6732).then(n.t.bind(n,85115,19)),"~docs/default/tag-docs-tags-solidjs-a25.json",85115],c6c73cac:[()=>n.e(3791).then(n.t.bind(n,40424,19)),"~blog/default/blog-tags-shorthand-f31-list.json",40424],c7d98fe2:[()=>n.e(1084).then(n.bind(n,60716)),"@site/docs/proto/faq.mdx",60716],c83c6fdf:[()=>n.e(4867).then(n.t.bind(n,3808,19)),"~blog/default/blog-tags-owners-249-list.json",3808],c8acf440:[()=>n.e(9126).then(n.bind(n,32508)),"@site/blog/2023-06-25_proto-v0.11.mdx?truncated=true",32508],caa6a735:[()=>n.e(5394).then(n.t.bind(n,70851,19)),"~blog/default/blog-tags-affected-846-list.json",70851],cae36b15:[()=>n.e(4312).then(n.bind(n,19680)),"@site/docs/proto/commands/run.mdx",19680],ccc49370:[()=>Promise.all([n.e(532),n.e(780),n.e(5730),n.e(6432),n.e(6103)]).then(n.bind(n,83227)),"@theme/BlogPostPage",83227],cce51cf2:[()=>n.e(6447).then(n.t.bind(n,42932,19)),"~blog/default/blog-tags-go-099-list.json",42932],ccfb5782:[()=>n.e(3450).then(n.t.bind(n,90384,19)),"~blog/default/blog-tags-alias-144-list.json",90384],cd988af7:[()=>n.e(1737).then(n.bind(n,6040)),"@site/blog/2023-09-11_proto-v0.17.mdx?truncated=true",6040],cdad2d50:[()=>n.e(8509).then(n.bind(n,12030)),"@site/blog/2023-01-16_v0.22.mdx?truncated=true",12030],ce2c6db8:[()=>n.e(8248).then(n.bind(n,67067)),"@site/blog/2023-09-25_moon-v1.14.mdx?truncated=true",67067],cf510f60:[()=>n.e(1607).then(n.t.bind(n,45355,19)),"~blog/default/blog-tags-platform-9d7.json",45355],d1576682:[()=>n.e(6506).then(n.bind(n,92667)),"@site/docs/proto/commands/list.mdx",92667],d213043e:[()=>n.e(638).then(n.bind(n,32336)),"@site/blog/2022-11-29_v0.20.mdx?truncated=true",32336],d43cc2ec:[()=>n.e(3871).then(n.bind(n,13901)),"@site/blog/2023-08-11_proto-v0.14.mdx?truncated=true",13901],d4c755e6:[()=>n.e(7387).then(n.bind(n,72287)),"@site/docs/proto/commands/setup.mdx",72287],d5875de2:[()=>n.e(8941).then(n.t.bind(n,72311,19)),"~blog/default/blog-tags-affected-846.json",72311],d7cb860d:[()=>Promise.all([n.e(1947),n.e(5048)]).then(n.bind(n,10052)),"@site/src/pages/moonbase.tsx",10052],d7cf5e1f:[()=>n.e(7005).then(n.bind(n,12403)),"@site/blog/2022-10-17_vscode-extension.mdx?truncated=true",12403],d84e8684:[()=>n.e(146).then(n.t.bind(n,47751,19)),"~blog/default/blog-tags-hydration-583.json",47751],d8fdbe7a:[()=>n.e(3993).then(n.bind(n,82887)),"@site/docs/commands/query/touched-files.mdx",82887],d93dbc28:[()=>Promise.all([n.e(532),n.e(780),n.e(5679)]).then(n.bind(n,79597)),"@site/docs/guides/examples/nest.mdx",79597],d9c57d72:[()=>n.e(2277).then(n.bind(n,90725)),"@site/blog/2023-04-24_moon-v1.3.mdx",90725],daf4eece:[()=>n.e(6971).then(n.t.bind(n,59254,19)),"~docs/default/tag-docs-tags-codegen-2d0.json",59254],db0cc9f1:[()=>n.e(4065).then(n.bind(n,31855)),"@site/docs/guides/remote-cache.mdx",31855],db676956:[()=>n.e(8086).then(n.bind(n,11118)),"@site/docs/concepts/query-lang.mdx",11118],dbbb982f:[()=>n.e(7622).then(n.t.bind(n,50194,19)),"~blog/default/blog-tags-docker-f07-list.json",50194],dd3540fa:[()=>n.e(9364).then(n.bind(n,38834)),"@site/blog/2023-03-27_moon-v1.0.mdx?truncated=true",38834],dd5ac54b:[()=>n.e(3184).then(n.t.bind(n,68011,19)),"~blog/default/blog-tags-task-d4c-list.json",68011],dd99bf53:[()=>n.e(19).then(n.t.bind(n,2020,19)),"~blog/default/blog-tags-notifier-b98-list.json",2020],ddec1041:[()=>n.e(2461).then(n.t.bind(n,46599,19)),"~blog/default/blog-tags-tool-798-list.json",46599],df203c0f:[()=>n.e(9924).then(n.bind(n,67051)),"@theme/DocTagDocListPage",67051],df212c12:[()=>n.e(6863).then(n.bind(n,65521)),"@site/docs/concepts/task-inheritance.mdx",65521],dffc4bd7:[()=>n.e(866).then(n.t.bind(n,6310,19)),"~docs/default/category-docs-docs-category-docker-07b.json",6310],e13166f5:[()=>n.e(6172).then(n.bind(n,58571)),"@site/docs/concepts/workspace.mdx",58571],e16afba1:[()=>n.e(6755).then(n.bind(n,22525)),"@site/docs/commands/task.mdx",22525],e4c23816:[()=>n.e(9819).then(n.t.bind(n,91154,19)),"~blog/default/blog-tags-ignore-60c.json",91154],e570d6db:[()=>n.e(951).then(n.bind(n,36593)),"@site/docs/commands/sync/codeowners.mdx",36593],e5f23965:[()=>n.e(6882).then(n.t.bind(n,84376,19)),"~blog/default/blog-tags-pipeline-37d-list.json",84376],e629dea5:[()=>n.e(9010).then(n.t.bind(n,13294,19)),"~blog/default/blog-tags-ownership-1a2.json",13294],e746f759:[()=>n.e(3984).then(n.bind(n,49711)),"@site/blog/2023-08-23_proto-v0.15.mdx?truncated=true",49711],e7d7123e:[()=>n.e(5899).then(n.bind(n,17965)),"@site/blog/2022-09-13_v0.14.mdx",17965],e8700426:[()=>n.e(9902).then(n.bind(n,28771)),"@site/blog/2023-04-13_proto-v0.6.mdx",28771],e898b7f3:[()=>Promise.all([n.e(532),n.e(780),n.e(7584)]).then(n.bind(n,81935)),"@site/docs/guides/examples/vite.mdx",81935],e8d2c25f:[()=>n.e(3171).then(n.t.bind(n,28766,19)),"~blog/default/blog-tags-proto-962.json",28766],e8f62c55:[()=>n.e(7789).then(n.t.bind(n,39311,19)),"~blog/default/blog-tags-inheritance-8f5-list.json",39311],ea313555:[()=>n.e(7937).then(n.bind(n,49511)),"@site/docs/faq.mdx",49511],eb1a9ca0:[()=>n.e(841).then(n.t.bind(n,53295,19)),"~blog/default/blog-tags-clean-516-list.json",53295],eb514dbf:[()=>n.e(6039).then(n.bind(n,71276)),"@site/blog/2023-05-01_moon-v1.4.mdx?truncated=true",71276],ec4f6a24:[()=>n.e(8898).then(n.t.bind(n,79076,19)),"~blog/default/blog-tags-project-graph-b9c-list.json",79076],ec9f380e:[()=>n.e(4744).then(n.t.bind(n,83769,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],ed26bce9:[()=>n.e(6835).then(n.t.bind(n,36757,19)),"~blog/default/blog-tags-monorepo-88d-list.json",36757],eda853ca:[()=>n.e(314).then(n.bind(n,25799)),"@site/docs/commands/project-graph.mdx",25799],edd7d65c:[()=>n.e(3250).then(n.t.bind(n,64186,19)),"~blog/default/blog-tags-tag-d3f-list.json",64186],edfea66c:[()=>n.e(6394).then(n.bind(n,19106)),"@site/blog/2022-10-31_v0.18.mdx",19106],ef3509ef:[()=>n.e(6274).then(n.t.bind(n,3778,19)),"~blog/default/blog-tags-constraints-91e.json",3778],efef7eb9:[()=>n.e(6040).then(n.bind(n,15381)),"@site/blog/2023-09-25_moon-v1.14.mdx",15381],f01f44c3:[()=>n.e(5852).then(n.t.bind(n,41862,19)),"~blog/default/blog-tags-remote-cache-1d2-list.json",41862],f09f371a:[()=>n.e(9186).then(n.bind(n,81143)),"@site/blog/2023-05-23_proto-v0.9.mdx?truncated=true",81143],f18fbdcd:[()=>Promise.all([n.e(532),n.e(5050)]).then(n.bind(n,18287)),"@site/docs/setup-workspace.mdx",18287],f1d6ac1e:[()=>n.e(6720).then(n.bind(n,16699)),"@site/blog/2023-04-28_proto-v0.8.mdx",16699],f3f44898:[()=>n.e(4841).then(n.t.bind(n,15745,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],f41735e0:[()=>n.e(5819).then(n.t.bind(n,79877,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/version-current.json",79877],f41d5eb1:[()=>n.e(2201).then(n.t.bind(n,94476,19)),"~docs/default/category-docs-docs-category-editors-2b3.json",94476],f440db1d:[()=>n.e(3535).then(n.bind(n,10528)),"@site/docs/proto/install.mdx",10528],f5b890ba:[()=>n.e(6502).then(n.t.bind(n,61762,19)),"~blog/default/blog-tags-survey-f63.json",61762],f5f247cc:[()=>n.e(1258).then(n.t.bind(n,21083,19)),"~blog/default/blog-tags-owners-249.json",21083],f616eec2:[()=>n.e(9357).then(n.bind(n,99075)),"@site/docs/commands/query/hash-diff.mdx",99075],f714495d:[()=>n.e(26).then(n.bind(n,26648)),"@site/docs/proto/toml-plugin.mdx",26648],f761bd07:[()=>n.e(3310).then(n.bind(n,22936)),"@site/blog/2023-07-07_proto-v0.12.mdx?truncated=true",22936],f7b99134:[()=>n.e(9737).then(n.t.bind(n,99201,19)),"~blog/default/blog-tags-query-8a9-list.json",99201],f7bfbae9:[()=>n.e(4404).then(n.bind(n,88772)),"@site/blog/2022-11-29_v0.20.mdx",88772],f7f505dc:[()=>Promise.all([n.e(532),n.e(780),n.e(8881)]).then(n.bind(n,8401)),"@site/docs/guides/examples/vue.mdx",8401],f8409a7e:[()=>n.e(3206).then(n.bind(n,92661)),"@site/docs/intro.mdx",92661],f8de77c0:[()=>n.e(5826).then(n.t.bind(n,87661,19)),"~blog/default/blog-tags-python-667-list.json",87661],f8deddba:[()=>n.e(938).then(n.bind(n,47685)),"@site/blog/2023-07-10_moon-v1.10.mdx?truncated=true",47685],f90d8a46:[()=>n.e(4497).then(n.bind(n,90653)),"@site/blog/2023-05-30_moon-v1.7.mdx?truncated=true",90653],f9651623:[()=>n.e(5494).then(n.bind(n,31848)),"@site/blog/2023-05-15_moon-v1.6.mdx",31848],f9cc98ab:[()=>n.e(8751).then(n.bind(n,21612)),"@site/docs/commands/run.mdx",21612],fab64b27:[()=>n.e(7964).then(n.bind(n,36630)),"@site/docs/proto/commands/bin.mdx",36630],fac0f815:[()=>n.e(3941).then(n.t.bind(n,62698,19)),"~blog/default/blog-tags-graph-658-list.json",62698],fb2dd7db:[()=>n.e(9818).then(n.t.bind(n,71673,19)),"~blog/default/blog-tags-lang-462-list.json",71673],fba28ebc:[()=>n.e(514).then(n.t.bind(n,64234,19)),"~blog/default/blog-tags-outdated-17a.json",64234],fbcfc993:[()=>n.e(3647).then(n.t.bind(n,48435,19)),"~blog/default/blog-tags-pin-fa7.json",48435],fc3ae8bf:[()=>n.e(5411).then(n.bind(n,97168)),"@site/docs/config/tasks.mdx",97168],fc3deafd:[()=>n.e(7659).then(n.t.bind(n,54568,19)),"~blog/default/blog-tags-go-099.json",54568],fc62dd75:[()=>n.e(1280).then(n.bind(n,83950)),"@site/docs/proto/commands/tools.mdx",83950],fcb295ad:[()=>n.e(7642).then(n.t.bind(n,22118,19)),"~docs/default/tag-docs-tags-vcs-af7.json",22118],fcbcdf3c:[()=>n.e(439).then(n.t.bind(n,92942,19)),"~blog/default/blog-tags-pipeline-37d.json",92942],fd27c808:[()=>n.e(661).then(n.t.bind(n,35171,19)),"~docs/default/category-docs-docs-category-how-it-works-aeb.json",35171],fd485bd3:[()=>n.e(543).then(n.bind(n,9351)),"@site/blog/2023-06-12_moon-v1.8.mdx",9351],fd8ac5c7:[()=>n.e(3664).then(n.t.bind(n,2829,19)),"~blog/default/blog-tags-tasks-49e.json",2829],fe36d4cd:[()=>Promise.all([n.e(532),n.e(780),n.e(5420)]).then(n.bind(n,21727)),"@site/docs/guides/examples/jest.mdx",21727],fe55d425:[()=>n.e(1133).then(n.bind(n,56099)),"@site/blog/2023-08-21_moon-v1.12.mdx?truncated=true",56099],fea2b255:[()=>n.e(3287).then(n.bind(n,90360)),"@site/docs/concepts/target.mdx",90360],ff13fcd4:[()=>Promise.all([n.e(532),n.e(780),n.e(2174)]).then(n.bind(n,90992)),"@site/docs/guides/examples/angular.mdx",90992],ffc0ac08:[()=>n.e(2105).then(n.t.bind(n,68784,19)),"~blog/default/blog-tags-plugins-0a9-list.json",68784],ffef4e04:[()=>n.e(6027).then(n.bind(n,19303)),"@site/docs/commands/migrate/from-package-json.mdx",19303],fff5a6d1:[()=>n.e(7547).then(n.t.bind(n,11455,19)),"~blog/default/blog-tags-detect-153.json",11455]};function l(e){let{error:t,retry:n,pastDelay:o}=e;return t?a.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},a.createElement("p",null,String(t)),a.createElement("div",null,a.createElement("button",{type:"button",onClick:n},"Retry"))):o?a.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},a.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},a.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"8"},a.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(13361),d=n(66881);function p(e,t){if("*"===e)return i()({loading:l,loader:()=>n.e(3893).then(n.bind(n,53893)),modules:["@theme/NotFound"],webpack:()=>[53893],render(e,t){const n=e.default;return a.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},a.createElement(n,t))}});const r=s[`${e}-${t}`],p={},f=[],m=[],g=(0,u.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const a=c[n];a&&(p[t]=a[0],f.push(a[1]),m.push(a[2]))})),i().Map({loading:l,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,a]=t;const o=a.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(a).filter((e=>"default"!==e)).forEach((e=>{o[e]=a[e]}));let r=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{r=r[e]})),r[s[s.length-1]]=o}));const s=i.__comp;delete i.__comp;const c=i.__context;return delete i.__context,a.createElement(d.z,{value:c},a.createElement(s,(0,o.Z)({},i,n)))}})}const f=[{path:"/blog",component:p("/blog","f70"),exact:!0},{path:"/blog/2023-roadmap",component:p("/blog/2023-roadmap","864"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","1b1"),exact:!0},{path:"/blog/moon-v1.0",component:p("/blog/moon-v1.0","21d"),exact:!0},{path:"/blog/moon-v1.1",component:p("/blog/moon-v1.1","f8e"),exact:!0},{path:"/blog/moon-v1.10",component:p("/blog/moon-v1.10","5e4"),exact:!0},{path:"/blog/moon-v1.11",component:p("/blog/moon-v1.11","461"),exact:!0},{path:"/blog/moon-v1.12",component:p("/blog/moon-v1.12","6dc"),exact:!0},{path:"/blog/moon-v1.13",component:p("/blog/moon-v1.13","a38"),exact:!0},{path:"/blog/moon-v1.14",component:p("/blog/moon-v1.14","63e"),exact:!0},{path:"/blog/moon-v1.15",component:p("/blog/moon-v1.15","b21"),exact:!0},{path:"/blog/moon-v1.2",component:p("/blog/moon-v1.2","cbe"),exact:!0},{path:"/blog/moon-v1.3",component:p("/blog/moon-v1.3","c99"),exact:!0},{path:"/blog/moon-v1.4",component:p("/blog/moon-v1.4","b5f"),exact:!0},{path:"/blog/moon-v1.5",component:p("/blog/moon-v1.5","51b"),exact:!0},{path:"/blog/moon-v1.6",component:p("/blog/moon-v1.6","c20"),exact:!0},{path:"/blog/moon-v1.7",component:p("/blog/moon-v1.7","96a"),exact:!0},{path:"/blog/moon-v1.8",component:p("/blog/moon-v1.8","a17"),exact:!0},{path:"/blog/moon-v1.9",component:p("/blog/moon-v1.9","835"),exact:!0},{path:"/blog/moonbase",component:p("/blog/moonbase","c38"),exact:!0},{path:"/blog/page/2",component:p("/blog/page/2","dd1"),exact:!0},{path:"/blog/page/3",component:p("/blog/page/3","f29"),exact:!0},{path:"/blog/page/4",component:p("/blog/page/4","eca"),exact:!0},{path:"/blog/page/5",component:p("/blog/page/5","978"),exact:!0},{path:"/blog/page/6",component:p("/blog/page/6","a47"),exact:!0},{path:"/blog/proto",component:p("/blog/proto","dd1"),exact:!0},{path:"/blog/proto-v0.11",component:p("/blog/proto-v0.11","254"),exact:!0},{path:"/blog/proto-v0.12",component:p("/blog/proto-v0.12","e58"),exact:!0},{path:"/blog/proto-v0.13",component:p("/blog/proto-v0.13","c92"),exact:!0},{path:"/blog/proto-v0.14",component:p("/blog/proto-v0.14","94e"),exact:!0},{path:"/blog/proto-v0.15",component:p("/blog/proto-v0.15","573"),exact:!0},{path:"/blog/proto-v0.16",component:p("/blog/proto-v0.16","a08"),exact:!0},{path:"/blog/proto-v0.17",component:p("/blog/proto-v0.17","8c2"),exact:!0},{path:"/blog/proto-v0.18",component:p("/blog/proto-v0.18","187"),exact:!0},{path:"/blog/proto-v0.19",component:p("/blog/proto-v0.19","ccc"),exact:!0},{path:"/blog/proto-v0.3",component:p("/blog/proto-v0.3","5f5"),exact:!0},{path:"/blog/proto-v0.4",component:p("/blog/proto-v0.4","d76"),exact:!0},{path:"/blog/proto-v0.5",component:p("/blog/proto-v0.5","f0a"),exact:!0},{path:"/blog/proto-v0.6",component:p("/blog/proto-v0.6","4a2"),exact:!0},{path:"/blog/proto-v0.7",component:p("/blog/proto-v0.7","c70"),exact:!0},{path:"/blog/proto-v0.8",component:p("/blog/proto-v0.8","e68"),exact:!0},{path:"/blog/proto-v0.9",component:p("/blog/proto-v0.9","c62"),exact:!0},{path:"/blog/tags",component:p("/blog/tags","b41"),exact:!0},{path:"/blog/tags/action",component:p("/blog/tags/action","06b"),exact:!0},{path:"/blog/tags/affected",component:p("/blog/tags/affected","46a"),exact:!0},{path:"/blog/tags/alias",component:p("/blog/tags/alias","2c5"),exact:!0},{path:"/blog/tags/cache",component:p("/blog/tags/cache","5e3"),exact:!0},{path:"/blog/tags/canary",component:p("/blog/tags/canary","f59"),exact:!0},{path:"/blog/tags/ci",component:p("/blog/tags/ci","6e4"),exact:!0},{path:"/blog/tags/clean",component:p("/blog/tags/clean","b52"),exact:!0},{path:"/blog/tags/code",component:p("/blog/tags/code","c6b"),exact:!0},{path:"/blog/tags/config",component:p("/blog/tags/config","a74"),exact:!0},{path:"/blog/tags/constraints",component:p("/blog/tags/constraints","423"),exact:!0},{path:"/blog/tags/debug",component:p("/blog/tags/debug","6b2"),exact:!0},{path:"/blog/tags/deno",component:p("/blog/tags/deno","a92"),exact:!0},{path:"/blog/tags/dep-graph",component:p("/blog/tags/dep-graph","022"),exact:!0},{path:"/blog/tags/dependency",component:p("/blog/tags/dependency","ea3"),exact:!0},{path:"/blog/tags/detect",component:p("/blog/tags/detect","d08"),exact:!0},{path:"/blog/tags/docker",component:p("/blog/tags/docker","2ae"),exact:!0},{path:"/blog/tags/editors",component:p("/blog/tags/editors","757"),exact:!0},{path:"/blog/tags/env-vars",component:p("/blog/tags/env-vars","ba2"),exact:!0},{path:"/blog/tags/errors",component:p("/blog/tags/errors","b3f"),exact:!0},{path:"/blog/tags/generator",component:p("/blog/tags/generator","fb2"),exact:!0},{path:"/blog/tags/git",component:p("/blog/tags/git","3bf"),exact:!0},{path:"/blog/tags/github",component:p("/blog/tags/github","9dc"),exact:!0},{path:"/blog/tags/global",component:p("/blog/tags/global","ed7"),exact:!0},{path:"/blog/tags/globals",component:p("/blog/tags/globals","c1f"),exact:!0},{path:"/blog/tags/go",component:p("/blog/tags/go","793"),exact:!0},{path:"/blog/tags/graph",component:p("/blog/tags/graph","017"),exact:!0},{path:"/blog/tags/hash",component:p("/blog/tags/hash","da9"),exact:!0},{path:"/blog/tags/hasher",component:p("/blog/tags/hasher","1f3"),exact:!0},{path:"/blog/tags/hooks",component:p("/blog/tags/hooks","715"),exact:!0},{path:"/blog/tags/http",component:p("/blog/tags/http","31c"),exact:!0},{path:"/blog/tags/hydration",component:p("/blog/tags/hydration","147"),exact:!0},{path:"/blog/tags/ignore",component:p("/blog/tags/ignore","d3a"),exact:!0},{path:"/blog/tags/index",component:p("/blog/tags/index","763"),exact:!0},{path:"/blog/tags/inheritance",component:p("/blog/tags/inheritance","db9"),exact:!0},{path:"/blog/tags/init",component:p("/blog/tags/init","268"),exact:!0},{path:"/blog/tags/lang",component:p("/blog/tags/lang","a50"),exact:!0},{path:"/blog/tags/language",component:p("/blog/tags/language","abc"),exact:!0},{path:"/blog/tags/life",component:p("/blog/tags/life","8d8"),exact:!0},{path:"/blog/tags/local",component:p("/blog/tags/local","634"),exact:!0},{path:"/blog/tags/log",component:p("/blog/tags/log","1c5"),exact:!0},{path:"/blog/tags/logging",component:p("/blog/tags/logging","37d"),exact:!0},{path:"/blog/tags/migrate",component:p("/blog/tags/migrate","776"),exact:!0},{path:"/blog/tags/monorepo",component:p("/blog/tags/monorepo","a85"),exact:!0},{path:"/blog/tags/moonbase",component:p("/blog/tags/moonbase","b71"),exact:!0},{path:"/blog/tags/node",component:p("/blog/tags/node","673"),exact:!0},{path:"/blog/tags/notifier",component:p("/blog/tags/notifier","2fe"),exact:!0},{path:"/blog/tags/npm",component:p("/blog/tags/npm","f7d"),exact:!0},{path:"/blog/tags/offline",component:p("/blog/tags/offline","82f"),exact:!0},{path:"/blog/tags/outdated",component:p("/blog/tags/outdated","084"),exact:!0},{path:"/blog/tags/owners",component:p("/blog/tags/owners","368"),exact:!0},{path:"/blog/tags/ownership",component:p("/blog/tags/ownership","4e9"),exact:!0},{path:"/blog/tags/pin",component:p("/blog/tags/pin","01f"),exact:!0},{path:"/blog/tags/pipeline",component:p("/blog/tags/pipeline","75d"),exact:!0},{path:"/blog/tags/platform",component:p("/blog/tags/platform","099"),exact:!0},{path:"/blog/tags/plugin",component:p("/blog/tags/plugin","100"),exact:!0},{path:"/blog/tags/plugins",component:p("/blog/tags/plugins","c8f"),exact:!0},{path:"/blog/tags/project",component:p("/blog/tags/project","b7b"),exact:!0},{path:"/blog/tags/project-graph",component:p("/blog/tags/project-graph","adf"),exact:!0},{path:"/blog/tags/projects",component:p("/blog/tags/projects","fe7"),exact:!0},{path:"/blog/tags/proto",component:p("/blog/tags/proto","c6d"),exact:!0},{path:"/blog/tags/proto/page/2",component:p("/blog/tags/proto/page/2","ed0"),exact:!0},{path:"/blog/tags/proto/page/3",component:p("/blog/tags/proto/page/3","f5e"),exact:!0},{path:"/blog/tags/python",component:p("/blog/tags/python","253"),exact:!0},{path:"/blog/tags/qol",component:p("/blog/tags/qol","c36"),exact:!0},{path:"/blog/tags/quality",component:p("/blog/tags/quality","17c"),exact:!0},{path:"/blog/tags/query",component:p("/blog/tags/query","e4e"),exact:!0},{path:"/blog/tags/railway",component:p("/blog/tags/railway","c2c"),exact:!0},{path:"/blog/tags/registry",component:p("/blog/tags/registry","e67"),exact:!0},{path:"/blog/tags/remote-cache",component:p("/blog/tags/remote-cache","49b"),exact:!0},{path:"/blog/tags/rfc",component:p("/blog/tags/rfc","8be"),exact:!0},{path:"/blog/tags/roadmap",component:p("/blog/tags/roadmap","c41"),exact:!0},{path:"/blog/tags/run",component:p("/blog/tags/run","309"),exact:!0},{path:"/blog/tags/runner",component:p("/blog/tags/runner","d26"),exact:!0},{path:"/blog/tags/rust",component:p("/blog/tags/rust","cf6"),exact:!0},{path:"/blog/tags/schema",component:p("/blog/tags/schema","abe"),exact:!0},{path:"/blog/tags/shim",component:p("/blog/tags/shim","a73"),exact:!0},{path:"/blog/tags/shorthand",component:p("/blog/tags/shorthand","421"),exact:!0},{path:"/blog/tags/source",component:p("/blog/tags/source","3fc"),exact:!0},{path:"/blog/tags/survey",component:p("/blog/tags/survey","7e5"),exact:!0},{path:"/blog/tags/tag",component:p("/blog/tags/tag","2cb"),exact:!0},{path:"/blog/tags/tags",component:p("/blog/tags/tags","829"),exact:!0},{path:"/blog/tags/target",component:p("/blog/tags/target","aed"),exact:!0},{path:"/blog/tags/task",component:p("/blog/tags/task","a06"),exact:!0},{path:"/blog/tags/tasks",component:p("/blog/tags/tasks","301"),exact:!0},{path:"/blog/tags/tier",component:p("/blog/tags/tier","f53"),exact:!0},{path:"/blog/tags/tokens",component:p("/blog/tags/tokens","faf"),exact:!0},{path:"/blog/tags/toml",component:p("/blog/tags/toml","1de"),exact:!0},{path:"/blog/tags/tool",component:p("/blog/tags/tool","864"),exact:!0},{path:"/blog/tags/toolchain",component:p("/blog/tags/toolchain","619"),exact:!0},{path:"/blog/tags/typescript",component:p("/blog/tags/typescript","a74"),exact:!0},{path:"/blog/tags/vcs",component:p("/blog/tags/vcs","cd2"),exact:!0},{path:"/blog/tags/version",component:p("/blog/tags/version","c87"),exact:!0},{path:"/blog/tags/vscode",component:p("/blog/tags/vscode","bcd"),exact:!0},{path:"/blog/tags/wasm",component:p("/blog/tags/wasm","463"),exact:!0},{path:"/blog/typescript-monorepo",component:p("/blog/typescript-monorepo","cd0"),exact:!0},{path:"/blog/v0.13",component:p("/blog/v0.13","d46"),exact:!0},{path:"/blog/v0.14",component:p("/blog/v0.14","934"),exact:!0},{path:"/blog/v0.15",component:p("/blog/v0.15","6da"),exact:!0},{path:"/blog/v0.16",component:p("/blog/v0.16","f88"),exact:!0},{path:"/blog/v0.17",component:p("/blog/v0.17","841"),exact:!0},{path:"/blog/v0.18",component:p("/blog/v0.18","825"),exact:!0},{path:"/blog/v0.19",component:p("/blog/v0.19","ad4"),exact:!0},{path:"/blog/v0.20",component:p("/blog/v0.20","311"),exact:!0},{path:"/blog/v0.21",component:p("/blog/v0.21","93d"),exact:!0},{path:"/blog/v0.22",component:p("/blog/v0.22","4f4"),exact:!0},{path:"/blog/v0.23",component:p("/blog/v0.23","d9e"),exact:!0},{path:"/blog/v0.24",component:p("/blog/v0.24","c6b"),exact:!0},{path:"/blog/v0.25",component:p("/blog/v0.25","616"),exact:!0},{path:"/blog/v0.26",component:p("/blog/v0.26","7ee"),exact:!0},{path:"/blog/vscode-extension",component:p("/blog/vscode-extension","c62"),exact:!0},{path:"/docs/tags",component:p("/docs/tags","a68"),exact:!0},{path:"/docs/tags/code",component:p("/docs/tags/code","d62"),exact:!0},{path:"/docs/tags/codegen",component:p("/docs/tags/codegen","e89"),exact:!0},{path:"/docs/tags/codeowners",component:p("/docs/tags/codeowners","c50"),exact:!0},{path:"/docs/tags/generator",component:p("/docs/tags/generator","4f0"),exact:!0},{path:"/docs/tags/git",component:p("/docs/tags/git","cd5"),exact:!0},{path:"/docs/tags/git-hooks",component:p("/docs/tags/git-hooks","0b5"),exact:!0},{path:"/docs/tags/hooks",component:p("/docs/tags/hooks","9fb"),exact:!0},{path:"/docs/tags/lang",component:p("/docs/tags/lang","0f7"),exact:!0},{path:"/docs/tags/mql",component:p("/docs/tags/mql","b60"),exact:!0},{path:"/docs/tags/owners",component:p("/docs/tags/owners","a7d"),exact:!0},{path:"/docs/tags/query",component:p("/docs/tags/query","532"),exact:!0},{path:"/docs/tags/scaffold",component:p("/docs/tags/scaffold","018"),exact:!0},{path:"/docs/tags/solid",component:p("/docs/tags/solid","870"),exact:!0},{path:"/docs/tags/solidjs",component:p("/docs/tags/solidjs","25a"),exact:!0},{path:"/docs/tags/template",component:p("/docs/tags/template","67d"),exact:!0},{path:"/docs/tags/vcs",component:p("/docs/tags/vcs","bb1"),exact:!0},{path:"/moon",component:p("/moon","b34"),exact:!0},{path:"/moonbase",component:p("/moonbase","1fb"),exact:!0},{path:"/proto",component:p("/proto","f87"),exact:!0},{path:"/search",component:p("/search","6e4"),exact:!0},{path:"/api",component:p("/api","cd8"),routes:[{path:"/api",component:p("/api","710"),exact:!0,sidebar:"api"},{path:"/api/report",component:p("/api/report","57a"),exact:!0,sidebar:"api",id:1},{path:"/api/report/function/formatDuration",component:p("/api/report/function/formatDuration","cd9"),exact:!0,sidebar:"api",id:44},{path:"/api/report/function/formatTime",component:p("/api/report/function/formatTime","3d7"),exact:!0,sidebar:"api",id:39},{path:"/api/report/function/getDurationInMillis",component:p("/api/report/function/getDurationInMillis","fa4"),exact:!0,sidebar:"api",id:36},{path:"/api/report/function/getIconForStatus",component:p("/api/report/function/getIconForStatus","f25"),exact:!0,sidebar:"api",id:4},{path:"/api/report/function/hasFailed",component:p("/api/report/function/hasFailed","72a"),exact:!0,sidebar:"api",id:7},{path:"/api/report/function/hasPassed",component:p("/api/report/function/hasPassed","c15"),exact:!0,sidebar:"api",id:10},{path:"/api/report/function/isFlaky",component:p("/api/report/function/isFlaky","d55"),exact:!0,sidebar:"api",id:13},{path:"/api/report/function/isSlow",component:p("/api/report/function/isSlow","5b3"),exact:!0,sidebar:"api",id:16},{path:"/api/report/function/prepareReportActions",component:p("/api/report/function/prepareReportActions","619"),exact:!0,sidebar:"api",id:25},{path:"/api/report/function/sortReport",component:p("/api/report/function/sortReport","7b7"),exact:!0,sidebar:"api",id:20},{path:"/api/report/interface/PreparedAction",component:p("/api/report/interface/PreparedAction","b0e"),exact:!0,sidebar:"api",id:29},{path:"/api/runtime",component:p("/api/runtime","e4a"),exact:!0,sidebar:"api",id:2},{path:"/api/runtime/function/getContext",component:p("/api/runtime/function/getContext","ba3"),exact:!0,sidebar:"api",id:47},{path:"/api/runtime/interface/RuntimeContext",component:p("/api/runtime/interface/RuntimeContext","b42"),exact:!0,sidebar:"api",id:49},{path:"/api/types",component:p("/api/types","a7c"),exact:!0,sidebar:"api",id:3},{path:"/api/types/interface/Action",component:p("/api/types/interface/Action","5f0"),exact:!0,sidebar:"api",id:180},{path:"/api/types/interface/ActionContext",component:p("/api/types/interface/ActionContext","bb7"),exact:!0,sidebar:"api",id:195},{path:"/api/types/interface/ActionNodeInstallDeps",component:p("/api/types/interface/ActionNodeInstallDeps","418"),exact:!0,sidebar:"api",id:221},{path:"/api/types/interface/ActionNodeInstallProjectDeps",component:p("/api/types/interface/ActionNodeInstallProjectDeps","48d"),exact:!0,sidebar:"api",id:226},{path:"/api/types/interface/ActionNodeRunTask",component:p("/api/types/interface/ActionNodeRunTask","80f"),exact:!0,sidebar:"api",id:232},{path:"/api/types/interface/ActionNodeSetupTool",component:p("/api/types/interface/ActionNodeSetupTool","ca5"),exact:!0,sidebar:"api",id:240},{path:"/api/types/interface/ActionNodeSyncProject",component:p("/api/types/interface/ActionNodeSyncProject","8d5"),exact:!0,sidebar:"api",id:245},{path:"/api/types/interface/ActionNodeSyncWorkspace",component:p("/api/types/interface/ActionNodeSyncWorkspace","e99"),exact:!0,sidebar:"api",id:251},{path:"/api/types/interface/Attempt",component:p("/api/types/interface/Attempt","556"),exact:!0,sidebar:"api",id:174},{path:"/api/types/interface/BinConfig",component:p("/api/types/interface/BinConfig","064"),exact:!0,sidebar:"api",id:627},{path:"/api/types/interface/CodeownersConfig",component:p("/api/types/interface/CodeownersConfig","c4e"),exact:!0,sidebar:"api",id:738},{path:"/api/types/interface/ConstraintsConfig",component:p("/api/types/interface/ConstraintsConfig","b7e"),exact:!0,sidebar:"api",id:742},{path:"/api/types/interface/DenoConfig",component:p("/api/types/interface/DenoConfig","ebb"),exact:!0,sidebar:"api",id:633},{path:"/api/types/interface/DependencyConfig",component:p("/api/types/interface/DependencyConfig","f20"),exact:!0,sidebar:"api",id:363},{path:"/api/types/interface/Duration",component:p("/api/types/interface/Duration","f37"),exact:!0,sidebar:"api",id:56},{path:"/api/types/interface/EventActionFinished",component:p("/api/types/interface/EventActionFinished","997"),exact:!0,sidebar:"api",id:85},{path:"/api/types/interface/EventActionStarted",component:p("/api/types/interface/EventActionStarted","44f"),exact:!0,sidebar:"api",id:81},{path:"/api/types/interface/EventDependenciesInstalled",component:p("/api/types/interface/EventDependenciesInstalled","a7d"),exact:!0,sidebar:"api",id:94},{path:"/api/types/interface/EventDependenciesInstalling",component:p("/api/types/interface/EventDependenciesInstalling","4d6"),exact:!0,sidebar:"api",id:90},{path:"/api/types/interface/EventPipelineAborted",component:p("/api/types/interface/EventPipelineAborted","1fe"),exact:!0,sidebar:"api",id:108},{path:"/api/types/interface/EventPipelineFinished",component:p("/api/types/interface/EventPipelineFinished","d46"),exact:!0,sidebar:"api",id:115},{path:"/api/types/interface/EventPipelineStarted",component:p("/api/types/interface/EventPipelineStarted","8fb"),exact:!0,sidebar:"api",id:111},{path:"/api/types/interface/EventProjectSynced",component:p("/api/types/interface/EventProjectSynced","c2f"),exact:!0,sidebar:"api",id:103},{path:"/api/types/interface/EventProjectSyncing",component:p("/api/types/interface/EventProjectSyncing","38d"),exact:!0,sidebar:"api",id:99},{path:"/api/types/interface/EventTargetOutputArchived",component:p("/api/types/interface/EventTargetOutputArchived","346"),exact:!0,sidebar:"api",id:137},{path:"/api/types/interface/EventTargetOutputArchiving",component:p("/api/types/interface/EventTargetOutputArchiving","e9e"),exact:!0,sidebar:"api",id:131},{path:"/api/types/interface/EventTargetOutputCacheCheck",component:p("/api/types/interface/EventTargetOutputCacheCheck","231"),exact:!0,sidebar:"api",id:157},{path:"/api/types/interface/EventTargetOutputHydrated",component:p("/api/types/interface/EventTargetOutputHydrated","1ee"),exact:!0,sidebar:"api",id:150},{path:"/api/types/interface/EventTargetOutputHydrating",component:p("/api/types/interface/EventTargetOutputHydrating","3ae"),exact:!0,sidebar:"api",id:144},{path:"/api/types/interface/EventTargetRan",component:p("/api/types/interface/EventTargetRan","f59"),exact:!0,sidebar:"api",id:127},{path:"/api/types/interface/EventTargetRunning",component:p("/api/types/interface/EventTargetRunning","42a"),exact:!0,sidebar:"api",id:124},{path:"/api/types/interface/EventToolInstalled",component:p("/api/types/interface/EventToolInstalled","ac8"),exact:!0,sidebar:"api",id:164},{path:"/api/types/interface/EventToolInstalling",component:p("/api/types/interface/EventToolInstalling","09f"),exact:!0,sidebar:"api",id:161},{path:"/api/types/interface/EventWorkspaceSynced",component:p("/api/types/interface/EventWorkspaceSynced","ca8"),exact:!0,sidebar:"api",id:170},{path:"/api/types/interface/ExperimentsConfig",component:p("/api/types/interface/ExperimentsConfig","9c3"),exact:!0,sidebar:"api",id:745},{path:"/api/types/interface/FileGroup",component:p("/api/types/interface/FileGroup","fbb"),exact:!0,sidebar:"api",id:255},{path:"/api/types/interface/GeneratorConfig",component:p("/api/types/interface/GeneratorConfig","4cc"),exact:!0,sidebar:"api",id:747},{path:"/api/types/interface/HasherConfig",component:p("/api/types/interface/HasherConfig","dce"),exact:!0,sidebar:"api",id:749},{path:"/api/types/interface/InheritedTasksConfig",component:p("/api/types/interface/InheritedTasksConfig","481"),exact:!0,sidebar:"api",id:488},{path:"/api/types/interface/NodeConfig",component:p("/api/types/interface/NodeConfig","c81"),exact:!0,sidebar:"api",id:648},{path:"/api/types/interface/NotifierConfig",component:p("/api/types/interface/NotifierConfig","acd"),exact:!0,sidebar:"api",id:756},{path:"/api/types/interface/NpmConfig",component:p("/api/types/interface/NpmConfig","448"),exact:!0,sidebar:"api",id:638},{path:"/api/types/interface/OwnersConfig",component:p("/api/types/interface/OwnersConfig","7b9"),exact:!0,sidebar:"api",id:370},{path:"/api/types/interface/PartialBinConfig",component:p("/api/types/interface/PartialBinConfig","5cf"),exact:!0,sidebar:"api",id:567},{path:"/api/types/interface/PartialCodeownersConfig",component:p("/api/types/interface/PartialCodeownersConfig","b6e"),exact:!0,sidebar:"api",id:684},{path:"/api/types/interface/PartialConstraintsConfig",component:p("/api/types/interface/PartialConstraintsConfig","a0e"),exact:!0,sidebar:"api",id:688},{path:"/api/types/interface/PartialDenoConfig",component:p("/api/types/interface/PartialDenoConfig","26c"),exact:!0,sidebar:"api",id:573},{path:"/api/types/interface/PartialDependencyConfig",component:p("/api/types/interface/PartialDependencyConfig","eb0"),exact:!0,sidebar:"api",id:311},{path:"/api/types/interface/PartialExperimentsConfig",component:p("/api/types/interface/PartialExperimentsConfig","f6b"),exact:!0,sidebar:"api",id:691},{path:"/api/types/interface/PartialGeneratorConfig",component:p("/api/types/interface/PartialGeneratorConfig","3f3"),exact:!0,sidebar:"api",id:693},{path:"/api/types/interface/PartialHasherConfig",component:p("/api/types/interface/PartialHasherConfig","b54"),exact:!0,sidebar:"api",id:697},{path:"/api/types/interface/PartialInheritedTasksConfig",component:p("/api/types/interface/PartialInheritedTasksConfig","c99"),exact:!0,sidebar:"api",id:450},{path:"/api/types/interface/PartialNodeConfig",component:p("/api/types/interface/PartialNodeConfig","1ba"),exact:!0,sidebar:"api",id:592},{path:"/api/types/interface/PartialNotifierConfig",component:p("/api/types/interface/PartialNotifierConfig","f70"),exact:!0,sidebar:"api",id:704},{path:"/api/types/interface/PartialNpmConfig",component:p("/api/types/interface/PartialNpmConfig","c1a"),exact:!0,sidebar:"api",id:580},{path:"/api/types/interface/PartialOwnersConfig",component:p("/api/types/interface/PartialOwnersConfig","10e"),exact:!0,sidebar:"api",id:319},{path:"/api/types/interface/PartialPnpmConfig",component:p("/api/types/interface/PartialPnpmConfig","9cc"),exact:!0,sidebar:"api",id:584},{path:"/api/types/interface/PartialProjectConfig",component:p("/api/types/interface/PartialProjectConfig","10d"),exact:!0,sidebar:"api",id:349},{path:"/api/types/interface/PartialProjectMetadataConfig",component:p("/api/types/interface/PartialProjectMetadataConfig","346"),exact:!0,sidebar:"api",id:325},{path:"/api/types/interface/PartialProjectToolchainCommonToolConfig",component:p("/api/types/interface/PartialProjectToolchainCommonToolConfig","542"),exact:!0,sidebar:"api",id:331},{path:"/api/types/interface/PartialProjectToolchainConfig",component:p("/api/types/interface/PartialProjectToolchainConfig","86b"),exact:!0,sidebar:"api",id:338},{path:"/api/types/interface/PartialProjectToolchainTypeScriptConfig",component:p("/api/types/interface/PartialProjectToolchainTypeScriptConfig","4a7"),exact:!0,sidebar:"api",id:333},{path:"/api/types/interface/PartialProjectWorkspaceConfig",component:p("/api/types/interface/PartialProjectWorkspaceConfig","f17"),exact:!0,sidebar:"api",id:347},{path:"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig",component:p("/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig","195"),exact:!0,sidebar:"api",id:343},{path:"/api/types/interface/PartialRunnerConfig",component:p("/api/types/interface/PartialRunnerConfig","0c7"),exact:!0,sidebar:"api",id:710},{path:"/api/types/interface/PartialRustConfig",component:p("/api/types/interface/PartialRustConfig","0c2"),exact:!0,sidebar:"api",id:607},{path:"/api/types/interface/PartialTaskConfig",component:p("/api/types/interface/PartialTaskConfig","79a"),exact:!0,sidebar:"api",id:438},{path:"/api/types/interface/PartialTaskOptionsConfig",component:p("/api/types/interface/PartialTaskOptionsConfig","e8f"),exact:!0,sidebar:"api",id:418},{path:"/api/types/interface/PartialTemplateConfig",component:p("/api/types/interface/PartialTemplateConfig","9e8"),exact:!0,sidebar:"api",id:521},{path:"/api/types/interface/PartialTemplateFrontmatterConfig",component:p("/api/types/interface/PartialTemplateFrontmatterConfig","8e5"),exact:!0,sidebar:"api",id:526},{path:"/api/types/interface/PartialTemplateVariableBoolSetting",component:p("/api/types/interface/PartialTemplateVariableBoolSetting","38b"),exact:!0,sidebar:"api",id:495},{path:"/api/types/interface/PartialTemplateVariableEnumSetting",component:p("/api/types/interface/PartialTemplateVariableEnumSetting","23b"),exact:!0,sidebar:"api",id:504},{path:"/api/types/interface/PartialTemplateVariableEnumValueConfig",component:p("/api/types/interface/PartialTemplateVariableEnumValueConfig","442"),exact:!0,sidebar:"api",id:500},{path:"/api/types/interface/PartialTemplateVariableNumberSetting",component:p("/api/types/interface/PartialTemplateVariableNumberSetting","a8c"),exact:!0,sidebar:"api",id:510},{path:"/api/types/interface/PartialTemplateVariableStringSetting",component:p("/api/types/interface/PartialTemplateVariableStringSetting","1a4"),exact:!0,sidebar:"api",id:515},{path:"/api/types/interface/PartialToolchainConfig",component:p("/api/types/interface/PartialToolchainConfig","759"),exact:!0,sidebar:"api",id:620},{path:"/api/types/interface/PartialTypeScriptConfig",component:p("/api/types/interface/PartialTypeScriptConfig","854"),exact:!0,sidebar:"api",id:612},{path:"/api/types/interface/PartialVcsConfig",component:p("/api/types/interface/PartialVcsConfig","75a"),exact:!0,sidebar:"api",id:717},{path:"/api/types/interface/PartialWorkspaceConfig",component:p("/api/types/interface/PartialWorkspaceConfig","b57"),exact:!0,sidebar:"api",id:724},{path:"/api/types/interface/PartialWorkspaceProjectsConfig",component:p("/api/types/interface/PartialWorkspaceProjectsConfig","242"),exact:!0,sidebar:"api",id:706},{path:"/api/types/interface/PartialYarnConfig",component:p("/api/types/interface/PartialYarnConfig","91c"),exact:!0,sidebar:"api",id:588},{path:"/api/types/interface/PnpmConfig",component:p("/api/types/interface/PnpmConfig","e25"),exact:!0,sidebar:"api",id:641},{path:"/api/types/interface/Project",component:p("/api/types/interface/Project","817"),exact:!0,sidebar:"api",id:292},{path:"/api/types/interface/ProjectConfig",component:p("/api/types/interface/ProjectConfig","0f3"),exact:!0,sidebar:"api",id:399},{path:"/api/types/interface/ProjectMetadataConfig",component:p("/api/types/interface/ProjectMetadataConfig","4b0"),exact:!0,sidebar:"api",id:376},{path:"/api/types/interface/ProjectToolchainCommonToolConfig",component:p("/api/types/interface/ProjectToolchainCommonToolConfig","832"),exact:!0,sidebar:"api",id:382},{path:"/api/types/interface/ProjectToolchainConfig",component:p("/api/types/interface/ProjectToolchainConfig","5f0"),exact:!0,sidebar:"api",id:389},{path:"/api/types/interface/ProjectToolchainTypeScriptConfig",component:p("/api/types/interface/ProjectToolchainTypeScriptConfig","481"),exact:!0,sidebar:"api",id:384},{path:"/api/types/interface/ProjectWorkspaceConfig",component:p("/api/types/interface/ProjectWorkspaceConfig","1bf"),exact:!0,sidebar:"api",id:397},{path:"/api/types/interface/ProjectWorkspaceInheritedTasksConfig",component:p("/api/types/interface/ProjectWorkspaceInheritedTasksConfig","503"),exact:!0,sidebar:"api",id:393},{path:"/api/types/interface/ProviderEnvironment",component:p("/api/types/interface/ProviderEnvironment","390"),exact:!0,sidebar:"api",id:63},{path:"/api/types/interface/RunnerConfig",component:p("/api/types/interface/RunnerConfig","937"),exact:!0,sidebar:"api",id:762},{path:"/api/types/interface/RunReport",component:p("/api/types/interface/RunReport","0da"),exact:!0,sidebar:"api",id:204},{path:"/api/types/interface/Runtime",component:p("/api/types/interface/Runtime","3de"),exact:!0,sidebar:"api",id:59},{path:"/api/types/interface/RustConfig",component:p("/api/types/interface/RustConfig","3b7"),exact:!0,sidebar:"api",id:663},{path:"/api/types/interface/TargetState",component:p("/api/types/interface/TargetState","d71"),exact:!0,sidebar:"api",id:192},{path:"/api/types/interface/Task",component:p("/api/types/interface/Task","753"),exact:!0,sidebar:"api",id:275},{path:"/api/types/interface/TaskConfig",component:p("/api/types/interface/TaskConfig","2f8"),exact:!0,sidebar:"api",id:476},{path:"/api/types/interface/TaskOptions",component:p("/api/types/interface/TaskOptions","764"),exact:!0,sidebar:"api",id:259},{path:"/api/types/interface/TaskOptionsConfig",component:p("/api/types/interface/TaskOptionsConfig","641"),exact:!0,sidebar:"api",id:458},{path:"/api/types/interface/TemplateConfig",component:p("/api/types/interface/TemplateConfig","920"),exact:!0,sidebar:"api",id:557},{path:"/api/types/interface/TemplateFrontmatterConfig",component:p("/api/types/interface/TemplateFrontmatterConfig","899"),exact:!0,sidebar:"api",id:562},{path:"/api/types/interface/TemplateVariableBoolSetting",component:p("/api/types/interface/TemplateVariableBoolSetting","4ef"),exact:!0,sidebar:"api",id:531},{path:"/api/types/interface/TemplateVariableEnumSetting",component:p("/api/types/interface/TemplateVariableEnumSetting","45d"),exact:!0,sidebar:"api",id:540},{path:"/api/types/interface/TemplateVariableEnumValueConfig",component:p("/api/types/interface/TemplateVariableEnumValueConfig","065"),exact:!0,sidebar:"api",id:536},{path:"/api/types/interface/TemplateVariableNumberSetting",component:p("/api/types/interface/TemplateVariableNumberSetting","284"),exact:!0,sidebar:"api",id:546},{path:"/api/types/interface/TemplateVariableStringSetting",component:p("/api/types/interface/TemplateVariableStringSetting","bf1"),exact:!0,sidebar:"api",id:551},{path:"/api/types/interface/ToolchainConfig",component:p("/api/types/interface/ToolchainConfig","6b5"),exact:!0,sidebar:"api",id:676},{path:"/api/types/interface/TypeScriptConfig",component:p("/api/types/interface/TypeScriptConfig","c60"),exact:!0,sidebar:"api",id:668},{path:"/api/types/interface/VcsConfig",component:p("/api/types/interface/VcsConfig","e81"),exact:!0,sidebar:"api",id:767},{path:"/api/types/interface/WebhookPayload",component:p("/api/types/interface/WebhookPayload","0a8"),exact:!0,sidebar:"api",id:72},{path:"/api/types/interface/WorkspaceConfig",component:p("/api/types/interface/WorkspaceConfig","988"),exact:!0,sidebar:"api",id:774},{path:"/api/types/interface/WorkspaceProjectsConfig",component:p("/api/types/interface/WorkspaceProjectsConfig","31a"),exact:!0,sidebar:"api",id:758},{path:"/api/types/interface/YarnConfig",component:p("/api/types/interface/YarnConfig","e2e"),exact:!0,sidebar:"api",id:644}]},{path:"/docs",component:p("/docs","489"),routes:[{path:"/docs",component:p("/docs","80c"),exact:!0,sidebar:"docs"},{path:"/docs/cheat-sheet",component:p("/docs/cheat-sheet","53d"),exact:!0,sidebar:"docs"},{path:"/docs/commands",component:p("/docs/commands","993"),exact:!0,sidebar:"docs"},{path:"/docs/commands/action-graph",component:p("/docs/commands/action-graph","d0e"),exact:!0,sidebar:"docs"},{path:"/docs/commands/bin",component:p("/docs/commands/bin","e39"),exact:!0,sidebar:"docs"},{path:"/docs/commands/check",component:p("/docs/commands/check","cf6"),exact:!0,sidebar:"docs"},{path:"/docs/commands/ci",component:p("/docs/commands/ci","f74"),exact:!0,sidebar:"docs"},{path:"/docs/commands/clean",component:p("/docs/commands/clean","9b0"),exact:!0,sidebar:"docs"},{path:"/docs/commands/completions",component:p("/docs/commands/completions","f1b"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker",component:p("/docs/commands/docker","4ed"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker/prune",component:p("/docs/commands/docker/prune","fc8"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker/scaffold",component:p("/docs/commands/docker/scaffold","d55"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker/setup",component:p("/docs/commands/docker/setup","2af"),exact:!0,sidebar:"docs"},{path:"/docs/commands/generate",component:p("/docs/commands/generate","0ff"),exact:!0,sidebar:"docs"},{path:"/docs/commands/init",component:p("/docs/commands/init","28a"),exact:!0,sidebar:"docs"},{path:"/docs/commands/migrate",component:p("/docs/commands/migrate","4df"),exact:!0,sidebar:"docs"},{path:"/docs/commands/migrate/from-package-json",component:p("/docs/commands/migrate/from-package-json","869"),exact:!0,sidebar:"docs"},{path:"/docs/commands/migrate/from-turborepo",component:p("/docs/commands/migrate/from-turborepo","36a"),exact:!0,sidebar:"docs"},{path:"/docs/commands/overview",component:p("/docs/commands/overview","c3f"),exact:!0,sidebar:"docs"},{path:"/docs/commands/project",component:p("/docs/commands/project","225"),exact:!0,sidebar:"docs"},{path:"/docs/commands/project-graph",component:p("/docs/commands/project-graph","49c"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query",component:p("/docs/commands/query","0ed"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/hash",component:p("/docs/commands/query/hash","390"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/hash-diff",component:p("/docs/commands/query/hash-diff","f4c"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/projects",component:p("/docs/commands/query/projects","9e0"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/tasks",component:p("/docs/commands/query/tasks","d45"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/touched-files",component:p("/docs/commands/query/touched-files","ea7"),exact:!0,sidebar:"docs"},{path:"/docs/commands/run",component:p("/docs/commands/run","a21"),exact:!0,sidebar:"docs"},{path:"/docs/commands/setup",component:p("/docs/commands/setup","187"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync",component:p("/docs/commands/sync","193"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync/codeowners",component:p("/docs/commands/sync/codeowners","49c"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync/hooks",component:p("/docs/commands/sync/hooks","885"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync/projects",component:p("/docs/commands/sync/projects","7d5"),exact:!0,sidebar:"docs"},{path:"/docs/commands/task",component:p("/docs/commands/task","d57"),exact:!0,sidebar:"docs"},{path:"/docs/commands/teardown",component:p("/docs/commands/teardown","b70"),exact:!0,sidebar:"docs"},{path:"/docs/commands/upgrade",component:p("/docs/commands/upgrade","a78"),exact:!0,sidebar:"docs"},{path:"/docs/comparison",component:p("/docs/comparison","6c8"),exact:!0,sidebar:"docs"},{path:"/docs/concepts",component:p("/docs/concepts","04b"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/cache",component:p("/docs/concepts/cache","0e8"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/file-group",component:p("/docs/concepts/file-group","759"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/file-pattern",component:p("/docs/concepts/file-pattern","1ab"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/project",component:p("/docs/concepts/project","6bd"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/query-lang",component:p("/docs/concepts/query-lang","5d7"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/target",component:p("/docs/concepts/target","04a"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/task",component:p("/docs/concepts/task","85c"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/task-inheritance",component:p("/docs/concepts/task-inheritance","c5a"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/token",component:p("/docs/concepts/token","3e2"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/toolchain",component:p("/docs/concepts/toolchain","26e"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/workspace",component:p("/docs/concepts/workspace","3e1"),exact:!0,sidebar:"docs"},{path:"/docs/config",component:p("/docs/config","c27"),exact:!0,sidebar:"docs"},{path:"/docs/config/project",component:p("/docs/config/project","7fc"),exact:!0,sidebar:"docs"},{path:"/docs/config/tasks",component:p("/docs/config/tasks","7d1"),exact:!0,sidebar:"docs"},{path:"/docs/config/template",component:p("/docs/config/template","eeb"),exact:!0,sidebar:"docs"},{path:"/docs/config/toolchain",component:p("/docs/config/toolchain","a71"),exact:!0,sidebar:"docs"},{path:"/docs/config/workspace",component:p("/docs/config/workspace","ceb"),exact:!0,sidebar:"docs"},{path:"/docs/create-project",component:p("/docs/create-project","2c7"),exact:!0,sidebar:"docs"},{path:"/docs/create-task",component:p("/docs/create-task","c85"),exact:!0,sidebar:"docs"},{path:"/docs/editors",component:p("/docs/editors","c15"),exact:!0,sidebar:"docs"},{path:"/docs/editors/vscode",component:p("/docs/editors/vscode","501"),exact:!0,sidebar:"docs"},{path:"/docs/faq",component:p("/docs/faq","fe9"),exact:!0,sidebar:"docs"},{path:"/docs/guides/ci",component:p("/docs/guides/ci","d5d"),exact:!0,sidebar:"guides"},{path:"/docs/guides/codegen",component:p("/docs/guides/codegen","527"),exact:!0,sidebar:"guides"},{path:"/docs/guides/codeowners",component:p("/docs/guides/codeowners","598"),exact:!0,sidebar:"guides"},{path:"/docs/guides/debug-task",component:p("/docs/guides/debug-task","fe5"),exact:!0,sidebar:"guides"},{path:"/docs/guides/docker",component:p("/docs/guides/docker","578"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/angular",component:p("/docs/guides/examples/angular","3ac"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/astro",component:p("/docs/guides/examples/astro","810"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/eslint",component:p("/docs/guides/examples/eslint","161"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/jest",component:p("/docs/guides/examples/jest","789"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/nest",component:p("/docs/guides/examples/nest","0d4"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/next",component:p("/docs/guides/examples/next","d2c"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/nuxt",component:p("/docs/guides/examples/nuxt","475"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/packemon",component:p("/docs/guides/examples/packemon","c08"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/prettier",component:p("/docs/guides/examples/prettier","fda"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/react",component:p("/docs/guides/examples/react","7da"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/remix",component:p("/docs/guides/examples/remix","a9b"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/solid",component:p("/docs/guides/examples/solid","00c"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/storybook",component:p("/docs/guides/examples/storybook","155"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/sveltekit",component:p("/docs/guides/examples/sveltekit","0c7"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/typescript",component:p("/docs/guides/examples/typescript","e4a"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/vite",component:p("/docs/guides/examples/vite","593"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/vue",component:p("/docs/guides/examples/vue","5c0"),exact:!0,sidebar:"guides"},{path:"/docs/guides/javascript/deno-handbook",component:p("/docs/guides/javascript/deno-handbook","ef8"),exact:!0,sidebar:"guides"},{path:"/docs/guides/javascript/node-handbook",component:p("/docs/guides/javascript/node-handbook","f9e"),exact:!0,sidebar:"guides"},{path:"/docs/guides/javascript/typescript-eslint",component:p("/docs/guides/javascript/typescript-eslint","3a8"),exact:!0},{path:"/docs/guides/javascript/typescript-project-refs",component:p("/docs/guides/javascript/typescript-project-refs","e9d"),exact:!0,sidebar:"guides"},{path:"/docs/guides/node/examples",component:p("/docs/guides/node/examples","dd3"),exact:!0,sidebar:"guides"},{path:"/docs/guides/offline-mode",component:p("/docs/guides/offline-mode","422"),exact:!0,sidebar:"guides"},{path:"/docs/guides/open-source",component:p("/docs/guides/open-source","339"),exact:!0,sidebar:"guides"},{path:"/docs/guides/profile",component:p("/docs/guides/profile","b9d"),exact:!0,sidebar:"guides"},{path:"/docs/guides/remote-cache",component:p("/docs/guides/remote-cache","7a9"),exact:!0,sidebar:"guides"},{path:"/docs/guides/root-project",component:p("/docs/guides/root-project","272"),exact:!0,sidebar:"guides"},{path:"/docs/guides/rust/handbook",component:p("/docs/guides/rust/handbook","b00"),exact:!0,sidebar:"guides"},{path:"/docs/guides/sharing-config",component:p("/docs/guides/sharing-config","554"),exact:!0,sidebar:"guides"},{path:"/docs/guides/vcs-hooks",component:p("/docs/guides/vcs-hooks","c03"),exact:!0,sidebar:"guides"},{path:"/docs/guides/webhooks",component:p("/docs/guides/webhooks","b9d"),exact:!0,sidebar:"guides"},{path:"/docs/how-it-works",component:p("/docs/how-it-works","837"),exact:!0,sidebar:"docs"},{path:"/docs/how-it-works/action-graph",component:p("/docs/how-it-works/action-graph","f15"),exact:!0,sidebar:"docs"},{path:"/docs/how-it-works/languages",component:p("/docs/how-it-works/languages","165"),exact:!0,sidebar:"docs"},{path:"/docs/how-it-works/project-graph",component:p("/docs/how-it-works/project-graph","6b7"),exact:!0,sidebar:"docs"},{path:"/docs/install",component:p("/docs/install","7a2"),exact:!0,sidebar:"docs"},{path:"/docs/migrate-to-moon",component:p("/docs/migrate-to-moon","aa1"),exact:!0,sidebar:"docs"},{path:"/docs/proto",component:p("/docs/proto","7be"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/add-plugin",component:p("/docs/proto/commands/add-plugin","bda"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/alias",component:p("/docs/proto/commands/alias","8ad"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/bin",component:p("/docs/proto/commands/bin","dc5"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/clean",component:p("/docs/proto/commands/clean","740"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/completions",component:p("/docs/proto/commands/completions","87c"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/install",component:p("/docs/proto/commands/install","f7b"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/install-global",component:p("/docs/proto/commands/install-global","59f"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/list",component:p("/docs/proto/commands/list","50b"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/list-global",component:p("/docs/proto/commands/list-global","fb9"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/list-remote",component:p("/docs/proto/commands/list-remote","0b7"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/outdated",component:p("/docs/proto/commands/outdated","dba"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/pin",component:p("/docs/proto/commands/pin","65a"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/plugins",component:p("/docs/proto/commands/plugins","9c9"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/remove-plugin",component:p("/docs/proto/commands/remove-plugin","570"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/run",component:p("/docs/proto/commands/run","a65"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/setup",component:p("/docs/proto/commands/setup","735"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/tools",component:p("/docs/proto/commands/tools","092"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/unalias",component:p("/docs/proto/commands/unalias","734"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/uninstall",component:p("/docs/proto/commands/uninstall","bbc"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/uninstall-global",component:p("/docs/proto/commands/uninstall-global","10a"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/upgrade",component:p("/docs/proto/commands/upgrade","edc"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/use",component:p("/docs/proto/commands/use","966"),exact:!0,sidebar:"proto"},{path:"/docs/proto/config",component:p("/docs/proto/config","2e0"),exact:!0,sidebar:"proto"},{path:"/docs/proto/detection",component:p("/docs/proto/detection","406"),exact:!0,sidebar:"proto"},{path:"/docs/proto/faq",component:p("/docs/proto/faq","fc6"),exact:!0,sidebar:"proto"},{path:"/docs/proto/install",component:p("/docs/proto/install","abd"),exact:!0,sidebar:"proto"},{path:"/docs/proto/plugins",component:p("/docs/proto/plugins","49c"),exact:!0,sidebar:"proto"},{path:"/docs/proto/toml-plugin",component:p("/docs/proto/toml-plugin","33c"),exact:!0,sidebar:"proto"},{path:"/docs/proto/tools",component:p("/docs/proto/tools","6c5"),exact:!0,sidebar:"proto"},{path:"/docs/proto/wasm-plugin",component:p("/docs/proto/wasm-plugin","4c5"),exact:!0,sidebar:"proto"},{path:"/docs/run-task",component:p("/docs/run-task","db3"),exact:!0,sidebar:"docs"},{path:"/docs/setup-toolchain",component:p("/docs/setup-toolchain","ee9"),exact:!0,sidebar:"docs"},{path:"/docs/setup-workspace",component:p("/docs/setup-workspace","34e"),exact:!0,sidebar:"docs"},{path:"/docs/terminology",component:p("/docs/terminology","0ff"),exact:!0,sidebar:"docs"}]},{path:"/",component:p("/","b14"),exact:!0},{path:"*",component:p("*")}]},53971:(e,t,n)=>{"use strict";if(n.r(t),"undefined"!=typeof document){const a=document.documentElement,o=document.querySelector("#__docusaurus");function r(){"dark"===a.dataset.theme?o.classList.add("dark"):"light"===a.dataset.theme&&o.classList.remove("dark")}document.addEventListener("DOMContentLoaded",r),window.history.pushState=new Proxy(window.history.pushState,{apply:(e,t,n)=>{r(),e.apply(t,n)}}),window.history.replaceState=new Proxy(window.history.replaceState,{apply:(e,t,n)=>{r(),e.apply(t,n)}});new MutationObserver((e=>{for(const t of e)"attributes"===t.type&&r()})).observe(a,{attributeFilter:["data-theme"],attributes:!0})}},76911:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var a=n(25773),o=n(27378),r=n(40624);function i(e){let{className:t,disabled:n,label:i,href:s,onClick:c,id:l,size:u}=e;const d=!!s,p=d?"a":"button";return o.createElement(p,(0,a.Z)({className:(0,r.Z)("border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600",n?"opacity-60":"hover:text-white hover:bg-blurple-500 dark:hover:bg-purple-500 cursor-pointer","lg"===u?"py-2":"py-1",t),disabled:n,id:l},d?{href:s,target:"_blank"}:{onClick:c,type:"button"}),i)}},31792:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Rn});var a=n(27378),o=n(40624);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var a,o,r=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(r.push(a.value),!t||r.length!==t);i=!0);}catch(c){s=!0,o=c}finally{try{i||null==n.return||n.return()}finally{if(s)throw o}}return r}(e,t)||p(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var m=function(){},g={},b={},h=null,v={mark:m,measure:m};try{"undefined"!=typeof window&&(g=window),"undefined"!=typeof document&&(b=document),"undefined"!=typeof MutationObserver&&(h=MutationObserver),"undefined"!=typeof performance&&(v=performance)}catch(Dn){}var y,x,_,k,w,E=(g.navigator||{}).userAgent,S=void 0===E?"":E,C=g,T=b,P=h,A=v,N=(C.document,!!T.documentElement&&!!T.head&&"function"==typeof T.addEventListener&&"function"==typeof T.createElement),O=~S.indexOf("MSIE")||~S.indexOf("Trident/"),j="svg-inline--fa",L="data-fa-i2svg",M="data-fa-pseudo-element",I="data-prefix",R="data-icon",D="fontawesome-i2svg",z=["HTML","HEAD","STYLE","SCRIPT"],F=function(){try{return!0}catch(Dn){return!1}}(),B="classic",$="sharp",U=[B,$];function H(e){return new Proxy(e,{get:function(e,t){return t in e?e[t]:e.classic}})}var V=H((l(y={},B,{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fad:"duotone","fa-duotone":"duotone",fab:"brands","fa-brands":"brands",fak:"kit","fa-kit":"kit"}),l(y,$,{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light"}),y)),Z=H((l(x={},B,{solid:"fas",regular:"far",light:"fal",thin:"fat",duotone:"fad",brands:"fab",kit:"fak"}),l(x,$,{solid:"fass",regular:"fasr",light:"fasl"}),x)),q=H((l(_={},B,{fab:"fa-brands",fad:"fa-duotone",fak:"fa-kit",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"}),l(_,$,{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light"}),_)),W=H((l(k={},B,{"fa-brands":"fab","fa-duotone":"fad","fa-kit":"fak","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"}),l(k,$,{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl"}),k)),G=/fa(s|r|l|t|d|b|k|ss|sr|sl)?[\-\ ]/,Y="fa-layers-text",K=/Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i,Q=H((l(w={},B,{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"}),l(w,$,{900:"fass",400:"fasr",300:"fasl"}),w)),X=[1,2,3,4,5,6,7,8,9,10],J=X.concat([11,12,13,14,15,16,17,18,19,20]),ee=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],te="duotone-group",ne="swap-opacity",ae="primary",oe="secondary",re=new Set;Object.keys(Z.classic).map(re.add.bind(re)),Object.keys(Z.sharp).map(re.add.bind(re));var ie=[].concat(U,d(re),["2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",te,ne,ae,oe]).concat(X.map((function(e){return"".concat(e,"x")}))).concat(J.map((function(e){return"w-".concat(e)}))),se=C.FontAwesomeConfig||{};if(T&&"function"==typeof T.querySelector){[["data-family-prefix","familyPrefix"],["data-css-prefix","cssPrefix"],["data-family-default","familyDefault"],["data-style-default","styleDefault"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach((function(e){var t=u(e,2),n=t[0],a=t[1],o=function(e){return""===e||"false"!==e&&("true"===e||e)}(function(e){var t=T.querySelector("script["+e+"]");if(t)return t.getAttribute(e)}(n));null!=o&&(se[a]=o)}))}var ce={styleDefault:"solid",familyDefault:"classic",cssPrefix:"fa",replacementClass:j,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0};se.familyPrefix&&(se.cssPrefix=se.familyPrefix);var le=i(i({},ce),se);le.autoReplaceSvg||(le.observeMutations=!1);var ue={};Object.keys(ce).forEach((function(e){Object.defineProperty(ue,e,{enumerable:!0,set:function(t){le[e]=t,de.forEach((function(e){return e(ue)}))},get:function(){return le[e]}})})),Object.defineProperty(ue,"familyPrefix",{enumerable:!0,set:function(e){le.cssPrefix=e,de.forEach((function(e){return e(ue)}))},get:function(){return le.cssPrefix}}),C.FontAwesomeConfig=ue;var de=[];var pe=16,fe={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function me(){for(var e=12,t="";e-- >0;)t+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[62*Math.random()|0];return t}function ge(e){for(var t=[],n=(e||[]).length>>>0;n--;)t[n]=e[n];return t}function be(e){return e.classList?ge(e.classList):(e.getAttribute("class")||"").split(" ").filter((function(e){return e}))}function he(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function ve(e){return Object.keys(e||{}).reduce((function(t,n){return t+"".concat(n,": ").concat(e[n].trim(),";")}),"")}function ye(e){return e.size!==fe.size||e.x!==fe.x||e.y!==fe.y||e.rotate!==fe.rotate||e.flipX||e.flipY}function xe(){var e="fa",t=j,n=ue.cssPrefix,a=ue.replacementClass,o=':root, :host {\n --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid";\n --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular";\n --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light";\n --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin";\n --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n overflow: visible;\n box-sizing: content-box;\n}\n\n.svg-inline--fa {\n display: var(--fa-display, inline-block);\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-li {\n width: var(--fa-li-width, 2em);\n top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: var(--fa-counter-background-color, #ff253a);\n border-radius: var(--fa-counter-border-radius, 1em);\n box-sizing: border-box;\n color: var(--fa-inverse, #fff);\n line-height: var(--fa-counter-line-height, 1);\n max-width: var(--fa-counter-max-width, 5em);\n min-width: var(--fa-counter-min-width, 1.5em);\n overflow: hidden;\n padding: var(--fa-counter-padding, 0.25em 0.5em);\n right: var(--fa-right, 0);\n text-overflow: ellipsis;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-counter-scale, 0.25));\n transform: scale(var(--fa-counter-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: var(--fa-bottom, 0);\n right: var(--fa-right, 0);\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: var(--fa-bottom, 0);\n left: var(--fa-left, 0);\n right: auto;\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n top: var(--fa-top, 0);\n right: var(--fa-right, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: var(--fa-left, 0);\n right: auto;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(var(--fa-li-width, 2em) * -1);\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n -webkit-animation-name: fa-beat;\n animation-name: fa-beat;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n -webkit-animation-name: fa-bounce;\n animation-name: fa-bounce;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n -webkit-animation-name: fa-fade;\n animation-name: fa-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n -webkit-animation-name: fa-beat-fade;\n animation-name: fa-beat-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n -webkit-animation-name: fa-flip;\n animation-name: fa-flip;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n -webkit-animation-name: fa-shake;\n animation-name: fa-shake;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 2s);\n animation-duration: var(--fa-animation-duration, 2s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n -webkit-animation-delay: -1ms;\n animation-delay: -1ms;\n -webkit-animation-duration: 1ms;\n animation-duration: 1ms;\n -webkit-animation-iteration-count: 1;\n animation-iteration-count: 1;\n -webkit-transition-delay: 0s;\n transition-delay: 0s;\n -webkit-transition-duration: 0s;\n transition-duration: 0s;\n }\n}\n@-webkit-keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@-webkit-keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@-webkit-keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@-webkit-keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@-webkit-keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@-webkit-keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n -webkit-transform: rotate(var(--fa-rotate-angle, none));\n transform: rotate(var(--fa-rotate-angle, none));\n}\n\n.fa-stack {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n color: var(--fa-inverse, #fff);\n}';if(n!==e||a!==t){var r=new RegExp("\\.".concat(e,"\\-"),"g"),i=new RegExp("\\--".concat(e,"\\-"),"g"),s=new RegExp("\\.".concat(t),"g");o=o.replace(r,".".concat(n,"-")).replace(i,"--".concat(n,"-")).replace(s,".".concat(a))}return o}var _e=!1;function ke(){ue.autoAddCss&&!_e&&(!function(e){if(e&&N){var t=T.createElement("style");t.setAttribute("type","text/css"),t.innerHTML=e;for(var n=T.head.childNodes,a=null,o=n.length-1;o>-1;o--){var r=n[o],i=(r.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(i)>-1&&(a=r)}T.head.insertBefore(t,a)}}(xe()),_e=!0)}var we={mixout:function(){return{dom:{css:xe,insertCss:ke}}},hooks:function(){return{beforeDOMElementCreation:function(){ke()},beforeI2svg:function(){ke()}}}},Ee=C||{};Ee.___FONT_AWESOME___||(Ee.___FONT_AWESOME___={}),Ee.___FONT_AWESOME___.styles||(Ee.___FONT_AWESOME___.styles={}),Ee.___FONT_AWESOME___.hooks||(Ee.___FONT_AWESOME___.hooks={}),Ee.___FONT_AWESOME___.shims||(Ee.___FONT_AWESOME___.shims=[]);var Se=Ee.___FONT_AWESOME___,Ce=[],Te=!1;function Pe(e){N&&(Te?setTimeout(e,0):Ce.push(e))}function Ae(e){var t=e.tag,n=e.attributes,a=void 0===n?{}:n,o=e.children,r=void 0===o?[]:o;return"string"==typeof e?he(e):"<".concat(t," ").concat(function(e){return Object.keys(e||{}).reduce((function(t,n){return t+"".concat(n,'="').concat(he(e[n]),'" ')}),"").trim()}(a),">").concat(r.map(Ae).join(""),"</").concat(t,">")}function Ne(e,t,n){if(e&&e[t]&&e[t][n])return{prefix:t,iconName:n,icon:e[t][n]}}N&&((Te=(T.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(T.readyState))||T.addEventListener("DOMContentLoaded",(function e(){T.removeEventListener("DOMContentLoaded",e),Te=1,Ce.map((function(e){return e()}))})));var Oe=function(e,t,n,a){var o,r,i,s=Object.keys(e),c=s.length,l=void 0!==a?function(e,t){return function(n,a,o,r){return e.call(t,n,a,o,r)}}(t,a):t;for(void 0===n?(o=1,i=e[s[0]]):(o=0,i=n);o<c;o++)i=l(i,e[r=s[o]],r,e);return i};function je(e){var t=function(e){for(var t=[],n=0,a=e.length;n<a;){var o=e.charCodeAt(n++);if(o>=55296&&o<=56319&&n<a){var r=e.charCodeAt(n++);56320==(64512&r)?t.push(((1023&o)<<10)+(1023&r)+65536):(t.push(o),n--)}else t.push(o)}return t}(e);return 1===t.length?t[0].toString(16):null}function Le(e){return Object.keys(e).reduce((function(t,n){var a=e[n];return!!a.icon?t[a.iconName]=a.icon:t[n]=a,t}),{})}function Me(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n.skipHooks,o=void 0!==a&&a,r=Le(t);"function"!=typeof Se.hooks.addPack||o?Se.styles[e]=i(i({},Se.styles[e]||{}),r):Se.hooks.addPack(e,Le(t)),"fas"===e&&Me("fa",t)}var Ie,Re,De,ze=Se.styles,Fe=Se.shims,Be=(l(Ie={},B,Object.values(q.classic)),l(Ie,$,Object.values(q.sharp)),Ie),$e=null,Ue={},He={},Ve={},Ze={},qe={},We=(l(Re={},B,Object.keys(V.classic)),l(Re,$,Object.keys(V.sharp)),Re);function Ge(e,t){var n,a=t.split("-"),o=a[0],r=a.slice(1).join("-");return o!==e||""===r||(n=r,~ie.indexOf(n))?null:r}var Ye,Ke=function(){var e=function(e){return Oe(ze,(function(t,n,a){return t[a]=Oe(n,e,{}),t}),{})};Ue=e((function(e,t,n){(t[3]&&(e[t[3]]=n),t[2])&&t[2].filter((function(e){return"number"==typeof e})).forEach((function(t){e[t.toString(16)]=n}));return e})),He=e((function(e,t,n){(e[n]=n,t[2])&&t[2].filter((function(e){return"string"==typeof e})).forEach((function(t){e[t]=n}));return e})),qe=e((function(e,t,n){var a=t[2];return e[n]=n,a.forEach((function(t){e[t]=n})),e}));var t="far"in ze||ue.autoFetchSvg,n=Oe(Fe,(function(e,n){var a=n[0],o=n[1],r=n[2];return"far"!==o||t||(o="fas"),"string"==typeof a&&(e.names[a]={prefix:o,iconName:r}),"number"==typeof a&&(e.unicodes[a.toString(16)]={prefix:o,iconName:r}),e}),{names:{},unicodes:{}});Ve=n.names,Ze=n.unicodes,$e=tt(ue.styleDefault,{family:ue.familyDefault})};function Qe(e,t){return(Ue[e]||{})[t]}function Xe(e,t){return(qe[e]||{})[t]}function Je(e){return Ve[e]||{prefix:null,iconName:null}}function et(){return $e}Ye=function(e){$e=tt(e.styleDefault,{family:ue.familyDefault})},de.push(Ye),Ke();function tt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.family,a=void 0===n?B:n,o=V[a][e],r=Z[a][e]||Z[a][o],i=e in Se.styles?e:null;return r||i||null}var nt=(l(De={},B,Object.keys(q.classic)),l(De,$,Object.keys(q.sharp)),De);function at(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=n.skipLookups,o=void 0!==a&&a,r=(l(t={},B,"".concat(ue.cssPrefix,"-").concat(B)),l(t,$,"".concat(ue.cssPrefix,"-").concat($)),t),i=null,s=B;(e.includes(r.classic)||e.some((function(e){return nt.classic.includes(e)})))&&(s=B),(e.includes(r.sharp)||e.some((function(e){return nt.sharp.includes(e)})))&&(s=$);var c=e.reduce((function(e,t){var n=Ge(ue.cssPrefix,t);if(ze[t]?(t=Be[s].includes(t)?W[s][t]:t,i=t,e.prefix=t):We[s].indexOf(t)>-1?(i=t,e.prefix=tt(t,{family:s})):n?e.iconName=n:t!==ue.replacementClass&&t!==r.classic&&t!==r.sharp&&e.rest.push(t),!o&&e.prefix&&e.iconName){var a="fa"===i?Je(e.iconName):{},c=Xe(e.prefix,e.iconName);a.prefix&&(i=null),e.iconName=a.iconName||c||e.iconName,e.prefix=a.prefix||e.prefix,"far"!==e.prefix||ze.far||!ze.fas||ue.autoFetchSvg||(e.prefix="fas")}return e}),{prefix:null,iconName:null,rest:[]});return(e.includes("fa-brands")||e.includes("fab"))&&(c.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(c.prefix="fad"),c.prefix||s!==$||!ze.fass&&!ue.autoFetchSvg||(c.prefix="fass",c.iconName=Xe(c.prefix,c.iconName)||c.iconName),"fa"!==c.prefix&&"fa"!==i||(c.prefix=et()||"fas"),c}var ot=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.definitions={}}var t,n,a;return t=e,n=[{key:"add",value:function(){for(var e=this,t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];var o=n.reduce(this._pullDefinitions,{});Object.keys(o).forEach((function(t){e.definitions[t]=i(i({},e.definitions[t]||{}),o[t]),Me(t,o[t]);var n=q.classic[t];n&&Me(n,o[t]),Ke()}))}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(e,t){var n=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(n).map((function(t){var a=n[t],o=a.prefix,r=a.iconName,i=a.icon,s=i[2];e[o]||(e[o]={}),s.length>0&&s.forEach((function(t){"string"==typeof t&&(e[o][t]=i)})),e[o][r]=i})),e}}],n&&c(t.prototype,n),a&&c(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}(),rt=[],it={},st={},ct=Object.keys(st);function lt(e,t){for(var n=arguments.length,a=new Array(n>2?n-2:0),o=2;o<n;o++)a[o-2]=arguments[o];var r=it[e]||[];return r.forEach((function(e){t=e.apply(null,[t].concat(a))})),t}function ut(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];var o=it[e]||[];o.forEach((function(e){e.apply(null,n)}))}function dt(){var e=arguments[0],t=Array.prototype.slice.call(arguments,1);return st[e]?st[e].apply(null,t):void 0}function pt(e){"fa"===e.prefix&&(e.prefix="fas");var t=e.iconName,n=e.prefix||et();if(t)return t=Xe(n,t)||t,Ne(ft.definitions,n,t)||Ne(Se.styles,n,t)}var ft=new ot,mt={i2svg:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return N?(ut("beforeI2svg",e),dt("pseudoElements2svg",e),dt("i2svg",e)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.autoReplaceSvgRoot;!1===ue.autoReplaceSvg&&(ue.autoReplaceSvg=!0),ue.observeMutations=!0,Pe((function(){bt({autoReplaceSvgRoot:t}),ut("watch",e)}))}},gt={noAuto:function(){ue.autoReplaceSvg=!1,ue.observeMutations=!1,ut("noAuto")},config:ue,dom:mt,parse:{icon:function(e){if(null===e)return null;if("object"===s(e)&&e.prefix&&e.iconName)return{prefix:e.prefix,iconName:Xe(e.prefix,e.iconName)||e.iconName};if(Array.isArray(e)&&2===e.length){var t=0===e[1].indexOf("fa-")?e[1].slice(3):e[1],n=tt(e[0]);return{prefix:n,iconName:Xe(n,t)||t}}if("string"==typeof e&&(e.indexOf("".concat(ue.cssPrefix,"-"))>-1||e.match(G))){var a=at(e.split(" "),{skipLookups:!0});return{prefix:a.prefix||et(),iconName:Xe(a.prefix,a.iconName)||a.iconName}}if("string"==typeof e){var o=et();return{prefix:o,iconName:Xe(o,e)||e}}}},library:ft,findIconDefinition:pt,toHtml:Ae},bt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.autoReplaceSvgRoot,n=void 0===t?T:t;(Object.keys(Se.styles).length>0||ue.autoFetchSvg)&&N&&ue.autoReplaceSvg&>.dom.i2svg({node:n})};function ht(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map((function(e){return Ae(e)}))}}),Object.defineProperty(e,"node",{get:function(){if(N){var t=T.createElement("div");return t.innerHTML=e.html,t.children}}}),e}function vt(e){var t=e.icons,n=t.main,a=t.mask,o=e.prefix,r=e.iconName,s=e.transform,c=e.symbol,l=e.title,u=e.maskId,d=e.titleId,p=e.extra,f=e.watchable,m=void 0!==f&&f,g=a.found?a:n,b=g.width,h=g.height,v="fak"===o,y=[ue.replacementClass,r?"".concat(ue.cssPrefix,"-").concat(r):""].filter((function(e){return-1===p.classes.indexOf(e)})).filter((function(e){return""!==e||!!e})).concat(p.classes).join(" "),x={children:[],attributes:i(i({},p.attributes),{},{"data-prefix":o,"data-icon":r,class:y,role:p.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(b," ").concat(h)})},_=v&&!~p.classes.indexOf("fa-fw")?{width:"".concat(b/h*16*.0625,"em")}:{};m&&(x.attributes[L]=""),l&&(x.children.push({tag:"title",attributes:{id:x.attributes["aria-labelledby"]||"title-".concat(d||me())},children:[l]}),delete x.attributes.title);var k=i(i({},x),{},{prefix:o,iconName:r,main:n,mask:a,maskId:u,transform:s,symbol:c,styles:i(i({},_),p.styles)}),w=a.found&&n.found?dt("generateAbstractMask",k)||{children:[],attributes:{}}:dt("generateAbstractIcon",k)||{children:[],attributes:{}},E=w.children,S=w.attributes;return k.children=E,k.attributes=S,c?function(e){var t=e.prefix,n=e.iconName,a=e.children,o=e.attributes,r=e.symbol,s=!0===r?"".concat(t,"-").concat(ue.cssPrefix,"-").concat(n):r;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:i(i({},o),{},{id:s}),children:a}]}]}(k):function(e){var t=e.children,n=e.main,a=e.mask,o=e.attributes,r=e.styles,s=e.transform;if(ye(s)&&n.found&&!a.found){var c={x:n.width/n.height/2,y:.5};o.style=ve(i(i({},r),{},{"transform-origin":"".concat(c.x+s.x/16,"em ").concat(c.y+s.y/16,"em")}))}return[{tag:"svg",attributes:o,children:t}]}(k)}function yt(e){var t=e.content,n=e.width,a=e.height,o=e.transform,r=e.title,s=e.extra,c=e.watchable,l=void 0!==c&&c,u=i(i(i({},s.attributes),r?{title:r}:{}),{},{class:s.classes.join(" ")});l&&(u[L]="");var d=i({},s.styles);ye(o)&&(d.transform=function(e){var t=e.transform,n=e.width,a=void 0===n?16:n,o=e.height,r=void 0===o?16:o,i=e.startCentered,s=void 0!==i&&i,c="";return c+=s&&O?"translate(".concat(t.x/pe-a/2,"em, ").concat(t.y/pe-r/2,"em) "):s?"translate(calc(-50% + ".concat(t.x/pe,"em), calc(-50% + ").concat(t.y/pe,"em)) "):"translate(".concat(t.x/pe,"em, ").concat(t.y/pe,"em) "),c+="scale(".concat(t.size/pe*(t.flipX?-1:1),", ").concat(t.size/pe*(t.flipY?-1:1),") "),c+"rotate(".concat(t.rotate,"deg) ")}({transform:o,startCentered:!0,width:n,height:a}),d["-webkit-transform"]=d.transform);var p=ve(d);p.length>0&&(u.style=p);var f=[];return f.push({tag:"span",attributes:u,children:[t]}),r&&f.push({tag:"span",attributes:{class:"sr-only"},children:[r]}),f}function xt(e){var t=e.content,n=e.title,a=e.extra,o=i(i(i({},a.attributes),n?{title:n}:{}),{},{class:a.classes.join(" ")}),r=ve(a.styles);r.length>0&&(o.style=r);var s=[];return s.push({tag:"span",attributes:o,children:[t]}),n&&s.push({tag:"span",attributes:{class:"sr-only"},children:[n]}),s}var _t=Se.styles;function kt(e){var t=e[0],n=e[1],a=u(e.slice(4),1)[0];return{found:!0,width:t,height:n,icon:Array.isArray(a)?{tag:"g",attributes:{class:"".concat(ue.cssPrefix,"-").concat(te)},children:[{tag:"path",attributes:{class:"".concat(ue.cssPrefix,"-").concat(oe),fill:"currentColor",d:a[0]}},{tag:"path",attributes:{class:"".concat(ue.cssPrefix,"-").concat(ae),fill:"currentColor",d:a[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:a}}}}var wt={found:!1,width:512,height:512};function Et(e,t){var n=t;return"fa"===t&&null!==ue.styleDefault&&(t=et()),new Promise((function(a,o){dt("missingIconAbstract");if("fa"===n){var r=Je(e)||{};e=r.iconName||e,t=r.prefix||t}if(e&&t&&_t[t]&&_t[t][e])return a(kt(_t[t][e]));!function(e,t){F||ue.showMissingIcons||!e||console.error('Icon with name "'.concat(e,'" and prefix "').concat(t,'" is missing.'))}(e,t),a(i(i({},wt),{},{icon:ue.showMissingIcons&&e&&dt("missingIconAbstract")||{}}))}))}var St=function(){},Ct=ue.measurePerformance&&A&&A.mark&&A.measure?A:{mark:St,measure:St},Tt='FA "6.4.2"',Pt=function(e){Ct.mark("".concat(Tt," ").concat(e," ends")),Ct.measure("".concat(Tt," ").concat(e),"".concat(Tt," ").concat(e," begins"),"".concat(Tt," ").concat(e," ends"))},At=function(e){return Ct.mark("".concat(Tt," ").concat(e," begins")),function(){return Pt(e)}},Nt=function(){};function Ot(e){return"string"==typeof(e.getAttribute?e.getAttribute(L):null)}function jt(e){return T.createElementNS("http://www.w3.org/2000/svg",e)}function Lt(e){return T.createElement(e)}function Mt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.ceFn,a=void 0===n?"svg"===e.tag?jt:Lt:n;if("string"==typeof e)return T.createTextNode(e);var o=a(e.tag);Object.keys(e.attributes||[]).forEach((function(t){o.setAttribute(t,e.attributes[t])}));var r=e.children||[];return r.forEach((function(e){o.appendChild(Mt(e,{ceFn:a}))})),o}var It={replace:function(e){var t=e[0];if(t.parentNode)if(e[1].forEach((function(e){t.parentNode.insertBefore(Mt(e),t)})),null===t.getAttribute(L)&&ue.keepOriginalSource){var n=T.createComment(function(e){var t=" ".concat(e.outerHTML," ");return"".concat(t,"Font Awesome fontawesome.com ")}(t));t.parentNode.replaceChild(n,t)}else t.remove()},nest:function(e){var t=e[0],n=e[1];if(~be(t).indexOf(ue.replacementClass))return It.replace(e);var a=new RegExp("".concat(ue.cssPrefix,"-.*"));if(delete n[0].attributes.id,n[0].attributes.class){var o=n[0].attributes.class.split(" ").reduce((function(e,t){return t===ue.replacementClass||t.match(a)?e.toSvg.push(t):e.toNode.push(t),e}),{toNode:[],toSvg:[]});n[0].attributes.class=o.toSvg.join(" "),0===o.toNode.length?t.removeAttribute("class"):t.setAttribute("class",o.toNode.join(" "))}var r=n.map((function(e){return Ae(e)})).join("\n");t.setAttribute(L,""),t.innerHTML=r}};function Rt(e){e()}function Dt(e,t){var n="function"==typeof t?t:Nt;if(0===e.length)n();else{var a=Rt;"async"===ue.mutateApproach&&(a=C.requestAnimationFrame||Rt),a((function(){var t=!0===ue.autoReplaceSvg?It.replace:It[ue.autoReplaceSvg]||It.replace,a=At("mutate");e.map(t),a(),n()}))}}var zt=!1;function Ft(){zt=!0}function Bt(){zt=!1}var $t=null;function Ut(e){if(P&&ue.observeMutations){var t=e.treeCallback,n=void 0===t?Nt:t,a=e.nodeCallback,o=void 0===a?Nt:a,r=e.pseudoElementsCallback,i=void 0===r?Nt:r,s=e.observeMutationsRoot,c=void 0===s?T:s;$t=new P((function(e){if(!zt){var t=et();ge(e).forEach((function(e){if("childList"===e.type&&e.addedNodes.length>0&&!Ot(e.addedNodes[0])&&(ue.searchPseudoElements&&i(e.target),n(e.target)),"attributes"===e.type&&e.target.parentNode&&ue.searchPseudoElements&&i(e.target.parentNode),"attributes"===e.type&&Ot(e.target)&&~ee.indexOf(e.attributeName))if("class"===e.attributeName&&function(e){var t=e.getAttribute?e.getAttribute(I):null,n=e.getAttribute?e.getAttribute(R):null;return t&&n}(e.target)){var a=at(be(e.target)),r=a.prefix,s=a.iconName;e.target.setAttribute(I,r||t),s&&e.target.setAttribute(R,s)}else(c=e.target)&&c.classList&&c.classList.contains&&c.classList.contains(ue.replacementClass)&&o(e.target);var c}))}})),N&&$t.observe(c,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function Ht(e){var t=e.getAttribute("style"),n=[];return t&&(n=t.split(";").reduce((function(e,t){var n=t.split(":"),a=n[0],o=n.slice(1);return a&&o.length>0&&(e[a]=o.join(":").trim()),e}),{})),n}function Vt(e){var t,n,a=e.getAttribute("data-prefix"),o=e.getAttribute("data-icon"),r=void 0!==e.innerText?e.innerText.trim():"",i=at(be(e));return i.prefix||(i.prefix=et()),a&&o&&(i.prefix=a,i.iconName=o),i.iconName&&i.prefix||(i.prefix&&r.length>0&&(i.iconName=(t=i.prefix,n=e.innerText,(He[t]||{})[n]||Qe(i.prefix,je(e.innerText)))),!i.iconName&&ue.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(i.iconName=e.firstChild.data)),i}function Zt(e){var t=ge(e.attributes).reduce((function(e,t){return"class"!==e.name&&"style"!==e.name&&(e[t.name]=t.value),e}),{}),n=e.getAttribute("title"),a=e.getAttribute("data-fa-title-id");return ue.autoA11y&&(n?t["aria-labelledby"]="".concat(ue.replacementClass,"-title-").concat(a||me()):(t["aria-hidden"]="true",t.focusable="false")),t}function qt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{styleParser:!0},n=Vt(e),a=n.iconName,o=n.prefix,r=n.rest,s=Zt(e),c=lt("parseNodeAttributes",{},e),l=t.styleParser?Ht(e):[];return i({iconName:a,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:o,transform:fe,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:r,styles:l,attributes:s}},c)}var Wt=Se.styles;function Gt(e){var t="nest"===ue.autoReplaceSvg?qt(e,{styleParser:!1}):qt(e);return~t.extra.classes.indexOf(Y)?dt("generateLayersText",e,t):dt("generateSvgReplacementMutation",e,t)}var Yt=new Set;function Kt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!N)return Promise.resolve();var n=T.documentElement.classList,a=function(e){return n.add("".concat(D,"-").concat(e))},o=function(e){return n.remove("".concat(D,"-").concat(e))},r=ue.autoFetchSvg?Yt:U.map((function(e){return"fa-".concat(e)})).concat(Object.keys(Wt));r.includes("fa")||r.push("fa");var i=[".".concat(Y,":not([").concat(L,"])")].concat(r.map((function(e){return".".concat(e,":not([").concat(L,"])")}))).join(", ");if(0===i.length)return Promise.resolve();var s=[];try{s=ge(e.querySelectorAll(i))}catch(Dn){}if(!(s.length>0))return Promise.resolve();a("pending"),o("complete");var c=At("onTree"),l=s.reduce((function(e,t){try{var n=Gt(t);n&&e.push(n)}catch(Dn){F||"MissingIcon"===Dn.name&&console.error(Dn)}return e}),[]);return new Promise((function(e,n){Promise.all(l).then((function(n){Dt(n,(function(){a("active"),a("complete"),o("pending"),"function"==typeof t&&t(),c(),e()}))})).catch((function(e){c(),n(e)}))}))}function Qt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Gt(e).then((function(e){e&&Dt([e],t)}))}U.map((function(e){Yt.add("fa-".concat(e))})),Object.keys(V.classic).map(Yt.add.bind(Yt)),Object.keys(V.sharp).map(Yt.add.bind(Yt)),Yt=d(Yt);var Xt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.transform,a=void 0===n?fe:n,o=t.symbol,r=void 0!==o&&o,s=t.mask,c=void 0===s?null:s,l=t.maskId,u=void 0===l?null:l,d=t.title,p=void 0===d?null:d,f=t.titleId,m=void 0===f?null:f,g=t.classes,b=void 0===g?[]:g,h=t.attributes,v=void 0===h?{}:h,y=t.styles,x=void 0===y?{}:y;if(e){var _=e.prefix,k=e.iconName,w=e.icon;return ht(i({type:"icon"},e),(function(){return ut("beforeDOMElementCreation",{iconDefinition:e,params:t}),ue.autoA11y&&(p?v["aria-labelledby"]="".concat(ue.replacementClass,"-title-").concat(m||me()):(v["aria-hidden"]="true",v.focusable="false")),vt({icons:{main:kt(w),mask:c?kt(c.icon):{found:!1,width:null,height:null,icon:{}}},prefix:_,iconName:k,transform:i(i({},fe),a),symbol:r,title:p,maskId:u,titleId:m,extra:{attributes:v,styles:x,classes:b}})}))}},Jt={mixout:function(){return{icon:(e=Xt,function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=(t||{}).icon?t:pt(t||{}),o=n.mask;return o&&(o=(o||{}).icon?o:pt(o||{})),e(a,i(i({},n),{},{mask:o}))})};var e},hooks:function(){return{mutationObserverCallbacks:function(e){return e.treeCallback=Kt,e.nodeCallback=Qt,e}}},provides:function(e){e.i2svg=function(e){var t=e.node,n=void 0===t?T:t,a=e.callback;return Kt(n,void 0===a?function(){}:a)},e.generateSvgReplacementMutation=function(e,t){var n=t.iconName,a=t.title,o=t.titleId,r=t.prefix,i=t.transform,s=t.symbol,c=t.mask,l=t.maskId,d=t.extra;return new Promise((function(t,p){Promise.all([Et(n,r),c.iconName?Et(c.iconName,c.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then((function(c){var p=u(c,2),f=p[0],m=p[1];t([e,vt({icons:{main:f,mask:m},prefix:r,iconName:n,transform:i,symbol:s,maskId:l,title:a,titleId:o,extra:d,watchable:!0})])})).catch(p)}))},e.generateAbstractIcon=function(e){var t,n=e.children,a=e.attributes,o=e.main,r=e.transform,i=ve(e.styles);return i.length>0&&(a.style=i),ye(r)&&(t=dt("generateAbstractTransformGrouping",{main:o,transform:r,containerWidth:o.width,iconWidth:o.width})),n.push(t||o.icon),{children:n,attributes:a}}}},en={mixout:function(){return{layer:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.classes,a=void 0===n?[]:n;return ht({type:"layer"},(function(){ut("beforeDOMElementCreation",{assembler:e,params:t});var n=[];return e((function(e){Array.isArray(e)?e.map((function(e){n=n.concat(e.abstract)})):n=n.concat(e.abstract)})),[{tag:"span",attributes:{class:["".concat(ue.cssPrefix,"-layers")].concat(d(a)).join(" ")},children:n}]}))}}}},tn={mixout:function(){return{counter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.title,a=void 0===n?null:n,o=t.classes,r=void 0===o?[]:o,i=t.attributes,s=void 0===i?{}:i,c=t.styles,l=void 0===c?{}:c;return ht({type:"counter",content:e},(function(){return ut("beforeDOMElementCreation",{content:e,params:t}),xt({content:e.toString(),title:a,extra:{attributes:s,styles:l,classes:["".concat(ue.cssPrefix,"-layers-counter")].concat(d(r))}})}))}}}},nn={mixout:function(){return{text:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.transform,a=void 0===n?fe:n,o=t.title,r=void 0===o?null:o,s=t.classes,c=void 0===s?[]:s,l=t.attributes,u=void 0===l?{}:l,p=t.styles,f=void 0===p?{}:p;return ht({type:"text",content:e},(function(){return ut("beforeDOMElementCreation",{content:e,params:t}),yt({content:e,transform:i(i({},fe),a),title:r,extra:{attributes:u,styles:f,classes:["".concat(ue.cssPrefix,"-layers-text")].concat(d(c))}})}))}}},provides:function(e){e.generateLayersText=function(e,t){var n=t.title,a=t.transform,o=t.extra,r=null,i=null;if(O){var s=parseInt(getComputedStyle(e).fontSize,10),c=e.getBoundingClientRect();r=c.width/s,i=c.height/s}return ue.autoA11y&&!n&&(o.attributes["aria-hidden"]="true"),Promise.resolve([e,yt({content:e.innerHTML,width:r,height:i,transform:a,title:n,extra:o,watchable:!0})])}}},an=new RegExp('"',"ug"),on=[1105920,1112319];function rn(e,t){var n="".concat("data-fa-pseudo-element-pending").concat(t.replace(":","-"));return new Promise((function(a,o){if(null!==e.getAttribute(n))return a();var r,s,c,l=ge(e.children).filter((function(e){return e.getAttribute(M)===t}))[0],u=C.getComputedStyle(e,t),d=u.getPropertyValue("font-family").match(K),p=u.getPropertyValue("font-weight"),f=u.getPropertyValue("content");if(l&&!d)return e.removeChild(l),a();if(d&&"none"!==f&&""!==f){var m=u.getPropertyValue("content"),g=~["Sharp"].indexOf(d[2])?$:B,b=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(d[2])?Z[g][d[2].toLowerCase()]:Q[g][p],h=function(e){var t,n,a,o,r,i=e.replace(an,""),s=(n=0,o=(t=i).length,(r=t.charCodeAt(n))>=55296&&r<=56319&&o>n+1&&(a=t.charCodeAt(n+1))>=56320&&a<=57343?1024*(r-55296)+a-56320+65536:r),c=s>=on[0]&&s<=on[1],l=2===i.length&&i[0]===i[1];return{value:je(l?i[0]:i),isSecondary:c||l}}(m),v=h.value,y=h.isSecondary,x=d[0].startsWith("FontAwesome"),_=Qe(b,v),k=_;if(x){var w=(s=Ze[r=v],c=Qe("fas",r),s||(c?{prefix:"fas",iconName:c}:null)||{prefix:null,iconName:null});w.iconName&&w.prefix&&(_=w.iconName,b=w.prefix)}if(!_||y||l&&l.getAttribute(I)===b&&l.getAttribute(R)===k)a();else{e.setAttribute(n,k),l&&e.removeChild(l);var E={iconName:null,title:null,titleId:null,prefix:null,transform:fe,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}},S=E.extra;S.attributes[M]=t,Et(_,b).then((function(o){var r=vt(i(i({},E),{},{icons:{main:o,mask:{prefix:null,iconName:null,rest:[]}},prefix:b,iconName:k,extra:S,watchable:!0})),s=T.createElementNS("http://www.w3.org/2000/svg","svg");"::before"===t?e.insertBefore(s,e.firstChild):e.appendChild(s),s.outerHTML=r.map((function(e){return Ae(e)})).join("\n"),e.removeAttribute(n),a()})).catch(o)}}else a()}))}function sn(e){return Promise.all([rn(e,"::before"),rn(e,"::after")])}function cn(e){return!(e.parentNode===document.head||~z.indexOf(e.tagName.toUpperCase())||e.getAttribute(M)||e.parentNode&&"svg"===e.parentNode.tagName)}function ln(e){if(N)return new Promise((function(t,n){var a=ge(e.querySelectorAll("*")).filter(cn).map(sn),o=At("searchPseudoElements");Ft(),Promise.all(a).then((function(){o(),Bt(),t()})).catch((function(){o(),Bt(),n()}))}))}var un=!1,dn=function(e){return e.toLowerCase().split(" ").reduce((function(e,t){var n=t.toLowerCase().split("-"),a=n[0],o=n.slice(1).join("-");if(a&&"h"===o)return e.flipX=!0,e;if(a&&"v"===o)return e.flipY=!0,e;if(o=parseFloat(o),isNaN(o))return e;switch(a){case"grow":e.size=e.size+o;break;case"shrink":e.size=e.size-o;break;case"left":e.x=e.x-o;break;case"right":e.x=e.x+o;break;case"up":e.y=e.y-o;break;case"down":e.y=e.y+o;break;case"rotate":e.rotate=e.rotate+o}return e}),{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})},pn={mixout:function(){return{parse:{transform:function(e){return dn(e)}}}},hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute("data-fa-transform");return n&&(e.transform=dn(n)),e}}},provides:function(e){e.generateAbstractTransformGrouping=function(e){var t=e.main,n=e.transform,a=e.containerWidth,o=e.iconWidth,r={transform:"translate(".concat(a/2," 256)")},s="translate(".concat(32*n.x,", ").concat(32*n.y,") "),c="scale(".concat(n.size/16*(n.flipX?-1:1),", ").concat(n.size/16*(n.flipY?-1:1),") "),l="rotate(".concat(n.rotate," 0 0)"),u={outer:r,inner:{transform:"".concat(s," ").concat(c," ").concat(l)},path:{transform:"translate(".concat(o/2*-1," -256)")}};return{tag:"g",attributes:i({},u.outer),children:[{tag:"g",attributes:i({},u.inner),children:[{tag:t.icon.tag,children:t.icon.children,attributes:i(i({},t.icon.attributes),u.path)}]}]}}}},fn={x:0,y:0,width:"100%",height:"100%"};function mn(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill="black"),e}var gn={hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute("data-fa-mask"),a=n?at(n.split(" ").map((function(e){return e.trim()}))):{prefix:null,iconName:null,rest:[]};return a.prefix||(a.prefix=et()),e.mask=a,e.maskId=t.getAttribute("data-fa-mask-id"),e}}},provides:function(e){e.generateAbstractMask=function(e){var t,n=e.children,a=e.attributes,o=e.main,r=e.mask,s=e.maskId,c=e.transform,l=o.width,u=o.icon,d=r.width,p=r.icon,f=function(e){var t=e.transform,n=e.containerWidth,a=e.iconWidth,o={transform:"translate(".concat(n/2," 256)")},r="translate(".concat(32*t.x,", ").concat(32*t.y,") "),i="scale(".concat(t.size/16*(t.flipX?-1:1),", ").concat(t.size/16*(t.flipY?-1:1),") "),s="rotate(".concat(t.rotate," 0 0)");return{outer:o,inner:{transform:"".concat(r," ").concat(i," ").concat(s)},path:{transform:"translate(".concat(a/2*-1," -256)")}}}({transform:c,containerWidth:d,iconWidth:l}),m={tag:"rect",attributes:i(i({},fn),{},{fill:"white"})},g=u.children?{children:u.children.map(mn)}:{},b={tag:"g",attributes:i({},f.inner),children:[mn(i({tag:u.tag,attributes:i(i({},u.attributes),f.path)},g))]},h={tag:"g",attributes:i({},f.outer),children:[b]},v="mask-".concat(s||me()),y="clip-".concat(s||me()),x={tag:"mask",attributes:i(i({},fn),{},{id:v,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[m,h]},_={tag:"defs",children:[{tag:"clipPath",attributes:{id:y},children:(t=p,"g"===t.tag?t.children:[t])},x]};return n.push(_,{tag:"rect",attributes:i({fill:"currentColor","clip-path":"url(#".concat(y,")"),mask:"url(#".concat(v,")")},fn)}),{children:n,attributes:a}}}},bn={provides:function(e){var t=!1;C.matchMedia&&(t=C.matchMedia("(prefers-reduced-motion: reduce)").matches),e.missingIconAbstract=function(){var e=[],n={fill:"currentColor"},a={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};e.push({tag:"path",attributes:i(i({},n),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var o=i(i({},a),{},{attributeName:"opacity"}),r={tag:"circle",attributes:i(i({},n),{},{cx:"256",cy:"364",r:"28"}),children:[]};return t||r.children.push({tag:"animate",attributes:i(i({},a),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:i(i({},o),{},{values:"1;0;1;1;0;1;"})}),e.push(r),e.push({tag:"path",attributes:i(i({},n),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:t?[]:[{tag:"animate",attributes:i(i({},o),{},{values:"1;0;0;0;0;1;"})}]}),t||e.push({tag:"path",attributes:i(i({},n),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:i(i({},o),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:e}}}};!function(e,t){var n=t.mixoutsTo;rt=e,it={},Object.keys(st).forEach((function(e){-1===ct.indexOf(e)&&delete st[e]})),rt.forEach((function(e){var t=e.mixout?e.mixout():{};if(Object.keys(t).forEach((function(e){"function"==typeof t[e]&&(n[e]=t[e]),"object"===s(t[e])&&Object.keys(t[e]).forEach((function(a){n[e]||(n[e]={}),n[e][a]=t[e][a]}))})),e.hooks){var a=e.hooks();Object.keys(a).forEach((function(e){it[e]||(it[e]=[]),it[e].push(a[e])}))}e.provides&&e.provides(st)}))}([we,Jt,en,tn,nn,{hooks:function(){return{mutationObserverCallbacks:function(e){return e.pseudoElementsCallback=ln,e}}},provides:function(e){e.pseudoElements2svg=function(e){var t=e.node,n=void 0===t?T:t;ue.searchPseudoElements&&ln(n)}}},{mixout:function(){return{dom:{unwatch:function(){Ft(),un=!0}}}},hooks:function(){return{bootstrap:function(){Ut(lt("mutationObserverCallbacks",{}))},noAuto:function(){$t&&$t.disconnect()},watch:function(e){var t=e.observeMutationsRoot;un?Bt():Ut(lt("mutationObserverCallbacks",{observeMutationsRoot:t}))}}}},pn,gn,bn,{hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute("data-fa-symbol"),a=null!==n&&(""===n||n);return e.symbol=a,e}}}}],{mixoutsTo:gt});var hn=gt.parse,vn=gt.icon,yn=n(23615),xn=n.n(yn);function _n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function kn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_n(Object(n),!0).forEach((function(t){En(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_n(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e){return wn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wn(e)}function En(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Sn(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Cn(e){return function(e){if(Array.isArray(e))return Tn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Tn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Tn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Tn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function Pn(e){return t=e,(t-=0)==t?e:(e=e.replace(/[\-_\s]+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))).substr(0,1).toLowerCase()+e.substr(1);var t}var An=["style"];function Nn(e){return e.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,t){var n,a=t.indexOf(":"),o=Pn(t.slice(0,a)),r=t.slice(a+1).trim();return o.startsWith("webkit")?e[(n=o,n.charAt(0).toUpperCase()+n.slice(1))]=r:e[o]=r,e}),{})}var On=!1;try{On=!0}catch(Dn){}function jn(e){return e&&"object"===wn(e)&&e.prefix&&e.iconName&&e.icon?e:hn.icon?hn.icon(e):null===e?null:e&&"object"===wn(e)&&e.prefix&&e.iconName?e:Array.isArray(e)&&2===e.length?{prefix:e[0],iconName:e[1]}:"string"==typeof e?{prefix:"fas",iconName:e}:void 0}function Ln(e,t){return Array.isArray(t)&&t.length>0||!Array.isArray(t)&&t?En({},e,t):{}}var Mn=a.forwardRef((function(e,t){var n=e.icon,a=e.mask,o=e.symbol,r=e.className,i=e.title,s=e.titleId,c=e.maskId,l=jn(n),u=Ln("classes",[].concat(Cn(function(e){var t,n=e.beat,a=e.fade,o=e.beatFade,r=e.bounce,i=e.shake,s=e.flash,c=e.spin,l=e.spinPulse,u=e.spinReverse,d=e.pulse,p=e.fixedWidth,f=e.inverse,m=e.border,g=e.listItem,b=e.flip,h=e.size,v=e.rotation,y=e.pull,x=(En(t={"fa-beat":n,"fa-fade":a,"fa-beat-fade":o,"fa-bounce":r,"fa-shake":i,"fa-flash":s,"fa-spin":c,"fa-spin-reverse":u,"fa-spin-pulse":l,"fa-pulse":d,"fa-fw":p,"fa-inverse":f,"fa-border":m,"fa-li":g,"fa-flip":!0===b,"fa-flip-horizontal":"horizontal"===b||"both"===b,"fa-flip-vertical":"vertical"===b||"both"===b},"fa-".concat(h),null!=h),En(t,"fa-rotate-".concat(v),null!=v&&0!==v),En(t,"fa-pull-".concat(y),null!=y),En(t,"fa-swap-opacity",e.swapOpacity),t);return Object.keys(x).map((function(e){return x[e]?e:null})).filter((function(e){return e}))}(e)),Cn(r.split(" ")))),d=Ln("transform","string"==typeof e.transform?hn.transform(e.transform):e.transform),p=Ln("mask",jn(a)),f=vn(l,kn(kn(kn(kn({},u),d),p),{},{symbol:o,title:i,titleId:s,maskId:c}));if(!f)return function(){var e;!On&&console&&"function"==typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",l),null;var m=f.abstract,g={ref:t};return Object.keys(e).forEach((function(t){Mn.defaultProps.hasOwnProperty(t)||(g[t]=e[t])})),In(m[0],g)}));Mn.displayName="FontAwesomeIcon",Mn.propTypes={beat:xn().bool,border:xn().bool,beatFade:xn().bool,bounce:xn().bool,className:xn().string,fade:xn().bool,flash:xn().bool,mask:xn().oneOfType([xn().object,xn().array,xn().string]),maskId:xn().string,fixedWidth:xn().bool,inverse:xn().bool,flip:xn().oneOf([!0,!1,"horizontal","vertical","both"]),icon:xn().oneOfType([xn().object,xn().array,xn().string]),listItem:xn().bool,pull:xn().oneOf(["right","left"]),pulse:xn().bool,rotation:xn().oneOf([0,90,180,270]),shake:xn().bool,size:xn().oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:xn().bool,spinPulse:xn().bool,spinReverse:xn().bool,symbol:xn().oneOfType([xn().bool,xn().string]),title:xn().string,titleId:xn().string,transform:xn().oneOfType([xn().string,xn().object]),swapOpacity:xn().bool},Mn.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var In=function e(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"==typeof n)return n;var o=(n.children||[]).map((function(n){return e(t,n)})),r=Object.keys(n.attributes||{}).reduce((function(e,t){var a=n.attributes[t];switch(t){case"class":e.attrs.className=a,delete n.attributes.class;break;case"style":e.attrs.style=Nn(a);break;default:0===t.indexOf("aria-")||0===t.indexOf("data-")?e.attrs[t.toLowerCase()]=a:e.attrs[Pn(t)]=a}return e}),{attrs:{}}),i=a.style,s=void 0===i?{}:i,c=Sn(a,An);return r.attrs.style=kn(kn({},r.attrs.style),s),t.apply(void 0,[n.tag,kn(kn({},r.attrs),c)].concat(Cn(o)))}.bind(null,a.createElement);function Rn(e){let{className:t,style:n,...r}=e;return a.createElement("span",{className:(0,o.Z)("inline-block",t),"aria-hidden":"true",style:n},a.createElement(Mn,r))}},9187:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(27378),o=n(40624),r=n(30658);const i={1:"text-4xl font-extrabold sm:text-5xl",2:"text-3xl font-bold sm:text-4xl",3:"text-2xl font-bold",4:"text-xl font-bold",5:"text-lg font-semibold",6:"text-base font-semibold"};function s(e){let{align:t,as:n,children:s,className:c="",level:l,overflow:u="wrap",transform:d,variant:p="neutral"}=e;const f=n??`h${l}`;return a.createElement(f,{className:(0,o.Z)("m-0",t&&r.ox[t],i[l],r.s9[u],d&&r.Lo[d],r.oW[p],c)},s)}},90728:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var a=n(25773),o=n(27378),r=n(40624),i=n(81884),s=n(30658);const c={muted:"text-gray-700 hover:text-gray-800 dark:text-gray-600 dark:hover:text-gray-500",primary:"text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200"};function l(e){let{className:t,transform:n,size:l="df",weight:u="normal",variant:d="primary",...p}=e;return o.createElement(i.default,(0,a.Z)({className:(0,r.Z)("cursor-pointer",s.J7[l],n&&s.Lo[n],c[d],s.Xz[u],t)},p))}},30658:(e,t,n)=>{"use strict";n.d(t,{J7:()=>s,Lo:()=>c,Xz:()=>u,ZP:()=>d,oW:()=>l,ox:()=>r,s9:()=>i});var a=n(27378),o=n(40624);const r={center:"text-center",end:"text-right",justify:"text-justify",start:"text-left"},i={clip:"text-clip",ellipsis:"text-ellipsis",truncate:"truncate",wrap:""},s={df:"text-base",lg:"text-lg",sm:"text-sm"},c={capitalize:"capitalize",lowercase:"lowercase",uppercase:"uppercase"},l={muted:"text-gray-800 dark:text-slate-100",neutral:""},u={black:"font-black",bold:"font-bold",light:"font-light",medium:"font-medium",normal:"font-normal",thin:"font-thin"};function d(e){let{align:t,as:n="p",children:d,className:p="",overflow:f="wrap",size:m="df",transform:g,variant:b="neutral",weight:h="normal"}=e;return a.createElement(n,{className:(0,o.Z)(t&&r[t],i[f],s[m],g&&c[g],l[b],u[h],p)},d)}},15036:(e,t,n)=>{"use strict";n.d(t,{lX:()=>x,q_:()=>C,ob:()=>f,PP:()=>P,Ep:()=>p});var a=n(25773);function o(e){return"/"===e.charAt(0)}function r(e,t){for(var n=t,a=n+1,o=e.length;a<o;n+=1,a+=1)e[n]=e[a];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,a=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),c=t&&o(t),l=s||c;if(e&&o(e)?i=a:a.length&&(i.pop(),i=i.concat(a)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?r(i,p):".."===f?(r(i,p),d++):d&&(r(i,p),d--)}if(!l)for(;d--;d)i.unshift("..");!l||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(92215);function c(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,a=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),a&&"#"!==a&&(o+="#"===a.charAt(0)?a:"#"+a),o}function f(e,t,n,o){var r;"string"==typeof e?(r=function(e){var t=e||"/",n="",a="",o=t.indexOf("#");-1!==o&&(a=t.substr(o),t=t.substr(0,o));var r=t.indexOf("?");return-1!==r&&(n=t.substr(r),t=t.substr(0,r)),{pathname:t,search:"?"===n?"":n,hash:"#"===a?"":a}}(e),r.state=t):(void 0===(r=(0,a.Z)({},e)).pathname&&(r.pathname=""),r.search?"?"!==r.search.charAt(0)&&(r.search="?"+r.search):r.search="",r.hash?"#"!==r.hash.charAt(0)&&(r.hash="#"+r.hash):r.hash="",void 0!==t&&void 0===r.state&&(r.state=t));try{r.pathname=decodeURI(r.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+r.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(r.key=n),o?r.pathname?"/"!==r.pathname.charAt(0)&&(r.pathname=i(r.pathname,o.pathname)):r.pathname=o.pathname:r.pathname||(r.pathname="/"),r}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,a,o){if(null!=e){var r="function"==typeof e?e(t,n):e;"string"==typeof r?"function"==typeof a?a(r,o):o(!0):o(!1!==r)}else o(!0)},appendListener:function(e){var n=!0;function a(){n&&e.apply(void 0,arguments)}return t.push(a),function(){n=!1,t=t.filter((function(e){return e!==a}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function b(e,t){t(window.confirm(e))}var h="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function x(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,r=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,l=i.forceRefresh,x=void 0!==l&&l,_=i.getUserConfirmation,k=void 0===_?b:_,w=i.keyLength,E=void 0===w?6:w,S=e.basename?d(c(e.basename)):"";function C(e){var t=e||{},n=t.key,a=t.state,o=window.location,r=o.pathname+o.search+o.hash;return S&&(r=u(r,S)),f(r,a,n)}function T(){return Math.random().toString(36).substr(2,E)}var P=m();function A(e){(0,a.Z)($,e),$.length=n.length,P.notifyListeners($.location,$.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(C(e.state))}function O(){L(C(y()))}var j=!1;function L(e){if(j)j=!1,A();else{P.confirmTransitionTo(e,"POP",k,(function(t){t?A({action:"POP",location:e}):function(e){var t=$.location,n=I.indexOf(t.key);-1===n&&(n=0);var a=I.indexOf(e.key);-1===a&&(a=0);var o=n-a;o&&(j=!0,D(o))}(e)}))}}var M=C(y()),I=[M.key];function R(e){return S+p(e)}function D(e){n.go(e)}var z=0;function F(e){1===(z+=e)&&1===e?(window.addEventListener(h,N),r&&window.addEventListener(v,O)):0===z&&(window.removeEventListener(h,N),r&&window.removeEventListener(v,O))}var B=!1;var $={length:n.length,action:"POP",location:M,createHref:R,push:function(e,t){var a="PUSH",r=f(e,t,T(),$.location);P.confirmTransitionTo(r,a,k,(function(e){if(e){var t=R(r),i=r.key,s=r.state;if(o)if(n.pushState({key:i,state:s},null,t),x)window.location.href=t;else{var c=I.indexOf($.location.key),l=I.slice(0,c+1);l.push(r.key),I=l,A({action:a,location:r})}else window.location.href=t}}))},replace:function(e,t){var a="REPLACE",r=f(e,t,T(),$.location);P.confirmTransitionTo(r,a,k,(function(e){if(e){var t=R(r),i=r.key,s=r.state;if(o)if(n.replaceState({key:i,state:s},null,t),x)window.location.replace(t);else{var c=I.indexOf($.location.key);-1!==c&&(I[c]=r.key),A({action:a,location:r})}else window.location.replace(t)}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return $}var _="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+l(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:l,decodePath:c},slash:{encodePath:c,decodePath:c}};function w(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function S(e){window.location.replace(w(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,r=void 0===o?b:o,i=n.hashType,l=void 0===i?"slash":i,h=e.basename?d(c(e.basename)):"",v=k[l],y=v.encodePath,x=v.decodePath;function C(){var e=x(E());return h&&(e=u(e,h)),f(e)}var T=m();function P(e){(0,a.Z)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var A=!1,N=null;function O(){var e,t,n=E(),a=y(n);if(n!==a)S(a);else{var o=C(),i=B.location;if(!A&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===p(o))return;N=null,function(e){if(A)A=!1,P();else{var t="POP";T.confirmTransitionTo(e,t,r,(function(n){n?P({action:t,location:e}):function(e){var t=B.location,n=I.lastIndexOf(p(t));-1===n&&(n=0);var a=I.lastIndexOf(p(e));-1===a&&(a=0);var o=n-a;o&&(A=!0,R(o))}(e)}))}}(o)}}var j=E(),L=y(j);j!==L&&S(L);var M=C(),I=[p(M)];function R(e){t.go(e)}var D=0;function z(e){1===(D+=e)&&1===e?window.addEventListener(_,O):0===D&&window.removeEventListener(_,O)}var F=!1;var B={length:t.length,action:"POP",location:M,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=w(window.location.href)),n+"#"+y(h+p(e))},push:function(e,t){var n="PUSH",a=f(e,void 0,void 0,B.location);T.confirmTransitionTo(a,n,r,(function(e){if(e){var t=p(a),o=y(h+t);if(E()!==o){N=t,function(e){window.location.hash=e}(o);var r=I.lastIndexOf(p(B.location)),i=I.slice(0,r+1);i.push(t),I=i,P({action:n,location:a})}else P()}}))},replace:function(e,t){var n="REPLACE",a=f(e,void 0,void 0,B.location);T.confirmTransitionTo(a,n,r,(function(e){if(e){var t=p(a),o=y(h+t);E()!==o&&(N=t,S(o));var r=I.indexOf(p(B.location));-1!==r&&(I[r]=t),P({action:n,location:a})}}))},go:R,goBack:function(){R(-1)},goForward:function(){R(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return F||(z(1),F=!0),function(){return F&&(F=!1,z(-1)),t()}},listen:function(e){var t=T.appendListener(e);return z(1),function(){z(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function P(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,r=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,c=t.keyLength,l=void 0===c?6:c,u=m();function d(e){(0,a.Z)(x,e),x.length=x.entries.length,u.notifyListeners(x.location,x.action)}function g(){return Math.random().toString(36).substr(2,l)}var b=T(s,0,r.length-1),h=r.map((function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())})),v=p;function y(e){var t=T(x.index+e,0,x.entries.length-1),a=x.entries[t];u.confirmTransitionTo(a,"POP",n,(function(e){e?d({action:"POP",location:a,index:t}):d()}))}var x={length:h.length,action:"POP",location:h[b],index:b,entries:h,createHref:v,push:function(e,t){var a="PUSH",o=f(e,t,g(),x.location);u.confirmTransitionTo(o,a,n,(function(e){if(e){var t=x.index+1,n=x.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:a,location:o,index:t,entries:n})}}))},replace:function(e,t){var a="REPLACE",o=f(e,t,g(),x.location);u.confirmTransitionTo(o,a,n,(function(e){e&&(x.entries[x.index]=o,d({action:a,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=x.index+e;return t>=0&&t<x.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return x}},55839:(e,t,n)=>{"use strict";var a=n(19185),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},r={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return a.isMemo(e)?i:s[e.$$typeof]||o}s[a.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[a.Memo]=i;var l=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,a){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,a)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=c(t),g=c(n),b=0;b<i.length;++b){var h=i[b];if(!(r[h]||a&&a[h]||g&&g[h]||s&&s[h])){var v=p(n,h);try{l(t,h,v)}catch(y){}}}}return t}},3996:e=>{"use strict";e.exports=function(e,t,n,a,o,r,i,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,a,o,r,i,s],u=0;(c=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},70142:(e,t,n)=>{"use strict";n.r(t)},26222:(e,t,n)=>{"use strict";n.r(t)},59887:(e,t,n)=>{"use strict";n.r(t)},8504:function(e,t,n){var a,o;a=function(){var e,t,n={version:"0.2.0"},a=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function r(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===a.positionUsing?{transform:"translate3d("+r(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+r(e)+"%,0)"}:{"margin-left":r(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(a[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,a.minimum,1),n.status=1===e?null:e;var r=n.render(!t),l=r.querySelector(a.barSelector),u=a.speed,d=a.easing;return r.offsetWidth,s((function(t){""===a.positionUsing&&(a.positionUsing=n.getPositioningCSS()),c(l,i(e,u,d)),1===e?(c(r,{transition:"none",opacity:1}),r.offsetWidth,setTimeout((function(){c(r,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*a.trickleRate)},e=0,t=0,n.promise=function(a){return a&&"resolved"!==a.state()?(0===t&&n.start(),e++,t++,a.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=a.template;var o,i=t.querySelector(a.barSelector),s=e?"-100":r(n.status||0),l=document.querySelector(a.parent);return c(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),a.showSpinner||(o=t.querySelector(a.spinnerSelector))&&f(o),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),c=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function a(t){var n=document.body.style;if(t in n)return t;for(var a,o=e.length,r=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((a=e[o]+r)in n)return a;return t}function o(e){return e=n(e),t[e]||(t[e]=a(e))}function r(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,a,o=arguments;if(2==o.length)for(n in t)void 0!==(a=t[n])&&t.hasOwnProperty(n)&&r(e,n,a);else r(e,o[1],o[2])}}();function l(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),a=n+t;l(n,t)||(e.className=a.substring(1))}function d(e,t){var n,a=p(e);l(e,t)&&(n=a.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof a?a.call(t,n,t,e):a)||(e.exports=o)},52349:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},a={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,r;switch(n=n||{},a.util.type(t)){case"Object":if(r=a.util.objId(t),n[r])return n[r];for(var i in o={},n[r]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return r=a.util.objId(t),n[r]?n[r]:(o=[],n[r]=o,t.forEach((function(t,a){o[a]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var a="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(a))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=a.util.clone(a.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var r=(o=o||a.languages)[e],i={};for(var s in r)if(r.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(i[c]=n[c]);n.hasOwnProperty(s)||(i[s]=r[s])}var l=o[e];return o[e]=i,a.languages.DFS(a.languages,(function(t,n){n===l&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,r){r=r||{};var i=a.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var c=t[s],l=a.util.type(c);"Object"!==l||r[i(c)]?"Array"!==l||r[i(c)]||(r[i(c)]=!0,e(c,n,s,r)):(r[i(c)]=!0,e(c,n,null,r))}}},plugins:{},highlight:function(e,t,n){var r={code:e,grammar:t,language:n};return a.hooks.run("before-tokenize",r),r.tokens=a.tokenize(r.code,r.grammar),a.hooks.run("after-tokenize",r),o.stringify(a.util.encode(r.tokens),r.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var a in n)t[a]=n[a];delete t.rest}var o=new s;return c(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=a.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=a.hooks.all[e];if(n&&n.length)for(var o,r=0;o=n[r++];)o(t)}},Token:o};function o(e,t,n,a){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length}function r(e,t,n,a){e.lastIndex=t;var o=e.exec(n);if(o&&a&&o[1]){var r=o[1].length;o.index+=r,o[0]=o[0].slice(r)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var g=f[m],b=g.inside,h=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var x=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,x+"g")}for(var _=g.pattern||g,k=s.next,w=u;k!==t.tail&&!(d&&w>=d.reach);w+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof o)){var S,C=1;if(v){if(!(S=r(_,w,e,h))||S.index>=e.length)break;var T=S.index,P=S.index+S[0].length,A=w;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(w=A-=k.value.length,k.value instanceof o)continue;for(var N=k;N!==t.tail&&(A<P||"string"==typeof N.value);N=N.next)C++,A+=N.value.length;C--,E=e.slice(w,A),S.index-=w}else if(!(S=r(_,0,E,h)))continue;T=S.index;var O=S[0],j=E.slice(0,T),L=E.slice(T+O.length),M=w+E.length;d&&M>d.reach&&(d.reach=M);var I=k.prev;if(j&&(I=c(t,I,j),w+=j.length),l(t,I,C),k=c(t,I,new o(p,b?a.tokenize(O,b):O,y,O)),L&&c(t,k,L),C>1){var R={cause:p+","+m,reach:M};i(e,t,n,k.prev,w,R),d&&R.reach>d.reach&&(d.reach=R.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function c(e,t,n){var a=t.next,o={value:n,prev:t,next:a};return t.next=o,a.prev=o,e.length++,o}function l(e,t,n){for(var a=t.next,o=0;o<n&&a!==e.tail;o++)a=a.next;t.next=a,a.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var r={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(r.classes,i):r.classes.push(i)),a.hooks.run("wrap",r);var s="";for(var c in r.attributes)s+=" "+c+'="'+(r.attributes[c]||"").replace(/"/g,""")+'"';return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+s+">"+r.content+"</"+r.tag+">"},a}(),o=a;a.default=a,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},o.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=a.variable[1].inside,i=0;i<o.length;i++)r[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var a={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:a,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:a,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),r=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return a})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return a})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+r+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(r),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return a})),r=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+r+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+r+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+r+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,a=t.length;n<a;n++){var o=t[n];if("code"===o.type){var r=o.content[1],i=o.content[3];if(r&&i&&"code-language"===r.type&&"code-block"===i.type&&"string"==typeof r.content){var s=r.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),c="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,c]:i.alias.push(c):i.alias=[c]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",a=0,o=t.classes.length;a<o;a++){var r=t.classes[a],l=/language-(.+)/.exec(r);if(l){n=l[1];break}}var u,d=e.languages[n];if(d)t.content=e.highlight((u=t.content,u.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),c(n);var a=s[t];return a||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var a=t[n++];if("keyword"===a.type&&"mutation"===a.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var r=p(/^\($/,/^\)$/);if(-1===r)continue;for(;n<r;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=r+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),o.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=n;c<s;c++){var l=t[c];"variable"===l.type&&o.indexOf(l.content)>=0&&f(l,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var a=u(n+t);if(!a||a.type!==e[n])return!1}return!0}function p(e,a){for(var o=1,r=n;r<t.length;r++){var i=t[r],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(a.test(s)&&0===--o)return r}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,a=t.inside.interpolation,o=a.inside["interpolation-punctuation"],r=a.pattern.source;function i(t,a){if(e.languages[t])return{pattern:RegExp("((?:"+a+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function c(t,n,a){var o={code:t,grammar:n,language:a};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function l(t){var n={};n["interpolation-punctuation"]=o;var r=e.tokenize(t,n);if(3===r.length){var i=[1,1];i.push.apply(i,c(r[1],e.languages.javascript,"javascript")),r.splice.apply(r,i)}return new e.Token("interpolation",r,a.alias,t)}function u(t,n,a){var o=e.tokenize(t,{interpolation:{pattern:RegExp(r),lookbehind:!0}}),i=0,u={},d=c(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=s(i++,a)););return u[n]=o,n})).join(""),n,a),p=Object.keys(u);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var a=t[n];if("string"==typeof a||"string"==typeof a.content){var o=p[i],r="string"==typeof a?a:a.content,s=r.indexOf(o);if(-1!==s){++i;var c=r.substring(0,s),d=l(u[o]),f=r.substring(s+o.length),m=[];if(c&&m.push(c),m.push(d),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof a?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):a.content=m}}else{var b=a.content;Array.isArray(b)?e(b):e([b])}}}(d),new e.Token(a,d,"language-"+a,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var a=0,o=n.length;a<o;a++){var r=n[a];if("string"!=typeof r){var i=r.content;if(Array.isArray(i))if("template-string"===r.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var c=p(s),l=s.alias,d=Array.isArray(l)?l[0]:l,f=e.languages[d];if(!f)continue;i[1]=u(c,f,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],a=0;a<n.length;a++){var o=n[a],r=e.languages.javascript[o];"RegExp"===e.util.type(r)&&(r=e.languages.javascript[o]={pattern:r});var i=r.inside||{};r.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,a=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function r(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return a})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=r(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=r(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:r(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:r(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],a=0;a<t.length;a++){var o=t[a],r=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:r=!0),(r||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var c=i(o);a<t.length-1&&("string"==typeof t[a+1]||"plain-text"===t[a+1].type)&&(c+=i(t[a+1]),t.splice(a+1,1)),a>0&&("string"==typeof t[a-1]||"plain-text"===t[a-1].type)&&(c=i(t[a-1])+c,t.splice(a-1,1),a--),t[a]=new e.Token("plain-text",c,null,c)}o.content&&"string"!=typeof o.content&&s(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var a=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+a+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,o,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof r&&!r(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(a,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var o=0,r=Object.keys(n.tokenStack);!function i(s){for(var c=0;c<s.length&&!(o>=r.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=r[o],d=n.tokenStack[u],p="string"==typeof l?l:l.content,f=t(a,u),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),b=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),h=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(b),h&&v.push.apply(v,i([h])),"string"==typeof l?s.splice.apply(s,[c,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},a={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};a.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:a}},a.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:a}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:a}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:a}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:a}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:a.interpolation}},rest:a}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:a.interpolation,comment:a.comment,punctuation:/[{},]/}},func:a.func,string:a.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:a.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const r=o},36761:()=>{!function(e){var t=/\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source,n=/(?:[ \t]+(?![ \t])(?:<SP_BS>)?|<SP_BS>)/.source.replace(/<SP_BS>/g,(function(){return t})),a=/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source,o=/--[\w-]+=(?:<STR>|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(/<STR>/g,(function(){return a})),r={pattern:RegExp(a),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function s(e,t){return e=e.replace(/<OPT>/g,(function(){return o})).replace(/<SP>/g,(function(){return n})),RegExp(e,t)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:s(/(^(?:ONBUILD<SP>)?\w+<SP>)<OPT>(?:<SP><OPT>)*/.source,"i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[r,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:s(/(^(?:ONBUILD<SP>)?HEALTHCHECK<SP>(?:<OPT><SP>)*)(?:CMD|NONE)\b/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^(?:ONBUILD<SP>)?FROM<SP>(?:<OPT><SP>)*(?!--)[^ \t\\]+<SP>)AS/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^ONBUILD<SP>)\w+/.source,"i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:r,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism)},71667:()=>{!function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},56572:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},3567:()=>{Prism.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},Prism.hooks.add("before-tokenize",(function(e){if("twig"===e.language){Prism.languages["markup-templating"].buildPlaceholders(e,"twig",/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g)}})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"twig")}))},59341:(e,t,n)=>{var a={"./prism-docker":36761,"./prism-rust":71667,"./prism-toml":56572,"./prism-twig":3567};function o(e){var t=r(e);return n(t)}function r(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=r,e.exports=o,o.id=59341},58772:(e,t,n)=>{"use strict";var a=n(90331);function o(){}function r(){}r.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,r,i){if(i!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:r,resetWarningCache:o};return n.PropTypes=n,n}},23615:(e,t,n)=>{e.exports=n(58772)()},90331:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},43577:(e,t,n)=>{"use strict";var a=n(27378),o=n(43637);function r(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function c(e,t){l(e,t),l(e+"Capture",t)}function l(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function g(e,t,n,a,o,r,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=a,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=r,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var h=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,n,a){var o=b.hasOwnProperty(t)?b[t]:null;(null!==o?0!==o.type:a||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,a){if(null==t||function(e,t,n,a){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!a&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,a))return!0;if(a)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,a)&&(n=null),a||null===o?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,a=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,a?e.setAttributeNS(a,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(h,v);b[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(h,v);b[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(h,v);b[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var x=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=Symbol.for("react.element"),k=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),A=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),O=Symbol.for("react.memo"),j=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var L=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var M=Symbol.iterator;function I(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=M&&e[M]||e["@@iterator"])?e:null}var R,D=Object.assign;function z(e){if(void 0===R)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);R=t&&t[1]||""}return"\n"+R+e}var F=!1;function B(e,t){if(!e||F)return"";F=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(l){var a=l}Reflect.construct(e,[],t)}else{try{t.call()}catch(l){a=l}e.call(t.prototype)}else{try{throw Error()}catch(l){a=l}e()}}catch(l){if(l&&a&&"string"==typeof l.stack){for(var o=l.stack.split("\n"),r=a.stack.split("\n"),i=o.length-1,s=r.length-1;1<=i&&0<=s&&o[i]!==r[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==r[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==r[s]){var c="\n"+o[i].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}}while(1<=i&&0<=s);break}}}finally{F=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?z(e):""}function $(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case w:return"Fragment";case k:return"Portal";case S:return"Profiler";case E:return"StrictMode";case A:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case P:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case O:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case j:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function V(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function Z(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=Z(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),a=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,r=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){a=""+e,r.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(e){a=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=Z(e)?e.checked?"true":"false":e.value),(e=a)!==n&&(t.setValue(e),!0)}function G(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Y(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function K(e,t){var n=null==t.defaultValue?"":t.defaultValue,a=null!=t.checked?t.checked:t.defaultChecked;n=V(null!=t.value?t.value:n),e._wrapperState={initialChecked:a,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Q(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function X(e,t){Q(e,t);var n=V(t.value),a=t.type;if(null!=n)"number"===a?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===a||"reset"===a)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,V(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var a=t.type;if(!("submit"!==a&&"reset"!==a||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&G(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,a){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&a&&(e[n].defaultSelected=!0)}else{for(n=""+V(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(a&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ae(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(r(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(r(92));if(te(n)){if(1<n.length)throw Error(r(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:V(n)}}function re(e,t){var n=V(t.value),a=V(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=a&&(e.defaultValue=""+a)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ce(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var le,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((le=le||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=le.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,a){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function ge(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function be(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var a=0===n.indexOf("--"),o=ge(n,t[n],a);"float"===n&&(n="cssFloat"),a?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var he=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ve(e,t){if(t){if(he[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(r(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(r(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(r(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(r(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var xe=null;function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,we=null,Ee=null;function Se(e){if(e=xo(e)){if("function"!=typeof ke)throw Error(r(280));var t=e.stateNode;t&&(t=ko(t),ke(e.stateNode,e.type,t))}}function Ce(e){we?Ee?Ee.push(e):Ee=[e]:we=e}function Te(){if(we){var e=we,t=Ee;if(Ee=we=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Pe(e,t){return e(t)}function Ae(){}var Ne=!1;function Oe(e,t,n){if(Ne)return e(t,n);Ne=!0;try{return Pe(e,t,n)}finally{Ne=!1,(null!==we||null!==Ee)&&(Ae(),Te())}}function je(e,t){var n=e.stateNode;if(null===n)return null;var a=ko(n);if(null===a)return null;n=a[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(a=!a.disabled)||(a=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!a;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(r(231,t,typeof n));return n}var Le=!1;if(u)try{var Me={};Object.defineProperty(Me,"passive",{get:function(){Le=!0}}),window.addEventListener("test",Me,Me),window.removeEventListener("test",Me,Me)}catch(ue){Le=!1}function Ie(e,t,n,a,o,r,i,s,c){var l=Array.prototype.slice.call(arguments,3);try{t.apply(n,l)}catch(u){this.onError(u)}}var Re=!1,De=null,ze=!1,Fe=null,Be={onError:function(e){Re=!0,De=e}};function $e(e,t,n,a,o,r,i,s,c){Re=!1,De=null,Ie.apply(Be,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function He(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ve(e){if(Ue(e)!==e)throw Error(r(188))}function Ze(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(r(188));return t!==e?null:e}for(var n=e,a=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(a=o.return)){n=a;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Ve(o),e;if(i===a)return Ve(o),t;i=i.sibling}throw Error(r(188))}if(n.return!==a.return)n=o,a=i;else{for(var s=!1,c=o.child;c;){if(c===n){s=!0,n=o,a=i;break}if(c===a){s=!0,a=o,n=i;break}c=c.sibling}if(!s){for(c=i.child;c;){if(c===n){s=!0,n=i,a=o;break}if(c===a){s=!0,a=i,n=o;break}c=c.sibling}if(!s)throw Error(r(189))}}if(n.alternate!==a)throw Error(r(190))}if(3!==n.tag)throw Error(r(188));return n.stateNode.current===n?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var We=o.unstable_scheduleCallback,Ge=o.unstable_cancelCallback,Ye=o.unstable_shouldYield,Ke=o.unstable_requestPaint,Qe=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,at=o.unstable_IdlePriority,ot=null,rt=null;var it=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(st(e)/ct|0)|0},st=Math.log,ct=Math.LN2;var lt=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var a=0,o=e.suspendedLanes,r=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?a=dt(s):0!==(r&=i)&&(a=dt(r))}else 0!==(i=n&~o)?a=dt(i):0!==r&&(a=dt(r));if(0===a)return 0;if(0!==t&&t!==a&&0==(t&o)&&((o=a&-a)>=(r=t&-t)||16===o&&0!=(4194240&r)))return t;if(0!=(4&a)&&(a|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=a;0<t;)o=1<<(n=31-it(t)),a|=e[n],t&=~o;return a}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function gt(){var e=lt;return 0==(4194240&(lt<<=1))&&(lt=64),e}function bt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function ht(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var a=31-it(n),o=1<<a;o&t|e[a]&t&&(e[a]|=t),n&=~o}}var yt=0;function xt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var _t,kt,wt,Et,St,Ct=!1,Tt=[],Pt=null,At=null,Nt=null,Ot=new Map,jt=new Map,Lt=[],Mt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function It(e,t){switch(e){case"focusin":case"focusout":Pt=null;break;case"dragenter":case"dragleave":At=null;break;case"mouseover":case"mouseout":Nt=null;break;case"pointerover":case"pointerout":Ot.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":jt.delete(t.pointerId)}}function Rt(e,t,n,a,o,r){return null===e||e.nativeEvent!==r?(e={blockedOn:t,domEventName:n,eventSystemFlags:a,nativeEvent:r,targetContainers:[o]},null!==t&&(null!==(t=xo(t))&&kt(t)),e):(e.eventSystemFlags|=a,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Dt(e){var t=yo(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=He(n)))return e.blockedOn=t,void St(e.priority,(function(){wt(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function zt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Yt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=xo(n))&&kt(t),e.blockedOn=n,!1;var a=new(n=e.nativeEvent).constructor(n.type,n);xe=a,n.target.dispatchEvent(a),xe=null,t.shift()}return!0}function Ft(e,t,n){zt(e)&&n.delete(t)}function Bt(){Ct=!1,null!==Pt&&zt(Pt)&&(Pt=null),null!==At&&zt(At)&&(At=null),null!==Nt&&zt(Nt)&&(Nt=null),Ot.forEach(Ft),jt.forEach(Ft)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var a=Tt[n];a.blockedOn===e&&(a.blockedOn=null)}}for(null!==Pt&&$t(Pt,e),null!==At&&$t(At,e),null!==Nt&&$t(Nt,e),Ot.forEach(t),jt.forEach(t),n=0;n<Lt.length;n++)(a=Lt[n]).blockedOn===e&&(a.blockedOn=null);for(;0<Lt.length&&null===(n=Lt[0]).blockedOn;)Dt(n),null===n.blockedOn&&Lt.shift()}var Ht=x.ReactCurrentBatchConfig,Vt=!0;function Zt(e,t,n,a){var o=yt,r=Ht.transition;Ht.transition=null;try{yt=1,Wt(e,t,n,a)}finally{yt=o,Ht.transition=r}}function qt(e,t,n,a){var o=yt,r=Ht.transition;Ht.transition=null;try{yt=4,Wt(e,t,n,a)}finally{yt=o,Ht.transition=r}}function Wt(e,t,n,a){if(Vt){var o=Yt(e,t,n,a);if(null===o)Va(e,t,a,Gt,n),It(e,a);else if(function(e,t,n,a,o){switch(t){case"focusin":return Pt=Rt(Pt,e,t,n,a,o),!0;case"dragenter":return At=Rt(At,e,t,n,a,o),!0;case"mouseover":return Nt=Rt(Nt,e,t,n,a,o),!0;case"pointerover":var r=o.pointerId;return Ot.set(r,Rt(Ot.get(r)||null,e,t,n,a,o)),!0;case"gotpointercapture":return r=o.pointerId,jt.set(r,Rt(jt.get(r)||null,e,t,n,a,o)),!0}return!1}(o,e,t,n,a))a.stopPropagation();else if(It(e,a),4&t&&-1<Mt.indexOf(e)){for(;null!==o;){var r=xo(o);if(null!==r&&_t(r),null===(r=Yt(e,t,n,a))&&Va(e,t,a,Gt,n),r===o)break;o=r}null!==o&&a.stopPropagation()}else Va(e,t,a,null,n)}}var Gt=null;function Yt(e,t,n,a){if(Gt=null,null!==(e=yo(e=_e(a))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=He(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gt=e,null}function Kt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case at:return 536870912;default:return 16}default:return 16}}var Qt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,a=n.length,o="value"in Qt?Qt.value:Qt.textContent,r=o.length;for(e=0;e<a&&n[e]===o[e];e++);var i=a-e;for(t=1;t<=i&&n[a-t]===o[r-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function an(){return!1}function on(e){function t(t,n,a,o,r){for(var i in this._reactName=t,this._targetInst=a,this.type=n,this.nativeEvent=o,this.target=r,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:an,this.isPropagationStopped=an,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var rn,sn,cn,ln={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(ln),dn=D({},ln,{view:0,detail:0}),pn=on(dn),fn=D({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(rn=e.screenX-cn.screenX,sn=e.screenY-cn.screenY):sn=rn=0,cn=e),rn)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=on(fn),gn=on(D({},fn,{dataTransfer:0})),bn=on(D({},dn,{relatedTarget:0})),hn=on(D({},ln,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=D({},ln,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yn=on(vn),xn=on(D({},ln,{data:0})),_n={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},wn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=wn[e])&&!!t[e]}function Sn(){return En}var Cn=D({},dn,{key:function(e){if(e.key){var t=_n[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=on(Cn),Pn=on(D({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=on(D({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),Nn=on(D({},ln,{propertyName:0,elapsedTime:0,pseudoElement:0})),On=D({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=on(On),Ln=[9,13,27,32],Mn=u&&"CompositionEvent"in window,In=null;u&&"documentMode"in document&&(In=document.documentMode);var Rn=u&&"TextEvent"in window&&!In,Dn=u&&(!Mn||In&&8<In&&11>=In),zn=String.fromCharCode(32),Fn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Ln.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Hn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Zn(e,t,n,a){Ce(a),0<(t=qa(t,"onChange")).length&&(n=new un("onChange","change",null,n,a),e.push({event:n,listeners:t}))}var qn=null,Wn=null;function Gn(e){za(e,0)}function Yn(e){if(W(_o(e)))return e}function Kn(e,t){if("change"===e)return t}var Qn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var ea=document.createElement("div");ea.setAttribute("oninput","return;"),Jn="function"==typeof ea.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function ta(){qn&&(qn.detachEvent("onpropertychange",na),Wn=qn=null)}function na(e){if("value"===e.propertyName&&Yn(Wn)){var t=[];Zn(t,Wn,e,_e(e)),Oe(Gn,t)}}function aa(e,t,n){"focusin"===e?(ta(),Wn=n,(qn=t).attachEvent("onpropertychange",na)):"focusout"===e&&ta()}function oa(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Yn(Wn)}function ra(e,t){if("click"===e)return Yn(t)}function ia(e,t){if("input"===e||"change"===e)return Yn(t)}var sa="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function ca(e,t){if(sa(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(a=0;a<n.length;a++){var o=n[a];if(!d.call(t,o)||!sa(e[o],t[o]))return!1}return!0}function la(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ua(e,t){var n,a=la(e);for(e=0;a;){if(3===a.nodeType){if(n=e+a.textContent.length,e<=t&&n>=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=la(a)}}function da(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?da(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pa(){for(var e=window,t=G();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(a){n=!1}if(!n)break;t=G((e=t.contentWindow).document)}return t}function fa(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function ma(e){var t=pa(),n=e.focusedElem,a=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&da(n.ownerDocument.documentElement,n)){if(null!==a&&fa(n))if(t=a.start,void 0===(e=a.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,r=Math.min(a.start,o);a=void 0===a.end?r:Math.min(a.end,o),!e.extend&&r>a&&(o=a,a=r,r=o),o=ua(n,r);var i=ua(n,a);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),r>a?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var ga=u&&"documentMode"in document&&11>=document.documentMode,ba=null,ha=null,va=null,ya=!1;function xa(e,t,n){var a=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ya||null==ba||ba!==G(a)||("selectionStart"in(a=ba)&&fa(a)?a={start:a.selectionStart,end:a.selectionEnd}:a={anchorNode:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset},va&&ca(va,a)||(va=a,0<(a=qa(ha,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:a}),t.target=ba)))}function _a(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var ka={animationend:_a("Animation","AnimationEnd"),animationiteration:_a("Animation","AnimationIteration"),animationstart:_a("Animation","AnimationStart"),transitionend:_a("Transition","TransitionEnd")},wa={},Ea={};function Sa(e){if(wa[e])return wa[e];if(!ka[e])return e;var t,n=ka[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ea)return wa[e]=n[t];return e}u&&(Ea=document.createElement("div").style,"AnimationEvent"in window||(delete ka.animationend.animation,delete ka.animationiteration.animation,delete ka.animationstart.animation),"TransitionEvent"in window||delete ka.transitionend.transition);var Ca=Sa("animationend"),Ta=Sa("animationiteration"),Pa=Sa("animationstart"),Aa=Sa("transitionend"),Na=new Map,Oa="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function ja(e,t){Na.set(e,t),c(t,[e])}for(var La=0;La<Oa.length;La++){var Ma=Oa[La];ja(Ma.toLowerCase(),"on"+(Ma[0].toUpperCase()+Ma.slice(1)))}ja(Ca,"onAnimationEnd"),ja(Ta,"onAnimationIteration"),ja(Pa,"onAnimationStart"),ja("dblclick","onDoubleClick"),ja("focusin","onFocus"),ja("focusout","onBlur"),ja(Aa,"onTransitionEnd"),l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ia="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ra=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ia));function Da(e,t,n){var a=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,a,o,i,s,c,l){if($e.apply(this,arguments),Re){if(!Re)throw Error(r(198));var u=De;Re=!1,De=null,ze||(ze=!0,Fe=u)}}(a,t,void 0,e),e.currentTarget=null}function za(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var a=e[n],o=a.event;a=a.listeners;e:{var r=void 0;if(t)for(var i=a.length-1;0<=i;i--){var s=a[i],c=s.instance,l=s.currentTarget;if(s=s.listener,c!==r&&o.isPropagationStopped())break e;Da(o,s,l),r=c}else for(i=0;i<a.length;i++){if(c=(s=a[i]).instance,l=s.currentTarget,s=s.listener,c!==r&&o.isPropagationStopped())break e;Da(o,s,l),r=c}}}if(ze)throw e=Fe,ze=!1,Fe=null,e}function Fa(e,t){var n=t[bo];void 0===n&&(n=t[bo]=new Set);var a=e+"__bubble";n.has(a)||(Ha(t,e,2,!1),n.add(a))}function Ba(e,t,n){var a=0;t&&(a|=4),Ha(n,e,a,t)}var $a="_reactListening"+Math.random().toString(36).slice(2);function Ua(e){if(!e[$a]){e[$a]=!0,i.forEach((function(t){"selectionchange"!==t&&(Ra.has(t)||Ba(t,!1,e),Ba(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$a]||(t[$a]=!0,Ba("selectionchange",!1,t))}}function Ha(e,t,n,a){switch(Kt(t)){case 1:var o=Zt;break;case 4:o=qt;break;default:o=Wt}n=o.bind(null,t,n,e),o=void 0,!Le||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),a?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Va(e,t,n,a,o){var r=a;if(0==(1&t)&&0==(2&t)&&null!==a)e:for(;;){if(null===a)return;var i=a.tag;if(3===i||4===i){var s=a.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=a.return;null!==i;){var c=i.tag;if((3===c||4===c)&&((c=i.stateNode.containerInfo)===o||8===c.nodeType&&c.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=yo(s)))return;if(5===(c=i.tag)||6===c){a=r=i;continue e}s=s.parentNode}}a=a.return}Oe((function(){var a=r,o=_e(n),i=[];e:{var s=Na.get(e);if(void 0!==s){var c=un,l=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":c=Tn;break;case"focusin":l="focus",c=bn;break;case"focusout":l="blur",c=bn;break;case"beforeblur":case"afterblur":c=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=gn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=An;break;case Ca:case Ta:case Pa:c=hn;break;case Aa:c=Nn;break;case"scroll":c=pn;break;case"wheel":c=jn;break;case"copy":case"cut":case"paste":c=yn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=Pn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,m=a;null!==m;){var g=(f=m).stateNode;if(5===f.tag&&null!==g&&(f=g,null!==p&&(null!=(g=je(m,p))&&u.push(Za(m,g,f)))),d)break;m=m.return}0<u.length&&(s=new c(s,l,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===xe||!(l=n.relatedTarget||n.fromElement)||!yo(l)&&!l[go])&&(c||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=a,null!==(l=(l=n.relatedTarget||n.toElement)?yo(l):null)&&(l!==(d=Ue(l))||5!==l.tag&&6!==l.tag)&&(l=null)):(c=null,l=a),c!==l)){if(u=mn,g="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Pn,g="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==c?s:_o(c),f=null==l?s:_o(l),(s=new u(g,m+"leave",c,n,o)).target=d,s.relatedTarget=f,g=null,yo(o)===a&&((u=new u(p,m+"enter",l,n,o)).target=f,u.relatedTarget=d,g=u),d=g,c&&l)e:{for(p=l,m=0,f=u=c;f;f=Wa(f))m++;for(f=0,g=p;g;g=Wa(g))f++;for(;0<m-f;)u=Wa(u),m--;for(;0<f-m;)p=Wa(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Wa(u),p=Wa(p)}u=null}else u=null;null!==c&&Ga(i,s,c,u,!1),null!==l&&null!==d&&Ga(i,d,l,u,!0)}if("select"===(c=(s=a?_o(a):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var b=Kn;else if(Vn(s))if(Qn)b=ia;else{b=oa;var h=aa}else(c=s.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(b=ra);switch(b&&(b=b(e,a))?Zn(i,b,n,o):(h&&h(e,s,a),"focusout"===e&&(h=s._wrapperState)&&h.controlled&&"number"===s.type&&ee(s,"number",s.value)),h=a?_o(a):window,e){case"focusin":(Vn(h)||"true"===h.contentEditable)&&(ba=h,ha=a,va=null);break;case"focusout":va=ha=ba=null;break;case"mousedown":ya=!0;break;case"contextmenu":case"mouseup":case"dragend":ya=!1,xa(i,n,o);break;case"selectionchange":if(ga)break;case"keydown":case"keyup":xa(i,n,o)}var v;if(Mn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Un?Bn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(Dn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==y?"onCompositionEnd"===y&&Un&&(v=en()):(Xt="value"in(Qt=o)?Qt.value:Qt.textContent,Un=!0)),0<(h=qa(a,y)).length&&(y=new xn(y,e,null,n,o),i.push({event:y,listeners:h}),v?y.data=v:null!==(v=$n(n))&&(y.data=v))),(v=Rn?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(Fn=!0,zn);case"textInput":return(e=t.data)===zn&&Fn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!Mn&&Bn(e,t)?(e=en(),Jt=Xt=Qt=null,Un=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Dn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(a=qa(a,"onBeforeInput")).length&&(o=new xn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:a}),o.data=v))}za(i,t)}))}function Za(e,t,n){return{instance:e,listener:t,currentTarget:n}}function qa(e,t){for(var n=t+"Capture",a=[];null!==e;){var o=e,r=o.stateNode;5===o.tag&&null!==r&&(o=r,null!=(r=je(e,n))&&a.unshift(Za(e,r,o)),null!=(r=je(e,t))&&a.push(Za(e,r,o))),e=e.return}return a}function Wa(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Ga(e,t,n,a,o){for(var r=t._reactName,i=[];null!==n&&n!==a;){var s=n,c=s.alternate,l=s.stateNode;if(null!==c&&c===a)break;5===s.tag&&null!==l&&(s=l,o?null!=(c=je(n,r))&&i.unshift(Za(n,c,s)):o||null!=(c=je(n,r))&&i.push(Za(n,c,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Ya=/\r\n?/g,Ka=/\u0000|\uFFFD/g;function Qa(e){return("string"==typeof e?e:""+e).replace(Ya,"\n").replace(Ka,"")}function Xa(e,t,n){if(t=Qa(t),Qa(e)!==t&&n)throw Error(r(425))}function Ja(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ao="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ro="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ro?function(e){return ro.resolve(null).then(e).catch(so)}:ao;function so(e){setTimeout((function(){throw e}))}function co(e,t){var n=t,a=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===a)return e.removeChild(o),void Ut(t);a--}else"$"!==n&&"$?"!==n&&"$!"!==n||a++;n=o}while(n);Ut(t)}function lo(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,go="__reactContainer$"+po,bo="__reactEvents$"+po,ho="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[go]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function xo(e){return!(e=e[fo]||e[go])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function _o(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(r(33))}function ko(e){return e[mo]||null}var wo=[],Eo=-1;function So(e){return{current:e}}function Co(e){0>Eo||(e.current=wo[Eo],wo[Eo]=null,Eo--)}function To(e,t){Eo++,wo[Eo]=e.current,e.current=t}var Po={},Ao=So(Po),No=So(!1),Oo=Po;function jo(e,t){var n=e.type.contextTypes;if(!n)return Po;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var o,r={};for(o in n)r[o]=t[o];return a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function Lo(e){return null!=(e=e.childContextTypes)}function Mo(){Co(No),Co(Ao)}function Io(e,t,n){if(Ao.current!==Po)throw Error(r(168));To(Ao,t),To(No,n)}function Ro(e,t,n){var a=e.stateNode;if(t=t.childContextTypes,"function"!=typeof a.getChildContext)return n;for(var o in a=a.getChildContext())if(!(o in t))throw Error(r(108,H(e)||"Unknown",o));return D({},n,a)}function Do(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Po,Oo=Ao.current,To(Ao,e),To(No,No.current),!0}function zo(e,t,n){var a=e.stateNode;if(!a)throw Error(r(169));n?(e=Ro(e,t,Oo),a.__reactInternalMemoizedMergedChildContext=e,Co(No),Co(Ao),To(Ao,e)):Co(No),To(No,n)}var Fo=null,Bo=!1,$o=!1;function Uo(e){null===Fo?Fo=[e]:Fo.push(e)}function Ho(){if(!$o&&null!==Fo){$o=!0;var e=0,t=yt;try{var n=Fo;for(yt=1;e<n.length;e++){var a=n[e];do{a=a(!0)}while(null!==a)}Fo=null,Bo=!1}catch(o){throw null!==Fo&&(Fo=Fo.slice(e+1)),We(Je,Ho),o}finally{yt=t,$o=!1}}return null}var Vo=[],Zo=0,qo=null,Wo=0,Go=[],Yo=0,Ko=null,Qo=1,Xo="";function Jo(e,t){Vo[Zo++]=Wo,Vo[Zo++]=qo,qo=e,Wo=t}function er(e,t,n){Go[Yo++]=Qo,Go[Yo++]=Xo,Go[Yo++]=Ko,Ko=e;var a=Qo;e=Xo;var o=32-it(a)-1;a&=~(1<<o),n+=1;var r=32-it(t)+o;if(30<r){var i=o-o%5;r=(a&(1<<i)-1).toString(32),a>>=i,o-=i,Qo=1<<32-it(t)+o|n<<o|a,Xo=r+e}else Qo=1<<r|n<<o|a,Xo=e}function tr(e){null!==e.return&&(Jo(e,1),er(e,1,0))}function nr(e){for(;e===qo;)qo=Vo[--Zo],Vo[Zo]=null,Wo=Vo[--Zo],Vo[Zo]=null;for(;e===Ko;)Ko=Go[--Yo],Go[Yo]=null,Xo=Go[--Yo],Go[Yo]=null,Qo=Go[--Yo],Go[Yo]=null}var ar=null,or=null,rr=!1,ir=null;function sr(e,t){var n=Ol(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function cr(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ar=e,or=lo(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ar=e,or=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ko?{id:Qo,overflow:Xo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Ol(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ar=e,or=null,!0);default:return!1}}function lr(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ur(e){if(rr){var t=or;if(t){var n=t;if(!cr(e,t)){if(lr(e))throw Error(r(418));t=lo(n.nextSibling);var a=ar;t&&cr(e,t)?sr(a,n):(e.flags=-4097&e.flags|2,rr=!1,ar=e)}}else{if(lr(e))throw Error(r(418));e.flags=-4097&e.flags|2,rr=!1,ar=e}}}function dr(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ar=e}function pr(e){if(e!==ar)return!1;if(!rr)return dr(e),rr=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=or)){if(lr(e))throw fr(),Error(r(418));for(;t;)sr(e,t),t=lo(t.nextSibling)}if(dr(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(r(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){or=lo(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}or=null}}else or=ar?lo(e.stateNode.nextSibling):null;return!0}function fr(){for(var e=or;e;)e=lo(e.nextSibling)}function mr(){or=ar=null,rr=!1}function gr(e){null===ir?ir=[e]:ir.push(e)}var br=x.ReactCurrentBatchConfig;function hr(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var vr=So(null),yr=null,xr=null,_r=null;function kr(){_r=xr=yr=null}function wr(e){var t=vr.current;Co(vr),e._currentValue=t}function Er(e,t,n){for(;null!==e;){var a=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==a&&(a.childLanes|=t)):null!==a&&(a.childLanes&t)!==t&&(a.childLanes|=t),e===n)break;e=e.return}}function Sr(e,t){yr=e,_r=xr=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(xs=!0),e.firstContext=null)}function Cr(e){var t=e._currentValue;if(_r!==e)if(e={context:e,memoizedValue:t,next:null},null===xr){if(null===yr)throw Error(r(308));xr=e,yr.dependencies={lanes:0,firstContext:e}}else xr=xr.next=e;return t}var Tr=null;function Pr(e){null===Tr?Tr=[e]:Tr.push(e)}function Ar(e,t,n,a){var o=t.interleaved;return null===o?(n.next=n,Pr(t)):(n.next=o.next,o.next=n),t.interleaved=n,Nr(e,a)}function Nr(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Or=!1;function jr(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Lr(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Mr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ir(e,t,n){var a=e.updateQueue;if(null===a)return null;if(a=a.shared,0!=(2&Pc)){var o=a.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),a.pending=t,Nr(e,n)}return null===(o=a.interleaved)?(t.next=t,Pr(a)):(t.next=o.next,o.next=t),a.interleaved=t,Nr(e,n)}function Rr(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var a=t.lanes;n|=a&=e.pendingLanes,t.lanes=n,vt(e,n)}}function Dr(e,t){var n=e.updateQueue,a=e.alternate;if(null!==a&&n===(a=a.updateQueue)){var o=null,r=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===r?o=r=i:r=r.next=i,n=n.next}while(null!==n);null===r?o=r=t:r=r.next=t}else o=r=t;return n={baseState:a.baseState,firstBaseUpdate:o,lastBaseUpdate:r,shared:a.shared,effects:a.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function zr(e,t,n,a){var o=e.updateQueue;Or=!1;var r=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var c=s,l=c.next;c.next=null,null===i?r=l:i.next=l,i=c;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(null!==r){var d=o.baseState;for(i=0,u=l=c=null,s=r;;){var p=s.lane,f=s.eventTime;if((a&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var m=e,g=s;switch(p=t,f=n,g.tag){case 1:if("function"==typeof(m=g.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=g.payload)?m.call(f,d,p):m))break e;d=D({},d,p);break e;case 2:Or=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(l=u=f,c=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(c=d),o.baseState=c,o.firstBaseUpdate=l,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===r&&(o.shared.lanes=0);Rc|=i,e.lanes=i,e.memoizedState=d}}function Fr(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var a=e[t],o=a.callback;if(null!==o){if(a.callback=null,a=n,"function"!=typeof o)throw Error(r(191,o));o.call(a)}}}var Br=(new a.Component).refs;function $r(e,t,n,a){n=null==(n=n(a,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var Ur={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var a=el(),o=tl(e),r=Mr(a,o);r.payload=t,null!=n&&(r.callback=n),null!==(t=Ir(e,r,o))&&(nl(t,e,o,a),Rr(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var a=el(),o=tl(e),r=Mr(a,o);r.tag=1,r.payload=t,null!=n&&(r.callback=n),null!==(t=Ir(e,r,o))&&(nl(t,e,o,a),Rr(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=el(),a=tl(e),o=Mr(n,a);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ir(e,o,a))&&(nl(t,e,a,n),Rr(t,e,a))}};function Hr(e,t,n,a,o,r,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(a,r,i):!t.prototype||!t.prototype.isPureReactComponent||(!ca(n,a)||!ca(o,r))}function Vr(e,t,n){var a=!1,o=Po,r=t.contextType;return"object"==typeof r&&null!==r?r=Cr(r):(o=Lo(t)?Oo:Ao.current,r=(a=null!=(a=t.contextTypes))?jo(e,o):Po),t=new t(n,r),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Ur,e.stateNode=t,t._reactInternals=e,a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=r),t}function Zr(e,t,n,a){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,a),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,a),t.state!==e&&Ur.enqueueReplaceState(t,t.state,null)}function qr(e,t,n,a){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Br,jr(e);var r=t.contextType;"object"==typeof r&&null!==r?o.context=Cr(r):(r=Lo(t)?Oo:Ao.current,o.context=jo(e,r)),o.state=e.memoizedState,"function"==typeof(r=t.getDerivedStateFromProps)&&($r(e,t,r,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&Ur.enqueueReplaceState(o,o.state,null),zr(e,n,o,a),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Wr(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(r(309));var a=n.stateNode}if(!a)throw Error(r(147,e));var o=a,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Br&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(r(284));if(!n._owner)throw Error(r(290,e))}return e}function Gr(e,t){throw e=Object.prototype.toString.call(t),Error(r(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Yr(e){return(0,e._init)(e._payload)}function Kr(e){function t(t,n){if(e){var a=t.deletions;null===a?(t.deletions=[n],t.flags|=16):a.push(n)}}function n(n,a){if(!e)return null;for(;null!==a;)t(n,a),a=a.sibling;return null}function a(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Ll(e,t)).index=0,e.sibling=null,e}function i(t,n,a){return t.index=a,e?null!==(a=t.alternate)?(a=a.index)<n?(t.flags|=2,n):a:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function c(e,t,n,a){return null===t||6!==t.tag?((t=Dl(n,e.mode,a)).return=e,t):((t=o(t,n)).return=e,t)}function l(e,t,n,a){var r=n.type;return r===w?d(e,t,n.props.children,a,n.key):null!==t&&(t.elementType===r||"object"==typeof r&&null!==r&&r.$$typeof===j&&Yr(r)===t.type)?((a=o(t,n.props)).ref=Wr(e,t,n),a.return=e,a):((a=Ml(n.type,n.key,n.props,null,e.mode,a)).ref=Wr(e,t,n),a.return=e,a)}function u(e,t,n,a){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=zl(n,e.mode,a)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,a,r){return null===t||7!==t.tag?((t=Il(n,e.mode,a,r)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Dl(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=Ml(t.type,t.key,t.props,null,e.mode,n)).ref=Wr(e,null,t),n.return=e,n;case k:return(t=zl(t,e.mode,n)).return=e,t;case j:return p(e,(0,t._init)(t._payload),n)}if(te(t)||I(t))return(t=Il(t,e.mode,n,null)).return=e,t;Gr(e,t)}return null}function f(e,t,n,a){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:c(e,t,""+n,a);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===o?l(e,t,n,a):null;case k:return n.key===o?u(e,t,n,a):null;case j:return f(e,t,(o=n._init)(n._payload),a)}if(te(n)||I(n))return null!==o?null:d(e,t,n,a,null);Gr(e,n)}return null}function m(e,t,n,a,o){if("string"==typeof a&&""!==a||"number"==typeof a)return c(t,e=e.get(n)||null,""+a,o);if("object"==typeof a&&null!==a){switch(a.$$typeof){case _:return l(t,e=e.get(null===a.key?n:a.key)||null,a,o);case k:return u(t,e=e.get(null===a.key?n:a.key)||null,a,o);case j:return m(e,t,n,(0,a._init)(a._payload),o)}if(te(a)||I(a))return d(t,e=e.get(n)||null,a,o,null);Gr(t,a)}return null}function g(o,r,s,c){for(var l=null,u=null,d=r,g=r=0,b=null;null!==d&&g<s.length;g++){d.index>g?(b=d,d=null):b=d.sibling;var h=f(o,d,s[g],c);if(null===h){null===d&&(d=b);break}e&&d&&null===h.alternate&&t(o,d),r=i(h,r,g),null===u?l=h:u.sibling=h,u=h,d=b}if(g===s.length)return n(o,d),rr&&Jo(o,g),l;if(null===d){for(;g<s.length;g++)null!==(d=p(o,s[g],c))&&(r=i(d,r,g),null===u?l=d:u.sibling=d,u=d);return rr&&Jo(o,g),l}for(d=a(o,d);g<s.length;g++)null!==(b=m(d,o,g,s[g],c))&&(e&&null!==b.alternate&&d.delete(null===b.key?g:b.key),r=i(b,r,g),null===u?l=b:u.sibling=b,u=b);return e&&d.forEach((function(e){return t(o,e)})),rr&&Jo(o,g),l}function b(o,s,c,l){var u=I(c);if("function"!=typeof u)throw Error(r(150));if(null==(c=u.call(c)))throw Error(r(151));for(var d=u=null,g=s,b=s=0,h=null,v=c.next();null!==g&&!v.done;b++,v=c.next()){g.index>b?(h=g,g=null):h=g.sibling;var y=f(o,g,v.value,l);if(null===y){null===g&&(g=h);break}e&&g&&null===y.alternate&&t(o,g),s=i(y,s,b),null===d?u=y:d.sibling=y,d=y,g=h}if(v.done)return n(o,g),rr&&Jo(o,b),u;if(null===g){for(;!v.done;b++,v=c.next())null!==(v=p(o,v.value,l))&&(s=i(v,s,b),null===d?u=v:d.sibling=v,d=v);return rr&&Jo(o,b),u}for(g=a(o,g);!v.done;b++,v=c.next())null!==(v=m(g,o,b,v.value,l))&&(e&&null!==v.alternate&&g.delete(null===v.key?b:v.key),s=i(v,s,b),null===d?u=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(o,e)})),rr&&Jo(o,b),u}return function e(a,r,i,c){if("object"==typeof i&&null!==i&&i.type===w&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case _:e:{for(var l=i.key,u=r;null!==u;){if(u.key===l){if((l=i.type)===w){if(7===u.tag){n(a,u.sibling),(r=o(u,i.props.children)).return=a,a=r;break e}}else if(u.elementType===l||"object"==typeof l&&null!==l&&l.$$typeof===j&&Yr(l)===u.type){n(a,u.sibling),(r=o(u,i.props)).ref=Wr(a,u,i),r.return=a,a=r;break e}n(a,u);break}t(a,u),u=u.sibling}i.type===w?((r=Il(i.props.children,a.mode,c,i.key)).return=a,a=r):((c=Ml(i.type,i.key,i.props,null,a.mode,c)).ref=Wr(a,r,i),c.return=a,a=c)}return s(a);case k:e:{for(u=i.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(a,r.sibling),(r=o(r,i.children||[])).return=a,a=r;break e}n(a,r);break}t(a,r),r=r.sibling}(r=zl(i,a.mode,c)).return=a,a=r}return s(a);case j:return e(a,r,(u=i._init)(i._payload),c)}if(te(i))return g(a,r,i,c);if(I(i))return b(a,r,i,c);Gr(a,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==r&&6===r.tag?(n(a,r.sibling),(r=o(r,i)).return=a,a=r):(n(a,r),(r=Dl(i,a.mode,c)).return=a,a=r),s(a)):n(a,r)}}var Qr=Kr(!0),Xr=Kr(!1),Jr={},ei=So(Jr),ti=So(Jr),ni=So(Jr);function ai(e){if(e===Jr)throw Error(r(174));return e}function oi(e,t){switch(To(ni,t),To(ti,e),To(ei,Jr),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ce(null,"");break;default:t=ce(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(ei),To(ei,t)}function ri(){Co(ei),Co(ti),Co(ni)}function ii(e){ai(ni.current);var t=ai(ei.current),n=ce(t,e.type);t!==n&&(To(ti,e),To(ei,n))}function si(e){ti.current===e&&(Co(ei),Co(ti))}var ci=So(0);function li(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=x.ReactCurrentDispatcher,fi=x.ReactCurrentBatchConfig,mi=0,gi=null,bi=null,hi=null,vi=!1,yi=!1,xi=0,_i=0;function ki(){throw Error(r(321))}function wi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sa(e[n],t[n]))return!1;return!0}function Ei(e,t,n,a,o,i){if(mi=i,gi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:cs,e=n(a,o),yi){i=0;do{if(yi=!1,xi=0,25<=i)throw Error(r(301));i+=1,hi=bi=null,t.updateQueue=null,pi.current=ls,e=n(a,o)}while(yi)}if(pi.current=is,t=null!==bi&&null!==bi.next,mi=0,hi=bi=gi=null,vi=!1,t)throw Error(r(300));return e}function Si(){var e=0!==xi;return xi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===hi?gi.memoizedState=hi=e:hi=hi.next=e,hi}function Ti(){if(null===bi){var e=gi.alternate;e=null!==e?e.memoizedState:null}else e=bi.next;var t=null===hi?gi.memoizedState:hi.next;if(null!==t)hi=t,bi=e;else{if(null===e)throw Error(r(310));e={memoizedState:(bi=e).memoizedState,baseState:bi.baseState,baseQueue:bi.baseQueue,queue:bi.queue,next:null},null===hi?gi.memoizedState=hi=e:hi=hi.next=e}return hi}function Pi(e,t){return"function"==typeof t?t(e):t}function Ai(e){var t=Ti(),n=t.queue;if(null===n)throw Error(r(311));n.lastRenderedReducer=e;var a=bi,o=a.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}a.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,a=a.baseState;var c=s=null,l=null,u=i;do{var d=u.lane;if((mi&d)===d)null!==l&&(l=l.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),a=u.hasEagerState?u.eagerState:e(a,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===l?(c=l=p,s=a):l=l.next=p,gi.lanes|=d,Rc|=d}u=u.next}while(null!==u&&u!==i);null===l?s=a:l.next=c,sa(a,t.memoizedState)||(xs=!0),t.memoizedState=a,t.baseState=s,t.baseQueue=l,n.lastRenderedState=a}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,gi.lanes|=i,Rc|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ni(e){var t=Ti(),n=t.queue;if(null===n)throw Error(r(311));n.lastRenderedReducer=e;var a=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sa(i,t.memoizedState)||(xs=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,a]}function Oi(){}function ji(e,t){var n=gi,a=Ti(),o=t(),i=!sa(a.memoizedState,o);if(i&&(a.memoizedState=o,xs=!0),a=a.queue,Vi(Ii.bind(null,n,a,e),[e]),a.getSnapshot!==t||i||null!==hi&&1&hi.memoizedState.tag){if(n.flags|=2048,Fi(9,Mi.bind(null,n,a,o,t),void 0,null),null===Ac)throw Error(r(349));0!=(30&mi)||Li(n,t,o)}return o}function Li(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Mi(e,t,n,a){t.value=n,t.getSnapshot=a,Ri(t)&&Di(e)}function Ii(e,t,n){return n((function(){Ri(t)&&Di(e)}))}function Ri(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sa(e,n)}catch(a){return!0}}function Di(e){var t=Nr(e,1);null!==t&&nl(t,e,1,-1)}function zi(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Pi,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,gi,e),[t.memoizedState,e]}function Fi(e,t,n,a){return e={tag:e,create:t,destroy:n,deps:a,next:null},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(a=n.next,n.next=e,e.next=a,t.lastEffect=e),e}function Bi(){return Ti().memoizedState}function $i(e,t,n,a){var o=Ci();gi.flags|=e,o.memoizedState=Fi(1|t,n,void 0,void 0===a?null:a)}function Ui(e,t,n,a){var o=Ti();a=void 0===a?null:a;var r=void 0;if(null!==bi){var i=bi.memoizedState;if(r=i.destroy,null!==a&&wi(a,i.deps))return void(o.memoizedState=Fi(t,n,r,a))}gi.flags|=e,o.memoizedState=Fi(1|t,n,r,a)}function Hi(e,t){return $i(8390656,8,e,t)}function Vi(e,t){return Ui(2048,8,e,t)}function Zi(e,t){return Ui(4,2,e,t)}function qi(e,t){return Ui(4,4,e,t)}function Wi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Gi(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4,4,Wi.bind(null,t,e),n)}function Yi(){}function Ki(e,t){var n=Ti();t=void 0===t?null:t;var a=n.memoizedState;return null!==a&&null!==t&&wi(t,a[1])?a[0]:(n.memoizedState=[e,t],e)}function Qi(e,t){var n=Ti();t=void 0===t?null:t;var a=n.memoizedState;return null!==a&&null!==t&&wi(t,a[1])?a[0]:(e=e(),n.memoizedState=[e,t],e)}function Xi(e,t,n){return 0==(21&mi)?(e.baseState&&(e.baseState=!1,xs=!0),e.memoizedState=n):(sa(n,t)||(n=gt(),gi.lanes|=n,Rc|=n,e.baseState=!0),t)}function Ji(e,t){var n=yt;yt=0!==n&&4>n?n:4,e(!0);var a=fi.transition;fi.transition={};try{e(!1),t()}finally{yt=n,fi.transition=a}}function es(){return Ti().memoizedState}function ts(e,t,n){var a=tl(e);if(n={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null},as(e))os(t,n);else if(null!==(n=Ar(e,t,n,a))){nl(n,e,a,el()),rs(n,t,a)}}function ns(e,t,n){var a=tl(e),o={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null};if(as(e))os(t,o);else{var r=e.alternate;if(0===e.lanes&&(null===r||0===r.lanes)&&null!==(r=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=r(i,n);if(o.hasEagerState=!0,o.eagerState=s,sa(s,i)){var c=t.interleaved;return null===c?(o.next=o,Pr(t)):(o.next=c.next,c.next=o),void(t.interleaved=o)}}catch(l){}null!==(n=Ar(e,t,o,a))&&(nl(n,e,a,o=el()),rs(n,t,a))}}function as(e){var t=e.alternate;return e===gi||null!==t&&t===gi}function os(e,t){yi=vi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function rs(e,t,n){if(0!=(4194240&n)){var a=t.lanes;n|=a&=e.pendingLanes,t.lanes=n,vt(e,n)}}var is={readContext:Cr,useCallback:ki,useContext:ki,useEffect:ki,useImperativeHandle:ki,useInsertionEffect:ki,useLayoutEffect:ki,useMemo:ki,useReducer:ki,useRef:ki,useState:ki,useDebugValue:ki,useDeferredValue:ki,useTransition:ki,useMutableSource:ki,useSyncExternalStore:ki,useId:ki,unstable_isNewReconciler:!1},ss={readContext:Cr,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Cr,useEffect:Hi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,$i(4194308,4,Wi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $i(4194308,4,e,t)},useInsertionEffect:function(e,t){return $i(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=Ci();return t=void 0!==n?n(t):t,a.memoizedState=a.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},a.queue=e,e=e.dispatch=ts.bind(null,gi,e),[a.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:zi,useDebugValue:Yi,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=zi(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var a=gi,o=Ci();if(rr){if(void 0===n)throw Error(r(407));n=n()}else{if(n=t(),null===Ac)throw Error(r(349));0!=(30&mi)||Li(a,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Hi(Ii.bind(null,a,i,e),[e]),a.flags|=2048,Fi(9,Mi.bind(null,a,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Ac.identifierPrefix;if(rr){var n=Xo;t=":"+t+"R"+(n=(Qo&~(1<<32-it(Qo)-1)).toString(32)+n),0<(n=xi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=_i++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},cs={readContext:Cr,useCallback:Ki,useContext:Cr,useEffect:Vi,useImperativeHandle:Gi,useInsertionEffect:Zi,useLayoutEffect:qi,useMemo:Qi,useReducer:Ai,useRef:Bi,useState:function(){return Ai(Pi)},useDebugValue:Yi,useDeferredValue:function(e){return Xi(Ti(),bi.memoizedState,e)},useTransition:function(){return[Ai(Pi)[0],Ti().memoizedState]},useMutableSource:Oi,useSyncExternalStore:ji,useId:es,unstable_isNewReconciler:!1},ls={readContext:Cr,useCallback:Ki,useContext:Cr,useEffect:Vi,useImperativeHandle:Gi,useInsertionEffect:Zi,useLayoutEffect:qi,useMemo:Qi,useReducer:Ni,useRef:Bi,useState:function(){return Ni(Pi)},useDebugValue:Yi,useDeferredValue:function(e){var t=Ti();return null===bi?t.memoizedState=e:Xi(t,bi.memoizedState,e)},useTransition:function(){return[Ni(Pi)[0],Ti().memoizedState]},useMutableSource:Oi,useSyncExternalStore:ji,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",a=t;do{n+=$(a),a=a.return}while(a);var o=n}catch(r){o="\nError generating stack: "+r.message+"\n"+r.stack}return{value:e,source:t,stack:o,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function ms(e,t,n){(n=Mr(-1,n)).tag=3,n.payload={element:null};var a=t.value;return n.callback=function(){Vc||(Vc=!0,Zc=a),ps(0,t)},n}function gs(e,t,n){(n=Mr(-1,n)).tag=3;var a=e.type.getDerivedStateFromError;if("function"==typeof a){var o=t.value;n.payload=function(){return a(o)},n.callback=function(){ps(0,t)}}var r=e.stateNode;return null!==r&&"function"==typeof r.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof a&&(null===qc?qc=new Set([this]):qc.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function bs(e,t,n){var a=e.pingCache;if(null===a){a=e.pingCache=new fs;var o=new Set;a.set(t,o)}else void 0===(o=a.get(t))&&(o=new Set,a.set(t,o));o.has(n)||(o.add(n),e=Sl.bind(null,e,t,n),t.then(e,e))}function hs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function vs(e,t,n,a,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Mr(-1,1)).tag=2,Ir(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var ys=x.ReactCurrentOwner,xs=!1;function _s(e,t,n,a){t.child=null===e?Xr(t,null,n,a):Qr(t,e.child,n,a)}function ks(e,t,n,a,o){n=n.render;var r=t.ref;return Sr(t,o),a=Ei(e,t,n,a,r,o),n=Si(),null===e||xs?(rr&&n&&tr(t),t.flags|=1,_s(e,t,a,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Vs(e,t,o))}function ws(e,t,n,a,o){if(null===e){var r=n.type;return"function"!=typeof r||jl(r)||void 0!==r.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ml(n.type,null,a,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=r,Es(e,t,r,a,o))}if(r=e.child,0==(e.lanes&o)){var i=r.memoizedProps;if((n=null!==(n=n.compare)?n:ca)(i,a)&&e.ref===t.ref)return Vs(e,t,o)}return t.flags|=1,(e=Ll(r,a)).ref=t.ref,e.return=t,t.child=e}function Es(e,t,n,a,o){if(null!==e){var r=e.memoizedProps;if(ca(r,a)&&e.ref===t.ref){if(xs=!1,t.pendingProps=a=r,0==(e.lanes&o))return t.lanes=e.lanes,Vs(e,t,o);0!=(131072&e.flags)&&(xs=!0)}}return Ts(e,t,n,a,o)}function Ss(e,t,n){var a=t.pendingProps,o=a.children,r=null!==e?e.memoizedState:null;if("hidden"===a.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},To(Lc,jc),jc|=n;else{if(0==(1073741824&n))return e=null!==r?r.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,To(Lc,jc),jc|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},a=null!==r?r.baseLanes:n,To(Lc,jc),jc|=a}else null!==r?(a=r.baseLanes|n,t.memoizedState=null):a=n,To(Lc,jc),jc|=a;return _s(e,t,o,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ts(e,t,n,a,o){var r=Lo(n)?Oo:Ao.current;return r=jo(t,r),Sr(t,o),n=Ei(e,t,n,a,r,o),a=Si(),null===e||xs?(rr&&a&&tr(t),t.flags|=1,_s(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Vs(e,t,o))}function Ps(e,t,n,a,o){if(Lo(n)){var r=!0;Do(t)}else r=!1;if(Sr(t,o),null===t.stateNode)Hs(e,t),Vr(t,n,a),qr(t,n,a,o),a=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var c=i.context,l=n.contextType;"object"==typeof l&&null!==l?l=Cr(l):l=jo(t,l=Lo(n)?Oo:Ao.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==a||c!==l)&&Zr(t,i,a,l),Or=!1;var p=t.memoizedState;i.state=p,zr(t,a,i,o),c=t.memoizedState,s!==a||p!==c||No.current||Or?("function"==typeof u&&($r(t,n,u,a),c=t.memoizedState),(s=Or||Hr(t,n,s,a,p,c,l))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=a,t.memoizedState=c),i.props=a,i.state=c,i.context=l,a=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),a=!1)}else{i=t.stateNode,Lr(e,t),s=t.memoizedProps,l=t.type===t.elementType?s:hr(t.type,s),i.props=l,d=t.pendingProps,p=i.context,"object"==typeof(c=n.contextType)&&null!==c?c=Cr(c):c=jo(t,c=Lo(n)?Oo:Ao.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==c)&&Zr(t,i,a,c),Or=!1,p=t.memoizedState,i.state=p,zr(t,a,i,o);var m=t.memoizedState;s!==d||p!==m||No.current||Or?("function"==typeof f&&($r(t,n,f,a),m=t.memoizedState),(l=Or||Hr(t,n,l,a,p,m,c)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(a,m,c),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(a,m,c)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=a,t.memoizedState=m),i.props=a,i.state=m,i.context=c,a=l):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),a=!1)}return As(e,t,n,a,r,o)}function As(e,t,n,a,o,r){Cs(e,t);var i=0!=(128&t.flags);if(!a&&!i)return o&&zo(t,n,!1),Vs(e,t,r);a=t.stateNode,ys.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:a.render();return t.flags|=1,null!==e&&i?(t.child=Qr(t,e.child,null,r),t.child=Qr(t,null,s,r)):_s(e,t,s,r),t.memoizedState=a.state,o&&zo(t,n,!0),t.child}function Ns(e){var t=e.stateNode;t.pendingContext?Io(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Io(0,t.context,!1),oi(e,t.containerInfo)}function Os(e,t,n,a,o){return mr(),gr(o),t.flags|=256,_s(e,t,n,a),t.child}var js,Ls,Ms,Is={dehydrated:null,treeContext:null,retryLane:0};function Rs(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ds(e,t,n){var a,o=t.pendingProps,i=ci.current,s=!1,c=0!=(128&t.flags);if((a=c)||(a=(null===e||null!==e.memoizedState)&&0!=(2&i)),a?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),To(ci,1&i),null===e)return ur(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(c=o.children,e=o.fallback,s?(o=t.mode,s=t.child,c={mode:"hidden",children:c},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=c):s=Rl(c,o,0,null),e=Il(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Rs(n),t.memoizedState=Is,e):zs(t,c));if(null!==(i=e.memoizedState)&&null!==(a=i.dehydrated))return function(e,t,n,a,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,Fs(e,t,s,a=ds(Error(r(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=a.fallback,o=t.mode,a=Rl({mode:"visible",children:a.children},o,0,null),(i=Il(i,o,s,null)).flags|=2,a.return=t,i.return=t,a.sibling=i,t.child=a,0!=(1&t.mode)&&Qr(t,e.child,null,s),t.child.memoizedState=Rs(s),t.memoizedState=Is,i);if(0==(1&t.mode))return Fs(e,t,s,null);if("$!"===o.data){if(a=o.nextSibling&&o.nextSibling.dataset)var c=a.dgst;return a=c,Fs(e,t,s,a=ds(i=Error(r(419)),a,void 0))}if(c=0!=(s&e.childLanes),xs||c){if(null!==(a=Ac)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(a.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Nr(e,o),nl(a,e,o,-1))}return gl(),Fs(e,t,s,a=ds(Error(r(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tl.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,or=lo(o.nextSibling),ar=t,rr=!0,ir=null,null!==e&&(Go[Yo++]=Qo,Go[Yo++]=Xo,Go[Yo++]=Ko,Qo=e.id,Xo=e.overflow,Ko=t),(t=zs(t,a.children)).flags|=4096,t)}(e,t,c,o,a,i,n);if(s){s=o.fallback,c=t.mode,a=(i=e.child).sibling;var l={mode:"hidden",children:o.children};return 0==(1&c)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=l,t.deletions=null):(o=Ll(i,l)).subtreeFlags=14680064&i.subtreeFlags,null!==a?s=Ll(a,s):(s=Il(s,c,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,c=null===(c=e.child.memoizedState)?Rs(n):{baseLanes:c.baseLanes|n,cachePool:null,transitions:c.transitions},s.memoizedState=c,s.childLanes=e.childLanes&~n,t.memoizedState=Is,o}return e=(s=e.child).sibling,o=Ll(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function zs(e,t){return(t=Rl({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Fs(e,t,n,a){return null!==a&&gr(a),Qr(t,e.child,null,n),(e=zs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var a=e.alternate;null!==a&&(a.lanes|=t),Er(e.return,t,n)}function $s(e,t,n,a,o){var r=e.memoizedState;null===r?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:a,tail:n,tailMode:o}:(r.isBackwards=t,r.rendering=null,r.renderingStartTime=0,r.last=a,r.tail=n,r.tailMode=o)}function Us(e,t,n){var a=t.pendingProps,o=a.revealOrder,r=a.tail;if(_s(e,t,a.children,n),0!=(2&(a=ci.current)))a=1&a|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}a&=1}if(To(ci,a),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===li(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,r);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===li(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,r);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Vs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Rc|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(r(153));if(null!==t.child){for(n=Ll(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ll(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Zs(e,t){if(!rr)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var a=null;null!==n;)null!==n.alternate&&(a=n),n=n.sibling;null===a?t||null===e.tail?e.tail=null:e.tail.sibling=null:a.sibling=null}}function qs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,a=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,a|=14680064&o.subtreeFlags,a|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,a|=o.subtreeFlags,a|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=a,e.childLanes=n,t}function Ws(e,t,n){var a=t.pendingProps;switch(nr(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qs(t),null;case 1:case 17:return Lo(t.type)&&Mo(),qs(t),null;case 3:return a=t.stateNode,ri(),Co(No),Co(Ao),di(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),null!==e&&null!==e.child||(pr(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ir&&(il(ir),ir=null))),qs(t),null;case 5:si(t);var o=ai(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Ls(e,t,n,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!a){if(null===t.stateNode)throw Error(r(166));return qs(t),null}if(e=ai(ei.current),pr(t)){a=t.stateNode,n=t.type;var i=t.memoizedProps;switch(a[fo]=t,a[mo]=i,e=0!=(1&t.mode),n){case"dialog":Fa("cancel",a),Fa("close",a);break;case"iframe":case"object":case"embed":Fa("load",a);break;case"video":case"audio":for(o=0;o<Ia.length;o++)Fa(Ia[o],a);break;case"source":Fa("error",a);break;case"img":case"image":case"link":Fa("error",a),Fa("load",a);break;case"details":Fa("toggle",a);break;case"input":K(a,i),Fa("invalid",a);break;case"select":a._wrapperState={wasMultiple:!!i.multiple},Fa("invalid",a);break;case"textarea":oe(a,i),Fa("invalid",a)}for(var c in ve(n,i),o=null,i)if(i.hasOwnProperty(c)){var l=i[c];"children"===c?"string"==typeof l?a.textContent!==l&&(!0!==i.suppressHydrationWarning&&Xa(a.textContent,l,e),o=["children",l]):"number"==typeof l&&a.textContent!==""+l&&(!0!==i.suppressHydrationWarning&&Xa(a.textContent,l,e),o=["children",""+l]):s.hasOwnProperty(c)&&null!=l&&"onScroll"===c&&Fa("scroll",a)}switch(n){case"input":q(a),J(a,i,!0);break;case"textarea":q(a),ie(a);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(a.onclick=Ja)}a=o,t.updateQueue=a,null!==a&&(t.flags|=4)}else{c=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof a.is?e=c.createElement(n,{is:a.is}):(e=c.createElement(n),"select"===n&&(c=e,a.multiple?c.multiple=!0:a.size&&(c.size=a.size))):e=c.createElementNS(e,n),e[fo]=t,e[mo]=a,js(e,t),t.stateNode=e;e:{switch(c=ye(n,a),n){case"dialog":Fa("cancel",e),Fa("close",e),o=a;break;case"iframe":case"object":case"embed":Fa("load",e),o=a;break;case"video":case"audio":for(o=0;o<Ia.length;o++)Fa(Ia[o],e);o=a;break;case"source":Fa("error",e),o=a;break;case"img":case"image":case"link":Fa("error",e),Fa("load",e),o=a;break;case"details":Fa("toggle",e),o=a;break;case"input":K(e,a),o=Y(e,a),Fa("invalid",e);break;case"option":default:o=a;break;case"select":e._wrapperState={wasMultiple:!!a.multiple},o=D({},a,{value:void 0}),Fa("invalid",e);break;case"textarea":oe(e,a),o=ae(e,a),Fa("invalid",e)}for(i in ve(n,o),l=o)if(l.hasOwnProperty(i)){var u=l[i];"style"===i?be(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Fa("scroll",e):null!=u&&y(e,i,u,c))}switch(n){case"input":q(e),J(e,a,!1);break;case"textarea":q(e),ie(e);break;case"option":null!=a.value&&e.setAttribute("value",""+V(a.value));break;case"select":e.multiple=!!a.multiple,null!=(i=a.value)?ne(e,!!a.multiple,i,!1):null!=a.defaultValue&&ne(e,!!a.multiple,a.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Ja)}switch(n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}}a&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return qs(t),null;case 6:if(e&&null!=t.stateNode)Ms(0,t,e.memoizedProps,a);else{if("string"!=typeof a&&null===t.stateNode)throw Error(r(166));if(n=ai(ni.current),ai(ei.current),pr(t)){if(a=t.stateNode,n=t.memoizedProps,a[fo]=t,(i=a.nodeValue!==n)&&null!==(e=ar))switch(e.tag){case 3:Xa(a.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xa(a.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(a=(9===n.nodeType?n:n.ownerDocument).createTextNode(a))[fo]=t,t.stateNode=a}return qs(t),null;case 13:if(Co(ci),a=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(rr&&null!==or&&0!=(1&t.mode)&&0==(128&t.flags))fr(),mr(),t.flags|=98560,i=!1;else if(i=pr(t),null!==a&&null!==a.dehydrated){if(null===e){if(!i)throw Error(r(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(r(317));i[fo]=t}else mr(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;qs(t),i=!1}else null!==ir&&(il(ir),ir=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((a=null!==a)!==(null!==e&&null!==e.memoizedState)&&a&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ci.current)?0===Mc&&(Mc=3):gl())),null!==t.updateQueue&&(t.flags|=4),qs(t),null);case 4:return ri(),null===e&&Ua(t.stateNode.containerInfo),qs(t),null;case 10:return wr(t.type._context),qs(t),null;case 19:if(Co(ci),null===(i=t.memoizedState))return qs(t),null;if(a=0!=(128&t.flags),null===(c=i.rendering))if(a)Zs(i,!1);else{if(0!==Mc||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(c=li(e))){for(t.flags|=128,Zs(i,!1),null!==(a=c.updateQueue)&&(t.updateQueue=a,t.flags|=4),t.subtreeFlags=0,a=n,n=t.child;null!==n;)e=a,(i=n).flags&=14680066,null===(c=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=c.childLanes,i.lanes=c.lanes,i.child=c.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=c.memoizedProps,i.memoizedState=c.memoizedState,i.updateQueue=c.updateQueue,i.type=c.type,e=c.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return To(ci,1&ci.current|2),t.child}e=e.sibling}null!==i.tail&&Qe()>Uc&&(t.flags|=128,a=!0,Zs(i,!1),t.lanes=4194304)}else{if(!a)if(null!==(e=li(c))){if(t.flags|=128,a=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Zs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!c.alternate&&!rr)return qs(t),null}else 2*Qe()-i.renderingStartTime>Uc&&1073741824!==n&&(t.flags|=128,a=!0,Zs(i,!1),t.lanes=4194304);i.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=i.last)?n.sibling=c:t.child=c,i.last=c)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Qe(),t.sibling=null,n=ci.current,To(ci,a?1&n|2:1&n),t):(qs(t),null);case 22:case 23:return dl(),a=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==a&&(t.flags|=8192),a&&0!=(1&t.mode)?0!=(1073741824&jc)&&(qs(t),6&t.subtreeFlags&&(t.flags|=8192)):qs(t),null;case 24:case 25:return null}throw Error(r(156,t.tag))}function Gs(e,t){switch(nr(t),t.tag){case 1:return Lo(t.type)&&Mo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ri(),Co(No),Co(Ao),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Co(ci),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(r(340));mr()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(ci),null;case 4:return ri(),null;case 10:return wr(t.type._context),null;case 22:case 23:return dl(),null;default:return null}}js=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ls=function(e,t,n,a){var o=e.memoizedProps;if(o!==a){e=t.stateNode,ai(ei.current);var r,i=null;switch(n){case"input":o=Y(e,o),a=Y(e,a),i=[];break;case"select":o=D({},o,{value:void 0}),a=D({},a,{value:void 0}),i=[];break;case"textarea":o=ae(e,o),a=ae(e,a),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof a.onClick&&(e.onclick=Ja)}for(u in ve(n,a),n=null,o)if(!a.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var c=o[u];for(r in c)c.hasOwnProperty(r)&&(n||(n={}),n[r]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in a){var l=a[u];if(c=null!=o?o[u]:void 0,a.hasOwnProperty(u)&&l!==c&&(null!=l||null!=c))if("style"===u)if(c){for(r in c)!c.hasOwnProperty(r)||l&&l.hasOwnProperty(r)||(n||(n={}),n[r]="");for(r in l)l.hasOwnProperty(r)&&c[r]!==l[r]&&(n||(n={}),n[r]=l[r])}else n||(i||(i=[]),i.push(u,n)),n=l;else"dangerouslySetInnerHTML"===u?(l=l?l.__html:void 0,c=c?c.__html:void 0,null!=l&&c!==l&&(i=i||[]).push(u,l)):"children"===u?"string"!=typeof l&&"number"!=typeof l||(i=i||[]).push(u,""+l):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=l&&"onScroll"===u&&Fa("scroll",e),i||c===l||(i=[])):(i=i||[]).push(u,l))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Ms=function(e,t,n,a){n!==a&&(t.flags|=4)};var Ys=!1,Ks=!1,Qs="function"==typeof WeakSet?WeakSet:Set,Xs=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(a){El(e,t,a)}else n.current=null}function ec(e,t,n){try{n()}catch(a){El(e,t,a)}}var tc=!1;function nc(e,t,n){var a=t.updateQueue;if(null!==(a=null!==a?a.lastEffect:null)){var o=a=a.next;do{if((o.tag&e)===e){var r=o.destroy;o.destroy=void 0,void 0!==r&&ec(t,n,r)}o=o.next}while(o!==a)}}function ac(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var a=n.create;n.destroy=a()}n=n.next}while(n!==t)}}function oc(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function rc(e){var t=e.alternate;null!==t&&(e.alternate=null,rc(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[bo],delete t[ho],delete t[vo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function ic(e){return 5===e.tag||3===e.tag||4===e.tag}function sc(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||ic(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cc(e,t,n){var a=e.tag;if(5===a||6===a)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Ja));else if(4!==a&&null!==(e=e.child))for(cc(e,t,n),e=e.sibling;null!==e;)cc(e,t,n),e=e.sibling}function lc(e,t,n){var a=e.tag;if(5===a||6===a)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==a&&null!==(e=e.child))for(lc(e,t,n),e=e.sibling;null!==e;)lc(e,t,n),e=e.sibling}var uc=null,dc=!1;function pc(e,t,n){for(n=n.child;null!==n;)fc(e,t,n),n=n.sibling}function fc(e,t,n){if(rt&&"function"==typeof rt.onCommitFiberUnmount)try{rt.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Ks||Js(n,t);case 6:var a=uc,o=dc;uc=null,pc(e,t,n),dc=o,null!==(uc=a)&&(dc?(e=uc,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):uc.removeChild(n.stateNode));break;case 18:null!==uc&&(dc?(e=uc,n=n.stateNode,8===e.nodeType?co(e.parentNode,n):1===e.nodeType&&co(e,n),Ut(e)):co(uc,n.stateNode));break;case 4:a=uc,o=dc,uc=n.stateNode.containerInfo,dc=!0,pc(e,t,n),uc=a,dc=o;break;case 0:case 11:case 14:case 15:if(!Ks&&(null!==(a=n.updateQueue)&&null!==(a=a.lastEffect))){o=a=a.next;do{var r=o,i=r.destroy;r=r.tag,void 0!==i&&(0!=(2&r)||0!=(4&r))&&ec(n,t,i),o=o.next}while(o!==a)}pc(e,t,n);break;case 1:if(!Ks&&(Js(n,t),"function"==typeof(a=n.stateNode).componentWillUnmount))try{a.props=n.memoizedProps,a.state=n.memoizedState,a.componentWillUnmount()}catch(s){El(n,t,s)}pc(e,t,n);break;case 21:pc(e,t,n);break;case 22:1&n.mode?(Ks=(a=Ks)||null!==n.memoizedState,pc(e,t,n),Ks=a):pc(e,t,n);break;default:pc(e,t,n)}}function mc(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Qs),t.forEach((function(t){var a=Pl.bind(null,e,t);n.has(t)||(n.add(t),t.then(a,a))}))}}function gc(e,t){var n=t.deletions;if(null!==n)for(var a=0;a<n.length;a++){var o=n[a];try{var i=e,s=t,c=s;e:for(;null!==c;){switch(c.tag){case 5:uc=c.stateNode,dc=!1;break e;case 3:case 4:uc=c.stateNode.containerInfo,dc=!0;break e}c=c.return}if(null===uc)throw Error(r(160));fc(i,s,o),uc=null,dc=!1;var l=o.alternate;null!==l&&(l.return=null),o.return=null}catch(u){El(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bc(t,e),t=t.sibling}function bc(e,t){var n=e.alternate,a=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gc(t,e),hc(e),4&a){try{nc(3,e,e.return),ac(3,e)}catch(b){El(e,e.return,b)}try{nc(5,e,e.return)}catch(b){El(e,e.return,b)}}break;case 1:gc(t,e),hc(e),512&a&&null!==n&&Js(n,n.return);break;case 5:if(gc(t,e),hc(e),512&a&&null!==n&&Js(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(b){El(e,e.return,b)}}if(4&a&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,c=e.type,l=e.updateQueue;if(e.updateQueue=null,null!==l)try{"input"===c&&"radio"===i.type&&null!=i.name&&Q(o,i),ye(c,s);var u=ye(c,i);for(s=0;s<l.length;s+=2){var d=l[s],p=l[s+1];"style"===d?be(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):y(o,d,p,u)}switch(c){case"input":X(o,i);break;case"textarea":re(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[mo]=i}catch(b){El(e,e.return,b)}}break;case 6:if(gc(t,e),hc(e),4&a){if(null===e.stateNode)throw Error(r(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(b){El(e,e.return,b)}}break;case 3:if(gc(t,e),hc(e),4&a&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(b){El(e,e.return,b)}break;case 4:default:gc(t,e),hc(e);break;case 13:gc(t,e),hc(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($c=Qe())),4&a&&mc(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Ks=(u=Ks)||d,gc(t,e),Ks=u):gc(t,e),hc(e),8192&a){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Xs=e,d=e.child;null!==d;){for(p=Xs=d;null!==Xs;){switch(m=(f=Xs).child,f.tag){case 0:case 11:case 14:case 15:nc(4,f,f.return);break;case 1:Js(f,f.return);var g=f.stateNode;if("function"==typeof g.componentWillUnmount){a=f,n=f.return;try{t=a,g.props=t.memoizedProps,g.state=t.memoizedState,g.componentWillUnmount()}catch(b){El(a,n,b)}}break;case 5:Js(f,f.return);break;case 22:if(null!==f.memoizedState){_c(p);continue}}null!==m?(m.return=f,Xs=m):_c(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(c=p.stateNode,s=null!=(l=p.memoizedProps.style)&&l.hasOwnProperty("display")?l.display:null,c.style.display=ge("display",s))}catch(b){El(e,e.return,b)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(b){El(e,e.return,b)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:gc(t,e),hc(e),4&a&&mc(e);case 21:}}function hc(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(ic(n)){var a=n;break e}n=n.return}throw Error(r(160))}switch(a.tag){case 5:var o=a.stateNode;32&a.flags&&(pe(o,""),a.flags&=-33),lc(e,sc(e),o);break;case 3:case 4:var i=a.stateNode.containerInfo;cc(e,sc(e),i);break;default:throw Error(r(161))}}catch(s){El(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vc(e,t,n){Xs=e,yc(e,t,n)}function yc(e,t,n){for(var a=0!=(1&e.mode);null!==Xs;){var o=Xs,r=o.child;if(22===o.tag&&a){var i=null!==o.memoizedState||Ys;if(!i){var s=o.alternate,c=null!==s&&null!==s.memoizedState||Ks;s=Ys;var l=Ks;if(Ys=i,(Ks=c)&&!l)for(Xs=o;null!==Xs;)c=(i=Xs).child,22===i.tag&&null!==i.memoizedState?kc(o):null!==c?(c.return=i,Xs=c):kc(o);for(;null!==r;)Xs=r,yc(r,t,n),r=r.sibling;Xs=o,Ys=s,Ks=l}xc(e)}else 0!=(8772&o.subtreeFlags)&&null!==r?(r.return=o,Xs=r):xc(e)}}function xc(e){for(;null!==Xs;){var t=Xs;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Ks||ac(5,t);break;case 1:var a=t.stateNode;if(4&t.flags&&!Ks)if(null===n)a.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:hr(t.type,n.memoizedProps);a.componentDidUpdate(o,n.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Fr(t,i,a);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Fr(t,s,n)}break;case 5:var c=t.stateNode;if(null===n&&4&t.flags){n=c;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(r(163))}Ks||512&t.flags&&oc(t)}catch(f){El(t,t.return,f)}}if(t===e){Xs=null;break}if(null!==(n=t.sibling)){n.return=t.return,Xs=n;break}Xs=t.return}}function _c(e){for(;null!==Xs;){var t=Xs;if(t===e){Xs=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Xs=n;break}Xs=t.return}}function kc(e){for(;null!==Xs;){var t=Xs;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ac(4,t)}catch(c){El(t,n,c)}break;case 1:var a=t.stateNode;if("function"==typeof a.componentDidMount){var o=t.return;try{a.componentDidMount()}catch(c){El(t,o,c)}}var r=t.return;try{oc(t)}catch(c){El(t,r,c)}break;case 5:var i=t.return;try{oc(t)}catch(c){El(t,i,c)}}}catch(c){El(t,t.return,c)}if(t===e){Xs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Xs=s;break}Xs=t.return}}var wc,Ec=Math.ceil,Sc=x.ReactCurrentDispatcher,Cc=x.ReactCurrentOwner,Tc=x.ReactCurrentBatchConfig,Pc=0,Ac=null,Nc=null,Oc=0,jc=0,Lc=So(0),Mc=0,Ic=null,Rc=0,Dc=0,zc=0,Fc=null,Bc=null,$c=0,Uc=1/0,Hc=null,Vc=!1,Zc=null,qc=null,Wc=!1,Gc=null,Yc=0,Kc=0,Qc=null,Xc=-1,Jc=0;function el(){return 0!=(6&Pc)?Qe():-1!==Xc?Xc:Xc=Qe()}function tl(e){return 0==(1&e.mode)?1:0!=(2&Pc)&&0!==Oc?Oc&-Oc:null!==br.transition?(0===Jc&&(Jc=gt()),Jc):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Kt(e.type)}function nl(e,t,n,a){if(50<Kc)throw Kc=0,Qc=null,Error(r(185));ht(e,n,a),0!=(2&Pc)&&e===Ac||(e===Ac&&(0==(2&Pc)&&(Dc|=n),4===Mc&&sl(e,Oc)),al(e,a),1===n&&0===Pc&&0==(1&t.mode)&&(Uc=Qe()+500,Bo&&Ho()))}function al(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,r=e.pendingLanes;0<r;){var i=31-it(r),s=1<<i,c=o[i];-1===c?0!=(s&n)&&0==(s&a)||(o[i]=ft(s,t)):c<=t&&(e.expiredLanes|=s),r&=~s}}(e,t);var a=pt(e,e===Ac?Oc:0);if(0===a)null!==n&&Ge(n),e.callbackNode=null,e.callbackPriority=0;else if(t=a&-a,e.callbackPriority!==t){if(null!=n&&Ge(n),1===t)0===e.tag?function(e){Bo=!0,Uo(e)}(cl.bind(null,e)):Uo(cl.bind(null,e)),io((function(){0==(6&Pc)&&Ho()})),n=null;else{switch(xt(a)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=at}n=Al(n,ol.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ol(e,t){if(Xc=-1,Jc=0,0!=(6&Pc))throw Error(r(327));var n=e.callbackNode;if(kl()&&e.callbackNode!==n)return null;var a=pt(e,e===Ac?Oc:0);if(0===a)return null;if(0!=(30&a)||0!=(a&e.expiredLanes)||t)t=bl(e,a);else{t=a;var o=Pc;Pc|=2;var i=ml();for(Ac===e&&Oc===t||(Hc=null,Uc=Qe()+500,pl(e,t));;)try{vl();break}catch(c){fl(e,c)}kr(),Sc.current=i,Pc=o,null!==Nc?t=0:(Ac=null,Oc=0,t=Mc)}if(0!==t){if(2===t&&(0!==(o=mt(e))&&(a=o,t=rl(e,o))),1===t)throw n=Ic,pl(e,0),sl(e,a),al(e,Qe()),n;if(6===t)sl(e,a);else{if(o=e.current.alternate,0==(30&a)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var a=0;a<n.length;a++){var o=n[a],r=o.getSnapshot;o=o.value;try{if(!sa(r(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bl(e,a))&&(0!==(i=mt(e))&&(a=i,t=rl(e,i))),1===t))throw n=Ic,pl(e,0),sl(e,a),al(e,Qe()),n;switch(e.finishedWork=o,e.finishedLanes=a,t){case 0:case 1:throw Error(r(345));case 2:case 5:_l(e,Bc,Hc);break;case 3:if(sl(e,a),(130023424&a)===a&&10<(t=$c+500-Qe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&a)!==a){el(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ao(_l.bind(null,e,Bc,Hc),t);break}_l(e,Bc,Hc);break;case 4:if(sl(e,a),(4194240&a)===a)break;for(t=e.eventTimes,o=-1;0<a;){var s=31-it(a);i=1<<s,(s=t[s])>o&&(o=s),a&=~i}if(a=o,10<(a=(120>(a=Qe()-a)?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*Ec(a/1960))-a)){e.timeoutHandle=ao(_l.bind(null,e,Bc,Hc),a);break}_l(e,Bc,Hc);break;default:throw Error(r(329))}}}return al(e,Qe()),e.callbackNode===n?ol.bind(null,e):null}function rl(e,t){var n=Fc;return e.current.memoizedState.isDehydrated&&(pl(e,t).flags|=256),2!==(e=bl(e,t))&&(t=Bc,Bc=n,null!==t&&il(t)),e}function il(e){null===Bc?Bc=e:Bc.push.apply(Bc,e)}function sl(e,t){for(t&=~zc,t&=~Dc,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),a=1<<n;e[n]=-1,t&=~a}}function cl(e){if(0!=(6&Pc))throw Error(r(327));kl();var t=pt(e,0);if(0==(1&t))return al(e,Qe()),null;var n=bl(e,t);if(0!==e.tag&&2===n){var a=mt(e);0!==a&&(t=a,n=rl(e,a))}if(1===n)throw n=Ic,pl(e,0),sl(e,t),al(e,Qe()),n;if(6===n)throw Error(r(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,_l(e,Bc,Hc),al(e,Qe()),null}function ll(e,t){var n=Pc;Pc|=1;try{return e(t)}finally{0===(Pc=n)&&(Uc=Qe()+500,Bo&&Ho())}}function ul(e){null!==Gc&&0===Gc.tag&&0==(6&Pc)&&kl();var t=Pc;Pc|=1;var n=Tc.transition,a=yt;try{if(Tc.transition=null,yt=1,e)return e()}finally{yt=a,Tc.transition=n,0==(6&(Pc=t))&&Ho()}}function dl(){jc=Lc.current,Co(Lc)}function pl(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Nc)for(n=Nc.return;null!==n;){var a=n;switch(nr(a),a.tag){case 1:null!=(a=a.type.childContextTypes)&&Mo();break;case 3:ri(),Co(No),Co(Ao),di();break;case 5:si(a);break;case 4:ri();break;case 13:case 19:Co(ci);break;case 10:wr(a.type._context);break;case 22:case 23:dl()}n=n.return}if(Ac=e,Nc=e=Ll(e.current,null),Oc=jc=t,Mc=0,Ic=null,zc=Dc=Rc=0,Bc=Fc=null,null!==Tr){for(t=0;t<Tr.length;t++)if(null!==(a=(n=Tr[t]).interleaved)){n.interleaved=null;var o=a.next,r=n.pending;if(null!==r){var i=r.next;r.next=o,a.next=i}n.pending=a}Tr=null}return e}function fl(e,t){for(;;){var n=Nc;try{if(kr(),pi.current=is,vi){for(var a=gi.memoizedState;null!==a;){var o=a.queue;null!==o&&(o.pending=null),a=a.next}vi=!1}if(mi=0,hi=bi=gi=null,yi=!1,xi=0,Cc.current=null,null===n||null===n.return){Mc=1,Ic=t,Nc=null;break}e:{var i=e,s=n.return,c=n,l=t;if(t=Oc,c.flags|=32768,null!==l&&"object"==typeof l&&"function"==typeof l.then){var u=l,d=c,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=hs(s);if(null!==m){m.flags&=-257,vs(m,s,c,0,t),1&m.mode&&bs(i,u,t),l=u;var g=(t=m).updateQueue;if(null===g){var b=new Set;b.add(l),t.updateQueue=b}else g.add(l);break e}if(0==(1&t)){bs(i,u,t),gl();break e}l=Error(r(426))}else if(rr&&1&c.mode){var h=hs(s);if(null!==h){0==(65536&h.flags)&&(h.flags|=256),vs(h,s,c,0,t),gr(us(l,c));break e}}i=l=us(l,c),4!==Mc&&(Mc=2),null===Fc?Fc=[i]:Fc.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Dr(i,ms(0,l,t));break e;case 1:c=l;var v=i.type,y=i.stateNode;if(0==(128&i.flags)&&("function"==typeof v.getDerivedStateFromError||null!==y&&"function"==typeof y.componentDidCatch&&(null===qc||!qc.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,Dr(i,gs(i,c,t));break e}}i=i.return}while(null!==i)}xl(n)}catch(x){t=x,Nc===n&&null!==n&&(Nc=n=n.return);continue}break}}function ml(){var e=Sc.current;return Sc.current=is,null===e?is:e}function gl(){0!==Mc&&3!==Mc&&2!==Mc||(Mc=4),null===Ac||0==(268435455&Rc)&&0==(268435455&Dc)||sl(Ac,Oc)}function bl(e,t){var n=Pc;Pc|=2;var a=ml();for(Ac===e&&Oc===t||(Hc=null,pl(e,t));;)try{hl();break}catch(o){fl(e,o)}if(kr(),Pc=n,Sc.current=a,null!==Nc)throw Error(r(261));return Ac=null,Oc=0,Mc}function hl(){for(;null!==Nc;)yl(Nc)}function vl(){for(;null!==Nc&&!Ye();)yl(Nc)}function yl(e){var t=wc(e.alternate,e,jc);e.memoizedProps=e.pendingProps,null===t?xl(e):Nc=t,Cc.current=null}function xl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Ws(n,t,jc)))return void(Nc=n)}else{if(null!==(n=Gs(n,t)))return n.flags&=32767,void(Nc=n);if(null===e)return Mc=6,void(Nc=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Nc=t);Nc=t=e}while(null!==t);0===Mc&&(Mc=5)}function _l(e,t,n){var a=yt,o=Tc.transition;try{Tc.transition=null,yt=1,function(e,t,n,a){do{kl()}while(null!==Gc);if(0!=(6&Pc))throw Error(r(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(r(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var a=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),r=1<<o;t[o]=0,a[o]=-1,e[o]=-1,n&=~r}}(e,i),e===Ac&&(Nc=Ac=null,Oc=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Wc||(Wc=!0,Al(tt,(function(){return kl(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Tc.transition,Tc.transition=null;var s=yt;yt=1;var c=Pc;Pc|=4,Cc.current=null,function(e,t){if(eo=Vt,fa(e=pa())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var a=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(a&&0!==a.rangeCount){n=a.anchorNode;var o=a.anchorOffset,i=a.focusNode;a=a.focusOffset;try{n.nodeType,i.nodeType}catch(_){n=null;break e}var s=0,c=-1,l=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(c=s+o),p!==i||0!==a&&3!==p.nodeType||(l=s+a),3===p.nodeType&&(s+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(c=s),f===i&&++d===a&&(l=s),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===c||-1===l?null:{start:c,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Vt=!1,Xs=t;null!==Xs;)if(e=(t=Xs).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Xs=e;else for(;null!==Xs;){t=Xs;try{var g=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==g){var b=g.memoizedProps,h=g.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?b:hr(t.type,b),h);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var x=t.stateNode.containerInfo;1===x.nodeType?x.textContent="":9===x.nodeType&&x.documentElement&&x.removeChild(x.documentElement);break;default:throw Error(r(163))}}catch(_){El(t,t.return,_)}if(null!==(e=t.sibling)){e.return=t.return,Xs=e;break}Xs=t.return}g=tc,tc=!1}(e,n),bc(n,e),ma(to),Vt=!!eo,to=eo=null,e.current=n,vc(n,e,o),Ke(),Pc=c,yt=s,Tc.transition=i}else e.current=n;if(Wc&&(Wc=!1,Gc=e,Yc=o),0===(i=e.pendingLanes)&&(qc=null),function(e){if(rt&&"function"==typeof rt.onCommitFiberRoot)try{rt.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),al(e,Qe()),null!==t)for(a=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],a(o.value,{componentStack:o.stack,digest:o.digest});if(Vc)throw Vc=!1,e=Zc,Zc=null,e;0!=(1&Yc)&&0!==e.tag&&kl(),0!=(1&(i=e.pendingLanes))?e===Qc?Kc++:(Kc=0,Qc=e):Kc=0,Ho()}(e,t,n,a)}finally{Tc.transition=o,yt=a}return null}function kl(){if(null!==Gc){var e=xt(Yc),t=Tc.transition,n=yt;try{if(Tc.transition=null,yt=16>e?16:e,null===Gc)var a=!1;else{if(e=Gc,Gc=null,Yc=0,0!=(6&Pc))throw Error(r(331));var o=Pc;for(Pc|=4,Xs=e.current;null!==Xs;){var i=Xs,s=i.child;if(0!=(16&Xs.flags)){var c=i.deletions;if(null!==c){for(var l=0;l<c.length;l++){var u=c[l];for(Xs=u;null!==Xs;){var d=Xs;switch(d.tag){case 0:case 11:case 15:nc(8,d,i)}var p=d.child;if(null!==p)p.return=d,Xs=p;else for(;null!==Xs;){var f=(d=Xs).sibling,m=d.return;if(rc(d),d===u){Xs=null;break}if(null!==f){f.return=m,Xs=f;break}Xs=m}}}var g=i.alternate;if(null!==g){var b=g.child;if(null!==b){g.child=null;do{var h=b.sibling;b.sibling=null,b=h}while(null!==b)}}Xs=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Xs=s;else e:for(;null!==Xs;){if(0!=(2048&(i=Xs).flags))switch(i.tag){case 0:case 11:case 15:nc(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Xs=v;break e}Xs=i.return}}var y=e.current;for(Xs=y;null!==Xs;){var x=(s=Xs).child;if(0!=(2064&s.subtreeFlags)&&null!==x)x.return=s,Xs=x;else e:for(s=y;null!==Xs;){if(0!=(2048&(c=Xs).flags))try{switch(c.tag){case 0:case 11:case 15:ac(9,c)}}catch(k){El(c,c.return,k)}if(c===s){Xs=null;break e}var _=c.sibling;if(null!==_){_.return=c.return,Xs=_;break e}Xs=c.return}}if(Pc=o,Ho(),rt&&"function"==typeof rt.onPostCommitFiberRoot)try{rt.onPostCommitFiberRoot(ot,e)}catch(k){}a=!0}return a}finally{yt=n,Tc.transition=t}}return!1}function wl(e,t,n){e=Ir(e,t=ms(0,t=us(n,t),1),1),t=el(),null!==e&&(ht(e,1,t),al(e,t))}function El(e,t,n){if(3===e.tag)wl(e,e,n);else for(;null!==t;){if(3===t.tag){wl(t,e,n);break}if(1===t.tag){var a=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof a.componentDidCatch&&(null===qc||!qc.has(a))){t=Ir(t,e=gs(t,e=us(n,e),1),1),e=el(),null!==t&&(ht(t,1,e),al(t,e));break}}t=t.return}}function Sl(e,t,n){var a=e.pingCache;null!==a&&a.delete(t),t=el(),e.pingedLanes|=e.suspendedLanes&n,Ac===e&&(Oc&n)===n&&(4===Mc||3===Mc&&(130023424&Oc)===Oc&&500>Qe()-$c?pl(e,0):zc|=n),al(e,t)}function Cl(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=el();null!==(e=Nr(e,t))&&(ht(e,t,n),al(e,n))}function Tl(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cl(e,n)}function Pl(e,t){var n=0;switch(e.tag){case 13:var a=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:a=e.stateNode;break;default:throw Error(r(314))}null!==a&&a.delete(t),Cl(e,n)}function Al(e,t){return We(e,t)}function Nl(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ol(e,t,n,a){return new Nl(e,t,n,a)}function jl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ll(e,t){var n=e.alternate;return null===n?((n=Ol(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ml(e,t,n,a,o,i){var s=2;if(a=e,"function"==typeof e)jl(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case w:return Il(n.children,o,i,t);case E:s=8,o|=8;break;case S:return(e=Ol(12,n,t,2|o)).elementType=S,e.lanes=i,e;case A:return(e=Ol(13,n,t,o)).elementType=A,e.lanes=i,e;case N:return(e=Ol(19,n,t,o)).elementType=N,e.lanes=i,e;case L:return Rl(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case P:s=11;break e;case O:s=14;break e;case j:s=16,a=null;break e}throw Error(r(130,null==e?e:typeof e,""))}return(t=Ol(s,n,t,o)).elementType=e,t.type=a,t.lanes=i,t}function Il(e,t,n,a){return(e=Ol(7,e,a,t)).lanes=n,e}function Rl(e,t,n,a){return(e=Ol(22,e,a,t)).elementType=L,e.lanes=n,e.stateNode={isHidden:!1},e}function Dl(e,t,n){return(e=Ol(6,e,null,t)).lanes=n,e}function zl(e,t,n){return(t=Ol(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Fl(e,t,n,a,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=bt(0),this.expirationTimes=bt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=bt(0),this.identifierPrefix=a,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bl(e,t,n,a,o,r,i,s,c){return e=new Fl(e,t,n,s,c),1===t?(t=1,!0===r&&(t|=8)):t=0,r=Ol(3,null,null,t),e.current=r,r.stateNode=e,r.memoizedState={element:a,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},jr(r),e}function $l(e,t,n){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==a?null:""+a,children:e,containerInfo:t,implementation:n}}function Ul(e){if(!e)return Po;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(r(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Lo(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(r(171))}if(1===e.tag){var n=e.type;if(Lo(n))return Ro(e,n,t)}return t}function Hl(e,t,n,a,o,r,i,s,c){return(e=Bl(n,a,!0,e,0,r,0,s,c)).context=Ul(null),n=e.current,(r=Mr(a=el(),o=tl(n))).callback=null!=t?t:null,Ir(n,r,o),e.current.lanes=o,ht(e,o,a),al(e,a),e}function Vl(e,t,n,a){var o=t.current,r=el(),i=tl(o);return n=Ul(n),null===t.context?t.context=n:t.pendingContext=n,(t=Mr(r,i)).payload={element:e},null!==(a=void 0===a?null:a)&&(t.callback=a),null!==(e=Ir(o,t,i))&&(nl(e,o,i,r),Rr(e,o,i)),i}function Zl(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function ql(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Wl(e,t){ql(e,t),(e=e.alternate)&&ql(e,t)}wc=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||No.current)xs=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return xs=!1,function(e,t,n){switch(t.tag){case 3:Ns(t),mr();break;case 5:ii(t);break;case 1:Lo(t.type)&&Do(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var a=t.type._context,o=t.memoizedProps.value;To(vr,a._currentValue),a._currentValue=o;break;case 13:if(null!==(a=t.memoizedState))return null!==a.dehydrated?(To(ci,1&ci.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Ds(e,t,n):(To(ci,1&ci.current),null!==(e=Vs(e,t,n))?e.sibling:null);To(ci,1&ci.current);break;case 19:if(a=0!=(n&t.childLanes),0!=(128&e.flags)){if(a)return Us(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),To(ci,ci.current),a)break;return null;case 22:case 23:return t.lanes=0,Ss(e,t,n)}return Vs(e,t,n)}(e,t,n);xs=0!=(131072&e.flags)}else xs=!1,rr&&0!=(1048576&t.flags)&&er(t,Wo,t.index);switch(t.lanes=0,t.tag){case 2:var a=t.type;Hs(e,t),e=t.pendingProps;var o=jo(t,Ao.current);Sr(t,n),o=Ei(null,t,a,e,o,n);var i=Si();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Lo(a)?(i=!0,Do(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,jr(t),o.updater=Ur,t.stateNode=o,o._reactInternals=t,qr(t,a,e,n),t=As(null,t,a,!0,i,n)):(t.tag=0,rr&&i&&tr(t),_s(null,t,o,n),t=t.child),t;case 16:a=t.elementType;e:{switch(Hs(e,t),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return jl(e)?1:0;if(null!=e){if((e=e.$$typeof)===P)return 11;if(e===O)return 14}return 2}(a),e=hr(a,e),o){case 0:t=Ts(null,t,a,e,n);break e;case 1:t=Ps(null,t,a,e,n);break e;case 11:t=ks(null,t,a,e,n);break e;case 14:t=ws(null,t,a,hr(a.type,e),n);break e}throw Error(r(306,a,""))}return t;case 0:return a=t.type,o=t.pendingProps,Ts(e,t,a,o=t.elementType===a?o:hr(a,o),n);case 1:return a=t.type,o=t.pendingProps,Ps(e,t,a,o=t.elementType===a?o:hr(a,o),n);case 3:e:{if(Ns(t),null===e)throw Error(r(387));a=t.pendingProps,o=(i=t.memoizedState).element,Lr(e,t),zr(t,a,null,n);var s=t.memoizedState;if(a=s.element,i.isDehydrated){if(i={element:a,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Os(e,t,a,n,o=us(Error(r(423)),t));break e}if(a!==o){t=Os(e,t,a,n,o=us(Error(r(424)),t));break e}for(or=lo(t.stateNode.containerInfo.firstChild),ar=t,rr=!0,ir=null,n=Xr(t,null,a,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(mr(),a===o){t=Vs(e,t,n);break e}_s(e,t,a,n)}t=t.child}return t;case 5:return ii(t),null===e&&ur(t),a=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(a,o)?s=null:null!==i&&no(a,i)&&(t.flags|=32),Cs(e,t),_s(e,t,s,n),t.child;case 6:return null===e&&ur(t),null;case 13:return Ds(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),a=t.pendingProps,null===e?t.child=Qr(t,null,a,n):_s(e,t,a,n),t.child;case 11:return a=t.type,o=t.pendingProps,ks(e,t,a,o=t.elementType===a?o:hr(a,o),n);case 7:return _s(e,t,t.pendingProps,n),t.child;case 8:case 12:return _s(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(a=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,To(vr,a._currentValue),a._currentValue=s,null!==i)if(sa(i.value,s)){if(i.children===o.children&&!No.current){t=Vs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var c=i.dependencies;if(null!==c){s=i.child;for(var l=c.firstContext;null!==l;){if(l.context===a){if(1===i.tag){(l=Mr(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}i.lanes|=n,null!==(l=i.alternate)&&(l.lanes|=n),Er(i.return,n,t),c.lanes|=n;break}l=l.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(r(341));s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),Er(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}_s(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,a=t.pendingProps.children,Sr(t,n),a=a(o=Cr(o)),t.flags|=1,_s(e,t,a,n),t.child;case 14:return o=hr(a=t.type,t.pendingProps),ws(e,t,a,o=hr(a.type,o),n);case 15:return Es(e,t,t.type,t.pendingProps,n);case 17:return a=t.type,o=t.pendingProps,o=t.elementType===a?o:hr(a,o),Hs(e,t),t.tag=1,Lo(a)?(e=!0,Do(t)):e=!1,Sr(t,n),Vr(t,a,o),qr(t,a,o,n),As(null,t,a,!0,e,n);case 19:return Us(e,t,n);case 22:return Ss(e,t,n)}throw Error(r(156,t.tag))};var Gl="function"==typeof reportError?reportError:function(e){console.error(e)};function Yl(e){this._internalRoot=e}function Kl(e){this._internalRoot=e}function Ql(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jl(){}function eu(e,t,n,a,o){var r=n._reactRootContainer;if(r){var i=r;if("function"==typeof o){var s=o;o=function(){var e=Zl(i);s.call(e)}}Vl(t,i,e,o)}else i=function(e,t,n,a,o){if(o){if("function"==typeof a){var r=a;a=function(){var e=Zl(i);r.call(e)}}var i=Hl(t,a,e,0,null,!1,0,"",Jl);return e._reactRootContainer=i,e[go]=i.current,Ua(8===e.nodeType?e.parentNode:e),ul(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof a){var s=a;a=function(){var e=Zl(c);s.call(e)}}var c=Bl(e,0,!1,null,0,!1,0,"",Jl);return e._reactRootContainer=c,e[go]=c.current,Ua(8===e.nodeType?e.parentNode:e),ul((function(){Vl(t,c,n,a)})),c}(n,t,e,o,a);return Zl(i)}Kl.prototype.render=Yl.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(r(409));Vl(e,t,null,null)},Kl.prototype.unmount=Yl.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;ul((function(){Vl(null,e,null,null)})),t[go]=null}},Kl.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Lt.length&&0!==t&&t<Lt[n].priority;n++);Lt.splice(n,0,e),0===n&&Dt(e)}},_t=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(vt(t,1|n),al(t,Qe()),0==(6&Pc)&&(Uc=Qe()+500,Ho()))}break;case 13:ul((function(){var t=Nr(e,1);if(null!==t){var n=el();nl(t,e,1,n)}})),Wl(e,1)}},kt=function(e){if(13===e.tag){var t=Nr(e,134217728);if(null!==t)nl(t,e,134217728,el());Wl(e,134217728)}},wt=function(e){if(13===e.tag){var t=tl(e),n=Nr(e,t);if(null!==n)nl(n,e,t,el());Wl(e,t)}},Et=function(){return yt},St=function(e,t){var n=yt;try{return yt=e,t()}finally{yt=n}},ke=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var a=n[t];if(a!==e&&a.form===e.form){var o=ko(a);if(!o)throw Error(r(90));W(a),X(a,o)}}}break;case"textarea":re(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Pe=ll,Ae=ul;var tu={usingClientEntryPoint:!1,Events:[xo,_o,ko,Ce,Te,ll]},nu={findFiberByHostInstance:yo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},au={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:x.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ze(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(au),rt=ou}catch(ue){}}t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Ql(t))throw Error(r(200));return $l(e,t,null,n)},t.hydrate=function(e,t,n){if(!Xl(t))throw Error(r(200));return eu(null,e,t,!0,n)}},31542:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(43577)},10745:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var a=n-1>>>1,o=e[a];if(!(0<r(o,t)))break e;e[a]=t,e[n]=o,n=a}}function a(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var a=0,o=e.length,i=o>>>1;a<i;){var s=2*(a+1)-1,c=e[s],l=s+1,u=e[l];if(0>r(c,n))l<o&&0>r(u,c)?(e[a]=u,e[l]=n,a=l):(e[a]=c,e[s]=n,a=s);else{if(!(l<o&&0>r(u,n)))break e;e[a]=u,e[l]=n,a=l}}}return t}function r(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,c=s.now();t.unstable_now=function(){return s.now()-c}}var l=[],u=[],d=1,p=null,f=3,m=!1,g=!1,b=!1,h="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function x(e){for(var t=a(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(l,t)}t=a(u)}}function _(e){if(b=!1,x(e),!g)if(null!==a(l))g=!0,L(k);else{var t=a(u);null!==t&&M(_,t.startTime-e)}}function k(e,n){g=!1,b&&(b=!1,v(C),C=-1),m=!0;var r=f;try{for(x(n),p=a(l);null!==p&&(!(p.expirationTime>n)||e&&!A());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===a(l)&&o(l),x(n)}else o(l);p=a(l)}if(null!==p)var c=!0;else{var d=a(u);null!==d&&M(_,d.startTime-n),c=!1}return c}finally{p=null,f=r,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var w,E=!1,S=null,C=-1,T=5,P=-1;function A(){return!(t.unstable_now()-P<T)}function N(){if(null!==S){var e=t.unstable_now();P=e;var n=!0;try{n=S(!0,e)}finally{n?w():(E=!1,S=null)}}else E=!1}if("function"==typeof y)w=function(){y(N)};else if("undefined"!=typeof MessageChannel){var O=new MessageChannel,j=O.port2;O.port1.onmessage=N,w=function(){j.postMessage(null)}}else w=function(){h(N,0)};function L(e){S=e,E||(E=!0,w())}function M(e,n){C=h((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){g||m||(g=!0,L(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return a(l)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,r){var i=t.unstable_now();switch("object"==typeof r&&null!==r?r="number"==typeof(r=r.delay)&&0<r?i+r:i:r=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:r,expirationTime:s=r+s,sortIndex:-1},r>i?(e.sortIndex=r,n(u,e),null===a(l)&&e===a(u)&&(b?(v(C),C=-1):b=!0,M(_,r-i))):(e.sortIndex=s,n(l,e),g||m||(g=!0,L(k))),e},t.unstable_shouldYield=A,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},43637:(e,t,n)=>{"use strict";e.exports=n(10745)},54335:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,a="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function r(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,c,l,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(c=s;0!=c--;)if(!r(e[c],i[c]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(c=u.next()).done;)if(!i.has(c.value[0]))return!1;for(u=e.entries();!(c=u.next()).done;)if(!r(c.value[1],i.get(c.value[0])))return!1;return!0}if(a&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(c=u.next()).done;)if(!i.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(c=s;0!=c--;)if(e[c]!==i[c])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((s=(l=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(c=s;0!=c--;)if(!Object.prototype.hasOwnProperty.call(i,l[c]))return!1;if(t&&e instanceof Element)return!1;for(c=s;0!=c--;)if(("_owner"!==l[c]&&"__v"!==l[c]&&"__o"!==l[c]||!e.$$typeof)&&!r(e[l[c]],i[l[c]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return r(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},92883:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Z,ql:()=>J});var a=n(27378),o=n(23615),r=n.n(o),i=n(54335),s=n.n(i),c=n(3996),l=n.n(c),u=n(74445),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)t.indexOf(n=r[a])>=0||(o[n]=e[n]);return o}var b={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},h={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},x=Object.keys(b).map((function(e){return b[e]})),_={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(_).reduce((function(e,t){return e[_[t]]=t,e}),{}),w=function(e,t){for(var n=e.length-1;n>=0;n-=1){var a=e[n];if(Object.prototype.hasOwnProperty.call(a,t))return a[t]}return null},E=function(e){var t=w(e,b.TITLE),n=w(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var a=w(e,"defaultTitle");return t||a||void 0},S=function(e){return w(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[b.BASE]})).map((function(e){return e[b.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var a=Object.keys(n),o=0;o<a.length;o+=1){var r=a[o].toLowerCase();if(-1!==e.indexOf(r)&&n[r])return t.concat(n)}return t}),[])},P=function(e,t,n){var a={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,r=Object.keys(e),i=0;i<r.length;i+=1){var s=r[i],c=s.toLowerCase();-1===t.indexOf(c)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===c&&"stylesheet"===e[c].toLowerCase()||(n=c),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var l=e[n].toLowerCase();return a[n]||(a[n]={}),o[n]||(o[n]={}),!a[n][l]&&(o[n][l]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var r=Object.keys(o),i=0;i<r.length;i+=1){var s=r[i],c=p({},a[s],o[s]);a[s]=c}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},N=function(e){return Array.isArray(e)?e.join(""):e},O=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),a=0;a<n.length;a+=1)if(t[n[a]]&&t[n[a]].includes(e[n[a]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},j=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},L=[b.NOSCRIPT,b.SCRIPT,b.STYLE],M=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},I=function(e){return Object.keys(e).reduce((function(t,n){var a=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+a:a}),"")},R=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[_[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var o,r=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=_[e]||e;"innerHTML"===n||"cssText"===n?r.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:r[n]=t[e]})),a.createElement(e,r)}))},z=function(e,t,n){switch(e){case b.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,r=R(n,o),[a.createElement(b.TITLE,r,e)];var e,n,o,r},toString:function(){return function(e,t,n,a){var o=I(n),r=N(t);return o?"<"+e+' data-rh="true" '+o+">"+M(r,a)+"</"+e+">":"<"+e+' data-rh="true">'+M(r,a)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return R(t)},toString:function(){return I(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,a){var o=Object.keys(a).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===a[t]?t:t+'="'+M(a[t],n)+'"';return e?e+" "+o:o}),""),r=a.innerHTML||a.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+r+"</"+e+">")}),"")}(e,t,n)}}}},F=function(e){var t=e.baseTag,n=e.bodyAttributes,a=e.encode,o=e.htmlAttributes,r=e.noscriptTags,i=e.styleTags,s=e.title,c=void 0===s?"":s,l=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,a=e.encode,o=O(e.metaTags,y),r=O(t,h),i=O(n,v);return{priorityMethods:{toComponent:function(){return[].concat(D(b.META,o.priority),D(b.LINK,r.priority),D(b.SCRIPT,i.priority))},toString:function(){return z(b.META,o.priority,a)+" "+z(b.LINK,r.priority,a)+" "+z(b.SCRIPT,i.priority,a)}},metaTags:o.default,linkTags:r.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:z(b.BASE,t,a),bodyAttributes:z("bodyAttributes",n,a),htmlAttributes:z("htmlAttributes",o,a),link:z(b.LINK,u,a),meta:z(b.META,d,a),noscript:z(b.NOSCRIPT,r,a),script:z(b.SCRIPT,p,a),style:z(b.STYLE,i,a),title:z(b.TITLE,{title:c,titleAttributes:l},a)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=F({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=a.createContext({}),H=r().shape({setHelmet:r().func,helmetInstances:r().shape({get:r().func,add:r().func,remove:r().func})}),V="undefined"!=typeof document,Z=function(e){function t(n){var a;return(a=e.call(this,n)||this).helmetData=new $(a.props.context,t.canUseDOM),a}return f(t,e),t.prototype.render=function(){return a.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(a.Component);Z.canUseDOM=V,Z.propTypes={context:r().shape({helmet:r().shape()}),children:r().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var q=function(e,t){var n,a=document.head||document.querySelector(b.HEAD),o=a.querySelectorAll(e+"[data-rh]"),r=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var a=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?a.innerHTML=t.innerHTML:"cssText"===o?a.styleSheet?a.styleSheet.cssText=t.cssText:a.appendChild(document.createTextNode(t.cssText)):a.setAttribute(o,void 0===t[o]?"":t[o]));a.setAttribute("data-rh","true"),r.some((function(e,t){return n=t,a.isEqualNode(e)}))?r.splice(n,1):i.push(a)})),r.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return a.appendChild(e)})),{oldTags:r,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var a=n.getAttribute("data-rh"),o=a?a.split(","):[],r=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var c=i[s],l=t[c]||"";n.getAttribute(c)!==l&&n.setAttribute(c,l),-1===o.indexOf(c)&&o.push(c);var u=r.indexOf(c);-1!==u&&r.splice(u,1)}for(var d=r.length-1;d>=0;d-=1)n.removeAttribute(r[d]);o.length===r.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},G=function(e,t){var n=e.baseTag,a=e.htmlAttributes,o=e.linkTags,r=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,c=e.scriptTags,l=e.styleTags,u=e.title,d=e.titleAttributes;W(b.BODY,e.bodyAttributes),W(b.HTML,a),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),W(b.TITLE,t)}(u,d);var p={baseTag:q(b.BASE,n),linkTags:q(b.LINK,o),metaTags:q(b.META,r),noscriptTags:q(b.NOSCRIPT,i),scriptTags:q(b.SCRIPT,c),styleTags:q(b.STYLE,l)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,a=t.oldTags;n.length&&(f[e]=n),a.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,f,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return(t=e.call.apply(e,[this].concat(a))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,a=n.setHelmet,o=null,r=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:w(e,"defer"),encode:w(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:P(b.LINK,["rel","href"],e),metaTags:P(b.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:P(b.NOSCRIPT,["innerHTML"],e),onChangeClientState:S(e),scriptTags:P(b.SCRIPT,["src","innerHTML"],e),styleTags:P(b.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});Z.canUseDOM?(t=r,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){G(t,(function(){Y=null}))})):(G(t),Y=null)):F&&(o=F(r)),a(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(a.Component);K.propTypes={context:H.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(j(this.props,"helmetData"),j(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case b.SCRIPT:case b.NOSCRIPT:return{innerHTML:t};case b.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,a=e.arrayTypeChildren;return p({},a,((t={})[n.type]=[].concat(a[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,a=e.child,o=e.newProps,r=e.newChildProps,i=e.nestedChildren;switch(a.type){case b.TITLE:return p({},o,((t={})[a.type]=i,t.titleAttributes=p({},r),t));case b.BODY:return p({},o,{bodyAttributes:p({},r)});case b.HTML:return p({},o,{htmlAttributes:p({},r)});default:return p({},o,((n={})[a.type]=p({},r),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var a;n=p({},n,((a={})[t]=e[t],a))})),n},n.warnOnInvalidChildren=function(e,t){return l()(x.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+x.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),l()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return a.Children.forEach(e,(function(e){if(e&&e.props){var a=e.props,r=a.children,i=g(a,Q),s=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),c=e.type;switch("symbol"==typeof c?c=c.toString():n.warnOnInvalidChildren(e,r),c){case b.FRAGMENT:t=n.mapChildrenToProps(r,t);break;case b.LINK:case b.META:case b.NOSCRIPT:case b.SCRIPT:case b.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:r});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:r})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),o=p({},n),r=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!r||r instanceof $||(r=new $(r.context,r.instances)),r?a.createElement(K,p({},o,{context:r.value,helmetData:void 0})):a.createElement(U.Consumer,null,(function(e){return a.createElement(K,p({},o,{context:e}))}))},t}(a.Component);J.propTypes={base:r().object,bodyAttributes:r().object,children:r().oneOfType([r().arrayOf(r().node),r().node]),defaultTitle:r().string,defer:r().bool,encodeSpecialCharacters:r().bool,htmlAttributes:r().object,link:r().arrayOf(r().object),meta:r().arrayOf(r().object),noscript:r().arrayOf(r().object),onChangeClientState:r().func,script:r().arrayOf(r().object),style:r().arrayOf(r().object),title:r().string,titleAttributes:r().object,titleTemplate:r().string,prioritizeSeoTags:r().bool,helmetData:r().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},58702:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,a=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,r=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,c=n?Symbol.for("react.provider"):60109,l=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,b=n?Symbol.for("react.lazy"):60116,h=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,x=n?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case a:switch(e=e.type){case u:case d:case r:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case l:case p:case b:case g:case c:return e;default:return t}}case o:return t}}}function k(e){return _(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=l,t.ContextProvider=c,t.Element=a,t.ForwardRef=p,t.Fragment=r,t.Lazy=b,t.Memo=g,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||_(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return _(e)===l},t.isContextProvider=function(e){return _(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a},t.isForwardRef=function(e){return _(e)===p},t.isFragment=function(e){return _(e)===r},t.isLazy=function(e){return _(e)===b},t.isMemo=function(e){return _(e)===g},t.isPortal=function(e){return _(e)===o},t.isProfiler=function(e){return _(e)===s},t.isStrictMode=function(e){return _(e)===i},t.isSuspense=function(e){return _(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===r||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===b||e.$$typeof===g||e.$$typeof===c||e.$$typeof===l||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===x||e.$$typeof===h)},t.typeOf=_},19185:(e,t,n)=>{"use strict";e.exports=n(58702)},51237:(e,t,n)=>{"use strict";function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i.apply(this,arguments)}var s=n(27378),c=n(23615),l=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(a){var o=d(e[a]);o.loading?t.loading=!0:(t.loaded[a]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[a]=e})).catch((function(e){t.error=e}))}))}catch(a){t.error=a}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function b(){return g||(g=e(m.loader)),g.promise}return l.push(b),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return b()})),p=d=function(t){function n(n){var a;return r(o(o(a=t.call(this,n)||this)),"retry",(function(){a.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),a._loadModule()})),b(),a.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},a}a(n,t),n.preload=function(){return b()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(s.Component),r(d,"contextTypes",{loadable:c.shape({report:c.func.isRequired})}),p}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var b=function(e){function t(){return e.apply(this,arguments)||this}a(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function h(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return h(e)}))}r(b,"propTypes",{report:c.func.isRequired}),r(b,"childContextTypes",{loadable:c.shape({report:c.func.isRequired}).isRequired}),g.Capture=b,g.preloadAll=function(){return new Promise((function(e,t){h(l).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){h(u).then(e,e)}))},e.exports=g},95473:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var a=n(35331),o=n(25773),r=n(27378);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,a.LX)(t,e):n.length?n[n.length-1].match:a.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?r.createElement(a.rs,n,e.map((function(e,n){return r.createElement(a.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):r.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},4289:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>u,rU:()=>b});var a=n(35331),o=n(40351),r=n(27378),i=n(15036),s=n(25773),c=n(30808),l=n(92215),u=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return(t=e.call.apply(e,[this].concat(a))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return r.createElement(a.F0,{history:this.history,children:this.props.children})},t}(r.Component);r.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},m=r.forwardRef;void 0===m&&(m=f);var g=m((function(e,t){var n=e.innerRef,a=e.navigate,o=e.onClick,i=(0,c.Z)(e,["innerRef","navigate","onClick"]),l=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||l&&"_self"!==l||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),a())}});return u.ref=f!==m&&t||n,r.createElement("a",u)}));var b=m((function(e,t){var n=e.component,o=void 0===n?g:n,u=e.replace,b=e.to,h=e.innerRef,v=(0,c.Z)(e,["component","replace","to","innerRef"]);return r.createElement(a.s6.Consumer,null,(function(e){e||(0,l.Z)(!1);var n=e.history,a=p(d(b,e.location),e.location),c=a?n.createHref(a):"",g=(0,s.Z)({},v,{href:c,navigate:function(){var t=d(b,e.location),a=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||a?n.replace:n.push)(t)}});return f!==m?g.ref=t||h:g.innerRef=h,r.createElement(o,g)}))})),h=function(e){return e},v=r.forwardRef;void 0===v&&(v=h);var y=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,x=e.location,_=e.sensitive,k=e.strict,w=e.style,E=e.to,S=e.innerRef,C=(0,c.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return r.createElement(a.s6.Consumer,null,(function(e){e||(0,l.Z)(!1);var n=x||e.location,i=p(d(E,n),n),c=i.pathname,T=c&&c.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),P=T?(0,a.LX)(n.pathname,{path:T,exact:g,sensitive:_,strict:k}):null,A=!!(y?y(P,n):P),N="function"==typeof m?m(A):m,O="function"==typeof w?w(A):w;A&&(N=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(N,u),O=(0,s.Z)({},O,f));var j=(0,s.Z)({"aria-current":A&&o||null,className:N,style:O,to:i},C);return h!==v?j.ref=t||S:j.innerRef=S,r.createElement(b,j)}))}))},35331:(e,t,n)=>{"use strict";n.d(t,{AW:()=>S,F0:()=>_,rs:()=>O,s6:()=>x,LX:()=>E,k6:()=>L,TH:()=>M});var a=n(40351),o=n(27378),r=n(15036),i=n(23615),s=n.n(i),c=1073741823,l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function u(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,a){e=n,t.forEach((function(t){return t(e,a)}))}}}var d=o.createContext||function(e,t){var n,r,i="__create-react-context-"+function(){var e="__global_unique_id__";return l[e]=(l[e]||0)+1}()+"__",d=function(e){function n(){var t;return(t=e.apply(this,arguments)||this).emitter=u(t.props.value),t}(0,a.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,a=this.props.value,o=e.value;((r=a)===(i=o)?0!==r||1/r==1/i:r!=r&&i!=i)?n=0:(n="function"==typeof t?t(a,o):c,0!==(n|=0)&&this.emitter.set(e.value,n))}var r,i},o.render=function(){return this.props.children},n}(o.Component);d.childContextTypes=((n={})[i]=s().object.isRequired,n);var p=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,a.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?c:t},o.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?c:e},o.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},o.getValue=function(){return this.context[i]?this.context[i].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return p.contextTypes=((r={})[i]=s().object,r),{Provider:d,Consumer:p}};const p=d;var f=n(92215),m=n(25773),g=n(54039),b=n.n(g),h=(n(19185),n(30808)),v=(n(55839),function(e){var t=p();return t.displayName=e,t}),y=v("Router-History"),x=v("Router"),_=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,a.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(x.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var k={},w=0;function E(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,a=n.path,o=n.exact,r=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,c=n.sensitive,l=void 0!==c&&c;return[].concat(a).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var a=function(e,t){var n=""+t.end+t.strict+t.sensitive,a=k[n]||(k[n]={});if(a[e])return a[e];var o=[],r={regexp:b()(e,o,t),keys:o};return w<1e4&&(a[e]=r,w++),r}(n,{end:r,strict:s,sensitive:l}),o=a.regexp,i=a.keys,c=o.exec(e);if(!c)return null;var u=c[0],d=c.slice(1),p=e===u;return r&&!p?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=d[n],e}),{})}}),null)}var S=function(e){function t(){return e.apply(this,arguments)||this}return(0,a.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(x.Consumer,null,(function(t){t||(0,f.Z)(!1);var n=e.props.location||t.location,a=e.props.computedMatch?e.props.computedMatch:e.props.path?E(n.pathname,e.props):t.match,r=(0,m.Z)({},t,{location:n,match:a}),i=e.props,s=i.children,c=i.component,l=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(x.Provider,{value:r},r.match?s?"function"==typeof s?s(r):s:c?o.createElement(c,r):l?l(r):null:"function"==typeof s?s(r):null)}))},t}(o.Component);function C(e){return"/"===e.charAt(0)?e:"/"+e}function T(e,t){if(!e)return t;var n=C(e);return 0!==t.pathname.indexOf(n)?t:(0,m.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,r.Ep)(e)}function A(e){return function(){(0,f.Z)(!1)}}function N(){}o.Component;var O=function(e){function t(){return e.apply(this,arguments)||this}return(0,a.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(x.Consumer,null,(function(t){t||(0,f.Z)(!1);var n,a,r=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==a&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;a=i?E(r.pathname,(0,m.Z)({},e.props,{path:i})):t.match}})),a?o.cloneElement(n,{location:r,computedMatch:a}):null}))},t}(o.Component);var j=o.useContext;function L(){return j(y)}function M(){return j(x).location}},5243:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},54039:(e,t,n)=>{var a=n(5243);e.exports=f,e.exports.parse=r,e.exports.compile=function(e,t){return s(r(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function r(e,t){for(var n,a=[],r=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],g=n[2],b=n[3],h=n[4],v=n[5],y=n[6],x=n[7];s&&(a.push(s),s="");var _=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,w="?"===y||"*"===y,E=n[2]||u,S=h||v;a.push({name:b||r++,prefix:g||"",delimiter:E,optional:w,repeat:k,partial:_,asterisk:!!x,pattern:S?l(S):x?".*":"[^"+c(E)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&a.push(s),a}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var r="",s=t||{},c=(o||{}).pretty?i:encodeURIComponent,l=0;l<e.length;l++){var u=e[l];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(r+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(a(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=c(p[f]),!n[l].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");r+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(p),!n[l].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');r+=u.prefix+d}}else r+=u}return r}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function l(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){a(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,r=!1!==n.end,i="",s=0;s<e.length;s++){var l=e[s];if("string"==typeof l)i+=c(l);else{var p=c(l.prefix),f="(?:"+l.pattern+")";t.push(l),l.repeat&&(f+="(?:"+p+f+")*"),i+=f=l.optional?l.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=c(n.delimiter||"/"),g=i.slice(-m.length)===m;return o||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=r?"$":o&&g?"":"(?="+m+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return a(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var a=0;a<n.length;a++)t.push({name:a,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):a(e)?function(e,t,n){for(var a=[],o=0;o<e.length;o++)a.push(f(e[o],t,n).source);return u(new RegExp("(?:"+a.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(r(e,n),t,n)}(e,t,n)}},41535:(e,t)=>{"use strict";var n=Symbol.for("react.element"),a=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,b={};function h(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||m}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=h.prototype;var x=y.prototype=new v;x.constructor=y,g(x,h.prototype),x.isPureReactComponent=!0;var _=Array.isArray,k=Object.prototype.hasOwnProperty,w={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,a){var o,r={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,o)&&!E.hasOwnProperty(o)&&(r[o]=t[o]);var c=arguments.length-2;if(1===c)r.children=a;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];r.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===r[o]&&(r[o]=c[o]);return{$$typeof:n,type:e,key:i,ref:s,props:r,_owner:w.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function P(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function A(e,t,o,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case a:c=!0}}if(c)return i=i(c=e),e=""===r?"."+P(c,0):r,_(i)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),A(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",_(e))for(var l=0;l<e.length;l++){var u=r+P(s=e[l],l);c+=A(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=A(s=s.value,t,o,u=r+P(s,l++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function N(e,t,n){if(null==e)return e;var a=[],o=0;return A(e,a,"","",(function(e){return t.call(n,e,o++)})),a}function O(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var j={current:null},L={transition:null},M={ReactCurrentDispatcher:j,ReactCurrentBatchConfig:L,ReactCurrentOwner:w};t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=h,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=r,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=M,t.cloneElement=function(e,t,a){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=g({},e.props),r=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=w.current),void 0!==t.key&&(r=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)k.call(t,l)&&!E.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=a;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}return{$$typeof:n,type:e.type,key:r,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:O}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=L.transition;L.transition={};try{e()}finally{L.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return j.current.useCallback(e,t)},t.useContext=function(e){return j.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return j.current.useDeferredValue(e)},t.useEffect=function(e,t){return j.current.useEffect(e,t)},t.useId=function(){return j.current.useId()},t.useImperativeHandle=function(e,t,n){return j.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return j.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return j.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return j.current.useMemo(e,t)},t.useReducer=function(e,t,n){return j.current.useReducer(e,t,n)},t.useRef=function(e){return j.current.useRef(e)},t.useState=function(e){return j.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return j.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return j.current.useTransition()},t.version="18.2.0"},27378:(e,t,n)=>{"use strict";e.exports=n(41535)},74445:e=>{e.exports=function(e,t,n,a){var o=n?n.call(a,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<r.length;c++){var l=r[c];if(!s(l))return!1;var u=e[l],d=t[l];if(!1===(o=n?n.call(a,u,d,l):void 0)||void 0===o&&u!==d)return!1}return!0}},94047:(e,t,n)=>{"use strict";var a=n(27378);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},r=a.useState,i=a.useEffect,s=a.useLayoutEffect,c=a.useDebugValue;function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(a){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),a=r({inst:{value:n,getSnapshot:t}}),o=a[0].inst,u=a[1];return s((function(){o.value=n,o.getSnapshot=t,l(o)&&u({inst:o})}),[e,n,t]),i((function(){return l(o)&&u({inst:o}),e((function(){l(o)&&u({inst:o})}))}),[e]),c(n),n};t.useSyncExternalStore=void 0!==a.useSyncExternalStore?a.useSyncExternalStore:u},70644:(e,t,n)=>{"use strict";e.exports=n(94047)},25773:(e,t,n)=>{"use strict";function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},a.apply(this,arguments)}n.d(t,{Z:()=>a})},40351:(e,t,n)=>{"use strict";function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}n.d(t,{Z:()=>o})},30808:(e,t,n)=>{"use strict";function a(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>a})},9928:(e,t,n)=>{"use strict";n.d(t,{mdU:()=>r,omb:()=>a,zhw:()=>o});var a={prefix:"fab",iconName:"discord",icon:[640,512,[],"f392","M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"]},o={prefix:"fab",iconName:"github",icon:[496,512,[],"f09b","M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"]},r={prefix:"fab",iconName:"twitter",icon:[512,512,[],"f099","M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"]}},83469:(e,t,n)=>{"use strict";n.d(t,{A35:()=>k,AlB:()=>y,BDt:()=>v,Bkj:()=>x,BwA:()=>r,EQ8:()=>E,Gp0:()=>a,LEp:()=>S,SZw:()=>b,YdP:()=>o,_tD:()=>w,cRF:()=>h,dT$:()=>u,dhu:()=>T,diR:()=>p,eDR:()=>d,emM:()=>C,g6h:()=>s,g82:()=>_,o$R:()=>g,pL1:()=>l,sl_:()=>c,yGT:()=>f,yOZ:()=>i,zZQ:()=>m});var a={prefix:"far",iconName:"space-station-moon-construction",icon:[512,512,["space-station-moon-alt"],"e034","M208.2 53.5C223.5 49.9 239.5 48 256 48c54.9 0 104.8 21.2 142 56H368c-13.3 0-24 10.7-24 24s10.7 24 24 24h81.5c8.8 0 17-4.9 21.1-12.6s3.7-17.2-1.1-24.6C423.7 45.6 345.2 0 256 0C114.6 0 0 114.6 0 256S114.6 512 256 512c81.4 0 153.9-38 200.7-97.1c8.2-10.4 6.5-25.5-3.9-33.7s-25.5-6.5-33.7 3.9C381 433.2 322.1 464 256 464c-80.8 0-150.8-46.1-185.3-113.3C109.9 362.7 168.9 376 256 376c116.9 0 183.2-23.9 218.9-36.8l0 0c4.8-1.7 9-3.2 12.7-4.5c7.5-2.5 13.3-8.6 15.5-16.2l.6-2.1c5.5-19.3 8.3-39.3 8.3-59.3V256c0-13.3-10.7-24-24-24s-24 10.7-24 24v1.1c0 12.3-1.3 24.5-4 36.5l-.8 .3C424.3 306.5 364.4 328 256 328s-168.3-21.5-203.2-34.1l-1.5-.5C49.1 281.2 48 268.8 48 256c0-40.8 11.7-78.8 32-110.9c.6 52.5 43.3 94.9 96 94.9c53 0 96-43 96-96c0-41.7-26.6-77.2-63.8-90.5zM128 144a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm248 40c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H376z"]},o={prefix:"far",iconName:"square-sliders",icon:[448,512,["sliders-h-square"],"f3f0","M48 416c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm96 80c0-13.3 10.7-24 24-24l32 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 128 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-128 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-32 0c-13.3 0-24-10.7-24-24zm24 184c-13.3 0-24-10.7-24-24s10.7-24 24-24l128 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-128 0z"]},r={prefix:"far",iconName:"triangle",icon:[512,512,[9650],"f2ec","M248.4 84.3c1.6-2.7 4.5-4.3 7.6-4.3s6 1.6 7.6 4.3L461.9 410c1.4 2.3 2.1 4.9 2.1 7.5c0 8-6.5 14.5-14.5 14.5H62.5c-8 0-14.5-6.5-14.5-14.5c0-2.7 .7-5.3 2.1-7.5L248.4 84.3zm-41-25L9.1 385c-6 9.8-9.1 21-9.1 32.5C0 452 28 480 62.5 480h387c34.5 0 62.5-28 62.5-62.5c0-11.5-3.2-22.7-9.1-32.5L304.6 59.3C294.3 42.4 275.9 32 256 32s-38.3 10.4-48.6 27.3z"]},i={prefix:"far",iconName:"angle-right",icon:[320,512,[8250],"f105","M273 239c9.4 9.4 9.4 24.6 0 33.9L113 433c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l143-143L79 113c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L273 239z"]},s={prefix:"far",iconName:"square-plus",icon:[448,512,[61846,"plus-square"],"f0fe","M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z"]},c={prefix:"far",iconName:"circle-play",icon:[512,512,[61469,"play-circle"],"f144","M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c7.6-4.2 16.8-4.1 24.3 .5l144 88c7.1 4.4 11.5 12.1 11.5 20.5s-4.4 16.1-11.5 20.5l-144 88c-7.4 4.5-16.7 4.7-24.3 .5s-12.3-12.2-12.3-20.9V168c0-8.7 4.7-16.7 12.3-20.9z"]},l={prefix:"far",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"]},u={prefix:"far",iconName:"code",icon:[640,512,[],"f121","M399.1 1.1c-12.7-3.9-26.1 3.1-30 15.8l-144 464c-3.9 12.7 3.1 26.1 15.8 30s26.1-3.1 30-15.8l144-464c3.9-12.7-3.1-26.1-15.8-30zm71.4 118.5c-9.1 9.7-8.6 24.9 1.1 33.9L580.9 256 471.6 358.5c-9.7 9.1-10.2 24.3-1.1 33.9s24.3 10.2 33.9 1.1l128-120c4.8-4.5 7.6-10.9 7.6-17.5s-2.7-13-7.6-17.5l-128-120c-9.7-9.1-24.9-8.6-33.9 1.1zm-301 0c-9.1-9.7-24.3-10.2-33.9-1.1l-128 120C2.7 243 0 249.4 0 256s2.7 13 7.6 17.5l128 120c9.7 9.1 24.9 8.6 33.9-1.1s8.6-24.9-1.1-33.9L59.1 256 168.4 153.5c9.7-9.1 10.2-24.3 1.1-33.9z"]},d={prefix:"far",iconName:"screwdriver-wrench",icon:[512,512,["tools"],"f7d9","M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4h54.1l109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109V104c0-7.5-3.5-14.5-9.4-19L78.6 5zM23.2 376.8C8.3 391.7 0 411.8 0 432.8C0 476.5 35.5 512 79.2 512c21 0 41.1-8.3 56-23.2L238.5 385.5c-8.9-17.6-12.8-37.1-11.6-56.3L101.3 454.9c-5.9 5.8-13.8 9.1-22.1 9.1C62 464 48 450 48 432.8c0-8.3 3.3-16.2 9.1-22.1L194.3 273.5l-33.9-33.9L23.2 376.8zM463.9 164c-1.4 38.9-22.6 72.8-53.8 91.8c1.1 1 2.1 2 3.1 3l31.6 31.6c40.7-29 67.2-76.6 67.2-130.3c0-24.8-5.7-48.3-15.7-69.3c-4.4-9.2-16.5-10.5-23.7-3.3l-67.9 67.9c-3 3-7.1 4.7-11.3 4.7H368c-8.8 0-16-7.2-16-16V118.6c0-4.2 1.7-8.3 4.7-11.3l67.9-67.9c7.2-7.2 5.9-19.3-3.3-23.7C400.3 5.7 376.8 0 352 0C294.7 0 244.4 30.1 216.2 75.4C221.2 84 224 93.8 224 104v40.8l16 16 0-.8c0-60.5 48-109.9 108-111.9L322.7 73.4l0 0c-12 12-18.7 28.3-18.7 45.3V144c0 35.3 28.7 64 64 64h25.4c17 0 33.3-6.7 45.3-18.7L463.9 164z"]},p={prefix:"far",iconName:"circle",icon:[512,512,[128308,128309,128992,128993,128994,128995,128996,9679,9898,9899,11044,61708,61915],"f111","M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"]},f={prefix:"far",iconName:"house-blank",icon:[576,512,["home-blank"],"e487","M303.5 5.7c-9-7.6-22.1-7.6-31.1 0l-264 224c-10.1 8.6-11.3 23.7-2.8 33.8s23.7 11.3 33.8 2.8L64 245.5V432c0 44.2 35.8 80 80 80H432c44.2 0 80-35.8 80-80V245.5l24.5 20.8c10.1 8.6 25.3 7.3 33.8-2.8s7.3-25.3-2.8-33.8l-264-224zM464 204.8V432c0 17.7-14.3 32-32 32H144c-17.7 0-32-14.3-32-32V204.8L288 55.5 464 204.8z"]},m={prefix:"far",iconName:"puzzle",icon:[512,512,[],"e443","M448 0c35.3 0 64 28.7 64 64V192c0 8.8-7.2 16-16 16H444c-6.6 0-12 5.4-12 12v4c0 17.7-14.3 32-32 32s-32-14.3-32-32v-4c0-6.6-5.4-12-12-12l-36 0c-8.8 0-16-7.2-16-16V160c0-8.8 7.2-16 16-16h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-8.8 0-16-7.2-16-16V16c0-8.8 7.2-16 16-16H448zM0 240V128C0 92.7 28.7 64 64 64H208c8.8 0 16 7.2 16 16v52c0 6.6 5.4 12 12 12h4c17.7 0 32 14.3 32 32s-14.3 32-32 32h-4c-6.6 0-12 5.4-12 12v52c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V256c0-17.7-14.3-32-32-32s-32 14.3-32 32v16c0 8.8-7.2 16-16 16H48V440c0 13.3 10.7 24 24 24H224V428c0-6.6-5.4-12-12-12h-4c-17.7 0-32-14.3-32-32s14.3-32 32-32h4c6.6 0 12-5.4 12-12V304c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v16c0 17.7 14.3 32 32 32s32-14.3 32-32V304c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16V448c0 35.3-28.7 64-64 64H256 240 72c-39.8 0-72-32.2-72-72V272 240z"]},g={prefix:"far",iconName:"circle-bolt",icon:[512,512,[],"e0fe","M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM330.1 115.6c5.8 4.7 7.6 12.9 4.2 19.6L281.9 240H352c6.8 0 12.9 4.3 15.1 10.7s.2 13.5-5.1 17.8l-160 128c-5.9 4.7-14.2 4.7-20.1-.1s-7.6-12.9-4.3-19.6L230.1 272H160c-6.8 0-12.8-4.3-15.1-10.7s-.2-13.5 5.1-17.8l160-128c5.9-4.7 14.2-4.7 20.1 .1z"]},b={prefix:"far",iconName:"clock",icon:[512,512,[128339,"clock-four"],"f017","M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"]},h={prefix:"far",iconName:"sliders",icon:[512,512,["sliders-h"],"f1de","M0 416c0 13.3 10.7 24 24 24l59.7 0c10.2 32.5 40.5 56 76.3 56s66.1-23.5 76.3-56L488 440c13.3 0 24-10.7 24-24s-10.7-24-24-24l-251.7 0c-10.2-32.5-40.5-56-76.3-56s-66.1 23.5-76.3 56L24 392c-13.3 0-24 10.7-24 24zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-35.8 0-66.1 23.5-76.3 56L24 232c-13.3 0-24 10.7-24 24s10.7 24 24 24l251.7 0c10.2 32.5 40.5 56 76.3 56s66.1-23.5 76.3-56l59.7 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-59.7 0c-10.2-32.5-40.5-56-76.3-56zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm76.3-56C258.1 39.5 227.8 16 192 16s-66.1 23.5-76.3 56L24 72C10.7 72 0 82.7 0 96s10.7 24 24 24l91.7 0c10.2 32.5 40.5 56 76.3 56s66.1-23.5 76.3-56L488 120c13.3 0 24-10.7 24-24s-10.7-24-24-24L268.3 72z"]},v={prefix:"far",iconName:"bolt",icon:[448,512,[9889,"zap"],"f0e7","M321.7 0c19.1 0 32.9 18.3 27.6 36.6L295.8 224h85.2c19.3 0 34.9 15.6 34.9 34.9c0 10.3-4.5 20-12.3 26.6L144.9 505.2c-5.2 4.4-11.8 6.8-18.6 6.8c-19.1 0-32.9-18.3-27.6-36.6L152.2 288H65.7C47.1 288 32 272.9 32 254.3c0-9.9 4.3-19.2 11.8-25.6L303.1 6.9C308.3 2.4 314.9 0 321.7 0zM285.6 85L104.4 240H184c7.5 0 14.6 3.5 19.2 9.5s6 13.8 3.9 21L162.3 427.5 345.5 272H264c-7.5 0-14.6-3.5-19.2-9.5s-6-13.8-3.9-21L285.6 85z"]},y={prefix:"far",iconName:"toolbox",icon:[512,512,[129520],"f552","M184 80H328c4.4 0 8 3.6 8 8v40H176V88c0-4.4 3.6-8 8-8zm-56 8v40H99.9c-12.7 0-24.9 5.1-33.9 14.1L14.1 193.9c-9 9-14.1 21.2-14.1 33.9V320v96c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V320 227.9c0-12.7-5.1-24.9-14.1-33.9l-51.9-51.9c-9-9-21.2-14.1-33.9-14.1H384V88c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM464 296H368V280c0-13.3-10.7-24-24-24s-24 10.7-24 24v16H192V280c0-13.3-10.7-24-24-24s-24 10.7-24 24v16H48V227.9L99.9 176H412.1L464 227.9V296zM48 344h96v16c0 13.3 10.7 24 24 24s24-10.7 24-24V344H320v16c0 13.3 10.7 24 24 24s24-10.7 24-24V344h96v72c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V344z"]},x={prefix:"far",iconName:"diagram-project",icon:[576,512,["project-diagram"],"f542","M136 80c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8H56c-4.4 0-8-3.6-8-8V88c0-4.4 3.6-8 8-8h80zM56 32C25.1 32 0 57.1 0 88v80c0 30.9 25.1 56 56 56h80c5.6 0 11.1-.8 16.2-2.4l75.9 101.2c-2.7 6.5-4.1 13.7-4.1 21.2v80c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56V344c0-30.9-25.1-56-56-56H280c-5.6 0-11.1 .8-16.2 2.4L187.9 189.2c2.7-6.5 4.1-13.7 4.1-21.2V152H384v16c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56H440c-30.9 0-56 25.1-56 56v16H192V88c0-30.9-25.1-56-56-56H56zM360 336c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8H280c-4.4 0-8-3.6-8-8V344c0-4.4 3.6-8 8-8h80zM440 80h80c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8H440c-4.4 0-8-3.6-8-8V88c0-4.4 3.6-8 8-8z"]},_={prefix:"far",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M345 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-119 119L73 103c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l119 119L39 375c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l119-119L311 409c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-119-119L345 137z"]},k={prefix:"far",iconName:"chevron-left",icon:[320,512,[9001],"f053","M15 239c-9.4 9.4-9.4 24.6 0 33.9L207 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L65.9 256 241 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L15 239z"]},w={prefix:"far",iconName:"chevron-right",icon:[320,512,[9002],"f054","M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"]},E={prefix:"far",iconName:"circle-plus",icon:[512,512,["plus-circle"],"f055","M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344c0 13.3 10.7 24 24 24s24-10.7 24-24V280h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V168c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"]},S={prefix:"far",iconName:"check",icon:[448,512,[10003,10004],"f00c","M441 103c9.4 9.4 9.4 24.6 0 33.9L177 401c-9.4 9.4-24.6 9.4-33.9 0L7 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l119 119L407 103c9.4-9.4 24.6-9.4 33.9 0z"]},C={prefix:"far",iconName:"grid-2",icon:[512,512,[],"e196","M80 80v96h96V80H80zM32 80c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V80zM80 336v96h96V336H80zm-48 0c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V336zM432 80H336v96h96V80zM336 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H336c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48zm0 304v96h96V336H336zm-48 0c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H336c-26.5 0-48-21.5-48-48V336z"]},T={prefix:"far",iconName:"square-sliders-vertical",icon:[448,512,["sliders-v-square"],"f3f2","M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 96c-13.3 0-24 10.7-24 24v32H104c-13.3 0-24 10.7-24 24s10.7 24 24 24h16V360c0 13.3 10.7 24 24 24s24-10.7 24-24V232h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H168V152c0-13.3-10.7-24-24-24zm184 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V280H264c-13.3 0-24 10.7-24 24s10.7 24 24 24h16v32c0 13.3 10.7 24 24 24s24-10.7 24-24V328h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H328V152z"]}},40624:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(o&&(o+=" "),o+=t);return o}},92215:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a="Invariant failed";function o(e,t){if(!e)throw new Error(a)}},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const a={title:"moonrepo",tagline:"A developer productivity tooling platform.",url:"https://moonrepo.dev",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.svg",organizationName:"moonrepo",projectName:"moon",deploymentBranch:"gh-pages",trailingSlash:!1,presets:[["classic",{docs:{sidebarPath:"/home/runner/work/moon/moon/website/sidebars.js",editUrl:"https://github.com/moonrepo/moon/tree/master/website"},blog:{showReadingTime:!0,editUrl:"https://github.com/moonrepo/moon/tree/master/website"},theme:{customCss:["/home/runner/work/moon/moon/website/src/css/theme.css","/home/runner/work/moon/moon/website/src/css/custom.css"]},gtag:{trackingID:"G-LB233GTZD3"}}]],themeConfig:{algolia:{apiKey:"dfe3e44100d7dfc6d7d3b644e8b09581",appId:"400S075OEM",indexName:"moonrepo",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},metadata:[{name:"keywords",content:"moon, repo, moonrepo, task, runner, build, system, ci, times, devx, developer, experience, tooling, tools, monorepo, polyrepo, productivity, platform, proto, toolchain"},{name:"og:image",content:"https://moonrepo.dev/img/hero/slate-bg.jpg"}],navbar:{logo:{alt:"moon",src:"img/logo.svg"},items:[{type:"dropdown",position:"left",label:"Products",items:[{to:"/moon",html:'<strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div>'},{to:"/moonbase",html:'<strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div>'},{to:"/proto",html:'<strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div>'},{to:"https://espresso.build",html:'<strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div>'}]},{type:"dropdown",position:"left",label:"Docs",items:[{type:"doc",docId:"intro",html:"<strong>moon</strong>"},{type:"doc",docId:"proto/index",html:"<strong>proto</strong>"}]},{type:"doc",docId:"guides/ci",position:"left",label:"Guides"},{to:"/blog",label:"Blog",position:"left"},{label:"GitHub",to:"https://github.com/moonrepo",position:"left"},{to:"https://moonrepo.app",label:"Sign in",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Learn",items:[{label:"Docs",to:"/docs"},{label:"Guides",to:"/docs/guides/ci"},{label:"Blog",to:"/blog"},{label:"API",to:"/api"}]},{title:"Ecosystem",items:[{label:"Releases",to:"https://github.com/moonrepo/moon/releases"},{label:"Shared configs",to:"https://github.com/moonrepo/moon-configs"},{label:"Developer tools",href:"https://github.com/moonrepo/dev"},{label:"Examples repository",href:"https://github.com/moonrepo/examples"}]},{title:"Support",items:[{label:"GitHub",to:"https://github.com/moonrepo"},{label:"Discord",to:"https://discord.gg/qCh9MEynv2"},{label:"Twitter",to:"https://twitter.com/tothemoonrepo"}]}],copyright:"Copyright \xa9 2023, moonrepo, Inc."},prism:{theme:{plain:{backgroundColor:"#00080f",color:"#e5e9f1"},styles:[{types:["changed"],style:{color:"#fef9c3"}},{types:["deleted"],style:{color:"#ff7c89"}},{types:["inserted"],style:{color:"#b7d733"}},{types:["comment"],style:{color:"#97a1af",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#cad4e2"}},{types:["constant"],style:{color:"#ff9da6"}},{types:["string","url"],style:{color:"#c9e166"}},{types:["variable"],style:{color:"#fef9c3"}},{types:["number","boolean"],style:{color:"#94dded"}},{types:["attr-name"],style:{color:"#fde047"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"#b7a9f9"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#ff94ff",fontWeight:"bold"}}]},darkTheme:{plain:{backgroundColor:"#00080f",color:"#e5e9f1"},styles:[{types:["changed"],style:{color:"#fef9c3"}},{types:["deleted"],style:{color:"#ff7c89"}},{types:["inserted"],style:{color:"#b7d733"}},{types:["comment"],style:{color:"#97a1af",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#cad4e2"}},{types:["constant"],style:{color:"#ff9da6"}},{types:["string","url"],style:{color:"#c9e166"}},{types:["variable"],style:{color:"#fef9c3"}},{types:["number","boolean"],style:{color:"#94dded"}},{types:["attr-name"],style:{color:"#fde047"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"#b7a9f9"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#ff94ff",fontWeight:"bold"}}]},additionalLanguages:["docker","twig","toml","rust"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},plugins:[["@docusaurus/plugin-client-redirects",{redirects:[{from:"/docs/how-it-works/dep-graph",to:"/docs/how-it-works/action-graph"},{from:"/docs/commands/dep-graph",to:"/docs/commands/action-graph"},{from:"/docs/config/global-project",to:"/docs/config/tasks"},{from:"/docs/config/inherited-tasks",to:"/docs/config/tasks"},{from:"/docs/guides/git-hooks",to:"/docs/guides/vcs-hooks"}]}],["docusaurus-plugin-typedoc-api",{projectRoot:"/home/runner/work/moon/moon",packages:["packages/report","packages/runtime","packages/types"],minimal:!0,readmes:!0}],null],clientModules:["/home/runner/work/moon/moon/website/src/js/darkModeSyncer.ts"],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog-f70":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"37e4cb73"},{"content":"ce2c6db8"},{"content":"23ef67df"},{"content":"cd988af7"},{"content":"957809ee"},{"content":"8e9e3e30"},{"content":"e746f759"},{"content":"fe55d425"},{"content":"d43cc2ec"}],"metadata":"b2b675dd"},"/blog/2023-roadmap-864":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"5c653e8d"},"/blog/archive-1b1":{"__comp":"9e4087bc","__context":{"plugin":"01b81367"},"archive":"b2f554cd"},"/blog/moon-v1.0-21d":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"245d4974"},"/blog/moon-v1.1-f8e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"60fa46e1"},"/blog/moon-v1.10-5e4":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"a5a57258"},"/blog/moon-v1.11-461":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"71dfd0a8"},"/blog/moon-v1.12-6dc":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b717531a"},"/blog/moon-v1.13-a38":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b80596f4"},"/blog/moon-v1.14-63e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"efef7eb9"},"/blog/moon-v1.15-b21":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"68d17c71"},"/blog/moon-v1.2-cbe":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2e4722bd"},"/blog/moon-v1.3-c99":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"d9c57d72"},"/blog/moon-v1.4-b5f":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"bf04367c"},"/blog/moon-v1.5-51b":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"1365e0a6"},"/blog/moon-v1.6-c20":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"f9651623"},"/blog/moon-v1.7-96a":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4aa262b7"},"/blog/moon-v1.8-a17":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"fd485bd3"},"/blog/moon-v1.9-835":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"7c9b29bb"},"/blog/moonbase-c38":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"61486960"},"/blog/page/2-dd1":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"427e2c3d"},{"content":"51ada3e3"},{"content":"f8deddba"},{"content":"f761bd07"},{"content":"5613e7cf"},{"content":"c8acf440"},{"content":"42611ca7"},{"content":"f90d8a46"},{"content":"f09f371a"},{"content":"0e736169"}],"metadata":"8eb4e46b"},"/blog/page/3-f29":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"},{"content":"eb514dbf"},{"content":"77b7a366"},{"content":"2804bc6d"},{"content":"28508d4c"},{"content":"c6200b76"},{"content":"66926af2"},{"content":"1badf320"},{"content":"81d944d1"},{"content":"c095dcfa"}],"metadata":"92999a1c"},"/blog/page/4-eca":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"},{"content":"2048b789"},{"content":"4e986fc6"},{"content":"77530bb9"},{"content":"204dd830"},{"content":"aacc3e35"},{"content":"6be7ee83"},{"content":"14f81d84"},{"content":"cdad2d50"},{"content":"43bdf210"}],"metadata":"7d9726a8"},"/blog/page/5-978":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"},{"content":"d213043e"},{"content":"53df8e83"},{"content":"a6d9fcee"},{"content":"c413f1b7"},{"content":"b072568e"},{"content":"d7cf5e1f"},{"content":"2cd5cbb6"},{"content":"b0e766b4"},{"content":"3f2d0a0e"}],"metadata":"11ce4159"},"/blog/page/6-a47":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4c8cef38"}],"metadata":"44ac4dbb"},"/blog/proto-dd1":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"97878c65"},"/blog/proto-v0.11-254":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2eaf3a2f"},"/blog/proto-v0.12-e58":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"39a2c297"},"/blog/proto-v0.13-c92":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2fafdb99"},"/blog/proto-v0.14-94e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"98ae4a66"},"/blog/proto-v0.15-573":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"54350ada"},"/blog/proto-v0.16-a08":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4ddbfcdc"},"/blog/proto-v0.17-8c2":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"17ae22f4"},"/blog/proto-v0.18-187":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b7a8f57a"},"/blog/proto-v0.19-ccc":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"98738a6c"},"/blog/proto-v0.3-5f5":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"3f885d22"},"/blog/proto-v0.4-d76":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"1aebc10b"},"/blog/proto-v0.5-f0a":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"a6746ab5"},"/blog/proto-v0.6-4a2":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"e8700426"},"/blog/proto-v0.7-c70":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"22eddac1"},"/blog/proto-v0.8-e68":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"f1d6ac1e"},"/blog/proto-v0.9-c62":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"0684a904"},"/blog/tags-b41":{"__comp":"01a85c17","__context":{"plugin":"01b81367"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/action-06b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"f09f371a"}],"tag":"bec065e9","listMetadata":"31fff4a5"},"/blog/tags/affected-46a":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"a6d9fcee"}],"tag":"d5875de2","listMetadata":"caa6a735"},"/blog/tags/alias-2c5":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"eb514dbf"},{"content":"1badf320"}],"tag":"8b38bcbd","listMetadata":"ccfb5782"},"/blog/tags/cache-5e3":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"}],"tag":"128a5f34","listMetadata":"365a10b6"},"/blog/tags/canary-f59":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"}],"tag":"5a3a719f","listMetadata":"66222453"},"/blog/tags/ci-6e4":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"},{"content":"f8deddba"},{"content":"3f2d0a0e"}],"tag":"771f38eb","listMetadata":"44183a86"},"/blog/tags/clean-b52":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"66926af2"}],"tag":"80514956","listMetadata":"eb1a9ca0"},"/blog/tags/code-c6b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"4f0c5301","listMetadata":"69ea3d78"},"/blog/tags/config-a74":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f90d8a46"},{"content":"c095dcfa"},{"content":"c413f1b7"},{"content":"b072568e"}],"tag":"4fd1aaa1","listMetadata":"3691c6ec"},"/blog/tags/constraints-423":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"}],"tag":"ef3509ef","listMetadata":"c5de23c8"},"/blog/tags/debug-6b2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"7f3e2518","listMetadata":"bc74446d"},"/blog/tags/deno-a92":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"204dd830"}],"tag":"1910946c","listMetadata":"016d6d21"},"/blog/tags/dep-graph-022":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"a6d9fcee"}],"tag":"5794c75f","listMetadata":"b0cf9b20"},"/blog/tags/dependency-ea3":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"}],"tag":"87f861ef","listMetadata":"19ca9089"},"/blog/tags/detect-d08":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"77b7a366"}],"tag":"fff5a6d1","listMetadata":"140321b2"},"/blog/tags/docker-2ae":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4e986fc6"},{"content":"b0e766b4"}],"tag":"8593ff01","listMetadata":"dbbb982f"},"/blog/tags/editors-757":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b072568e"},{"content":"d7cf5e1f"}],"tag":"7c4e6415","listMetadata":"6fe6957f"},"/blog/tags/env-vars-ba2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"}],"tag":"6e15e01b","listMetadata":"5cde4d5c"},"/blog/tags/errors-b3f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f90d8a46"},{"content":"66926af2"}],"tag":"7e9fb3d2","listMetadata":"b1c60aef"},"/blog/tags/generator-fb2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"d213043e"},{"content":"2cd5cbb6"},{"content":"b0e766b4"},{"content":"3f2d0a0e"}],"tag":"93bce8ec","listMetadata":"2172420b"},"/blog/tags/git-3bf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"5613e7cf"}],"tag":"60262e21","listMetadata":"479321cf"},"/blog/tags/github-9dc":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f09f371a"},{"content":"204dd830"}],"tag":"78060cbc","listMetadata":"48b0f434"},"/blog/tags/global-ed7":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"},{"content":"e746f759"}],"tag":"459b1c5c","listMetadata":"04d8c43e"},"/blog/tags/globals-c1f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"66926af2"},{"content":"1badf320"}],"tag":"32632728","listMetadata":"151c652b"},"/blog/tags/go-793":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2048b789"}],"tag":"fc3deafd","listMetadata":"cce51cf2"},"/blog/tags/graph-017":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"cdad2d50"},{"content":"b184781f"}],"tag":"8c241076","listMetadata":"fac0f815"},"/blog/tags/hash-da9":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4e986fc6"}],"tag":"202af6b6","listMetadata":"1202c0b0"},"/blog/tags/hasher-1f3":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"},{"content":"cdad2d50"},{"content":"4c8cef38"}],"tag":"3d0b0327","listMetadata":"7d19a980"},"/blog/tags/hooks-715":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"5613e7cf"}],"tag":"8d701eb4","listMetadata":"676566fe"},"/blog/tags/http-31c":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"23ef67df"}],"tag":"1cbc9cf3","listMetadata":"bb86fac5"},"/blog/tags/hydration-147":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"d213043e"}],"tag":"d84e8684","listMetadata":"ac1be023"},"/blog/tags/ignore-d3a":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"e4c23816","listMetadata":"99b94e0d"},"/blog/tags/index-763":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"23ef67df"}],"tag":"9d3c1a44","listMetadata":"59abedb6"},"/blog/tags/inheritance-db9":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"fe55d425"},{"content":"5613e7cf"}],"tag":"bd6bded1","listMetadata":"e8f62c55"},"/blog/tags/init-268":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c413f1b7"}],"tag":"9c090340","listMetadata":"3e1aa1b6"},"/blog/tags/lang-a50":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"},{"content":"eb514dbf"},{"content":"2804bc6d"}],"tag":"14f9b0f2","listMetadata":"fb2dd7db"},"/blog/tags/language-abc":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"}],"tag":"49af4b98","listMetadata":"63aeb80b"},"/blog/tags/life-8d8":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"976dc663","listMetadata":"bf5d9784"},"/blog/tags/local-634":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"}],"tag":"4ab2bb95","listMetadata":"450b14c3"},"/blog/tags/log-1c5":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"0e736169"}],"tag":"5534fb85","listMetadata":"1e542d68"},"/blog/tags/logging-37d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c8acf440"}],"tag":"be0fdac8","listMetadata":"1740b646"},"/blog/tags/migrate-776":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cdad2d50"}],"tag":"6196de5a","listMetadata":"5419aa43"},"/blog/tags/monorepo-a85":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"53df8e83"}],"tag":"b972506a","listMetadata":"ed26bce9"},"/blog/tags/moonbase-b71":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"204dd830"},{"content":"aacc3e35"},{"content":"6be7ee83"},{"content":"43bdf210"}],"tag":"40c69ef1","listMetadata":"620e72fa"},"/blog/tags/node-673":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c413f1b7"},{"content":"2cd5cbb6"}],"tag":"b652e05c","listMetadata":"54024cf2"},"/blog/tags/notifier-2fe":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b072568e"}],"tag":"769e9ed2","listMetadata":"dd99bf53"},"/blog/tags/npm-f7d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2048b789"}],"tag":"1d14c2f4","listMetadata":"4c2d8fdb"},"/blog/tags/offline-82f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"204dd830"}],"tag":"90fdb9b5","listMetadata":"6ea8a316"},"/blog/tags/outdated-084":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"}],"tag":"fba28ebc","listMetadata":"409da100"},"/blog/tags/owners-368":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"f5f247cc","listMetadata":"c83c6fdf"},"/blog/tags/ownership-4e9":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"e629dea5","listMetadata":"affd832d"},"/blog/tags/pin-01f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"}],"tag":"fbcfc993","listMetadata":"3b568f5a"},"/blog/tags/pipeline-75d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"cdad2d50"}],"tag":"fcbcdf3c","listMetadata":"e5f23965"},"/blog/tags/platform-099":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"aacc3e35"},{"content":"b184781f"}],"tag":"cf510f60","listMetadata":"26419218"},"/blog/tags/plugin-100":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"},{"content":"8e9e3e30"},{"content":"e746f759"},{"content":"d43cc2ec"},{"content":"51ada3e3"},{"content":"f761bd07"}],"tag":"752283db","listMetadata":"2497986c"},"/blog/tags/plugins-c8f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"28508d4c"}],"tag":"752c6bfa","listMetadata":"ffc0ac08"},"/blog/tags/project-b7b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"427e2c3d"},{"content":"aacc3e35"},{"content":"c413f1b7"}],"tag":"110403ef","listMetadata":"54eec65a"},"/blog/tags/project-graph-adf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"427e2c3d"},{"content":"3f2d0a0e"}],"tag":"3db947d3","listMetadata":"ec4f6a24"},"/blog/tags/projects-fe7":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"},{"content":"14f81d84"}],"tag":"0e22a4b2","listMetadata":"0ae21139"},"/blog/tags/proto-c6d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"},{"content":"23ef67df"},{"content":"cd988af7"},{"content":"957809ee"},{"content":"8e9e3e30"},{"content":"e746f759"},{"content":"d43cc2ec"},{"content":"51ada3e3"},{"content":"f761bd07"},{"content":"c8acf440"}],"tag":"e8d2c25f","listMetadata":"7599f4f1"},"/blog/tags/proto/page/2-ed0":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f09f371a"},{"content":"77b7a366"},{"content":"2804bc6d"},{"content":"28508d4c"},{"content":"66926af2"},{"content":"1badf320"},{"content":"c095dcfa"},{"content":"2048b789"},{"content":"4e986fc6"},{"content":"77530bb9"}],"tag":"c19ad3d7","listMetadata":"1a2b669c"},"/blog/tags/proto/page/3-f5e":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"43bdf210"}],"tag":"3db5b877","listMetadata":"69e0bfe1"},"/blog/tags/python-253":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"}],"tag":"232c92ba","listMetadata":"f8de77c0"},"/blog/tags/qol-c36":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"43dc46d9","listMetadata":"679bd524"},"/blog/tags/quality-17c":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"750b9005","listMetadata":"1e070f27"},"/blog/tags/query-e4e":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"eb514dbf"},{"content":"2804bc6d"},{"content":"4e986fc6"}],"tag":"a372a63b","listMetadata":"f7b99134"},"/blog/tags/railway-c2c":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"}],"tag":"b38a02d7","listMetadata":"15a4ce61"},"/blog/tags/registry-e67":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"23ef67df"}],"tag":"688193a4","listMetadata":"2573a9a7"},"/blog/tags/remote-cache-49b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"aacc3e35"},{"content":"6be7ee83"},{"content":"a6d9fcee"}],"tag":"376f2f8c","listMetadata":"f01f44c3"},"/blog/tags/rfc-8be":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"0e736169"}],"tag":"8d06f620","listMetadata":"bc6c5049"},"/blog/tags/roadmap-c41":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"43bdf210"}],"tag":"170d6c86","listMetadata":"33d935e4"},"/blog/tags/run-309":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"}],"tag":"75408299","listMetadata":"9e4ae2cc"},"/blog/tags/runner-d26":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"},{"content":"d213043e"},{"content":"b072568e"},{"content":"2cd5cbb6"}],"tag":"46561613","listMetadata":"2df21221"},"/blog/tags/rust-cf6":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"},{"content":"c095dcfa"}],"tag":"2d92dfb9","listMetadata":"2adc0ba4"},"/blog/tags/schema-abe":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2804bc6d"}],"tag":"a86b7c98","listMetadata":"3fc19409"},"/blog/tags/shim-a73":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c8acf440"}],"tag":"860d7f34","listMetadata":"47b3b041"},"/blog/tags/shorthand-421":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"}],"tag":"c4542d8c","listMetadata":"c6c73cac"},"/blog/tags/source-3fc":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"5b4d43ff","listMetadata":"16ea2389"},"/blog/tags/survey-7e5":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"14f81d84"}],"tag":"f5b890ba","listMetadata":"3c3b6fb9"},"/blog/tags/tag-2cb":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"eb514dbf"}],"tag":"b1144183","listMetadata":"edd7d65c"},"/blog/tags/tags-829":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c6200b76"},{"content":"dd3540fa"}],"tag":"78dd992d","listMetadata":"9529487c"},"/blog/tags/target-aed":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"},{"content":"2804bc6d"}],"tag":"a91ae4c2","listMetadata":"8526ffa3"},"/blog/tags/task-a06":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"5613e7cf"}],"tag":"c532175a","listMetadata":"dd5ac54b"},"/blog/tags/tasks-301":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"957809ee"},{"content":"fe55d425"},{"content":"0e736169"},{"content":"c6200b76"},{"content":"81d944d1"},{"content":"14f81d84"}],"tag":"fd8ac5c7","listMetadata":"7aad579e"},"/blog/tags/tier-f53":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"}],"tag":"4b8535eb","listMetadata":"250d5d50"},"/blog/tags/tokens-faf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"81d944d1"},{"content":"dd3540fa"}],"tag":"423a0e62","listMetadata":"125698e9"},"/blog/tags/toml-1de":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2804bc6d"}],"tag":"788e7a3c","listMetadata":"bf95ed3d"},"/blog/tags/tool-864":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"}],"tag":"c1721191","listMetadata":"ddec1041"},"/blog/tags/toolchain-619":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"},{"content":"77530bb9"},{"content":"204dd830"},{"content":"43bdf210"},{"content":"d213043e"},{"content":"2cd5cbb6"},{"content":"4c8cef38"}],"tag":"be1609b7","listMetadata":"7f6c6f55"},"/blog/tags/typescript-a74":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"53df8e83"},{"content":"2cd5cbb6"}],"tag":"bcbbf42e","listMetadata":"088b3228"},"/blog/tags/vcs-cd2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"},{"content":"5613e7cf"}],"tag":"2bd8a6cf","listMetadata":"1e90ea6d"},"/blog/tags/version-c87":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"}],"tag":"0681d8e1","listMetadata":"7ec3d878"},"/blog/tags/vscode-bcd":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b072568e"},{"content":"d7cf5e1f"}],"tag":"4bddfbdb","listMetadata":"18dd62e9"},"/blog/tags/wasm-463":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"957809ee"},{"content":"e746f759"},{"content":"d43cc2ec"},{"content":"51ada3e3"},{"content":"f761bd07"}],"tag":"3353503a","listMetadata":"271a7b09"},"/blog/typescript-monorepo-cd0":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"937d7adc"},"/blog/v0.13-d46":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"711949de"},"/blog/v0.14-934":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"e7d7123e"},"/blog/v0.15-6da":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b6e1085a"},"/blog/v0.16-f88":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b03b3eac"},"/blog/v0.17-841":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"0b289f4d"},"/blog/v0.18-825":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"edfea66c"},"/blog/v0.19-ad4":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4665933c"},"/blog/v0.20-311":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"f7bfbae9"},"/blog/v0.21-93d":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"5d48ec89"},"/blog/v0.22-4f4":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"22e78681"},"/blog/v0.23-d9e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2994c7d6"},"/blog/v0.24-c6b":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4931a616"},"/blog/v0.25-616":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"7d55a0f0"},"/blog/v0.26-7ee":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"9a062e52"},"/blog/vscode-extension-c62":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b819cecb"},"/docs/tags-a68":{"__comp":"3720c009","__context":{"plugin":"ec9f380e"},"tags":"55960ee5"},"/docs/tags/code-d62":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"09d7020f"},"/docs/tags/codegen-e89":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"daf4eece"},"/docs/tags/codeowners-c50":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"350ea002"},"/docs/tags/generator-4f0":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"24a07a83"},"/docs/tags/git-cd5":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"7b667a7f"},"/docs/tags/git-hooks-0b5":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"062a1a43"},"/docs/tags/hooks-9fb":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"b15686f4"},"/docs/tags/lang-0f7":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"66a08410"},"/docs/tags/mql-b60":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"0c7f16c1"},"/docs/tags/owners-a7d":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"4a3d03f6"},"/docs/tags/query-532":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"2b3490d9"},"/docs/tags/scaffold-018":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"8e65fbae"},"/docs/tags/solid-870":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"722146fe"},"/docs/tags/solidjs-25a":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"c67cfbac"},"/docs/tags/template-67d":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"3d4b58f3"},"/docs/tags/vcs-bb1":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"fcb295ad"},"/moon-b34":{"__comp":"193b481a","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"},"/moonbase-1fb":{"__comp":"d7cb860d","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"},"/proto-f87":{"__comp":"1cb65c7d","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"},"/search-6e4":{"__comp":"1a4e3797","__context":{"plugin":"b2d692e7"}},"/api-cd8":{"__comp":"83943ce1","__context":{"plugin":"907bfa82"},"options":"24adbf31","packages":"1b469a71","versionMetadata":"f41735e0"},"/api-710":{"__comp":"51985ffa","options":"24adbf31","packages":"1b469a71","versionMetadata":"f41735e0"},"/api/report-57a":{"__comp":"3e7d7789","readme":"63243ad1"},"/api/report/function/formatDuration-cd9":{"__comp":"3e7d7789"},"/api/report/function/formatTime-3d7":{"__comp":"3e7d7789"},"/api/report/function/getDurationInMillis-fa4":{"__comp":"3e7d7789"},"/api/report/function/getIconForStatus-f25":{"__comp":"3e7d7789"},"/api/report/function/hasFailed-72a":{"__comp":"3e7d7789"},"/api/report/function/hasPassed-c15":{"__comp":"3e7d7789"},"/api/report/function/isFlaky-d55":{"__comp":"3e7d7789"},"/api/report/function/isSlow-5b3":{"__comp":"3e7d7789"},"/api/report/function/prepareReportActions-619":{"__comp":"3e7d7789"},"/api/report/function/sortReport-7b7":{"__comp":"3e7d7789"},"/api/report/interface/PreparedAction-b0e":{"__comp":"3e7d7789"},"/api/runtime-e4a":{"__comp":"3e7d7789","readme":"c4f95133"},"/api/runtime/function/getContext-ba3":{"__comp":"3e7d7789"},"/api/runtime/interface/RuntimeContext-b42":{"__comp":"3e7d7789"},"/api/types-a7c":{"__comp":"3e7d7789","readme":"9ff86157"},"/api/types/interface/Action-5f0":{"__comp":"3e7d7789"},"/api/types/interface/ActionContext-bb7":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeInstallDeps-418":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeInstallProjectDeps-48d":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeRunTask-80f":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeSetupTool-ca5":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeSyncProject-8d5":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeSyncWorkspace-e99":{"__comp":"3e7d7789"},"/api/types/interface/Attempt-556":{"__comp":"3e7d7789"},"/api/types/interface/BinConfig-064":{"__comp":"3e7d7789"},"/api/types/interface/CodeownersConfig-c4e":{"__comp":"3e7d7789"},"/api/types/interface/ConstraintsConfig-b7e":{"__comp":"3e7d7789"},"/api/types/interface/DenoConfig-ebb":{"__comp":"3e7d7789"},"/api/types/interface/DependencyConfig-f20":{"__comp":"3e7d7789"},"/api/types/interface/Duration-f37":{"__comp":"3e7d7789"},"/api/types/interface/EventActionFinished-997":{"__comp":"3e7d7789"},"/api/types/interface/EventActionStarted-44f":{"__comp":"3e7d7789"},"/api/types/interface/EventDependenciesInstalled-a7d":{"__comp":"3e7d7789"},"/api/types/interface/EventDependenciesInstalling-4d6":{"__comp":"3e7d7789"},"/api/types/interface/EventPipelineAborted-1fe":{"__comp":"3e7d7789"},"/api/types/interface/EventPipelineFinished-d46":{"__comp":"3e7d7789"},"/api/types/interface/EventPipelineStarted-8fb":{"__comp":"3e7d7789"},"/api/types/interface/EventProjectSynced-c2f":{"__comp":"3e7d7789"},"/api/types/interface/EventProjectSyncing-38d":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputArchived-346":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputArchiving-e9e":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputCacheCheck-231":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputHydrated-1ee":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputHydrating-3ae":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetRan-f59":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetRunning-42a":{"__comp":"3e7d7789"},"/api/types/interface/EventToolInstalled-ac8":{"__comp":"3e7d7789"},"/api/types/interface/EventToolInstalling-09f":{"__comp":"3e7d7789"},"/api/types/interface/EventWorkspaceSynced-ca8":{"__comp":"3e7d7789"},"/api/types/interface/ExperimentsConfig-9c3":{"__comp":"3e7d7789"},"/api/types/interface/FileGroup-fbb":{"__comp":"3e7d7789"},"/api/types/interface/GeneratorConfig-4cc":{"__comp":"3e7d7789"},"/api/types/interface/HasherConfig-dce":{"__comp":"3e7d7789"},"/api/types/interface/InheritedTasksConfig-481":{"__comp":"3e7d7789"},"/api/types/interface/NodeConfig-c81":{"__comp":"3e7d7789"},"/api/types/interface/NotifierConfig-acd":{"__comp":"3e7d7789"},"/api/types/interface/NpmConfig-448":{"__comp":"3e7d7789"},"/api/types/interface/OwnersConfig-7b9":{"__comp":"3e7d7789"},"/api/types/interface/PartialBinConfig-5cf":{"__comp":"3e7d7789"},"/api/types/interface/PartialCodeownersConfig-b6e":{"__comp":"3e7d7789"},"/api/types/interface/PartialConstraintsConfig-a0e":{"__comp":"3e7d7789"},"/api/types/interface/PartialDenoConfig-26c":{"__comp":"3e7d7789"},"/api/types/interface/PartialDependencyConfig-eb0":{"__comp":"3e7d7789"},"/api/types/interface/PartialExperimentsConfig-f6b":{"__comp":"3e7d7789"},"/api/types/interface/PartialGeneratorConfig-3f3":{"__comp":"3e7d7789"},"/api/types/interface/PartialHasherConfig-b54":{"__comp":"3e7d7789"},"/api/types/interface/PartialInheritedTasksConfig-c99":{"__comp":"3e7d7789"},"/api/types/interface/PartialNodeConfig-1ba":{"__comp":"3e7d7789"},"/api/types/interface/PartialNotifierConfig-f70":{"__comp":"3e7d7789"},"/api/types/interface/PartialNpmConfig-c1a":{"__comp":"3e7d7789"},"/api/types/interface/PartialOwnersConfig-10e":{"__comp":"3e7d7789"},"/api/types/interface/PartialPnpmConfig-9cc":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectConfig-10d":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectMetadataConfig-346":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectToolchainCommonToolConfig-542":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectToolchainConfig-86b":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectToolchainTypeScriptConfig-4a7":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectWorkspaceConfig-f17":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig-195":{"__comp":"3e7d7789"},"/api/types/interface/PartialRunnerConfig-0c7":{"__comp":"3e7d7789"},"/api/types/interface/PartialRustConfig-0c2":{"__comp":"3e7d7789"},"/api/types/interface/PartialTaskConfig-79a":{"__comp":"3e7d7789"},"/api/types/interface/PartialTaskOptionsConfig-e8f":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateConfig-9e8":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateFrontmatterConfig-8e5":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableBoolSetting-38b":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableEnumSetting-23b":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableEnumValueConfig-442":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableNumberSetting-a8c":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableStringSetting-1a4":{"__comp":"3e7d7789"},"/api/types/interface/PartialToolchainConfig-759":{"__comp":"3e7d7789"},"/api/types/interface/PartialTypeScriptConfig-854":{"__comp":"3e7d7789"},"/api/types/interface/PartialVcsConfig-75a":{"__comp":"3e7d7789"},"/api/types/interface/PartialWorkspaceConfig-b57":{"__comp":"3e7d7789"},"/api/types/interface/PartialWorkspaceProjectsConfig-242":{"__comp":"3e7d7789"},"/api/types/interface/PartialYarnConfig-91c":{"__comp":"3e7d7789"},"/api/types/interface/PnpmConfig-e25":{"__comp":"3e7d7789"},"/api/types/interface/Project-817":{"__comp":"3e7d7789"},"/api/types/interface/ProjectConfig-0f3":{"__comp":"3e7d7789"},"/api/types/interface/ProjectMetadataConfig-4b0":{"__comp":"3e7d7789"},"/api/types/interface/ProjectToolchainCommonToolConfig-832":{"__comp":"3e7d7789"},"/api/types/interface/ProjectToolchainConfig-5f0":{"__comp":"3e7d7789"},"/api/types/interface/ProjectToolchainTypeScriptConfig-481":{"__comp":"3e7d7789"},"/api/types/interface/ProjectWorkspaceConfig-1bf":{"__comp":"3e7d7789"},"/api/types/interface/ProjectWorkspaceInheritedTasksConfig-503":{"__comp":"3e7d7789"},"/api/types/interface/ProviderEnvironment-390":{"__comp":"3e7d7789"},"/api/types/interface/RunnerConfig-937":{"__comp":"3e7d7789"},"/api/types/interface/RunReport-0da":{"__comp":"3e7d7789"},"/api/types/interface/Runtime-3de":{"__comp":"3e7d7789"},"/api/types/interface/RustConfig-3b7":{"__comp":"3e7d7789"},"/api/types/interface/TargetState-d71":{"__comp":"3e7d7789"},"/api/types/interface/Task-753":{"__comp":"3e7d7789"},"/api/types/interface/TaskConfig-2f8":{"__comp":"3e7d7789"},"/api/types/interface/TaskOptions-764":{"__comp":"3e7d7789"},"/api/types/interface/TaskOptionsConfig-641":{"__comp":"3e7d7789"},"/api/types/interface/TemplateConfig-920":{"__comp":"3e7d7789"},"/api/types/interface/TemplateFrontmatterConfig-899":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableBoolSetting-4ef":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableEnumSetting-45d":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableEnumValueConfig-065":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableNumberSetting-284":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableStringSetting-bf1":{"__comp":"3e7d7789"},"/api/types/interface/ToolchainConfig-6b5":{"__comp":"3e7d7789"},"/api/types/interface/TypeScriptConfig-c60":{"__comp":"3e7d7789"},"/api/types/interface/VcsConfig-e81":{"__comp":"3e7d7789"},"/api/types/interface/WebhookPayload-0a8":{"__comp":"3e7d7789"},"/api/types/interface/WorkspaceConfig-988":{"__comp":"3e7d7789"},"/api/types/interface/WorkspaceProjectsConfig-31a":{"__comp":"3e7d7789"},"/api/types/interface/YarnConfig-e2e":{"__comp":"3e7d7789"},"/docs-489":{"__comp":"1be78505","__context":{"plugin":"ec9f380e"},"versionMetadata":"935f2afb"},"/docs-80c":{"__comp":"17896441","content":"f8409a7e"},"/docs/cheat-sheet-53d":{"__comp":"17896441","content":"405d593f"},"/docs/commands-993":{"__comp":"14eb3368","categoryGeneratedIndex":"4a1ab9c8"},"/docs/commands/action-graph-d0e":{"__comp":"17896441","content":"351d319b"},"/docs/commands/bin-e39":{"__comp":"17896441","content":"a65441a5"},"/docs/commands/check-cf6":{"__comp":"17896441","content":"626ef9ce"},"/docs/commands/ci-f74":{"__comp":"17896441","content":"068b8e98"},"/docs/commands/clean-9b0":{"__comp":"17896441","content":"686e1776"},"/docs/commands/completions-f1b":{"__comp":"17896441","content":"69c95af3"},"/docs/commands/docker-4ed":{"__comp":"14eb3368","categoryGeneratedIndex":"dffc4bd7"},"/docs/commands/docker/prune-fc8":{"__comp":"17896441","content":"a26a8dd3"},"/docs/commands/docker/scaffold-d55":{"__comp":"17896441","content":"a219b733"},"/docs/commands/docker/setup-2af":{"__comp":"17896441","content":"8c4a23a7"},"/docs/commands/generate-0ff":{"__comp":"17896441","content":"0f8a713b"},"/docs/commands/init-28a":{"__comp":"17896441","content":"8c079f7d"},"/docs/commands/migrate-4df":{"__comp":"14eb3368","categoryGeneratedIndex":"600433a8"},"/docs/commands/migrate/from-package-json-869":{"__comp":"17896441","content":"ffef4e04"},"/docs/commands/migrate/from-turborepo-36a":{"__comp":"17896441","content":"3df11149"},"/docs/commands/overview-c3f":{"__comp":"17896441","content":"1aa28b52"},"/docs/commands/project-225":{"__comp":"17896441","content":"2c114e85"},"/docs/commands/project-graph-49c":{"__comp":"17896441","content":"eda853ca"},"/docs/commands/query-0ed":{"__comp":"14eb3368","categoryGeneratedIndex":"0b1dc2cd"},"/docs/commands/query/hash-390":{"__comp":"17896441","content":"be1aaa14"},"/docs/commands/query/hash-diff-f4c":{"__comp":"17896441","content":"f616eec2"},"/docs/commands/query/projects-9e0":{"__comp":"17896441","content":"a88c4343"},"/docs/commands/query/tasks-d45":{"__comp":"17896441","content":"146ca1ad"},"/docs/commands/query/touched-files-ea7":{"__comp":"17896441","content":"d8fdbe7a"},"/docs/commands/run-a21":{"__comp":"17896441","content":"f9cc98ab"},"/docs/commands/setup-187":{"__comp":"17896441","content":"318f6953"},"/docs/commands/sync-193":{"__comp":"14eb3368","categoryGeneratedIndex":"00568285"},"/docs/commands/sync/codeowners-49c":{"__comp":"17896441","content":"e570d6db"},"/docs/commands/sync/hooks-885":{"__comp":"17896441","content":"357f2143"},"/docs/commands/sync/projects-7d5":{"__comp":"17896441","content":"861abce9"},"/docs/commands/task-d57":{"__comp":"17896441","content":"e16afba1"},"/docs/commands/teardown-b70":{"__comp":"17896441","content":"b104f86f"},"/docs/commands/upgrade-a78":{"__comp":"17896441","content":"163fb342"},"/docs/comparison-6c8":{"__comp":"17896441","content":"86257f88"},"/docs/concepts-04b":{"__comp":"14eb3368","categoryGeneratedIndex":"c5ed658f"},"/docs/concepts/cache-0e8":{"__comp":"17896441","content":"89c16be8"},"/docs/concepts/file-group-759":{"__comp":"17896441","content":"b9e9925e"},"/docs/concepts/file-pattern-1ab":{"__comp":"17896441","content":"24556f49"},"/docs/concepts/project-6bd":{"__comp":"17896441","content":"b831fe65"},"/docs/concepts/query-lang-5d7":{"__comp":"17896441","content":"db676956"},"/docs/concepts/target-04a":{"__comp":"17896441","content":"fea2b255"},"/docs/concepts/task-85c":{"__comp":"17896441","content":"3f5148d4"},"/docs/concepts/task-inheritance-c5a":{"__comp":"17896441","content":"df212c12"},"/docs/concepts/token-3e2":{"__comp":"17896441","content":"3dc68565"},"/docs/concepts/toolchain-26e":{"__comp":"17896441","content":"2ed8359a"},"/docs/concepts/workspace-3e1":{"__comp":"17896441","content":"e13166f5"},"/docs/config-c27":{"__comp":"14eb3368","categoryGeneratedIndex":"90b14878"},"/docs/config/project-7fc":{"__comp":"17896441","content":"4ec8a4a9"},"/docs/config/tasks-7d1":{"__comp":"17896441","content":"fc3ae8bf"},"/docs/config/template-eeb":{"__comp":"17896441","content":"a0d8b188"},"/docs/config/toolchain-a71":{"__comp":"17896441","content":"8de38bef"},"/docs/config/workspace-ceb":{"__comp":"17896441","content":"17cacc08"},"/docs/create-project-2c7":{"__comp":"17896441","content":"57bd32c7"},"/docs/create-task-c85":{"__comp":"17896441","content":"88aaac27"},"/docs/editors-c15":{"__comp":"14eb3368","categoryGeneratedIndex":"f41d5eb1"},"/docs/editors/vscode-501":{"__comp":"17896441","content":"b8f3d4c8"},"/docs/faq-fe9":{"__comp":"17896441","content":"ea313555"},"/docs/guides/ci-d5d":{"__comp":"17896441","content":"b78f40a6"},"/docs/guides/codegen-527":{"__comp":"17896441","content":"488a99ce"},"/docs/guides/codeowners-598":{"__comp":"17896441","content":"9f838734"},"/docs/guides/debug-task-fe5":{"__comp":"17896441","content":"36027025"},"/docs/guides/docker-578":{"__comp":"17896441","content":"89a53707"},"/docs/guides/examples/angular-3ac":{"__comp":"17896441","content":"ff13fcd4"},"/docs/guides/examples/astro-810":{"__comp":"17896441","content":"195293b6"},"/docs/guides/examples/eslint-161":{"__comp":"17896441","content":"a581e456"},"/docs/guides/examples/jest-789":{"__comp":"17896441","content":"fe36d4cd"},"/docs/guides/examples/nest-0d4":{"__comp":"17896441","content":"d93dbc28"},"/docs/guides/examples/next-d2c":{"__comp":"17896441","content":"56a06382"},"/docs/guides/examples/nuxt-475":{"__comp":"17896441","content":"aa431e4a"},"/docs/guides/examples/packemon-c08":{"__comp":"17896441","content":"303db6c1"},"/docs/guides/examples/prettier-fda":{"__comp":"17896441","content":"90f88783"},"/docs/guides/examples/react-7da":{"__comp":"17896441","content":"759c01e9"},"/docs/guides/examples/remix-a9b":{"__comp":"17896441","content":"0cd40d9b"},"/docs/guides/examples/solid-00c":{"__comp":"17896441","content":"5f3507b2"},"/docs/guides/examples/storybook-155":{"__comp":"17896441","content":"0cb5fac6"},"/docs/guides/examples/sveltekit-0c7":{"__comp":"17896441","content":"0034bcd6"},"/docs/guides/examples/typescript-e4a":{"__comp":"17896441","content":"03193cc0"},"/docs/guides/examples/vite-593":{"__comp":"17896441","content":"e898b7f3"},"/docs/guides/examples/vue-5c0":{"__comp":"17896441","content":"f7f505dc"},"/docs/guides/javascript/deno-handbook-ef8":{"__comp":"17896441","content":"02401b2b"},"/docs/guides/javascript/node-handbook-f9e":{"__comp":"17896441","content":"2dffafe2"},"/docs/guides/javascript/typescript-eslint-3a8":{"__comp":"17896441","content":"6dd55018"},"/docs/guides/javascript/typescript-project-refs-e9d":{"__comp":"17896441","content":"6c24c6c6"},"/docs/guides/node/examples-dd3":{"__comp":"14eb3368","categoryGeneratedIndex":"4e9707d9"},"/docs/guides/offline-mode-422":{"__comp":"17896441","content":"2d15743f"},"/docs/guides/open-source-339":{"__comp":"17896441","content":"766b2171"},"/docs/guides/profile-b9d":{"__comp":"17896441","content":"8f6f7bb5"},"/docs/guides/remote-cache-7a9":{"__comp":"17896441","content":"db0cc9f1"},"/docs/guides/root-project-272":{"__comp":"17896441","content":"073e718f"},"/docs/guides/rust/handbook-b00":{"__comp":"17896441","content":"49b772d3"},"/docs/guides/sharing-config-554":{"__comp":"17896441","content":"a33962b9"},"/docs/guides/vcs-hooks-c03":{"__comp":"17896441","content":"39b245d7"},"/docs/guides/webhooks-b9d":{"__comp":"17896441","content":"87d62477"},"/docs/how-it-works-837":{"__comp":"14eb3368","categoryGeneratedIndex":"fd27c808"},"/docs/how-it-works/action-graph-f15":{"__comp":"17896441","content":"6fb24ff7"},"/docs/how-it-works/languages-165":{"__comp":"17896441","content":"4fa82ff8"},"/docs/how-it-works/project-graph-6b7":{"__comp":"17896441","content":"8876813e"},"/docs/install-7a2":{"__comp":"17896441","content":"046e2194"},"/docs/migrate-to-moon-aa1":{"__comp":"17896441","content":"b65c3624"},"/docs/proto-7be":{"__comp":"17896441","content":"ad536080"},"/docs/proto/commands/add-plugin-bda":{"__comp":"17896441","content":"69bc0e2c"},"/docs/proto/commands/alias-8ad":{"__comp":"17896441","content":"9f025583"},"/docs/proto/commands/bin-dc5":{"__comp":"17896441","content":"fab64b27"},"/docs/proto/commands/clean-740":{"__comp":"17896441","content":"413318e8"},"/docs/proto/commands/completions-87c":{"__comp":"17896441","content":"6eae5b23"},"/docs/proto/commands/install-f7b":{"__comp":"17896441","content":"a20401e4"},"/docs/proto/commands/install-global-59f":{"__comp":"17896441","content":"4d66ab66"},"/docs/proto/commands/list-50b":{"__comp":"17896441","content":"d1576682"},"/docs/proto/commands/list-global-fb9":{"__comp":"17896441","content":"1e76467f"},"/docs/proto/commands/list-remote-0b7":{"__comp":"17896441","content":"a701d349"},"/docs/proto/commands/outdated-dba":{"__comp":"17896441","content":"5e371f0f"},"/docs/proto/commands/pin-65a":{"__comp":"17896441","content":"79765aba"},"/docs/proto/commands/plugins-9c9":{"__comp":"17896441","content":"a9e1900f"},"/docs/proto/commands/remove-plugin-570":{"__comp":"17896441","content":"2e1ef406"},"/docs/proto/commands/run-a65":{"__comp":"17896441","content":"cae36b15"},"/docs/proto/commands/setup-735":{"__comp":"17896441","content":"d4c755e6"},"/docs/proto/commands/tools-092":{"__comp":"17896441","content":"fc62dd75"},"/docs/proto/commands/unalias-734":{"__comp":"17896441","content":"a18798d1"},"/docs/proto/commands/uninstall-bbc":{"__comp":"17896441","content":"c5980a65"},"/docs/proto/commands/uninstall-global-10a":{"__comp":"17896441","content":"5552634a"},"/docs/proto/commands/upgrade-edc":{"__comp":"17896441","content":"be324e15"},"/docs/proto/commands/use-966":{"__comp":"17896441","content":"a452709a"},"/docs/proto/config-2e0":{"__comp":"17896441","content":"0627e785"},"/docs/proto/detection-406":{"__comp":"17896441","content":"a641c963"},"/docs/proto/faq-fc6":{"__comp":"17896441","content":"c7d98fe2"},"/docs/proto/install-abd":{"__comp":"17896441","content":"f440db1d"},"/docs/proto/plugins-49c":{"__comp":"17896441","content":"b49860f1"},"/docs/proto/toml-plugin-33c":{"__comp":"17896441","content":"f714495d"},"/docs/proto/tools-6c5":{"__comp":"17896441","content":"4178efb8"},"/docs/proto/wasm-plugin-4c5":{"__comp":"17896441","content":"9e528cee"},"/docs/run-task-db3":{"__comp":"17896441","content":"819f977d"},"/docs/setup-toolchain-ee9":{"__comp":"17896441","content":"9edb948e"},"/docs/setup-workspace-34e":{"__comp":"17896441","content":"f18fbdcd"},"/docs/terminology-0ff":{"__comp":"17896441","content":"6b50e60a"},"/-b14":{"__comp":"1df93b7f","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=93002,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.f61cdfcc.js b/assets/js/main.f61cdfcc.js new file mode 100644 index 00000000000..deee39ccb74 --- /dev/null +++ b/assets/js/main.f61cdfcc.js @@ -0,0 +1,2 @@ +/*! For license information please see main.f61cdfcc.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40179],{56573:(e,t,n)=>{"use strict";n.d(t,{W:()=>o});var a=n(27378);function o(){return a.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},a.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},37140:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(o&&(o+=" "),o+=t);return o}},33441:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(o&&(o+=" "),o+=t);return o}},50615:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a,o,r,i=n(27378);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(this,arguments)}const c=e=>{let{title:t,titleId:n,...c}=e;return i.createElement("svg",s({id:"Layer_1",xmlns:"http://www.w3.org/2000/svg",x:0,y:0,viewBox:"0 0 1604 320",style:{enableBackground:"new 0 0 1604 320"},xmlSpace:"preserve",role:"img","aria-labelledby":n},c),t?i.createElement("title",{id:n},t):null,a||(a=i.createElement("style",null,".st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}")),i.createElement("g",{id:"Group-19"},o||(o=i.createElement("path",{id:"Fill-1",className:"st0",d:"M0 320h320V0H0z"})),i.createElement("path",{id:"Fill-2",style:{fillRule:"evenodd",clipRule:"evenodd",fill:"#fff"},d:"M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"}),r||(r=i.createElement("g",{id:"Group-18",transform:"translate(425.854 73.217)"},i.createElement("path",{id:"Fill-3",className:"st0",d:"M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"}),i.createElement("path",{id:"Fill-5",className:"st0",d:"M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"}),i.createElement("path",{id:"Fill-7",className:"st0",d:"M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"}),i.createElement("path",{id:"Fill-9",className:"st0",d:"M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"}),i.createElement("path",{id:"Fill-11",className:"st0",d:"M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"}),i.createElement("path",{id:"Fill-13",className:"st0",d:"M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"}),i.createElement("path",{id:"Fill-14",className:"st0",d:"M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"}),i.createElement("path",{id:"Fill-15",className:"st0",d:"M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"}),i.createElement("path",{id:"Fill-16",className:"st0",d:"M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"}),i.createElement("path",{id:"Fill-17",className:"st0",d:"M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"})))))}},23427:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>r});var a=n(27378);const o=a.createContext(!1);function r(e){let{children:t}=e;const[n,r]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{r(!0)}),[]),a.createElement(o.Provider,{value:n},t)}},93002:(e,t,n)=>{"use strict";var a=n(27378),o=n(31542),r=n(4289),i=n(92883),s=n(161);const c=[n(86945),n(70142),n(81282),n(54374),n(59887),n(26222),n(53971)];var l=n(76623),d=n(35331),u=n(95473);function p(e){let{children:t}=e;return a.createElement(a.Fragment,null,t)}var f=n(25773),m=n(7092),g=n(50353),b=n(98948),h=n(20624),v=n(1123),y=n(43714),x=n(70174),_=n(13149),k=n(51721),w=n(60505);function E(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.default)(),n=(0,y.l)();return a.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return a.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),a.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.default)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.default)(),{pathname:a}=(0,d.TH)();return e+(0,k.applyTrailingSlash)((0,b.Z)(a),{trailingSlash:n,baseUrl:t})}(),r=t?`${n}${t}`:o;return a.createElement(m.Z,null,a.createElement("meta",{property:"og:url",content:r}),a.createElement("link",{rel:"canonical",href:r}))}function C(){const{i18n:{currentLocale:e}}=(0,g.default)(),{metadata:t,image:n}=(0,h.L)();return a.createElement(a.Fragment,null,a.createElement(m.Z,null,a.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),a.createElement("body",{className:x.h})),n&&a.createElement(v.d,{image:n}),a.createElement(S,null),a.createElement(E,null),a.createElement(w.Z,{tag:_.HX,locale:e}),a.createElement(m.Z,null,t.map(((e,t)=>a.createElement("meta",(0,f.Z)({key:t},e))))))}const T=new Map;function P(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,u.f)(l.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(23427),N=n(83340);function O(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];const o=c.map((t=>(t.default?.[e]??t[e])?.(...n)));return()=>o.forEach((e=>e?.()))}const j=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,a.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const a=t.pathname===n.pathname,o=t.hash===n.hash,r=t.search===n.search;if(a&&o&&!r)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1));document.getElementById(e)?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),O("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,u.f)(l.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class M extends a.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?O("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=O("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return a.createElement(j,{previousLocation:this.previousLocation,location:t},a.createElement(d.AW,{location:t,render:()=>e}))}}const I=M,R="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner-suggestion-container",z="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${z}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${z}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${D}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${D}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function B(){const{siteConfig:{baseUrl:e}}=(0,g.default)();return(0,a.useLayoutEffect)((()=>{window[z]=!1}),[]),a.createElement(a.Fragment,null,!s.Z.canUseDOM&&a.createElement(m.Z,null,a.createElement("script",null,F(e))),a.createElement("div",{id:R}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.default)(),{pathname:n}=(0,d.TH)();return t&&n===e?a.createElement(B,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:r}}=(0,g.default)(),i=(0,b.Z)(e),{htmlLang:s,direction:c}=r[o];return a.createElement(m.Z,null,a.createElement("html",{lang:s,dir:c}),a.createElement("title",null,t),a.createElement("meta",{property:"og:title",content:t}),a.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&a.createElement("link",{rel:"icon",href:i}))}var H=n(46293),V=n(76457);function Z(){const e=(0,V.Z)();return a.createElement(m.Z,null,a.createElement("html",{"data-has-hydrated":e}))}function q(){const e=(0,u.H)(l.Z),t=(0,d.TH)();return a.createElement(H.Z,null,a.createElement(N.M,null,a.createElement(A.t,null,a.createElement(p,null,a.createElement(U,null),a.createElement(C,null),a.createElement($,null),a.createElement(I,{location:P(t)},e)),a.createElement(Z,null))))}var W=n(16887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();(document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode)?.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const a=new XMLHttpRequest;a.open("GET",e,!0),a.withCredentials=!0,a.onload=()=>{200===a.status?t():n()},a.send(null)}))};var Y=n(13361);const K=new Set,Q=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch(e){if(!(e=>!X()&&!Q.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,u.f)(l.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!Q.has(e))(e)&&(Q.add(e),L(e))},ee=Object.freeze(J);if(s.Z.canUseDOM){window.docusaurus=ee;const e=o.hydrate;L(window.location.pathname).then((()=>{e(a.createElement(i.B6,null,a.createElement(r.VK,null,a.createElement(q,null))),document.getElementById("__docusaurus"))}))}},83340:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>u});var a=n(27378),o=n(36809);const r=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-LB233GTZD3"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"cheat-sheet","path":"/docs/cheat-sheet","sidebar":"docs"},{"id":"commands/action-graph","path":"/docs/commands/action-graph","sidebar":"docs"},{"id":"commands/bin","path":"/docs/commands/bin","sidebar":"docs"},{"id":"commands/check","path":"/docs/commands/check","sidebar":"docs"},{"id":"commands/ci","path":"/docs/commands/ci","sidebar":"docs"},{"id":"commands/clean","path":"/docs/commands/clean","sidebar":"docs"},{"id":"commands/completions","path":"/docs/commands/completions","sidebar":"docs"},{"id":"commands/docker/prune","path":"/docs/commands/docker/prune","sidebar":"docs"},{"id":"commands/docker/scaffold","path":"/docs/commands/docker/scaffold","sidebar":"docs"},{"id":"commands/docker/setup","path":"/docs/commands/docker/setup","sidebar":"docs"},{"id":"commands/generate","path":"/docs/commands/generate","sidebar":"docs"},{"id":"commands/init","path":"/docs/commands/init","sidebar":"docs"},{"id":"commands/migrate/from-package-json","path":"/docs/commands/migrate/from-package-json","sidebar":"docs"},{"id":"commands/migrate/from-turborepo","path":"/docs/commands/migrate/from-turborepo","sidebar":"docs"},{"id":"commands/overview","path":"/docs/commands/overview","sidebar":"docs"},{"id":"commands/project","path":"/docs/commands/project","sidebar":"docs"},{"id":"commands/project-graph","path":"/docs/commands/project-graph","sidebar":"docs"},{"id":"commands/query/hash","path":"/docs/commands/query/hash","sidebar":"docs"},{"id":"commands/query/hash-diff","path":"/docs/commands/query/hash-diff","sidebar":"docs"},{"id":"commands/query/projects","path":"/docs/commands/query/projects","sidebar":"docs"},{"id":"commands/query/tasks","path":"/docs/commands/query/tasks","sidebar":"docs"},{"id":"commands/query/touched-files","path":"/docs/commands/query/touched-files","sidebar":"docs"},{"id":"commands/run","path":"/docs/commands/run","sidebar":"docs"},{"id":"commands/setup","path":"/docs/commands/setup","sidebar":"docs"},{"id":"commands/sync/codeowners","path":"/docs/commands/sync/codeowners","sidebar":"docs"},{"id":"commands/sync/hooks","path":"/docs/commands/sync/hooks","sidebar":"docs"},{"id":"commands/sync/projects","path":"/docs/commands/sync/projects","sidebar":"docs"},{"id":"commands/task","path":"/docs/commands/task","sidebar":"docs"},{"id":"commands/teardown","path":"/docs/commands/teardown","sidebar":"docs"},{"id":"commands/upgrade","path":"/docs/commands/upgrade","sidebar":"docs"},{"id":"comparison","path":"/docs/comparison","sidebar":"docs"},{"id":"concepts/cache","path":"/docs/concepts/cache","sidebar":"docs"},{"id":"concepts/file-group","path":"/docs/concepts/file-group","sidebar":"docs"},{"id":"concepts/file-pattern","path":"/docs/concepts/file-pattern","sidebar":"docs"},{"id":"concepts/project","path":"/docs/concepts/project","sidebar":"docs"},{"id":"concepts/query-lang","path":"/docs/concepts/query-lang","sidebar":"docs"},{"id":"concepts/target","path":"/docs/concepts/target","sidebar":"docs"},{"id":"concepts/task","path":"/docs/concepts/task","sidebar":"docs"},{"id":"concepts/task-inheritance","path":"/docs/concepts/task-inheritance","sidebar":"docs"},{"id":"concepts/token","path":"/docs/concepts/token","sidebar":"docs"},{"id":"concepts/toolchain","path":"/docs/concepts/toolchain","sidebar":"docs"},{"id":"concepts/workspace","path":"/docs/concepts/workspace","sidebar":"docs"},{"id":"config/project","path":"/docs/config/project","sidebar":"docs"},{"id":"config/tasks","path":"/docs/config/tasks","sidebar":"docs"},{"id":"config/template","path":"/docs/config/template","sidebar":"docs"},{"id":"config/toolchain","path":"/docs/config/toolchain","sidebar":"docs"},{"id":"config/workspace","path":"/docs/config/workspace","sidebar":"docs"},{"id":"create-project","path":"/docs/create-project","sidebar":"docs"},{"id":"create-task","path":"/docs/create-task","sidebar":"docs"},{"id":"editors/vscode","path":"/docs/editors/vscode","sidebar":"docs"},{"id":"faq","path":"/docs/faq","sidebar":"docs"},{"id":"guides/ci","path":"/docs/guides/ci","sidebar":"guides"},{"id":"guides/codegen","path":"/docs/guides/codegen","sidebar":"guides"},{"id":"guides/codeowners","path":"/docs/guides/codeowners","sidebar":"guides"},{"id":"guides/debug-task","path":"/docs/guides/debug-task","sidebar":"guides"},{"id":"guides/docker","path":"/docs/guides/docker","sidebar":"guides"},{"id":"guides/examples/angular","path":"/docs/guides/examples/angular","sidebar":"guides"},{"id":"guides/examples/astro","path":"/docs/guides/examples/astro","sidebar":"guides"},{"id":"guides/examples/eslint","path":"/docs/guides/examples/eslint","sidebar":"guides"},{"id":"guides/examples/jest","path":"/docs/guides/examples/jest","sidebar":"guides"},{"id":"guides/examples/nest","path":"/docs/guides/examples/nest","sidebar":"guides"},{"id":"guides/examples/next","path":"/docs/guides/examples/next","sidebar":"guides"},{"id":"guides/examples/nuxt","path":"/docs/guides/examples/nuxt","sidebar":"guides"},{"id":"guides/examples/packemon","path":"/docs/guides/examples/packemon","sidebar":"guides"},{"id":"guides/examples/prettier","path":"/docs/guides/examples/prettier","sidebar":"guides"},{"id":"guides/examples/react","path":"/docs/guides/examples/react","sidebar":"guides"},{"id":"guides/examples/remix","path":"/docs/guides/examples/remix","sidebar":"guides"},{"id":"guides/examples/solid","path":"/docs/guides/examples/solid","sidebar":"guides"},{"id":"guides/examples/storybook","path":"/docs/guides/examples/storybook","sidebar":"guides"},{"id":"guides/examples/sveltekit","path":"/docs/guides/examples/sveltekit","sidebar":"guides"},{"id":"guides/examples/typescript","path":"/docs/guides/examples/typescript","sidebar":"guides"},{"id":"guides/examples/vite","path":"/docs/guides/examples/vite","sidebar":"guides"},{"id":"guides/examples/vue","path":"/docs/guides/examples/vue","sidebar":"guides"},{"id":"guides/javascript/deno-handbook","path":"/docs/guides/javascript/deno-handbook","sidebar":"guides"},{"id":"guides/javascript/node-handbook","path":"/docs/guides/javascript/node-handbook","sidebar":"guides"},{"id":"guides/javascript/typescript-eslint","path":"/docs/guides/javascript/typescript-eslint"},{"id":"guides/javascript/typescript-project-refs","path":"/docs/guides/javascript/typescript-project-refs","sidebar":"guides"},{"id":"guides/offline-mode","path":"/docs/guides/offline-mode","sidebar":"guides"},{"id":"guides/open-source","path":"/docs/guides/open-source","sidebar":"guides"},{"id":"guides/profile","path":"/docs/guides/profile","sidebar":"guides"},{"id":"guides/remote-cache","path":"/docs/guides/remote-cache","sidebar":"guides"},{"id":"guides/root-project","path":"/docs/guides/root-project","sidebar":"guides"},{"id":"guides/rust/handbook","path":"/docs/guides/rust/handbook","sidebar":"guides"},{"id":"guides/sharing-config","path":"/docs/guides/sharing-config","sidebar":"guides"},{"id":"guides/vcs-hooks","path":"/docs/guides/vcs-hooks","sidebar":"guides"},{"id":"guides/webhooks","path":"/docs/guides/webhooks","sidebar":"guides"},{"id":"how-it-works/action-graph","path":"/docs/how-it-works/action-graph","sidebar":"docs"},{"id":"how-it-works/languages","path":"/docs/how-it-works/languages","sidebar":"docs"},{"id":"how-it-works/project-graph","path":"/docs/how-it-works/project-graph","sidebar":"docs"},{"id":"install","path":"/docs/install","sidebar":"docs"},{"id":"intro","path":"/docs/","sidebar":"docs"},{"id":"migrate-to-moon","path":"/docs/migrate-to-moon","sidebar":"docs"},{"id":"proto/commands/add-plugin","path":"/docs/proto/commands/add-plugin","sidebar":"proto"},{"id":"proto/commands/alias","path":"/docs/proto/commands/alias","sidebar":"proto"},{"id":"proto/commands/bin","path":"/docs/proto/commands/bin","sidebar":"proto"},{"id":"proto/commands/clean","path":"/docs/proto/commands/clean","sidebar":"proto"},{"id":"proto/commands/completions","path":"/docs/proto/commands/completions","sidebar":"proto"},{"id":"proto/commands/install","path":"/docs/proto/commands/install","sidebar":"proto"},{"id":"proto/commands/install-global","path":"/docs/proto/commands/install-global","sidebar":"proto"},{"id":"proto/commands/list","path":"/docs/proto/commands/list","sidebar":"proto"},{"id":"proto/commands/list-global","path":"/docs/proto/commands/list-global","sidebar":"proto"},{"id":"proto/commands/list-remote","path":"/docs/proto/commands/list-remote","sidebar":"proto"},{"id":"proto/commands/outdated","path":"/docs/proto/commands/outdated","sidebar":"proto"},{"id":"proto/commands/pin","path":"/docs/proto/commands/pin","sidebar":"proto"},{"id":"proto/commands/plugins","path":"/docs/proto/commands/plugins","sidebar":"proto"},{"id":"proto/commands/remove-plugin","path":"/docs/proto/commands/remove-plugin","sidebar":"proto"},{"id":"proto/commands/run","path":"/docs/proto/commands/run","sidebar":"proto"},{"id":"proto/commands/setup","path":"/docs/proto/commands/setup","sidebar":"proto"},{"id":"proto/commands/tools","path":"/docs/proto/commands/tools","sidebar":"proto"},{"id":"proto/commands/unalias","path":"/docs/proto/commands/unalias","sidebar":"proto"},{"id":"proto/commands/uninstall","path":"/docs/proto/commands/uninstall","sidebar":"proto"},{"id":"proto/commands/uninstall-global","path":"/docs/proto/commands/uninstall-global","sidebar":"proto"},{"id":"proto/commands/upgrade","path":"/docs/proto/commands/upgrade","sidebar":"proto"},{"id":"proto/commands/use","path":"/docs/proto/commands/use","sidebar":"proto"},{"id":"proto/config","path":"/docs/proto/config","sidebar":"proto"},{"id":"proto/detection","path":"/docs/proto/detection","sidebar":"proto"},{"id":"proto/faq","path":"/docs/proto/faq","sidebar":"proto"},{"id":"proto/index","path":"/docs/proto/","sidebar":"proto"},{"id":"proto/install","path":"/docs/proto/install","sidebar":"proto"},{"id":"proto/plugins","path":"/docs/proto/plugins","sidebar":"proto"},{"id":"proto/toml-plugin","path":"/docs/proto/toml-plugin","sidebar":"proto"},{"id":"proto/tools","path":"/docs/proto/tools","sidebar":"proto"},{"id":"proto/wasm-plugin","path":"/docs/proto/wasm-plugin","sidebar":"proto"},{"id":"run-task","path":"/docs/run-task","sidebar":"docs"},{"id":"setup-toolchain","path":"/docs/setup-toolchain","sidebar":"docs"},{"id":"setup-workspace","path":"/docs/setup-workspace","sidebar":"docs"},{"id":"terminology","path":"/docs/terminology","sidebar":"docs"},{"id":"/how-it-works","path":"/docs/how-it-works","sidebar":"docs"},{"id":"/concepts","path":"/docs/concepts","sidebar":"docs"},{"id":"/config","path":"/docs/config","sidebar":"docs"},{"id":"/editors","path":"/docs/editors","sidebar":"docs"},{"id":"/commands","path":"/docs/commands","sidebar":"docs"},{"id":"/commands/docker","path":"/docs/commands/docker","sidebar":"docs"},{"id":"/commands/migrate","path":"/docs/commands/migrate","sidebar":"docs"},{"id":"/commands/query","path":"/docs/commands/query","sidebar":"docs"},{"id":"/commands/sync","path":"/docs/commands/sync","sidebar":"docs"},{"id":"/guides/node/examples","path":"/docs/guides/node/examples","sidebar":"guides"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/","label":"intro"}},"guides":{"link":{"path":"/docs/guides/ci","label":"guides/ci"}},"proto":{"link":{"path":"/docs/proto/","label":"proto/index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const c=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.1.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.3"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.3"},"docusaurus-plugin-typedoc-api":{"type":"package","name":"docusaurus-plugin-typedoc-api","version":"3.0.0"},"docusaurus-tailwindcss":{"type":"local"}}}'),l={siteConfig:o.default,siteMetadata:c,globalData:r,i18n:i,codeTranslations:s},d=a.createContext(l);function u(e){let{children:t}=e;return a.createElement(d.Provider,{value:l},t)}},46293:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(27378),o=n(161),r=n(7092),i=n(51721),s=n(64654);function c(e){let{error:t,tryAgain:n}=e;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(l,{error:t}))}function l(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function d(e){let{error:t,tryAgain:n}=e;return a.createElement(p,{fallback:()=>a.createElement(c,{error:t,tryAgain:n})},a.createElement(r.Z,null,a.createElement("title",null,"Page Error")),a.createElement(s.Z,null,a.createElement(c,{error:t,tryAgain:n})))}const u=e=>a.createElement(d,e);class p extends a.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},161:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const a="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:a,canUseEventListeners:a&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:a&&"IntersectionObserver"in window,canUseViewport:a&&"screen"in window}},7092:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378),o=n(92883);function r(e){return a.createElement(o.ql,e)}},81884:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var a=n(25773),o=n(27378),r=n(4289),i=n(51721),s=n(50353),c=n(45626),l=n(161);const d=o.createContext({collectLink:()=>{}});var u=n(98948);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":b,autoAddBaseUrl:h=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:x}}=(0,s.default)(),{withBaseUrl:_}=(0,u.C)(),k=(0,o.useContext)(d),w=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>w.current));const E=p||f;const S=(0,c.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(P=C,h&&(e=>e.startsWith("/"))(P)?_(P):P):void 0;var P;T&&S&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:x}));const A=(0,o.useRef)(!1),N=n?r.OL:r.rU,O=l.Z.canUseIntersectionObserver,j=(0,o.useRef)(),L=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,o.useEffect)((()=>(!O&&S&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&j.current&&j.current.disconnect()})),[j,T,O,S]);const M=T?.startsWith("#")??!1,I=!T||!S||M;return I||b||k.collectLink(T),I?o.createElement("a",(0,a.Z)({ref:w,href:T},E&&!S&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(N,(0,a.Z)({},v,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{w.current=e,O&&e&&S&&(j.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(j.current.unobserve(e),j.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),j.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const f=o.forwardRef(p)},99213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>s});var a=n(27378);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,a.isValidElement)(e)))?n.map(((e,t)=>(0,a.isValidElement)(e)?a.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var r=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return r[t??n]??n??t}function s(e,t){let{message:n,id:a}=e;return o(i({message:n,id:a}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return a.createElement(a.Fragment,null,o(s,r))}},45688:(e,t,n)=>{"use strict";n.d(t,{m:()=>a});const a="default"},45626:(e,t,n)=>{"use strict";function a(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!a(e)}n.d(t,{Z:()=>o,b:()=>a})},98948:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var a=n(27378),o=n(50353),r=n(45626);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.default)(),n=(0,a.useCallback)(((n,a)=>function(e,t,n,a){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===a?{}:a;if(!n||n.startsWith("#")||(0,r.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,a)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},50353:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var a=n(27378),o=n(83340);function r(){return(0,a.useContext)(o._)}},76457:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378),o=n(23427);function r(){return(0,a.useContext)(o._)}},13361:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,r]=n;const i=a?`${a}.${o}`:o;var s;"object"==typeof(s=r)&&s&&Object.keys(s).length>0?e(r,i):t[i]=r}))}(e),t}},66881:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>r});var a=n(27378);const o=a.createContext(null);function r(e){let{children:t,value:n}=e;const r=a.useContext(o),i=(0,a.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const a={...t.data,...n?.data};return{plugin:t.plugin,data:a}}({parent:r,value:n})),[r,n]);return a.createElement(o.Provider,{value:i},t)}},62935:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useActiveDocContext:()=>v,useActivePlugin:()=>f,useActivePluginAndVersion:()=>m,useActiveVersion:()=>h,useAllDocsData:()=>u,useDocVersionSuggestions:()=>y,useDocsData:()=>p,useLatestVersion:()=>b,useVersions:()=>g});var a=n(35331),o=n(50353),r=n(45688);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.default)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function c(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,a.LX)(t,{path:e.path,exact:!1,strict:!1})))}function l(e,t){const n=c(e,t),o=n?.docs.find((e=>!!(0,a.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((a=>{a.id===t&&(n[e.name]=a)}))})),n}(o.id):{}}}const d={},u=()=>i("docusaurus-plugin-content-docs")??d,p=e=>function(e,t,n){void 0===t&&(t=r.m),void 0===n&&(n={});const a=i(e)?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,a.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,a.LX)(t,{path:n.path,exact:!1,strict:!1})})),r=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!r&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return r}(t,n,e)}function m(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,a.TH)();if(!t)return;return{activePlugin:t,activeVersion:c(t.pluginData,n)}}function g(e){return p(e).versions}function b(e){const t=p(e);return s(t)}function h(e){const t=p(e),{pathname:n}=(0,a.TH)();return c(t,n)}function v(e){const t=p(e),{pathname:n}=(0,a.TH)();return l(t,n)}function y(e){const t=p(e),{pathname:n}=(0,a.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},86945:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const a={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},54374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var a=n(8504),o=n.n(a);o().configure({showSpinner:!1});const r={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},81282:(e,t,n)=>{"use strict";n.r(t);var a=n(52349),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:a}=t;globalThis.Prism=e,a.forEach((e=>{n(59341)(`./prism-${e}`)}))}(a.Z)},6125:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378);const o="iconExternalLink_nPrP";function r(e){let{width:t=13.5,height:n=13.5}=e;return a.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o},a.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},64654:(e,t,n)=>{"use strict";n.d(t,{Z:()=>It});var a=n(27378),o=n(37140),r=n(46293),i=n(1123),s=n(39360),c=n(75484),l=n(70174);const d="skipToContent_oPtH";function u(){return a.createElement(s.l,{className:d})}var p=n(20624),f=n(10),m=n(25773),g=n(99213);function b(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:r=1.2,className:i,...s}=e;return a.createElement("svg",(0,m.Z)({viewBox:"0 0 15 15",width:t,height:n},s),a.createElement("g",{stroke:o,strokeWidth:r},a.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const h="closeButton_J5rP";function v(e){return a.createElement("button",(0,m.Z)({type:"button","aria-label":(0,g.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",h,e.className)}),a.createElement(b,{width:14,height:14,strokeWidth:3.1}))}const y="content_bSb_";function x(e){const{announcementBar:t}=(0,p.L)(),{content:n}=t;return a.createElement("div",(0,m.Z)({},e,{className:(0,o.Z)(y,e.className),dangerouslySetInnerHTML:{__html:n}}))}const _="announcementBar_zJRd",k="announcementBarPlaceholder_NpUd",w="announcementBarClose_Jjdj",E="announcementBarContent_t7IR";function S(){const{announcementBar:e}=(0,p.L)(),{isActive:t,close:n}=(0,f.nT)();if(!t)return null;const{backgroundColor:o,textColor:r,isCloseable:i}=e;return a.createElement("div",{className:_,style:{backgroundColor:o,color:r},role:"banner"},i&&a.createElement("div",{className:k}),a.createElement(x,{className:E}),i&&a.createElement(v,{onClick:n,className:w}))}var C=n(85536),T=n(82561),P=n(37930),A=n(15530);function N(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:i}=(0,A.Y)();return a.createElement("div",{className:"navbar-sidebar"},t,a.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},a.createElement("div",{className:"navbar-sidebar__item menu"},n),a.createElement("div",{className:"navbar-sidebar__item menu"},r)))}var O=n(55421),j=n(76457);function L(e){return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function M(e){return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24",width:24,height:24},e),a.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const I={toggle:"toggle_ki11",toggleButton:"toggleButton_MMFG",darkToggleIcon:"darkToggleIcon_U96C",lightToggleIcon:"lightToggleIcon_lgto",toggleButtonDisabled:"toggleButtonDisabled_Uw7m"};function R(e){let{className:t,buttonClassName:n,value:r,onChange:i}=e;const s=(0,j.Z)(),c=(0,g.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,g.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,g.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return a.createElement("div",{className:(0,o.Z)(I.toggle,t)},a.createElement("button",{className:(0,o.Z)("clean-btn",I.toggleButton,!s&&I.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===r?"light":"dark"),disabled:!s,title:c,"aria-label":c,"aria-live":"polite"},a.createElement(L,{className:(0,o.Z)(I.toggleIcon,I.lightToggleIcon)}),a.createElement(M,{className:(0,o.Z)(I.toggleIcon,I.darkToggleIcon)})))}const D=a.memo(R),z="darkNavbarColorModeToggle_m8pZ";function F(e){let{className:t}=e;const n=(0,p.L)().navbar.style,o=(0,p.L)().colorMode.disableSwitch,{colorMode:r,setColorMode:i}=(0,O.I)();return o?null:a.createElement(D,{className:t,buttonClassName:"dark"===n?z:void 0,value:r,onChange:i})}var B=n(10898);function $(){return a.createElement(B.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function U(){const e=(0,C.e)();return a.createElement("button",{type:"button","aria-label":(0,g.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},a.createElement(b,{color:"var(--ifm-color-emphasis-600)"}))}function H(){return a.createElement("div",{className:"navbar-sidebar__brand"},a.createElement($,null),a.createElement(F,{className:"margin-right--md"}),a.createElement(U,null))}var V=n(81884),Z=n(98948),q=n(45626),W=n(61503),G=n(6125);function Y(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:r,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:l,...d}=e;const u=(0,Z.Z)(o),p=(0,Z.Z)(t),f=(0,Z.Z)(r,{forcePrependBaseUrl:!0}),g=i&&r&&!(0,q.Z)(r),b=s?{dangerouslySetInnerHTML:{__html:s}}:{children:a.createElement(a.Fragment,null,i,g&&a.createElement(G.Z,c&&{width:12,height:12}))};return r?a.createElement(V.default,(0,m.Z)({href:l?f:r},d,b)):a.createElement(V.default,(0,m.Z)({to:u,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,W.F)(n,t.pathname):t.pathname.startsWith(p)},d,b))}function K(e){let{className:t,isDropdownItem:n=!1,...r}=e;const i=a.createElement(Y,(0,m.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},r));return n?a.createElement("li",null,i):i}function Q(e){let{className:t,isDropdownItem:n,...r}=e;return a.createElement("li",{className:"menu__list-item"},a.createElement(Y,(0,m.Z)({className:(0,o.Z)("menu__link",t)},r)))}function X(e){let{mobile:t=!1,position:n,...o}=e;const r=t?Q:K;return a.createElement(r,(0,m.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var J=n(80376),ee=n(8862),te=n(43511);function ne(e,t){return e.some((e=>function(e,t){return!!(0,ee.Mg)(e.to,t)||!!(0,W.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ae(e){let{items:t,position:n,className:r,onClick:i,...s}=e;const c=(0,a.useRef)(null),[l,d]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),a.createElement("div",{ref:c,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":l})},a.createElement(Y,(0,m.Z)({"aria-haspopup":"true","aria-expanded":l,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",r)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!l))}}),s.children??s.label),a.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>a.createElement(ze,(0,m.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function oe(e){let{items:t,className:n,position:r,onClick:i,...s}=e;const c=(0,te.b)(),l=ne(t,c),{collapsed:d,toggleCollapsed:u,setCollapsed:p}=(0,J.u)({initialState:()=>!l});return(0,a.useEffect)((()=>{l&&p(!l)}),[c,l,p]),a.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":d})},a.createElement(Y,(0,m.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},s,{onClick:e=>{e.preventDefault(),u()}}),s.children??s.label),a.createElement(J.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:d},t.map(((e,t)=>a.createElement(ze,(0,m.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function re(e){let{mobile:t=!1,...n}=e;const o=t?oe:ae;return a.createElement(o,n)}var ie=n(50353),se=n(43714),ce=n(35331);function le(e){let{width:t=20,height:n=20,...o}=e;return a.createElement("svg",(0,m.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),a.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const de="iconLanguage_kvP7";function ue(){return a.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},a.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var pe=n(56573),fe=["translations"];function me(){return me=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},me.apply(this,arguments)}function ge(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var a,o,r=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(r.push(a.value),!t||r.length!==t);i=!0);}catch(c){s=!0,o=c}finally{try{i||null==n.return||n.return()}finally{if(s)throw o}}return r}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return be(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return be(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function he(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var ve="Ctrl";var ye=a.forwardRef((function(e,t){var n=e.translations,o=void 0===n?{}:n,r=he(e,fe),i=o.buttonText,s=void 0===i?"Search":i,c=o.buttonAriaLabel,l=void 0===c?"Search":c,d=ge((0,a.useState)(null),2),u=d[0],p=d[1];return(0,a.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(ve))}),[]),a.createElement("button",me({type:"button",className:"DocSearch DocSearch-Button","aria-label":l},r,{ref:t}),a.createElement("span",{className:"DocSearch-Button-Container"},a.createElement(pe.W,null),a.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),a.createElement("span",{className:"DocSearch-Button-Keys"},null!==u&&a.createElement(a.Fragment,null,a.createElement("kbd",{className:"DocSearch-Button-Key"},u===ve?a.createElement(ue,null):u),a.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),xe=n(7092),_e=n(53584),ke=n(42473),we=n(13149);var Ee=n(31542);const Se={button:{buttonText:(0,g.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,g.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,g.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,g.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,g.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,g.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,g.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,g.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,g.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,g.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,g.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,g.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,g.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,g.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,g.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,g.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,g.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,g.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,g.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,g.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,g.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Ce=null;function Te(e){let{hit:t,children:n}=e;return a.createElement(V.default,{to:t.url},n)}function Pe(e){let{state:t,onClose:n}=e;const o=(0,_e.M)();return a.createElement(V.default,{to:o(t.query),onClick:n},a.createElement(g.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Ae(e){let{contextualSearch:t,externalUrlRegex:o,...r}=e;const{siteMetadata:i}=(0,ie.default)(),s=(0,ke.l)(),c=function(){const{locale:e,tags:t}=(0,we._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),l=r.searchParameters?.facetFilters??[],d=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,l):l,u={...r.searchParameters,facetFilters:d},p=(0,ce.k6)(),f=(0,a.useRef)(null),g=(0,a.useRef)(null),[b,h]=(0,a.useState)(!1),[v,y]=(0,a.useState)(void 0),x=(0,a.useCallback)((()=>Ce?Promise.resolve():Promise.all([n.e(88777).then(n.bind(n,88777)),Promise.all([n.e(40532),n.e(89127)]).then(n.bind(n,89127)),Promise.all([n.e(40532),n.e(34670)]).then(n.bind(n,34670))]).then((e=>{let[{DocSearchModal:t}]=e;Ce=t}))),[]),_=(0,a.useCallback)((()=>{x().then((()=>{f.current=document.createElement("div"),document.body.insertBefore(f.current,document.body.firstChild),h(!0)}))}),[x,h]),k=(0,a.useCallback)((()=>{h(!1),f.current?.remove()}),[h]),w=(0,a.useCallback)((e=>{x().then((()=>{h(!0),y(e.key)}))}),[x,h,y]),E=(0,a.useRef)({navigate(e){let{itemUrl:t}=e;(0,W.F)(o,t)?window.location.href=t:p.push(t)}}).current,S=(0,a.useRef)((e=>r.transformItems?r.transformItems(e):e.map((e=>({...e,url:s(e.url)}))))).current,C=(0,a.useMemo)((()=>e=>a.createElement(Pe,(0,m.Z)({},e,{onClose:k}))),[k]),T=(0,a.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,o=e.onClose,r=e.onInput,i=e.searchButtonRef;a.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?o():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&r&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&r(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,o,r,i])}({isOpen:b,onOpen:_,onClose:k,onInput:w,searchButtonRef:g}),a.createElement(a.Fragment,null,a.createElement(xe.Z,null,a.createElement("link",{rel:"preconnect",href:`https://${r.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})),a.createElement(ye,{onTouchStart:x,onFocus:x,onMouseOver:x,onClick:_,ref:g,translations:Se.button}),b&&Ce&&f.current&&(0,Ee.createPortal)(a.createElement(Ce,(0,m.Z)({onClose:k,initialScrollY:window.scrollY,initialQuery:v,navigator:E,transformItems:S,hitComponent:Te,transformSearchClient:T},r.searchPagePath&&{resultsFooterComponent:C},r,{searchParameters:u,placeholder:Se.placeholder,translations:Se.modal})),f.current))}function Ne(){const{siteConfig:e}=(0,ie.default)();return a.createElement(Ae,e.themeConfig.algolia)}const Oe="searchBox_WqAV";function je(e){let{children:t,className:n}=e;return a.createElement("div",{className:(0,o.Z)(n,Oe)},t)}var Le=n(62935),Me=n(45161);var Ie=n(24453);const Re=e=>e.docs.find((t=>t.id===e.mainDocId));const De={default:X,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...r}=e;const{i18n:{currentLocale:i,locales:s,localeConfigs:c}}=(0,ie.default)(),l=(0,se.l)(),{search:d,hash:u}=(0,ce.TH)(),p=[...n,...s.map((e=>{const n=`${`pathname://${l.createUrl({locale:e,fullyQualified:!1})}`}${d}${u}`;return{label:c[e].label,lang:c[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],f=t?(0,g.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):c[i].label;return a.createElement(re,(0,m.Z)({},r,{mobile:t,label:a.createElement(a.Fragment,null,a.createElement(le,{className:de}),f),items:p}))},search:function(e){let{mobile:t,className:n}=e;return t?null:a.createElement(je,{className:n},a.createElement(Ne,null))},dropdown:re,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return a.createElement(s,{className:(0,o.Z)({navbar__item:!r&&!i,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...r}=e;const{activeDoc:i}=(0,Le.useActiveDocContext)(o),s=(0,Me.vY)(t,o);return null===s?null:a.createElement(X,(0,m.Z)({exact:!0},r,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...r}=e;const{activeDoc:i}=(0,Le.useActiveDocContext)(o),s=(0,Me.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return a.createElement(X,(0,m.Z)({exact:!0},r,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...r}=e;const i=(0,Me.lO)(o)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return a.createElement(X,(0,m.Z)({},r,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:r,dropdownItemsAfter:i,...s}=e;const{search:c,hash:l}=(0,ce.TH)(),d=(0,Le.useActiveDocContext)(n),u=(0,Le.useVersions)(n),{savePreferredVersionName:p}=(0,Ie.J)(n),f=[...r,...u.map((e=>{const t=d.alternateDocVersions[e.name]??Re(e);return{label:e.label,to:`${t.path}${c}${l}`,isActive:()=>e===d.activeVersion,onClick:()=>p(e.name)}})),...i],b=(0,Me.lO)(n)[0],h=t&&f.length>1?(0,g.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&f.length>1?void 0:Re(b).path;return f.length<=1?a.createElement(X,(0,m.Z)({},s,{mobile:t,label:h,to:v,isActive:o?()=>!1:void 0})):a.createElement(re,(0,m.Z)({},s,{mobile:t,label:h,to:v,items:f,isActive:o?()=>!1:void 0}))}};function ze(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),r=De[o];if(!r)throw new Error(`No NavbarItem component found for type "${t}".`);return a.createElement(r,n)}function Fe(){const e=(0,C.e)(),t=(0,p.L)().navbar.items;return a.createElement("ul",{className:"menu__list"},t.map(((t,n)=>a.createElement(ze,(0,m.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Be(e){return a.createElement("button",(0,m.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),a.createElement(g.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function $e(){const e=0===(0,p.L)().navbar.items.length,t=(0,A.Y)();return a.createElement(a.Fragment,null,!e&&a.createElement(Be,{onClick:()=>t.hide()}),t.content)}function Ue(){const e=(0,C.e)();return(0,P.N)(e.shown),e.shouldRender?a.createElement(N,{header:a.createElement(H,null),primaryMenu:a.createElement(Fe,null),secondaryMenu:a.createElement($e,null)}):null}const He="navbarHideable_hhpl",Ve="navbarHidden_nmcs";function Ze(e){return a.createElement("div",(0,m.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function qe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:r}}=(0,p.L)(),i=(0,C.e)(),{navbarRef:s,isNavbarVisible:c}=(0,T.c)(n);return a.createElement("nav",{ref:s,"aria-label":(0,g.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[He,!c&&Ve],{"navbar--dark":"dark"===r,"navbar--primary":"primary"===r,"navbar-sidebar--show":i.shown})},t,a.createElement(Ze,{onClick:i.toggle}),a.createElement(Ue,null))}var We=n(19441),Ge=n(63211);function Ye(e){let{width:t=30,height:n=30,className:o,...r}=e;return a.createElement("svg",(0,m.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},r),a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ke(){const{toggle:e,shown:t}=(0,C.e)();return a.createElement("button",{onClick:e,"aria-label":(0,g.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},a.createElement(Ye,null))}const Qe="colorModeToggle_Hewu";function Xe(e){let{items:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(We.QW,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},a.createElement(ze,e)))))}function Je(e){let{left:t,right:n}=e;return a.createElement("div",{className:"navbar__inner"},a.createElement("div",{className:"navbar__items"},t),a.createElement("div",{className:"navbar__items navbar__items--right"},n))}function et(){const e=(0,C.e)(),t=(0,p.L)().navbar.items,[n,o]=(0,Ge.A)(t),r=t.find((e=>"search"===e.type));return a.createElement(Je,{left:a.createElement(a.Fragment,null,!e.disabled&&a.createElement(Ke,null),a.createElement($,null),a.createElement(Xe,{items:n})),right:a.createElement(a.Fragment,null,a.createElement(Xe,{items:o}),a.createElement(F,{className:Qe}),!r&&a.createElement(je,null,a.createElement(Ne,null)))})}function tt(){return a.createElement(qe,null,a.createElement(et,null))}var nt=n(33922),at=n(9187),ot=n(90728);function rt(e){let{item:t}=e;const{to:n,href:o,label:r,prependBaseUrlToHref:i,...s}=t,c=(0,Z.Z)(n),l=(0,Z.Z)(o,{forcePrependBaseUrl:!0});return a.createElement(ot.Z,(0,m.Z)({},o?{href:i?l:o}:{to:c},s),r)}function it(e){let{column:t}=e;return a.createElement("div",null,a.createElement(at.Z,{level:6,transform:"uppercase"},t.title),a.createElement("ul",{role:"list",className:"m-0 mt-2 p-0 space-y-1 list-none"},t.items.map((e=>a.createElement("li",{key:e.href??e.to},a.createElement(rt,{item:e}))))))}function st(e){let{columns:t}=e;return a.createElement(a.Fragment,null,t.map(((e,t)=>a.createElement(it,{key:t,column:e}))))}function ct(e){let{item:t}=e;const{to:n,href:o,label:r,prependBaseUrlToHref:i,...s}=t,c=(0,Z.Z)(n),l=(0,Z.Z)(o,{forcePrependBaseUrl:!0});return a.createElement(V.default,(0,m.Z)({className:"footer__link-item"},o?{href:i?l:o}:{to:c},s),r,o&&!(0,q.Z)(o)&&a.createElement(G.Z,null))}function lt(){return a.createElement("span",{className:"footer__link-separator"},"\xb7")}function dt(e){let{item:t}=e;return t.html?a.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):a.createElement(ct,{item:t})}function ut(e){let{links:t}=e;return a.createElement("div",{className:"footer__links text--center"},a.createElement("div",{className:"footer__links"},t.map(((e,n)=>a.createElement(a.Fragment,{key:n},a.createElement(dt,{item:e}),t.length!==n+1&&a.createElement(lt,null))))))}function pt(e){let{links:t}=e;return(0,nt.a)(t)?a.createElement(st,{columns:t}):a.createElement(ut,{links:t})}var ft=n(14034);const mt="footerLogoLink_tutC";function gt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Z.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return a.createElement(ft.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function bt(e){let{logo:t}=e;return t.href?a.createElement(V.default,{href:t.href,className:mt,target:t.target},a.createElement(gt,{logo:t})):a.createElement(gt,{logo:t})}function ht(e){let{copyright:t}=e;return a.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}var vt=n(9928),yt=n(31792),xt=n(30658),_t=n(83469),kt=n(50615),wt=n(76911);function Et(e){return a.createElement(wt.Z,(0,m.Z)({},e,{label:"Next",id:"contact-next",className:"w-1/4"}))}function St(){const[e,t]=(0,a.useState)(1),[n,o]=(0,a.useState)(""),[r,i]=(0,a.useState)(""),[s,c]=(0,a.useState)(""),[l,d]=(0,a.useState)(!1),[u,p]=(0,a.useState)(!1),f=(0,a.useCallback)((()=>{t(1),o(""),i(""),c(""),d(!1),p(!1)}),[]),m=(0,a.useCallback)((()=>{t((e=>e+1))}),[]),g=(0,a.useCallback)((e=>{o(e.target.value)}),[]),b=(0,a.useCallback)((e=>{i(e.target.value)}),[]),h=(0,a.useCallback)((e=>{c(e.target.value)}),[]),v=(0,a.useCallback)((()=>{d(!0),fetch("https://formspree.io/f/xnqrnvgw",{body:JSON.stringify({email:r,message:s,subject:n}),headers:{Accept:"application/json"},method:"post"}).then((e=>{p(!e.ok)})).catch((()=>{p(!0)})).finally((()=>{d(!1),m()}))}),[r,s,n,m]),y=!!r.match(/^.+@.+$/),x=s.length>10;return a.createElement(a.Fragment,null,n?a.createElement(xt.ZP,null,a.createElement(ot.Z,{className:"float-right text-lg px-1",onClick:f},a.createElement(yt.Z,{icon:_t.g82})),"Contacting about ",a.createElement("b",null,n)):a.createElement(xt.ZP,{variant:"muted"},"Want to learn more about moonrepo? Have questions?"),a.createElement("div",{className:"mt-2"},1===e&&a.createElement("div",{className:"flex justify-between gap-x-1"},a.createElement("div",{className:"w-3/4"},a.createElement("label",{htmlFor:"subject",className:"sr-only"},"Subject"),a.createElement("select",{id:"subject",name:"subject",required:!0,className:"outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans",onChange:g,value:n},a.createElement("option",{value:""}),a.createElement("option",{value:"Consultation"},"Consultation"),a.createElement("option",{value:"Partnership"},"Partnership"),a.createElement("option",{value:"Affiliation"},"Affiliation"))),a.createElement(Et,{disabled:!n,onClick:m})),2===e&&a.createElement("div",{className:"flex justify-between gap-x-1"},a.createElement("div",{className:"w-3/4"},a.createElement("label",{htmlFor:"email",className:"sr-only"},"Email address"),a.createElement("input",{type:"email",name:"email",id:"email",autoComplete:"email",required:!0,className:"appearance-none outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans",placeholder:"Email address",onChange:b,value:r})),a.createElement(Et,{disabled:!y,onClick:m})),3===e&&a.createElement("div",null,a.createElement("textarea",{id:"message",name:"message",required:!0,className:"appearance-none outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 font-sans",placeholder:"Message...",onChange:h}),a.createElement("div",{className:"flex justify-end"},a.createElement(Et,{disabled:!x||l,label:"Send",onClick:v}))),4===e&&a.createElement("div",null,a.createElement(xt.ZP,null,u?"Failed to send message. Please try again.":"Thanks for contacting us! We'll get back to you as soon as possible."))),a.createElement("div",{className:"mt-4 flex justify-end items-start gap-1"},a.createElement("div",null,a.createElement(xt.ZP,{variant:"muted",size:"sm"},"Backed by")),a.createElement("div",null,a.createElement(kt.Z,{height:22}))))}function Ct(e){let{links:t,copyright:n}=e;return a.createElement("footer",{className:"bg-gray-100 dark:bg-slate-600","aria-labelledby":"footer-heading"},a.createElement("h2",{id:"footer-heading",className:"sr-only"},"Footer"),a.createElement("div",{className:"max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"},a.createElement("div",{className:"lg:grid lg:grid-cols-5 lg:gap-3"},a.createElement("div",{className:"grid grid-cols-3 gap-3 lg:col-span-3"},t),a.createElement("div",{className:"mt-4 lg:mt-0 col-span-2"},a.createElement(at.Z,{level:6,transform:"uppercase"},"Contact us"),a.createElement(St,null))),a.createElement("div",{className:"mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"},a.createElement(xt.ZP,{className:"m-0",variant:"muted",size:"sm",as:"div"},n),a.createElement("div",{className:"flex space-x-2"},a.createElement(ot.Z,{href:"https://github.com/moonrepo"},a.createElement("span",{className:"sr-only"},"GitHub"),a.createElement(yt.Z,{icon:vt.zhw})),a.createElement(ot.Z,{href:"https://discord.gg/qCh9MEynv2"},a.createElement("span",{className:"sr-only"},"Discord"),a.createElement(yt.Z,{icon:vt.omb})),a.createElement(ot.Z,{href:"https://twitter.com/tothemoonrepo"},a.createElement("span",{className:"sr-only"},"Twitter"),a.createElement(yt.Z,{icon:vt.mdU}))))))}function Tt(){const{footer:e}=(0,p.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:r}=e;return a.createElement(Ct,{style:r,links:n&&n.length>0&&a.createElement(pt,{links:n}),logo:o&&a.createElement(bt,{logo:o}),copyright:t&&a.createElement(ht,{copyright:t})})}const Pt=a.memo(Tt);var At=n(41763),Nt=n(83457);const Ot=(0,At.Qc)([O.S,f.pl,Nt.OC,Ie.L5,i.VC,Ge.V]);function jt(e){let{children:t}=e;return a.createElement(Ot,null,t)}function Lt(e){let{error:t,tryAgain:n}=e;return a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(g.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),a.createElement("div",{className:"margin-vert--lg"},a.createElement(We.Cw,{onClick:n,className:"button button--primary shadow--lw"})),a.createElement("hr",null),a.createElement("div",{className:"margin-vert--md"},a.createElement(We.aG,{error:t})))))}const Mt="mainWrapper_MB5r";function It(e){const{children:t,noFooter:n,wrapperClassName:d,title:p,description:f}=e;return(0,l.t)(),a.createElement(jt,null,a.createElement(i.d,{title:p,description:f}),a.createElement(u,null),a.createElement(S,null),a.createElement(tt,null),a.createElement("div",{id:s.u,className:(0,o.Z)(c.k.wrapper.main,Mt,d)},a.createElement(r.Z,{fallback:e=>a.createElement(Lt,e)},t)),!n&&a.createElement(Pt,null))}},10898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var a=n(25773),o=n(27378),r=n(81884),i=n(98948),s=n(50353),c=n(20624),l=n(14034);function d(e){let{logo:t,alt:n,imageClassName:a}=e;const r={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=o.createElement(l.Z,{className:t.className,sources:r,height:t.height,width:t.width,alt:n,style:t.style});return a?o.createElement("div",{className:a},s):s}function u(e){const{siteConfig:{title:t}}=(0,s.default)(),{navbar:{title:n,logo:l}}=(0,c.L)(),{imageClassName:u,titleClassName:p,...f}=e,m=(0,i.Z)(l?.href||"/"),g=n?"":t,b=l?.alt??g;return o.createElement(r.default,(0,a.Z)({to:m},f,l?.target&&{target:l.target}),l&&o.createElement(d,{logo:l,alt:b,imageClassName:u}),null!=n&&o.createElement("b",{className:p},n))}},60505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=n(27378),o=n(7092);function r(e){let{locale:t,version:n,tag:r}=e;const i=t;return a.createElement(o.Z,null,t&&a.createElement("meta",{name:"docusaurus_locale",content:t}),n&&a.createElement("meta",{name:"docusaurus_version",content:n}),r&&a.createElement("meta",{name:"docusaurus_tag",content:r}),i&&a.createElement("meta",{name:"docsearch:language",content:i}),n&&a.createElement("meta",{name:"docsearch:version",content:n}),r&&a.createElement("meta",{name:"docsearch:docusaurus_tag",content:r}))}},14034:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var a=n(25773),o=n(27378),r=n(37140),i=n(76457),s=n(55421);const c={themedImage:"themedImage_BQGR","themedImage--light":"themedImage--light_HAxW","themedImage--dark":"themedImage--dark_bGx0"};function l(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:l,className:d,alt:u,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,a.Z)({key:e,src:l[e],alt:u,className:(0,r.Z)(c.themedImage,c[`themedImage--${e}`],d)},p)))))}},80376:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var a=n(25773),o=n(27378),r=n(161),i=n(56903);function s(e){let{initialState:t}=e;const[n,a]=(0,o.useState)(t??!1),r=(0,o.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:r}}const c={display:"none",overflow:"hidden",height:"0px"},l={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:l;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function u(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const r=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??"ease-in-out"}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!r.current)return d(e,n),void(r.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function p(e){if(!r.Z.canUseDOM)return e?c:l}function f(e){let{as:t="div",collapsed:n,children:a,animation:r,onCollapseTransitionEnd:i,className:s,disableSSRStyle:c}=e;const l=(0,o.useRef)(null);return u({collapsibleRef:l,collapsed:n,animation:r}),o.createElement(t,{ref:l,style:c?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(l.current,n),i?.(n))},className:s},a)}function m(e){let{collapsed:t,...n}=e;const[r,i]=(0,o.useState)(!t),[s,c]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{r&&c(t)}),[r,t]),r?o.createElement(f,(0,a.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const a=t?m:f;return o.createElement(a,n)}},10:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var a=n(27378),o=n(76457),r=n(71819),i=n(41763),s=n(20624);const c=(0,r.WA)("docusaurus.announcement.dismiss"),l=(0,r.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),u=e=>c.set(String(e)),p=a.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,r]=(0,a.useState)((()=>!!t&&d()));(0,a.useEffect)((()=>{r(d())}),[]);const i=(0,a.useCallback)((()=>{u(!0),r(!0)}),[]);return(0,a.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=l.get();"annoucement-bar"===n&&(n="announcement-bar");const a=t!==n;l.set(t),a&&u(!1),!a&&d()||r(!1)}),[e]),(0,a.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return a.createElement(p.Provider,{value:n},t)}function m(){const e=(0,a.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},55421:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>g});var a=n(27378),o=n(161),r=n(41763),i=n(71819),s=n(20624);const c=a.createContext(void 0),l="theme",d=(0,i.WA)(l),u="light",p="dark",f=e=>e===p?p:u;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[r,i]=(0,a.useState)((e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e))(e));(0,a.useEffect)((()=>{t&&d.del()}),[t]);const c=(0,a.useCallback)((function(t,a){void 0===a&&(a={});const{persist:o=!0}=a;t?(i(t),o&&(e=>{d.set(f(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p:u:e),d.del())}),[n,e]);(0,a.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(r))}),[r]),(0,a.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==l)return;const t=d.get();null!==t&&c(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,c]);const m=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),a=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:c(null)};return e.addListener(a),()=>e.removeListener(a)}),[c,t,n]),(0,a.useMemo)((()=>({colorMode:r,setColorMode:c,get isDarkTheme(){return r===p},setLightTheme(){c(u)},setDarkTheme(){c(p)}})),[r,c])}function g(e){let{children:t}=e;const n=m();return a.createElement(c.Provider,{value:n},t)}function b(){const e=(0,a.useContext)(c);if(null==e)throw new r.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},24453:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>h,Oh:()=>x});var a=n(27378),o=n(62935),r=n(45688),i=n(20624),s=n(45161),c=n(41763),l=n(71819);const d=e=>`docs-preferred-version-${e}`,u=(e,t,n)=>{(0,l.WA)(d(e),{persistence:t}).set(n)},p=(e,t)=>(0,l.WA)(d(e),{persistence:t}).get(),f=(e,t)=>{(0,l.WA)(d(e),{persistence:t}).del()};const m=a.createContext(null);function g(){const e=(0,o.useAllDocsData)(),t=(0,i.L)().docs.versionPersistence,n=(0,a.useMemo)((()=>Object.keys(e)),[e]),[r,s]=(0,a.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,a.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:a}=e;function o(e){const t=p(e,n);return a[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[r,(0,a.useMemo)((()=>({savePreferredVersion:function(e,n){u(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function b(e){let{children:t}=e;const n=g();return a.createElement(m.Provider,{value:n},t)}function h(e){let{children:t}=e;return s.cE?a.createElement(b,null,t):a.createElement(a.Fragment,null,t)}function v(){const e=(0,a.useContext)(m);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=r.m);const t=(0,o.useDocsData)(e),[n,i]=v(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,a.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function x(){const e=(0,o.useAllDocsData)(),[t]=v();function n(n){const a=e[n],{preferredVersionName:o}=t[n];return a.versions.find((e=>e.name===o))??null}const a=Object.keys(e);return Object.fromEntries(a.map((e=>[e,n(e)])))}},52095:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>s});var a=n(27378),o=n(41763);const r=Symbol("EmptyContext"),i=a.createContext(r);function s(e){let{children:t,name:n,items:o}=e;const r=(0,a.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return a.createElement(i.Provider,{value:r},t)}function c(){const e=(0,a.useContext)(i);if(e===r)throw new o.i6("DocsSidebarProvider");return e}},25611:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var a=n(27378),o=n(41763);const r=a.createContext(null);function i(e){let{children:t,version:n}=e;return a.createElement(r.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new o.i6("DocsVersionProvider");return e}},85536:(e,t,n)=>{"use strict";n.d(t,{M:()=>u,e:()=>p});var a=n(27378),o=n(63471),r=n(58357),i=n(30654),s=n(20624),c=n(41763);const l=a.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,r.i)(),n=!e&&"mobile"===t,[c,l]=(0,a.useState)(!1);(0,i.Rb)((()=>{if(c)return l(!1),!1}));const d=(0,a.useCallback)((()=>{l((e=>!e))}),[]);return(0,a.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,a.useMemo)((()=>({disabled:e,shouldRender:n,toggle:d,shown:c})),[e,n,d,c])}function u(e){let{children:t}=e;const n=d();return a.createElement(l.Provider,{value:n},t)}function p(){const e=a.useContext(l);if(void 0===e)throw new c.i6("NavbarMobileSidebarProvider");return e}},63471:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>c,n2:()=>i});var a=n(27378),o=n(41763);const r=a.createContext(null);function i(e){let{children:t}=e;const n=(0,a.useState)({component:null,props:null});return a.createElement(r.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(r);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const i=(0,a.useContext)(r);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,c=(0,o.Ql)(n);return(0,a.useEffect)((()=>{s({component:t,props:c})}),[s,t,c]),(0,a.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},15530:(e,t,n)=>{"use strict";n.d(t,{P:()=>c,Y:()=>d});var a=n(27378),o=n(41763),r=n(85536),i=n(63471);const s=a.createContext(null);function c(e){let{children:t}=e;const n=function(){const e=(0,r.e)(),t=(0,i.HY)(),[n,s]=(0,a.useState)(!1),c=null!==t.component,l=(0,o.D9)(c);return(0,a.useEffect)((()=>{c&&!l&&s(!0)}),[c,l]),(0,a.useEffect)((()=>{c?e.shown||s(!0):s(!1)}),[e.shown,c]),(0,a.useMemo)((()=>[n,s]),[n])}();return a.createElement(s.Provider,{value:n},t)}function l(e){if(e.component){const t=e.component;return a.createElement(t,e.props)}}function d(){const e=(0,a.useContext)(s);if(!e)throw new o.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,r=(0,a.useCallback)((()=>n(!1)),[n]),c=(0,i.HY)();return(0,a.useMemo)((()=>({shown:t,hide:r,content:l(c)})),[r,c,t])}},82561:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var a=n(27378),o=n(24993),r=n(83457);function i(e){const[t,n]=(0,a.useState)(e),i=(0,a.useRef)(!1),s=(0,a.useRef)(0),c=(0,a.useCallback)((e=>{null!==e&&(s.current=e.getBoundingClientRect().height)}),[]);return(0,r.RF)(((t,a)=>{let{scrollY:o}=t;if(!e)return;if(o<s.current)return void n(!0);if(i.current)return void(i.current=!1);const r=a?.scrollY,c=document.documentElement.scrollHeight-s.current,l=window.innerHeight;r&&o>=r?n(!1):o+l<c&&n(!0)})),(0,o.S)((t=>{if(!e)return;const a=t.location.hash;if(a?document.getElementById(a.substring(1)):void 0)return i.current=!0,void n(!1);n(!0)})),{navbarRef:c,isNavbarVisible:t}}},70174:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>r});var a=n(27378);const o="navigation-with-keyboard";function r(){(0,a.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},37930:(e,t,n)=>{"use strict";n.d(t,{N:()=>o});var a=n(27378);function o(e){void 0===e&&(e=!0),(0,a.useEffect)((()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[e])}},53584:(e,t,n)=>{"use strict";n.d(t,{K:()=>i,M:()=>s});var a=n(27378),o=n(50353),r=n(30654);function i(){return(0,r.Nc)("q")}function s(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,o.default)(),{algolia:{searchPagePath:n}}=t;return(0,a.useCallback)((t=>`${e}${n}?q=${encodeURIComponent(t)}`),[e,n])}},58357:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var a=n(27378),o=n(161);const r="desktop",i="mobile",s="ssr";function c(){return o.Z.canUseDOM?window.innerWidth>996?r:i:s}function l(){const[e,t]=(0,a.useState)((()=>c()));return(0,a.useEffect)((()=>{function e(){t(c())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},75484:(e,t,n)=>{"use strict";n.d(t,{k:()=>a});const a={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},56903:(e,t,n)=>{"use strict";function a(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>a})},45161:(e,t,n)=>{"use strict";n.d(t,{MN:()=>S,Wl:()=>g,_F:()=>v,cE:()=>p,em:()=>m,hI:()=>E,jA:()=>b,lO:()=>_,oz:()=>k,s1:()=>x,vY:()=>w,xz:()=>f});var a=n(27378),o=n(35331),r=n(95473),i=n(62935),s=n(24453),c=n(25611),l=n(52095),d=n(70784),u=n(8862);const p=!!i.useAllDocsData;function f(e){const t=(0,c.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e,t){for(const n of e)if("category"===n.type){if(t(n))return n;const e=m(n.items,t);if(e)return e}}function g(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=g(t);if(e)return e}}}function b(){const{pathname:e}=(0,o.TH)(),t=(0,l.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,u.Mg)(e,t);function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||((e,t)=>e.some((e=>v(e,t))))(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:a=!1}=e;const o=[];return function e(t){for(const r of t)if("category"===r.type&&((0,u.Mg)(r.href,n)||e(r.items))||"link"===r.type&&(0,u.Mg)(r.href,n)){return a&&"category"!==r.type||o.unshift(r),!0}return!1}(t),o}function x(){const e=(0,l.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.useActivePlugin)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function _(e){const{activeVersion:t}=(0,i.useActiveDocContext)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.useLatestVersion)(e);return(0,a.useMemo)((()=>(0,d.j)([t,n,o].filter(Boolean))),[t,n,o])}function k(e,t){const n=_(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),a=t.find((t=>t[0]===e));if(!a)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return a[1]}),[e,n])}function w(e,t){const n=_(t);return(0,a.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),a=t.find((t=>t.id===e));if(!a){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,d.j)(t.map((e=>e.id))).join("\n- ")}`)}return a}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const a=(0,o.TH)(),i=t.routes,s=i.find((e=>(0,o.LX)(a.pathname,e)));if(!s)return null;const c=s.sidebar,l=c?n.docsSidebars[c]:void 0;return{docElement:(0,r.H)(i),sidebarName:c,sidebarItems:l}}function S(e){return e.filter((e=>"category"!==e.type||!!g(e)))}},19441:(e,t,n)=>{"use strict";n.d(t,{aG:()=>l,Cw:()=>c,QW:()=>d});var a=n(25773),o=n(27378),r=n(99213),i=n(51721);const s="errorBoundaryError_WE6Q";function c(e){return o.createElement("button",(0,a.Z)({type:"button"},e),o.createElement(r.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function l(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return o.createElement("p",{className:s},n)}class d extends o.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},33922:(e,t,n)=>{"use strict";function a(e){return"title"in e[0]}n.d(t,{a:()=>a})},99162:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var a=n(50353);function o(e){const{siteConfig:t}=(0,a.default)(),{title:n,titleDelimiter:o}=t;return e?.trim().length?`${e.trim()} ${o} ${n}`:n}},30654:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>d,Rb:()=>s,_X:()=>l,xL:()=>c});var a=n(27378),o=n(35331),r=n(70644),i=n(41763);function s(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,a.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function c(e){const t=(0,o.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return c((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function d(e){const t=l(e)??"",n=function(){const e=(0,o.k6)();return(0,a.useCallback)(((t,n,a)=>{const o=new URLSearchParams(e.location.search);n?o.set(t,n):o.delete(t),(a?.push?e.push:e.replace)({search:o.toString()})}),[e])}();return[t,(0,a.useCallback)(((t,a)=>{n(e,t,a)}),[n,e])]}},70784:(e,t,n)=>{"use strict";function a(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,a)=>e.findIndex((e=>t(e,n)))!==a))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>a})},1123:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>f});var a=n(27378),o=n(33441),r=n(7092),i=n(66881);function s(){const e=a.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=n(98948),l=n(99162);function d(e){let{title:t,description:n,keywords:o,image:i,children:s}=e;const d=(0,l.p)(t),{withBaseUrl:u}=(0,c.C)(),p=i?u(i,{absolute:!0}):void 0;return a.createElement(r.Z,null,t&&a.createElement("title",null,d),t&&a.createElement("meta",{property:"og:title",content:d}),n&&a.createElement("meta",{name:"description",content:n}),n&&a.createElement("meta",{property:"og:description",content:n}),o&&a.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&a.createElement("meta",{property:"og:image",content:p}),p&&a.createElement("meta",{name:"twitter:image",content:p}),s)}const u=a.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=a.useContext(u),s=(0,o.Z)(i,t);return a.createElement(u.Provider,{value:s},a.createElement(r.Z,null,a.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return a.createElement(p,{className:(0,o.Z)(r,i)},t)}},63211:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,V:()=>c});var a=n(27378),o=n(85536),r=n(63471),i=n(15530);function s(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}function c(e){let{children:t}=e;return a.createElement(r.n2,null,a.createElement(o.M,null,a.createElement(i.P,null,t)))}},41763:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,LI:()=>o,Qc:()=>l,Ql:()=>c,i6:()=>s,zX:()=>r});var a=n(27378);const o=n(161).Z.canUseDOM?a.useLayoutEffect:a.useEffect;function r(e){const t=(0,a.useRef)(e);return o((()=>{t.current=e}),[e]),(0,a.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,a.useRef)();return o((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,a.useMemo)((()=>e),t.flat())}function l(e){return t=>{let{children:n}=t;return a.createElement(a.Fragment,null,e.reduceRight(((e,t)=>a.createElement(t,null,e)),n))}}},61503:(e,t,n)=>{"use strict";function a(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>a})},8862:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var a=n(27378),o=n(76623),r=n(50353);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,r.default)().siteConfig;return(0,a.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function a(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(a)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},83457:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>u,o5:()=>p,sG:()=>l});var a=n(27378),o=n(161),r=n(76457),i=n(41763);const s=a.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,a.useRef)(!0);return(0,a.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return a.createElement(s.Provider,{value:n},t)}function l(){const e=(0,a.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function u(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=l(),o=(0,a.useRef)(d()),r=(0,i.zX)(e);(0,a.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();r(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[r,n,...t])}function p(){const e=l(),t=function(){const e=(0,a.useRef)({elem:null,top:0}),t=(0,a.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,a.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const a=t.getBoundingClientRect().top-n;return a&&window.scrollBy({left:0,top:a}),e.current={elem:null,top:0},{restored:0!==a}}),[]);return(0,a.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,a.useRef)(void 0),o=(0,a.useCallback)((a=>{t.save(a),e.disableScrollEvents(),n.current=()=>{const{restored:a}=t.restore();if(n.current=void 0,a){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,a.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function f(){const e=(0,a.useRef)(null),t=(0,r.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function a(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(a),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},13149:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>c,os:()=>s});var a=n(62935),o=n(50353),r=n(24453);const i="default";function s(e,t){return`docs-${e}-${t}`}function c(){const{i18n:e}=(0,o.default)(),t=(0,a.useAllDocsData)(),n=(0,a.useActivePluginAndVersion)(),c=(0,r.Oh)();const l=[i,...Object.keys(t).map((function(e){const a=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=c[e],r=t[e].versions.find((e=>e.isLast));return s(e,(a??o??r).name)}))];return{locale:e.currentLocale,tags:l}}},39360:(e,t,n)=>{"use strict";n.d(t,{l:()=>p,u:()=>c});var a=n(25773),o=n(27378),r=n(35331),i=n(99213),s=n(24993);const c="__docusaurus_skipToContent_fallback";function l(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function d(){const e=(0,o.useRef)(null),{action:t}=(0,r.k6)(),n=(0,o.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(c);t&&l(t)}),[]);return(0,s.S)((n=>{let{location:a}=n;e.current&&!a.hash&&"PUSH"===t&&l(e.current)})),{containerRef:e,onClick:n}}const u=(0,i.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function p(e){const t=e.children??u,{containerRef:n,onClick:r}=d();return o.createElement("div",{ref:n,role:"region","aria-label":u},o.createElement("a",(0,a.Z)({},e,{href:`#${c}`,onClick:r}),t))}},71819:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>u,WA:()=>d,_f:()=>p});var a=n(27378),o=n(70644);const r="localStorage";function i(e){let{key:t,oldValue:n,newValue:a,storage:o}=e;if(n===a)return;const r=document.createEvent("StorageEvent");r.initStorageEvent("storage",!1,!1,t,n,a,window.location.href,o),window.dispatchEvent(r)}function s(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,c||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),c=!0),null}var t}let c=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function d(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=s(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const a=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:a,newValue:t,storage:n})}catch(a){console.error(`Docusaurus storage error, can't set ${e}=${t}`,a)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const a=a=>{a.storageArea===n&&a.key===e&&t(a)};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)}catch(a){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,a),()=>{}}}}}function u(e,t){const n=(0,a.useRef)((()=>null===e?l:d(e,t))).current(),r=(0,a.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(r,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}function p(e){void 0===e&&(e=r);const t=s(e);if(!t)return[];const n=[];for(let a=0;a<t.length;a+=1){const e=t.key(a);null!==e&&n.push(e)}return n}},43714:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var a=n(50353),o=n(35331),r=n(51721);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,a.default)(),{pathname:c}=(0,o.TH)(),l=(0,r.applyTrailingSlash)(c,{trailingSlash:n,baseUrl:e}),d=s===i?e:e.replace(`/${s}/`,"/"),u=l.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===i?`${d}`:`${d}${e}/`}(n)}${u}`}}}},43511:(e,t,n)=>{"use strict";n.d(t,{b:()=>r});var a=n(35331),o=n(50353);function r(){const{siteConfig:{baseUrl:e}}=(0,o.default)(),{pathname:t}=(0,a.TH)();return t.replace(e,"/")}},24993:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var a=n(27378),o=n(35331),r=n(41763);function i(e){const t=(0,o.TH)(),n=(0,r.D9)(t),i=(0,r.zX)(e);(0,a.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},20624:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var a=n(50353);function o(){return(0,a.default)().siteConfig.themeConfig}},80632:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var a=n(50353);function o(){const{siteConfig:{themeConfig:e}}=(0,a.default)();return e}},42473:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var a=n(27378),o=n(61503),r=n(98948),i=n(80632);function s(){const{withBaseUrl:e}=(0,r.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,a.useCallback)((a=>{const r=new URL(a);if((0,o.F)(t,r.href))return a;const i=`${r.pathname+r.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},42520:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:a}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),r="/"===o||o===a?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,r)}},86102:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},51721:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(42520);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return a(o).default}});var r=n(86102);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return r.getErrorCausalChain}})},76623:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(27378),o=n(25773),r=n(51237),i=n.n(r),s=n(16887);const c={"0034bcd6":[()=>Promise.all([n.e(40532),n.e(30780),n.e(97424)]).then(n.bind(n,88297)),"@site/docs/guides/examples/sveltekit.mdx",88297],"00568285":[()=>n.e(84470).then(n.t.bind(n,24422,19)),"~docs/default/category-docs-docs-category-sync-750.json",24422],"016d6d21":[()=>n.e(82056).then(n.t.bind(n,93105,19)),"~blog/default/blog-tags-deno-02d-list.json",93105],"01a85c17":[()=>Promise.all([n.e(40532),n.e(64013)]).then(n.bind(n,79898)),"@theme/BlogTagsListPage",79898],"01b81367":[()=>n.e(601).then(n.t.bind(n,24469,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"02401b2b":[()=>Promise.all([n.e(40532),n.e(85027)]).then(n.bind(n,84851)),"@site/docs/guides/javascript/deno-handbook.mdx",84851],"03193cc0":[()=>Promise.all([n.e(40532),n.e(30780),n.e(43363)]).then(n.bind(n,21311)),"@site/docs/guides/examples/typescript.mdx",21311],"046e2194":[()=>Promise.all([n.e(40532),n.e(30780),n.e(48667)]).then(n.bind(n,96841)),"@site/docs/install.mdx",96841],"04d8c43e":[()=>n.e(86551).then(n.t.bind(n,48632,19)),"~blog/default/blog-tags-global-167-list.json",48632],"0627e785":[()=>n.e(74824).then(n.bind(n,33440)),"@site/docs/proto/config.mdx",33440],"062a1a43":[()=>n.e(54403).then(n.t.bind(n,88217,19)),"~docs/default/tag-docs-tags-git-hooks-0f1.json",88217],"0681d8e1":[()=>n.e(30601).then(n.t.bind(n,99663,19)),"~blog/default/blog-tags-version-acf.json",99663],"0684a904":[()=>n.e(50670).then(n.bind(n,11259)),"@site/blog/2023-05-23_proto-v0.9.mdx",11259],"068b8e98":[()=>n.e(35666).then(n.bind(n,83260)),"@site/docs/commands/ci.mdx",83260],"073e718f":[()=>n.e(42656).then(n.bind(n,29759)),"@site/docs/guides/root-project.mdx",29759],"088b3228":[()=>n.e(72882).then(n.t.bind(n,596,19)),"~blog/default/blog-tags-typescript-2e3-list.json",596],"09d7020f":[()=>n.e(30959).then(n.t.bind(n,1150,19)),"~docs/default/tag-docs-tags-code-40a.json",1150],"0ae21139":[()=>n.e(64788).then(n.t.bind(n,36585,19)),"~blog/default/blog-tags-projects-924-list.json",36585],"0b1dc2cd":[()=>n.e(25971).then(n.t.bind(n,51973,19)),"~docs/default/category-docs-docs-category-query-cf5.json",51973],"0b289f4d":[()=>Promise.all([n.e(40532),n.e(21575)]).then(n.bind(n,239)),"@site/blog/2022-10-21_v0.17.mdx",239],"0c7f16c1":[()=>n.e(36297).then(n.t.bind(n,43871,19)),"~docs/default/tag-docs-tags-mql-730.json",43871],"0cb5fac6":[()=>Promise.all([n.e(40532),n.e(30780),n.e(1719)]).then(n.bind(n,11911)),"@site/docs/guides/examples/storybook.mdx",11911],"0cd40d9b":[()=>Promise.all([n.e(40532),n.e(30780),n.e(1175)]).then(n.bind(n,53488)),"@site/docs/guides/examples/remix.mdx",53488],"0e22a4b2":[()=>n.e(11558).then(n.t.bind(n,60335,19)),"~blog/default/blog-tags-projects-924.json",60335],"0e736169":[()=>n.e(43972).then(n.bind(n,95650)),"@site/blog/2023-05-15_moon-v1.6.mdx?truncated=true",95650],"0f8a713b":[()=>n.e(6759).then(n.bind(n,98197)),"@site/docs/commands/generate.mdx",98197],"0ff9eadc":[()=>n.e(14640).then(n.t.bind(n,57376,19)),"~blog/default/blog-tags-checksum-9de-list.json",57376],"110403ef":[()=>n.e(73443).then(n.t.bind(n,85687,19)),"~blog/default/blog-tags-project-34b.json",85687],"11ce4159":[()=>n.e(1531).then(n.t.bind(n,75034,19)),"~blog/default/blog-page-5-c6b.json",75034],"1202c0b0":[()=>n.e(59673).then(n.t.bind(n,96822,19)),"~blog/default/blog-tags-hash-686-list.json",96822],"125698e9":[()=>n.e(7037).then(n.t.bind(n,4490,19)),"~blog/default/blog-tags-tokens-6f1-list.json",4490],"128a5f34":[()=>n.e(45244).then(n.t.bind(n,49877,19)),"~blog/default/blog-tags-cache-6ff.json",49877],"1365e0a6":[()=>n.e(29917).then(n.bind(n,38126)),"@site/blog/2023-05-08_moon-v1.5.mdx",38126],"140321b2":[()=>n.e(80175).then(n.t.bind(n,89006,19)),"~blog/default/blog-tags-detect-153-list.json",89006],"146ca1ad":[()=>n.e(52753).then(n.bind(n,89478)),"@site/docs/commands/query/tasks.mdx",89478],"14eb3368":[()=>Promise.all([n.e(40532),n.e(9817)]).then(n.bind(n,80777)),"@theme/DocCategoryGeneratedIndexPage",80777],"14f81d84":[()=>Promise.all([n.e(40532),n.e(42463)]).then(n.bind(n,81793)),"@site/blog/2023-01-30_v0.23.mdx?truncated=true",81793],"14f9b0f2":[()=>n.e(433).then(n.t.bind(n,5455,19)),"~blog/default/blog-tags-lang-462.json",5455],"151c652b":[()=>n.e(37394).then(n.t.bind(n,7356,19)),"~blog/default/blog-tags-globals-7ef-list.json",7356],"15a4ce61":[()=>n.e(92129).then(n.t.bind(n,86596,19)),"~blog/default/blog-tags-railway-ade-list.json",86596],"163fb342":[()=>n.e(36371).then(n.bind(n,80678)),"@site/docs/commands/upgrade.mdx",80678],"16ea2389":[()=>n.e(64414).then(n.t.bind(n,91511,19)),"~blog/default/blog-tags-source-541-list.json",91511],"170d6c86":[()=>n.e(42839).then(n.t.bind(n,56832,19)),"~blog/default/blog-tags-roadmap-d2e.json",56832],"1740b646":[()=>n.e(67448).then(n.t.bind(n,17832,19)),"~blog/default/blog-tags-logging-c85-list.json",17832],17896441:[()=>Promise.all([n.e(40532),n.e(30780),n.e(85730),n.e(27918)]).then(n.bind(n,74764)),"@theme/DocItem",74764],"17ae22f4":[()=>n.e(76352).then(n.bind(n,64851)),"@site/blog/2023-09-11_proto-v0.17.mdx",64851],"17cacc08":[()=>Promise.all([n.e(40532),n.e(88893)]).then(n.bind(n,28137)),"@site/docs/config/workspace.mdx",28137],"18dd62e9":[()=>n.e(26285).then(n.t.bind(n,33310,19)),"~blog/default/blog-tags-vscode-a6c-list.json",33310],"1910946c":[()=>n.e(44873).then(n.t.bind(n,87136,19)),"~blog/default/blog-tags-deno-02d.json",87136],"193b481a":[()=>Promise.all([n.e(21947),n.e(99662)]).then(n.bind(n,45655)),"@site/src/pages/moon.tsx",45655],"195293b6":[()=>Promise.all([n.e(40532),n.e(30780),n.e(72484)]).then(n.bind(n,78032)),"@site/docs/guides/examples/astro.mdx",78032],"19ca9089":[()=>n.e(6388).then(n.t.bind(n,72768,19)),"~blog/default/blog-tags-dependency-e04-list.json",72768],"1a2b669c":[()=>n.e(47999).then(n.t.bind(n,85824,19)),"~blog/default/blog-tags-proto-page-2-892-list.json",85824],"1a4e3797":[()=>Promise.all([n.e(40532),n.e(97920)]).then(n.bind(n,11895)),"@theme/SearchPage",11895],"1aa28b52":[()=>n.e(98450).then(n.bind(n,25702)),"@site/docs/commands/overview.mdx",25702],"1aebc10b":[()=>n.e(69959).then(n.bind(n,91981)),"@site/blog/2023-03-31_proto-v0.4.mdx",91981],"1b469a71":[()=>n.e(87451).then(n.t.bind(n,457,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/packages-current.json",457],"1badf320":[()=>n.e(4068).then(n.bind(n,57500)),"@site/blog/2023-04-06_proto-v0.5.mdx?truncated=true",57500],"1be78505":[()=>Promise.all([n.e(40532),n.e(29514)]).then(n.bind(n,72214)),"@theme/DocPage",72214],"1cb65c7d":[()=>Promise.all([n.e(40532),n.e(30780),n.e(21947),n.e(23168)]).then(n.bind(n,79090)),"@site/src/pages/proto.tsx",79090],"1cbc9cf3":[()=>n.e(29219).then(n.t.bind(n,4127,19)),"~blog/default/blog-tags-http-5fb.json",4127],"1d14c2f4":[()=>n.e(93811).then(n.t.bind(n,34198,19)),"~blog/default/blog-tags-npm-f95.json",34198],"1df93b7f":[()=>Promise.all([n.e(21947),n.e(53237)]).then(n.bind(n,75278)),"@site/src/pages/index.tsx",75278],"1e070f27":[()=>n.e(2571).then(n.t.bind(n,91786,19)),"~blog/default/blog-tags-quality-be6-list.json",91786],"1e542d68":[()=>n.e(7278).then(n.t.bind(n,45313,19)),"~blog/default/blog-tags-log-760-list.json",45313],"1e76467f":[()=>n.e(76939).then(n.bind(n,951)),"@site/docs/proto/commands/list-global.mdx",951],"1e90ea6d":[()=>n.e(38428).then(n.t.bind(n,1394,19)),"~blog/default/blog-tags-vcs-ff1-list.json",1394],"202af6b6":[()=>n.e(2801).then(n.t.bind(n,89338,19)),"~blog/default/blog-tags-hash-686.json",89338],"2048b789":[()=>n.e(36861).then(n.bind(n,62031)),"@site/blog/2023-03-15_proto-v0.3.mdx?truncated=true",62031],"204dd830":[()=>Promise.all([n.e(40532),n.e(12391)]).then(n.bind(n,53293)),"@site/blog/2023-02-27_v0.25.mdx?truncated=true",53293],"2172420b":[()=>n.e(62441).then(n.t.bind(n,16728,19)),"~blog/default/blog-tags-generator-109-list.json",16728],"22e78681":[()=>n.e(74825).then(n.bind(n,46071)),"@site/blog/2023-01-16_v0.22.mdx",46071],"22eddac1":[()=>n.e(85950).then(n.bind(n,3697)),"@site/blog/2023-04-21_proto-v0.7.mdx",3697],"232c92ba":[()=>n.e(16974).then(n.t.bind(n,12725,19)),"~blog/default/blog-tags-python-667.json",12725],"23ef67df":[()=>n.e(84247).then(n.bind(n,97281)),"@site/blog/2023-09-18_proto-v0.18.mdx?truncated=true",97281],"24556f49":[()=>n.e(10744).then(n.bind(n,21721)),"@site/docs/concepts/file-pattern.mdx",21721],"245d4974":[()=>n.e(53733).then(n.bind(n,39016)),"@site/blog/2023-03-27_moon-v1.0.mdx",39016],"2497986c":[()=>n.e(48114).then(n.t.bind(n,80674,19)),"~blog/default/blog-tags-plugin-95c-list.json",80674],"24a07a83":[()=>n.e(24871).then(n.t.bind(n,7222,19)),"~docs/default/tag-docs-tags-generator-e43.json",7222],"24adbf31":[()=>n.e(93160).then(n.t.bind(n,57059,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/options.json",57059],"250d5d50":[()=>n.e(68007).then(n.t.bind(n,69537,19)),"~blog/default/blog-tags-tier-6c7-list.json",69537],"2573a9a7":[()=>n.e(78195).then(n.t.bind(n,78526,19)),"~blog/default/blog-tags-registry-d31-list.json",78526],26419218:[()=>n.e(62865).then(n.t.bind(n,52770,19)),"~blog/default/blog-tags-platform-9d7-list.json",52770],"271a7b09":[()=>n.e(30808).then(n.t.bind(n,91428,19)),"~blog/default/blog-tags-wasm-a9b-list.json",91428],"2804bc6d":[()=>n.e(38670).then(n.bind(n,11430)),"@site/blog/2023-04-24_moon-v1.3.mdx?truncated=true",11430],"28508d4c":[()=>n.e(91816).then(n.bind(n,27833)),"@site/blog/2023-04-21_proto-v0.7.mdx?truncated=true",27833],"2994c7d6":[()=>Promise.all([n.e(40532),n.e(83088)]).then(n.bind(n,72183)),"@site/blog/2023-01-30_v0.23.mdx",72183],"2adc0ba4":[()=>n.e(70731).then(n.t.bind(n,71365,19)),"~blog/default/blog-tags-rust-0c9-list.json",71365],"2b3490d9":[()=>n.e(39200).then(n.t.bind(n,16019,19)),"~docs/default/tag-docs-tags-query-90d.json",16019],"2bd8a6cf":[()=>n.e(67143).then(n.t.bind(n,57514,19)),"~blog/default/blog-tags-vcs-ff1.json",57514],"2c114e85":[()=>n.e(88663).then(n.bind(n,30560)),"@site/docs/commands/project.mdx",30560],"2cd5cbb6":[()=>n.e(2074).then(n.bind(n,24674)),"@site/blog/2022-10-06_v0.16.mdx?truncated=true",24674],"2d15743f":[()=>n.e(37941).then(n.bind(n,31462)),"@site/docs/guides/offline-mode.mdx",31462],"2d92dfb9":[()=>n.e(57690).then(n.t.bind(n,99010,19)),"~blog/default/blog-tags-rust-0c9.json",99010],"2df21221":[()=>n.e(51909).then(n.t.bind(n,43765,19)),"~blog/default/blog-tags-runner-f5a-list.json",43765],"2dffafe2":[()=>Promise.all([n.e(40532),n.e(29631)]).then(n.bind(n,47295)),"@site/docs/guides/javascript/node-handbook.mdx",47295],"2e1ef406":[()=>n.e(11665).then(n.bind(n,65614)),"@site/docs/proto/commands/remove-plugin.mdx",65614],"2e4722bd":[()=>n.e(75847).then(n.bind(n,1480)),"@site/blog/2023-04-17_moon-v1.2.mdx",1480],"2e94733f":[()=>n.e(50167).then(n.t.bind(n,73955,19)),"~blog/default/blog-tags-bin-efd-list.json",73955],"2eaf3a2f":[()=>n.e(5758).then(n.bind(n,23426)),"@site/blog/2023-06-25_proto-v0.11.mdx",23426],"2ed8359a":[()=>n.e(42121).then(n.bind(n,38237)),"@site/docs/concepts/toolchain.mdx",38237],"2fafdb99":[()=>n.e(30464).then(n.bind(n,52226)),"@site/blog/2023-07-21_proto-v0.13.mdx",52226],"303db6c1":[()=>Promise.all([n.e(40532),n.e(30780),n.e(66065)]).then(n.bind(n,75453)),"@site/docs/guides/examples/packemon.mdx",75453],"318f6953":[()=>n.e(13774).then(n.bind(n,57645)),"@site/docs/commands/setup.mdx",57645],"31fff4a5":[()=>n.e(44817).then(n.t.bind(n,92052,19)),"~blog/default/blog-tags-action-340-list.json",92052],32632728:[()=>n.e(94672).then(n.t.bind(n,18507,19)),"~blog/default/blog-tags-globals-7ef.json",18507],"3353503a":[()=>n.e(30027).then(n.t.bind(n,63572,19)),"~blog/default/blog-tags-wasm-a9b.json",63572],"33d935e4":[()=>n.e(23523).then(n.t.bind(n,81471,19)),"~blog/default/blog-tags-roadmap-d2e-list.json",81471],"350ea002":[()=>n.e(77889).then(n.t.bind(n,40387,19)),"~docs/default/tag-docs-tags-codeowners-3c5.json",40387],"351d319b":[()=>n.e(95084).then(n.bind(n,36522)),"@site/docs/commands/action-graph.mdx",36522],"357f2143":[()=>n.e(95129).then(n.bind(n,50271)),"@site/docs/commands/sync/hooks.mdx",50271],36027025:[()=>n.e(28129).then(n.bind(n,98049)),"@site/docs/guides/debug-task.mdx",98049],"365a10b6":[()=>n.e(64067).then(n.t.bind(n,18476,19)),"~blog/default/blog-tags-cache-6ff-list.json",18476],"3691c6ec":[()=>n.e(60846).then(n.t.bind(n,42461,19)),"~blog/default/blog-tags-config-2d7-list.json",42461],"3720c009":[()=>Promise.all([n.e(40532),n.e(13751)]).then(n.bind(n,84889)),"@theme/DocTagsListPage",84889],"376f2f8c":[()=>n.e(28444).then(n.t.bind(n,81327,19)),"~blog/default/blog-tags-remote-cache-1d2.json",81327],"37e4cb73":[()=>n.e(94488).then(n.bind(n,96154)),"@site/blog/2023-09-29_proto-v0.19.mdx?truncated=true",96154],"39a2c297":[()=>n.e(27756).then(n.bind(n,53257)),"@site/blog/2023-07-07_proto-v0.12.mdx",53257],"39b245d7":[()=>n.e(21042).then(n.bind(n,7196)),"@site/docs/guides/vcs-hooks.mdx",7196],"3b568f5a":[()=>n.e(21756).then(n.t.bind(n,33759,19)),"~blog/default/blog-tags-pin-fa7-list.json",33759],"3c3b6fb9":[()=>n.e(86795).then(n.t.bind(n,20104,19)),"~blog/default/blog-tags-survey-f63-list.json",20104],"3d0b0327":[()=>n.e(44969).then(n.t.bind(n,89035,19)),"~blog/default/blog-tags-hasher-783.json",89035],"3d4b58f3":[()=>n.e(89094).then(n.t.bind(n,7579,19)),"~docs/default/tag-docs-tags-template-df7.json",7579],"3db5b877":[()=>n.e(10252).then(n.t.bind(n,19354,19)),"~blog/default/blog-tags-proto-page-3-5b6.json",19354],"3db947d3":[()=>n.e(47265).then(n.t.bind(n,2993,19)),"~blog/default/blog-tags-project-graph-b9c.json",2993],"3dc68565":[()=>n.e(7566).then(n.bind(n,2502)),"@site/docs/concepts/token.mdx",2502],"3df11149":[()=>n.e(69015).then(n.bind(n,35645)),"@site/docs/commands/migrate/from-turborepo.mdx",35645],"3e1aa1b6":[()=>n.e(26051).then(n.t.bind(n,46540,19)),"~blog/default/blog-tags-init-e2a-list.json",46540],"3e7d7789":[()=>Promise.all([n.e(40532),n.e(30780),n.e(85730),n.e(12700),n.e(97279),n.e(32392),n.e(22108)]).then(n.t.bind(n,32392,23)),"/home/runner/work/moon/moon/node_modules/docusaurus-plugin-typedoc-api/lib/components/ApiItem.js",32392],"3f2d0a0e":[()=>n.e(56336).then(n.bind(n,41510)),"@site/blog/2022-09-13_v0.14.mdx?truncated=true",41510],"3f5148d4":[()=>n.e(29754).then(n.bind(n,82718)),"@site/docs/concepts/task.mdx",82718],"3f885d22":[()=>n.e(51684).then(n.bind(n,24053)),"@site/blog/2023-03-15_proto-v0.3.mdx",24053],"3fc19409":[()=>n.e(20735).then(n.t.bind(n,54867,19)),"~blog/default/blog-tags-schema-251-list.json",54867],"405d593f":[()=>n.e(81812).then(n.bind(n,77565)),"@site/docs/cheat-sheet.mdx",77565],"409da100":[()=>n.e(1).then(n.t.bind(n,37656,19)),"~blog/default/blog-tags-outdated-17a-list.json",37656],"40c69ef1":[()=>n.e(43869).then(n.t.bind(n,97754,19)),"~blog/default/blog-tags-moonbase-527.json",97754],"413318e8":[()=>n.e(83508).then(n.bind(n,14821)),"@site/docs/proto/commands/clean.mdx",14821],"4178efb8":[()=>Promise.all([n.e(40532),n.e(30780),n.e(10537)]).then(n.bind(n,11690)),"@site/docs/proto/tools.mdx",11690],"423a0e62":[()=>n.e(36167).then(n.t.bind(n,94213,19)),"~blog/default/blog-tags-tokens-6f1.json",94213],"42611ca7":[()=>n.e(16144).then(n.bind(n,45964)),"@site/blog/2023-06-12_moon-v1.8.mdx?truncated=true",45964],"427e2c3d":[()=>n.e(16836).then(n.bind(n,13105)),"@site/blog/2023-07-31_moon-v1.11.mdx?truncated=true",13105],"43bdf210":[()=>n.e(65379).then(n.bind(n,85310)),"@site/blog/2023-01-04_2023-roadmap.mdx?truncated=true",85310],"43dc46d9":[()=>n.e(96370).then(n.t.bind(n,4799,19)),"~blog/default/blog-tags-qol-753.json",4799],"44183a86":[()=>n.e(28149).then(n.t.bind(n,69862,19)),"~blog/default/blog-tags-ci-5d6-list.json",69862],"44ac4dbb":[()=>n.e(77142).then(n.t.bind(n,90399,19)),"~blog/default/blog-page-6-772.json",90399],"450b14c3":[()=>n.e(94979).then(n.t.bind(n,22109,19)),"~blog/default/blog-tags-local-757-list.json",22109],"459b1c5c":[()=>n.e(21396).then(n.t.bind(n,55145,19)),"~blog/default/blog-tags-global-167.json",55145],46561613:[()=>n.e(22636).then(n.t.bind(n,64689,19)),"~blog/default/blog-tags-runner-f5a.json",64689],"4665933c":[()=>n.e(95924).then(n.bind(n,61664)),"@site/blog/2022-11-14_v0.19.mdx",61664],"479321cf":[()=>n.e(12454).then(n.t.bind(n,9807,19)),"~blog/default/blog-tags-git-b15-list.json",9807],"47b3b041":[()=>n.e(40824).then(n.t.bind(n,55691,19)),"~blog/default/blog-tags-shim-887-list.json",55691],"488a99ce":[()=>n.e(82258).then(n.bind(n,74889)),"@site/docs/guides/codegen.mdx",74889],"48b0f434":[()=>n.e(15867).then(n.t.bind(n,81755,19)),"~blog/default/blog-tags-github-f68-list.json",81755],"4931a616":[()=>Promise.all([n.e(40532),n.e(48529)]).then(n.bind(n,88497)),"@site/blog/2023-02-13_v0.24.mdx",88497],"49af4b98":[()=>n.e(67217).then(n.t.bind(n,44468,19)),"~blog/default/blog-tags-language-ef0.json",44468],"49b772d3":[()=>Promise.all([n.e(40532),n.e(66458)]).then(n.bind(n,55835)),"@site/docs/guides/rust/handbook.mdx",55835],"4a1ab9c8":[()=>n.e(77008).then(n.t.bind(n,59202,19)),"~docs/default/category-docs-docs-category-commands-733.json",59202],"4a3d03f6":[()=>n.e(83884).then(n.t.bind(n,65585,19)),"~docs/default/tag-docs-tags-owners-6d9.json",65585],"4aa262b7":[()=>n.e(96897).then(n.bind(n,93365)),"@site/blog/2023-05-30_moon-v1.7.mdx",93365],"4ab2bb95":[()=>n.e(54488).then(n.t.bind(n,27592,19)),"~blog/default/blog-tags-local-757.json",27592],"4b8535eb":[()=>n.e(20612).then(n.t.bind(n,1360,19)),"~blog/default/blog-tags-tier-6c7.json",1360],"4bddfbdb":[()=>n.e(15437).then(n.t.bind(n,26325,19)),"~blog/default/blog-tags-vscode-a6c.json",26325],"4c2d8fdb":[()=>n.e(81148).then(n.t.bind(n,81467,19)),"~blog/default/blog-tags-npm-f95-list.json",81467],"4c8cef38":[()=>n.e(11126).then(n.bind(n,11126)),"@site/blog/2022-09-01_v0.13.mdx?truncated=true",11126],"4d66ab66":[()=>n.e(92293).then(n.bind(n,88612)),"@site/docs/proto/commands/install-global.mdx",88612],"4d69ebec":[()=>n.e(46480).then(n.bind(n,41723)),"@site/blog/2023-10-09_moon-v1.15.mdx?truncated=true",41723],"4ddbfcdc":[()=>n.e(96758).then(n.bind(n,17078)),"@site/blog/2023-09-04_proto-v0.16.mdx",17078],"4e9707d9":[()=>n.e(8159).then(n.t.bind(n,24556,19)),"~docs/default/category-docs-guides-category-nodejs-examples-09d.json",24556],"4e986fc6":[()=>Promise.all([n.e(40532),n.e(48233)]).then(n.bind(n,92969)),"@site/blog/2023-03-13_v0.26.mdx?truncated=true",92969],"4ec8a4a9":[()=>n.e(50818).then(n.bind(n,44501)),"@site/docs/config/project.mdx",44501],"4f0c5301":[()=>n.e(36361).then(n.t.bind(n,32535,19)),"~blog/default/blog-tags-code-452.json",32535],"4fa82ff8":[()=>Promise.all([n.e(59262),n.e(29769)]).then(n.bind(n,23706)),"@site/docs/how-it-works/languages.mdx",23706],"4fd1aaa1":[()=>n.e(56842).then(n.t.bind(n,29340,19)),"~blog/default/blog-tags-config-2d7.json",29340],"51985ffa":[()=>Promise.all([n.e(40532),n.e(12700),n.e(76353)]).then(n.t.bind(n,51739,23)),"/home/runner/work/moon/moon/node_modules/docusaurus-plugin-typedoc-api/lib/components/ApiIndex.js",51739],"51ada3e3":[()=>n.e(51294).then(n.bind(n,80144)),"@site/blog/2023-07-21_proto-v0.13.mdx?truncated=true",80144],"53df8e83":[()=>n.e(33439).then(n.bind(n,67887)),"@site/blog/2022-11-21_typescript-monorepo.mdx?truncated=true",67887],"54024cf2":[()=>n.e(22293).then(n.t.bind(n,54712,19)),"~blog/default/blog-tags-node-4f7-list.json",54712],"5419aa43":[()=>n.e(18914).then(n.t.bind(n,12349,19)),"~blog/default/blog-tags-migrate-aaf-list.json",12349],"54350ada":[()=>n.e(93363).then(n.bind(n,62265)),"@site/blog/2023-08-23_proto-v0.15.mdx",62265],"54eec65a":[()=>n.e(50984).then(n.t.bind(n,73757,19)),"~blog/default/blog-tags-project-34b-list.json",73757],"5534fb85":[()=>n.e(43238).then(n.t.bind(n,26577,19)),"~blog/default/blog-tags-log-760.json",26577],"5552634a":[()=>n.e(29719).then(n.bind(n,70978)),"@site/docs/proto/commands/uninstall-global.mdx",70978],"55960ee5":[()=>n.e(74121).then(n.t.bind(n,88070,19)),"~docs/default/tags-list-current-prop-15a.json",88070],"5613e7cf":[()=>n.e(64492).then(n.bind(n,41560)),"@site/blog/2023-06-26_moon-v1.9.mdx?truncated=true",41560],"56a06382":[()=>Promise.all([n.e(40532),n.e(30780),n.e(15091)]).then(n.bind(n,55210)),"@site/docs/guides/examples/next.mdx",55210],"5794c75f":[()=>n.e(63210).then(n.t.bind(n,23756,19)),"~blog/default/blog-tags-dep-graph-b83.json",23756],"57bd32c7":[()=>Promise.all([n.e(40532),n.e(15911)]).then(n.bind(n,96570)),"@site/docs/create-project.mdx",96570],"59abedb6":[()=>n.e(80632).then(n.t.bind(n,48381,19)),"~blog/default/blog-tags-index-96c-list.json",48381],"5a3a719f":[()=>n.e(43109).then(n.t.bind(n,99402,19)),"~blog/default/blog-tags-canary-b38.json",99402],"5b4d43ff":[()=>n.e(63058).then(n.t.bind(n,92095,19)),"~blog/default/blog-tags-source-541.json",92095],"5c653e8d":[()=>n.e(56256).then(n.bind(n,80251)),"@site/blog/2023-01-04_2023-roadmap.mdx",80251],"5cde4d5c":[()=>n.e(18496).then(n.t.bind(n,31056,19)),"~blog/default/blog-tags-env-vars-f85-list.json",31056],"5d48ec89":[()=>n.e(41303).then(n.bind(n,3852)),"@site/blog/2022-12-19_v0.21.mdx",3852],"5e371f0f":[()=>n.e(42945).then(n.bind(n,40657)),"@site/docs/proto/commands/outdated.mdx",40657],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f3507b2":[()=>Promise.all([n.e(40532),n.e(30780),n.e(73986)]).then(n.bind(n,64701)),"@site/docs/guides/examples/solid.mdx",64701],"600433a8":[()=>n.e(37930).then(n.t.bind(n,10952,19)),"~docs/default/category-docs-docs-category-migrate-35b.json",10952],"60262e21":[()=>n.e(30727).then(n.t.bind(n,99027,19)),"~blog/default/blog-tags-git-b15.json",99027],"60fa46e1":[()=>n.e(64043).then(n.bind(n,23574)),"@site/blog/2023-04-03_moon-v1.1.mdx",23574],61486960:[()=>n.e(18869).then(n.bind(n,78708)),"@site/blog/2023-02-08_moonbase.mdx",78708],"6196de5a":[()=>n.e(58696).then(n.t.bind(n,87428,19)),"~blog/default/blog-tags-migrate-aaf.json",87428],"620e72fa":[()=>n.e(80368).then(n.t.bind(n,16067,19)),"~blog/default/blog-tags-moonbase-527-list.json",16067],"626ef9ce":[()=>n.e(52080).then(n.bind(n,42729)),"@site/docs/commands/check.mdx",42729],"63243ad1":[()=>n.e(27594).then(n.bind(n,79835)),"/home/runner/work/moon/moon/packages/report/README.md",79835],"63aeb80b":[()=>n.e(27418).then(n.t.bind(n,91015,19)),"~blog/default/blog-tags-language-ef0-list.json",91015],66222453:[()=>n.e(46500).then(n.t.bind(n,69376,19)),"~blog/default/blog-tags-canary-b38-list.json",69376],"66926af2":[()=>n.e(52287).then(n.bind(n,71798)),"@site/blog/2023-04-13_proto-v0.6.mdx?truncated=true",71798],"66a08410":[()=>n.e(33062).then(n.t.bind(n,59929,19)),"~docs/default/tag-docs-tags-lang-e70.json",59929],"676566fe":[()=>n.e(68876).then(n.t.bind(n,7133,19)),"~blog/default/blog-tags-hooks-29a-list.json",7133],"679bd524":[()=>n.e(54252).then(n.t.bind(n,60604,19)),"~blog/default/blog-tags-qol-753-list.json",60604],"686e1776":[()=>n.e(323).then(n.bind(n,63095)),"@site/docs/commands/clean.mdx",63095],"6875c492":[()=>Promise.all([n.e(40532),n.e(30780),n.e(85730),n.e(71947),n.e(48610)]).then(n.bind(n,41071)),"@theme/BlogTagsPostsPage",41071],"688193a4":[()=>n.e(69201).then(n.t.bind(n,67575,19)),"~blog/default/blog-tags-registry-d31.json",67575],"68d17c71":[()=>n.e(25425).then(n.bind(n,67107)),"@site/blog/2023-10-09_moon-v1.15.mdx",67107],"69bc0e2c":[()=>n.e(44752).then(n.bind(n,50455)),"@site/docs/proto/commands/add-plugin.mdx",50455],"69c95af3":[()=>n.e(77363).then(n.bind(n,88819)),"@site/docs/commands/completions.mdx",88819],"69e0bfe1":[()=>n.e(85029).then(n.t.bind(n,30076,19)),"~blog/default/blog-tags-proto-page-3-5b6-list.json",30076],"69ea3d78":[()=>n.e(36095).then(n.t.bind(n,73762,19)),"~blog/default/blog-tags-code-452-list.json",73762],"6b50e60a":[()=>n.e(94268).then(n.bind(n,37404)),"@site/docs/terminology.md",37404],"6be7ee83":[()=>n.e(9197).then(n.bind(n,41150)),"@site/blog/2023-02-08_moonbase.mdx?truncated=true",41150],"6c24c6c6":[()=>Promise.all([n.e(40532),n.e(68026)]).then(n.bind(n,8e3)),"@site/docs/guides/javascript/typescript-project-refs.mdx",8e3],"6dd55018":[()=>n.e(85390).then(n.bind(n,37116)),"@site/docs/guides/javascript/typescript-eslint.mdx",37116],"6e15e01b":[()=>n.e(40216).then(n.t.bind(n,39073,19)),"~blog/default/blog-tags-env-vars-f85.json",39073],"6ea8a316":[()=>n.e(85723).then(n.t.bind(n,18537,19)),"~blog/default/blog-tags-offline-83f-list.json",18537],"6eae5b23":[()=>n.e(82687).then(n.bind(n,48387)),"@site/docs/proto/commands/completions.mdx",48387],"6fb24ff7":[()=>Promise.all([n.e(59262),n.e(1358)]).then(n.bind(n,87953)),"@site/docs/how-it-works/action-graph.mdx",87953],"6fe6957f":[()=>n.e(77465).then(n.t.bind(n,88057,19)),"~blog/default/blog-tags-editors-8f6-list.json",88057],"711949de":[()=>n.e(7012).then(n.bind(n,61228)),"@site/blog/2022-09-01_v0.13.mdx",61228],"71dfd0a8":[()=>n.e(23615).then(n.bind(n,19634)),"@site/blog/2023-07-31_moon-v1.11.mdx",19634],"722146fe":[()=>n.e(10722).then(n.t.bind(n,97160,19)),"~docs/default/tag-docs-tags-solid-a3b.json",97160],"750b9005":[()=>n.e(62814).then(n.t.bind(n,48597,19)),"~blog/default/blog-tags-quality-be6.json",48597],"752283db":[()=>n.e(46947).then(n.t.bind(n,90363,19)),"~blog/default/blog-tags-plugin-95c.json",90363],"752c6bfa":[()=>n.e(20384).then(n.t.bind(n,20891,19)),"~blog/default/blog-tags-plugins-0a9.json",20891],75408299:[()=>n.e(56630).then(n.t.bind(n,31796,19)),"~blog/default/blog-tags-run-471.json",31796],"7599f4f1":[()=>n.e(65217).then(n.t.bind(n,67049,19)),"~blog/default/blog-tags-proto-962-list.json",67049],"759c01e9":[()=>Promise.all([n.e(40532),n.e(30780),n.e(38488)]).then(n.bind(n,74273)),"@site/docs/guides/examples/react.mdx",74273],"766b2171":[()=>n.e(23358).then(n.bind(n,4722)),"@site/docs/guides/open-source.mdx",4722],"769e9ed2":[()=>n.e(13869).then(n.t.bind(n,91187,19)),"~blog/default/blog-tags-notifier-b98.json",91187],"771f38eb":[()=>n.e(71478).then(n.t.bind(n,59811,19)),"~blog/default/blog-tags-ci-5d6.json",59811],"77530bb9":[()=>n.e(46070).then(n.bind(n,11666)),"@site/blog/2023-03-09_proto.mdx?truncated=true",11666],"77b7a366":[()=>n.e(25624).then(n.bind(n,2335)),"@site/blog/2023-04-28_proto-v0.8.mdx?truncated=true",2335],"78060cbc":[()=>n.e(6652).then(n.t.bind(n,19724,19)),"~blog/default/blog-tags-github-f68.json",19724],"788e7a3c":[()=>n.e(60354).then(n.t.bind(n,65592,19)),"~blog/default/blog-tags-toml-a88.json",65592],"78dd992d":[()=>n.e(77869).then(n.t.bind(n,3357,19)),"~blog/default/blog-tags-tags-87e.json",3357],"79765aba":[()=>n.e(37440).then(n.bind(n,4758)),"@site/docs/proto/commands/pin.mdx",4758],"7aad579e":[()=>n.e(6517).then(n.t.bind(n,58259,19)),"~blog/default/blog-tags-tasks-49e-list.json",58259],"7b667a7f":[()=>n.e(35649).then(n.t.bind(n,85274,19)),"~docs/default/tag-docs-tags-git-514.json",85274],"7c4e6415":[()=>n.e(21393).then(n.t.bind(n,94940,19)),"~blog/default/blog-tags-editors-8f6.json",94940],"7c9b29bb":[()=>n.e(42334).then(n.bind(n,99484)),"@site/blog/2023-06-26_moon-v1.9.mdx",99484],"7d19a980":[()=>n.e(83549).then(n.t.bind(n,91482,19)),"~blog/default/blog-tags-hasher-783-list.json",91482],"7d4c8b40":[()=>n.e(8100).then(n.t.bind(n,13290,19)),"~blog/default/blog-tags-bin-efd.json",13290],"7d55a0f0":[()=>Promise.all([n.e(40532),n.e(46920)]).then(n.bind(n,55885)),"@site/blog/2023-02-27_v0.25.mdx",55885],"7d9726a8":[()=>n.e(7429).then(n.t.bind(n,89494,19)),"~blog/default/blog-page-4-30b.json",89494],"7e9fb3d2":[()=>n.e(79702).then(n.t.bind(n,97517,19)),"~blog/default/blog-tags-errors-d0b.json",97517],"7ec3d878":[()=>n.e(72178).then(n.t.bind(n,15655,19)),"~blog/default/blog-tags-version-acf-list.json",15655],"7f3e2518":[()=>n.e(66647).then(n.t.bind(n,41640,19)),"~blog/default/blog-tags-debug-53a.json",41640],"7f6c6f55":[()=>n.e(83561).then(n.t.bind(n,8801,19)),"~blog/default/blog-tags-toolchain-230-list.json",8801],80514956:[()=>n.e(50609).then(n.t.bind(n,29708,19)),"~blog/default/blog-tags-clean-516.json",29708],"814f3328":[()=>n.e(52535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"819f977d":[()=>Promise.all([n.e(40532),n.e(31622)]).then(n.bind(n,84102)),"@site/docs/run-task.mdx",84102],"81d944d1":[()=>n.e(74875).then(n.bind(n,79967)),"@site/blog/2023-04-03_moon-v1.1.mdx?truncated=true",79967],"83943ce1":[()=>Promise.all([n.e(40532),n.e(19821)]).then(n.t.bind(n,26723,23)),"/home/runner/work/moon/moon/node_modules/docusaurus-plugin-typedoc-api/lib/components/ApiPage.js",26723],"8526ffa3":[()=>n.e(85620).then(n.t.bind(n,52991,19)),"~blog/default/blog-tags-target-7a0-list.json",52991],"8593ff01":[()=>n.e(37007).then(n.t.bind(n,89064,19)),"~blog/default/blog-tags-docker-f07.json",89064],"860d7f34":[()=>n.e(28495).then(n.t.bind(n,80806,19)),"~blog/default/blog-tags-shim-887.json",80806],"861abce9":[()=>n.e(15995).then(n.bind(n,43633)),"@site/docs/commands/sync/projects.mdx",43633],"86257f88":[()=>Promise.all([n.e(40532),n.e(30780),n.e(85730),n.e(12700),n.e(97279),n.e(1795)]).then(n.bind(n,65530)),"@site/docs/comparison.mdx",65530],"87d62477":[()=>n.e(9551).then(n.bind(n,69051)),"@site/docs/guides/webhooks.mdx",69051],"87f861ef":[()=>n.e(43408).then(n.t.bind(n,97390,19)),"~blog/default/blog-tags-dependency-e04.json",97390],"8876813e":[()=>Promise.all([n.e(59262),n.e(2615)]).then(n.bind(n,17242)),"@site/docs/how-it-works/project-graph.mdx",17242],"88aaac27":[()=>Promise.all([n.e(40532),n.e(4138)]).then(n.bind(n,31509)),"@site/docs/create-task.mdx",31509],"89a53707":[()=>Promise.all([n.e(40532),n.e(23157)]).then(n.bind(n,55946)),"@site/docs/guides/docker.mdx",55946],"89c16be8":[()=>n.e(47969).then(n.bind(n,82134)),"@site/docs/concepts/cache.mdx",82134],"8b38bcbd":[()=>n.e(68900).then(n.t.bind(n,3025,19)),"~blog/default/blog-tags-alias-144.json",3025],"8c079f7d":[()=>n.e(85880).then(n.bind(n,57920)),"@site/docs/commands/init.mdx",57920],"8c241076":[()=>n.e(91324).then(n.t.bind(n,92687,19)),"~blog/default/blog-tags-graph-658.json",92687],"8c4a23a7":[()=>n.e(20739).then(n.bind(n,79217)),"@site/docs/commands/docker/setup.mdx",79217],"8d06f620":[()=>n.e(8678).then(n.t.bind(n,62278,19)),"~blog/default/blog-tags-rfc-616.json",62278],"8d701eb4":[()=>n.e(26622).then(n.t.bind(n,13762,19)),"~blog/default/blog-tags-hooks-29a.json",13762],"8de38bef":[()=>Promise.all([n.e(40532),n.e(64197)]).then(n.bind(n,74685)),"@site/docs/config/toolchain.mdx",74685],"8e65fbae":[()=>n.e(51578).then(n.t.bind(n,37701,19)),"~docs/default/tag-docs-tags-scaffold-e17.json",37701],"8e9e3e30":[()=>n.e(74675).then(n.bind(n,96433)),"@site/blog/2023-09-04_proto-v0.16.mdx?truncated=true",96433],"8eb4e46b":[()=>n.e(10001).then(n.t.bind(n,82638,19)),"~blog/default/blog-page-2-677.json",82638],"8f6f7bb5":[()=>n.e(19950).then(n.bind(n,68523)),"@site/docs/guides/profile.mdx",68523],"907bfa82":[()=>n.e(37633).then(n.t.bind(n,98818,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/plugin-route-context-module-100.json",98818],"90b14878":[()=>n.e(8114).then(n.t.bind(n,24833,19)),"~docs/default/category-docs-docs-category-config-files-a6b.json",24833],"90f88783":[()=>Promise.all([n.e(40532),n.e(30780),n.e(13481)]).then(n.bind(n,9123)),"@site/docs/guides/examples/prettier.mdx",9123],"90fdb9b5":[()=>n.e(96321).then(n.t.bind(n,27488,19)),"~blog/default/blog-tags-offline-83f.json",27488],"92999a1c":[()=>n.e(18442).then(n.t.bind(n,15310,19)),"~blog/default/blog-page-3-fd4.json",15310],"935f2afb":[()=>n.e(80053).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"937d7adc":[()=>n.e(33071).then(n.bind(n,14097)),"@site/blog/2022-11-21_typescript-monorepo.mdx",14097],"93bce8ec":[()=>n.e(64859).then(n.t.bind(n,34284,19)),"~blog/default/blog-tags-generator-109.json",34284],"9529487c":[()=>n.e(35537).then(n.t.bind(n,40543,19)),"~blog/default/blog-tags-tags-87e-list.json",40543],"957809ee":[()=>n.e(12785).then(n.bind(n,57828)),"@site/blog/2023-09-05_moon-v1.13.mdx?truncated=true",57828],"976dc663":[()=>n.e(51109).then(n.t.bind(n,70886,19)),"~blog/default/blog-tags-life-ab7.json",70886],"97878c65":[()=>n.e(10948).then(n.bind(n,25132)),"@site/blog/2023-03-09_proto.mdx",25132],"98738a6c":[()=>n.e(94734).then(n.bind(n,32369)),"@site/blog/2023-09-29_proto-v0.19.mdx",32369],"98ae4a66":[()=>n.e(67619).then(n.bind(n,67013)),"@site/blog/2023-08-11_proto-v0.14.mdx",67013],"99b94e0d":[()=>n.e(89531).then(n.t.bind(n,55513,19)),"~blog/default/blog-tags-ignore-60c-list.json",55513],"9a062e52":[()=>Promise.all([n.e(40532),n.e(6855)]).then(n.bind(n,86101)),"@site/blog/2023-03-13_v0.26.mdx",86101],"9c090340":[()=>n.e(87538).then(n.t.bind(n,61086,19)),"~blog/default/blog-tags-init-e2a.json",61086],"9d3c1a44":[()=>n.e(15428).then(n.t.bind(n,77957,19)),"~blog/default/blog-tags-index-96c.json",77957],"9e4087bc":[()=>n.e(53608).then(n.bind(n,7507)),"@theme/BlogArchivePage",7507],"9e4ae2cc":[()=>n.e(75706).then(n.t.bind(n,74525,19)),"~blog/default/blog-tags-run-471-list.json",74525],"9e528cee":[()=>n.e(6633).then(n.bind(n,92510)),"@site/docs/proto/wasm-plugin.mdx",92510],"9edb948e":[()=>Promise.all([n.e(40532),n.e(44436)]).then(n.bind(n,31901)),"@site/docs/setup-toolchain.mdx",31901],"9f025583":[()=>n.e(44343).then(n.bind(n,35558)),"@site/docs/proto/commands/alias.mdx",35558],"9f838734":[()=>Promise.all([n.e(40532),n.e(93231)]).then(n.bind(n,48764)),"@site/docs/guides/codeowners.mdx",48764],"9ff86157":[()=>n.e(38830).then(n.bind(n,24158)),"/home/runner/work/moon/moon/packages/types/README.md",24158],a0d8b188:[()=>n.e(25547).then(n.bind(n,96927)),"@site/docs/config/template.mdx",96927],a18798d1:[()=>n.e(27460).then(n.bind(n,92912)),"@site/docs/proto/commands/unalias.mdx",92912],a20401e4:[()=>n.e(70969).then(n.bind(n,96681)),"@site/docs/proto/commands/install.mdx",96681],a219b733:[()=>n.e(97749).then(n.bind(n,11558)),"@site/docs/commands/docker/scaffold.mdx",11558],a26a8dd3:[()=>n.e(77838).then(n.bind(n,61643)),"@site/docs/commands/docker/prune.mdx",61643],a33962b9:[()=>n.e(82763).then(n.bind(n,67714)),"@site/docs/guides/sharing-config.mdx",67714],a372a63b:[()=>n.e(4590).then(n.t.bind(n,61127,19)),"~blog/default/blog-tags-query-8a9.json",61127],a452709a:[()=>n.e(46526).then(n.bind(n,19107)),"@site/docs/proto/commands/use.mdx",19107],a581e456:[()=>Promise.all([n.e(40532),n.e(30780),n.e(92778)]).then(n.bind(n,4496)),"@site/docs/guides/examples/eslint.mdx",4496],a5a57258:[()=>n.e(82192).then(n.bind(n,43843)),"@site/blog/2023-07-10_moon-v1.10.mdx",43843],a641c963:[()=>n.e(73931).then(n.bind(n,322)),"@site/docs/proto/detection.mdx",322],a65441a5:[()=>n.e(2033).then(n.bind(n,48794)),"@site/docs/commands/bin.mdx",48794],a6746ab5:[()=>n.e(51705).then(n.bind(n,8618)),"@site/blog/2023-04-06_proto-v0.5.mdx",8618],a6aa9e1f:[()=>Promise.all([n.e(40532),n.e(30780),n.e(85730),n.e(71947),n.e(93089)]).then(n.bind(n,63462)),"@theme/BlogListPage",63462],a6d9fcee:[()=>n.e(29958).then(n.bind(n,91038)),"@site/blog/2022-11-14_v0.19.mdx?truncated=true",91038],a701d349:[()=>n.e(33068).then(n.bind(n,47049)),"@site/docs/proto/commands/list-remote.mdx",47049],a7023ddc:[()=>n.e(11713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a86b7c98:[()=>n.e(30827).then(n.t.bind(n,17091,19)),"~blog/default/blog-tags-schema-251.json",17091],a88c4343:[()=>n.e(68282).then(n.bind(n,70390)),"@site/docs/commands/query/projects.mdx",70390],a91ae4c2:[()=>n.e(68005).then(n.t.bind(n,10877,19)),"~blog/default/blog-tags-target-7a0.json",10877],a9e1900f:[()=>n.e(26009).then(n.bind(n,60930)),"@site/docs/proto/commands/plugins.mdx",60930],aa431e4a:[()=>n.e(23512).then(n.bind(n,12690)),"@site/docs/guides/examples/nuxt.mdx",12690],aacc3e35:[()=>Promise.all([n.e(40532),n.e(92702)]).then(n.bind(n,42479)),"@site/blog/2023-02-13_v0.24.mdx?truncated=true",42479],ac1be023:[()=>n.e(83075).then(n.t.bind(n,51491,19)),"~blog/default/blog-tags-hydration-583-list.json",51491],ad536080:[()=>n.e(65077).then(n.bind(n,16621)),"@site/docs/proto/index.mdx",16621],affd832d:[()=>n.e(29453).then(n.t.bind(n,72067,19)),"~blog/default/blog-tags-ownership-1a2-list.json",72067],b03b3eac:[()=>n.e(35334).then(n.bind(n,86963)),"@site/blog/2022-10-06_v0.16.mdx",86963],b072568e:[()=>Promise.all([n.e(40532),n.e(32433)]).then(n.bind(n,3688)),"@site/blog/2022-10-21_v0.17.mdx?truncated=true",3688],b0cf9b20:[()=>n.e(60499).then(n.t.bind(n,57812,19)),"~blog/default/blog-tags-dep-graph-b83-list.json",57812],b0e766b4:[()=>Promise.all([n.e(40532),n.e(12949)]).then(n.bind(n,60992)),"@site/blog/2022-09-26_v0.15.mdx?truncated=true",60992],b104f86f:[()=>n.e(84536).then(n.bind(n,20626)),"@site/docs/commands/teardown.mdx",20626],b1144183:[()=>n.e(47822).then(n.t.bind(n,42234,19)),"~blog/default/blog-tags-tag-d3f.json",42234],b15686f4:[()=>n.e(64147).then(n.t.bind(n,19687,19)),"~docs/default/tag-docs-tags-hooks-0eb.json",19687],b184781f:[()=>n.e(26911).then(n.bind(n,16858)),"@site/blog/2022-12-19_v0.21.mdx?truncated=true",16858],b1c60aef:[()=>n.e(58074).then(n.t.bind(n,81077,19)),"~blog/default/blog-tags-errors-d0b-list.json",81077],b2b675dd:[()=>n.e(90533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2d692e7:[()=>n.e(79716).then(n.t.bind(n,7085,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],b2f554cd:[()=>n.e(11477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b38a02d7:[()=>n.e(98685).then(n.t.bind(n,42683,19)),"~blog/default/blog-tags-railway-ade.json",42683],b49860f1:[()=>n.e(55649).then(n.bind(n,79353)),"@site/docs/proto/plugins.mdx",79353],b652e05c:[()=>n.e(95653).then(n.t.bind(n,31566,19)),"~blog/default/blog-tags-node-4f7.json",31566],b65c3624:[()=>Promise.all([n.e(40532),n.e(60730)]).then(n.bind(n,52746)),"@site/docs/migrate-to-moon.mdx",52746],b6e1085a:[()=>Promise.all([n.e(40532),n.e(89624)]).then(n.bind(n,1710)),"@site/blog/2022-09-26_v0.15.mdx",1710],b717531a:[()=>n.e(80115).then(n.bind(n,84501)),"@site/blog/2023-08-21_moon-v1.12.mdx",84501],b78f40a6:[()=>Promise.all([n.e(40532),n.e(76629)]).then(n.bind(n,11279)),"@site/docs/guides/ci.mdx",11279],b7a8f57a:[()=>n.e(47890).then(n.bind(n,49286)),"@site/blog/2023-09-18_proto-v0.18.mdx",49286],b80596f4:[()=>n.e(78463).then(n.bind(n,47076)),"@site/blog/2023-09-05_moon-v1.13.mdx",47076],b819cecb:[()=>n.e(8450).then(n.bind(n,82136)),"@site/blog/2022-10-17_vscode-extension.mdx",82136],b831fe65:[()=>n.e(9157).then(n.bind(n,17467)),"@site/docs/concepts/project.mdx",17467],b8f3d4c8:[()=>n.e(82444).then(n.bind(n,21953)),"@site/docs/editors/vscode.mdx",21953],b972506a:[()=>n.e(81187).then(n.t.bind(n,66037,19)),"~blog/default/blog-tags-monorepo-88d.json",66037],b9e9925e:[()=>n.e(90297).then(n.bind(n,62328)),"@site/docs/concepts/file-group.mdx",62328],bb624440:[()=>n.e(21364).then(n.bind(n,24588)),"@site/blog/2023-05-08_moon-v1.5.mdx?truncated=true",24588],bb86fac5:[()=>n.e(99067).then(n.t.bind(n,56543,19)),"~blog/default/blog-tags-http-5fb-list.json",56543],bc6c5049:[()=>n.e(25370).then(n.t.bind(n,5540,19)),"~blog/default/blog-tags-rfc-616-list.json",5540],bc74446d:[()=>n.e(33134).then(n.t.bind(n,90063,19)),"~blog/default/blog-tags-debug-53a-list.json",90063],bcbbf42e:[()=>n.e(52606).then(n.t.bind(n,26090,19)),"~blog/default/blog-tags-typescript-2e3.json",26090],bd6bded1:[()=>n.e(62687).then(n.t.bind(n,32443,19)),"~blog/default/blog-tags-inheritance-8f5.json",32443],be0fdac8:[()=>n.e(76331).then(n.t.bind(n,74962,19)),"~blog/default/blog-tags-logging-c85.json",74962],be1609b7:[()=>n.e(56448).then(n.t.bind(n,56277,19)),"~blog/default/blog-tags-toolchain-230.json",56277],be1aaa14:[()=>n.e(37133).then(n.bind(n,78817)),"@site/docs/commands/query/hash.mdx",78817],be324e15:[()=>n.e(9847).then(n.bind(n,73530)),"@site/docs/proto/commands/upgrade.mdx",73530],bec065e9:[()=>n.e(56819).then(n.t.bind(n,52695,19)),"~blog/default/blog-tags-action-340.json",52695],bf04367c:[()=>n.e(13089).then(n.bind(n,63261)),"@site/blog/2023-05-01_moon-v1.4.mdx",63261],bf5d9784:[()=>n.e(99827).then(n.t.bind(n,40475,19)),"~blog/default/blog-tags-life-ab7-list.json",40475],bf95ed3d:[()=>n.e(59639).then(n.t.bind(n,26718,19)),"~blog/default/blog-tags-toml-a88-list.json",26718],c095dcfa:[()=>n.e(8057).then(n.bind(n,89908)),"@site/blog/2023-03-31_proto-v0.4.mdx?truncated=true",89908],c1721191:[()=>n.e(54362).then(n.t.bind(n,45332,19)),"~blog/default/blog-tags-tool-798.json",45332],c19ad3d7:[()=>n.e(40805).then(n.t.bind(n,76656,19)),"~blog/default/blog-tags-proto-page-2-892.json",76656],c413f1b7:[()=>n.e(94384).then(n.bind(n,35971)),"@site/blog/2022-10-31_v0.18.mdx?truncated=true",35971],c4542d8c:[()=>n.e(61988).then(n.t.bind(n,25,19)),"~blog/default/blog-tags-shorthand-f31.json",25],c4f95133:[()=>n.e(98401).then(n.bind(n,32080)),"/home/runner/work/moon/moon/packages/runtime/README.md",32080],c532175a:[()=>n.e(68573).then(n.t.bind(n,70953,19)),"~blog/default/blog-tags-task-d4c.json",70953],c5980a65:[()=>n.e(41525).then(n.bind(n,85169)),"@site/docs/proto/commands/uninstall.mdx",85169],c5de23c8:[()=>n.e(77963).then(n.t.bind(n,10401,19)),"~blog/default/blog-tags-constraints-91e-list.json",10401],c5ed658f:[()=>n.e(23131).then(n.t.bind(n,56744,19)),"~docs/default/category-docs-docs-category-concepts-0f9.json",56744],c6200b76:[()=>n.e(33643).then(n.bind(n,77817)),"@site/blog/2023-04-17_moon-v1.2.mdx?truncated=true",77817],c67cfbac:[()=>n.e(16732).then(n.t.bind(n,85115,19)),"~docs/default/tag-docs-tags-solidjs-a25.json",85115],c6c73cac:[()=>n.e(93791).then(n.t.bind(n,40424,19)),"~blog/default/blog-tags-shorthand-f31-list.json",40424],c7d98fe2:[()=>n.e(51084).then(n.bind(n,60716)),"@site/docs/proto/faq.mdx",60716],c83c6fdf:[()=>n.e(44867).then(n.t.bind(n,3808,19)),"~blog/default/blog-tags-owners-249-list.json",3808],c8acf440:[()=>n.e(89126).then(n.bind(n,32508)),"@site/blog/2023-06-25_proto-v0.11.mdx?truncated=true",32508],caa6a735:[()=>n.e(75394).then(n.t.bind(n,70851,19)),"~blog/default/blog-tags-affected-846-list.json",70851],cae36b15:[()=>n.e(94312).then(n.bind(n,19680)),"@site/docs/proto/commands/run.mdx",19680],ccc49370:[()=>Promise.all([n.e(40532),n.e(30780),n.e(85730),n.e(71947),n.e(46103)]).then(n.bind(n,83227)),"@theme/BlogPostPage",83227],cce51cf2:[()=>n.e(16447).then(n.t.bind(n,42932,19)),"~blog/default/blog-tags-go-099-list.json",42932],ccfb5782:[()=>n.e(63450).then(n.t.bind(n,90384,19)),"~blog/default/blog-tags-alias-144-list.json",90384],cd988af7:[()=>n.e(31737).then(n.bind(n,6040)),"@site/blog/2023-09-11_proto-v0.17.mdx?truncated=true",6040],cdad2d50:[()=>n.e(18509).then(n.bind(n,12030)),"@site/blog/2023-01-16_v0.22.mdx?truncated=true",12030],ce2c6db8:[()=>n.e(8248).then(n.bind(n,67067)),"@site/blog/2023-09-25_moon-v1.14.mdx?truncated=true",67067],cf510f60:[()=>n.e(1607).then(n.t.bind(n,45355,19)),"~blog/default/blog-tags-platform-9d7.json",45355],cfdf2b5f:[()=>n.e(5016).then(n.bind(n,29988)),"@site/blog/2023-10-20_proto-v0.20.mdx?truncated=true",29988],d1576682:[()=>n.e(6506).then(n.bind(n,92667)),"@site/docs/proto/commands/list.mdx",92667],d213043e:[()=>n.e(638).then(n.bind(n,32336)),"@site/blog/2022-11-29_v0.20.mdx?truncated=true",32336],d43cc2ec:[()=>n.e(43871).then(n.bind(n,13901)),"@site/blog/2023-08-11_proto-v0.14.mdx?truncated=true",13901],d4c755e6:[()=>n.e(87387).then(n.bind(n,72287)),"@site/docs/proto/commands/setup.mdx",72287],d5875de2:[()=>n.e(58941).then(n.t.bind(n,72311,19)),"~blog/default/blog-tags-affected-846.json",72311],d7cb860d:[()=>Promise.all([n.e(21947),n.e(45048)]).then(n.bind(n,10052)),"@site/src/pages/moonbase.tsx",10052],d7cf5e1f:[()=>n.e(67005).then(n.bind(n,12403)),"@site/blog/2022-10-17_vscode-extension.mdx?truncated=true",12403],d84e8684:[()=>n.e(80146).then(n.t.bind(n,47751,19)),"~blog/default/blog-tags-hydration-583.json",47751],d8fdbe7a:[()=>n.e(43993).then(n.bind(n,82887)),"@site/docs/commands/query/touched-files.mdx",82887],d93dbc28:[()=>Promise.all([n.e(40532),n.e(30780),n.e(85679)]).then(n.bind(n,79597)),"@site/docs/guides/examples/nest.mdx",79597],d9c57d72:[()=>n.e(42277).then(n.bind(n,90725)),"@site/blog/2023-04-24_moon-v1.3.mdx",90725],dae127b6:[()=>n.e(20728).then(n.bind(n,21817)),"@site/blog/2023-10-20_proto-v0.20.mdx",21817],daf4eece:[()=>n.e(56971).then(n.t.bind(n,59254,19)),"~docs/default/tag-docs-tags-codegen-2d0.json",59254],db0cc9f1:[()=>n.e(64065).then(n.bind(n,31855)),"@site/docs/guides/remote-cache.mdx",31855],db676956:[()=>n.e(38086).then(n.bind(n,11118)),"@site/docs/concepts/query-lang.mdx",11118],dbbb982f:[()=>n.e(67622).then(n.t.bind(n,50194,19)),"~blog/default/blog-tags-docker-f07-list.json",50194],dd3540fa:[()=>n.e(59364).then(n.bind(n,38834)),"@site/blog/2023-03-27_moon-v1.0.mdx?truncated=true",38834],dd5ac54b:[()=>n.e(53184).then(n.t.bind(n,68011,19)),"~blog/default/blog-tags-task-d4c-list.json",68011],dd99bf53:[()=>n.e(20019).then(n.t.bind(n,2020,19)),"~blog/default/blog-tags-notifier-b98-list.json",2020],ddec1041:[()=>n.e(22461).then(n.t.bind(n,46599,19)),"~blog/default/blog-tags-tool-798-list.json",46599],df203c0f:[()=>n.e(99924).then(n.bind(n,67051)),"@theme/DocTagDocListPage",67051],df212c12:[()=>n.e(36863).then(n.bind(n,65521)),"@site/docs/concepts/task-inheritance.mdx",65521],dffc4bd7:[()=>n.e(70866).then(n.t.bind(n,6310,19)),"~docs/default/category-docs-docs-category-docker-07b.json",6310],e13166f5:[()=>n.e(66172).then(n.bind(n,58571)),"@site/docs/concepts/workspace.mdx",58571],e16afba1:[()=>n.e(97889).then(n.bind(n,22525)),"@site/docs/commands/task.mdx",22525],e4c23816:[()=>n.e(89819).then(n.t.bind(n,91154,19)),"~blog/default/blog-tags-ignore-60c.json",91154],e570d6db:[()=>n.e(70951).then(n.bind(n,36593)),"@site/docs/commands/sync/codeowners.mdx",36593],e5f23965:[()=>n.e(66882).then(n.t.bind(n,84376,19)),"~blog/default/blog-tags-pipeline-37d-list.json",84376],e629dea5:[()=>n.e(9010).then(n.t.bind(n,13294,19)),"~blog/default/blog-tags-ownership-1a2.json",13294],e746f759:[()=>n.e(33984).then(n.bind(n,49711)),"@site/blog/2023-08-23_proto-v0.15.mdx?truncated=true",49711],e7d7123e:[()=>n.e(65899).then(n.bind(n,17965)),"@site/blog/2022-09-13_v0.14.mdx",17965],e8700426:[()=>n.e(19902).then(n.bind(n,28771)),"@site/blog/2023-04-13_proto-v0.6.mdx",28771],e898b7f3:[()=>Promise.all([n.e(40532),n.e(30780),n.e(87584)]).then(n.bind(n,81935)),"@site/docs/guides/examples/vite.mdx",81935],e8d2c25f:[()=>n.e(43171).then(n.t.bind(n,28766,19)),"~blog/default/blog-tags-proto-962.json",28766],e8f62c55:[()=>n.e(47789).then(n.t.bind(n,39311,19)),"~blog/default/blog-tags-inheritance-8f5-list.json",39311],ea313555:[()=>n.e(77937).then(n.bind(n,49511)),"@site/docs/faq.mdx",49511],eb1a9ca0:[()=>n.e(30841).then(n.t.bind(n,53295,19)),"~blog/default/blog-tags-clean-516-list.json",53295],eb514dbf:[()=>n.e(16039).then(n.bind(n,71276)),"@site/blog/2023-05-01_moon-v1.4.mdx?truncated=true",71276],ec4f6a24:[()=>n.e(32571).then(n.t.bind(n,79076,19)),"~blog/default/blog-tags-project-graph-b9c-list.json",79076],ec9f380e:[()=>n.e(24744).then(n.t.bind(n,83769,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],ed26bce9:[()=>n.e(16835).then(n.t.bind(n,36757,19)),"~blog/default/blog-tags-monorepo-88d-list.json",36757],eda853ca:[()=>n.e(60314).then(n.bind(n,25799)),"@site/docs/commands/project-graph.mdx",25799],edd7d65c:[()=>n.e(73250).then(n.t.bind(n,64186,19)),"~blog/default/blog-tags-tag-d3f-list.json",64186],edfea66c:[()=>n.e(36394).then(n.bind(n,19106)),"@site/blog/2022-10-31_v0.18.mdx",19106],ef3509ef:[()=>n.e(6274).then(n.t.bind(n,3778,19)),"~blog/default/blog-tags-constraints-91e.json",3778],efef7eb9:[()=>n.e(56040).then(n.bind(n,15381)),"@site/blog/2023-09-25_moon-v1.14.mdx",15381],f01f44c3:[()=>n.e(75852).then(n.t.bind(n,41862,19)),"~blog/default/blog-tags-remote-cache-1d2-list.json",41862],f09f371a:[()=>n.e(69186).then(n.bind(n,81143)),"@site/blog/2023-05-23_proto-v0.9.mdx?truncated=true",81143],f18fbdcd:[()=>Promise.all([n.e(40532),n.e(15050)]).then(n.bind(n,18287)),"@site/docs/setup-workspace.mdx",18287],f1d6ac1e:[()=>n.e(56720).then(n.bind(n,16699)),"@site/blog/2023-04-28_proto-v0.8.mdx",16699],f3f44898:[()=>n.e(54841).then(n.t.bind(n,15745,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],f41735e0:[()=>n.e(65819).then(n.t.bind(n,79877,19)),"/home/runner/work/moon/moon/website/.docusaurus/docusaurus-plugin-typedoc-api/default/version-current.json",79877],f41d5eb1:[()=>n.e(52201).then(n.t.bind(n,94476,19)),"~docs/default/category-docs-docs-category-editors-2b3.json",94476],f440db1d:[()=>n.e(20984).then(n.bind(n,10528)),"@site/docs/proto/install.mdx",10528],f5b890ba:[()=>n.e(16502).then(n.t.bind(n,61762,19)),"~blog/default/blog-tags-survey-f63.json",61762],f5f247cc:[()=>n.e(21258).then(n.t.bind(n,21083,19)),"~blog/default/blog-tags-owners-249.json",21083],f616eec2:[()=>n.e(79357).then(n.bind(n,99075)),"@site/docs/commands/query/hash-diff.mdx",99075],f714495d:[()=>n.e(60026).then(n.bind(n,26648)),"@site/docs/proto/toml-plugin.mdx",26648],f761bd07:[()=>n.e(43310).then(n.bind(n,22936)),"@site/blog/2023-07-07_proto-v0.12.mdx?truncated=true",22936],f7b99134:[()=>n.e(29737).then(n.t.bind(n,99201,19)),"~blog/default/blog-tags-query-8a9-list.json",99201],f7bfbae9:[()=>n.e(24404).then(n.bind(n,88772)),"@site/blog/2022-11-29_v0.20.mdx",88772],f7f505dc:[()=>Promise.all([n.e(40532),n.e(30780),n.e(65537)]).then(n.bind(n,8401)),"@site/docs/guides/examples/vue.mdx",8401],f8409a7e:[()=>n.e(3206).then(n.bind(n,92661)),"@site/docs/intro.mdx",92661],f8de77c0:[()=>n.e(5826).then(n.t.bind(n,87661,19)),"~blog/default/blog-tags-python-667-list.json",87661],f8deddba:[()=>n.e(10938).then(n.bind(n,47685)),"@site/blog/2023-07-10_moon-v1.10.mdx?truncated=true",47685],f90d8a46:[()=>n.e(44497).then(n.bind(n,90653)),"@site/blog/2023-05-30_moon-v1.7.mdx?truncated=true",90653],f9651623:[()=>n.e(15494).then(n.bind(n,31848)),"@site/blog/2023-05-15_moon-v1.6.mdx",31848],f9cc98ab:[()=>n.e(58751).then(n.bind(n,21612)),"@site/docs/commands/run.mdx",21612],fab64b27:[()=>n.e(67964).then(n.bind(n,36630)),"@site/docs/proto/commands/bin.mdx",36630],fac0f815:[()=>n.e(53941).then(n.t.bind(n,62698,19)),"~blog/default/blog-tags-graph-658-list.json",62698],fb2dd7db:[()=>n.e(39818).then(n.t.bind(n,71673,19)),"~blog/default/blog-tags-lang-462-list.json",71673],fba28ebc:[()=>n.e(90514).then(n.t.bind(n,64234,19)),"~blog/default/blog-tags-outdated-17a.json",64234],fbcfc993:[()=>n.e(53647).then(n.t.bind(n,48435,19)),"~blog/default/blog-tags-pin-fa7.json",48435],fc3ae8bf:[()=>n.e(15411).then(n.bind(n,97168)),"@site/docs/config/tasks.mdx",97168],fc3deafd:[()=>n.e(77659).then(n.t.bind(n,54568,19)),"~blog/default/blog-tags-go-099.json",54568],fc62dd75:[()=>n.e(11280).then(n.bind(n,83950)),"@site/docs/proto/commands/tools.mdx",83950],fcb295ad:[()=>n.e(17642).then(n.t.bind(n,22118,19)),"~docs/default/tag-docs-tags-vcs-af7.json",22118],fcbcdf3c:[()=>n.e(90439).then(n.t.bind(n,92942,19)),"~blog/default/blog-tags-pipeline-37d.json",92942],fd27c808:[()=>n.e(90661).then(n.t.bind(n,35171,19)),"~docs/default/category-docs-docs-category-how-it-works-aeb.json",35171],fd485bd3:[()=>n.e(90543).then(n.bind(n,9351)),"@site/blog/2023-06-12_moon-v1.8.mdx",9351],fd8ac5c7:[()=>n.e(23664).then(n.t.bind(n,2829,19)),"~blog/default/blog-tags-tasks-49e.json",2829],fe36d4cd:[()=>Promise.all([n.e(40532),n.e(30780),n.e(45420)]).then(n.bind(n,21727)),"@site/docs/guides/examples/jest.mdx",21727],fe55d425:[()=>n.e(71133).then(n.bind(n,56099)),"@site/blog/2023-08-21_moon-v1.12.mdx?truncated=true",56099],fea2b255:[()=>n.e(93287).then(n.bind(n,90360)),"@site/docs/concepts/target.mdx",90360],ff13fcd4:[()=>Promise.all([n.e(40532),n.e(30780),n.e(12174)]).then(n.bind(n,90992)),"@site/docs/guides/examples/angular.mdx",90992],ffc0ac08:[()=>n.e(92105).then(n.t.bind(n,68784,19)),"~blog/default/blog-tags-plugins-0a9-list.json",68784],ffef4e04:[()=>n.e(26027).then(n.bind(n,19303)),"@site/docs/commands/migrate/from-package-json.mdx",19303],fff5a6d1:[()=>n.e(97547).then(n.t.bind(n,11455,19)),"~blog/default/blog-tags-detect-153.json",11455],fffcdd84:[()=>n.e(78158).then(n.t.bind(n,4156,19)),"~blog/default/blog-tags-checksum-9de.json",4156]};function l(e){let{error:t,retry:n,pastDelay:o}=e;return t?a.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},a.createElement("p",null,String(t)),a.createElement("div",null,a.createElement("button",{type:"button",onClick:n},"Retry"))):o?a.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},a.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},a.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},a.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),a.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),a.createElement("circle",{cx:"22",cy:"22",r:"8"},a.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var d=n(13361),u=n(66881);function p(e,t){if("*"===e)return i()({loading:l,loader:()=>n.e(53893).then(n.bind(n,53893)),modules:["@theme/NotFound"],webpack:()=>[53893],render(e,t){const n=e.default;return a.createElement(u.z,{value:{plugin:{name:"native",id:"default"}}},a.createElement(n,t))}});const r=s[`${e}-${t}`],p={},f=[],m=[],g=(0,d.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const a=c[n];a&&(p[t]=a[0],f.push(a[1]),m.push(a[2]))})),i().Map({loading:l,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,a]=t;const o=a.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(a).filter((e=>"default"!==e)).forEach((e=>{o[e]=a[e]}));let r=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{r=r[e]})),r[s[s.length-1]]=o}));const s=i.__comp;delete i.__comp;const c=i.__context;return delete i.__context,a.createElement(u.z,{value:c},a.createElement(s,(0,o.Z)({},i,n)))}})}const f=[{path:"/blog",component:p("/blog","c31"),exact:!0},{path:"/blog/2023-roadmap",component:p("/blog/2023-roadmap","864"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","1b1"),exact:!0},{path:"/blog/moon-v1.0",component:p("/blog/moon-v1.0","21d"),exact:!0},{path:"/blog/moon-v1.1",component:p("/blog/moon-v1.1","f8e"),exact:!0},{path:"/blog/moon-v1.10",component:p("/blog/moon-v1.10","5e4"),exact:!0},{path:"/blog/moon-v1.11",component:p("/blog/moon-v1.11","461"),exact:!0},{path:"/blog/moon-v1.12",component:p("/blog/moon-v1.12","6dc"),exact:!0},{path:"/blog/moon-v1.13",component:p("/blog/moon-v1.13","a38"),exact:!0},{path:"/blog/moon-v1.14",component:p("/blog/moon-v1.14","63e"),exact:!0},{path:"/blog/moon-v1.15",component:p("/blog/moon-v1.15","b21"),exact:!0},{path:"/blog/moon-v1.2",component:p("/blog/moon-v1.2","cbe"),exact:!0},{path:"/blog/moon-v1.3",component:p("/blog/moon-v1.3","c99"),exact:!0},{path:"/blog/moon-v1.4",component:p("/blog/moon-v1.4","b5f"),exact:!0},{path:"/blog/moon-v1.5",component:p("/blog/moon-v1.5","51b"),exact:!0},{path:"/blog/moon-v1.6",component:p("/blog/moon-v1.6","c20"),exact:!0},{path:"/blog/moon-v1.7",component:p("/blog/moon-v1.7","96a"),exact:!0},{path:"/blog/moon-v1.8",component:p("/blog/moon-v1.8","a17"),exact:!0},{path:"/blog/moon-v1.9",component:p("/blog/moon-v1.9","835"),exact:!0},{path:"/blog/moonbase",component:p("/blog/moonbase","c38"),exact:!0},{path:"/blog/page/2",component:p("/blog/page/2","a36"),exact:!0},{path:"/blog/page/3",component:p("/blog/page/3","973"),exact:!0},{path:"/blog/page/4",component:p("/blog/page/4","d8b"),exact:!0},{path:"/blog/page/5",component:p("/blog/page/5","763"),exact:!0},{path:"/blog/page/6",component:p("/blog/page/6","0e4"),exact:!0},{path:"/blog/proto",component:p("/blog/proto","dd1"),exact:!0},{path:"/blog/proto-v0.11",component:p("/blog/proto-v0.11","254"),exact:!0},{path:"/blog/proto-v0.12",component:p("/blog/proto-v0.12","e58"),exact:!0},{path:"/blog/proto-v0.13",component:p("/blog/proto-v0.13","c92"),exact:!0},{path:"/blog/proto-v0.14",component:p("/blog/proto-v0.14","94e"),exact:!0},{path:"/blog/proto-v0.15",component:p("/blog/proto-v0.15","573"),exact:!0},{path:"/blog/proto-v0.16",component:p("/blog/proto-v0.16","a08"),exact:!0},{path:"/blog/proto-v0.17",component:p("/blog/proto-v0.17","8c2"),exact:!0},{path:"/blog/proto-v0.18",component:p("/blog/proto-v0.18","187"),exact:!0},{path:"/blog/proto-v0.19",component:p("/blog/proto-v0.19","ccc"),exact:!0},{path:"/blog/proto-v0.20",component:p("/blog/proto-v0.20","435"),exact:!0},{path:"/blog/proto-v0.3",component:p("/blog/proto-v0.3","5f5"),exact:!0},{path:"/blog/proto-v0.4",component:p("/blog/proto-v0.4","d76"),exact:!0},{path:"/blog/proto-v0.5",component:p("/blog/proto-v0.5","f0a"),exact:!0},{path:"/blog/proto-v0.6",component:p("/blog/proto-v0.6","4a2"),exact:!0},{path:"/blog/proto-v0.7",component:p("/blog/proto-v0.7","c70"),exact:!0},{path:"/blog/proto-v0.8",component:p("/blog/proto-v0.8","e68"),exact:!0},{path:"/blog/proto-v0.9",component:p("/blog/proto-v0.9","c62"),exact:!0},{path:"/blog/tags",component:p("/blog/tags","b41"),exact:!0},{path:"/blog/tags/action",component:p("/blog/tags/action","06b"),exact:!0},{path:"/blog/tags/affected",component:p("/blog/tags/affected","46a"),exact:!0},{path:"/blog/tags/alias",component:p("/blog/tags/alias","2c5"),exact:!0},{path:"/blog/tags/bin",component:p("/blog/tags/bin","cb0"),exact:!0},{path:"/blog/tags/cache",component:p("/blog/tags/cache","5e3"),exact:!0},{path:"/blog/tags/canary",component:p("/blog/tags/canary","f59"),exact:!0},{path:"/blog/tags/checksum",component:p("/blog/tags/checksum","128"),exact:!0},{path:"/blog/tags/ci",component:p("/blog/tags/ci","6e4"),exact:!0},{path:"/blog/tags/clean",component:p("/blog/tags/clean","b52"),exact:!0},{path:"/blog/tags/code",component:p("/blog/tags/code","c6b"),exact:!0},{path:"/blog/tags/config",component:p("/blog/tags/config","a74"),exact:!0},{path:"/blog/tags/constraints",component:p("/blog/tags/constraints","423"),exact:!0},{path:"/blog/tags/debug",component:p("/blog/tags/debug","6b2"),exact:!0},{path:"/blog/tags/deno",component:p("/blog/tags/deno","a92"),exact:!0},{path:"/blog/tags/dep-graph",component:p("/blog/tags/dep-graph","022"),exact:!0},{path:"/blog/tags/dependency",component:p("/blog/tags/dependency","ea3"),exact:!0},{path:"/blog/tags/detect",component:p("/blog/tags/detect","d08"),exact:!0},{path:"/blog/tags/docker",component:p("/blog/tags/docker","2ae"),exact:!0},{path:"/blog/tags/editors",component:p("/blog/tags/editors","757"),exact:!0},{path:"/blog/tags/env-vars",component:p("/blog/tags/env-vars","ba2"),exact:!0},{path:"/blog/tags/errors",component:p("/blog/tags/errors","b3f"),exact:!0},{path:"/blog/tags/generator",component:p("/blog/tags/generator","fb2"),exact:!0},{path:"/blog/tags/git",component:p("/blog/tags/git","3bf"),exact:!0},{path:"/blog/tags/github",component:p("/blog/tags/github","9dc"),exact:!0},{path:"/blog/tags/global",component:p("/blog/tags/global","ed7"),exact:!0},{path:"/blog/tags/globals",component:p("/blog/tags/globals","c1f"),exact:!0},{path:"/blog/tags/go",component:p("/blog/tags/go","793"),exact:!0},{path:"/blog/tags/graph",component:p("/blog/tags/graph","017"),exact:!0},{path:"/blog/tags/hash",component:p("/blog/tags/hash","da9"),exact:!0},{path:"/blog/tags/hasher",component:p("/blog/tags/hasher","1f3"),exact:!0},{path:"/blog/tags/hooks",component:p("/blog/tags/hooks","715"),exact:!0},{path:"/blog/tags/http",component:p("/blog/tags/http","31c"),exact:!0},{path:"/blog/tags/hydration",component:p("/blog/tags/hydration","147"),exact:!0},{path:"/blog/tags/ignore",component:p("/blog/tags/ignore","d3a"),exact:!0},{path:"/blog/tags/index",component:p("/blog/tags/index","763"),exact:!0},{path:"/blog/tags/inheritance",component:p("/blog/tags/inheritance","db9"),exact:!0},{path:"/blog/tags/init",component:p("/blog/tags/init","268"),exact:!0},{path:"/blog/tags/lang",component:p("/blog/tags/lang","a50"),exact:!0},{path:"/blog/tags/language",component:p("/blog/tags/language","abc"),exact:!0},{path:"/blog/tags/life",component:p("/blog/tags/life","8d8"),exact:!0},{path:"/blog/tags/local",component:p("/blog/tags/local","634"),exact:!0},{path:"/blog/tags/log",component:p("/blog/tags/log","1c5"),exact:!0},{path:"/blog/tags/logging",component:p("/blog/tags/logging","37d"),exact:!0},{path:"/blog/tags/migrate",component:p("/blog/tags/migrate","776"),exact:!0},{path:"/blog/tags/monorepo",component:p("/blog/tags/monorepo","a85"),exact:!0},{path:"/blog/tags/moonbase",component:p("/blog/tags/moonbase","b71"),exact:!0},{path:"/blog/tags/node",component:p("/blog/tags/node","673"),exact:!0},{path:"/blog/tags/notifier",component:p("/blog/tags/notifier","2fe"),exact:!0},{path:"/blog/tags/npm",component:p("/blog/tags/npm","f7d"),exact:!0},{path:"/blog/tags/offline",component:p("/blog/tags/offline","82f"),exact:!0},{path:"/blog/tags/outdated",component:p("/blog/tags/outdated","084"),exact:!0},{path:"/blog/tags/owners",component:p("/blog/tags/owners","368"),exact:!0},{path:"/blog/tags/ownership",component:p("/blog/tags/ownership","4e9"),exact:!0},{path:"/blog/tags/pin",component:p("/blog/tags/pin","01f"),exact:!0},{path:"/blog/tags/pipeline",component:p("/blog/tags/pipeline","75d"),exact:!0},{path:"/blog/tags/platform",component:p("/blog/tags/platform","099"),exact:!0},{path:"/blog/tags/plugin",component:p("/blog/tags/plugin","100"),exact:!0},{path:"/blog/tags/plugins",component:p("/blog/tags/plugins","c8f"),exact:!0},{path:"/blog/tags/project",component:p("/blog/tags/project","b7b"),exact:!0},{path:"/blog/tags/project-graph",component:p("/blog/tags/project-graph","adf"),exact:!0},{path:"/blog/tags/projects",component:p("/blog/tags/projects","fe7"),exact:!0},{path:"/blog/tags/proto",component:p("/blog/tags/proto","02b"),exact:!0},{path:"/blog/tags/proto/page/2",component:p("/blog/tags/proto/page/2","0cf"),exact:!0},{path:"/blog/tags/proto/page/3",component:p("/blog/tags/proto/page/3","636"),exact:!0},{path:"/blog/tags/python",component:p("/blog/tags/python","253"),exact:!0},{path:"/blog/tags/qol",component:p("/blog/tags/qol","c36"),exact:!0},{path:"/blog/tags/quality",component:p("/blog/tags/quality","17c"),exact:!0},{path:"/blog/tags/query",component:p("/blog/tags/query","e4e"),exact:!0},{path:"/blog/tags/railway",component:p("/blog/tags/railway","c2c"),exact:!0},{path:"/blog/tags/registry",component:p("/blog/tags/registry","e67"),exact:!0},{path:"/blog/tags/remote-cache",component:p("/blog/tags/remote-cache","49b"),exact:!0},{path:"/blog/tags/rfc",component:p("/blog/tags/rfc","8be"),exact:!0},{path:"/blog/tags/roadmap",component:p("/blog/tags/roadmap","c41"),exact:!0},{path:"/blog/tags/run",component:p("/blog/tags/run","309"),exact:!0},{path:"/blog/tags/runner",component:p("/blog/tags/runner","d26"),exact:!0},{path:"/blog/tags/rust",component:p("/blog/tags/rust","cf6"),exact:!0},{path:"/blog/tags/schema",component:p("/blog/tags/schema","abe"),exact:!0},{path:"/blog/tags/shim",component:p("/blog/tags/shim","8e0"),exact:!0},{path:"/blog/tags/shorthand",component:p("/blog/tags/shorthand","421"),exact:!0},{path:"/blog/tags/source",component:p("/blog/tags/source","3fc"),exact:!0},{path:"/blog/tags/survey",component:p("/blog/tags/survey","7e5"),exact:!0},{path:"/blog/tags/tag",component:p("/blog/tags/tag","2cb"),exact:!0},{path:"/blog/tags/tags",component:p("/blog/tags/tags","829"),exact:!0},{path:"/blog/tags/target",component:p("/blog/tags/target","aed"),exact:!0},{path:"/blog/tags/task",component:p("/blog/tags/task","a06"),exact:!0},{path:"/blog/tags/tasks",component:p("/blog/tags/tasks","301"),exact:!0},{path:"/blog/tags/tier",component:p("/blog/tags/tier","f53"),exact:!0},{path:"/blog/tags/tokens",component:p("/blog/tags/tokens","faf"),exact:!0},{path:"/blog/tags/toml",component:p("/blog/tags/toml","1de"),exact:!0},{path:"/blog/tags/tool",component:p("/blog/tags/tool","864"),exact:!0},{path:"/blog/tags/toolchain",component:p("/blog/tags/toolchain","619"),exact:!0},{path:"/blog/tags/typescript",component:p("/blog/tags/typescript","a74"),exact:!0},{path:"/blog/tags/vcs",component:p("/blog/tags/vcs","cd2"),exact:!0},{path:"/blog/tags/version",component:p("/blog/tags/version","c87"),exact:!0},{path:"/blog/tags/vscode",component:p("/blog/tags/vscode","bcd"),exact:!0},{path:"/blog/tags/wasm",component:p("/blog/tags/wasm","463"),exact:!0},{path:"/blog/typescript-monorepo",component:p("/blog/typescript-monorepo","cd0"),exact:!0},{path:"/blog/v0.13",component:p("/blog/v0.13","d46"),exact:!0},{path:"/blog/v0.14",component:p("/blog/v0.14","934"),exact:!0},{path:"/blog/v0.15",component:p("/blog/v0.15","6da"),exact:!0},{path:"/blog/v0.16",component:p("/blog/v0.16","f88"),exact:!0},{path:"/blog/v0.17",component:p("/blog/v0.17","841"),exact:!0},{path:"/blog/v0.18",component:p("/blog/v0.18","825"),exact:!0},{path:"/blog/v0.19",component:p("/blog/v0.19","ad4"),exact:!0},{path:"/blog/v0.20",component:p("/blog/v0.20","311"),exact:!0},{path:"/blog/v0.21",component:p("/blog/v0.21","93d"),exact:!0},{path:"/blog/v0.22",component:p("/blog/v0.22","4f4"),exact:!0},{path:"/blog/v0.23",component:p("/blog/v0.23","d9e"),exact:!0},{path:"/blog/v0.24",component:p("/blog/v0.24","c6b"),exact:!0},{path:"/blog/v0.25",component:p("/blog/v0.25","616"),exact:!0},{path:"/blog/v0.26",component:p("/blog/v0.26","7ee"),exact:!0},{path:"/blog/vscode-extension",component:p("/blog/vscode-extension","c62"),exact:!0},{path:"/docs/tags",component:p("/docs/tags","a68"),exact:!0},{path:"/docs/tags/code",component:p("/docs/tags/code","d62"),exact:!0},{path:"/docs/tags/codegen",component:p("/docs/tags/codegen","e89"),exact:!0},{path:"/docs/tags/codeowners",component:p("/docs/tags/codeowners","c50"),exact:!0},{path:"/docs/tags/generator",component:p("/docs/tags/generator","4f0"),exact:!0},{path:"/docs/tags/git",component:p("/docs/tags/git","cd5"),exact:!0},{path:"/docs/tags/git-hooks",component:p("/docs/tags/git-hooks","0b5"),exact:!0},{path:"/docs/tags/hooks",component:p("/docs/tags/hooks","9fb"),exact:!0},{path:"/docs/tags/lang",component:p("/docs/tags/lang","0f7"),exact:!0},{path:"/docs/tags/mql",component:p("/docs/tags/mql","b60"),exact:!0},{path:"/docs/tags/owners",component:p("/docs/tags/owners","a7d"),exact:!0},{path:"/docs/tags/query",component:p("/docs/tags/query","532"),exact:!0},{path:"/docs/tags/scaffold",component:p("/docs/tags/scaffold","018"),exact:!0},{path:"/docs/tags/solid",component:p("/docs/tags/solid","870"),exact:!0},{path:"/docs/tags/solidjs",component:p("/docs/tags/solidjs","25a"),exact:!0},{path:"/docs/tags/template",component:p("/docs/tags/template","67d"),exact:!0},{path:"/docs/tags/vcs",component:p("/docs/tags/vcs","bb1"),exact:!0},{path:"/moon",component:p("/moon","b34"),exact:!0},{path:"/moonbase",component:p("/moonbase","1fb"),exact:!0},{path:"/proto",component:p("/proto","f87"),exact:!0},{path:"/search",component:p("/search","6e4"),exact:!0},{path:"/api",component:p("/api","cd8"),routes:[{path:"/api",component:p("/api","710"),exact:!0,sidebar:"api"},{path:"/api/report",component:p("/api/report","57a"),exact:!0,sidebar:"api",id:1},{path:"/api/report/function/formatDuration",component:p("/api/report/function/formatDuration","cd9"),exact:!0,sidebar:"api",id:44},{path:"/api/report/function/formatTime",component:p("/api/report/function/formatTime","3d7"),exact:!0,sidebar:"api",id:39},{path:"/api/report/function/getDurationInMillis",component:p("/api/report/function/getDurationInMillis","fa4"),exact:!0,sidebar:"api",id:36},{path:"/api/report/function/getIconForStatus",component:p("/api/report/function/getIconForStatus","f25"),exact:!0,sidebar:"api",id:4},{path:"/api/report/function/hasFailed",component:p("/api/report/function/hasFailed","72a"),exact:!0,sidebar:"api",id:7},{path:"/api/report/function/hasPassed",component:p("/api/report/function/hasPassed","c15"),exact:!0,sidebar:"api",id:10},{path:"/api/report/function/isFlaky",component:p("/api/report/function/isFlaky","d55"),exact:!0,sidebar:"api",id:13},{path:"/api/report/function/isSlow",component:p("/api/report/function/isSlow","5b3"),exact:!0,sidebar:"api",id:16},{path:"/api/report/function/prepareReportActions",component:p("/api/report/function/prepareReportActions","619"),exact:!0,sidebar:"api",id:25},{path:"/api/report/function/sortReport",component:p("/api/report/function/sortReport","7b7"),exact:!0,sidebar:"api",id:20},{path:"/api/report/interface/PreparedAction",component:p("/api/report/interface/PreparedAction","b0e"),exact:!0,sidebar:"api",id:29},{path:"/api/runtime",component:p("/api/runtime","e4a"),exact:!0,sidebar:"api",id:2},{path:"/api/runtime/function/getContext",component:p("/api/runtime/function/getContext","ba3"),exact:!0,sidebar:"api",id:47},{path:"/api/runtime/interface/RuntimeContext",component:p("/api/runtime/interface/RuntimeContext","b42"),exact:!0,sidebar:"api",id:49},{path:"/api/types",component:p("/api/types","a7c"),exact:!0,sidebar:"api",id:3},{path:"/api/types/interface/Action",component:p("/api/types/interface/Action","5f0"),exact:!0,sidebar:"api",id:180},{path:"/api/types/interface/ActionContext",component:p("/api/types/interface/ActionContext","bb7"),exact:!0,sidebar:"api",id:195},{path:"/api/types/interface/ActionNodeInstallDeps",component:p("/api/types/interface/ActionNodeInstallDeps","418"),exact:!0,sidebar:"api",id:221},{path:"/api/types/interface/ActionNodeInstallProjectDeps",component:p("/api/types/interface/ActionNodeInstallProjectDeps","48d"),exact:!0,sidebar:"api",id:226},{path:"/api/types/interface/ActionNodeRunTask",component:p("/api/types/interface/ActionNodeRunTask","80f"),exact:!0,sidebar:"api",id:232},{path:"/api/types/interface/ActionNodeSetupTool",component:p("/api/types/interface/ActionNodeSetupTool","ca5"),exact:!0,sidebar:"api",id:240},{path:"/api/types/interface/ActionNodeSyncProject",component:p("/api/types/interface/ActionNodeSyncProject","8d5"),exact:!0,sidebar:"api",id:245},{path:"/api/types/interface/ActionNodeSyncWorkspace",component:p("/api/types/interface/ActionNodeSyncWorkspace","e99"),exact:!0,sidebar:"api",id:251},{path:"/api/types/interface/Attempt",component:p("/api/types/interface/Attempt","556"),exact:!0,sidebar:"api",id:174},{path:"/api/types/interface/BinConfig",component:p("/api/types/interface/BinConfig","064"),exact:!0,sidebar:"api",id:627},{path:"/api/types/interface/CodeownersConfig",component:p("/api/types/interface/CodeownersConfig","c4e"),exact:!0,sidebar:"api",id:738},{path:"/api/types/interface/ConstraintsConfig",component:p("/api/types/interface/ConstraintsConfig","b7e"),exact:!0,sidebar:"api",id:742},{path:"/api/types/interface/DenoConfig",component:p("/api/types/interface/DenoConfig","ebb"),exact:!0,sidebar:"api",id:633},{path:"/api/types/interface/DependencyConfig",component:p("/api/types/interface/DependencyConfig","f20"),exact:!0,sidebar:"api",id:363},{path:"/api/types/interface/Duration",component:p("/api/types/interface/Duration","f37"),exact:!0,sidebar:"api",id:56},{path:"/api/types/interface/EventActionFinished",component:p("/api/types/interface/EventActionFinished","997"),exact:!0,sidebar:"api",id:85},{path:"/api/types/interface/EventActionStarted",component:p("/api/types/interface/EventActionStarted","44f"),exact:!0,sidebar:"api",id:81},{path:"/api/types/interface/EventDependenciesInstalled",component:p("/api/types/interface/EventDependenciesInstalled","a7d"),exact:!0,sidebar:"api",id:94},{path:"/api/types/interface/EventDependenciesInstalling",component:p("/api/types/interface/EventDependenciesInstalling","4d6"),exact:!0,sidebar:"api",id:90},{path:"/api/types/interface/EventPipelineAborted",component:p("/api/types/interface/EventPipelineAborted","1fe"),exact:!0,sidebar:"api",id:108},{path:"/api/types/interface/EventPipelineFinished",component:p("/api/types/interface/EventPipelineFinished","d46"),exact:!0,sidebar:"api",id:115},{path:"/api/types/interface/EventPipelineStarted",component:p("/api/types/interface/EventPipelineStarted","8fb"),exact:!0,sidebar:"api",id:111},{path:"/api/types/interface/EventProjectSynced",component:p("/api/types/interface/EventProjectSynced","c2f"),exact:!0,sidebar:"api",id:103},{path:"/api/types/interface/EventProjectSyncing",component:p("/api/types/interface/EventProjectSyncing","38d"),exact:!0,sidebar:"api",id:99},{path:"/api/types/interface/EventTargetOutputArchived",component:p("/api/types/interface/EventTargetOutputArchived","346"),exact:!0,sidebar:"api",id:137},{path:"/api/types/interface/EventTargetOutputArchiving",component:p("/api/types/interface/EventTargetOutputArchiving","e9e"),exact:!0,sidebar:"api",id:131},{path:"/api/types/interface/EventTargetOutputCacheCheck",component:p("/api/types/interface/EventTargetOutputCacheCheck","231"),exact:!0,sidebar:"api",id:157},{path:"/api/types/interface/EventTargetOutputHydrated",component:p("/api/types/interface/EventTargetOutputHydrated","1ee"),exact:!0,sidebar:"api",id:150},{path:"/api/types/interface/EventTargetOutputHydrating",component:p("/api/types/interface/EventTargetOutputHydrating","3ae"),exact:!0,sidebar:"api",id:144},{path:"/api/types/interface/EventTargetRan",component:p("/api/types/interface/EventTargetRan","f59"),exact:!0,sidebar:"api",id:127},{path:"/api/types/interface/EventTargetRunning",component:p("/api/types/interface/EventTargetRunning","42a"),exact:!0,sidebar:"api",id:124},{path:"/api/types/interface/EventToolInstalled",component:p("/api/types/interface/EventToolInstalled","ac8"),exact:!0,sidebar:"api",id:164},{path:"/api/types/interface/EventToolInstalling",component:p("/api/types/interface/EventToolInstalling","09f"),exact:!0,sidebar:"api",id:161},{path:"/api/types/interface/EventWorkspaceSynced",component:p("/api/types/interface/EventWorkspaceSynced","ca8"),exact:!0,sidebar:"api",id:170},{path:"/api/types/interface/ExperimentsConfig",component:p("/api/types/interface/ExperimentsConfig","9c3"),exact:!0,sidebar:"api",id:745},{path:"/api/types/interface/FileGroup",component:p("/api/types/interface/FileGroup","fbb"),exact:!0,sidebar:"api",id:255},{path:"/api/types/interface/GeneratorConfig",component:p("/api/types/interface/GeneratorConfig","4cc"),exact:!0,sidebar:"api",id:747},{path:"/api/types/interface/HasherConfig",component:p("/api/types/interface/HasherConfig","dce"),exact:!0,sidebar:"api",id:749},{path:"/api/types/interface/InheritedTasksConfig",component:p("/api/types/interface/InheritedTasksConfig","481"),exact:!0,sidebar:"api",id:488},{path:"/api/types/interface/NodeConfig",component:p("/api/types/interface/NodeConfig","c81"),exact:!0,sidebar:"api",id:648},{path:"/api/types/interface/NotifierConfig",component:p("/api/types/interface/NotifierConfig","acd"),exact:!0,sidebar:"api",id:756},{path:"/api/types/interface/NpmConfig",component:p("/api/types/interface/NpmConfig","448"),exact:!0,sidebar:"api",id:638},{path:"/api/types/interface/OwnersConfig",component:p("/api/types/interface/OwnersConfig","7b9"),exact:!0,sidebar:"api",id:370},{path:"/api/types/interface/PartialBinConfig",component:p("/api/types/interface/PartialBinConfig","5cf"),exact:!0,sidebar:"api",id:567},{path:"/api/types/interface/PartialCodeownersConfig",component:p("/api/types/interface/PartialCodeownersConfig","b6e"),exact:!0,sidebar:"api",id:684},{path:"/api/types/interface/PartialConstraintsConfig",component:p("/api/types/interface/PartialConstraintsConfig","a0e"),exact:!0,sidebar:"api",id:688},{path:"/api/types/interface/PartialDenoConfig",component:p("/api/types/interface/PartialDenoConfig","26c"),exact:!0,sidebar:"api",id:573},{path:"/api/types/interface/PartialDependencyConfig",component:p("/api/types/interface/PartialDependencyConfig","eb0"),exact:!0,sidebar:"api",id:311},{path:"/api/types/interface/PartialExperimentsConfig",component:p("/api/types/interface/PartialExperimentsConfig","f6b"),exact:!0,sidebar:"api",id:691},{path:"/api/types/interface/PartialGeneratorConfig",component:p("/api/types/interface/PartialGeneratorConfig","3f3"),exact:!0,sidebar:"api",id:693},{path:"/api/types/interface/PartialHasherConfig",component:p("/api/types/interface/PartialHasherConfig","b54"),exact:!0,sidebar:"api",id:697},{path:"/api/types/interface/PartialInheritedTasksConfig",component:p("/api/types/interface/PartialInheritedTasksConfig","c99"),exact:!0,sidebar:"api",id:450},{path:"/api/types/interface/PartialNodeConfig",component:p("/api/types/interface/PartialNodeConfig","1ba"),exact:!0,sidebar:"api",id:592},{path:"/api/types/interface/PartialNotifierConfig",component:p("/api/types/interface/PartialNotifierConfig","f70"),exact:!0,sidebar:"api",id:704},{path:"/api/types/interface/PartialNpmConfig",component:p("/api/types/interface/PartialNpmConfig","c1a"),exact:!0,sidebar:"api",id:580},{path:"/api/types/interface/PartialOwnersConfig",component:p("/api/types/interface/PartialOwnersConfig","10e"),exact:!0,sidebar:"api",id:319},{path:"/api/types/interface/PartialPnpmConfig",component:p("/api/types/interface/PartialPnpmConfig","9cc"),exact:!0,sidebar:"api",id:584},{path:"/api/types/interface/PartialProjectConfig",component:p("/api/types/interface/PartialProjectConfig","10d"),exact:!0,sidebar:"api",id:349},{path:"/api/types/interface/PartialProjectMetadataConfig",component:p("/api/types/interface/PartialProjectMetadataConfig","346"),exact:!0,sidebar:"api",id:325},{path:"/api/types/interface/PartialProjectToolchainCommonToolConfig",component:p("/api/types/interface/PartialProjectToolchainCommonToolConfig","542"),exact:!0,sidebar:"api",id:331},{path:"/api/types/interface/PartialProjectToolchainConfig",component:p("/api/types/interface/PartialProjectToolchainConfig","86b"),exact:!0,sidebar:"api",id:338},{path:"/api/types/interface/PartialProjectToolchainTypeScriptConfig",component:p("/api/types/interface/PartialProjectToolchainTypeScriptConfig","4a7"),exact:!0,sidebar:"api",id:333},{path:"/api/types/interface/PartialProjectWorkspaceConfig",component:p("/api/types/interface/PartialProjectWorkspaceConfig","f17"),exact:!0,sidebar:"api",id:347},{path:"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig",component:p("/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig","195"),exact:!0,sidebar:"api",id:343},{path:"/api/types/interface/PartialRunnerConfig",component:p("/api/types/interface/PartialRunnerConfig","0c7"),exact:!0,sidebar:"api",id:710},{path:"/api/types/interface/PartialRustConfig",component:p("/api/types/interface/PartialRustConfig","0c2"),exact:!0,sidebar:"api",id:607},{path:"/api/types/interface/PartialTaskConfig",component:p("/api/types/interface/PartialTaskConfig","79a"),exact:!0,sidebar:"api",id:438},{path:"/api/types/interface/PartialTaskOptionsConfig",component:p("/api/types/interface/PartialTaskOptionsConfig","e8f"),exact:!0,sidebar:"api",id:418},{path:"/api/types/interface/PartialTemplateConfig",component:p("/api/types/interface/PartialTemplateConfig","9e8"),exact:!0,sidebar:"api",id:521},{path:"/api/types/interface/PartialTemplateFrontmatterConfig",component:p("/api/types/interface/PartialTemplateFrontmatterConfig","8e5"),exact:!0,sidebar:"api",id:526},{path:"/api/types/interface/PartialTemplateVariableBoolSetting",component:p("/api/types/interface/PartialTemplateVariableBoolSetting","38b"),exact:!0,sidebar:"api",id:495},{path:"/api/types/interface/PartialTemplateVariableEnumSetting",component:p("/api/types/interface/PartialTemplateVariableEnumSetting","23b"),exact:!0,sidebar:"api",id:504},{path:"/api/types/interface/PartialTemplateVariableEnumValueConfig",component:p("/api/types/interface/PartialTemplateVariableEnumValueConfig","442"),exact:!0,sidebar:"api",id:500},{path:"/api/types/interface/PartialTemplateVariableNumberSetting",component:p("/api/types/interface/PartialTemplateVariableNumberSetting","a8c"),exact:!0,sidebar:"api",id:510},{path:"/api/types/interface/PartialTemplateVariableStringSetting",component:p("/api/types/interface/PartialTemplateVariableStringSetting","1a4"),exact:!0,sidebar:"api",id:515},{path:"/api/types/interface/PartialToolchainConfig",component:p("/api/types/interface/PartialToolchainConfig","759"),exact:!0,sidebar:"api",id:620},{path:"/api/types/interface/PartialTypeScriptConfig",component:p("/api/types/interface/PartialTypeScriptConfig","854"),exact:!0,sidebar:"api",id:612},{path:"/api/types/interface/PartialVcsConfig",component:p("/api/types/interface/PartialVcsConfig","75a"),exact:!0,sidebar:"api",id:717},{path:"/api/types/interface/PartialWorkspaceConfig",component:p("/api/types/interface/PartialWorkspaceConfig","b57"),exact:!0,sidebar:"api",id:724},{path:"/api/types/interface/PartialWorkspaceProjectsConfig",component:p("/api/types/interface/PartialWorkspaceProjectsConfig","242"),exact:!0,sidebar:"api",id:706},{path:"/api/types/interface/PartialYarnConfig",component:p("/api/types/interface/PartialYarnConfig","91c"),exact:!0,sidebar:"api",id:588},{path:"/api/types/interface/PnpmConfig",component:p("/api/types/interface/PnpmConfig","e25"),exact:!0,sidebar:"api",id:641},{path:"/api/types/interface/Project",component:p("/api/types/interface/Project","817"),exact:!0,sidebar:"api",id:292},{path:"/api/types/interface/ProjectConfig",component:p("/api/types/interface/ProjectConfig","0f3"),exact:!0,sidebar:"api",id:399},{path:"/api/types/interface/ProjectMetadataConfig",component:p("/api/types/interface/ProjectMetadataConfig","4b0"),exact:!0,sidebar:"api",id:376},{path:"/api/types/interface/ProjectToolchainCommonToolConfig",component:p("/api/types/interface/ProjectToolchainCommonToolConfig","832"),exact:!0,sidebar:"api",id:382},{path:"/api/types/interface/ProjectToolchainConfig",component:p("/api/types/interface/ProjectToolchainConfig","5f0"),exact:!0,sidebar:"api",id:389},{path:"/api/types/interface/ProjectToolchainTypeScriptConfig",component:p("/api/types/interface/ProjectToolchainTypeScriptConfig","481"),exact:!0,sidebar:"api",id:384},{path:"/api/types/interface/ProjectWorkspaceConfig",component:p("/api/types/interface/ProjectWorkspaceConfig","1bf"),exact:!0,sidebar:"api",id:397},{path:"/api/types/interface/ProjectWorkspaceInheritedTasksConfig",component:p("/api/types/interface/ProjectWorkspaceInheritedTasksConfig","503"),exact:!0,sidebar:"api",id:393},{path:"/api/types/interface/ProviderEnvironment",component:p("/api/types/interface/ProviderEnvironment","390"),exact:!0,sidebar:"api",id:63},{path:"/api/types/interface/RunnerConfig",component:p("/api/types/interface/RunnerConfig","937"),exact:!0,sidebar:"api",id:762},{path:"/api/types/interface/RunReport",component:p("/api/types/interface/RunReport","0da"),exact:!0,sidebar:"api",id:204},{path:"/api/types/interface/Runtime",component:p("/api/types/interface/Runtime","3de"),exact:!0,sidebar:"api",id:59},{path:"/api/types/interface/RustConfig",component:p("/api/types/interface/RustConfig","3b7"),exact:!0,sidebar:"api",id:663},{path:"/api/types/interface/TargetState",component:p("/api/types/interface/TargetState","d71"),exact:!0,sidebar:"api",id:192},{path:"/api/types/interface/Task",component:p("/api/types/interface/Task","753"),exact:!0,sidebar:"api",id:275},{path:"/api/types/interface/TaskConfig",component:p("/api/types/interface/TaskConfig","2f8"),exact:!0,sidebar:"api",id:476},{path:"/api/types/interface/TaskOptions",component:p("/api/types/interface/TaskOptions","764"),exact:!0,sidebar:"api",id:259},{path:"/api/types/interface/TaskOptionsConfig",component:p("/api/types/interface/TaskOptionsConfig","641"),exact:!0,sidebar:"api",id:458},{path:"/api/types/interface/TemplateConfig",component:p("/api/types/interface/TemplateConfig","920"),exact:!0,sidebar:"api",id:557},{path:"/api/types/interface/TemplateFrontmatterConfig",component:p("/api/types/interface/TemplateFrontmatterConfig","899"),exact:!0,sidebar:"api",id:562},{path:"/api/types/interface/TemplateVariableBoolSetting",component:p("/api/types/interface/TemplateVariableBoolSetting","4ef"),exact:!0,sidebar:"api",id:531},{path:"/api/types/interface/TemplateVariableEnumSetting",component:p("/api/types/interface/TemplateVariableEnumSetting","45d"),exact:!0,sidebar:"api",id:540},{path:"/api/types/interface/TemplateVariableEnumValueConfig",component:p("/api/types/interface/TemplateVariableEnumValueConfig","065"),exact:!0,sidebar:"api",id:536},{path:"/api/types/interface/TemplateVariableNumberSetting",component:p("/api/types/interface/TemplateVariableNumberSetting","284"),exact:!0,sidebar:"api",id:546},{path:"/api/types/interface/TemplateVariableStringSetting",component:p("/api/types/interface/TemplateVariableStringSetting","bf1"),exact:!0,sidebar:"api",id:551},{path:"/api/types/interface/ToolchainConfig",component:p("/api/types/interface/ToolchainConfig","6b5"),exact:!0,sidebar:"api",id:676},{path:"/api/types/interface/TypeScriptConfig",component:p("/api/types/interface/TypeScriptConfig","c60"),exact:!0,sidebar:"api",id:668},{path:"/api/types/interface/VcsConfig",component:p("/api/types/interface/VcsConfig","e81"),exact:!0,sidebar:"api",id:767},{path:"/api/types/interface/WebhookPayload",component:p("/api/types/interface/WebhookPayload","0a8"),exact:!0,sidebar:"api",id:72},{path:"/api/types/interface/WorkspaceConfig",component:p("/api/types/interface/WorkspaceConfig","988"),exact:!0,sidebar:"api",id:774},{path:"/api/types/interface/WorkspaceProjectsConfig",component:p("/api/types/interface/WorkspaceProjectsConfig","31a"),exact:!0,sidebar:"api",id:758},{path:"/api/types/interface/YarnConfig",component:p("/api/types/interface/YarnConfig","e2e"),exact:!0,sidebar:"api",id:644}]},{path:"/docs",component:p("/docs","489"),routes:[{path:"/docs",component:p("/docs","80c"),exact:!0,sidebar:"docs"},{path:"/docs/cheat-sheet",component:p("/docs/cheat-sheet","53d"),exact:!0,sidebar:"docs"},{path:"/docs/commands",component:p("/docs/commands","993"),exact:!0,sidebar:"docs"},{path:"/docs/commands/action-graph",component:p("/docs/commands/action-graph","d0e"),exact:!0,sidebar:"docs"},{path:"/docs/commands/bin",component:p("/docs/commands/bin","e39"),exact:!0,sidebar:"docs"},{path:"/docs/commands/check",component:p("/docs/commands/check","cf6"),exact:!0,sidebar:"docs"},{path:"/docs/commands/ci",component:p("/docs/commands/ci","f74"),exact:!0,sidebar:"docs"},{path:"/docs/commands/clean",component:p("/docs/commands/clean","9b0"),exact:!0,sidebar:"docs"},{path:"/docs/commands/completions",component:p("/docs/commands/completions","f1b"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker",component:p("/docs/commands/docker","4ed"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker/prune",component:p("/docs/commands/docker/prune","fc8"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker/scaffold",component:p("/docs/commands/docker/scaffold","d55"),exact:!0,sidebar:"docs"},{path:"/docs/commands/docker/setup",component:p("/docs/commands/docker/setup","2af"),exact:!0,sidebar:"docs"},{path:"/docs/commands/generate",component:p("/docs/commands/generate","0ff"),exact:!0,sidebar:"docs"},{path:"/docs/commands/init",component:p("/docs/commands/init","28a"),exact:!0,sidebar:"docs"},{path:"/docs/commands/migrate",component:p("/docs/commands/migrate","4df"),exact:!0,sidebar:"docs"},{path:"/docs/commands/migrate/from-package-json",component:p("/docs/commands/migrate/from-package-json","869"),exact:!0,sidebar:"docs"},{path:"/docs/commands/migrate/from-turborepo",component:p("/docs/commands/migrate/from-turborepo","36a"),exact:!0,sidebar:"docs"},{path:"/docs/commands/overview",component:p("/docs/commands/overview","c3f"),exact:!0,sidebar:"docs"},{path:"/docs/commands/project",component:p("/docs/commands/project","225"),exact:!0,sidebar:"docs"},{path:"/docs/commands/project-graph",component:p("/docs/commands/project-graph","49c"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query",component:p("/docs/commands/query","0ed"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/hash",component:p("/docs/commands/query/hash","390"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/hash-diff",component:p("/docs/commands/query/hash-diff","f4c"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/projects",component:p("/docs/commands/query/projects","9e0"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/tasks",component:p("/docs/commands/query/tasks","d45"),exact:!0,sidebar:"docs"},{path:"/docs/commands/query/touched-files",component:p("/docs/commands/query/touched-files","ea7"),exact:!0,sidebar:"docs"},{path:"/docs/commands/run",component:p("/docs/commands/run","a21"),exact:!0,sidebar:"docs"},{path:"/docs/commands/setup",component:p("/docs/commands/setup","187"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync",component:p("/docs/commands/sync","193"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync/codeowners",component:p("/docs/commands/sync/codeowners","49c"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync/hooks",component:p("/docs/commands/sync/hooks","885"),exact:!0,sidebar:"docs"},{path:"/docs/commands/sync/projects",component:p("/docs/commands/sync/projects","7d5"),exact:!0,sidebar:"docs"},{path:"/docs/commands/task",component:p("/docs/commands/task","d57"),exact:!0,sidebar:"docs"},{path:"/docs/commands/teardown",component:p("/docs/commands/teardown","b70"),exact:!0,sidebar:"docs"},{path:"/docs/commands/upgrade",component:p("/docs/commands/upgrade","a78"),exact:!0,sidebar:"docs"},{path:"/docs/comparison",component:p("/docs/comparison","6c8"),exact:!0,sidebar:"docs"},{path:"/docs/concepts",component:p("/docs/concepts","04b"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/cache",component:p("/docs/concepts/cache","0e8"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/file-group",component:p("/docs/concepts/file-group","759"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/file-pattern",component:p("/docs/concepts/file-pattern","1ab"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/project",component:p("/docs/concepts/project","6bd"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/query-lang",component:p("/docs/concepts/query-lang","5d7"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/target",component:p("/docs/concepts/target","04a"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/task",component:p("/docs/concepts/task","85c"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/task-inheritance",component:p("/docs/concepts/task-inheritance","c5a"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/token",component:p("/docs/concepts/token","3e2"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/toolchain",component:p("/docs/concepts/toolchain","26e"),exact:!0,sidebar:"docs"},{path:"/docs/concepts/workspace",component:p("/docs/concepts/workspace","3e1"),exact:!0,sidebar:"docs"},{path:"/docs/config",component:p("/docs/config","c27"),exact:!0,sidebar:"docs"},{path:"/docs/config/project",component:p("/docs/config/project","7fc"),exact:!0,sidebar:"docs"},{path:"/docs/config/tasks",component:p("/docs/config/tasks","7d1"),exact:!0,sidebar:"docs"},{path:"/docs/config/template",component:p("/docs/config/template","eeb"),exact:!0,sidebar:"docs"},{path:"/docs/config/toolchain",component:p("/docs/config/toolchain","a71"),exact:!0,sidebar:"docs"},{path:"/docs/config/workspace",component:p("/docs/config/workspace","ceb"),exact:!0,sidebar:"docs"},{path:"/docs/create-project",component:p("/docs/create-project","2c7"),exact:!0,sidebar:"docs"},{path:"/docs/create-task",component:p("/docs/create-task","c85"),exact:!0,sidebar:"docs"},{path:"/docs/editors",component:p("/docs/editors","c15"),exact:!0,sidebar:"docs"},{path:"/docs/editors/vscode",component:p("/docs/editors/vscode","501"),exact:!0,sidebar:"docs"},{path:"/docs/faq",component:p("/docs/faq","fe9"),exact:!0,sidebar:"docs"},{path:"/docs/guides/ci",component:p("/docs/guides/ci","d5d"),exact:!0,sidebar:"guides"},{path:"/docs/guides/codegen",component:p("/docs/guides/codegen","527"),exact:!0,sidebar:"guides"},{path:"/docs/guides/codeowners",component:p("/docs/guides/codeowners","598"),exact:!0,sidebar:"guides"},{path:"/docs/guides/debug-task",component:p("/docs/guides/debug-task","fe5"),exact:!0,sidebar:"guides"},{path:"/docs/guides/docker",component:p("/docs/guides/docker","578"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/angular",component:p("/docs/guides/examples/angular","3ac"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/astro",component:p("/docs/guides/examples/astro","810"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/eslint",component:p("/docs/guides/examples/eslint","161"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/jest",component:p("/docs/guides/examples/jest","789"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/nest",component:p("/docs/guides/examples/nest","0d4"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/next",component:p("/docs/guides/examples/next","d2c"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/nuxt",component:p("/docs/guides/examples/nuxt","475"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/packemon",component:p("/docs/guides/examples/packemon","c08"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/prettier",component:p("/docs/guides/examples/prettier","fda"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/react",component:p("/docs/guides/examples/react","7da"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/remix",component:p("/docs/guides/examples/remix","a9b"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/solid",component:p("/docs/guides/examples/solid","00c"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/storybook",component:p("/docs/guides/examples/storybook","155"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/sveltekit",component:p("/docs/guides/examples/sveltekit","0c7"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/typescript",component:p("/docs/guides/examples/typescript","e4a"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/vite",component:p("/docs/guides/examples/vite","593"),exact:!0,sidebar:"guides"},{path:"/docs/guides/examples/vue",component:p("/docs/guides/examples/vue","5c0"),exact:!0,sidebar:"guides"},{path:"/docs/guides/javascript/deno-handbook",component:p("/docs/guides/javascript/deno-handbook","ef8"),exact:!0,sidebar:"guides"},{path:"/docs/guides/javascript/node-handbook",component:p("/docs/guides/javascript/node-handbook","f9e"),exact:!0,sidebar:"guides"},{path:"/docs/guides/javascript/typescript-eslint",component:p("/docs/guides/javascript/typescript-eslint","3a8"),exact:!0},{path:"/docs/guides/javascript/typescript-project-refs",component:p("/docs/guides/javascript/typescript-project-refs","e9d"),exact:!0,sidebar:"guides"},{path:"/docs/guides/node/examples",component:p("/docs/guides/node/examples","dd3"),exact:!0,sidebar:"guides"},{path:"/docs/guides/offline-mode",component:p("/docs/guides/offline-mode","422"),exact:!0,sidebar:"guides"},{path:"/docs/guides/open-source",component:p("/docs/guides/open-source","339"),exact:!0,sidebar:"guides"},{path:"/docs/guides/profile",component:p("/docs/guides/profile","b9d"),exact:!0,sidebar:"guides"},{path:"/docs/guides/remote-cache",component:p("/docs/guides/remote-cache","7a9"),exact:!0,sidebar:"guides"},{path:"/docs/guides/root-project",component:p("/docs/guides/root-project","272"),exact:!0,sidebar:"guides"},{path:"/docs/guides/rust/handbook",component:p("/docs/guides/rust/handbook","b00"),exact:!0,sidebar:"guides"},{path:"/docs/guides/sharing-config",component:p("/docs/guides/sharing-config","554"),exact:!0,sidebar:"guides"},{path:"/docs/guides/vcs-hooks",component:p("/docs/guides/vcs-hooks","c03"),exact:!0,sidebar:"guides"},{path:"/docs/guides/webhooks",component:p("/docs/guides/webhooks","b9d"),exact:!0,sidebar:"guides"},{path:"/docs/how-it-works",component:p("/docs/how-it-works","837"),exact:!0,sidebar:"docs"},{path:"/docs/how-it-works/action-graph",component:p("/docs/how-it-works/action-graph","f15"),exact:!0,sidebar:"docs"},{path:"/docs/how-it-works/languages",component:p("/docs/how-it-works/languages","165"),exact:!0,sidebar:"docs"},{path:"/docs/how-it-works/project-graph",component:p("/docs/how-it-works/project-graph","6b7"),exact:!0,sidebar:"docs"},{path:"/docs/install",component:p("/docs/install","7a2"),exact:!0,sidebar:"docs"},{path:"/docs/migrate-to-moon",component:p("/docs/migrate-to-moon","aa1"),exact:!0,sidebar:"docs"},{path:"/docs/proto",component:p("/docs/proto","7be"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/add-plugin",component:p("/docs/proto/commands/add-plugin","bda"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/alias",component:p("/docs/proto/commands/alias","8ad"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/bin",component:p("/docs/proto/commands/bin","dc5"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/clean",component:p("/docs/proto/commands/clean","740"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/completions",component:p("/docs/proto/commands/completions","87c"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/install",component:p("/docs/proto/commands/install","f7b"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/install-global",component:p("/docs/proto/commands/install-global","59f"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/list",component:p("/docs/proto/commands/list","50b"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/list-global",component:p("/docs/proto/commands/list-global","fb9"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/list-remote",component:p("/docs/proto/commands/list-remote","0b7"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/outdated",component:p("/docs/proto/commands/outdated","dba"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/pin",component:p("/docs/proto/commands/pin","65a"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/plugins",component:p("/docs/proto/commands/plugins","9c9"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/remove-plugin",component:p("/docs/proto/commands/remove-plugin","570"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/run",component:p("/docs/proto/commands/run","a65"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/setup",component:p("/docs/proto/commands/setup","735"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/tools",component:p("/docs/proto/commands/tools","092"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/unalias",component:p("/docs/proto/commands/unalias","734"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/uninstall",component:p("/docs/proto/commands/uninstall","bbc"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/uninstall-global",component:p("/docs/proto/commands/uninstall-global","10a"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/upgrade",component:p("/docs/proto/commands/upgrade","edc"),exact:!0,sidebar:"proto"},{path:"/docs/proto/commands/use",component:p("/docs/proto/commands/use","966"),exact:!0,sidebar:"proto"},{path:"/docs/proto/config",component:p("/docs/proto/config","2e0"),exact:!0,sidebar:"proto"},{path:"/docs/proto/detection",component:p("/docs/proto/detection","406"),exact:!0,sidebar:"proto"},{path:"/docs/proto/faq",component:p("/docs/proto/faq","fc6"),exact:!0,sidebar:"proto"},{path:"/docs/proto/install",component:p("/docs/proto/install","abd"),exact:!0,sidebar:"proto"},{path:"/docs/proto/plugins",component:p("/docs/proto/plugins","49c"),exact:!0,sidebar:"proto"},{path:"/docs/proto/toml-plugin",component:p("/docs/proto/toml-plugin","33c"),exact:!0,sidebar:"proto"},{path:"/docs/proto/tools",component:p("/docs/proto/tools","6c5"),exact:!0,sidebar:"proto"},{path:"/docs/proto/wasm-plugin",component:p("/docs/proto/wasm-plugin","4c5"),exact:!0,sidebar:"proto"},{path:"/docs/run-task",component:p("/docs/run-task","db3"),exact:!0,sidebar:"docs"},{path:"/docs/setup-toolchain",component:p("/docs/setup-toolchain","ee9"),exact:!0,sidebar:"docs"},{path:"/docs/setup-workspace",component:p("/docs/setup-workspace","34e"),exact:!0,sidebar:"docs"},{path:"/docs/terminology",component:p("/docs/terminology","0ff"),exact:!0,sidebar:"docs"}]},{path:"/",component:p("/","b14"),exact:!0},{path:"*",component:p("*")}]},53971:(e,t,n)=>{"use strict";if(n.r(t),"undefined"!=typeof document){const a=document.documentElement,o=document.querySelector("#__docusaurus");function r(){"dark"===a.dataset.theme?o.classList.add("dark"):"light"===a.dataset.theme&&o.classList.remove("dark")}document.addEventListener("DOMContentLoaded",r),window.history.pushState=new Proxy(window.history.pushState,{apply:(e,t,n)=>{r(),e.apply(t,n)}}),window.history.replaceState=new Proxy(window.history.replaceState,{apply:(e,t,n)=>{r(),e.apply(t,n)}});new MutationObserver((e=>{for(const t of e)"attributes"===t.type&&r()})).observe(a,{attributeFilter:["data-theme"],attributes:!0})}},76911:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var a=n(25773),o=n(27378),r=n(40624);function i(e){let{className:t,disabled:n,label:i,href:s,onClick:c,id:l,size:d}=e;const u=!!s,p=u?"a":"button";return o.createElement(p,(0,a.Z)({className:(0,r.Z)("border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600",n?"opacity-60":"hover:text-white hover:bg-blurple-500 dark:hover:bg-purple-500 cursor-pointer","lg"===d?"py-2":"py-1",t),disabled:n,id:l},u?{href:s,target:"_blank"}:{onClick:c,type:"button"}),i)}},31792:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Rn});var a=n(27378),o=n(40624);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var a,o,r=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(r.push(a.value),!t||r.length!==t);i=!0);}catch(c){s=!0,o=c}finally{try{i||null==n.return||n.return()}finally{if(s)throw o}}return r}(e,t)||p(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var m=function(){},g={},b={},h=null,v={mark:m,measure:m};try{"undefined"!=typeof window&&(g=window),"undefined"!=typeof document&&(b=document),"undefined"!=typeof MutationObserver&&(h=MutationObserver),"undefined"!=typeof performance&&(v=performance)}catch(Dn){}var y,x,_,k,w,E=(g.navigator||{}).userAgent,S=void 0===E?"":E,C=g,T=b,P=h,A=v,N=(C.document,!!T.documentElement&&!!T.head&&"function"==typeof T.addEventListener&&"function"==typeof T.createElement),O=~S.indexOf("MSIE")||~S.indexOf("Trident/"),j="svg-inline--fa",L="data-fa-i2svg",M="data-fa-pseudo-element",I="data-prefix",R="data-icon",D="fontawesome-i2svg",z=["HTML","HEAD","STYLE","SCRIPT"],F=function(){try{return!0}catch(Dn){return!1}}(),B="classic",$="sharp",U=[B,$];function H(e){return new Proxy(e,{get:function(e,t){return t in e?e[t]:e.classic}})}var V=H((l(y={},B,{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fad:"duotone","fa-duotone":"duotone",fab:"brands","fa-brands":"brands",fak:"kit","fa-kit":"kit"}),l(y,$,{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light"}),y)),Z=H((l(x={},B,{solid:"fas",regular:"far",light:"fal",thin:"fat",duotone:"fad",brands:"fab",kit:"fak"}),l(x,$,{solid:"fass",regular:"fasr",light:"fasl"}),x)),q=H((l(_={},B,{fab:"fa-brands",fad:"fa-duotone",fak:"fa-kit",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"}),l(_,$,{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light"}),_)),W=H((l(k={},B,{"fa-brands":"fab","fa-duotone":"fad","fa-kit":"fak","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"}),l(k,$,{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl"}),k)),G=/fa(s|r|l|t|d|b|k|ss|sr|sl)?[\-\ ]/,Y="fa-layers-text",K=/Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i,Q=H((l(w={},B,{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"}),l(w,$,{900:"fass",400:"fasr",300:"fasl"}),w)),X=[1,2,3,4,5,6,7,8,9,10],J=X.concat([11,12,13,14,15,16,17,18,19,20]),ee=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],te="duotone-group",ne="swap-opacity",ae="primary",oe="secondary",re=new Set;Object.keys(Z.classic).map(re.add.bind(re)),Object.keys(Z.sharp).map(re.add.bind(re));var ie=[].concat(U,u(re),["2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",te,ne,ae,oe]).concat(X.map((function(e){return"".concat(e,"x")}))).concat(J.map((function(e){return"w-".concat(e)}))),se=C.FontAwesomeConfig||{};if(T&&"function"==typeof T.querySelector){[["data-family-prefix","familyPrefix"],["data-css-prefix","cssPrefix"],["data-family-default","familyDefault"],["data-style-default","styleDefault"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach((function(e){var t=d(e,2),n=t[0],a=t[1],o=function(e){return""===e||"false"!==e&&("true"===e||e)}(function(e){var t=T.querySelector("script["+e+"]");if(t)return t.getAttribute(e)}(n));null!=o&&(se[a]=o)}))}var ce={styleDefault:"solid",familyDefault:"classic",cssPrefix:"fa",replacementClass:j,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0};se.familyPrefix&&(se.cssPrefix=se.familyPrefix);var le=i(i({},ce),se);le.autoReplaceSvg||(le.observeMutations=!1);var de={};Object.keys(ce).forEach((function(e){Object.defineProperty(de,e,{enumerable:!0,set:function(t){le[e]=t,ue.forEach((function(e){return e(de)}))},get:function(){return le[e]}})})),Object.defineProperty(de,"familyPrefix",{enumerable:!0,set:function(e){le.cssPrefix=e,ue.forEach((function(e){return e(de)}))},get:function(){return le.cssPrefix}}),C.FontAwesomeConfig=de;var ue=[];var pe=16,fe={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function me(){for(var e=12,t="";e-- >0;)t+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[62*Math.random()|0];return t}function ge(e){for(var t=[],n=(e||[]).length>>>0;n--;)t[n]=e[n];return t}function be(e){return e.classList?ge(e.classList):(e.getAttribute("class")||"").split(" ").filter((function(e){return e}))}function he(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function ve(e){return Object.keys(e||{}).reduce((function(t,n){return t+"".concat(n,": ").concat(e[n].trim(),";")}),"")}function ye(e){return e.size!==fe.size||e.x!==fe.x||e.y!==fe.y||e.rotate!==fe.rotate||e.flipX||e.flipY}function xe(){var e="fa",t=j,n=de.cssPrefix,a=de.replacementClass,o=':root, :host {\n --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid";\n --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular";\n --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light";\n --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin";\n --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n overflow: visible;\n box-sizing: content-box;\n}\n\n.svg-inline--fa {\n display: var(--fa-display, inline-block);\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-li {\n width: var(--fa-li-width, 2em);\n top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: var(--fa-counter-background-color, #ff253a);\n border-radius: var(--fa-counter-border-radius, 1em);\n box-sizing: border-box;\n color: var(--fa-inverse, #fff);\n line-height: var(--fa-counter-line-height, 1);\n max-width: var(--fa-counter-max-width, 5em);\n min-width: var(--fa-counter-min-width, 1.5em);\n overflow: hidden;\n padding: var(--fa-counter-padding, 0.25em 0.5em);\n right: var(--fa-right, 0);\n text-overflow: ellipsis;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-counter-scale, 0.25));\n transform: scale(var(--fa-counter-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: var(--fa-bottom, 0);\n right: var(--fa-right, 0);\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: var(--fa-bottom, 0);\n left: var(--fa-left, 0);\n right: auto;\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n top: var(--fa-top, 0);\n right: var(--fa-right, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: var(--fa-left, 0);\n right: auto;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(var(--fa-li-width, 2em) * -1);\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n -webkit-animation-name: fa-beat;\n animation-name: fa-beat;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n -webkit-animation-name: fa-bounce;\n animation-name: fa-bounce;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n -webkit-animation-name: fa-fade;\n animation-name: fa-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n -webkit-animation-name: fa-beat-fade;\n animation-name: fa-beat-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n -webkit-animation-name: fa-flip;\n animation-name: fa-flip;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n -webkit-animation-name: fa-shake;\n animation-name: fa-shake;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 2s);\n animation-duration: var(--fa-animation-duration, 2s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n -webkit-animation-delay: -1ms;\n animation-delay: -1ms;\n -webkit-animation-duration: 1ms;\n animation-duration: 1ms;\n -webkit-animation-iteration-count: 1;\n animation-iteration-count: 1;\n -webkit-transition-delay: 0s;\n transition-delay: 0s;\n -webkit-transition-duration: 0s;\n transition-duration: 0s;\n }\n}\n@-webkit-keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@-webkit-keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@-webkit-keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@-webkit-keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@-webkit-keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@-webkit-keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n -webkit-transform: rotate(var(--fa-rotate-angle, none));\n transform: rotate(var(--fa-rotate-angle, none));\n}\n\n.fa-stack {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n color: var(--fa-inverse, #fff);\n}';if(n!==e||a!==t){var r=new RegExp("\\.".concat(e,"\\-"),"g"),i=new RegExp("\\--".concat(e,"\\-"),"g"),s=new RegExp("\\.".concat(t),"g");o=o.replace(r,".".concat(n,"-")).replace(i,"--".concat(n,"-")).replace(s,".".concat(a))}return o}var _e=!1;function ke(){de.autoAddCss&&!_e&&(!function(e){if(e&&N){var t=T.createElement("style");t.setAttribute("type","text/css"),t.innerHTML=e;for(var n=T.head.childNodes,a=null,o=n.length-1;o>-1;o--){var r=n[o],i=(r.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(i)>-1&&(a=r)}T.head.insertBefore(t,a)}}(xe()),_e=!0)}var we={mixout:function(){return{dom:{css:xe,insertCss:ke}}},hooks:function(){return{beforeDOMElementCreation:function(){ke()},beforeI2svg:function(){ke()}}}},Ee=C||{};Ee.___FONT_AWESOME___||(Ee.___FONT_AWESOME___={}),Ee.___FONT_AWESOME___.styles||(Ee.___FONT_AWESOME___.styles={}),Ee.___FONT_AWESOME___.hooks||(Ee.___FONT_AWESOME___.hooks={}),Ee.___FONT_AWESOME___.shims||(Ee.___FONT_AWESOME___.shims=[]);var Se=Ee.___FONT_AWESOME___,Ce=[],Te=!1;function Pe(e){N&&(Te?setTimeout(e,0):Ce.push(e))}function Ae(e){var t=e.tag,n=e.attributes,a=void 0===n?{}:n,o=e.children,r=void 0===o?[]:o;return"string"==typeof e?he(e):"<".concat(t," ").concat(function(e){return Object.keys(e||{}).reduce((function(t,n){return t+"".concat(n,'="').concat(he(e[n]),'" ')}),"").trim()}(a),">").concat(r.map(Ae).join(""),"</").concat(t,">")}function Ne(e,t,n){if(e&&e[t]&&e[t][n])return{prefix:t,iconName:n,icon:e[t][n]}}N&&((Te=(T.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(T.readyState))||T.addEventListener("DOMContentLoaded",(function e(){T.removeEventListener("DOMContentLoaded",e),Te=1,Ce.map((function(e){return e()}))})));var Oe=function(e,t,n,a){var o,r,i,s=Object.keys(e),c=s.length,l=void 0!==a?function(e,t){return function(n,a,o,r){return e.call(t,n,a,o,r)}}(t,a):t;for(void 0===n?(o=1,i=e[s[0]]):(o=0,i=n);o<c;o++)i=l(i,e[r=s[o]],r,e);return i};function je(e){var t=function(e){for(var t=[],n=0,a=e.length;n<a;){var o=e.charCodeAt(n++);if(o>=55296&&o<=56319&&n<a){var r=e.charCodeAt(n++);56320==(64512&r)?t.push(((1023&o)<<10)+(1023&r)+65536):(t.push(o),n--)}else t.push(o)}return t}(e);return 1===t.length?t[0].toString(16):null}function Le(e){return Object.keys(e).reduce((function(t,n){var a=e[n];return!!a.icon?t[a.iconName]=a.icon:t[n]=a,t}),{})}function Me(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n.skipHooks,o=void 0!==a&&a,r=Le(t);"function"!=typeof Se.hooks.addPack||o?Se.styles[e]=i(i({},Se.styles[e]||{}),r):Se.hooks.addPack(e,Le(t)),"fas"===e&&Me("fa",t)}var Ie,Re,De,ze=Se.styles,Fe=Se.shims,Be=(l(Ie={},B,Object.values(q.classic)),l(Ie,$,Object.values(q.sharp)),Ie),$e=null,Ue={},He={},Ve={},Ze={},qe={},We=(l(Re={},B,Object.keys(V.classic)),l(Re,$,Object.keys(V.sharp)),Re);function Ge(e,t){var n,a=t.split("-"),o=a[0],r=a.slice(1).join("-");return o!==e||""===r||(n=r,~ie.indexOf(n))?null:r}var Ye,Ke=function(){var e=function(e){return Oe(ze,(function(t,n,a){return t[a]=Oe(n,e,{}),t}),{})};Ue=e((function(e,t,n){(t[3]&&(e[t[3]]=n),t[2])&&t[2].filter((function(e){return"number"==typeof e})).forEach((function(t){e[t.toString(16)]=n}));return e})),He=e((function(e,t,n){(e[n]=n,t[2])&&t[2].filter((function(e){return"string"==typeof e})).forEach((function(t){e[t]=n}));return e})),qe=e((function(e,t,n){var a=t[2];return e[n]=n,a.forEach((function(t){e[t]=n})),e}));var t="far"in ze||de.autoFetchSvg,n=Oe(Fe,(function(e,n){var a=n[0],o=n[1],r=n[2];return"far"!==o||t||(o="fas"),"string"==typeof a&&(e.names[a]={prefix:o,iconName:r}),"number"==typeof a&&(e.unicodes[a.toString(16)]={prefix:o,iconName:r}),e}),{names:{},unicodes:{}});Ve=n.names,Ze=n.unicodes,$e=tt(de.styleDefault,{family:de.familyDefault})};function Qe(e,t){return(Ue[e]||{})[t]}function Xe(e,t){return(qe[e]||{})[t]}function Je(e){return Ve[e]||{prefix:null,iconName:null}}function et(){return $e}Ye=function(e){$e=tt(e.styleDefault,{family:de.familyDefault})},ue.push(Ye),Ke();function tt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.family,a=void 0===n?B:n,o=V[a][e],r=Z[a][e]||Z[a][o],i=e in Se.styles?e:null;return r||i||null}var nt=(l(De={},B,Object.keys(q.classic)),l(De,$,Object.keys(q.sharp)),De);function at(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=n.skipLookups,o=void 0!==a&&a,r=(l(t={},B,"".concat(de.cssPrefix,"-").concat(B)),l(t,$,"".concat(de.cssPrefix,"-").concat($)),t),i=null,s=B;(e.includes(r.classic)||e.some((function(e){return nt.classic.includes(e)})))&&(s=B),(e.includes(r.sharp)||e.some((function(e){return nt.sharp.includes(e)})))&&(s=$);var c=e.reduce((function(e,t){var n=Ge(de.cssPrefix,t);if(ze[t]?(t=Be[s].includes(t)?W[s][t]:t,i=t,e.prefix=t):We[s].indexOf(t)>-1?(i=t,e.prefix=tt(t,{family:s})):n?e.iconName=n:t!==de.replacementClass&&t!==r.classic&&t!==r.sharp&&e.rest.push(t),!o&&e.prefix&&e.iconName){var a="fa"===i?Je(e.iconName):{},c=Xe(e.prefix,e.iconName);a.prefix&&(i=null),e.iconName=a.iconName||c||e.iconName,e.prefix=a.prefix||e.prefix,"far"!==e.prefix||ze.far||!ze.fas||de.autoFetchSvg||(e.prefix="fas")}return e}),{prefix:null,iconName:null,rest:[]});return(e.includes("fa-brands")||e.includes("fab"))&&(c.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(c.prefix="fad"),c.prefix||s!==$||!ze.fass&&!de.autoFetchSvg||(c.prefix="fass",c.iconName=Xe(c.prefix,c.iconName)||c.iconName),"fa"!==c.prefix&&"fa"!==i||(c.prefix=et()||"fas"),c}var ot=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.definitions={}}var t,n,a;return t=e,n=[{key:"add",value:function(){for(var e=this,t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];var o=n.reduce(this._pullDefinitions,{});Object.keys(o).forEach((function(t){e.definitions[t]=i(i({},e.definitions[t]||{}),o[t]),Me(t,o[t]);var n=q.classic[t];n&&Me(n,o[t]),Ke()}))}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(e,t){var n=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(n).map((function(t){var a=n[t],o=a.prefix,r=a.iconName,i=a.icon,s=i[2];e[o]||(e[o]={}),s.length>0&&s.forEach((function(t){"string"==typeof t&&(e[o][t]=i)})),e[o][r]=i})),e}}],n&&c(t.prototype,n),a&&c(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}(),rt=[],it={},st={},ct=Object.keys(st);function lt(e,t){for(var n=arguments.length,a=new Array(n>2?n-2:0),o=2;o<n;o++)a[o-2]=arguments[o];var r=it[e]||[];return r.forEach((function(e){t=e.apply(null,[t].concat(a))})),t}function dt(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];var o=it[e]||[];o.forEach((function(e){e.apply(null,n)}))}function ut(){var e=arguments[0],t=Array.prototype.slice.call(arguments,1);return st[e]?st[e].apply(null,t):void 0}function pt(e){"fa"===e.prefix&&(e.prefix="fas");var t=e.iconName,n=e.prefix||et();if(t)return t=Xe(n,t)||t,Ne(ft.definitions,n,t)||Ne(Se.styles,n,t)}var ft=new ot,mt={i2svg:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return N?(dt("beforeI2svg",e),ut("pseudoElements2svg",e),ut("i2svg",e)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.autoReplaceSvgRoot;!1===de.autoReplaceSvg&&(de.autoReplaceSvg=!0),de.observeMutations=!0,Pe((function(){bt({autoReplaceSvgRoot:t}),dt("watch",e)}))}},gt={noAuto:function(){de.autoReplaceSvg=!1,de.observeMutations=!1,dt("noAuto")},config:de,dom:mt,parse:{icon:function(e){if(null===e)return null;if("object"===s(e)&&e.prefix&&e.iconName)return{prefix:e.prefix,iconName:Xe(e.prefix,e.iconName)||e.iconName};if(Array.isArray(e)&&2===e.length){var t=0===e[1].indexOf("fa-")?e[1].slice(3):e[1],n=tt(e[0]);return{prefix:n,iconName:Xe(n,t)||t}}if("string"==typeof e&&(e.indexOf("".concat(de.cssPrefix,"-"))>-1||e.match(G))){var a=at(e.split(" "),{skipLookups:!0});return{prefix:a.prefix||et(),iconName:Xe(a.prefix,a.iconName)||a.iconName}}if("string"==typeof e){var o=et();return{prefix:o,iconName:Xe(o,e)||e}}}},library:ft,findIconDefinition:pt,toHtml:Ae},bt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.autoReplaceSvgRoot,n=void 0===t?T:t;(Object.keys(Se.styles).length>0||de.autoFetchSvg)&&N&&de.autoReplaceSvg&>.dom.i2svg({node:n})};function ht(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map((function(e){return Ae(e)}))}}),Object.defineProperty(e,"node",{get:function(){if(N){var t=T.createElement("div");return t.innerHTML=e.html,t.children}}}),e}function vt(e){var t=e.icons,n=t.main,a=t.mask,o=e.prefix,r=e.iconName,s=e.transform,c=e.symbol,l=e.title,d=e.maskId,u=e.titleId,p=e.extra,f=e.watchable,m=void 0!==f&&f,g=a.found?a:n,b=g.width,h=g.height,v="fak"===o,y=[de.replacementClass,r?"".concat(de.cssPrefix,"-").concat(r):""].filter((function(e){return-1===p.classes.indexOf(e)})).filter((function(e){return""!==e||!!e})).concat(p.classes).join(" "),x={children:[],attributes:i(i({},p.attributes),{},{"data-prefix":o,"data-icon":r,class:y,role:p.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(b," ").concat(h)})},_=v&&!~p.classes.indexOf("fa-fw")?{width:"".concat(b/h*16*.0625,"em")}:{};m&&(x.attributes[L]=""),l&&(x.children.push({tag:"title",attributes:{id:x.attributes["aria-labelledby"]||"title-".concat(u||me())},children:[l]}),delete x.attributes.title);var k=i(i({},x),{},{prefix:o,iconName:r,main:n,mask:a,maskId:d,transform:s,symbol:c,styles:i(i({},_),p.styles)}),w=a.found&&n.found?ut("generateAbstractMask",k)||{children:[],attributes:{}}:ut("generateAbstractIcon",k)||{children:[],attributes:{}},E=w.children,S=w.attributes;return k.children=E,k.attributes=S,c?function(e){var t=e.prefix,n=e.iconName,a=e.children,o=e.attributes,r=e.symbol,s=!0===r?"".concat(t,"-").concat(de.cssPrefix,"-").concat(n):r;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:i(i({},o),{},{id:s}),children:a}]}]}(k):function(e){var t=e.children,n=e.main,a=e.mask,o=e.attributes,r=e.styles,s=e.transform;if(ye(s)&&n.found&&!a.found){var c={x:n.width/n.height/2,y:.5};o.style=ve(i(i({},r),{},{"transform-origin":"".concat(c.x+s.x/16,"em ").concat(c.y+s.y/16,"em")}))}return[{tag:"svg",attributes:o,children:t}]}(k)}function yt(e){var t=e.content,n=e.width,a=e.height,o=e.transform,r=e.title,s=e.extra,c=e.watchable,l=void 0!==c&&c,d=i(i(i({},s.attributes),r?{title:r}:{}),{},{class:s.classes.join(" ")});l&&(d[L]="");var u=i({},s.styles);ye(o)&&(u.transform=function(e){var t=e.transform,n=e.width,a=void 0===n?16:n,o=e.height,r=void 0===o?16:o,i=e.startCentered,s=void 0!==i&&i,c="";return c+=s&&O?"translate(".concat(t.x/pe-a/2,"em, ").concat(t.y/pe-r/2,"em) "):s?"translate(calc(-50% + ".concat(t.x/pe,"em), calc(-50% + ").concat(t.y/pe,"em)) "):"translate(".concat(t.x/pe,"em, ").concat(t.y/pe,"em) "),c+="scale(".concat(t.size/pe*(t.flipX?-1:1),", ").concat(t.size/pe*(t.flipY?-1:1),") "),c+"rotate(".concat(t.rotate,"deg) ")}({transform:o,startCentered:!0,width:n,height:a}),u["-webkit-transform"]=u.transform);var p=ve(u);p.length>0&&(d.style=p);var f=[];return f.push({tag:"span",attributes:d,children:[t]}),r&&f.push({tag:"span",attributes:{class:"sr-only"},children:[r]}),f}function xt(e){var t=e.content,n=e.title,a=e.extra,o=i(i(i({},a.attributes),n?{title:n}:{}),{},{class:a.classes.join(" ")}),r=ve(a.styles);r.length>0&&(o.style=r);var s=[];return s.push({tag:"span",attributes:o,children:[t]}),n&&s.push({tag:"span",attributes:{class:"sr-only"},children:[n]}),s}var _t=Se.styles;function kt(e){var t=e[0],n=e[1],a=d(e.slice(4),1)[0];return{found:!0,width:t,height:n,icon:Array.isArray(a)?{tag:"g",attributes:{class:"".concat(de.cssPrefix,"-").concat(te)},children:[{tag:"path",attributes:{class:"".concat(de.cssPrefix,"-").concat(oe),fill:"currentColor",d:a[0]}},{tag:"path",attributes:{class:"".concat(de.cssPrefix,"-").concat(ae),fill:"currentColor",d:a[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:a}}}}var wt={found:!1,width:512,height:512};function Et(e,t){var n=t;return"fa"===t&&null!==de.styleDefault&&(t=et()),new Promise((function(a,o){ut("missingIconAbstract");if("fa"===n){var r=Je(e)||{};e=r.iconName||e,t=r.prefix||t}if(e&&t&&_t[t]&&_t[t][e])return a(kt(_t[t][e]));!function(e,t){F||de.showMissingIcons||!e||console.error('Icon with name "'.concat(e,'" and prefix "').concat(t,'" is missing.'))}(e,t),a(i(i({},wt),{},{icon:de.showMissingIcons&&e&&ut("missingIconAbstract")||{}}))}))}var St=function(){},Ct=de.measurePerformance&&A&&A.mark&&A.measure?A:{mark:St,measure:St},Tt='FA "6.4.2"',Pt=function(e){Ct.mark("".concat(Tt," ").concat(e," ends")),Ct.measure("".concat(Tt," ").concat(e),"".concat(Tt," ").concat(e," begins"),"".concat(Tt," ").concat(e," ends"))},At=function(e){return Ct.mark("".concat(Tt," ").concat(e," begins")),function(){return Pt(e)}},Nt=function(){};function Ot(e){return"string"==typeof(e.getAttribute?e.getAttribute(L):null)}function jt(e){return T.createElementNS("http://www.w3.org/2000/svg",e)}function Lt(e){return T.createElement(e)}function Mt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.ceFn,a=void 0===n?"svg"===e.tag?jt:Lt:n;if("string"==typeof e)return T.createTextNode(e);var o=a(e.tag);Object.keys(e.attributes||[]).forEach((function(t){o.setAttribute(t,e.attributes[t])}));var r=e.children||[];return r.forEach((function(e){o.appendChild(Mt(e,{ceFn:a}))})),o}var It={replace:function(e){var t=e[0];if(t.parentNode)if(e[1].forEach((function(e){t.parentNode.insertBefore(Mt(e),t)})),null===t.getAttribute(L)&&de.keepOriginalSource){var n=T.createComment(function(e){var t=" ".concat(e.outerHTML," ");return"".concat(t,"Font Awesome fontawesome.com ")}(t));t.parentNode.replaceChild(n,t)}else t.remove()},nest:function(e){var t=e[0],n=e[1];if(~be(t).indexOf(de.replacementClass))return It.replace(e);var a=new RegExp("".concat(de.cssPrefix,"-.*"));if(delete n[0].attributes.id,n[0].attributes.class){var o=n[0].attributes.class.split(" ").reduce((function(e,t){return t===de.replacementClass||t.match(a)?e.toSvg.push(t):e.toNode.push(t),e}),{toNode:[],toSvg:[]});n[0].attributes.class=o.toSvg.join(" "),0===o.toNode.length?t.removeAttribute("class"):t.setAttribute("class",o.toNode.join(" "))}var r=n.map((function(e){return Ae(e)})).join("\n");t.setAttribute(L,""),t.innerHTML=r}};function Rt(e){e()}function Dt(e,t){var n="function"==typeof t?t:Nt;if(0===e.length)n();else{var a=Rt;"async"===de.mutateApproach&&(a=C.requestAnimationFrame||Rt),a((function(){var t=!0===de.autoReplaceSvg?It.replace:It[de.autoReplaceSvg]||It.replace,a=At("mutate");e.map(t),a(),n()}))}}var zt=!1;function Ft(){zt=!0}function Bt(){zt=!1}var $t=null;function Ut(e){if(P&&de.observeMutations){var t=e.treeCallback,n=void 0===t?Nt:t,a=e.nodeCallback,o=void 0===a?Nt:a,r=e.pseudoElementsCallback,i=void 0===r?Nt:r,s=e.observeMutationsRoot,c=void 0===s?T:s;$t=new P((function(e){if(!zt){var t=et();ge(e).forEach((function(e){if("childList"===e.type&&e.addedNodes.length>0&&!Ot(e.addedNodes[0])&&(de.searchPseudoElements&&i(e.target),n(e.target)),"attributes"===e.type&&e.target.parentNode&&de.searchPseudoElements&&i(e.target.parentNode),"attributes"===e.type&&Ot(e.target)&&~ee.indexOf(e.attributeName))if("class"===e.attributeName&&function(e){var t=e.getAttribute?e.getAttribute(I):null,n=e.getAttribute?e.getAttribute(R):null;return t&&n}(e.target)){var a=at(be(e.target)),r=a.prefix,s=a.iconName;e.target.setAttribute(I,r||t),s&&e.target.setAttribute(R,s)}else(c=e.target)&&c.classList&&c.classList.contains&&c.classList.contains(de.replacementClass)&&o(e.target);var c}))}})),N&&$t.observe(c,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function Ht(e){var t=e.getAttribute("style"),n=[];return t&&(n=t.split(";").reduce((function(e,t){var n=t.split(":"),a=n[0],o=n.slice(1);return a&&o.length>0&&(e[a]=o.join(":").trim()),e}),{})),n}function Vt(e){var t,n,a=e.getAttribute("data-prefix"),o=e.getAttribute("data-icon"),r=void 0!==e.innerText?e.innerText.trim():"",i=at(be(e));return i.prefix||(i.prefix=et()),a&&o&&(i.prefix=a,i.iconName=o),i.iconName&&i.prefix||(i.prefix&&r.length>0&&(i.iconName=(t=i.prefix,n=e.innerText,(He[t]||{})[n]||Qe(i.prefix,je(e.innerText)))),!i.iconName&&de.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(i.iconName=e.firstChild.data)),i}function Zt(e){var t=ge(e.attributes).reduce((function(e,t){return"class"!==e.name&&"style"!==e.name&&(e[t.name]=t.value),e}),{}),n=e.getAttribute("title"),a=e.getAttribute("data-fa-title-id");return de.autoA11y&&(n?t["aria-labelledby"]="".concat(de.replacementClass,"-title-").concat(a||me()):(t["aria-hidden"]="true",t.focusable="false")),t}function qt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{styleParser:!0},n=Vt(e),a=n.iconName,o=n.prefix,r=n.rest,s=Zt(e),c=lt("parseNodeAttributes",{},e),l=t.styleParser?Ht(e):[];return i({iconName:a,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:o,transform:fe,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:r,styles:l,attributes:s}},c)}var Wt=Se.styles;function Gt(e){var t="nest"===de.autoReplaceSvg?qt(e,{styleParser:!1}):qt(e);return~t.extra.classes.indexOf(Y)?ut("generateLayersText",e,t):ut("generateSvgReplacementMutation",e,t)}var Yt=new Set;function Kt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!N)return Promise.resolve();var n=T.documentElement.classList,a=function(e){return n.add("".concat(D,"-").concat(e))},o=function(e){return n.remove("".concat(D,"-").concat(e))},r=de.autoFetchSvg?Yt:U.map((function(e){return"fa-".concat(e)})).concat(Object.keys(Wt));r.includes("fa")||r.push("fa");var i=[".".concat(Y,":not([").concat(L,"])")].concat(r.map((function(e){return".".concat(e,":not([").concat(L,"])")}))).join(", ");if(0===i.length)return Promise.resolve();var s=[];try{s=ge(e.querySelectorAll(i))}catch(Dn){}if(!(s.length>0))return Promise.resolve();a("pending"),o("complete");var c=At("onTree"),l=s.reduce((function(e,t){try{var n=Gt(t);n&&e.push(n)}catch(Dn){F||"MissingIcon"===Dn.name&&console.error(Dn)}return e}),[]);return new Promise((function(e,n){Promise.all(l).then((function(n){Dt(n,(function(){a("active"),a("complete"),o("pending"),"function"==typeof t&&t(),c(),e()}))})).catch((function(e){c(),n(e)}))}))}function Qt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Gt(e).then((function(e){e&&Dt([e],t)}))}U.map((function(e){Yt.add("fa-".concat(e))})),Object.keys(V.classic).map(Yt.add.bind(Yt)),Object.keys(V.sharp).map(Yt.add.bind(Yt)),Yt=u(Yt);var Xt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.transform,a=void 0===n?fe:n,o=t.symbol,r=void 0!==o&&o,s=t.mask,c=void 0===s?null:s,l=t.maskId,d=void 0===l?null:l,u=t.title,p=void 0===u?null:u,f=t.titleId,m=void 0===f?null:f,g=t.classes,b=void 0===g?[]:g,h=t.attributes,v=void 0===h?{}:h,y=t.styles,x=void 0===y?{}:y;if(e){var _=e.prefix,k=e.iconName,w=e.icon;return ht(i({type:"icon"},e),(function(){return dt("beforeDOMElementCreation",{iconDefinition:e,params:t}),de.autoA11y&&(p?v["aria-labelledby"]="".concat(de.replacementClass,"-title-").concat(m||me()):(v["aria-hidden"]="true",v.focusable="false")),vt({icons:{main:kt(w),mask:c?kt(c.icon):{found:!1,width:null,height:null,icon:{}}},prefix:_,iconName:k,transform:i(i({},fe),a),symbol:r,title:p,maskId:d,titleId:m,extra:{attributes:v,styles:x,classes:b}})}))}},Jt={mixout:function(){return{icon:(e=Xt,function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=(t||{}).icon?t:pt(t||{}),o=n.mask;return o&&(o=(o||{}).icon?o:pt(o||{})),e(a,i(i({},n),{},{mask:o}))})};var e},hooks:function(){return{mutationObserverCallbacks:function(e){return e.treeCallback=Kt,e.nodeCallback=Qt,e}}},provides:function(e){e.i2svg=function(e){var t=e.node,n=void 0===t?T:t,a=e.callback;return Kt(n,void 0===a?function(){}:a)},e.generateSvgReplacementMutation=function(e,t){var n=t.iconName,a=t.title,o=t.titleId,r=t.prefix,i=t.transform,s=t.symbol,c=t.mask,l=t.maskId,u=t.extra;return new Promise((function(t,p){Promise.all([Et(n,r),c.iconName?Et(c.iconName,c.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then((function(c){var p=d(c,2),f=p[0],m=p[1];t([e,vt({icons:{main:f,mask:m},prefix:r,iconName:n,transform:i,symbol:s,maskId:l,title:a,titleId:o,extra:u,watchable:!0})])})).catch(p)}))},e.generateAbstractIcon=function(e){var t,n=e.children,a=e.attributes,o=e.main,r=e.transform,i=ve(e.styles);return i.length>0&&(a.style=i),ye(r)&&(t=ut("generateAbstractTransformGrouping",{main:o,transform:r,containerWidth:o.width,iconWidth:o.width})),n.push(t||o.icon),{children:n,attributes:a}}}},en={mixout:function(){return{layer:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.classes,a=void 0===n?[]:n;return ht({type:"layer"},(function(){dt("beforeDOMElementCreation",{assembler:e,params:t});var n=[];return e((function(e){Array.isArray(e)?e.map((function(e){n=n.concat(e.abstract)})):n=n.concat(e.abstract)})),[{tag:"span",attributes:{class:["".concat(de.cssPrefix,"-layers")].concat(u(a)).join(" ")},children:n}]}))}}}},tn={mixout:function(){return{counter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.title,a=void 0===n?null:n,o=t.classes,r=void 0===o?[]:o,i=t.attributes,s=void 0===i?{}:i,c=t.styles,l=void 0===c?{}:c;return ht({type:"counter",content:e},(function(){return dt("beforeDOMElementCreation",{content:e,params:t}),xt({content:e.toString(),title:a,extra:{attributes:s,styles:l,classes:["".concat(de.cssPrefix,"-layers-counter")].concat(u(r))}})}))}}}},nn={mixout:function(){return{text:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.transform,a=void 0===n?fe:n,o=t.title,r=void 0===o?null:o,s=t.classes,c=void 0===s?[]:s,l=t.attributes,d=void 0===l?{}:l,p=t.styles,f=void 0===p?{}:p;return ht({type:"text",content:e},(function(){return dt("beforeDOMElementCreation",{content:e,params:t}),yt({content:e,transform:i(i({},fe),a),title:r,extra:{attributes:d,styles:f,classes:["".concat(de.cssPrefix,"-layers-text")].concat(u(c))}})}))}}},provides:function(e){e.generateLayersText=function(e,t){var n=t.title,a=t.transform,o=t.extra,r=null,i=null;if(O){var s=parseInt(getComputedStyle(e).fontSize,10),c=e.getBoundingClientRect();r=c.width/s,i=c.height/s}return de.autoA11y&&!n&&(o.attributes["aria-hidden"]="true"),Promise.resolve([e,yt({content:e.innerHTML,width:r,height:i,transform:a,title:n,extra:o,watchable:!0})])}}},an=new RegExp('"',"ug"),on=[1105920,1112319];function rn(e,t){var n="".concat("data-fa-pseudo-element-pending").concat(t.replace(":","-"));return new Promise((function(a,o){if(null!==e.getAttribute(n))return a();var r,s,c,l=ge(e.children).filter((function(e){return e.getAttribute(M)===t}))[0],d=C.getComputedStyle(e,t),u=d.getPropertyValue("font-family").match(K),p=d.getPropertyValue("font-weight"),f=d.getPropertyValue("content");if(l&&!u)return e.removeChild(l),a();if(u&&"none"!==f&&""!==f){var m=d.getPropertyValue("content"),g=~["Sharp"].indexOf(u[2])?$:B,b=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(u[2])?Z[g][u[2].toLowerCase()]:Q[g][p],h=function(e){var t,n,a,o,r,i=e.replace(an,""),s=(n=0,o=(t=i).length,(r=t.charCodeAt(n))>=55296&&r<=56319&&o>n+1&&(a=t.charCodeAt(n+1))>=56320&&a<=57343?1024*(r-55296)+a-56320+65536:r),c=s>=on[0]&&s<=on[1],l=2===i.length&&i[0]===i[1];return{value:je(l?i[0]:i),isSecondary:c||l}}(m),v=h.value,y=h.isSecondary,x=u[0].startsWith("FontAwesome"),_=Qe(b,v),k=_;if(x){var w=(s=Ze[r=v],c=Qe("fas",r),s||(c?{prefix:"fas",iconName:c}:null)||{prefix:null,iconName:null});w.iconName&&w.prefix&&(_=w.iconName,b=w.prefix)}if(!_||y||l&&l.getAttribute(I)===b&&l.getAttribute(R)===k)a();else{e.setAttribute(n,k),l&&e.removeChild(l);var E={iconName:null,title:null,titleId:null,prefix:null,transform:fe,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}},S=E.extra;S.attributes[M]=t,Et(_,b).then((function(o){var r=vt(i(i({},E),{},{icons:{main:o,mask:{prefix:null,iconName:null,rest:[]}},prefix:b,iconName:k,extra:S,watchable:!0})),s=T.createElementNS("http://www.w3.org/2000/svg","svg");"::before"===t?e.insertBefore(s,e.firstChild):e.appendChild(s),s.outerHTML=r.map((function(e){return Ae(e)})).join("\n"),e.removeAttribute(n),a()})).catch(o)}}else a()}))}function sn(e){return Promise.all([rn(e,"::before"),rn(e,"::after")])}function cn(e){return!(e.parentNode===document.head||~z.indexOf(e.tagName.toUpperCase())||e.getAttribute(M)||e.parentNode&&"svg"===e.parentNode.tagName)}function ln(e){if(N)return new Promise((function(t,n){var a=ge(e.querySelectorAll("*")).filter(cn).map(sn),o=At("searchPseudoElements");Ft(),Promise.all(a).then((function(){o(),Bt(),t()})).catch((function(){o(),Bt(),n()}))}))}var dn=!1,un=function(e){return e.toLowerCase().split(" ").reduce((function(e,t){var n=t.toLowerCase().split("-"),a=n[0],o=n.slice(1).join("-");if(a&&"h"===o)return e.flipX=!0,e;if(a&&"v"===o)return e.flipY=!0,e;if(o=parseFloat(o),isNaN(o))return e;switch(a){case"grow":e.size=e.size+o;break;case"shrink":e.size=e.size-o;break;case"left":e.x=e.x-o;break;case"right":e.x=e.x+o;break;case"up":e.y=e.y-o;break;case"down":e.y=e.y+o;break;case"rotate":e.rotate=e.rotate+o}return e}),{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})},pn={mixout:function(){return{parse:{transform:function(e){return un(e)}}}},hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute("data-fa-transform");return n&&(e.transform=un(n)),e}}},provides:function(e){e.generateAbstractTransformGrouping=function(e){var t=e.main,n=e.transform,a=e.containerWidth,o=e.iconWidth,r={transform:"translate(".concat(a/2," 256)")},s="translate(".concat(32*n.x,", ").concat(32*n.y,") "),c="scale(".concat(n.size/16*(n.flipX?-1:1),", ").concat(n.size/16*(n.flipY?-1:1),") "),l="rotate(".concat(n.rotate," 0 0)"),d={outer:r,inner:{transform:"".concat(s," ").concat(c," ").concat(l)},path:{transform:"translate(".concat(o/2*-1," -256)")}};return{tag:"g",attributes:i({},d.outer),children:[{tag:"g",attributes:i({},d.inner),children:[{tag:t.icon.tag,children:t.icon.children,attributes:i(i({},t.icon.attributes),d.path)}]}]}}}},fn={x:0,y:0,width:"100%",height:"100%"};function mn(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill="black"),e}var gn={hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute("data-fa-mask"),a=n?at(n.split(" ").map((function(e){return e.trim()}))):{prefix:null,iconName:null,rest:[]};return a.prefix||(a.prefix=et()),e.mask=a,e.maskId=t.getAttribute("data-fa-mask-id"),e}}},provides:function(e){e.generateAbstractMask=function(e){var t,n=e.children,a=e.attributes,o=e.main,r=e.mask,s=e.maskId,c=e.transform,l=o.width,d=o.icon,u=r.width,p=r.icon,f=function(e){var t=e.transform,n=e.containerWidth,a=e.iconWidth,o={transform:"translate(".concat(n/2," 256)")},r="translate(".concat(32*t.x,", ").concat(32*t.y,") "),i="scale(".concat(t.size/16*(t.flipX?-1:1),", ").concat(t.size/16*(t.flipY?-1:1),") "),s="rotate(".concat(t.rotate," 0 0)");return{outer:o,inner:{transform:"".concat(r," ").concat(i," ").concat(s)},path:{transform:"translate(".concat(a/2*-1," -256)")}}}({transform:c,containerWidth:u,iconWidth:l}),m={tag:"rect",attributes:i(i({},fn),{},{fill:"white"})},g=d.children?{children:d.children.map(mn)}:{},b={tag:"g",attributes:i({},f.inner),children:[mn(i({tag:d.tag,attributes:i(i({},d.attributes),f.path)},g))]},h={tag:"g",attributes:i({},f.outer),children:[b]},v="mask-".concat(s||me()),y="clip-".concat(s||me()),x={tag:"mask",attributes:i(i({},fn),{},{id:v,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[m,h]},_={tag:"defs",children:[{tag:"clipPath",attributes:{id:y},children:(t=p,"g"===t.tag?t.children:[t])},x]};return n.push(_,{tag:"rect",attributes:i({fill:"currentColor","clip-path":"url(#".concat(y,")"),mask:"url(#".concat(v,")")},fn)}),{children:n,attributes:a}}}},bn={provides:function(e){var t=!1;C.matchMedia&&(t=C.matchMedia("(prefers-reduced-motion: reduce)").matches),e.missingIconAbstract=function(){var e=[],n={fill:"currentColor"},a={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};e.push({tag:"path",attributes:i(i({},n),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var o=i(i({},a),{},{attributeName:"opacity"}),r={tag:"circle",attributes:i(i({},n),{},{cx:"256",cy:"364",r:"28"}),children:[]};return t||r.children.push({tag:"animate",attributes:i(i({},a),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:i(i({},o),{},{values:"1;0;1;1;0;1;"})}),e.push(r),e.push({tag:"path",attributes:i(i({},n),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:t?[]:[{tag:"animate",attributes:i(i({},o),{},{values:"1;0;0;0;0;1;"})}]}),t||e.push({tag:"path",attributes:i(i({},n),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:i(i({},o),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:e}}}};!function(e,t){var n=t.mixoutsTo;rt=e,it={},Object.keys(st).forEach((function(e){-1===ct.indexOf(e)&&delete st[e]})),rt.forEach((function(e){var t=e.mixout?e.mixout():{};if(Object.keys(t).forEach((function(e){"function"==typeof t[e]&&(n[e]=t[e]),"object"===s(t[e])&&Object.keys(t[e]).forEach((function(a){n[e]||(n[e]={}),n[e][a]=t[e][a]}))})),e.hooks){var a=e.hooks();Object.keys(a).forEach((function(e){it[e]||(it[e]=[]),it[e].push(a[e])}))}e.provides&&e.provides(st)}))}([we,Jt,en,tn,nn,{hooks:function(){return{mutationObserverCallbacks:function(e){return e.pseudoElementsCallback=ln,e}}},provides:function(e){e.pseudoElements2svg=function(e){var t=e.node,n=void 0===t?T:t;de.searchPseudoElements&&ln(n)}}},{mixout:function(){return{dom:{unwatch:function(){Ft(),dn=!0}}}},hooks:function(){return{bootstrap:function(){Ut(lt("mutationObserverCallbacks",{}))},noAuto:function(){$t&&$t.disconnect()},watch:function(e){var t=e.observeMutationsRoot;dn?Bt():Ut(lt("mutationObserverCallbacks",{observeMutationsRoot:t}))}}}},pn,gn,bn,{hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute("data-fa-symbol"),a=null!==n&&(""===n||n);return e.symbol=a,e}}}}],{mixoutsTo:gt});var hn=gt.parse,vn=gt.icon,yn=n(23615),xn=n.n(yn);function _n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function kn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_n(Object(n),!0).forEach((function(t){En(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_n(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e){return wn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wn(e)}function En(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Sn(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Cn(e){return function(e){if(Array.isArray(e))return Tn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Tn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Tn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Tn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function Pn(e){return t=e,(t-=0)==t?e:(e=e.replace(/[\-_\s]+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))).substr(0,1).toLowerCase()+e.substr(1);var t}var An=["style"];function Nn(e){return e.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,t){var n,a=t.indexOf(":"),o=Pn(t.slice(0,a)),r=t.slice(a+1).trim();return o.startsWith("webkit")?e[(n=o,n.charAt(0).toUpperCase()+n.slice(1))]=r:e[o]=r,e}),{})}var On=!1;try{On=!0}catch(Dn){}function jn(e){return e&&"object"===wn(e)&&e.prefix&&e.iconName&&e.icon?e:hn.icon?hn.icon(e):null===e?null:e&&"object"===wn(e)&&e.prefix&&e.iconName?e:Array.isArray(e)&&2===e.length?{prefix:e[0],iconName:e[1]}:"string"==typeof e?{prefix:"fas",iconName:e}:void 0}function Ln(e,t){return Array.isArray(t)&&t.length>0||!Array.isArray(t)&&t?En({},e,t):{}}var Mn=a.forwardRef((function(e,t){var n=e.icon,a=e.mask,o=e.symbol,r=e.className,i=e.title,s=e.titleId,c=e.maskId,l=jn(n),d=Ln("classes",[].concat(Cn(function(e){var t,n=e.beat,a=e.fade,o=e.beatFade,r=e.bounce,i=e.shake,s=e.flash,c=e.spin,l=e.spinPulse,d=e.spinReverse,u=e.pulse,p=e.fixedWidth,f=e.inverse,m=e.border,g=e.listItem,b=e.flip,h=e.size,v=e.rotation,y=e.pull,x=(En(t={"fa-beat":n,"fa-fade":a,"fa-beat-fade":o,"fa-bounce":r,"fa-shake":i,"fa-flash":s,"fa-spin":c,"fa-spin-reverse":d,"fa-spin-pulse":l,"fa-pulse":u,"fa-fw":p,"fa-inverse":f,"fa-border":m,"fa-li":g,"fa-flip":!0===b,"fa-flip-horizontal":"horizontal"===b||"both"===b,"fa-flip-vertical":"vertical"===b||"both"===b},"fa-".concat(h),null!=h),En(t,"fa-rotate-".concat(v),null!=v&&0!==v),En(t,"fa-pull-".concat(y),null!=y),En(t,"fa-swap-opacity",e.swapOpacity),t);return Object.keys(x).map((function(e){return x[e]?e:null})).filter((function(e){return e}))}(e)),Cn(r.split(" ")))),u=Ln("transform","string"==typeof e.transform?hn.transform(e.transform):e.transform),p=Ln("mask",jn(a)),f=vn(l,kn(kn(kn(kn({},d),u),p),{},{symbol:o,title:i,titleId:s,maskId:c}));if(!f)return function(){var e;!On&&console&&"function"==typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",l),null;var m=f.abstract,g={ref:t};return Object.keys(e).forEach((function(t){Mn.defaultProps.hasOwnProperty(t)||(g[t]=e[t])})),In(m[0],g)}));Mn.displayName="FontAwesomeIcon",Mn.propTypes={beat:xn().bool,border:xn().bool,beatFade:xn().bool,bounce:xn().bool,className:xn().string,fade:xn().bool,flash:xn().bool,mask:xn().oneOfType([xn().object,xn().array,xn().string]),maskId:xn().string,fixedWidth:xn().bool,inverse:xn().bool,flip:xn().oneOf([!0,!1,"horizontal","vertical","both"]),icon:xn().oneOfType([xn().object,xn().array,xn().string]),listItem:xn().bool,pull:xn().oneOf(["right","left"]),pulse:xn().bool,rotation:xn().oneOf([0,90,180,270]),shake:xn().bool,size:xn().oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:xn().bool,spinPulse:xn().bool,spinReverse:xn().bool,symbol:xn().oneOfType([xn().bool,xn().string]),title:xn().string,titleId:xn().string,transform:xn().oneOfType([xn().string,xn().object]),swapOpacity:xn().bool},Mn.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var In=function e(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"==typeof n)return n;var o=(n.children||[]).map((function(n){return e(t,n)})),r=Object.keys(n.attributes||{}).reduce((function(e,t){var a=n.attributes[t];switch(t){case"class":e.attrs.className=a,delete n.attributes.class;break;case"style":e.attrs.style=Nn(a);break;default:0===t.indexOf("aria-")||0===t.indexOf("data-")?e.attrs[t.toLowerCase()]=a:e.attrs[Pn(t)]=a}return e}),{attrs:{}}),i=a.style,s=void 0===i?{}:i,c=Sn(a,An);return r.attrs.style=kn(kn({},r.attrs.style),s),t.apply(void 0,[n.tag,kn(kn({},r.attrs),c)].concat(Cn(o)))}.bind(null,a.createElement);function Rn(e){let{className:t,style:n,...r}=e;return a.createElement("span",{className:(0,o.Z)("inline-block",t),"aria-hidden":"true",style:n},a.createElement(Mn,r))}},9187:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(27378),o=n(40624),r=n(30658);const i={1:"text-4xl font-extrabold sm:text-5xl",2:"text-3xl font-bold sm:text-4xl",3:"text-2xl font-bold",4:"text-xl font-bold",5:"text-lg font-semibold",6:"text-base font-semibold"};function s(e){let{align:t,as:n,children:s,className:c="",level:l,overflow:d="wrap",transform:u,variant:p="neutral"}=e;const f=n??`h${l}`;return a.createElement(f,{className:(0,o.Z)("m-0",t&&r.ox[t],i[l],r.s9[d],u&&r.Lo[u],r.oW[p],c)},s)}},90728:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var a=n(25773),o=n(27378),r=n(40624),i=n(81884),s=n(30658);const c={muted:"text-gray-700 hover:text-gray-800 dark:text-gray-600 dark:hover:text-gray-500",primary:"text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200"};function l(e){let{className:t,transform:n,size:l="df",weight:d="normal",variant:u="primary",...p}=e;return o.createElement(i.default,(0,a.Z)({className:(0,r.Z)("cursor-pointer",s.J7[l],n&&s.Lo[n],c[u],s.Xz[d],t)},p))}},30658:(e,t,n)=>{"use strict";n.d(t,{J7:()=>s,Lo:()=>c,Xz:()=>d,ZP:()=>u,oW:()=>l,ox:()=>r,s9:()=>i});var a=n(27378),o=n(40624);const r={center:"text-center",end:"text-right",justify:"text-justify",start:"text-left"},i={clip:"text-clip",ellipsis:"text-ellipsis",truncate:"truncate",wrap:""},s={df:"text-base",lg:"text-lg",sm:"text-sm"},c={capitalize:"capitalize",lowercase:"lowercase",uppercase:"uppercase"},l={muted:"text-gray-800 dark:text-slate-100",neutral:""},d={black:"font-black",bold:"font-bold",light:"font-light",medium:"font-medium",normal:"font-normal",thin:"font-thin"};function u(e){let{align:t,as:n="p",children:u,className:p="",overflow:f="wrap",size:m="df",transform:g,variant:b="neutral",weight:h="normal"}=e;return a.createElement(n,{className:(0,o.Z)(t&&r[t],i[f],s[m],g&&c[g],l[b],d[h],p)},u)}},15036:(e,t,n)=>{"use strict";n.d(t,{lX:()=>x,q_:()=>C,ob:()=>f,PP:()=>P,Ep:()=>p});var a=n(25773);function o(e){return"/"===e.charAt(0)}function r(e,t){for(var n=t,a=n+1,o=e.length;a<o;n+=1,a+=1)e[n]=e[a];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,a=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),c=t&&o(t),l=s||c;if(e&&o(e)?i=a:a.length&&(i.pop(),i=i.concat(a)),!i.length)return"/";if(i.length){var d=i[i.length-1];n="."===d||".."===d||""===d}else n=!1;for(var u=0,p=i.length;p>=0;p--){var f=i[p];"."===f?r(i,p):".."===f?(r(i,p),u++):u&&(r(i,p),u--)}if(!l)for(;u--;u)i.unshift("..");!l||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(92215);function c(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function d(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function u(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,a=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),a&&"#"!==a&&(o+="#"===a.charAt(0)?a:"#"+a),o}function f(e,t,n,o){var r;"string"==typeof e?(r=function(e){var t=e||"/",n="",a="",o=t.indexOf("#");-1!==o&&(a=t.substr(o),t=t.substr(0,o));var r=t.indexOf("?");return-1!==r&&(n=t.substr(r),t=t.substr(0,r)),{pathname:t,search:"?"===n?"":n,hash:"#"===a?"":a}}(e),r.state=t):(void 0===(r=(0,a.Z)({},e)).pathname&&(r.pathname=""),r.search?"?"!==r.search.charAt(0)&&(r.search="?"+r.search):r.search="",r.hash?"#"!==r.hash.charAt(0)&&(r.hash="#"+r.hash):r.hash="",void 0!==t&&void 0===r.state&&(r.state=t));try{r.pathname=decodeURI(r.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+r.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(r.key=n),o?r.pathname?"/"!==r.pathname.charAt(0)&&(r.pathname=i(r.pathname,o.pathname)):r.pathname=o.pathname:r.pathname||(r.pathname="/"),r}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,a,o){if(null!=e){var r="function"==typeof e?e(t,n):e;"string"==typeof r?"function"==typeof a?a(r,o):o(!0):o(!1!==r)}else o(!0)},appendListener:function(e){var n=!0;function a(){n&&e.apply(void 0,arguments)}return t.push(a),function(){n=!1,t=t.filter((function(e){return e!==a}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function b(e,t){t(window.confirm(e))}var h="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function x(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,r=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,l=i.forceRefresh,x=void 0!==l&&l,_=i.getUserConfirmation,k=void 0===_?b:_,w=i.keyLength,E=void 0===w?6:w,S=e.basename?u(c(e.basename)):"";function C(e){var t=e||{},n=t.key,a=t.state,o=window.location,r=o.pathname+o.search+o.hash;return S&&(r=d(r,S)),f(r,a,n)}function T(){return Math.random().toString(36).substr(2,E)}var P=m();function A(e){(0,a.Z)($,e),$.length=n.length,P.notifyListeners($.location,$.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(C(e.state))}function O(){L(C(y()))}var j=!1;function L(e){if(j)j=!1,A();else{P.confirmTransitionTo(e,"POP",k,(function(t){t?A({action:"POP",location:e}):function(e){var t=$.location,n=I.indexOf(t.key);-1===n&&(n=0);var a=I.indexOf(e.key);-1===a&&(a=0);var o=n-a;o&&(j=!0,D(o))}(e)}))}}var M=C(y()),I=[M.key];function R(e){return S+p(e)}function D(e){n.go(e)}var z=0;function F(e){1===(z+=e)&&1===e?(window.addEventListener(h,N),r&&window.addEventListener(v,O)):0===z&&(window.removeEventListener(h,N),r&&window.removeEventListener(v,O))}var B=!1;var $={length:n.length,action:"POP",location:M,createHref:R,push:function(e,t){var a="PUSH",r=f(e,t,T(),$.location);P.confirmTransitionTo(r,a,k,(function(e){if(e){var t=R(r),i=r.key,s=r.state;if(o)if(n.pushState({key:i,state:s},null,t),x)window.location.href=t;else{var c=I.indexOf($.location.key),l=I.slice(0,c+1);l.push(r.key),I=l,A({action:a,location:r})}else window.location.href=t}}))},replace:function(e,t){var a="REPLACE",r=f(e,t,T(),$.location);P.confirmTransitionTo(r,a,k,(function(e){if(e){var t=R(r),i=r.key,s=r.state;if(o)if(n.replaceState({key:i,state:s},null,t),x)window.location.replace(t);else{var c=I.indexOf($.location.key);-1!==c&&(I[c]=r.key),A({action:a,location:r})}else window.location.replace(t)}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return $}var _="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+l(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:l,decodePath:c},slash:{encodePath:c,decodePath:c}};function w(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function S(e){window.location.replace(w(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,r=void 0===o?b:o,i=n.hashType,l=void 0===i?"slash":i,h=e.basename?u(c(e.basename)):"",v=k[l],y=v.encodePath,x=v.decodePath;function C(){var e=x(E());return h&&(e=d(e,h)),f(e)}var T=m();function P(e){(0,a.Z)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var A=!1,N=null;function O(){var e,t,n=E(),a=y(n);if(n!==a)S(a);else{var o=C(),i=B.location;if(!A&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===p(o))return;N=null,function(e){if(A)A=!1,P();else{var t="POP";T.confirmTransitionTo(e,t,r,(function(n){n?P({action:t,location:e}):function(e){var t=B.location,n=I.lastIndexOf(p(t));-1===n&&(n=0);var a=I.lastIndexOf(p(e));-1===a&&(a=0);var o=n-a;o&&(A=!0,R(o))}(e)}))}}(o)}}var j=E(),L=y(j);j!==L&&S(L);var M=C(),I=[p(M)];function R(e){t.go(e)}var D=0;function z(e){1===(D+=e)&&1===e?window.addEventListener(_,O):0===D&&window.removeEventListener(_,O)}var F=!1;var B={length:t.length,action:"POP",location:M,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=w(window.location.href)),n+"#"+y(h+p(e))},push:function(e,t){var n="PUSH",a=f(e,void 0,void 0,B.location);T.confirmTransitionTo(a,n,r,(function(e){if(e){var t=p(a),o=y(h+t);if(E()!==o){N=t,function(e){window.location.hash=e}(o);var r=I.lastIndexOf(p(B.location)),i=I.slice(0,r+1);i.push(t),I=i,P({action:n,location:a})}else P()}}))},replace:function(e,t){var n="REPLACE",a=f(e,void 0,void 0,B.location);T.confirmTransitionTo(a,n,r,(function(e){if(e){var t=p(a),o=y(h+t);E()!==o&&(N=t,S(o));var r=I.indexOf(p(B.location));-1!==r&&(I[r]=t),P({action:n,location:a})}}))},go:R,goBack:function(){R(-1)},goForward:function(){R(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return F||(z(1),F=!0),function(){return F&&(F=!1,z(-1)),t()}},listen:function(e){var t=T.appendListener(e);return z(1),function(){z(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function P(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,r=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,c=t.keyLength,l=void 0===c?6:c,d=m();function u(e){(0,a.Z)(x,e),x.length=x.entries.length,d.notifyListeners(x.location,x.action)}function g(){return Math.random().toString(36).substr(2,l)}var b=T(s,0,r.length-1),h=r.map((function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())})),v=p;function y(e){var t=T(x.index+e,0,x.entries.length-1),a=x.entries[t];d.confirmTransitionTo(a,"POP",n,(function(e){e?u({action:"POP",location:a,index:t}):u()}))}var x={length:h.length,action:"POP",location:h[b],index:b,entries:h,createHref:v,push:function(e,t){var a="PUSH",o=f(e,t,g(),x.location);d.confirmTransitionTo(o,a,n,(function(e){if(e){var t=x.index+1,n=x.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),u({action:a,location:o,index:t,entries:n})}}))},replace:function(e,t){var a="REPLACE",o=f(e,t,g(),x.location);d.confirmTransitionTo(o,a,n,(function(e){e&&(x.entries[x.index]=o,u({action:a,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=x.index+e;return t>=0&&t<x.entries.length},block:function(e){return void 0===e&&(e=!1),d.setPrompt(e)},listen:function(e){return d.appendListener(e)}};return x}},55839:(e,t,n)=>{"use strict";var a=n(19185),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},r={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return a.isMemo(e)?i:s[e.$$typeof]||o}s[a.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[a.Memo]=i;var l=Object.defineProperty,d=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,a){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,a)}var i=d(n);u&&(i=i.concat(u(n)));for(var s=c(t),g=c(n),b=0;b<i.length;++b){var h=i[b];if(!(r[h]||a&&a[h]||g&&g[h]||s&&s[h])){var v=p(n,h);try{l(t,h,v)}catch(y){}}}}return t}},3996:e=>{"use strict";e.exports=function(e,t,n,a,o,r,i,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,a,o,r,i,s],d=0;(c=new Error(t.replace(/%s/g,(function(){return l[d++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},70142:(e,t,n)=>{"use strict";n.r(t)},26222:(e,t,n)=>{"use strict";n.r(t)},59887:(e,t,n)=>{"use strict";n.r(t)},8504:function(e,t,n){var a,o;a=function(){var e,t,n={version:"0.2.0"},a=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function r(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===a.positionUsing?{transform:"translate3d("+r(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+r(e)+"%,0)"}:{"margin-left":r(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(a[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,a.minimum,1),n.status=1===e?null:e;var r=n.render(!t),l=r.querySelector(a.barSelector),d=a.speed,u=a.easing;return r.offsetWidth,s((function(t){""===a.positionUsing&&(a.positionUsing=n.getPositioningCSS()),c(l,i(e,d,u)),1===e?(c(r,{transition:"none",opacity:1}),r.offsetWidth,setTimeout((function(){c(r,{transition:"all "+d+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),d)}),d)):setTimeout(t,d)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*a.trickleRate)},e=0,t=0,n.promise=function(a){return a&&"resolved"!==a.state()?(0===t&&n.start(),e++,t++,a.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=a.template;var o,i=t.querySelector(a.barSelector),s=e?"-100":r(n.status||0),l=document.querySelector(a.parent);return c(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),a.showSpinner||(o=t.querySelector(a.spinnerSelector))&&f(o),l!=document.body&&d(l,"nprogress-custom-parent"),l.appendChild(t),t},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),c=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function a(t){var n=document.body.style;if(t in n)return t;for(var a,o=e.length,r=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((a=e[o]+r)in n)return a;return t}function o(e){return e=n(e),t[e]||(t[e]=a(e))}function r(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,a,o=arguments;if(2==o.length)for(n in t)void 0!==(a=t[n])&&t.hasOwnProperty(n)&&r(e,n,a);else r(e,o[1],o[2])}}();function l(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function d(e,t){var n=p(e),a=n+t;l(n,t)||(e.className=a.substring(1))}function u(e,t){var n,a=p(e);l(e,t)&&(n=a.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof a?a.call(t,n,t,e):a)||(e.exports=o)},52349:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var a=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},a={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,r;switch(n=n||{},a.util.type(t)){case"Object":if(r=a.util.objId(t),n[r])return n[r];for(var i in o={},n[r]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return r=a.util.objId(t),n[r]?n[r]:(o=[],n[r]=o,t.forEach((function(t,a){o[a]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var a="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(a))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=a.util.clone(a.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var r=(o=o||a.languages)[e],i={};for(var s in r)if(r.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(i[c]=n[c]);n.hasOwnProperty(s)||(i[s]=r[s])}var l=o[e];return o[e]=i,a.languages.DFS(a.languages,(function(t,n){n===l&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,r){r=r||{};var i=a.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var c=t[s],l=a.util.type(c);"Object"!==l||r[i(c)]?"Array"!==l||r[i(c)]||(r[i(c)]=!0,e(c,n,s,r)):(r[i(c)]=!0,e(c,n,null,r))}}},plugins:{},highlight:function(e,t,n){var r={code:e,grammar:t,language:n};return a.hooks.run("before-tokenize",r),r.tokens=a.tokenize(r.code,r.grammar),a.hooks.run("after-tokenize",r),o.stringify(a.util.encode(r.tokens),r.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var a in n)t[a]=n[a];delete t.rest}var o=new s;return c(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=a.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=a.hooks.all[e];if(n&&n.length)for(var o,r=0;o=n[r++];)o(t)}},Token:o};function o(e,t,n,a){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length}function r(e,t,n,a){e.lastIndex=t;var o=e.exec(n);if(o&&a&&o[1]){var r=o[1].length;o.index+=r,o[0]=o[0].slice(r)}return o}function i(e,t,n,s,d,u){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(u&&u.cause==p+","+m)return;var g=f[m],b=g.inside,h=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var x=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,x+"g")}for(var _=g.pattern||g,k=s.next,w=d;k!==t.tail&&!(u&&w>=u.reach);w+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof o)){var S,C=1;if(v){if(!(S=r(_,w,e,h))||S.index>=e.length)break;var T=S.index,P=S.index+S[0].length,A=w;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(w=A-=k.value.length,k.value instanceof o)continue;for(var N=k;N!==t.tail&&(A<P||"string"==typeof N.value);N=N.next)C++,A+=N.value.length;C--,E=e.slice(w,A),S.index-=w}else if(!(S=r(_,0,E,h)))continue;T=S.index;var O=S[0],j=E.slice(0,T),L=E.slice(T+O.length),M=w+E.length;u&&M>u.reach&&(u.reach=M);var I=k.prev;if(j&&(I=c(t,I,j),w+=j.length),l(t,I,C),k=c(t,I,new o(p,b?a.tokenize(O,b):O,y,O)),L&&c(t,k,L),C>1){var R={cause:p+","+m,reach:M};i(e,t,n,k.prev,w,R),u&&R.reach>u.reach&&(u.reach=R.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function c(e,t,n){var a=t.next,o={value:n,prev:t,next:a};return t.next=o,a.prev=o,e.length++,o}function l(e,t,n){for(var a=t.next,o=0;o<n&&a!==e.tail;o++)a=a.next;t.next=a,a.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var r={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(r.classes,i):r.classes.push(i)),a.hooks.run("wrap",r);var s="";for(var c in r.attributes)s+=" "+c+'="'+(r.attributes[c]||"").replace(/"/g,""")+'"';return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+s+">"+r.content+"</"+r.tag+">"},a}(),o=a;a.default=a,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},o.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=a.variable[1].inside,i=0;i<o.length;i++)r[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var a={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:a,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:a,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),r=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return a})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return a})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+r+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(r),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return a})),r=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+r+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+r+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+r+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,a=t.length;n<a;n++){var o=t[n];if("code"===o.type){var r=o.content[1],i=o.content[3];if(r&&i&&"code-language"===r.type&&"code-block"===i.type&&"string"==typeof r.content){var s=r.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),c="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,c]:i.alias.push(c):i.alias=[c]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",a=0,o=t.classes.length;a<o;a++){var r=t.classes[a],l=/language-(.+)/.exec(r);if(l){n=l[1];break}}var d,u=e.languages[n];if(u)t.content=e.highlight((d=t.content,d.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),c(n);var a=s[t];return a||e}))),u,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var a=t[n++];if("keyword"===a.type&&"mutation"===a.content){var o=[];if(u(["definition-mutation","punctuation"])&&"("===d(1).content){n+=2;var r=p(/^\($/,/^\)$/);if(-1===r)continue;for(;n<r;n++){var i=d(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=r+1}if(u(["punctuation","property-query"])&&"{"===d(0).content&&(n++,f(d(0),"property-mutation"),o.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=n;c<s;c++){var l=t[c];"variable"===l.type&&o.indexOf(l.content)>=0&&f(l,"variable-input")}}}}function d(e){return t[n+e]}function u(e,t){t=t||0;for(var n=0;n<e.length;n++){var a=d(n+t);if(!a||a.type!==e[n])return!1}return!0}function p(e,a){for(var o=1,r=n;r<t.length;r++){var i=t[r],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(a.test(s)&&0===--o)return r}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,a=t.inside.interpolation,o=a.inside["interpolation-punctuation"],r=a.pattern.source;function i(t,a){if(e.languages[t])return{pattern:RegExp("((?:"+a+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function c(t,n,a){var o={code:t,grammar:n,language:a};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function l(t){var n={};n["interpolation-punctuation"]=o;var r=e.tokenize(t,n);if(3===r.length){var i=[1,1];i.push.apply(i,c(r[1],e.languages.javascript,"javascript")),r.splice.apply(r,i)}return new e.Token("interpolation",r,a.alias,t)}function d(t,n,a){var o=e.tokenize(t,{interpolation:{pattern:RegExp(r),lookbehind:!0}}),i=0,d={},u=c(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=s(i++,a)););return d[n]=o,n})).join(""),n,a),p=Object.keys(d);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var a=t[n];if("string"==typeof a||"string"==typeof a.content){var o=p[i],r="string"==typeof a?a:a.content,s=r.indexOf(o);if(-1!==s){++i;var c=r.substring(0,s),u=l(d[o]),f=r.substring(s+o.length),m=[];if(c&&m.push(c),m.push(u),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof a?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):a.content=m}}else{var b=a.content;Array.isArray(b)?e(b):e([b])}}}(u),new e.Token(a,u,"language-"+a,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var u={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in u&&function t(n){for(var a=0,o=n.length;a<o;a++){var r=n[a];if("string"!=typeof r){var i=r.content;if(Array.isArray(i))if("template-string"===r.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var c=p(s),l=s.alias,u=Array.isArray(l)?l[0]:l,f=e.languages[u];if(!f)continue;i[1]=d(c,f,u)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],a=0;a<n.length;a++){var o=n[a],r=e.languages.javascript[o];"RegExp"===e.util.type(r)&&(r=e.languages.javascript[o]={pattern:r});var i=r.inside||{};r.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,a=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function r(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return a})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=r(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=r(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:r(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:r(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],a=0;a<t.length;a++){var o=t[a],r=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:r=!0),(r||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var c=i(o);a<t.length-1&&("string"==typeof t[a+1]||"plain-text"===t[a+1].type)&&(c+=i(t[a+1]),t.splice(a+1,1)),a>0&&("string"==typeof t[a-1]||"plain-text"===t[a-1].type)&&(c=i(t[a-1])+c,t.splice(a-1,1),a--),t[a]=new e.Token("plain-text",c,null,c)}o.content&&"string"!=typeof o.content&&s(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var a=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+a+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,o,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof r&&!r(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(a,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var o=0,r=Object.keys(n.tokenStack);!function i(s){for(var c=0;c<s.length&&!(o>=r.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var d=r[o],u=n.tokenStack[d],p="string"==typeof l?l:l.content,f=t(a,d),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),b=new e.Token(a,e.tokenize(u,n.grammar),"language-"+a,u),h=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(b),h&&v.push.apply(v,i([h])),"string"==typeof l?s.splice.apply(s,[c,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},a={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};a.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:a}},a.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:a}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:a}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:a}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:a}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:a.interpolation}},rest:a}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:a.interpolation,comment:a.comment,punctuation:/[{},]/}},func:a.func,string:a.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:a.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const r=o},36761:()=>{!function(e){var t=/\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source,n=/(?:[ \t]+(?![ \t])(?:<SP_BS>)?|<SP_BS>)/.source.replace(/<SP_BS>/g,(function(){return t})),a=/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source,o=/--[\w-]+=(?:<STR>|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(/<STR>/g,(function(){return a})),r={pattern:RegExp(a),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function s(e,t){return e=e.replace(/<OPT>/g,(function(){return o})).replace(/<SP>/g,(function(){return n})),RegExp(e,t)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:s(/(^(?:ONBUILD<SP>)?\w+<SP>)<OPT>(?:<SP><OPT>)*/.source,"i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[r,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:s(/(^(?:ONBUILD<SP>)?HEALTHCHECK<SP>(?:<OPT><SP>)*)(?:CMD|NONE)\b/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^(?:ONBUILD<SP>)?FROM<SP>(?:<OPT><SP>)*(?!--)[^ \t\\]+<SP>)AS/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^ONBUILD<SP>)\w+/.source,"i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:r,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism)},71667:()=>{!function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},56572:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},3567:()=>{Prism.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},Prism.hooks.add("before-tokenize",(function(e){if("twig"===e.language){Prism.languages["markup-templating"].buildPlaceholders(e,"twig",/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g)}})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"twig")}))},59341:(e,t,n)=>{var a={"./prism-docker":36761,"./prism-rust":71667,"./prism-toml":56572,"./prism-twig":3567};function o(e){var t=r(e);return n(t)}function r(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}o.keys=function(){return Object.keys(a)},o.resolve=r,e.exports=o,o.id=59341},58772:(e,t,n)=>{"use strict";var a=n(90331);function o(){}function r(){}r.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,r,i){if(i!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:r,resetWarningCache:o};return n.PropTypes=n,n}},23615:(e,t,n)=>{e.exports=n(58772)()},90331:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},43577:(e,t,n)=>{"use strict";var a=n(27378),o=n(43637);function r(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function c(e,t){l(e,t),l(e+"Capture",t)}function l(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),u=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function g(e,t,n,a,o,r,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=a,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=r,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var h=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,n,a){var o=b.hasOwnProperty(t)?b[t]:null;(null!==o?0!==o.type:a||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,a){if(null==t||function(e,t,n,a){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!a&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,a))return!0;if(a)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,a)&&(n=null),a||null===o?function(e){return!!u.call(m,e)||!u.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,a=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,a?e.setAttributeNS(a,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(h,v);b[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(h,v);b[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(h,v);b[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var x=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=Symbol.for("react.element"),k=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),A=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),O=Symbol.for("react.memo"),j=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var L=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var M=Symbol.iterator;function I(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=M&&e[M]||e["@@iterator"])?e:null}var R,D=Object.assign;function z(e){if(void 0===R)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);R=t&&t[1]||""}return"\n"+R+e}var F=!1;function B(e,t){if(!e||F)return"";F=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(l){var a=l}Reflect.construct(e,[],t)}else{try{t.call()}catch(l){a=l}e.call(t.prototype)}else{try{throw Error()}catch(l){a=l}e()}}catch(l){if(l&&a&&"string"==typeof l.stack){for(var o=l.stack.split("\n"),r=a.stack.split("\n"),i=o.length-1,s=r.length-1;1<=i&&0<=s&&o[i]!==r[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==r[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==r[s]){var c="\n"+o[i].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}}while(1<=i&&0<=s);break}}}finally{F=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?z(e):""}function $(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case w:return"Fragment";case k:return"Portal";case S:return"Profiler";case E:return"StrictMode";case A:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case P:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case O:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case j:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function V(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function Z(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=Z(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),a=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,r=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){a=""+e,r.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(e){a=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=Z(e)?e.checked?"true":"false":e.value),(e=a)!==n&&(t.setValue(e),!0)}function G(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Y(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function K(e,t){var n=null==t.defaultValue?"":t.defaultValue,a=null!=t.checked?t.checked:t.defaultChecked;n=V(null!=t.value?t.value:n),e._wrapperState={initialChecked:a,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Q(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function X(e,t){Q(e,t);var n=V(t.value),a=t.type;if(null!=n)"number"===a?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===a||"reset"===a)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,V(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var a=t.type;if(!("submit"!==a&&"reset"!==a||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&G(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,a){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&a&&(e[n].defaultSelected=!0)}else{for(n=""+V(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(a&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ae(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(r(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(r(92));if(te(n)){if(1<n.length)throw Error(r(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:V(n)}}function re(e,t){var n=V(t.value),a=V(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=a&&(e.defaultValue=""+a)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ce(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var le,de,ue=(de=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((le=le||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=le.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,a){MSApp.execUnsafeLocalFunction((function(){return de(e,t)}))}:de);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function ge(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function be(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var a=0===n.indexOf("--"),o=ge(n,t[n],a);"float"===n&&(n="cssFloat"),a?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var he=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ve(e,t){if(t){if(he[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(r(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(r(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(r(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(r(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var xe=null;function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,we=null,Ee=null;function Se(e){if(e=xo(e)){if("function"!=typeof ke)throw Error(r(280));var t=e.stateNode;t&&(t=ko(t),ke(e.stateNode,e.type,t))}}function Ce(e){we?Ee?Ee.push(e):Ee=[e]:we=e}function Te(){if(we){var e=we,t=Ee;if(Ee=we=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Pe(e,t){return e(t)}function Ae(){}var Ne=!1;function Oe(e,t,n){if(Ne)return e(t,n);Ne=!0;try{return Pe(e,t,n)}finally{Ne=!1,(null!==we||null!==Ee)&&(Ae(),Te())}}function je(e,t){var n=e.stateNode;if(null===n)return null;var a=ko(n);if(null===a)return null;n=a[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(a=!a.disabled)||(a=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!a;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(r(231,t,typeof n));return n}var Le=!1;if(d)try{var Me={};Object.defineProperty(Me,"passive",{get:function(){Le=!0}}),window.addEventListener("test",Me,Me),window.removeEventListener("test",Me,Me)}catch(de){Le=!1}function Ie(e,t,n,a,o,r,i,s,c){var l=Array.prototype.slice.call(arguments,3);try{t.apply(n,l)}catch(d){this.onError(d)}}var Re=!1,De=null,ze=!1,Fe=null,Be={onError:function(e){Re=!0,De=e}};function $e(e,t,n,a,o,r,i,s,c){Re=!1,De=null,Ie.apply(Be,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function He(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ve(e){if(Ue(e)!==e)throw Error(r(188))}function Ze(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(r(188));return t!==e?null:e}for(var n=e,a=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(a=o.return)){n=a;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Ve(o),e;if(i===a)return Ve(o),t;i=i.sibling}throw Error(r(188))}if(n.return!==a.return)n=o,a=i;else{for(var s=!1,c=o.child;c;){if(c===n){s=!0,n=o,a=i;break}if(c===a){s=!0,a=o,n=i;break}c=c.sibling}if(!s){for(c=i.child;c;){if(c===n){s=!0,n=i,a=o;break}if(c===a){s=!0,a=i,n=o;break}c=c.sibling}if(!s)throw Error(r(189))}}if(n.alternate!==a)throw Error(r(190))}if(3!==n.tag)throw Error(r(188));return n.stateNode.current===n?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var We=o.unstable_scheduleCallback,Ge=o.unstable_cancelCallback,Ye=o.unstable_shouldYield,Ke=o.unstable_requestPaint,Qe=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,at=o.unstable_IdlePriority,ot=null,rt=null;var it=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(st(e)/ct|0)|0},st=Math.log,ct=Math.LN2;var lt=64,dt=4194304;function ut(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var a=0,o=e.suspendedLanes,r=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?a=ut(s):0!==(r&=i)&&(a=ut(r))}else 0!==(i=n&~o)?a=ut(i):0!==r&&(a=ut(r));if(0===a)return 0;if(0!==t&&t!==a&&0==(t&o)&&((o=a&-a)>=(r=t&-t)||16===o&&0!=(4194240&r)))return t;if(0!=(4&a)&&(a|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=a;0<t;)o=1<<(n=31-it(t)),a|=e[n],t&=~o;return a}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function gt(){var e=lt;return 0==(4194240&(lt<<=1))&&(lt=64),e}function bt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function ht(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var a=31-it(n),o=1<<a;o&t|e[a]&t&&(e[a]|=t),n&=~o}}var yt=0;function xt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var _t,kt,wt,Et,St,Ct=!1,Tt=[],Pt=null,At=null,Nt=null,Ot=new Map,jt=new Map,Lt=[],Mt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function It(e,t){switch(e){case"focusin":case"focusout":Pt=null;break;case"dragenter":case"dragleave":At=null;break;case"mouseover":case"mouseout":Nt=null;break;case"pointerover":case"pointerout":Ot.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":jt.delete(t.pointerId)}}function Rt(e,t,n,a,o,r){return null===e||e.nativeEvent!==r?(e={blockedOn:t,domEventName:n,eventSystemFlags:a,nativeEvent:r,targetContainers:[o]},null!==t&&(null!==(t=xo(t))&&kt(t)),e):(e.eventSystemFlags|=a,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Dt(e){var t=yo(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=He(n)))return e.blockedOn=t,void St(e.priority,(function(){wt(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function zt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Yt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=xo(n))&&kt(t),e.blockedOn=n,!1;var a=new(n=e.nativeEvent).constructor(n.type,n);xe=a,n.target.dispatchEvent(a),xe=null,t.shift()}return!0}function Ft(e,t,n){zt(e)&&n.delete(t)}function Bt(){Ct=!1,null!==Pt&&zt(Pt)&&(Pt=null),null!==At&&zt(At)&&(At=null),null!==Nt&&zt(Nt)&&(Nt=null),Ot.forEach(Ft),jt.forEach(Ft)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var a=Tt[n];a.blockedOn===e&&(a.blockedOn=null)}}for(null!==Pt&&$t(Pt,e),null!==At&&$t(At,e),null!==Nt&&$t(Nt,e),Ot.forEach(t),jt.forEach(t),n=0;n<Lt.length;n++)(a=Lt[n]).blockedOn===e&&(a.blockedOn=null);for(;0<Lt.length&&null===(n=Lt[0]).blockedOn;)Dt(n),null===n.blockedOn&&Lt.shift()}var Ht=x.ReactCurrentBatchConfig,Vt=!0;function Zt(e,t,n,a){var o=yt,r=Ht.transition;Ht.transition=null;try{yt=1,Wt(e,t,n,a)}finally{yt=o,Ht.transition=r}}function qt(e,t,n,a){var o=yt,r=Ht.transition;Ht.transition=null;try{yt=4,Wt(e,t,n,a)}finally{yt=o,Ht.transition=r}}function Wt(e,t,n,a){if(Vt){var o=Yt(e,t,n,a);if(null===o)Va(e,t,a,Gt,n),It(e,a);else if(function(e,t,n,a,o){switch(t){case"focusin":return Pt=Rt(Pt,e,t,n,a,o),!0;case"dragenter":return At=Rt(At,e,t,n,a,o),!0;case"mouseover":return Nt=Rt(Nt,e,t,n,a,o),!0;case"pointerover":var r=o.pointerId;return Ot.set(r,Rt(Ot.get(r)||null,e,t,n,a,o)),!0;case"gotpointercapture":return r=o.pointerId,jt.set(r,Rt(jt.get(r)||null,e,t,n,a,o)),!0}return!1}(o,e,t,n,a))a.stopPropagation();else if(It(e,a),4&t&&-1<Mt.indexOf(e)){for(;null!==o;){var r=xo(o);if(null!==r&&_t(r),null===(r=Yt(e,t,n,a))&&Va(e,t,a,Gt,n),r===o)break;o=r}null!==o&&a.stopPropagation()}else Va(e,t,a,null,n)}}var Gt=null;function Yt(e,t,n,a){if(Gt=null,null!==(e=yo(e=_e(a))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=He(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gt=e,null}function Kt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case at:return 536870912;default:return 16}default:return 16}}var Qt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,a=n.length,o="value"in Qt?Qt.value:Qt.textContent,r=o.length;for(e=0;e<a&&n[e]===o[e];e++);var i=a-e;for(t=1;t<=i&&n[a-t]===o[r-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function an(){return!1}function on(e){function t(t,n,a,o,r){for(var i in this._reactName=t,this._targetInst=a,this.type=n,this.nativeEvent=o,this.target=r,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:an,this.isPropagationStopped=an,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var rn,sn,cn,ln={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},dn=on(ln),un=D({},ln,{view:0,detail:0}),pn=on(un),fn=D({},un,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(rn=e.screenX-cn.screenX,sn=e.screenY-cn.screenY):sn=rn=0,cn=e),rn)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=on(fn),gn=on(D({},fn,{dataTransfer:0})),bn=on(D({},un,{relatedTarget:0})),hn=on(D({},ln,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=D({},ln,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yn=on(vn),xn=on(D({},ln,{data:0})),_n={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},wn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=wn[e])&&!!t[e]}function Sn(){return En}var Cn=D({},un,{key:function(e){if(e.key){var t=_n[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=on(Cn),Pn=on(D({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=on(D({},un,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),Nn=on(D({},ln,{propertyName:0,elapsedTime:0,pseudoElement:0})),On=D({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=on(On),Ln=[9,13,27,32],Mn=d&&"CompositionEvent"in window,In=null;d&&"documentMode"in document&&(In=document.documentMode);var Rn=d&&"TextEvent"in window&&!In,Dn=d&&(!Mn||In&&8<In&&11>=In),zn=String.fromCharCode(32),Fn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Ln.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Hn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Zn(e,t,n,a){Ce(a),0<(t=qa(t,"onChange")).length&&(n=new dn("onChange","change",null,n,a),e.push({event:n,listeners:t}))}var qn=null,Wn=null;function Gn(e){za(e,0)}function Yn(e){if(W(_o(e)))return e}function Kn(e,t){if("change"===e)return t}var Qn=!1;if(d){var Xn;if(d){var Jn="oninput"in document;if(!Jn){var ea=document.createElement("div");ea.setAttribute("oninput","return;"),Jn="function"==typeof ea.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function ta(){qn&&(qn.detachEvent("onpropertychange",na),Wn=qn=null)}function na(e){if("value"===e.propertyName&&Yn(Wn)){var t=[];Zn(t,Wn,e,_e(e)),Oe(Gn,t)}}function aa(e,t,n){"focusin"===e?(ta(),Wn=n,(qn=t).attachEvent("onpropertychange",na)):"focusout"===e&&ta()}function oa(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Yn(Wn)}function ra(e,t){if("click"===e)return Yn(t)}function ia(e,t){if("input"===e||"change"===e)return Yn(t)}var sa="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function ca(e,t){if(sa(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(a=0;a<n.length;a++){var o=n[a];if(!u.call(t,o)||!sa(e[o],t[o]))return!1}return!0}function la(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function da(e,t){var n,a=la(e);for(e=0;a;){if(3===a.nodeType){if(n=e+a.textContent.length,e<=t&&n>=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=la(a)}}function ua(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?ua(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pa(){for(var e=window,t=G();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(a){n=!1}if(!n)break;t=G((e=t.contentWindow).document)}return t}function fa(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function ma(e){var t=pa(),n=e.focusedElem,a=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&ua(n.ownerDocument.documentElement,n)){if(null!==a&&fa(n))if(t=a.start,void 0===(e=a.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,r=Math.min(a.start,o);a=void 0===a.end?r:Math.min(a.end,o),!e.extend&&r>a&&(o=a,a=r,r=o),o=da(n,r);var i=da(n,a);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),r>a?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var ga=d&&"documentMode"in document&&11>=document.documentMode,ba=null,ha=null,va=null,ya=!1;function xa(e,t,n){var a=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ya||null==ba||ba!==G(a)||("selectionStart"in(a=ba)&&fa(a)?a={start:a.selectionStart,end:a.selectionEnd}:a={anchorNode:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset},va&&ca(va,a)||(va=a,0<(a=qa(ha,"onSelect")).length&&(t=new dn("onSelect","select",null,t,n),e.push({event:t,listeners:a}),t.target=ba)))}function _a(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var ka={animationend:_a("Animation","AnimationEnd"),animationiteration:_a("Animation","AnimationIteration"),animationstart:_a("Animation","AnimationStart"),transitionend:_a("Transition","TransitionEnd")},wa={},Ea={};function Sa(e){if(wa[e])return wa[e];if(!ka[e])return e;var t,n=ka[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ea)return wa[e]=n[t];return e}d&&(Ea=document.createElement("div").style,"AnimationEvent"in window||(delete ka.animationend.animation,delete ka.animationiteration.animation,delete ka.animationstart.animation),"TransitionEvent"in window||delete ka.transitionend.transition);var Ca=Sa("animationend"),Ta=Sa("animationiteration"),Pa=Sa("animationstart"),Aa=Sa("transitionend"),Na=new Map,Oa="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function ja(e,t){Na.set(e,t),c(t,[e])}for(var La=0;La<Oa.length;La++){var Ma=Oa[La];ja(Ma.toLowerCase(),"on"+(Ma[0].toUpperCase()+Ma.slice(1)))}ja(Ca,"onAnimationEnd"),ja(Ta,"onAnimationIteration"),ja(Pa,"onAnimationStart"),ja("dblclick","onDoubleClick"),ja("focusin","onFocus"),ja("focusout","onBlur"),ja(Aa,"onTransitionEnd"),l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ia="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ra=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ia));function Da(e,t,n){var a=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,a,o,i,s,c,l){if($e.apply(this,arguments),Re){if(!Re)throw Error(r(198));var d=De;Re=!1,De=null,ze||(ze=!0,Fe=d)}}(a,t,void 0,e),e.currentTarget=null}function za(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var a=e[n],o=a.event;a=a.listeners;e:{var r=void 0;if(t)for(var i=a.length-1;0<=i;i--){var s=a[i],c=s.instance,l=s.currentTarget;if(s=s.listener,c!==r&&o.isPropagationStopped())break e;Da(o,s,l),r=c}else for(i=0;i<a.length;i++){if(c=(s=a[i]).instance,l=s.currentTarget,s=s.listener,c!==r&&o.isPropagationStopped())break e;Da(o,s,l),r=c}}}if(ze)throw e=Fe,ze=!1,Fe=null,e}function Fa(e,t){var n=t[bo];void 0===n&&(n=t[bo]=new Set);var a=e+"__bubble";n.has(a)||(Ha(t,e,2,!1),n.add(a))}function Ba(e,t,n){var a=0;t&&(a|=4),Ha(n,e,a,t)}var $a="_reactListening"+Math.random().toString(36).slice(2);function Ua(e){if(!e[$a]){e[$a]=!0,i.forEach((function(t){"selectionchange"!==t&&(Ra.has(t)||Ba(t,!1,e),Ba(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$a]||(t[$a]=!0,Ba("selectionchange",!1,t))}}function Ha(e,t,n,a){switch(Kt(t)){case 1:var o=Zt;break;case 4:o=qt;break;default:o=Wt}n=o.bind(null,t,n,e),o=void 0,!Le||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),a?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Va(e,t,n,a,o){var r=a;if(0==(1&t)&&0==(2&t)&&null!==a)e:for(;;){if(null===a)return;var i=a.tag;if(3===i||4===i){var s=a.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=a.return;null!==i;){var c=i.tag;if((3===c||4===c)&&((c=i.stateNode.containerInfo)===o||8===c.nodeType&&c.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=yo(s)))return;if(5===(c=i.tag)||6===c){a=r=i;continue e}s=s.parentNode}}a=a.return}Oe((function(){var a=r,o=_e(n),i=[];e:{var s=Na.get(e);if(void 0!==s){var c=dn,l=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":c=Tn;break;case"focusin":l="focus",c=bn;break;case"focusout":l="blur",c=bn;break;case"beforeblur":case"afterblur":c=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=gn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=An;break;case Ca:case Ta:case Pa:c=hn;break;case Aa:c=Nn;break;case"scroll":c=pn;break;case"wheel":c=jn;break;case"copy":case"cut":case"paste":c=yn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=Pn}var d=0!=(4&t),u=!d&&"scroll"===e,p=d?null!==s?s+"Capture":null:s;d=[];for(var f,m=a;null!==m;){var g=(f=m).stateNode;if(5===f.tag&&null!==g&&(f=g,null!==p&&(null!=(g=je(m,p))&&d.push(Za(m,g,f)))),u)break;m=m.return}0<d.length&&(s=new c(s,l,null,n,o),i.push({event:s,listeners:d}))}}if(0==(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===xe||!(l=n.relatedTarget||n.fromElement)||!yo(l)&&!l[go])&&(c||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=a,null!==(l=(l=n.relatedTarget||n.toElement)?yo(l):null)&&(l!==(u=Ue(l))||5!==l.tag&&6!==l.tag)&&(l=null)):(c=null,l=a),c!==l)){if(d=mn,g="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(d=Pn,g="onPointerLeave",p="onPointerEnter",m="pointer"),u=null==c?s:_o(c),f=null==l?s:_o(l),(s=new d(g,m+"leave",c,n,o)).target=u,s.relatedTarget=f,g=null,yo(o)===a&&((d=new d(p,m+"enter",l,n,o)).target=f,d.relatedTarget=u,g=d),u=g,c&&l)e:{for(p=l,m=0,f=d=c;f;f=Wa(f))m++;for(f=0,g=p;g;g=Wa(g))f++;for(;0<m-f;)d=Wa(d),m--;for(;0<f-m;)p=Wa(p),f--;for(;m--;){if(d===p||null!==p&&d===p.alternate)break e;d=Wa(d),p=Wa(p)}d=null}else d=null;null!==c&&Ga(i,s,c,d,!1),null!==l&&null!==u&&Ga(i,u,l,d,!0)}if("select"===(c=(s=a?_o(a):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var b=Kn;else if(Vn(s))if(Qn)b=ia;else{b=oa;var h=aa}else(c=s.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(b=ra);switch(b&&(b=b(e,a))?Zn(i,b,n,o):(h&&h(e,s,a),"focusout"===e&&(h=s._wrapperState)&&h.controlled&&"number"===s.type&&ee(s,"number",s.value)),h=a?_o(a):window,e){case"focusin":(Vn(h)||"true"===h.contentEditable)&&(ba=h,ha=a,va=null);break;case"focusout":va=ha=ba=null;break;case"mousedown":ya=!0;break;case"contextmenu":case"mouseup":case"dragend":ya=!1,xa(i,n,o);break;case"selectionchange":if(ga)break;case"keydown":case"keyup":xa(i,n,o)}var v;if(Mn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Un?Bn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(Dn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==y?"onCompositionEnd"===y&&Un&&(v=en()):(Xt="value"in(Qt=o)?Qt.value:Qt.textContent,Un=!0)),0<(h=qa(a,y)).length&&(y=new xn(y,e,null,n,o),i.push({event:y,listeners:h}),v?y.data=v:null!==(v=$n(n))&&(y.data=v))),(v=Rn?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(Fn=!0,zn);case"textInput":return(e=t.data)===zn&&Fn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!Mn&&Bn(e,t)?(e=en(),Jt=Xt=Qt=null,Un=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Dn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(a=qa(a,"onBeforeInput")).length&&(o=new xn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:a}),o.data=v))}za(i,t)}))}function Za(e,t,n){return{instance:e,listener:t,currentTarget:n}}function qa(e,t){for(var n=t+"Capture",a=[];null!==e;){var o=e,r=o.stateNode;5===o.tag&&null!==r&&(o=r,null!=(r=je(e,n))&&a.unshift(Za(e,r,o)),null!=(r=je(e,t))&&a.push(Za(e,r,o))),e=e.return}return a}function Wa(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Ga(e,t,n,a,o){for(var r=t._reactName,i=[];null!==n&&n!==a;){var s=n,c=s.alternate,l=s.stateNode;if(null!==c&&c===a)break;5===s.tag&&null!==l&&(s=l,o?null!=(c=je(n,r))&&i.unshift(Za(n,c,s)):o||null!=(c=je(n,r))&&i.push(Za(n,c,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Ya=/\r\n?/g,Ka=/\u0000|\uFFFD/g;function Qa(e){return("string"==typeof e?e:""+e).replace(Ya,"\n").replace(Ka,"")}function Xa(e,t,n){if(t=Qa(t),Qa(e)!==t&&n)throw Error(r(425))}function Ja(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ao="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ro="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ro?function(e){return ro.resolve(null).then(e).catch(so)}:ao;function so(e){setTimeout((function(){throw e}))}function co(e,t){var n=t,a=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===a)return e.removeChild(o),void Ut(t);a--}else"$"!==n&&"$?"!==n&&"$!"!==n||a++;n=o}while(n);Ut(t)}function lo(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,go="__reactContainer$"+po,bo="__reactEvents$"+po,ho="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[go]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function xo(e){return!(e=e[fo]||e[go])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function _o(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(r(33))}function ko(e){return e[mo]||null}var wo=[],Eo=-1;function So(e){return{current:e}}function Co(e){0>Eo||(e.current=wo[Eo],wo[Eo]=null,Eo--)}function To(e,t){Eo++,wo[Eo]=e.current,e.current=t}var Po={},Ao=So(Po),No=So(!1),Oo=Po;function jo(e,t){var n=e.type.contextTypes;if(!n)return Po;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var o,r={};for(o in n)r[o]=t[o];return a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function Lo(e){return null!=(e=e.childContextTypes)}function Mo(){Co(No),Co(Ao)}function Io(e,t,n){if(Ao.current!==Po)throw Error(r(168));To(Ao,t),To(No,n)}function Ro(e,t,n){var a=e.stateNode;if(t=t.childContextTypes,"function"!=typeof a.getChildContext)return n;for(var o in a=a.getChildContext())if(!(o in t))throw Error(r(108,H(e)||"Unknown",o));return D({},n,a)}function Do(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Po,Oo=Ao.current,To(Ao,e),To(No,No.current),!0}function zo(e,t,n){var a=e.stateNode;if(!a)throw Error(r(169));n?(e=Ro(e,t,Oo),a.__reactInternalMemoizedMergedChildContext=e,Co(No),Co(Ao),To(Ao,e)):Co(No),To(No,n)}var Fo=null,Bo=!1,$o=!1;function Uo(e){null===Fo?Fo=[e]:Fo.push(e)}function Ho(){if(!$o&&null!==Fo){$o=!0;var e=0,t=yt;try{var n=Fo;for(yt=1;e<n.length;e++){var a=n[e];do{a=a(!0)}while(null!==a)}Fo=null,Bo=!1}catch(o){throw null!==Fo&&(Fo=Fo.slice(e+1)),We(Je,Ho),o}finally{yt=t,$o=!1}}return null}var Vo=[],Zo=0,qo=null,Wo=0,Go=[],Yo=0,Ko=null,Qo=1,Xo="";function Jo(e,t){Vo[Zo++]=Wo,Vo[Zo++]=qo,qo=e,Wo=t}function er(e,t,n){Go[Yo++]=Qo,Go[Yo++]=Xo,Go[Yo++]=Ko,Ko=e;var a=Qo;e=Xo;var o=32-it(a)-1;a&=~(1<<o),n+=1;var r=32-it(t)+o;if(30<r){var i=o-o%5;r=(a&(1<<i)-1).toString(32),a>>=i,o-=i,Qo=1<<32-it(t)+o|n<<o|a,Xo=r+e}else Qo=1<<r|n<<o|a,Xo=e}function tr(e){null!==e.return&&(Jo(e,1),er(e,1,0))}function nr(e){for(;e===qo;)qo=Vo[--Zo],Vo[Zo]=null,Wo=Vo[--Zo],Vo[Zo]=null;for(;e===Ko;)Ko=Go[--Yo],Go[Yo]=null,Xo=Go[--Yo],Go[Yo]=null,Qo=Go[--Yo],Go[Yo]=null}var ar=null,or=null,rr=!1,ir=null;function sr(e,t){var n=Ol(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function cr(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ar=e,or=lo(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ar=e,or=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ko?{id:Qo,overflow:Xo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Ol(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ar=e,or=null,!0);default:return!1}}function lr(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function dr(e){if(rr){var t=or;if(t){var n=t;if(!cr(e,t)){if(lr(e))throw Error(r(418));t=lo(n.nextSibling);var a=ar;t&&cr(e,t)?sr(a,n):(e.flags=-4097&e.flags|2,rr=!1,ar=e)}}else{if(lr(e))throw Error(r(418));e.flags=-4097&e.flags|2,rr=!1,ar=e}}}function ur(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ar=e}function pr(e){if(e!==ar)return!1;if(!rr)return ur(e),rr=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=or)){if(lr(e))throw fr(),Error(r(418));for(;t;)sr(e,t),t=lo(t.nextSibling)}if(ur(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(r(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){or=lo(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}or=null}}else or=ar?lo(e.stateNode.nextSibling):null;return!0}function fr(){for(var e=or;e;)e=lo(e.nextSibling)}function mr(){or=ar=null,rr=!1}function gr(e){null===ir?ir=[e]:ir.push(e)}var br=x.ReactCurrentBatchConfig;function hr(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var vr=So(null),yr=null,xr=null,_r=null;function kr(){_r=xr=yr=null}function wr(e){var t=vr.current;Co(vr),e._currentValue=t}function Er(e,t,n){for(;null!==e;){var a=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==a&&(a.childLanes|=t)):null!==a&&(a.childLanes&t)!==t&&(a.childLanes|=t),e===n)break;e=e.return}}function Sr(e,t){yr=e,_r=xr=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(xs=!0),e.firstContext=null)}function Cr(e){var t=e._currentValue;if(_r!==e)if(e={context:e,memoizedValue:t,next:null},null===xr){if(null===yr)throw Error(r(308));xr=e,yr.dependencies={lanes:0,firstContext:e}}else xr=xr.next=e;return t}var Tr=null;function Pr(e){null===Tr?Tr=[e]:Tr.push(e)}function Ar(e,t,n,a){var o=t.interleaved;return null===o?(n.next=n,Pr(t)):(n.next=o.next,o.next=n),t.interleaved=n,Nr(e,a)}function Nr(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Or=!1;function jr(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Lr(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Mr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ir(e,t,n){var a=e.updateQueue;if(null===a)return null;if(a=a.shared,0!=(2&Pc)){var o=a.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),a.pending=t,Nr(e,n)}return null===(o=a.interleaved)?(t.next=t,Pr(a)):(t.next=o.next,o.next=t),a.interleaved=t,Nr(e,n)}function Rr(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var a=t.lanes;n|=a&=e.pendingLanes,t.lanes=n,vt(e,n)}}function Dr(e,t){var n=e.updateQueue,a=e.alternate;if(null!==a&&n===(a=a.updateQueue)){var o=null,r=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===r?o=r=i:r=r.next=i,n=n.next}while(null!==n);null===r?o=r=t:r=r.next=t}else o=r=t;return n={baseState:a.baseState,firstBaseUpdate:o,lastBaseUpdate:r,shared:a.shared,effects:a.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function zr(e,t,n,a){var o=e.updateQueue;Or=!1;var r=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var c=s,l=c.next;c.next=null,null===i?r=l:i.next=l,i=c;var d=e.alternate;null!==d&&((s=(d=d.updateQueue).lastBaseUpdate)!==i&&(null===s?d.firstBaseUpdate=l:s.next=l,d.lastBaseUpdate=c))}if(null!==r){var u=o.baseState;for(i=0,d=l=c=null,s=r;;){var p=s.lane,f=s.eventTime;if((a&p)===p){null!==d&&(d=d.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var m=e,g=s;switch(p=t,f=n,g.tag){case 1:if("function"==typeof(m=g.payload)){u=m.call(f,u,p);break e}u=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=g.payload)?m.call(f,u,p):m))break e;u=D({},u,p);break e;case 2:Or=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===d?(l=d=f,c=u):d=d.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===d&&(c=u),o.baseState=c,o.firstBaseUpdate=l,o.lastBaseUpdate=d,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===r&&(o.shared.lanes=0);Rc|=i,e.lanes=i,e.memoizedState=u}}function Fr(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var a=e[t],o=a.callback;if(null!==o){if(a.callback=null,a=n,"function"!=typeof o)throw Error(r(191,o));o.call(a)}}}var Br=(new a.Component).refs;function $r(e,t,n,a){n=null==(n=n(a,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var Ur={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var a=el(),o=tl(e),r=Mr(a,o);r.payload=t,null!=n&&(r.callback=n),null!==(t=Ir(e,r,o))&&(nl(t,e,o,a),Rr(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var a=el(),o=tl(e),r=Mr(a,o);r.tag=1,r.payload=t,null!=n&&(r.callback=n),null!==(t=Ir(e,r,o))&&(nl(t,e,o,a),Rr(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=el(),a=tl(e),o=Mr(n,a);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ir(e,o,a))&&(nl(t,e,a,n),Rr(t,e,a))}};function Hr(e,t,n,a,o,r,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(a,r,i):!t.prototype||!t.prototype.isPureReactComponent||(!ca(n,a)||!ca(o,r))}function Vr(e,t,n){var a=!1,o=Po,r=t.contextType;return"object"==typeof r&&null!==r?r=Cr(r):(o=Lo(t)?Oo:Ao.current,r=(a=null!=(a=t.contextTypes))?jo(e,o):Po),t=new t(n,r),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Ur,e.stateNode=t,t._reactInternals=e,a&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=r),t}function Zr(e,t,n,a){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,a),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,a),t.state!==e&&Ur.enqueueReplaceState(t,t.state,null)}function qr(e,t,n,a){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Br,jr(e);var r=t.contextType;"object"==typeof r&&null!==r?o.context=Cr(r):(r=Lo(t)?Oo:Ao.current,o.context=jo(e,r)),o.state=e.memoizedState,"function"==typeof(r=t.getDerivedStateFromProps)&&($r(e,t,r,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&Ur.enqueueReplaceState(o,o.state,null),zr(e,n,o,a),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Wr(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(r(309));var a=n.stateNode}if(!a)throw Error(r(147,e));var o=a,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Br&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(r(284));if(!n._owner)throw Error(r(290,e))}return e}function Gr(e,t){throw e=Object.prototype.toString.call(t),Error(r(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Yr(e){return(0,e._init)(e._payload)}function Kr(e){function t(t,n){if(e){var a=t.deletions;null===a?(t.deletions=[n],t.flags|=16):a.push(n)}}function n(n,a){if(!e)return null;for(;null!==a;)t(n,a),a=a.sibling;return null}function a(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Ll(e,t)).index=0,e.sibling=null,e}function i(t,n,a){return t.index=a,e?null!==(a=t.alternate)?(a=a.index)<n?(t.flags|=2,n):a:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function c(e,t,n,a){return null===t||6!==t.tag?((t=Dl(n,e.mode,a)).return=e,t):((t=o(t,n)).return=e,t)}function l(e,t,n,a){var r=n.type;return r===w?u(e,t,n.props.children,a,n.key):null!==t&&(t.elementType===r||"object"==typeof r&&null!==r&&r.$$typeof===j&&Yr(r)===t.type)?((a=o(t,n.props)).ref=Wr(e,t,n),a.return=e,a):((a=Ml(n.type,n.key,n.props,null,e.mode,a)).ref=Wr(e,t,n),a.return=e,a)}function d(e,t,n,a){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=zl(n,e.mode,a)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function u(e,t,n,a,r){return null===t||7!==t.tag?((t=Il(n,e.mode,a,r)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Dl(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=Ml(t.type,t.key,t.props,null,e.mode,n)).ref=Wr(e,null,t),n.return=e,n;case k:return(t=zl(t,e.mode,n)).return=e,t;case j:return p(e,(0,t._init)(t._payload),n)}if(te(t)||I(t))return(t=Il(t,e.mode,n,null)).return=e,t;Gr(e,t)}return null}function f(e,t,n,a){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:c(e,t,""+n,a);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===o?l(e,t,n,a):null;case k:return n.key===o?d(e,t,n,a):null;case j:return f(e,t,(o=n._init)(n._payload),a)}if(te(n)||I(n))return null!==o?null:u(e,t,n,a,null);Gr(e,n)}return null}function m(e,t,n,a,o){if("string"==typeof a&&""!==a||"number"==typeof a)return c(t,e=e.get(n)||null,""+a,o);if("object"==typeof a&&null!==a){switch(a.$$typeof){case _:return l(t,e=e.get(null===a.key?n:a.key)||null,a,o);case k:return d(t,e=e.get(null===a.key?n:a.key)||null,a,o);case j:return m(e,t,n,(0,a._init)(a._payload),o)}if(te(a)||I(a))return u(t,e=e.get(n)||null,a,o,null);Gr(t,a)}return null}function g(o,r,s,c){for(var l=null,d=null,u=r,g=r=0,b=null;null!==u&&g<s.length;g++){u.index>g?(b=u,u=null):b=u.sibling;var h=f(o,u,s[g],c);if(null===h){null===u&&(u=b);break}e&&u&&null===h.alternate&&t(o,u),r=i(h,r,g),null===d?l=h:d.sibling=h,d=h,u=b}if(g===s.length)return n(o,u),rr&&Jo(o,g),l;if(null===u){for(;g<s.length;g++)null!==(u=p(o,s[g],c))&&(r=i(u,r,g),null===d?l=u:d.sibling=u,d=u);return rr&&Jo(o,g),l}for(u=a(o,u);g<s.length;g++)null!==(b=m(u,o,g,s[g],c))&&(e&&null!==b.alternate&&u.delete(null===b.key?g:b.key),r=i(b,r,g),null===d?l=b:d.sibling=b,d=b);return e&&u.forEach((function(e){return t(o,e)})),rr&&Jo(o,g),l}function b(o,s,c,l){var d=I(c);if("function"!=typeof d)throw Error(r(150));if(null==(c=d.call(c)))throw Error(r(151));for(var u=d=null,g=s,b=s=0,h=null,v=c.next();null!==g&&!v.done;b++,v=c.next()){g.index>b?(h=g,g=null):h=g.sibling;var y=f(o,g,v.value,l);if(null===y){null===g&&(g=h);break}e&&g&&null===y.alternate&&t(o,g),s=i(y,s,b),null===u?d=y:u.sibling=y,u=y,g=h}if(v.done)return n(o,g),rr&&Jo(o,b),d;if(null===g){for(;!v.done;b++,v=c.next())null!==(v=p(o,v.value,l))&&(s=i(v,s,b),null===u?d=v:u.sibling=v,u=v);return rr&&Jo(o,b),d}for(g=a(o,g);!v.done;b++,v=c.next())null!==(v=m(g,o,b,v.value,l))&&(e&&null!==v.alternate&&g.delete(null===v.key?b:v.key),s=i(v,s,b),null===u?d=v:u.sibling=v,u=v);return e&&g.forEach((function(e){return t(o,e)})),rr&&Jo(o,b),d}return function e(a,r,i,c){if("object"==typeof i&&null!==i&&i.type===w&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case _:e:{for(var l=i.key,d=r;null!==d;){if(d.key===l){if((l=i.type)===w){if(7===d.tag){n(a,d.sibling),(r=o(d,i.props.children)).return=a,a=r;break e}}else if(d.elementType===l||"object"==typeof l&&null!==l&&l.$$typeof===j&&Yr(l)===d.type){n(a,d.sibling),(r=o(d,i.props)).ref=Wr(a,d,i),r.return=a,a=r;break e}n(a,d);break}t(a,d),d=d.sibling}i.type===w?((r=Il(i.props.children,a.mode,c,i.key)).return=a,a=r):((c=Ml(i.type,i.key,i.props,null,a.mode,c)).ref=Wr(a,r,i),c.return=a,a=c)}return s(a);case k:e:{for(d=i.key;null!==r;){if(r.key===d){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(a,r.sibling),(r=o(r,i.children||[])).return=a,a=r;break e}n(a,r);break}t(a,r),r=r.sibling}(r=zl(i,a.mode,c)).return=a,a=r}return s(a);case j:return e(a,r,(d=i._init)(i._payload),c)}if(te(i))return g(a,r,i,c);if(I(i))return b(a,r,i,c);Gr(a,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==r&&6===r.tag?(n(a,r.sibling),(r=o(r,i)).return=a,a=r):(n(a,r),(r=Dl(i,a.mode,c)).return=a,a=r),s(a)):n(a,r)}}var Qr=Kr(!0),Xr=Kr(!1),Jr={},ei=So(Jr),ti=So(Jr),ni=So(Jr);function ai(e){if(e===Jr)throw Error(r(174));return e}function oi(e,t){switch(To(ni,t),To(ti,e),To(ei,Jr),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ce(null,"");break;default:t=ce(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(ei),To(ei,t)}function ri(){Co(ei),Co(ti),Co(ni)}function ii(e){ai(ni.current);var t=ai(ei.current),n=ce(t,e.type);t!==n&&(To(ti,e),To(ei,n))}function si(e){ti.current===e&&(Co(ei),Co(ti))}var ci=So(0);function li(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var di=[];function ui(){for(var e=0;e<di.length;e++)di[e]._workInProgressVersionPrimary=null;di.length=0}var pi=x.ReactCurrentDispatcher,fi=x.ReactCurrentBatchConfig,mi=0,gi=null,bi=null,hi=null,vi=!1,yi=!1,xi=0,_i=0;function ki(){throw Error(r(321))}function wi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sa(e[n],t[n]))return!1;return!0}function Ei(e,t,n,a,o,i){if(mi=i,gi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:cs,e=n(a,o),yi){i=0;do{if(yi=!1,xi=0,25<=i)throw Error(r(301));i+=1,hi=bi=null,t.updateQueue=null,pi.current=ls,e=n(a,o)}while(yi)}if(pi.current=is,t=null!==bi&&null!==bi.next,mi=0,hi=bi=gi=null,vi=!1,t)throw Error(r(300));return e}function Si(){var e=0!==xi;return xi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===hi?gi.memoizedState=hi=e:hi=hi.next=e,hi}function Ti(){if(null===bi){var e=gi.alternate;e=null!==e?e.memoizedState:null}else e=bi.next;var t=null===hi?gi.memoizedState:hi.next;if(null!==t)hi=t,bi=e;else{if(null===e)throw Error(r(310));e={memoizedState:(bi=e).memoizedState,baseState:bi.baseState,baseQueue:bi.baseQueue,queue:bi.queue,next:null},null===hi?gi.memoizedState=hi=e:hi=hi.next=e}return hi}function Pi(e,t){return"function"==typeof t?t(e):t}function Ai(e){var t=Ti(),n=t.queue;if(null===n)throw Error(r(311));n.lastRenderedReducer=e;var a=bi,o=a.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}a.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,a=a.baseState;var c=s=null,l=null,d=i;do{var u=d.lane;if((mi&u)===u)null!==l&&(l=l.next={lane:0,action:d.action,hasEagerState:d.hasEagerState,eagerState:d.eagerState,next:null}),a=d.hasEagerState?d.eagerState:e(a,d.action);else{var p={lane:u,action:d.action,hasEagerState:d.hasEagerState,eagerState:d.eagerState,next:null};null===l?(c=l=p,s=a):l=l.next=p,gi.lanes|=u,Rc|=u}d=d.next}while(null!==d&&d!==i);null===l?s=a:l.next=c,sa(a,t.memoizedState)||(xs=!0),t.memoizedState=a,t.baseState=s,t.baseQueue=l,n.lastRenderedState=a}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,gi.lanes|=i,Rc|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ni(e){var t=Ti(),n=t.queue;if(null===n)throw Error(r(311));n.lastRenderedReducer=e;var a=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sa(i,t.memoizedState)||(xs=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,a]}function Oi(){}function ji(e,t){var n=gi,a=Ti(),o=t(),i=!sa(a.memoizedState,o);if(i&&(a.memoizedState=o,xs=!0),a=a.queue,Vi(Ii.bind(null,n,a,e),[e]),a.getSnapshot!==t||i||null!==hi&&1&hi.memoizedState.tag){if(n.flags|=2048,Fi(9,Mi.bind(null,n,a,o,t),void 0,null),null===Ac)throw Error(r(349));0!=(30&mi)||Li(n,t,o)}return o}function Li(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Mi(e,t,n,a){t.value=n,t.getSnapshot=a,Ri(t)&&Di(e)}function Ii(e,t,n){return n((function(){Ri(t)&&Di(e)}))}function Ri(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sa(e,n)}catch(a){return!0}}function Di(e){var t=Nr(e,1);null!==t&&nl(t,e,1,-1)}function zi(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Pi,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,gi,e),[t.memoizedState,e]}function Fi(e,t,n,a){return e={tag:e,create:t,destroy:n,deps:a,next:null},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(a=n.next,n.next=e,e.next=a,t.lastEffect=e),e}function Bi(){return Ti().memoizedState}function $i(e,t,n,a){var o=Ci();gi.flags|=e,o.memoizedState=Fi(1|t,n,void 0,void 0===a?null:a)}function Ui(e,t,n,a){var o=Ti();a=void 0===a?null:a;var r=void 0;if(null!==bi){var i=bi.memoizedState;if(r=i.destroy,null!==a&&wi(a,i.deps))return void(o.memoizedState=Fi(t,n,r,a))}gi.flags|=e,o.memoizedState=Fi(1|t,n,r,a)}function Hi(e,t){return $i(8390656,8,e,t)}function Vi(e,t){return Ui(2048,8,e,t)}function Zi(e,t){return Ui(4,2,e,t)}function qi(e,t){return Ui(4,4,e,t)}function Wi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Gi(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4,4,Wi.bind(null,t,e),n)}function Yi(){}function Ki(e,t){var n=Ti();t=void 0===t?null:t;var a=n.memoizedState;return null!==a&&null!==t&&wi(t,a[1])?a[0]:(n.memoizedState=[e,t],e)}function Qi(e,t){var n=Ti();t=void 0===t?null:t;var a=n.memoizedState;return null!==a&&null!==t&&wi(t,a[1])?a[0]:(e=e(),n.memoizedState=[e,t],e)}function Xi(e,t,n){return 0==(21&mi)?(e.baseState&&(e.baseState=!1,xs=!0),e.memoizedState=n):(sa(n,t)||(n=gt(),gi.lanes|=n,Rc|=n,e.baseState=!0),t)}function Ji(e,t){var n=yt;yt=0!==n&&4>n?n:4,e(!0);var a=fi.transition;fi.transition={};try{e(!1),t()}finally{yt=n,fi.transition=a}}function es(){return Ti().memoizedState}function ts(e,t,n){var a=tl(e);if(n={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null},as(e))os(t,n);else if(null!==(n=Ar(e,t,n,a))){nl(n,e,a,el()),rs(n,t,a)}}function ns(e,t,n){var a=tl(e),o={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null};if(as(e))os(t,o);else{var r=e.alternate;if(0===e.lanes&&(null===r||0===r.lanes)&&null!==(r=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=r(i,n);if(o.hasEagerState=!0,o.eagerState=s,sa(s,i)){var c=t.interleaved;return null===c?(o.next=o,Pr(t)):(o.next=c.next,c.next=o),void(t.interleaved=o)}}catch(l){}null!==(n=Ar(e,t,o,a))&&(nl(n,e,a,o=el()),rs(n,t,a))}}function as(e){var t=e.alternate;return e===gi||null!==t&&t===gi}function os(e,t){yi=vi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function rs(e,t,n){if(0!=(4194240&n)){var a=t.lanes;n|=a&=e.pendingLanes,t.lanes=n,vt(e,n)}}var is={readContext:Cr,useCallback:ki,useContext:ki,useEffect:ki,useImperativeHandle:ki,useInsertionEffect:ki,useLayoutEffect:ki,useMemo:ki,useReducer:ki,useRef:ki,useState:ki,useDebugValue:ki,useDeferredValue:ki,useTransition:ki,useMutableSource:ki,useSyncExternalStore:ki,useId:ki,unstable_isNewReconciler:!1},ss={readContext:Cr,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Cr,useEffect:Hi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,$i(4194308,4,Wi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $i(4194308,4,e,t)},useInsertionEffect:function(e,t){return $i(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=Ci();return t=void 0!==n?n(t):t,a.memoizedState=a.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},a.queue=e,e=e.dispatch=ts.bind(null,gi,e),[a.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:zi,useDebugValue:Yi,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=zi(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var a=gi,o=Ci();if(rr){if(void 0===n)throw Error(r(407));n=n()}else{if(n=t(),null===Ac)throw Error(r(349));0!=(30&mi)||Li(a,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Hi(Ii.bind(null,a,i,e),[e]),a.flags|=2048,Fi(9,Mi.bind(null,a,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Ac.identifierPrefix;if(rr){var n=Xo;t=":"+t+"R"+(n=(Qo&~(1<<32-it(Qo)-1)).toString(32)+n),0<(n=xi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=_i++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},cs={readContext:Cr,useCallback:Ki,useContext:Cr,useEffect:Vi,useImperativeHandle:Gi,useInsertionEffect:Zi,useLayoutEffect:qi,useMemo:Qi,useReducer:Ai,useRef:Bi,useState:function(){return Ai(Pi)},useDebugValue:Yi,useDeferredValue:function(e){return Xi(Ti(),bi.memoizedState,e)},useTransition:function(){return[Ai(Pi)[0],Ti().memoizedState]},useMutableSource:Oi,useSyncExternalStore:ji,useId:es,unstable_isNewReconciler:!1},ls={readContext:Cr,useCallback:Ki,useContext:Cr,useEffect:Vi,useImperativeHandle:Gi,useInsertionEffect:Zi,useLayoutEffect:qi,useMemo:Qi,useReducer:Ni,useRef:Bi,useState:function(){return Ni(Pi)},useDebugValue:Yi,useDeferredValue:function(e){var t=Ti();return null===bi?t.memoizedState=e:Xi(t,bi.memoizedState,e)},useTransition:function(){return[Ni(Pi)[0],Ti().memoizedState]},useMutableSource:Oi,useSyncExternalStore:ji,useId:es,unstable_isNewReconciler:!1};function ds(e,t){try{var n="",a=t;do{n+=$(a),a=a.return}while(a);var o=n}catch(r){o="\nError generating stack: "+r.message+"\n"+r.stack}return{value:e,source:t,stack:o,digest:null}}function us(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function ms(e,t,n){(n=Mr(-1,n)).tag=3,n.payload={element:null};var a=t.value;return n.callback=function(){Vc||(Vc=!0,Zc=a),ps(0,t)},n}function gs(e,t,n){(n=Mr(-1,n)).tag=3;var a=e.type.getDerivedStateFromError;if("function"==typeof a){var o=t.value;n.payload=function(){return a(o)},n.callback=function(){ps(0,t)}}var r=e.stateNode;return null!==r&&"function"==typeof r.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof a&&(null===qc?qc=new Set([this]):qc.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function bs(e,t,n){var a=e.pingCache;if(null===a){a=e.pingCache=new fs;var o=new Set;a.set(t,o)}else void 0===(o=a.get(t))&&(o=new Set,a.set(t,o));o.has(n)||(o.add(n),e=Sl.bind(null,e,t,n),t.then(e,e))}function hs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function vs(e,t,n,a,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Mr(-1,1)).tag=2,Ir(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var ys=x.ReactCurrentOwner,xs=!1;function _s(e,t,n,a){t.child=null===e?Xr(t,null,n,a):Qr(t,e.child,n,a)}function ks(e,t,n,a,o){n=n.render;var r=t.ref;return Sr(t,o),a=Ei(e,t,n,a,r,o),n=Si(),null===e||xs?(rr&&n&&tr(t),t.flags|=1,_s(e,t,a,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Vs(e,t,o))}function ws(e,t,n,a,o){if(null===e){var r=n.type;return"function"!=typeof r||jl(r)||void 0!==r.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ml(n.type,null,a,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=r,Es(e,t,r,a,o))}if(r=e.child,0==(e.lanes&o)){var i=r.memoizedProps;if((n=null!==(n=n.compare)?n:ca)(i,a)&&e.ref===t.ref)return Vs(e,t,o)}return t.flags|=1,(e=Ll(r,a)).ref=t.ref,e.return=t,t.child=e}function Es(e,t,n,a,o){if(null!==e){var r=e.memoizedProps;if(ca(r,a)&&e.ref===t.ref){if(xs=!1,t.pendingProps=a=r,0==(e.lanes&o))return t.lanes=e.lanes,Vs(e,t,o);0!=(131072&e.flags)&&(xs=!0)}}return Ts(e,t,n,a,o)}function Ss(e,t,n){var a=t.pendingProps,o=a.children,r=null!==e?e.memoizedState:null;if("hidden"===a.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},To(Lc,jc),jc|=n;else{if(0==(1073741824&n))return e=null!==r?r.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,To(Lc,jc),jc|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},a=null!==r?r.baseLanes:n,To(Lc,jc),jc|=a}else null!==r?(a=r.baseLanes|n,t.memoizedState=null):a=n,To(Lc,jc),jc|=a;return _s(e,t,o,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ts(e,t,n,a,o){var r=Lo(n)?Oo:Ao.current;return r=jo(t,r),Sr(t,o),n=Ei(e,t,n,a,r,o),a=Si(),null===e||xs?(rr&&a&&tr(t),t.flags|=1,_s(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Vs(e,t,o))}function Ps(e,t,n,a,o){if(Lo(n)){var r=!0;Do(t)}else r=!1;if(Sr(t,o),null===t.stateNode)Hs(e,t),Vr(t,n,a),qr(t,n,a,o),a=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var c=i.context,l=n.contextType;"object"==typeof l&&null!==l?l=Cr(l):l=jo(t,l=Lo(n)?Oo:Ao.current);var d=n.getDerivedStateFromProps,u="function"==typeof d||"function"==typeof i.getSnapshotBeforeUpdate;u||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==a||c!==l)&&Zr(t,i,a,l),Or=!1;var p=t.memoizedState;i.state=p,zr(t,a,i,o),c=t.memoizedState,s!==a||p!==c||No.current||Or?("function"==typeof d&&($r(t,n,d,a),c=t.memoizedState),(s=Or||Hr(t,n,s,a,p,c,l))?(u||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=a,t.memoizedState=c),i.props=a,i.state=c,i.context=l,a=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),a=!1)}else{i=t.stateNode,Lr(e,t),s=t.memoizedProps,l=t.type===t.elementType?s:hr(t.type,s),i.props=l,u=t.pendingProps,p=i.context,"object"==typeof(c=n.contextType)&&null!==c?c=Cr(c):c=jo(t,c=Lo(n)?Oo:Ao.current);var f=n.getDerivedStateFromProps;(d="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==u||p!==c)&&Zr(t,i,a,c),Or=!1,p=t.memoizedState,i.state=p,zr(t,a,i,o);var m=t.memoizedState;s!==u||p!==m||No.current||Or?("function"==typeof f&&($r(t,n,f,a),m=t.memoizedState),(l=Or||Hr(t,n,l,a,p,m,c)||!1)?(d||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(a,m,c),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(a,m,c)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=a,t.memoizedState=m),i.props=a,i.state=m,i.context=c,a=l):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),a=!1)}return As(e,t,n,a,r,o)}function As(e,t,n,a,o,r){Cs(e,t);var i=0!=(128&t.flags);if(!a&&!i)return o&&zo(t,n,!1),Vs(e,t,r);a=t.stateNode,ys.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:a.render();return t.flags|=1,null!==e&&i?(t.child=Qr(t,e.child,null,r),t.child=Qr(t,null,s,r)):_s(e,t,s,r),t.memoizedState=a.state,o&&zo(t,n,!0),t.child}function Ns(e){var t=e.stateNode;t.pendingContext?Io(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Io(0,t.context,!1),oi(e,t.containerInfo)}function Os(e,t,n,a,o){return mr(),gr(o),t.flags|=256,_s(e,t,n,a),t.child}var js,Ls,Ms,Is={dehydrated:null,treeContext:null,retryLane:0};function Rs(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ds(e,t,n){var a,o=t.pendingProps,i=ci.current,s=!1,c=0!=(128&t.flags);if((a=c)||(a=(null===e||null!==e.memoizedState)&&0!=(2&i)),a?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),To(ci,1&i),null===e)return dr(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(c=o.children,e=o.fallback,s?(o=t.mode,s=t.child,c={mode:"hidden",children:c},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=c):s=Rl(c,o,0,null),e=Il(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Rs(n),t.memoizedState=Is,e):zs(t,c));if(null!==(i=e.memoizedState)&&null!==(a=i.dehydrated))return function(e,t,n,a,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,Fs(e,t,s,a=us(Error(r(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=a.fallback,o=t.mode,a=Rl({mode:"visible",children:a.children},o,0,null),(i=Il(i,o,s,null)).flags|=2,a.return=t,i.return=t,a.sibling=i,t.child=a,0!=(1&t.mode)&&Qr(t,e.child,null,s),t.child.memoizedState=Rs(s),t.memoizedState=Is,i);if(0==(1&t.mode))return Fs(e,t,s,null);if("$!"===o.data){if(a=o.nextSibling&&o.nextSibling.dataset)var c=a.dgst;return a=c,Fs(e,t,s,a=us(i=Error(r(419)),a,void 0))}if(c=0!=(s&e.childLanes),xs||c){if(null!==(a=Ac)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(a.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Nr(e,o),nl(a,e,o,-1))}return gl(),Fs(e,t,s,a=us(Error(r(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tl.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,or=lo(o.nextSibling),ar=t,rr=!0,ir=null,null!==e&&(Go[Yo++]=Qo,Go[Yo++]=Xo,Go[Yo++]=Ko,Qo=e.id,Xo=e.overflow,Ko=t),(t=zs(t,a.children)).flags|=4096,t)}(e,t,c,o,a,i,n);if(s){s=o.fallback,c=t.mode,a=(i=e.child).sibling;var l={mode:"hidden",children:o.children};return 0==(1&c)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=l,t.deletions=null):(o=Ll(i,l)).subtreeFlags=14680064&i.subtreeFlags,null!==a?s=Ll(a,s):(s=Il(s,c,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,c=null===(c=e.child.memoizedState)?Rs(n):{baseLanes:c.baseLanes|n,cachePool:null,transitions:c.transitions},s.memoizedState=c,s.childLanes=e.childLanes&~n,t.memoizedState=Is,o}return e=(s=e.child).sibling,o=Ll(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function zs(e,t){return(t=Rl({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Fs(e,t,n,a){return null!==a&&gr(a),Qr(t,e.child,null,n),(e=zs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var a=e.alternate;null!==a&&(a.lanes|=t),Er(e.return,t,n)}function $s(e,t,n,a,o){var r=e.memoizedState;null===r?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:a,tail:n,tailMode:o}:(r.isBackwards=t,r.rendering=null,r.renderingStartTime=0,r.last=a,r.tail=n,r.tailMode=o)}function Us(e,t,n){var a=t.pendingProps,o=a.revealOrder,r=a.tail;if(_s(e,t,a.children,n),0!=(2&(a=ci.current)))a=1&a|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}a&=1}if(To(ci,a),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===li(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,r);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===li(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,r);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Vs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Rc|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(r(153));if(null!==t.child){for(n=Ll(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ll(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Zs(e,t){if(!rr)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var a=null;null!==n;)null!==n.alternate&&(a=n),n=n.sibling;null===a?t||null===e.tail?e.tail=null:e.tail.sibling=null:a.sibling=null}}function qs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,a=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,a|=14680064&o.subtreeFlags,a|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,a|=o.subtreeFlags,a|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=a,e.childLanes=n,t}function Ws(e,t,n){var a=t.pendingProps;switch(nr(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qs(t),null;case 1:case 17:return Lo(t.type)&&Mo(),qs(t),null;case 3:return a=t.stateNode,ri(),Co(No),Co(Ao),ui(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),null!==e&&null!==e.child||(pr(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ir&&(il(ir),ir=null))),qs(t),null;case 5:si(t);var o=ai(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Ls(e,t,n,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!a){if(null===t.stateNode)throw Error(r(166));return qs(t),null}if(e=ai(ei.current),pr(t)){a=t.stateNode,n=t.type;var i=t.memoizedProps;switch(a[fo]=t,a[mo]=i,e=0!=(1&t.mode),n){case"dialog":Fa("cancel",a),Fa("close",a);break;case"iframe":case"object":case"embed":Fa("load",a);break;case"video":case"audio":for(o=0;o<Ia.length;o++)Fa(Ia[o],a);break;case"source":Fa("error",a);break;case"img":case"image":case"link":Fa("error",a),Fa("load",a);break;case"details":Fa("toggle",a);break;case"input":K(a,i),Fa("invalid",a);break;case"select":a._wrapperState={wasMultiple:!!i.multiple},Fa("invalid",a);break;case"textarea":oe(a,i),Fa("invalid",a)}for(var c in ve(n,i),o=null,i)if(i.hasOwnProperty(c)){var l=i[c];"children"===c?"string"==typeof l?a.textContent!==l&&(!0!==i.suppressHydrationWarning&&Xa(a.textContent,l,e),o=["children",l]):"number"==typeof l&&a.textContent!==""+l&&(!0!==i.suppressHydrationWarning&&Xa(a.textContent,l,e),o=["children",""+l]):s.hasOwnProperty(c)&&null!=l&&"onScroll"===c&&Fa("scroll",a)}switch(n){case"input":q(a),J(a,i,!0);break;case"textarea":q(a),ie(a);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(a.onclick=Ja)}a=o,t.updateQueue=a,null!==a&&(t.flags|=4)}else{c=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof a.is?e=c.createElement(n,{is:a.is}):(e=c.createElement(n),"select"===n&&(c=e,a.multiple?c.multiple=!0:a.size&&(c.size=a.size))):e=c.createElementNS(e,n),e[fo]=t,e[mo]=a,js(e,t),t.stateNode=e;e:{switch(c=ye(n,a),n){case"dialog":Fa("cancel",e),Fa("close",e),o=a;break;case"iframe":case"object":case"embed":Fa("load",e),o=a;break;case"video":case"audio":for(o=0;o<Ia.length;o++)Fa(Ia[o],e);o=a;break;case"source":Fa("error",e),o=a;break;case"img":case"image":case"link":Fa("error",e),Fa("load",e),o=a;break;case"details":Fa("toggle",e),o=a;break;case"input":K(e,a),o=Y(e,a),Fa("invalid",e);break;case"option":default:o=a;break;case"select":e._wrapperState={wasMultiple:!!a.multiple},o=D({},a,{value:void 0}),Fa("invalid",e);break;case"textarea":oe(e,a),o=ae(e,a),Fa("invalid",e)}for(i in ve(n,o),l=o)if(l.hasOwnProperty(i)){var d=l[i];"style"===i?be(e,d):"dangerouslySetInnerHTML"===i?null!=(d=d?d.__html:void 0)&&ue(e,d):"children"===i?"string"==typeof d?("textarea"!==n||""!==d)&&pe(e,d):"number"==typeof d&&pe(e,""+d):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=d&&"onScroll"===i&&Fa("scroll",e):null!=d&&y(e,i,d,c))}switch(n){case"input":q(e),J(e,a,!1);break;case"textarea":q(e),ie(e);break;case"option":null!=a.value&&e.setAttribute("value",""+V(a.value));break;case"select":e.multiple=!!a.multiple,null!=(i=a.value)?ne(e,!!a.multiple,i,!1):null!=a.defaultValue&&ne(e,!!a.multiple,a.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Ja)}switch(n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}}a&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return qs(t),null;case 6:if(e&&null!=t.stateNode)Ms(0,t,e.memoizedProps,a);else{if("string"!=typeof a&&null===t.stateNode)throw Error(r(166));if(n=ai(ni.current),ai(ei.current),pr(t)){if(a=t.stateNode,n=t.memoizedProps,a[fo]=t,(i=a.nodeValue!==n)&&null!==(e=ar))switch(e.tag){case 3:Xa(a.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xa(a.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(a=(9===n.nodeType?n:n.ownerDocument).createTextNode(a))[fo]=t,t.stateNode=a}return qs(t),null;case 13:if(Co(ci),a=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(rr&&null!==or&&0!=(1&t.mode)&&0==(128&t.flags))fr(),mr(),t.flags|=98560,i=!1;else if(i=pr(t),null!==a&&null!==a.dehydrated){if(null===e){if(!i)throw Error(r(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(r(317));i[fo]=t}else mr(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;qs(t),i=!1}else null!==ir&&(il(ir),ir=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((a=null!==a)!==(null!==e&&null!==e.memoizedState)&&a&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ci.current)?0===Mc&&(Mc=3):gl())),null!==t.updateQueue&&(t.flags|=4),qs(t),null);case 4:return ri(),null===e&&Ua(t.stateNode.containerInfo),qs(t),null;case 10:return wr(t.type._context),qs(t),null;case 19:if(Co(ci),null===(i=t.memoizedState))return qs(t),null;if(a=0!=(128&t.flags),null===(c=i.rendering))if(a)Zs(i,!1);else{if(0!==Mc||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(c=li(e))){for(t.flags|=128,Zs(i,!1),null!==(a=c.updateQueue)&&(t.updateQueue=a,t.flags|=4),t.subtreeFlags=0,a=n,n=t.child;null!==n;)e=a,(i=n).flags&=14680066,null===(c=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=c.childLanes,i.lanes=c.lanes,i.child=c.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=c.memoizedProps,i.memoizedState=c.memoizedState,i.updateQueue=c.updateQueue,i.type=c.type,e=c.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return To(ci,1&ci.current|2),t.child}e=e.sibling}null!==i.tail&&Qe()>Uc&&(t.flags|=128,a=!0,Zs(i,!1),t.lanes=4194304)}else{if(!a)if(null!==(e=li(c))){if(t.flags|=128,a=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Zs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!c.alternate&&!rr)return qs(t),null}else 2*Qe()-i.renderingStartTime>Uc&&1073741824!==n&&(t.flags|=128,a=!0,Zs(i,!1),t.lanes=4194304);i.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=i.last)?n.sibling=c:t.child=c,i.last=c)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Qe(),t.sibling=null,n=ci.current,To(ci,a?1&n|2:1&n),t):(qs(t),null);case 22:case 23:return ul(),a=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==a&&(t.flags|=8192),a&&0!=(1&t.mode)?0!=(1073741824&jc)&&(qs(t),6&t.subtreeFlags&&(t.flags|=8192)):qs(t),null;case 24:case 25:return null}throw Error(r(156,t.tag))}function Gs(e,t){switch(nr(t),t.tag){case 1:return Lo(t.type)&&Mo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ri(),Co(No),Co(Ao),ui(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Co(ci),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(r(340));mr()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(ci),null;case 4:return ri(),null;case 10:return wr(t.type._context),null;case 22:case 23:return ul(),null;default:return null}}js=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ls=function(e,t,n,a){var o=e.memoizedProps;if(o!==a){e=t.stateNode,ai(ei.current);var r,i=null;switch(n){case"input":o=Y(e,o),a=Y(e,a),i=[];break;case"select":o=D({},o,{value:void 0}),a=D({},a,{value:void 0}),i=[];break;case"textarea":o=ae(e,o),a=ae(e,a),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof a.onClick&&(e.onclick=Ja)}for(d in ve(n,a),n=null,o)if(!a.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var c=o[d];for(r in c)c.hasOwnProperty(r)&&(n||(n={}),n[r]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?i||(i=[]):(i=i||[]).push(d,null));for(d in a){var l=a[d];if(c=null!=o?o[d]:void 0,a.hasOwnProperty(d)&&l!==c&&(null!=l||null!=c))if("style"===d)if(c){for(r in c)!c.hasOwnProperty(r)||l&&l.hasOwnProperty(r)||(n||(n={}),n[r]="");for(r in l)l.hasOwnProperty(r)&&c[r]!==l[r]&&(n||(n={}),n[r]=l[r])}else n||(i||(i=[]),i.push(d,n)),n=l;else"dangerouslySetInnerHTML"===d?(l=l?l.__html:void 0,c=c?c.__html:void 0,null!=l&&c!==l&&(i=i||[]).push(d,l)):"children"===d?"string"!=typeof l&&"number"!=typeof l||(i=i||[]).push(d,""+l):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=l&&"onScroll"===d&&Fa("scroll",e),i||c===l||(i=[])):(i=i||[]).push(d,l))}n&&(i=i||[]).push("style",n);var d=i;(t.updateQueue=d)&&(t.flags|=4)}},Ms=function(e,t,n,a){n!==a&&(t.flags|=4)};var Ys=!1,Ks=!1,Qs="function"==typeof WeakSet?WeakSet:Set,Xs=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(a){El(e,t,a)}else n.current=null}function ec(e,t,n){try{n()}catch(a){El(e,t,a)}}var tc=!1;function nc(e,t,n){var a=t.updateQueue;if(null!==(a=null!==a?a.lastEffect:null)){var o=a=a.next;do{if((o.tag&e)===e){var r=o.destroy;o.destroy=void 0,void 0!==r&&ec(t,n,r)}o=o.next}while(o!==a)}}function ac(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var a=n.create;n.destroy=a()}n=n.next}while(n!==t)}}function oc(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function rc(e){var t=e.alternate;null!==t&&(e.alternate=null,rc(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[bo],delete t[ho],delete t[vo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function ic(e){return 5===e.tag||3===e.tag||4===e.tag}function sc(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||ic(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cc(e,t,n){var a=e.tag;if(5===a||6===a)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Ja));else if(4!==a&&null!==(e=e.child))for(cc(e,t,n),e=e.sibling;null!==e;)cc(e,t,n),e=e.sibling}function lc(e,t,n){var a=e.tag;if(5===a||6===a)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==a&&null!==(e=e.child))for(lc(e,t,n),e=e.sibling;null!==e;)lc(e,t,n),e=e.sibling}var dc=null,uc=!1;function pc(e,t,n){for(n=n.child;null!==n;)fc(e,t,n),n=n.sibling}function fc(e,t,n){if(rt&&"function"==typeof rt.onCommitFiberUnmount)try{rt.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Ks||Js(n,t);case 6:var a=dc,o=uc;dc=null,pc(e,t,n),uc=o,null!==(dc=a)&&(uc?(e=dc,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dc.removeChild(n.stateNode));break;case 18:null!==dc&&(uc?(e=dc,n=n.stateNode,8===e.nodeType?co(e.parentNode,n):1===e.nodeType&&co(e,n),Ut(e)):co(dc,n.stateNode));break;case 4:a=dc,o=uc,dc=n.stateNode.containerInfo,uc=!0,pc(e,t,n),dc=a,uc=o;break;case 0:case 11:case 14:case 15:if(!Ks&&(null!==(a=n.updateQueue)&&null!==(a=a.lastEffect))){o=a=a.next;do{var r=o,i=r.destroy;r=r.tag,void 0!==i&&(0!=(2&r)||0!=(4&r))&&ec(n,t,i),o=o.next}while(o!==a)}pc(e,t,n);break;case 1:if(!Ks&&(Js(n,t),"function"==typeof(a=n.stateNode).componentWillUnmount))try{a.props=n.memoizedProps,a.state=n.memoizedState,a.componentWillUnmount()}catch(s){El(n,t,s)}pc(e,t,n);break;case 21:pc(e,t,n);break;case 22:1&n.mode?(Ks=(a=Ks)||null!==n.memoizedState,pc(e,t,n),Ks=a):pc(e,t,n);break;default:pc(e,t,n)}}function mc(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Qs),t.forEach((function(t){var a=Pl.bind(null,e,t);n.has(t)||(n.add(t),t.then(a,a))}))}}function gc(e,t){var n=t.deletions;if(null!==n)for(var a=0;a<n.length;a++){var o=n[a];try{var i=e,s=t,c=s;e:for(;null!==c;){switch(c.tag){case 5:dc=c.stateNode,uc=!1;break e;case 3:case 4:dc=c.stateNode.containerInfo,uc=!0;break e}c=c.return}if(null===dc)throw Error(r(160));fc(i,s,o),dc=null,uc=!1;var l=o.alternate;null!==l&&(l.return=null),o.return=null}catch(d){El(o,t,d)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bc(t,e),t=t.sibling}function bc(e,t){var n=e.alternate,a=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gc(t,e),hc(e),4&a){try{nc(3,e,e.return),ac(3,e)}catch(b){El(e,e.return,b)}try{nc(5,e,e.return)}catch(b){El(e,e.return,b)}}break;case 1:gc(t,e),hc(e),512&a&&null!==n&&Js(n,n.return);break;case 5:if(gc(t,e),hc(e),512&a&&null!==n&&Js(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(b){El(e,e.return,b)}}if(4&a&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,c=e.type,l=e.updateQueue;if(e.updateQueue=null,null!==l)try{"input"===c&&"radio"===i.type&&null!=i.name&&Q(o,i),ye(c,s);var d=ye(c,i);for(s=0;s<l.length;s+=2){var u=l[s],p=l[s+1];"style"===u?be(o,p):"dangerouslySetInnerHTML"===u?ue(o,p):"children"===u?pe(o,p):y(o,u,p,d)}switch(c){case"input":X(o,i);break;case"textarea":re(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[mo]=i}catch(b){El(e,e.return,b)}}break;case 6:if(gc(t,e),hc(e),4&a){if(null===e.stateNode)throw Error(r(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(b){El(e,e.return,b)}}break;case 3:if(gc(t,e),hc(e),4&a&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(b){El(e,e.return,b)}break;case 4:default:gc(t,e),hc(e);break;case 13:gc(t,e),hc(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($c=Qe())),4&a&&mc(e);break;case 22:if(u=null!==n&&null!==n.memoizedState,1&e.mode?(Ks=(d=Ks)||u,gc(t,e),Ks=d):gc(t,e),hc(e),8192&a){if(d=null!==e.memoizedState,(e.stateNode.isHidden=d)&&!u&&0!=(1&e.mode))for(Xs=e,u=e.child;null!==u;){for(p=Xs=u;null!==Xs;){switch(m=(f=Xs).child,f.tag){case 0:case 11:case 14:case 15:nc(4,f,f.return);break;case 1:Js(f,f.return);var g=f.stateNode;if("function"==typeof g.componentWillUnmount){a=f,n=f.return;try{t=a,g.props=t.memoizedProps,g.state=t.memoizedState,g.componentWillUnmount()}catch(b){El(a,n,b)}}break;case 5:Js(f,f.return);break;case 22:if(null!==f.memoizedState){_c(p);continue}}null!==m?(m.return=f,Xs=m):_c(p)}u=u.sibling}e:for(u=null,p=e;;){if(5===p.tag){if(null===u){u=p;try{o=p.stateNode,d?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(c=p.stateNode,s=null!=(l=p.memoizedProps.style)&&l.hasOwnProperty("display")?l.display:null,c.style.display=ge("display",s))}catch(b){El(e,e.return,b)}}}else if(6===p.tag){if(null===u)try{p.stateNode.nodeValue=d?"":p.memoizedProps}catch(b){El(e,e.return,b)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;u===p&&(u=null),p=p.return}u===p&&(u=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:gc(t,e),hc(e),4&a&&mc(e);case 21:}}function hc(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(ic(n)){var a=n;break e}n=n.return}throw Error(r(160))}switch(a.tag){case 5:var o=a.stateNode;32&a.flags&&(pe(o,""),a.flags&=-33),lc(e,sc(e),o);break;case 3:case 4:var i=a.stateNode.containerInfo;cc(e,sc(e),i);break;default:throw Error(r(161))}}catch(s){El(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vc(e,t,n){Xs=e,yc(e,t,n)}function yc(e,t,n){for(var a=0!=(1&e.mode);null!==Xs;){var o=Xs,r=o.child;if(22===o.tag&&a){var i=null!==o.memoizedState||Ys;if(!i){var s=o.alternate,c=null!==s&&null!==s.memoizedState||Ks;s=Ys;var l=Ks;if(Ys=i,(Ks=c)&&!l)for(Xs=o;null!==Xs;)c=(i=Xs).child,22===i.tag&&null!==i.memoizedState?kc(o):null!==c?(c.return=i,Xs=c):kc(o);for(;null!==r;)Xs=r,yc(r,t,n),r=r.sibling;Xs=o,Ys=s,Ks=l}xc(e)}else 0!=(8772&o.subtreeFlags)&&null!==r?(r.return=o,Xs=r):xc(e)}}function xc(e){for(;null!==Xs;){var t=Xs;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Ks||ac(5,t);break;case 1:var a=t.stateNode;if(4&t.flags&&!Ks)if(null===n)a.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:hr(t.type,n.memoizedProps);a.componentDidUpdate(o,n.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Fr(t,i,a);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Fr(t,s,n)}break;case 5:var c=t.stateNode;if(null===n&&4&t.flags){n=c;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var d=t.alternate;if(null!==d){var u=d.memoizedState;if(null!==u){var p=u.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(r(163))}Ks||512&t.flags&&oc(t)}catch(f){El(t,t.return,f)}}if(t===e){Xs=null;break}if(null!==(n=t.sibling)){n.return=t.return,Xs=n;break}Xs=t.return}}function _c(e){for(;null!==Xs;){var t=Xs;if(t===e){Xs=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Xs=n;break}Xs=t.return}}function kc(e){for(;null!==Xs;){var t=Xs;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ac(4,t)}catch(c){El(t,n,c)}break;case 1:var a=t.stateNode;if("function"==typeof a.componentDidMount){var o=t.return;try{a.componentDidMount()}catch(c){El(t,o,c)}}var r=t.return;try{oc(t)}catch(c){El(t,r,c)}break;case 5:var i=t.return;try{oc(t)}catch(c){El(t,i,c)}}}catch(c){El(t,t.return,c)}if(t===e){Xs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Xs=s;break}Xs=t.return}}var wc,Ec=Math.ceil,Sc=x.ReactCurrentDispatcher,Cc=x.ReactCurrentOwner,Tc=x.ReactCurrentBatchConfig,Pc=0,Ac=null,Nc=null,Oc=0,jc=0,Lc=So(0),Mc=0,Ic=null,Rc=0,Dc=0,zc=0,Fc=null,Bc=null,$c=0,Uc=1/0,Hc=null,Vc=!1,Zc=null,qc=null,Wc=!1,Gc=null,Yc=0,Kc=0,Qc=null,Xc=-1,Jc=0;function el(){return 0!=(6&Pc)?Qe():-1!==Xc?Xc:Xc=Qe()}function tl(e){return 0==(1&e.mode)?1:0!=(2&Pc)&&0!==Oc?Oc&-Oc:null!==br.transition?(0===Jc&&(Jc=gt()),Jc):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Kt(e.type)}function nl(e,t,n,a){if(50<Kc)throw Kc=0,Qc=null,Error(r(185));ht(e,n,a),0!=(2&Pc)&&e===Ac||(e===Ac&&(0==(2&Pc)&&(Dc|=n),4===Mc&&sl(e,Oc)),al(e,a),1===n&&0===Pc&&0==(1&t.mode)&&(Uc=Qe()+500,Bo&&Ho()))}function al(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,r=e.pendingLanes;0<r;){var i=31-it(r),s=1<<i,c=o[i];-1===c?0!=(s&n)&&0==(s&a)||(o[i]=ft(s,t)):c<=t&&(e.expiredLanes|=s),r&=~s}}(e,t);var a=pt(e,e===Ac?Oc:0);if(0===a)null!==n&&Ge(n),e.callbackNode=null,e.callbackPriority=0;else if(t=a&-a,e.callbackPriority!==t){if(null!=n&&Ge(n),1===t)0===e.tag?function(e){Bo=!0,Uo(e)}(cl.bind(null,e)):Uo(cl.bind(null,e)),io((function(){0==(6&Pc)&&Ho()})),n=null;else{switch(xt(a)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=at}n=Al(n,ol.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ol(e,t){if(Xc=-1,Jc=0,0!=(6&Pc))throw Error(r(327));var n=e.callbackNode;if(kl()&&e.callbackNode!==n)return null;var a=pt(e,e===Ac?Oc:0);if(0===a)return null;if(0!=(30&a)||0!=(a&e.expiredLanes)||t)t=bl(e,a);else{t=a;var o=Pc;Pc|=2;var i=ml();for(Ac===e&&Oc===t||(Hc=null,Uc=Qe()+500,pl(e,t));;)try{vl();break}catch(c){fl(e,c)}kr(),Sc.current=i,Pc=o,null!==Nc?t=0:(Ac=null,Oc=0,t=Mc)}if(0!==t){if(2===t&&(0!==(o=mt(e))&&(a=o,t=rl(e,o))),1===t)throw n=Ic,pl(e,0),sl(e,a),al(e,Qe()),n;if(6===t)sl(e,a);else{if(o=e.current.alternate,0==(30&a)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var a=0;a<n.length;a++){var o=n[a],r=o.getSnapshot;o=o.value;try{if(!sa(r(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bl(e,a))&&(0!==(i=mt(e))&&(a=i,t=rl(e,i))),1===t))throw n=Ic,pl(e,0),sl(e,a),al(e,Qe()),n;switch(e.finishedWork=o,e.finishedLanes=a,t){case 0:case 1:throw Error(r(345));case 2:case 5:_l(e,Bc,Hc);break;case 3:if(sl(e,a),(130023424&a)===a&&10<(t=$c+500-Qe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&a)!==a){el(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ao(_l.bind(null,e,Bc,Hc),t);break}_l(e,Bc,Hc);break;case 4:if(sl(e,a),(4194240&a)===a)break;for(t=e.eventTimes,o=-1;0<a;){var s=31-it(a);i=1<<s,(s=t[s])>o&&(o=s),a&=~i}if(a=o,10<(a=(120>(a=Qe()-a)?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*Ec(a/1960))-a)){e.timeoutHandle=ao(_l.bind(null,e,Bc,Hc),a);break}_l(e,Bc,Hc);break;default:throw Error(r(329))}}}return al(e,Qe()),e.callbackNode===n?ol.bind(null,e):null}function rl(e,t){var n=Fc;return e.current.memoizedState.isDehydrated&&(pl(e,t).flags|=256),2!==(e=bl(e,t))&&(t=Bc,Bc=n,null!==t&&il(t)),e}function il(e){null===Bc?Bc=e:Bc.push.apply(Bc,e)}function sl(e,t){for(t&=~zc,t&=~Dc,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),a=1<<n;e[n]=-1,t&=~a}}function cl(e){if(0!=(6&Pc))throw Error(r(327));kl();var t=pt(e,0);if(0==(1&t))return al(e,Qe()),null;var n=bl(e,t);if(0!==e.tag&&2===n){var a=mt(e);0!==a&&(t=a,n=rl(e,a))}if(1===n)throw n=Ic,pl(e,0),sl(e,t),al(e,Qe()),n;if(6===n)throw Error(r(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,_l(e,Bc,Hc),al(e,Qe()),null}function ll(e,t){var n=Pc;Pc|=1;try{return e(t)}finally{0===(Pc=n)&&(Uc=Qe()+500,Bo&&Ho())}}function dl(e){null!==Gc&&0===Gc.tag&&0==(6&Pc)&&kl();var t=Pc;Pc|=1;var n=Tc.transition,a=yt;try{if(Tc.transition=null,yt=1,e)return e()}finally{yt=a,Tc.transition=n,0==(6&(Pc=t))&&Ho()}}function ul(){jc=Lc.current,Co(Lc)}function pl(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Nc)for(n=Nc.return;null!==n;){var a=n;switch(nr(a),a.tag){case 1:null!=(a=a.type.childContextTypes)&&Mo();break;case 3:ri(),Co(No),Co(Ao),ui();break;case 5:si(a);break;case 4:ri();break;case 13:case 19:Co(ci);break;case 10:wr(a.type._context);break;case 22:case 23:ul()}n=n.return}if(Ac=e,Nc=e=Ll(e.current,null),Oc=jc=t,Mc=0,Ic=null,zc=Dc=Rc=0,Bc=Fc=null,null!==Tr){for(t=0;t<Tr.length;t++)if(null!==(a=(n=Tr[t]).interleaved)){n.interleaved=null;var o=a.next,r=n.pending;if(null!==r){var i=r.next;r.next=o,a.next=i}n.pending=a}Tr=null}return e}function fl(e,t){for(;;){var n=Nc;try{if(kr(),pi.current=is,vi){for(var a=gi.memoizedState;null!==a;){var o=a.queue;null!==o&&(o.pending=null),a=a.next}vi=!1}if(mi=0,hi=bi=gi=null,yi=!1,xi=0,Cc.current=null,null===n||null===n.return){Mc=1,Ic=t,Nc=null;break}e:{var i=e,s=n.return,c=n,l=t;if(t=Oc,c.flags|=32768,null!==l&&"object"==typeof l&&"function"==typeof l.then){var d=l,u=c,p=u.tag;if(0==(1&u.mode)&&(0===p||11===p||15===p)){var f=u.alternate;f?(u.updateQueue=f.updateQueue,u.memoizedState=f.memoizedState,u.lanes=f.lanes):(u.updateQueue=null,u.memoizedState=null)}var m=hs(s);if(null!==m){m.flags&=-257,vs(m,s,c,0,t),1&m.mode&&bs(i,d,t),l=d;var g=(t=m).updateQueue;if(null===g){var b=new Set;b.add(l),t.updateQueue=b}else g.add(l);break e}if(0==(1&t)){bs(i,d,t),gl();break e}l=Error(r(426))}else if(rr&&1&c.mode){var h=hs(s);if(null!==h){0==(65536&h.flags)&&(h.flags|=256),vs(h,s,c,0,t),gr(ds(l,c));break e}}i=l=ds(l,c),4!==Mc&&(Mc=2),null===Fc?Fc=[i]:Fc.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Dr(i,ms(0,l,t));break e;case 1:c=l;var v=i.type,y=i.stateNode;if(0==(128&i.flags)&&("function"==typeof v.getDerivedStateFromError||null!==y&&"function"==typeof y.componentDidCatch&&(null===qc||!qc.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,Dr(i,gs(i,c,t));break e}}i=i.return}while(null!==i)}xl(n)}catch(x){t=x,Nc===n&&null!==n&&(Nc=n=n.return);continue}break}}function ml(){var e=Sc.current;return Sc.current=is,null===e?is:e}function gl(){0!==Mc&&3!==Mc&&2!==Mc||(Mc=4),null===Ac||0==(268435455&Rc)&&0==(268435455&Dc)||sl(Ac,Oc)}function bl(e,t){var n=Pc;Pc|=2;var a=ml();for(Ac===e&&Oc===t||(Hc=null,pl(e,t));;)try{hl();break}catch(o){fl(e,o)}if(kr(),Pc=n,Sc.current=a,null!==Nc)throw Error(r(261));return Ac=null,Oc=0,Mc}function hl(){for(;null!==Nc;)yl(Nc)}function vl(){for(;null!==Nc&&!Ye();)yl(Nc)}function yl(e){var t=wc(e.alternate,e,jc);e.memoizedProps=e.pendingProps,null===t?xl(e):Nc=t,Cc.current=null}function xl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Ws(n,t,jc)))return void(Nc=n)}else{if(null!==(n=Gs(n,t)))return n.flags&=32767,void(Nc=n);if(null===e)return Mc=6,void(Nc=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Nc=t);Nc=t=e}while(null!==t);0===Mc&&(Mc=5)}function _l(e,t,n){var a=yt,o=Tc.transition;try{Tc.transition=null,yt=1,function(e,t,n,a){do{kl()}while(null!==Gc);if(0!=(6&Pc))throw Error(r(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(r(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var a=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),r=1<<o;t[o]=0,a[o]=-1,e[o]=-1,n&=~r}}(e,i),e===Ac&&(Nc=Ac=null,Oc=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Wc||(Wc=!0,Al(tt,(function(){return kl(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Tc.transition,Tc.transition=null;var s=yt;yt=1;var c=Pc;Pc|=4,Cc.current=null,function(e,t){if(eo=Vt,fa(e=pa())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var a=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(a&&0!==a.rangeCount){n=a.anchorNode;var o=a.anchorOffset,i=a.focusNode;a=a.focusOffset;try{n.nodeType,i.nodeType}catch(_){n=null;break e}var s=0,c=-1,l=-1,d=0,u=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(c=s+o),p!==i||0!==a&&3!==p.nodeType||(l=s+a),3===p.nodeType&&(s+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++d===o&&(c=s),f===i&&++u===a&&(l=s),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===c||-1===l?null:{start:c,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Vt=!1,Xs=t;null!==Xs;)if(e=(t=Xs).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Xs=e;else for(;null!==Xs;){t=Xs;try{var g=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==g){var b=g.memoizedProps,h=g.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?b:hr(t.type,b),h);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var x=t.stateNode.containerInfo;1===x.nodeType?x.textContent="":9===x.nodeType&&x.documentElement&&x.removeChild(x.documentElement);break;default:throw Error(r(163))}}catch(_){El(t,t.return,_)}if(null!==(e=t.sibling)){e.return=t.return,Xs=e;break}Xs=t.return}g=tc,tc=!1}(e,n),bc(n,e),ma(to),Vt=!!eo,to=eo=null,e.current=n,vc(n,e,o),Ke(),Pc=c,yt=s,Tc.transition=i}else e.current=n;if(Wc&&(Wc=!1,Gc=e,Yc=o),0===(i=e.pendingLanes)&&(qc=null),function(e){if(rt&&"function"==typeof rt.onCommitFiberRoot)try{rt.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),al(e,Qe()),null!==t)for(a=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],a(o.value,{componentStack:o.stack,digest:o.digest});if(Vc)throw Vc=!1,e=Zc,Zc=null,e;0!=(1&Yc)&&0!==e.tag&&kl(),0!=(1&(i=e.pendingLanes))?e===Qc?Kc++:(Kc=0,Qc=e):Kc=0,Ho()}(e,t,n,a)}finally{Tc.transition=o,yt=a}return null}function kl(){if(null!==Gc){var e=xt(Yc),t=Tc.transition,n=yt;try{if(Tc.transition=null,yt=16>e?16:e,null===Gc)var a=!1;else{if(e=Gc,Gc=null,Yc=0,0!=(6&Pc))throw Error(r(331));var o=Pc;for(Pc|=4,Xs=e.current;null!==Xs;){var i=Xs,s=i.child;if(0!=(16&Xs.flags)){var c=i.deletions;if(null!==c){for(var l=0;l<c.length;l++){var d=c[l];for(Xs=d;null!==Xs;){var u=Xs;switch(u.tag){case 0:case 11:case 15:nc(8,u,i)}var p=u.child;if(null!==p)p.return=u,Xs=p;else for(;null!==Xs;){var f=(u=Xs).sibling,m=u.return;if(rc(u),u===d){Xs=null;break}if(null!==f){f.return=m,Xs=f;break}Xs=m}}}var g=i.alternate;if(null!==g){var b=g.child;if(null!==b){g.child=null;do{var h=b.sibling;b.sibling=null,b=h}while(null!==b)}}Xs=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Xs=s;else e:for(;null!==Xs;){if(0!=(2048&(i=Xs).flags))switch(i.tag){case 0:case 11:case 15:nc(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Xs=v;break e}Xs=i.return}}var y=e.current;for(Xs=y;null!==Xs;){var x=(s=Xs).child;if(0!=(2064&s.subtreeFlags)&&null!==x)x.return=s,Xs=x;else e:for(s=y;null!==Xs;){if(0!=(2048&(c=Xs).flags))try{switch(c.tag){case 0:case 11:case 15:ac(9,c)}}catch(k){El(c,c.return,k)}if(c===s){Xs=null;break e}var _=c.sibling;if(null!==_){_.return=c.return,Xs=_;break e}Xs=c.return}}if(Pc=o,Ho(),rt&&"function"==typeof rt.onPostCommitFiberRoot)try{rt.onPostCommitFiberRoot(ot,e)}catch(k){}a=!0}return a}finally{yt=n,Tc.transition=t}}return!1}function wl(e,t,n){e=Ir(e,t=ms(0,t=ds(n,t),1),1),t=el(),null!==e&&(ht(e,1,t),al(e,t))}function El(e,t,n){if(3===e.tag)wl(e,e,n);else for(;null!==t;){if(3===t.tag){wl(t,e,n);break}if(1===t.tag){var a=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof a.componentDidCatch&&(null===qc||!qc.has(a))){t=Ir(t,e=gs(t,e=ds(n,e),1),1),e=el(),null!==t&&(ht(t,1,e),al(t,e));break}}t=t.return}}function Sl(e,t,n){var a=e.pingCache;null!==a&&a.delete(t),t=el(),e.pingedLanes|=e.suspendedLanes&n,Ac===e&&(Oc&n)===n&&(4===Mc||3===Mc&&(130023424&Oc)===Oc&&500>Qe()-$c?pl(e,0):zc|=n),al(e,t)}function Cl(e,t){0===t&&(0==(1&e.mode)?t=1:(t=dt,0==(130023424&(dt<<=1))&&(dt=4194304)));var n=el();null!==(e=Nr(e,t))&&(ht(e,t,n),al(e,n))}function Tl(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cl(e,n)}function Pl(e,t){var n=0;switch(e.tag){case 13:var a=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:a=e.stateNode;break;default:throw Error(r(314))}null!==a&&a.delete(t),Cl(e,n)}function Al(e,t){return We(e,t)}function Nl(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ol(e,t,n,a){return new Nl(e,t,n,a)}function jl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ll(e,t){var n=e.alternate;return null===n?((n=Ol(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ml(e,t,n,a,o,i){var s=2;if(a=e,"function"==typeof e)jl(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case w:return Il(n.children,o,i,t);case E:s=8,o|=8;break;case S:return(e=Ol(12,n,t,2|o)).elementType=S,e.lanes=i,e;case A:return(e=Ol(13,n,t,o)).elementType=A,e.lanes=i,e;case N:return(e=Ol(19,n,t,o)).elementType=N,e.lanes=i,e;case L:return Rl(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case P:s=11;break e;case O:s=14;break e;case j:s=16,a=null;break e}throw Error(r(130,null==e?e:typeof e,""))}return(t=Ol(s,n,t,o)).elementType=e,t.type=a,t.lanes=i,t}function Il(e,t,n,a){return(e=Ol(7,e,a,t)).lanes=n,e}function Rl(e,t,n,a){return(e=Ol(22,e,a,t)).elementType=L,e.lanes=n,e.stateNode={isHidden:!1},e}function Dl(e,t,n){return(e=Ol(6,e,null,t)).lanes=n,e}function zl(e,t,n){return(t=Ol(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Fl(e,t,n,a,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=bt(0),this.expirationTimes=bt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=bt(0),this.identifierPrefix=a,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bl(e,t,n,a,o,r,i,s,c){return e=new Fl(e,t,n,s,c),1===t?(t=1,!0===r&&(t|=8)):t=0,r=Ol(3,null,null,t),e.current=r,r.stateNode=e,r.memoizedState={element:a,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},jr(r),e}function $l(e,t,n){var a=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==a?null:""+a,children:e,containerInfo:t,implementation:n}}function Ul(e){if(!e)return Po;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(r(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Lo(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(r(171))}if(1===e.tag){var n=e.type;if(Lo(n))return Ro(e,n,t)}return t}function Hl(e,t,n,a,o,r,i,s,c){return(e=Bl(n,a,!0,e,0,r,0,s,c)).context=Ul(null),n=e.current,(r=Mr(a=el(),o=tl(n))).callback=null!=t?t:null,Ir(n,r,o),e.current.lanes=o,ht(e,o,a),al(e,a),e}function Vl(e,t,n,a){var o=t.current,r=el(),i=tl(o);return n=Ul(n),null===t.context?t.context=n:t.pendingContext=n,(t=Mr(r,i)).payload={element:e},null!==(a=void 0===a?null:a)&&(t.callback=a),null!==(e=Ir(o,t,i))&&(nl(e,o,i,r),Rr(e,o,i)),i}function Zl(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function ql(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Wl(e,t){ql(e,t),(e=e.alternate)&&ql(e,t)}wc=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||No.current)xs=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return xs=!1,function(e,t,n){switch(t.tag){case 3:Ns(t),mr();break;case 5:ii(t);break;case 1:Lo(t.type)&&Do(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var a=t.type._context,o=t.memoizedProps.value;To(vr,a._currentValue),a._currentValue=o;break;case 13:if(null!==(a=t.memoizedState))return null!==a.dehydrated?(To(ci,1&ci.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Ds(e,t,n):(To(ci,1&ci.current),null!==(e=Vs(e,t,n))?e.sibling:null);To(ci,1&ci.current);break;case 19:if(a=0!=(n&t.childLanes),0!=(128&e.flags)){if(a)return Us(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),To(ci,ci.current),a)break;return null;case 22:case 23:return t.lanes=0,Ss(e,t,n)}return Vs(e,t,n)}(e,t,n);xs=0!=(131072&e.flags)}else xs=!1,rr&&0!=(1048576&t.flags)&&er(t,Wo,t.index);switch(t.lanes=0,t.tag){case 2:var a=t.type;Hs(e,t),e=t.pendingProps;var o=jo(t,Ao.current);Sr(t,n),o=Ei(null,t,a,e,o,n);var i=Si();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Lo(a)?(i=!0,Do(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,jr(t),o.updater=Ur,t.stateNode=o,o._reactInternals=t,qr(t,a,e,n),t=As(null,t,a,!0,i,n)):(t.tag=0,rr&&i&&tr(t),_s(null,t,o,n),t=t.child),t;case 16:a=t.elementType;e:{switch(Hs(e,t),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return jl(e)?1:0;if(null!=e){if((e=e.$$typeof)===P)return 11;if(e===O)return 14}return 2}(a),e=hr(a,e),o){case 0:t=Ts(null,t,a,e,n);break e;case 1:t=Ps(null,t,a,e,n);break e;case 11:t=ks(null,t,a,e,n);break e;case 14:t=ws(null,t,a,hr(a.type,e),n);break e}throw Error(r(306,a,""))}return t;case 0:return a=t.type,o=t.pendingProps,Ts(e,t,a,o=t.elementType===a?o:hr(a,o),n);case 1:return a=t.type,o=t.pendingProps,Ps(e,t,a,o=t.elementType===a?o:hr(a,o),n);case 3:e:{if(Ns(t),null===e)throw Error(r(387));a=t.pendingProps,o=(i=t.memoizedState).element,Lr(e,t),zr(t,a,null,n);var s=t.memoizedState;if(a=s.element,i.isDehydrated){if(i={element:a,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Os(e,t,a,n,o=ds(Error(r(423)),t));break e}if(a!==o){t=Os(e,t,a,n,o=ds(Error(r(424)),t));break e}for(or=lo(t.stateNode.containerInfo.firstChild),ar=t,rr=!0,ir=null,n=Xr(t,null,a,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(mr(),a===o){t=Vs(e,t,n);break e}_s(e,t,a,n)}t=t.child}return t;case 5:return ii(t),null===e&&dr(t),a=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(a,o)?s=null:null!==i&&no(a,i)&&(t.flags|=32),Cs(e,t),_s(e,t,s,n),t.child;case 6:return null===e&&dr(t),null;case 13:return Ds(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),a=t.pendingProps,null===e?t.child=Qr(t,null,a,n):_s(e,t,a,n),t.child;case 11:return a=t.type,o=t.pendingProps,ks(e,t,a,o=t.elementType===a?o:hr(a,o),n);case 7:return _s(e,t,t.pendingProps,n),t.child;case 8:case 12:return _s(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(a=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,To(vr,a._currentValue),a._currentValue=s,null!==i)if(sa(i.value,s)){if(i.children===o.children&&!No.current){t=Vs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var c=i.dependencies;if(null!==c){s=i.child;for(var l=c.firstContext;null!==l;){if(l.context===a){if(1===i.tag){(l=Mr(-1,n&-n)).tag=2;var d=i.updateQueue;if(null!==d){var u=(d=d.shared).pending;null===u?l.next=l:(l.next=u.next,u.next=l),d.pending=l}}i.lanes|=n,null!==(l=i.alternate)&&(l.lanes|=n),Er(i.return,n,t),c.lanes|=n;break}l=l.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(r(341));s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),Er(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}_s(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,a=t.pendingProps.children,Sr(t,n),a=a(o=Cr(o)),t.flags|=1,_s(e,t,a,n),t.child;case 14:return o=hr(a=t.type,t.pendingProps),ws(e,t,a,o=hr(a.type,o),n);case 15:return Es(e,t,t.type,t.pendingProps,n);case 17:return a=t.type,o=t.pendingProps,o=t.elementType===a?o:hr(a,o),Hs(e,t),t.tag=1,Lo(a)?(e=!0,Do(t)):e=!1,Sr(t,n),Vr(t,a,o),qr(t,a,o,n),As(null,t,a,!0,e,n);case 19:return Us(e,t,n);case 22:return Ss(e,t,n)}throw Error(r(156,t.tag))};var Gl="function"==typeof reportError?reportError:function(e){console.error(e)};function Yl(e){this._internalRoot=e}function Kl(e){this._internalRoot=e}function Ql(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jl(){}function ed(e,t,n,a,o){var r=n._reactRootContainer;if(r){var i=r;if("function"==typeof o){var s=o;o=function(){var e=Zl(i);s.call(e)}}Vl(t,i,e,o)}else i=function(e,t,n,a,o){if(o){if("function"==typeof a){var r=a;a=function(){var e=Zl(i);r.call(e)}}var i=Hl(t,a,e,0,null,!1,0,"",Jl);return e._reactRootContainer=i,e[go]=i.current,Ua(8===e.nodeType?e.parentNode:e),dl(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof a){var s=a;a=function(){var e=Zl(c);s.call(e)}}var c=Bl(e,0,!1,null,0,!1,0,"",Jl);return e._reactRootContainer=c,e[go]=c.current,Ua(8===e.nodeType?e.parentNode:e),dl((function(){Vl(t,c,n,a)})),c}(n,t,e,o,a);return Zl(i)}Kl.prototype.render=Yl.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(r(409));Vl(e,t,null,null)},Kl.prototype.unmount=Yl.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dl((function(){Vl(null,e,null,null)})),t[go]=null}},Kl.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Lt.length&&0!==t&&t<Lt[n].priority;n++);Lt.splice(n,0,e),0===n&&Dt(e)}},_t=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=ut(t.pendingLanes);0!==n&&(vt(t,1|n),al(t,Qe()),0==(6&Pc)&&(Uc=Qe()+500,Ho()))}break;case 13:dl((function(){var t=Nr(e,1);if(null!==t){var n=el();nl(t,e,1,n)}})),Wl(e,1)}},kt=function(e){if(13===e.tag){var t=Nr(e,134217728);if(null!==t)nl(t,e,134217728,el());Wl(e,134217728)}},wt=function(e){if(13===e.tag){var t=tl(e),n=Nr(e,t);if(null!==n)nl(n,e,t,el());Wl(e,t)}},Et=function(){return yt},St=function(e,t){var n=yt;try{return yt=e,t()}finally{yt=n}},ke=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var a=n[t];if(a!==e&&a.form===e.form){var o=ko(a);if(!o)throw Error(r(90));W(a),X(a,o)}}}break;case"textarea":re(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Pe=ll,Ae=dl;var td={usingClientEntryPoint:!1,Events:[xo,_o,ko,Ce,Te,ll]},nd={findFiberByHostInstance:yo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ad={bundleType:nd.bundleType,version:nd.version,rendererPackageName:nd.rendererPackageName,rendererConfig:nd.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:x.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ze(e))?null:e.stateNode},findFiberByHostInstance:nd.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var od=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!od.isDisabled&&od.supportsFiber)try{ot=od.inject(ad),rt=od}catch(de){}}t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Ql(t))throw Error(r(200));return $l(e,t,null,n)},t.hydrate=function(e,t,n){if(!Xl(t))throw Error(r(200));return ed(null,e,t,!0,n)}},31542:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(43577)},10745:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var a=n-1>>>1,o=e[a];if(!(0<r(o,t)))break e;e[a]=t,e[n]=o,n=a}}function a(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var a=0,o=e.length,i=o>>>1;a<i;){var s=2*(a+1)-1,c=e[s],l=s+1,d=e[l];if(0>r(c,n))l<o&&0>r(d,c)?(e[a]=d,e[l]=n,a=l):(e[a]=c,e[s]=n,a=s);else{if(!(l<o&&0>r(d,n)))break e;e[a]=d,e[l]=n,a=l}}}return t}function r(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,c=s.now();t.unstable_now=function(){return s.now()-c}}var l=[],d=[],u=1,p=null,f=3,m=!1,g=!1,b=!1,h="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function x(e){for(var t=a(d);null!==t;){if(null===t.callback)o(d);else{if(!(t.startTime<=e))break;o(d),t.sortIndex=t.expirationTime,n(l,t)}t=a(d)}}function _(e){if(b=!1,x(e),!g)if(null!==a(l))g=!0,L(k);else{var t=a(d);null!==t&&M(_,t.startTime-e)}}function k(e,n){g=!1,b&&(b=!1,v(C),C=-1),m=!0;var r=f;try{for(x(n),p=a(l);null!==p&&(!(p.expirationTime>n)||e&&!A());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===a(l)&&o(l),x(n)}else o(l);p=a(l)}if(null!==p)var c=!0;else{var u=a(d);null!==u&&M(_,u.startTime-n),c=!1}return c}finally{p=null,f=r,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var w,E=!1,S=null,C=-1,T=5,P=-1;function A(){return!(t.unstable_now()-P<T)}function N(){if(null!==S){var e=t.unstable_now();P=e;var n=!0;try{n=S(!0,e)}finally{n?w():(E=!1,S=null)}}else E=!1}if("function"==typeof y)w=function(){y(N)};else if("undefined"!=typeof MessageChannel){var O=new MessageChannel,j=O.port2;O.port1.onmessage=N,w=function(){j.postMessage(null)}}else w=function(){h(N,0)};function L(e){S=e,E||(E=!0,w())}function M(e,n){C=h((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){g||m||(g=!0,L(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return a(l)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,r){var i=t.unstable_now();switch("object"==typeof r&&null!==r?r="number"==typeof(r=r.delay)&&0<r?i+r:i:r=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:u++,callback:o,priorityLevel:e,startTime:r,expirationTime:s=r+s,sortIndex:-1},r>i?(e.sortIndex=r,n(d,e),null===a(l)&&e===a(d)&&(b?(v(C),C=-1):b=!0,M(_,r-i))):(e.sortIndex=s,n(l,e),g||m||(g=!0,L(k))),e},t.unstable_shouldYield=A,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},43637:(e,t,n)=>{"use strict";e.exports=n(10745)},54335:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,a="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function r(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,c,l,d;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(c=s;0!=c--;)if(!r(e[c],i[c]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(d=e.entries();!(c=d.next()).done;)if(!i.has(c.value[0]))return!1;for(d=e.entries();!(c=d.next()).done;)if(!r(c.value[1],i.get(c.value[0])))return!1;return!0}if(a&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(d=e.entries();!(c=d.next()).done;)if(!i.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(c=s;0!=c--;)if(e[c]!==i[c])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((s=(l=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(c=s;0!=c--;)if(!Object.prototype.hasOwnProperty.call(i,l[c]))return!1;if(t&&e instanceof Element)return!1;for(c=s;0!=c--;)if(("_owner"!==l[c]&&"__v"!==l[c]&&"__o"!==l[c]||!e.$$typeof)&&!r(e[l[c]],i[l[c]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return r(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},92883:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Z,ql:()=>J});var a=n(27378),o=n(23615),r=n.n(o),i=n(54335),s=n.n(i),c=n(3996),l=n.n(c),d=n(74445),u=n.n(d);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)t.indexOf(n=r[a])>=0||(o[n]=e[n]);return o}var b={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},h={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},x=Object.keys(b).map((function(e){return b[e]})),_={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(_).reduce((function(e,t){return e[_[t]]=t,e}),{}),w=function(e,t){for(var n=e.length-1;n>=0;n-=1){var a=e[n];if(Object.prototype.hasOwnProperty.call(a,t))return a[t]}return null},E=function(e){var t=w(e,b.TITLE),n=w(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var a=w(e,"defaultTitle");return t||a||void 0},S=function(e){return w(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[b.BASE]})).map((function(e){return e[b.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var a=Object.keys(n),o=0;o<a.length;o+=1){var r=a[o].toLowerCase();if(-1!==e.indexOf(r)&&n[r])return t.concat(n)}return t}),[])},P=function(e,t,n){var a={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,r=Object.keys(e),i=0;i<r.length;i+=1){var s=r[i],c=s.toLowerCase();-1===t.indexOf(c)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===c&&"stylesheet"===e[c].toLowerCase()||(n=c),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var l=e[n].toLowerCase();return a[n]||(a[n]={}),o[n]||(o[n]={}),!a[n][l]&&(o[n][l]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var r=Object.keys(o),i=0;i<r.length;i+=1){var s=r[i],c=p({},a[s],o[s]);a[s]=c}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},N=function(e){return Array.isArray(e)?e.join(""):e},O=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),a=0;a<n.length;a+=1)if(t[n[a]]&&t[n[a]].includes(e[n[a]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},j=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},L=[b.NOSCRIPT,b.SCRIPT,b.STYLE],M=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},I=function(e){return Object.keys(e).reduce((function(t,n){var a=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+a:a}),"")},R=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[_[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var o,r=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=_[e]||e;"innerHTML"===n||"cssText"===n?r.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:r[n]=t[e]})),a.createElement(e,r)}))},z=function(e,t,n){switch(e){case b.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,r=R(n,o),[a.createElement(b.TITLE,r,e)];var e,n,o,r},toString:function(){return function(e,t,n,a){var o=I(n),r=N(t);return o?"<"+e+' data-rh="true" '+o+">"+M(r,a)+"</"+e+">":"<"+e+' data-rh="true">'+M(r,a)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return R(t)},toString:function(){return I(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,a){var o=Object.keys(a).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===a[t]?t:t+'="'+M(a[t],n)+'"';return e?e+" "+o:o}),""),r=a.innerHTML||a.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+r+"</"+e+">")}),"")}(e,t,n)}}}},F=function(e){var t=e.baseTag,n=e.bodyAttributes,a=e.encode,o=e.htmlAttributes,r=e.noscriptTags,i=e.styleTags,s=e.title,c=void 0===s?"":s,l=e.titleAttributes,d=e.linkTags,u=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,a=e.encode,o=O(e.metaTags,y),r=O(t,h),i=O(n,v);return{priorityMethods:{toComponent:function(){return[].concat(D(b.META,o.priority),D(b.LINK,r.priority),D(b.SCRIPT,i.priority))},toString:function(){return z(b.META,o.priority,a)+" "+z(b.LINK,r.priority,a)+" "+z(b.SCRIPT,i.priority,a)}},metaTags:o.default,linkTags:r.default,scriptTags:i.default}}(e);f=m.priorityMethods,d=m.linkTags,u=m.metaTags,p=m.scriptTags}return{priority:f,base:z(b.BASE,t,a),bodyAttributes:z("bodyAttributes",n,a),htmlAttributes:z("htmlAttributes",o,a),link:z(b.LINK,d,a),meta:z(b.META,u,a),noscript:z(b.NOSCRIPT,r,a),script:z(b.SCRIPT,p,a),style:z(b.STYLE,i,a),title:z(b.TITLE,{title:c,titleAttributes:l},a)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=F({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=a.createContext({}),H=r().shape({setHelmet:r().func,helmetInstances:r().shape({get:r().func,add:r().func,remove:r().func})}),V="undefined"!=typeof document,Z=function(e){function t(n){var a;return(a=e.call(this,n)||this).helmetData=new $(a.props.context,t.canUseDOM),a}return f(t,e),t.prototype.render=function(){return a.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(a.Component);Z.canUseDOM=V,Z.propTypes={context:r().shape({helmet:r().shape()}),children:r().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var q=function(e,t){var n,a=document.head||document.querySelector(b.HEAD),o=a.querySelectorAll(e+"[data-rh]"),r=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var a=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?a.innerHTML=t.innerHTML:"cssText"===o?a.styleSheet?a.styleSheet.cssText=t.cssText:a.appendChild(document.createTextNode(t.cssText)):a.setAttribute(o,void 0===t[o]?"":t[o]));a.setAttribute("data-rh","true"),r.some((function(e,t){return n=t,a.isEqualNode(e)}))?r.splice(n,1):i.push(a)})),r.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return a.appendChild(e)})),{oldTags:r,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var a=n.getAttribute("data-rh"),o=a?a.split(","):[],r=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var c=i[s],l=t[c]||"";n.getAttribute(c)!==l&&n.setAttribute(c,l),-1===o.indexOf(c)&&o.push(c);var d=r.indexOf(c);-1!==d&&r.splice(d,1)}for(var u=r.length-1;u>=0;u-=1)n.removeAttribute(r[u]);o.length===r.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},G=function(e,t){var n=e.baseTag,a=e.htmlAttributes,o=e.linkTags,r=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,c=e.scriptTags,l=e.styleTags,d=e.title,u=e.titleAttributes;W(b.BODY,e.bodyAttributes),W(b.HTML,a),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),W(b.TITLE,t)}(d,u);var p={baseTag:q(b.BASE,n),linkTags:q(b.LINK,o),metaTags:q(b.META,r),noscriptTags:q(b.NOSCRIPT,i),scriptTags:q(b.SCRIPT,c),styleTags:q(b.STYLE,l)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,a=t.oldTags;n.length&&(f[e]=n),a.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,f,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return(t=e.call.apply(e,[this].concat(a))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!u()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,a=n.setHelmet,o=null,r=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:w(e,"defer"),encode:w(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:P(b.LINK,["rel","href"],e),metaTags:P(b.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:P(b.NOSCRIPT,["innerHTML"],e),onChangeClientState:S(e),scriptTags:P(b.SCRIPT,["src","innerHTML"],e),styleTags:P(b.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});Z.canUseDOM?(t=r,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){G(t,(function(){Y=null}))})):(G(t),Y=null)):F&&(o=F(r)),a(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(a.Component);K.propTypes={context:H.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(j(this.props,"helmetData"),j(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case b.SCRIPT:case b.NOSCRIPT:return{innerHTML:t};case b.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,a=e.arrayTypeChildren;return p({},a,((t={})[n.type]=[].concat(a[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,a=e.child,o=e.newProps,r=e.newChildProps,i=e.nestedChildren;switch(a.type){case b.TITLE:return p({},o,((t={})[a.type]=i,t.titleAttributes=p({},r),t));case b.BODY:return p({},o,{bodyAttributes:p({},r)});case b.HTML:return p({},o,{htmlAttributes:p({},r)});default:return p({},o,((n={})[a.type]=p({},r),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var a;n=p({},n,((a={})[t]=e[t],a))})),n},n.warnOnInvalidChildren=function(e,t){return l()(x.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+x.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),l()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return a.Children.forEach(e,(function(e){if(e&&e.props){var a=e.props,r=a.children,i=g(a,Q),s=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),c=e.type;switch("symbol"==typeof c?c=c.toString():n.warnOnInvalidChildren(e,r),c){case b.FRAGMENT:t=n.mapChildrenToProps(r,t);break;case b.LINK:case b.META:case b.NOSCRIPT:case b.SCRIPT:case b.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:r});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:r})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),o=p({},n),r=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!r||r instanceof $||(r=new $(r.context,r.instances)),r?a.createElement(K,p({},o,{context:r.value,helmetData:void 0})):a.createElement(U.Consumer,null,(function(e){return a.createElement(K,p({},o,{context:e}))}))},t}(a.Component);J.propTypes={base:r().object,bodyAttributes:r().object,children:r().oneOfType([r().arrayOf(r().node),r().node]),defaultTitle:r().string,defer:r().bool,encodeSpecialCharacters:r().bool,htmlAttributes:r().object,link:r().arrayOf(r().object),meta:r().arrayOf(r().object),noscript:r().arrayOf(r().object),onChangeClientState:r().func,script:r().arrayOf(r().object),style:r().arrayOf(r().object),title:r().string,titleAttributes:r().object,titleTemplate:r().string,prioritizeSeoTags:r().bool,helmetData:r().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},58702:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,a=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,r=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,c=n?Symbol.for("react.provider"):60109,l=n?Symbol.for("react.context"):60110,d=n?Symbol.for("react.async_mode"):60111,u=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,b=n?Symbol.for("react.lazy"):60116,h=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,x=n?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case a:switch(e=e.type){case d:case u:case r:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case l:case p:case b:case g:case c:return e;default:return t}}case o:return t}}}function k(e){return _(e)===u}t.AsyncMode=d,t.ConcurrentMode=u,t.ContextConsumer=l,t.ContextProvider=c,t.Element=a,t.ForwardRef=p,t.Fragment=r,t.Lazy=b,t.Memo=g,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||_(e)===d},t.isConcurrentMode=k,t.isContextConsumer=function(e){return _(e)===l},t.isContextProvider=function(e){return _(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a},t.isForwardRef=function(e){return _(e)===p},t.isFragment=function(e){return _(e)===r},t.isLazy=function(e){return _(e)===b},t.isMemo=function(e){return _(e)===g},t.isPortal=function(e){return _(e)===o},t.isProfiler=function(e){return _(e)===s},t.isStrictMode=function(e){return _(e)===i},t.isSuspense=function(e){return _(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===r||e===u||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===b||e.$$typeof===g||e.$$typeof===c||e.$$typeof===l||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===x||e.$$typeof===h)},t.typeOf=_},19185:(e,t,n)=>{"use strict";e.exports=n(58702)},51237:(e,t,n)=>{"use strict";function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i.apply(this,arguments)}var s=n(27378),c=n(23615),l=[],d=[];function u(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(a){var o=u(e[a]);o.loading?t.loading=!0:(t.loaded[a]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[a]=e})).catch((function(e){t.error=e}))}))}catch(a){t.error=a}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var u,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function b(){return g||(g=e(m.loader)),g.promise}return l.push(b),"function"==typeof m.webpack&&d.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return b()})),p=u=function(t){function n(n){var a;return r(o(o(a=t.call(this,n)||this)),"retry",(function(){a.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),a._loadModule()})),b(),a.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},a}a(n,t),n.preload=function(){return b()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(s.Component),r(u,"contextTypes",{loadable:c.shape({report:c.func.isRequired})}),p}function g(e){return m(u,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var b=function(e){function t(){return e.apply(this,arguments)||this}a(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function h(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return h(e)}))}r(b,"propTypes",{report:c.func.isRequired}),r(b,"childContextTypes",{loadable:c.shape({report:c.func.isRequired}).isRequired}),g.Capture=b,g.preloadAll=function(){return new Promise((function(e,t){h(l).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){h(d).then(e,e)}))},e.exports=g},95473:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var a=n(35331),o=n(25773),r=n(27378);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,a.LX)(t,e):n.length?n[n.length-1].match:a.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?r.createElement(a.rs,n,e.map((function(e,n){return r.createElement(a.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):r.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},4289:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>d,rU:()=>b});var a=n(35331),o=n(40351),r=n(27378),i=n(15036),s=n(25773),c=n(30808),l=n(92215),d=function(e){function t(){for(var t,n=arguments.length,a=new Array(n),o=0;o<n;o++)a[o]=arguments[o];return(t=e.call.apply(e,[this].concat(a))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return r.createElement(a.F0,{history:this.history,children:this.props.children})},t}(r.Component);r.Component;var u=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},m=r.forwardRef;void 0===m&&(m=f);var g=m((function(e,t){var n=e.innerRef,a=e.navigate,o=e.onClick,i=(0,c.Z)(e,["innerRef","navigate","onClick"]),l=i.target,d=(0,s.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||l&&"_self"!==l||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),a())}});return d.ref=f!==m&&t||n,r.createElement("a",d)}));var b=m((function(e,t){var n=e.component,o=void 0===n?g:n,d=e.replace,b=e.to,h=e.innerRef,v=(0,c.Z)(e,["component","replace","to","innerRef"]);return r.createElement(a.s6.Consumer,null,(function(e){e||(0,l.Z)(!1);var n=e.history,a=p(u(b,e.location),e.location),c=a?n.createHref(a):"",g=(0,s.Z)({},v,{href:c,navigate:function(){var t=u(b,e.location),a=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(d||a?n.replace:n.push)(t)}});return f!==m?g.ref=t||h:g.innerRef=h,r.createElement(o,g)}))})),h=function(e){return e},v=r.forwardRef;void 0===v&&(v=h);var y=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,d=void 0===i?"active":i,f=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,x=e.location,_=e.sensitive,k=e.strict,w=e.style,E=e.to,S=e.innerRef,C=(0,c.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return r.createElement(a.s6.Consumer,null,(function(e){e||(0,l.Z)(!1);var n=x||e.location,i=p(u(E,n),n),c=i.pathname,T=c&&c.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),P=T?(0,a.LX)(n.pathname,{path:T,exact:g,sensitive:_,strict:k}):null,A=!!(y?y(P,n):P),N="function"==typeof m?m(A):m,O="function"==typeof w?w(A):w;A&&(N=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(N,d),O=(0,s.Z)({},O,f));var j=(0,s.Z)({"aria-current":A&&o||null,className:N,style:O,to:i},C);return h!==v?j.ref=t||S:j.innerRef=S,r.createElement(b,j)}))}))},35331:(e,t,n)=>{"use strict";n.d(t,{AW:()=>S,F0:()=>_,rs:()=>O,s6:()=>x,LX:()=>E,k6:()=>L,TH:()=>M});var a=n(40351),o=n(27378),r=n(15036),i=n(23615),s=n.n(i),c=1073741823,l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function d(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,a){e=n,t.forEach((function(t){return t(e,a)}))}}}var u=o.createContext||function(e,t){var n,r,i="__create-react-context-"+function(){var e="__global_unique_id__";return l[e]=(l[e]||0)+1}()+"__",u=function(e){function n(){var t;return(t=e.apply(this,arguments)||this).emitter=d(t.props.value),t}(0,a.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,a=this.props.value,o=e.value;((r=a)===(i=o)?0!==r||1/r==1/i:r!=r&&i!=i)?n=0:(n="function"==typeof t?t(a,o):c,0!==(n|=0)&&this.emitter.set(e.value,n))}var r,i},o.render=function(){return this.props.children},n}(o.Component);u.childContextTypes=((n={})[i]=s().object.isRequired,n);var p=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,a.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?c:t},o.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?c:e},o.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},o.getValue=function(){return this.context[i]?this.context[i].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return p.contextTypes=((r={})[i]=s().object,r),{Provider:u,Consumer:p}};const p=u;var f=n(92215),m=n(25773),g=n(54039),b=n.n(g),h=(n(19185),n(30808)),v=(n(55839),function(e){var t=p();return t.displayName=e,t}),y=v("Router-History"),x=v("Router"),_=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,a.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(x.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var k={},w=0;function E(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,a=n.path,o=n.exact,r=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,c=n.sensitive,l=void 0!==c&&c;return[].concat(a).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var a=function(e,t){var n=""+t.end+t.strict+t.sensitive,a=k[n]||(k[n]={});if(a[e])return a[e];var o=[],r={regexp:b()(e,o,t),keys:o};return w<1e4&&(a[e]=r,w++),r}(n,{end:r,strict:s,sensitive:l}),o=a.regexp,i=a.keys,c=o.exec(e);if(!c)return null;var d=c[0],u=c.slice(1),p=e===d;return r&&!p?null:{path:n,url:"/"===n&&""===d?"/":d,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=u[n],e}),{})}}),null)}var S=function(e){function t(){return e.apply(this,arguments)||this}return(0,a.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(x.Consumer,null,(function(t){t||(0,f.Z)(!1);var n=e.props.location||t.location,a=e.props.computedMatch?e.props.computedMatch:e.props.path?E(n.pathname,e.props):t.match,r=(0,m.Z)({},t,{location:n,match:a}),i=e.props,s=i.children,c=i.component,l=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(x.Provider,{value:r},r.match?s?"function"==typeof s?s(r):s:c?o.createElement(c,r):l?l(r):null:"function"==typeof s?s(r):null)}))},t}(o.Component);function C(e){return"/"===e.charAt(0)?e:"/"+e}function T(e,t){if(!e)return t;var n=C(e);return 0!==t.pathname.indexOf(n)?t:(0,m.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,r.Ep)(e)}function A(e){return function(){(0,f.Z)(!1)}}function N(){}o.Component;var O=function(e){function t(){return e.apply(this,arguments)||this}return(0,a.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(x.Consumer,null,(function(t){t||(0,f.Z)(!1);var n,a,r=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==a&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;a=i?E(r.pathname,(0,m.Z)({},e.props,{path:i})):t.match}})),a?o.cloneElement(n,{location:r,computedMatch:a}):null}))},t}(o.Component);var j=o.useContext;function L(){return j(y)}function M(){return j(x).location}},5243:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},54039:(e,t,n)=>{var a=n(5243);e.exports=f,e.exports.parse=r,e.exports.compile=function(e,t){return s(r(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function r(e,t){for(var n,a=[],r=0,i=0,s="",d=t&&t.delimiter||"/";null!=(n=o.exec(e));){var u=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+u.length,p)s+=p[1];else{var m=e[i],g=n[2],b=n[3],h=n[4],v=n[5],y=n[6],x=n[7];s&&(a.push(s),s="");var _=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,w="?"===y||"*"===y,E=n[2]||d,S=h||v;a.push({name:b||r++,prefix:g||"",delimiter:E,optional:w,repeat:k,partial:_,asterisk:!!x,pattern:S?l(S):x?".*":"[^"+c(E)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&a.push(s),a}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",u(t)));return function(t,o){for(var r="",s=t||{},c=(o||{}).pretty?i:encodeURIComponent,l=0;l<e.length;l++){var d=e[l];if("string"!=typeof d){var u,p=s[d.name];if(null==p){if(d.optional){d.partial&&(r+=d.prefix);continue}throw new TypeError('Expected "'+d.name+'" to be defined')}if(a(p)){if(!d.repeat)throw new TypeError('Expected "'+d.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(d.optional)continue;throw new TypeError('Expected "'+d.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(u=c(p[f]),!n[l].test(u))throw new TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(u)+"`");r+=(0===f?d.prefix:d.delimiter)+u}}else{if(u=d.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(p),!n[l].test(u))throw new TypeError('Expected "'+d.name+'" to match "'+d.pattern+'", but received "'+u+'"');r+=d.prefix+u}}else r+=d}return r}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function l(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function d(e,t){return e.keys=t,e}function u(e){return e&&e.sensitive?"":"i"}function p(e,t,n){a(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,r=!1!==n.end,i="",s=0;s<e.length;s++){var l=e[s];if("string"==typeof l)i+=c(l);else{var p=c(l.prefix),f="(?:"+l.pattern+")";t.push(l),l.repeat&&(f+="(?:"+p+f+")*"),i+=f=l.optional?l.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=c(n.delimiter||"/"),g=i.slice(-m.length)===m;return o||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=r?"$":o&&g?"":"(?="+m+"|$)",d(new RegExp("^"+i,u(n)),t)}function f(e,t,n){return a(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var a=0;a<n.length;a++)t.push({name:a,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return d(e,t)}(e,t):a(e)?function(e,t,n){for(var a=[],o=0;o<e.length;o++)a.push(f(e[o],t,n).source);return d(new RegExp("(?:"+a.join("|")+")",u(n)),t)}(e,t,n):function(e,t,n){return p(r(e,n),t,n)}(e,t,n)}},41535:(e,t)=>{"use strict";var n=Symbol.for("react.element"),a=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,b={};function h(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||m}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=h.prototype;var x=y.prototype=new v;x.constructor=y,g(x,h.prototype),x.isPureReactComponent=!0;var _=Array.isArray,k=Object.prototype.hasOwnProperty,w={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,a){var o,r={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,o)&&!E.hasOwnProperty(o)&&(r[o]=t[o]);var c=arguments.length-2;if(1===c)r.children=a;else if(1<c){for(var l=Array(c),d=0;d<c;d++)l[d]=arguments[d+2];r.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===r[o]&&(r[o]=c[o]);return{$$typeof:n,type:e,key:i,ref:s,props:r,_owner:w.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function P(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function A(e,t,o,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case a:c=!0}}if(c)return i=i(c=e),e=""===r?"."+P(c,0):r,_(i)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),A(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",_(e))for(var l=0;l<e.length;l++){var d=r+P(s=e[l],l);c+=A(s,t,o,d,i)}else if(d=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof d)for(e=d.call(e),l=0;!(s=e.next()).done;)c+=A(s=s.value,t,o,d=r+P(s,l++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function N(e,t,n){if(null==e)return e;var a=[],o=0;return A(e,a,"","",(function(e){return t.call(n,e,o++)})),a}function O(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var j={current:null},L={transition:null},M={ReactCurrentDispatcher:j,ReactCurrentBatchConfig:L,ReactCurrentOwner:w};t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=h,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=r,t.Suspense=d,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=M,t.cloneElement=function(e,t,a){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=g({},e.props),r=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=w.current),void 0!==t.key&&(r=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)k.call(t,l)&&!E.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=a;else if(1<l){c=Array(l);for(var d=0;d<l;d++)c[d]=arguments[d+2];o.children=c}return{$$typeof:n,type:e.type,key:r,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:O}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=L.transition;L.transition={};try{e()}finally{L.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return j.current.useCallback(e,t)},t.useContext=function(e){return j.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return j.current.useDeferredValue(e)},t.useEffect=function(e,t){return j.current.useEffect(e,t)},t.useId=function(){return j.current.useId()},t.useImperativeHandle=function(e,t,n){return j.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return j.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return j.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return j.current.useMemo(e,t)},t.useReducer=function(e,t,n){return j.current.useReducer(e,t,n)},t.useRef=function(e){return j.current.useRef(e)},t.useState=function(e){return j.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return j.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return j.current.useTransition()},t.version="18.2.0"},27378:(e,t,n)=>{"use strict";e.exports=n(41535)},74445:e=>{e.exports=function(e,t,n,a){var o=n?n.call(a,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<r.length;c++){var l=r[c];if(!s(l))return!1;var d=e[l],u=t[l];if(!1===(o=n?n.call(a,d,u,l):void 0)||void 0===o&&d!==u)return!1}return!0}},94047:(e,t,n)=>{"use strict";var a=n(27378);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},r=a.useState,i=a.useEffect,s=a.useLayoutEffect,c=a.useDebugValue;function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(a){return!0}}var d="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),a=r({inst:{value:n,getSnapshot:t}}),o=a[0].inst,d=a[1];return s((function(){o.value=n,o.getSnapshot=t,l(o)&&d({inst:o})}),[e,n,t]),i((function(){return l(o)&&d({inst:o}),e((function(){l(o)&&d({inst:o})}))}),[e]),c(n),n};t.useSyncExternalStore=void 0!==a.useSyncExternalStore?a.useSyncExternalStore:d},70644:(e,t,n)=>{"use strict";e.exports=n(94047)},25773:(e,t,n)=>{"use strict";function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},a.apply(this,arguments)}n.d(t,{Z:()=>a})},40351:(e,t,n)=>{"use strict";function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}n.d(t,{Z:()=>o})},30808:(e,t,n)=>{"use strict";function a(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>a})},9928:(e,t,n)=>{"use strict";n.d(t,{mdU:()=>r,omb:()=>a,zhw:()=>o});var a={prefix:"fab",iconName:"discord",icon:[640,512,[],"f392","M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"]},o={prefix:"fab",iconName:"github",icon:[496,512,[],"f09b","M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"]},r={prefix:"fab",iconName:"twitter",icon:[512,512,[],"f099","M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"]}},83469:(e,t,n)=>{"use strict";n.d(t,{A35:()=>k,AlB:()=>y,BDt:()=>v,Bkj:()=>x,BwA:()=>r,EQ8:()=>E,Gp0:()=>a,LEp:()=>S,SZw:()=>b,YdP:()=>o,_tD:()=>w,cRF:()=>h,dT$:()=>d,dhu:()=>T,diR:()=>p,eDR:()=>u,emM:()=>C,g6h:()=>s,g82:()=>_,o$R:()=>g,pL1:()=>l,sl_:()=>c,yGT:()=>f,yOZ:()=>i,zZQ:()=>m});var a={prefix:"far",iconName:"space-station-moon-construction",icon:[512,512,["space-station-moon-alt"],"e034","M208.2 53.5C223.5 49.9 239.5 48 256 48c54.9 0 104.8 21.2 142 56H368c-13.3 0-24 10.7-24 24s10.7 24 24 24h81.5c8.8 0 17-4.9 21.1-12.6s3.7-17.2-1.1-24.6C423.7 45.6 345.2 0 256 0C114.6 0 0 114.6 0 256S114.6 512 256 512c81.4 0 153.9-38 200.7-97.1c8.2-10.4 6.5-25.5-3.9-33.7s-25.5-6.5-33.7 3.9C381 433.2 322.1 464 256 464c-80.8 0-150.8-46.1-185.3-113.3C109.9 362.7 168.9 376 256 376c116.9 0 183.2-23.9 218.9-36.8l0 0c4.8-1.7 9-3.2 12.7-4.5c7.5-2.5 13.3-8.6 15.5-16.2l.6-2.1c5.5-19.3 8.3-39.3 8.3-59.3V256c0-13.3-10.7-24-24-24s-24 10.7-24 24v1.1c0 12.3-1.3 24.5-4 36.5l-.8 .3C424.3 306.5 364.4 328 256 328s-168.3-21.5-203.2-34.1l-1.5-.5C49.1 281.2 48 268.8 48 256c0-40.8 11.7-78.8 32-110.9c.6 52.5 43.3 94.9 96 94.9c53 0 96-43 96-96c0-41.7-26.6-77.2-63.8-90.5zM128 144a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm248 40c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H376z"]},o={prefix:"far",iconName:"square-sliders",icon:[448,512,["sliders-h-square"],"f3f0","M48 416c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm96 80c0-13.3 10.7-24 24-24l32 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 128 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-128 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-32 0c-13.3 0-24-10.7-24-24zm24 184c-13.3 0-24-10.7-24-24s10.7-24 24-24l128 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-128 0z"]},r={prefix:"far",iconName:"triangle",icon:[512,512,[9650],"f2ec","M248.4 84.3c1.6-2.7 4.5-4.3 7.6-4.3s6 1.6 7.6 4.3L461.9 410c1.4 2.3 2.1 4.9 2.1 7.5c0 8-6.5 14.5-14.5 14.5H62.5c-8 0-14.5-6.5-14.5-14.5c0-2.7 .7-5.3 2.1-7.5L248.4 84.3zm-41-25L9.1 385c-6 9.8-9.1 21-9.1 32.5C0 452 28 480 62.5 480h387c34.5 0 62.5-28 62.5-62.5c0-11.5-3.2-22.7-9.1-32.5L304.6 59.3C294.3 42.4 275.9 32 256 32s-38.3 10.4-48.6 27.3z"]},i={prefix:"far",iconName:"angle-right",icon:[320,512,[8250],"f105","M273 239c9.4 9.4 9.4 24.6 0 33.9L113 433c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l143-143L79 113c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L273 239z"]},s={prefix:"far",iconName:"square-plus",icon:[448,512,[61846,"plus-square"],"f0fe","M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z"]},c={prefix:"far",iconName:"circle-play",icon:[512,512,[61469,"play-circle"],"f144","M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c7.6-4.2 16.8-4.1 24.3 .5l144 88c7.1 4.4 11.5 12.1 11.5 20.5s-4.4 16.1-11.5 20.5l-144 88c-7.4 4.5-16.7 4.7-24.3 .5s-12.3-12.2-12.3-20.9V168c0-8.7 4.7-16.7 12.3-20.9z"]},l={prefix:"far",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"]},d={prefix:"far",iconName:"code",icon:[640,512,[],"f121","M399.1 1.1c-12.7-3.9-26.1 3.1-30 15.8l-144 464c-3.9 12.7 3.1 26.1 15.8 30s26.1-3.1 30-15.8l144-464c3.9-12.7-3.1-26.1-15.8-30zm71.4 118.5c-9.1 9.7-8.6 24.9 1.1 33.9L580.9 256 471.6 358.5c-9.7 9.1-10.2 24.3-1.1 33.9s24.3 10.2 33.9 1.1l128-120c4.8-4.5 7.6-10.9 7.6-17.5s-2.7-13-7.6-17.5l-128-120c-9.7-9.1-24.9-8.6-33.9 1.1zm-301 0c-9.1-9.7-24.3-10.2-33.9-1.1l-128 120C2.7 243 0 249.4 0 256s2.7 13 7.6 17.5l128 120c9.7 9.1 24.9 8.6 33.9-1.1s8.6-24.9-1.1-33.9L59.1 256 168.4 153.5c9.7-9.1 10.2-24.3 1.1-33.9z"]},u={prefix:"far",iconName:"screwdriver-wrench",icon:[512,512,["tools"],"f7d9","M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4h54.1l109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109V104c0-7.5-3.5-14.5-9.4-19L78.6 5zM23.2 376.8C8.3 391.7 0 411.8 0 432.8C0 476.5 35.5 512 79.2 512c21 0 41.1-8.3 56-23.2L238.5 385.5c-8.9-17.6-12.8-37.1-11.6-56.3L101.3 454.9c-5.9 5.8-13.8 9.1-22.1 9.1C62 464 48 450 48 432.8c0-8.3 3.3-16.2 9.1-22.1L194.3 273.5l-33.9-33.9L23.2 376.8zM463.9 164c-1.4 38.9-22.6 72.8-53.8 91.8c1.1 1 2.1 2 3.1 3l31.6 31.6c40.7-29 67.2-76.6 67.2-130.3c0-24.8-5.7-48.3-15.7-69.3c-4.4-9.2-16.5-10.5-23.7-3.3l-67.9 67.9c-3 3-7.1 4.7-11.3 4.7H368c-8.8 0-16-7.2-16-16V118.6c0-4.2 1.7-8.3 4.7-11.3l67.9-67.9c7.2-7.2 5.9-19.3-3.3-23.7C400.3 5.7 376.8 0 352 0C294.7 0 244.4 30.1 216.2 75.4C221.2 84 224 93.8 224 104v40.8l16 16 0-.8c0-60.5 48-109.9 108-111.9L322.7 73.4l0 0c-12 12-18.7 28.3-18.7 45.3V144c0 35.3 28.7 64 64 64h25.4c17 0 33.3-6.7 45.3-18.7L463.9 164z"]},p={prefix:"far",iconName:"circle",icon:[512,512,[128308,128309,128992,128993,128994,128995,128996,9679,9898,9899,11044,61708,61915],"f111","M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"]},f={prefix:"far",iconName:"house-blank",icon:[576,512,["home-blank"],"e487","M303.5 5.7c-9-7.6-22.1-7.6-31.1 0l-264 224c-10.1 8.6-11.3 23.7-2.8 33.8s23.7 11.3 33.8 2.8L64 245.5V432c0 44.2 35.8 80 80 80H432c44.2 0 80-35.8 80-80V245.5l24.5 20.8c10.1 8.6 25.3 7.3 33.8-2.8s7.3-25.3-2.8-33.8l-264-224zM464 204.8V432c0 17.7-14.3 32-32 32H144c-17.7 0-32-14.3-32-32V204.8L288 55.5 464 204.8z"]},m={prefix:"far",iconName:"puzzle",icon:[512,512,[],"e443","M448 0c35.3 0 64 28.7 64 64V192c0 8.8-7.2 16-16 16H444c-6.6 0-12 5.4-12 12v4c0 17.7-14.3 32-32 32s-32-14.3-32-32v-4c0-6.6-5.4-12-12-12l-36 0c-8.8 0-16-7.2-16-16V160c0-8.8 7.2-16 16-16h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-8.8 0-16-7.2-16-16V16c0-8.8 7.2-16 16-16H448zM0 240V128C0 92.7 28.7 64 64 64H208c8.8 0 16 7.2 16 16v52c0 6.6 5.4 12 12 12h4c17.7 0 32 14.3 32 32s-14.3 32-32 32h-4c-6.6 0-12 5.4-12 12v52c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V256c0-17.7-14.3-32-32-32s-32 14.3-32 32v16c0 8.8-7.2 16-16 16H48V440c0 13.3 10.7 24 24 24H224V428c0-6.6-5.4-12-12-12h-4c-17.7 0-32-14.3-32-32s14.3-32 32-32h4c6.6 0 12-5.4 12-12V304c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v16c0 17.7 14.3 32 32 32s32-14.3 32-32V304c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16V448c0 35.3-28.7 64-64 64H256 240 72c-39.8 0-72-32.2-72-72V272 240z"]},g={prefix:"far",iconName:"circle-bolt",icon:[512,512,[],"e0fe","M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM330.1 115.6c5.8 4.7 7.6 12.9 4.2 19.6L281.9 240H352c6.8 0 12.9 4.3 15.1 10.7s.2 13.5-5.1 17.8l-160 128c-5.9 4.7-14.2 4.7-20.1-.1s-7.6-12.9-4.3-19.6L230.1 272H160c-6.8 0-12.8-4.3-15.1-10.7s-.2-13.5 5.1-17.8l160-128c5.9-4.7 14.2-4.7 20.1 .1z"]},b={prefix:"far",iconName:"clock",icon:[512,512,[128339,"clock-four"],"f017","M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"]},h={prefix:"far",iconName:"sliders",icon:[512,512,["sliders-h"],"f1de","M0 416c0 13.3 10.7 24 24 24l59.7 0c10.2 32.5 40.5 56 76.3 56s66.1-23.5 76.3-56L488 440c13.3 0 24-10.7 24-24s-10.7-24-24-24l-251.7 0c-10.2-32.5-40.5-56-76.3-56s-66.1 23.5-76.3 56L24 392c-13.3 0-24 10.7-24 24zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-35.8 0-66.1 23.5-76.3 56L24 232c-13.3 0-24 10.7-24 24s10.7 24 24 24l251.7 0c10.2 32.5 40.5 56 76.3 56s66.1-23.5 76.3-56l59.7 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-59.7 0c-10.2-32.5-40.5-56-76.3-56zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm76.3-56C258.1 39.5 227.8 16 192 16s-66.1 23.5-76.3 56L24 72C10.7 72 0 82.7 0 96s10.7 24 24 24l91.7 0c10.2 32.5 40.5 56 76.3 56s66.1-23.5 76.3-56L488 120c13.3 0 24-10.7 24-24s-10.7-24-24-24L268.3 72z"]},v={prefix:"far",iconName:"bolt",icon:[448,512,[9889,"zap"],"f0e7","M321.7 0c19.1 0 32.9 18.3 27.6 36.6L295.8 224h85.2c19.3 0 34.9 15.6 34.9 34.9c0 10.3-4.5 20-12.3 26.6L144.9 505.2c-5.2 4.4-11.8 6.8-18.6 6.8c-19.1 0-32.9-18.3-27.6-36.6L152.2 288H65.7C47.1 288 32 272.9 32 254.3c0-9.9 4.3-19.2 11.8-25.6L303.1 6.9C308.3 2.4 314.9 0 321.7 0zM285.6 85L104.4 240H184c7.5 0 14.6 3.5 19.2 9.5s6 13.8 3.9 21L162.3 427.5 345.5 272H264c-7.5 0-14.6-3.5-19.2-9.5s-6-13.8-3.9-21L285.6 85z"]},y={prefix:"far",iconName:"toolbox",icon:[512,512,[129520],"f552","M184 80H328c4.4 0 8 3.6 8 8v40H176V88c0-4.4 3.6-8 8-8zm-56 8v40H99.9c-12.7 0-24.9 5.1-33.9 14.1L14.1 193.9c-9 9-14.1 21.2-14.1 33.9V320v96c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V320 227.9c0-12.7-5.1-24.9-14.1-33.9l-51.9-51.9c-9-9-21.2-14.1-33.9-14.1H384V88c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM464 296H368V280c0-13.3-10.7-24-24-24s-24 10.7-24 24v16H192V280c0-13.3-10.7-24-24-24s-24 10.7-24 24v16H48V227.9L99.9 176H412.1L464 227.9V296zM48 344h96v16c0 13.3 10.7 24 24 24s24-10.7 24-24V344H320v16c0 13.3 10.7 24 24 24s24-10.7 24-24V344h96v72c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V344z"]},x={prefix:"far",iconName:"diagram-project",icon:[576,512,["project-diagram"],"f542","M136 80c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8H56c-4.4 0-8-3.6-8-8V88c0-4.4 3.6-8 8-8h80zM56 32C25.1 32 0 57.1 0 88v80c0 30.9 25.1 56 56 56h80c5.6 0 11.1-.8 16.2-2.4l75.9 101.2c-2.7 6.5-4.1 13.7-4.1 21.2v80c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56V344c0-30.9-25.1-56-56-56H280c-5.6 0-11.1 .8-16.2 2.4L187.9 189.2c2.7-6.5 4.1-13.7 4.1-21.2V152H384v16c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56H440c-30.9 0-56 25.1-56 56v16H192V88c0-30.9-25.1-56-56-56H56zM360 336c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8H280c-4.4 0-8-3.6-8-8V344c0-4.4 3.6-8 8-8h80zM440 80h80c4.4 0 8 3.6 8 8v80c0 4.4-3.6 8-8 8H440c-4.4 0-8-3.6-8-8V88c0-4.4 3.6-8 8-8z"]},_={prefix:"far",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M345 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-119 119L73 103c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l119 119L39 375c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l119-119L311 409c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-119-119L345 137z"]},k={prefix:"far",iconName:"chevron-left",icon:[320,512,[9001],"f053","M15 239c-9.4 9.4-9.4 24.6 0 33.9L207 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L65.9 256 241 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L15 239z"]},w={prefix:"far",iconName:"chevron-right",icon:[320,512,[9002],"f054","M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"]},E={prefix:"far",iconName:"circle-plus",icon:[512,512,["plus-circle"],"f055","M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344c0 13.3 10.7 24 24 24s24-10.7 24-24V280h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V168c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"]},S={prefix:"far",iconName:"check",icon:[448,512,[10003,10004],"f00c","M441 103c9.4 9.4 9.4 24.6 0 33.9L177 401c-9.4 9.4-24.6 9.4-33.9 0L7 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l119 119L407 103c9.4-9.4 24.6-9.4 33.9 0z"]},C={prefix:"far",iconName:"grid-2",icon:[512,512,[],"e196","M80 80v96h96V80H80zM32 80c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V80zM80 336v96h96V336H80zm-48 0c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V336zM432 80H336v96h96V80zM336 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H336c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48zm0 304v96h96V336H336zm-48 0c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H336c-26.5 0-48-21.5-48-48V336z"]},T={prefix:"far",iconName:"square-sliders-vertical",icon:[448,512,["sliders-v-square"],"f3f2","M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 96c-13.3 0-24 10.7-24 24v32H104c-13.3 0-24 10.7-24 24s10.7 24 24 24h16V360c0 13.3 10.7 24 24 24s24-10.7 24-24V232h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H168V152c0-13.3-10.7-24-24-24zm184 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V280H264c-13.3 0-24 10.7-24 24s10.7 24 24 24h16v32c0 13.3 10.7 24 24 24s24-10.7 24-24V328h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H328V152z"]}},40624:(e,t,n)=>{"use strict";function a(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(o&&(o+=" "),o+=t);return o}},92215:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var a="Invariant failed";function o(e,t){if(!e)throw new Error(a)}},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const a={title:"moonrepo",tagline:"A developer productivity tooling platform.",url:"https://moonrepo.dev",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.svg",organizationName:"moonrepo",projectName:"moon",deploymentBranch:"gh-pages",trailingSlash:!1,presets:[["classic",{docs:{sidebarPath:"/home/runner/work/moon/moon/website/sidebars.js",editUrl:"https://github.com/moonrepo/moon/tree/master/website"},blog:{showReadingTime:!0,editUrl:"https://github.com/moonrepo/moon/tree/master/website"},theme:{customCss:["/home/runner/work/moon/moon/website/src/css/theme.css","/home/runner/work/moon/moon/website/src/css/custom.css"]},gtag:{trackingID:"G-LB233GTZD3"}}]],themeConfig:{algolia:{apiKey:"dfe3e44100d7dfc6d7d3b644e8b09581",appId:"400S075OEM",indexName:"moonrepo",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},metadata:[{name:"keywords",content:"moon, repo, moonrepo, task, runner, build, system, ci, times, devx, developer, experience, tooling, tools, monorepo, polyrepo, productivity, platform, proto, toolchain"},{name:"og:image",content:"https://moonrepo.dev/img/hero/slate-bg.jpg"}],navbar:{logo:{alt:"moon",src:"img/logo.svg"},items:[{type:"dropdown",position:"left",label:"Products",items:[{to:"/moon",html:'<strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div>'},{to:"/moonbase",html:'<strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div>'},{to:"/proto",html:'<strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div>'},{to:"https://espresso.build",html:'<strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div>'}]},{type:"dropdown",position:"left",label:"Docs",items:[{type:"doc",docId:"intro",html:"<strong>moon</strong>"},{type:"doc",docId:"proto/index",html:"<strong>proto</strong>"}]},{type:"doc",docId:"guides/ci",position:"left",label:"Guides"},{to:"/blog",label:"Blog",position:"left"},{label:"GitHub",to:"https://github.com/moonrepo",position:"left"},{to:"https://moonrepo.app",label:"Sign in",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Learn",items:[{label:"Docs",to:"/docs"},{label:"Guides",to:"/docs/guides/ci"},{label:"Blog",to:"/blog"},{label:"API",to:"/api"}]},{title:"Ecosystem",items:[{label:"Releases",to:"https://github.com/moonrepo/moon/releases"},{label:"Shared configs",to:"https://github.com/moonrepo/moon-configs"},{label:"Developer tools",href:"https://github.com/moonrepo/dev"},{label:"Examples repository",href:"https://github.com/moonrepo/examples"}]},{title:"Support",items:[{label:"GitHub",to:"https://github.com/moonrepo"},{label:"Discord",to:"https://discord.gg/qCh9MEynv2"},{label:"Twitter",to:"https://twitter.com/tothemoonrepo"}]}],copyright:"Copyright \xa9 2023, moonrepo, Inc."},prism:{theme:{plain:{backgroundColor:"#00080f",color:"#e5e9f1"},styles:[{types:["changed"],style:{color:"#fef9c3"}},{types:["deleted"],style:{color:"#ff7c89"}},{types:["inserted"],style:{color:"#b7d733"}},{types:["comment"],style:{color:"#97a1af",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#cad4e2"}},{types:["constant"],style:{color:"#ff9da6"}},{types:["string","url"],style:{color:"#c9e166"}},{types:["variable"],style:{color:"#fef9c3"}},{types:["number","boolean"],style:{color:"#94dded"}},{types:["attr-name"],style:{color:"#fde047"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"#b7a9f9"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#ff94ff",fontWeight:"bold"}}]},darkTheme:{plain:{backgroundColor:"#00080f",color:"#e5e9f1"},styles:[{types:["changed"],style:{color:"#fef9c3"}},{types:["deleted"],style:{color:"#ff7c89"}},{types:["inserted"],style:{color:"#b7d733"}},{types:["comment"],style:{color:"#97a1af",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#cad4e2"}},{types:["constant"],style:{color:"#ff9da6"}},{types:["string","url"],style:{color:"#c9e166"}},{types:["variable"],style:{color:"#fef9c3"}},{types:["number","boolean"],style:{color:"#94dded"}},{types:["attr-name"],style:{color:"#fde047"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"#b7a9f9"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#ff94ff",fontWeight:"bold"}}]},additionalLanguages:["docker","twig","toml","rust"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},plugins:[["@docusaurus/plugin-client-redirects",{redirects:[{from:"/docs/how-it-works/dep-graph",to:"/docs/how-it-works/action-graph"},{from:"/docs/commands/dep-graph",to:"/docs/commands/action-graph"},{from:"/docs/config/global-project",to:"/docs/config/tasks"},{from:"/docs/config/inherited-tasks",to:"/docs/config/tasks"},{from:"/docs/guides/git-hooks",to:"/docs/guides/vcs-hooks"}]}],["docusaurus-plugin-typedoc-api",{projectRoot:"/home/runner/work/moon/moon",packages:["packages/report","packages/runtime","packages/types"],minimal:!0,readmes:!0}],null],clientModules:["/home/runner/work/moon/moon/website/src/js/darkModeSyncer.ts"],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog-c31":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cfdf2b5f"},{"content":"4d69ebec"},{"content":"37e4cb73"},{"content":"ce2c6db8"},{"content":"23ef67df"},{"content":"cd988af7"},{"content":"957809ee"},{"content":"8e9e3e30"},{"content":"e746f759"},{"content":"fe55d425"}],"metadata":"b2b675dd"},"/blog/2023-roadmap-864":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"5c653e8d"},"/blog/archive-1b1":{"__comp":"9e4087bc","__context":{"plugin":"01b81367"},"archive":"b2f554cd"},"/blog/moon-v1.0-21d":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"245d4974"},"/blog/moon-v1.1-f8e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"60fa46e1"},"/blog/moon-v1.10-5e4":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"a5a57258"},"/blog/moon-v1.11-461":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"71dfd0a8"},"/blog/moon-v1.12-6dc":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b717531a"},"/blog/moon-v1.13-a38":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b80596f4"},"/blog/moon-v1.14-63e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"efef7eb9"},"/blog/moon-v1.15-b21":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"68d17c71"},"/blog/moon-v1.2-cbe":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2e4722bd"},"/blog/moon-v1.3-c99":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"d9c57d72"},"/blog/moon-v1.4-b5f":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"bf04367c"},"/blog/moon-v1.5-51b":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"1365e0a6"},"/blog/moon-v1.6-c20":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"f9651623"},"/blog/moon-v1.7-96a":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4aa262b7"},"/blog/moon-v1.8-a17":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"fd485bd3"},"/blog/moon-v1.9-835":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"7c9b29bb"},"/blog/moonbase-c38":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"61486960"},"/blog/page/2-a36":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"d43cc2ec"},{"content":"427e2c3d"},{"content":"51ada3e3"},{"content":"f8deddba"},{"content":"f761bd07"},{"content":"5613e7cf"},{"content":"c8acf440"},{"content":"42611ca7"},{"content":"f90d8a46"},{"content":"f09f371a"}],"metadata":"8eb4e46b"},"/blog/page/3-973":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"0e736169"},{"content":"bb624440"},{"content":"eb514dbf"},{"content":"77b7a366"},{"content":"2804bc6d"},{"content":"28508d4c"},{"content":"c6200b76"},{"content":"66926af2"},{"content":"1badf320"},{"content":"81d944d1"}],"metadata":"92999a1c"},"/blog/page/4-d8b":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c095dcfa"},{"content":"dd3540fa"},{"content":"2048b789"},{"content":"4e986fc6"},{"content":"77530bb9"},{"content":"204dd830"},{"content":"aacc3e35"},{"content":"6be7ee83"},{"content":"14f81d84"},{"content":"cdad2d50"}],"metadata":"7d9726a8"},"/blog/page/5-763":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"43bdf210"},{"content":"b184781f"},{"content":"d213043e"},{"content":"53df8e83"},{"content":"a6d9fcee"},{"content":"c413f1b7"},{"content":"b072568e"},{"content":"d7cf5e1f"},{"content":"2cd5cbb6"},{"content":"b0e766b4"}],"metadata":"11ce4159"},"/blog/page/6-0e4":{"__comp":"a6aa9e1f","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"3f2d0a0e"},{"content":"4c8cef38"}],"metadata":"44ac4dbb"},"/blog/proto-dd1":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"97878c65"},"/blog/proto-v0.11-254":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2eaf3a2f"},"/blog/proto-v0.12-e58":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"39a2c297"},"/blog/proto-v0.13-c92":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2fafdb99"},"/blog/proto-v0.14-94e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"98ae4a66"},"/blog/proto-v0.15-573":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"54350ada"},"/blog/proto-v0.16-a08":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4ddbfcdc"},"/blog/proto-v0.17-8c2":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"17ae22f4"},"/blog/proto-v0.18-187":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b7a8f57a"},"/blog/proto-v0.19-ccc":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"98738a6c"},"/blog/proto-v0.20-435":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"dae127b6"},"/blog/proto-v0.3-5f5":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"3f885d22"},"/blog/proto-v0.4-d76":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"1aebc10b"},"/blog/proto-v0.5-f0a":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"a6746ab5"},"/blog/proto-v0.6-4a2":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"e8700426"},"/blog/proto-v0.7-c70":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"22eddac1"},"/blog/proto-v0.8-e68":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"f1d6ac1e"},"/blog/proto-v0.9-c62":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"0684a904"},"/blog/tags-b41":{"__comp":"01a85c17","__context":{"plugin":"01b81367"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/action-06b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"f09f371a"}],"tag":"bec065e9","listMetadata":"31fff4a5"},"/blog/tags/affected-46a":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"a6d9fcee"}],"tag":"d5875de2","listMetadata":"caa6a735"},"/blog/tags/alias-2c5":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"eb514dbf"},{"content":"1badf320"}],"tag":"8b38bcbd","listMetadata":"ccfb5782"},"/blog/tags/bin-cb0":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cfdf2b5f"}],"tag":"7d4c8b40","listMetadata":"2e94733f"},"/blog/tags/cache-5e3":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"}],"tag":"128a5f34","listMetadata":"365a10b6"},"/blog/tags/canary-f59":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"}],"tag":"5a3a719f","listMetadata":"66222453"},"/blog/tags/checksum-128":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cfdf2b5f"}],"tag":"fffcdd84","listMetadata":"0ff9eadc"},"/blog/tags/ci-6e4":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"},{"content":"f8deddba"},{"content":"3f2d0a0e"}],"tag":"771f38eb","listMetadata":"44183a86"},"/blog/tags/clean-b52":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"66926af2"}],"tag":"80514956","listMetadata":"eb1a9ca0"},"/blog/tags/code-c6b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"4f0c5301","listMetadata":"69ea3d78"},"/blog/tags/config-a74":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f90d8a46"},{"content":"c095dcfa"},{"content":"c413f1b7"},{"content":"b072568e"}],"tag":"4fd1aaa1","listMetadata":"3691c6ec"},"/blog/tags/constraints-423":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"}],"tag":"ef3509ef","listMetadata":"c5de23c8"},"/blog/tags/debug-6b2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"7f3e2518","listMetadata":"bc74446d"},"/blog/tags/deno-a92":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"204dd830"}],"tag":"1910946c","listMetadata":"016d6d21"},"/blog/tags/dep-graph-022":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"a6d9fcee"}],"tag":"5794c75f","listMetadata":"b0cf9b20"},"/blog/tags/dependency-ea3":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"}],"tag":"87f861ef","listMetadata":"19ca9089"},"/blog/tags/detect-d08":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"77b7a366"}],"tag":"fff5a6d1","listMetadata":"140321b2"},"/blog/tags/docker-2ae":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4e986fc6"},{"content":"b0e766b4"}],"tag":"8593ff01","listMetadata":"dbbb982f"},"/blog/tags/editors-757":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b072568e"},{"content":"d7cf5e1f"}],"tag":"7c4e6415","listMetadata":"6fe6957f"},"/blog/tags/env-vars-ba2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"}],"tag":"6e15e01b","listMetadata":"5cde4d5c"},"/blog/tags/errors-b3f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f90d8a46"},{"content":"66926af2"}],"tag":"7e9fb3d2","listMetadata":"b1c60aef"},"/blog/tags/generator-fb2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"d213043e"},{"content":"2cd5cbb6"},{"content":"b0e766b4"},{"content":"3f2d0a0e"}],"tag":"93bce8ec","listMetadata":"2172420b"},"/blog/tags/git-3bf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"5613e7cf"}],"tag":"60262e21","listMetadata":"479321cf"},"/blog/tags/github-9dc":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f09f371a"},{"content":"204dd830"}],"tag":"78060cbc","listMetadata":"48b0f434"},"/blog/tags/global-ed7":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"},{"content":"e746f759"}],"tag":"459b1c5c","listMetadata":"04d8c43e"},"/blog/tags/globals-c1f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"66926af2"},{"content":"1badf320"}],"tag":"32632728","listMetadata":"151c652b"},"/blog/tags/go-793":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2048b789"}],"tag":"fc3deafd","listMetadata":"cce51cf2"},"/blog/tags/graph-017":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"cdad2d50"},{"content":"b184781f"}],"tag":"8c241076","listMetadata":"fac0f815"},"/blog/tags/hash-da9":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4e986fc6"}],"tag":"202af6b6","listMetadata":"1202c0b0"},"/blog/tags/hasher-1f3":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"},{"content":"cdad2d50"},{"content":"4c8cef38"}],"tag":"3d0b0327","listMetadata":"7d19a980"},"/blog/tags/hooks-715":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"5613e7cf"}],"tag":"8d701eb4","listMetadata":"676566fe"},"/blog/tags/http-31c":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"23ef67df"}],"tag":"1cbc9cf3","listMetadata":"bb86fac5"},"/blog/tags/hydration-147":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"d213043e"}],"tag":"d84e8684","listMetadata":"ac1be023"},"/blog/tags/ignore-d3a":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"e4c23816","listMetadata":"99b94e0d"},"/blog/tags/index-763":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"23ef67df"}],"tag":"9d3c1a44","listMetadata":"59abedb6"},"/blog/tags/inheritance-db9":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"fe55d425"},{"content":"5613e7cf"}],"tag":"bd6bded1","listMetadata":"e8f62c55"},"/blog/tags/init-268":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c413f1b7"}],"tag":"9c090340","listMetadata":"3e1aa1b6"},"/blog/tags/lang-a50":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"},{"content":"eb514dbf"},{"content":"2804bc6d"}],"tag":"14f9b0f2","listMetadata":"fb2dd7db"},"/blog/tags/language-abc":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"}],"tag":"49af4b98","listMetadata":"63aeb80b"},"/blog/tags/life-8d8":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"976dc663","listMetadata":"bf5d9784"},"/blog/tags/local-634":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"}],"tag":"4ab2bb95","listMetadata":"450b14c3"},"/blog/tags/log-1c5":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"0e736169"}],"tag":"5534fb85","listMetadata":"1e542d68"},"/blog/tags/logging-37d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c8acf440"}],"tag":"be0fdac8","listMetadata":"1740b646"},"/blog/tags/migrate-776":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cdad2d50"}],"tag":"6196de5a","listMetadata":"5419aa43"},"/blog/tags/monorepo-a85":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"53df8e83"}],"tag":"b972506a","listMetadata":"ed26bce9"},"/blog/tags/moonbase-b71":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"204dd830"},{"content":"aacc3e35"},{"content":"6be7ee83"},{"content":"43bdf210"}],"tag":"40c69ef1","listMetadata":"620e72fa"},"/blog/tags/node-673":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c413f1b7"},{"content":"2cd5cbb6"}],"tag":"b652e05c","listMetadata":"54024cf2"},"/blog/tags/notifier-2fe":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b072568e"}],"tag":"769e9ed2","listMetadata":"dd99bf53"},"/blog/tags/npm-f7d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2048b789"}],"tag":"1d14c2f4","listMetadata":"4c2d8fdb"},"/blog/tags/offline-82f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"204dd830"}],"tag":"90fdb9b5","listMetadata":"6ea8a316"},"/blog/tags/outdated-084":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"}],"tag":"fba28ebc","listMetadata":"409da100"},"/blog/tags/owners-368":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"f5f247cc","listMetadata":"c83c6fdf"},"/blog/tags/ownership-4e9":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"e629dea5","listMetadata":"affd832d"},"/blog/tags/pin-01f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"37e4cb73"}],"tag":"fbcfc993","listMetadata":"3b568f5a"},"/blog/tags/pipeline-75d":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"},{"content":"cdad2d50"}],"tag":"fcbcdf3c","listMetadata":"e5f23965"},"/blog/tags/platform-099":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"aacc3e35"},{"content":"b184781f"}],"tag":"cf510f60","listMetadata":"26419218"},"/blog/tags/plugin-100":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"},{"content":"8e9e3e30"},{"content":"e746f759"},{"content":"d43cc2ec"},{"content":"51ada3e3"},{"content":"f761bd07"}],"tag":"752283db","listMetadata":"2497986c"},"/blog/tags/plugins-c8f":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"28508d4c"}],"tag":"752c6bfa","listMetadata":"ffc0ac08"},"/blog/tags/project-b7b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"427e2c3d"},{"content":"aacc3e35"},{"content":"c413f1b7"}],"tag":"110403ef","listMetadata":"54eec65a"},"/blog/tags/project-graph-adf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"427e2c3d"},{"content":"3f2d0a0e"}],"tag":"3db947d3","listMetadata":"ec4f6a24"},"/blog/tags/projects-fe7":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"dd3540fa"},{"content":"14f81d84"}],"tag":"0e22a4b2","listMetadata":"0ae21139"},"/blog/tags/proto-02b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cfdf2b5f"},{"content":"37e4cb73"},{"content":"23ef67df"},{"content":"cd988af7"},{"content":"957809ee"},{"content":"8e9e3e30"},{"content":"e746f759"},{"content":"d43cc2ec"},{"content":"51ada3e3"},{"content":"f761bd07"}],"tag":"e8d2c25f","listMetadata":"7599f4f1"},"/blog/tags/proto/page/2-0cf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c8acf440"},{"content":"f09f371a"},{"content":"77b7a366"},{"content":"2804bc6d"},{"content":"28508d4c"},{"content":"66926af2"},{"content":"1badf320"},{"content":"c095dcfa"},{"content":"2048b789"},{"content":"4e986fc6"}],"tag":"c19ad3d7","listMetadata":"1a2b669c"},"/blog/tags/proto/page/3-636":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"77530bb9"},{"content":"43bdf210"}],"tag":"3db5b877","listMetadata":"69e0bfe1"},"/blog/tags/python-253":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"}],"tag":"232c92ba","listMetadata":"f8de77c0"},"/blog/tags/qol-c36":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"43dc46d9","listMetadata":"679bd524"},"/blog/tags/quality-17c":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"}],"tag":"750b9005","listMetadata":"1e070f27"},"/blog/tags/query-e4e":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"eb514dbf"},{"content":"2804bc6d"},{"content":"4e986fc6"}],"tag":"a372a63b","listMetadata":"f7b99134"},"/blog/tags/railway-c2c":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"4d69ebec"}],"tag":"b38a02d7","listMetadata":"15a4ce61"},"/blog/tags/registry-e67":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"23ef67df"}],"tag":"688193a4","listMetadata":"2573a9a7"},"/blog/tags/remote-cache-49b":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"aacc3e35"},{"content":"6be7ee83"},{"content":"a6d9fcee"}],"tag":"376f2f8c","listMetadata":"f01f44c3"},"/blog/tags/rfc-8be":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"0e736169"}],"tag":"8d06f620","listMetadata":"bc6c5049"},"/blog/tags/roadmap-c41":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"43bdf210"}],"tag":"170d6c86","listMetadata":"33d935e4"},"/blog/tags/run-309":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"}],"tag":"75408299","listMetadata":"9e4ae2cc"},"/blog/tags/runner-d26":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b184781f"},{"content":"d213043e"},{"content":"b072568e"},{"content":"2cd5cbb6"}],"tag":"46561613","listMetadata":"2df21221"},"/blog/tags/rust-cf6":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"},{"content":"c095dcfa"}],"tag":"2d92dfb9","listMetadata":"2adc0ba4"},"/blog/tags/schema-abe":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2804bc6d"}],"tag":"a86b7c98","listMetadata":"3fc19409"},"/blog/tags/shim-8e0":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cfdf2b5f"},{"content":"c8acf440"}],"tag":"860d7f34","listMetadata":"47b3b041"},"/blog/tags/shorthand-421":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"}],"tag":"c4542d8c","listMetadata":"c6c73cac"},"/blog/tags/source-3fc":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"42611ca7"}],"tag":"5b4d43ff","listMetadata":"16ea2389"},"/blog/tags/survey-7e5":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"14f81d84"}],"tag":"f5b890ba","listMetadata":"3c3b6fb9"},"/blog/tags/tag-2cb":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"eb514dbf"}],"tag":"b1144183","listMetadata":"edd7d65c"},"/blog/tags/tags-829":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"c6200b76"},{"content":"dd3540fa"}],"tag":"78dd992d","listMetadata":"9529487c"},"/blog/tags/target-aed":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"},{"content":"2804bc6d"}],"tag":"a91ae4c2","listMetadata":"8526ffa3"},"/blog/tags/task-a06":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"5613e7cf"}],"tag":"c532175a","listMetadata":"dd5ac54b"},"/blog/tags/tasks-301":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"957809ee"},{"content":"fe55d425"},{"content":"0e736169"},{"content":"c6200b76"},{"content":"81d944d1"},{"content":"14f81d84"}],"tag":"fd8ac5c7","listMetadata":"7aad579e"},"/blog/tags/tier-f53":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"bb624440"}],"tag":"4b8535eb","listMetadata":"250d5d50"},"/blog/tags/tokens-faf":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"81d944d1"},{"content":"dd3540fa"}],"tag":"423a0e62","listMetadata":"125698e9"},"/blog/tags/toml-1de":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"2804bc6d"}],"tag":"788e7a3c","listMetadata":"bf95ed3d"},"/blog/tags/tool-864":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"cd988af7"}],"tag":"c1721191","listMetadata":"ddec1041"},"/blog/tags/toolchain-619":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"},{"content":"77530bb9"},{"content":"204dd830"},{"content":"43bdf210"},{"content":"d213043e"},{"content":"2cd5cbb6"},{"content":"4c8cef38"}],"tag":"be1609b7","listMetadata":"7f6c6f55"},"/blog/tags/typescript-a74":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"53df8e83"},{"content":"2cd5cbb6"}],"tag":"bcbbf42e","listMetadata":"088b3228"},"/blog/tags/vcs-cd2":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"f8deddba"},{"content":"5613e7cf"}],"tag":"2bd8a6cf","listMetadata":"1e90ea6d"},"/blog/tags/version-c87":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"ce2c6db8"}],"tag":"0681d8e1","listMetadata":"7ec3d878"},"/blog/tags/vscode-bcd":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"b072568e"},{"content":"d7cf5e1f"}],"tag":"4bddfbdb","listMetadata":"18dd62e9"},"/blog/tags/wasm-463":{"__comp":"6875c492","__context":{"plugin":"01b81367"},"sidebar":"814f3328","items":[{"content":"957809ee"},{"content":"e746f759"},{"content":"d43cc2ec"},{"content":"51ada3e3"},{"content":"f761bd07"}],"tag":"3353503a","listMetadata":"271a7b09"},"/blog/typescript-monorepo-cd0":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"937d7adc"},"/blog/v0.13-d46":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"711949de"},"/blog/v0.14-934":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"e7d7123e"},"/blog/v0.15-6da":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b6e1085a"},"/blog/v0.16-f88":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b03b3eac"},"/blog/v0.17-841":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"0b289f4d"},"/blog/v0.18-825":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"edfea66c"},"/blog/v0.19-ad4":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4665933c"},"/blog/v0.20-311":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"f7bfbae9"},"/blog/v0.21-93d":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"5d48ec89"},"/blog/v0.22-4f4":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"22e78681"},"/blog/v0.23-d9e":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"2994c7d6"},"/blog/v0.24-c6b":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"4931a616"},"/blog/v0.25-616":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"7d55a0f0"},"/blog/v0.26-7ee":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"9a062e52"},"/blog/vscode-extension-c62":{"__comp":"ccc49370","__context":{"plugin":"01b81367"},"sidebar":"814f3328","content":"b819cecb"},"/docs/tags-a68":{"__comp":"3720c009","__context":{"plugin":"ec9f380e"},"tags":"55960ee5"},"/docs/tags/code-d62":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"09d7020f"},"/docs/tags/codegen-e89":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"daf4eece"},"/docs/tags/codeowners-c50":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"350ea002"},"/docs/tags/generator-4f0":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"24a07a83"},"/docs/tags/git-cd5":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"7b667a7f"},"/docs/tags/git-hooks-0b5":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"062a1a43"},"/docs/tags/hooks-9fb":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"b15686f4"},"/docs/tags/lang-0f7":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"66a08410"},"/docs/tags/mql-b60":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"0c7f16c1"},"/docs/tags/owners-a7d":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"4a3d03f6"},"/docs/tags/query-532":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"2b3490d9"},"/docs/tags/scaffold-018":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"8e65fbae"},"/docs/tags/solid-870":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"722146fe"},"/docs/tags/solidjs-25a":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"c67cfbac"},"/docs/tags/template-67d":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"3d4b58f3"},"/docs/tags/vcs-bb1":{"__comp":"df203c0f","__context":{"plugin":"ec9f380e"},"tag":"fcb295ad"},"/moon-b34":{"__comp":"193b481a","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"},"/moonbase-1fb":{"__comp":"d7cb860d","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"},"/proto-f87":{"__comp":"1cb65c7d","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"},"/search-6e4":{"__comp":"1a4e3797","__context":{"plugin":"b2d692e7"}},"/api-cd8":{"__comp":"83943ce1","__context":{"plugin":"907bfa82"},"options":"24adbf31","packages":"1b469a71","versionMetadata":"f41735e0"},"/api-710":{"__comp":"51985ffa","options":"24adbf31","packages":"1b469a71","versionMetadata":"f41735e0"},"/api/report-57a":{"__comp":"3e7d7789","readme":"63243ad1"},"/api/report/function/formatDuration-cd9":{"__comp":"3e7d7789"},"/api/report/function/formatTime-3d7":{"__comp":"3e7d7789"},"/api/report/function/getDurationInMillis-fa4":{"__comp":"3e7d7789"},"/api/report/function/getIconForStatus-f25":{"__comp":"3e7d7789"},"/api/report/function/hasFailed-72a":{"__comp":"3e7d7789"},"/api/report/function/hasPassed-c15":{"__comp":"3e7d7789"},"/api/report/function/isFlaky-d55":{"__comp":"3e7d7789"},"/api/report/function/isSlow-5b3":{"__comp":"3e7d7789"},"/api/report/function/prepareReportActions-619":{"__comp":"3e7d7789"},"/api/report/function/sortReport-7b7":{"__comp":"3e7d7789"},"/api/report/interface/PreparedAction-b0e":{"__comp":"3e7d7789"},"/api/runtime-e4a":{"__comp":"3e7d7789","readme":"c4f95133"},"/api/runtime/function/getContext-ba3":{"__comp":"3e7d7789"},"/api/runtime/interface/RuntimeContext-b42":{"__comp":"3e7d7789"},"/api/types-a7c":{"__comp":"3e7d7789","readme":"9ff86157"},"/api/types/interface/Action-5f0":{"__comp":"3e7d7789"},"/api/types/interface/ActionContext-bb7":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeInstallDeps-418":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeInstallProjectDeps-48d":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeRunTask-80f":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeSetupTool-ca5":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeSyncProject-8d5":{"__comp":"3e7d7789"},"/api/types/interface/ActionNodeSyncWorkspace-e99":{"__comp":"3e7d7789"},"/api/types/interface/Attempt-556":{"__comp":"3e7d7789"},"/api/types/interface/BinConfig-064":{"__comp":"3e7d7789"},"/api/types/interface/CodeownersConfig-c4e":{"__comp":"3e7d7789"},"/api/types/interface/ConstraintsConfig-b7e":{"__comp":"3e7d7789"},"/api/types/interface/DenoConfig-ebb":{"__comp":"3e7d7789"},"/api/types/interface/DependencyConfig-f20":{"__comp":"3e7d7789"},"/api/types/interface/Duration-f37":{"__comp":"3e7d7789"},"/api/types/interface/EventActionFinished-997":{"__comp":"3e7d7789"},"/api/types/interface/EventActionStarted-44f":{"__comp":"3e7d7789"},"/api/types/interface/EventDependenciesInstalled-a7d":{"__comp":"3e7d7789"},"/api/types/interface/EventDependenciesInstalling-4d6":{"__comp":"3e7d7789"},"/api/types/interface/EventPipelineAborted-1fe":{"__comp":"3e7d7789"},"/api/types/interface/EventPipelineFinished-d46":{"__comp":"3e7d7789"},"/api/types/interface/EventPipelineStarted-8fb":{"__comp":"3e7d7789"},"/api/types/interface/EventProjectSynced-c2f":{"__comp":"3e7d7789"},"/api/types/interface/EventProjectSyncing-38d":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputArchived-346":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputArchiving-e9e":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputCacheCheck-231":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputHydrated-1ee":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetOutputHydrating-3ae":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetRan-f59":{"__comp":"3e7d7789"},"/api/types/interface/EventTargetRunning-42a":{"__comp":"3e7d7789"},"/api/types/interface/EventToolInstalled-ac8":{"__comp":"3e7d7789"},"/api/types/interface/EventToolInstalling-09f":{"__comp":"3e7d7789"},"/api/types/interface/EventWorkspaceSynced-ca8":{"__comp":"3e7d7789"},"/api/types/interface/ExperimentsConfig-9c3":{"__comp":"3e7d7789"},"/api/types/interface/FileGroup-fbb":{"__comp":"3e7d7789"},"/api/types/interface/GeneratorConfig-4cc":{"__comp":"3e7d7789"},"/api/types/interface/HasherConfig-dce":{"__comp":"3e7d7789"},"/api/types/interface/InheritedTasksConfig-481":{"__comp":"3e7d7789"},"/api/types/interface/NodeConfig-c81":{"__comp":"3e7d7789"},"/api/types/interface/NotifierConfig-acd":{"__comp":"3e7d7789"},"/api/types/interface/NpmConfig-448":{"__comp":"3e7d7789"},"/api/types/interface/OwnersConfig-7b9":{"__comp":"3e7d7789"},"/api/types/interface/PartialBinConfig-5cf":{"__comp":"3e7d7789"},"/api/types/interface/PartialCodeownersConfig-b6e":{"__comp":"3e7d7789"},"/api/types/interface/PartialConstraintsConfig-a0e":{"__comp":"3e7d7789"},"/api/types/interface/PartialDenoConfig-26c":{"__comp":"3e7d7789"},"/api/types/interface/PartialDependencyConfig-eb0":{"__comp":"3e7d7789"},"/api/types/interface/PartialExperimentsConfig-f6b":{"__comp":"3e7d7789"},"/api/types/interface/PartialGeneratorConfig-3f3":{"__comp":"3e7d7789"},"/api/types/interface/PartialHasherConfig-b54":{"__comp":"3e7d7789"},"/api/types/interface/PartialInheritedTasksConfig-c99":{"__comp":"3e7d7789"},"/api/types/interface/PartialNodeConfig-1ba":{"__comp":"3e7d7789"},"/api/types/interface/PartialNotifierConfig-f70":{"__comp":"3e7d7789"},"/api/types/interface/PartialNpmConfig-c1a":{"__comp":"3e7d7789"},"/api/types/interface/PartialOwnersConfig-10e":{"__comp":"3e7d7789"},"/api/types/interface/PartialPnpmConfig-9cc":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectConfig-10d":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectMetadataConfig-346":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectToolchainCommonToolConfig-542":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectToolchainConfig-86b":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectToolchainTypeScriptConfig-4a7":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectWorkspaceConfig-f17":{"__comp":"3e7d7789"},"/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig-195":{"__comp":"3e7d7789"},"/api/types/interface/PartialRunnerConfig-0c7":{"__comp":"3e7d7789"},"/api/types/interface/PartialRustConfig-0c2":{"__comp":"3e7d7789"},"/api/types/interface/PartialTaskConfig-79a":{"__comp":"3e7d7789"},"/api/types/interface/PartialTaskOptionsConfig-e8f":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateConfig-9e8":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateFrontmatterConfig-8e5":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableBoolSetting-38b":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableEnumSetting-23b":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableEnumValueConfig-442":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableNumberSetting-a8c":{"__comp":"3e7d7789"},"/api/types/interface/PartialTemplateVariableStringSetting-1a4":{"__comp":"3e7d7789"},"/api/types/interface/PartialToolchainConfig-759":{"__comp":"3e7d7789"},"/api/types/interface/PartialTypeScriptConfig-854":{"__comp":"3e7d7789"},"/api/types/interface/PartialVcsConfig-75a":{"__comp":"3e7d7789"},"/api/types/interface/PartialWorkspaceConfig-b57":{"__comp":"3e7d7789"},"/api/types/interface/PartialWorkspaceProjectsConfig-242":{"__comp":"3e7d7789"},"/api/types/interface/PartialYarnConfig-91c":{"__comp":"3e7d7789"},"/api/types/interface/PnpmConfig-e25":{"__comp":"3e7d7789"},"/api/types/interface/Project-817":{"__comp":"3e7d7789"},"/api/types/interface/ProjectConfig-0f3":{"__comp":"3e7d7789"},"/api/types/interface/ProjectMetadataConfig-4b0":{"__comp":"3e7d7789"},"/api/types/interface/ProjectToolchainCommonToolConfig-832":{"__comp":"3e7d7789"},"/api/types/interface/ProjectToolchainConfig-5f0":{"__comp":"3e7d7789"},"/api/types/interface/ProjectToolchainTypeScriptConfig-481":{"__comp":"3e7d7789"},"/api/types/interface/ProjectWorkspaceConfig-1bf":{"__comp":"3e7d7789"},"/api/types/interface/ProjectWorkspaceInheritedTasksConfig-503":{"__comp":"3e7d7789"},"/api/types/interface/ProviderEnvironment-390":{"__comp":"3e7d7789"},"/api/types/interface/RunnerConfig-937":{"__comp":"3e7d7789"},"/api/types/interface/RunReport-0da":{"__comp":"3e7d7789"},"/api/types/interface/Runtime-3de":{"__comp":"3e7d7789"},"/api/types/interface/RustConfig-3b7":{"__comp":"3e7d7789"},"/api/types/interface/TargetState-d71":{"__comp":"3e7d7789"},"/api/types/interface/Task-753":{"__comp":"3e7d7789"},"/api/types/interface/TaskConfig-2f8":{"__comp":"3e7d7789"},"/api/types/interface/TaskOptions-764":{"__comp":"3e7d7789"},"/api/types/interface/TaskOptionsConfig-641":{"__comp":"3e7d7789"},"/api/types/interface/TemplateConfig-920":{"__comp":"3e7d7789"},"/api/types/interface/TemplateFrontmatterConfig-899":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableBoolSetting-4ef":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableEnumSetting-45d":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableEnumValueConfig-065":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableNumberSetting-284":{"__comp":"3e7d7789"},"/api/types/interface/TemplateVariableStringSetting-bf1":{"__comp":"3e7d7789"},"/api/types/interface/ToolchainConfig-6b5":{"__comp":"3e7d7789"},"/api/types/interface/TypeScriptConfig-c60":{"__comp":"3e7d7789"},"/api/types/interface/VcsConfig-e81":{"__comp":"3e7d7789"},"/api/types/interface/WebhookPayload-0a8":{"__comp":"3e7d7789"},"/api/types/interface/WorkspaceConfig-988":{"__comp":"3e7d7789"},"/api/types/interface/WorkspaceProjectsConfig-31a":{"__comp":"3e7d7789"},"/api/types/interface/YarnConfig-e2e":{"__comp":"3e7d7789"},"/docs-489":{"__comp":"1be78505","__context":{"plugin":"ec9f380e"},"versionMetadata":"935f2afb"},"/docs-80c":{"__comp":"17896441","content":"f8409a7e"},"/docs/cheat-sheet-53d":{"__comp":"17896441","content":"405d593f"},"/docs/commands-993":{"__comp":"14eb3368","categoryGeneratedIndex":"4a1ab9c8"},"/docs/commands/action-graph-d0e":{"__comp":"17896441","content":"351d319b"},"/docs/commands/bin-e39":{"__comp":"17896441","content":"a65441a5"},"/docs/commands/check-cf6":{"__comp":"17896441","content":"626ef9ce"},"/docs/commands/ci-f74":{"__comp":"17896441","content":"068b8e98"},"/docs/commands/clean-9b0":{"__comp":"17896441","content":"686e1776"},"/docs/commands/completions-f1b":{"__comp":"17896441","content":"69c95af3"},"/docs/commands/docker-4ed":{"__comp":"14eb3368","categoryGeneratedIndex":"dffc4bd7"},"/docs/commands/docker/prune-fc8":{"__comp":"17896441","content":"a26a8dd3"},"/docs/commands/docker/scaffold-d55":{"__comp":"17896441","content":"a219b733"},"/docs/commands/docker/setup-2af":{"__comp":"17896441","content":"8c4a23a7"},"/docs/commands/generate-0ff":{"__comp":"17896441","content":"0f8a713b"},"/docs/commands/init-28a":{"__comp":"17896441","content":"8c079f7d"},"/docs/commands/migrate-4df":{"__comp":"14eb3368","categoryGeneratedIndex":"600433a8"},"/docs/commands/migrate/from-package-json-869":{"__comp":"17896441","content":"ffef4e04"},"/docs/commands/migrate/from-turborepo-36a":{"__comp":"17896441","content":"3df11149"},"/docs/commands/overview-c3f":{"__comp":"17896441","content":"1aa28b52"},"/docs/commands/project-225":{"__comp":"17896441","content":"2c114e85"},"/docs/commands/project-graph-49c":{"__comp":"17896441","content":"eda853ca"},"/docs/commands/query-0ed":{"__comp":"14eb3368","categoryGeneratedIndex":"0b1dc2cd"},"/docs/commands/query/hash-390":{"__comp":"17896441","content":"be1aaa14"},"/docs/commands/query/hash-diff-f4c":{"__comp":"17896441","content":"f616eec2"},"/docs/commands/query/projects-9e0":{"__comp":"17896441","content":"a88c4343"},"/docs/commands/query/tasks-d45":{"__comp":"17896441","content":"146ca1ad"},"/docs/commands/query/touched-files-ea7":{"__comp":"17896441","content":"d8fdbe7a"},"/docs/commands/run-a21":{"__comp":"17896441","content":"f9cc98ab"},"/docs/commands/setup-187":{"__comp":"17896441","content":"318f6953"},"/docs/commands/sync-193":{"__comp":"14eb3368","categoryGeneratedIndex":"00568285"},"/docs/commands/sync/codeowners-49c":{"__comp":"17896441","content":"e570d6db"},"/docs/commands/sync/hooks-885":{"__comp":"17896441","content":"357f2143"},"/docs/commands/sync/projects-7d5":{"__comp":"17896441","content":"861abce9"},"/docs/commands/task-d57":{"__comp":"17896441","content":"e16afba1"},"/docs/commands/teardown-b70":{"__comp":"17896441","content":"b104f86f"},"/docs/commands/upgrade-a78":{"__comp":"17896441","content":"163fb342"},"/docs/comparison-6c8":{"__comp":"17896441","content":"86257f88"},"/docs/concepts-04b":{"__comp":"14eb3368","categoryGeneratedIndex":"c5ed658f"},"/docs/concepts/cache-0e8":{"__comp":"17896441","content":"89c16be8"},"/docs/concepts/file-group-759":{"__comp":"17896441","content":"b9e9925e"},"/docs/concepts/file-pattern-1ab":{"__comp":"17896441","content":"24556f49"},"/docs/concepts/project-6bd":{"__comp":"17896441","content":"b831fe65"},"/docs/concepts/query-lang-5d7":{"__comp":"17896441","content":"db676956"},"/docs/concepts/target-04a":{"__comp":"17896441","content":"fea2b255"},"/docs/concepts/task-85c":{"__comp":"17896441","content":"3f5148d4"},"/docs/concepts/task-inheritance-c5a":{"__comp":"17896441","content":"df212c12"},"/docs/concepts/token-3e2":{"__comp":"17896441","content":"3dc68565"},"/docs/concepts/toolchain-26e":{"__comp":"17896441","content":"2ed8359a"},"/docs/concepts/workspace-3e1":{"__comp":"17896441","content":"e13166f5"},"/docs/config-c27":{"__comp":"14eb3368","categoryGeneratedIndex":"90b14878"},"/docs/config/project-7fc":{"__comp":"17896441","content":"4ec8a4a9"},"/docs/config/tasks-7d1":{"__comp":"17896441","content":"fc3ae8bf"},"/docs/config/template-eeb":{"__comp":"17896441","content":"a0d8b188"},"/docs/config/toolchain-a71":{"__comp":"17896441","content":"8de38bef"},"/docs/config/workspace-ceb":{"__comp":"17896441","content":"17cacc08"},"/docs/create-project-2c7":{"__comp":"17896441","content":"57bd32c7"},"/docs/create-task-c85":{"__comp":"17896441","content":"88aaac27"},"/docs/editors-c15":{"__comp":"14eb3368","categoryGeneratedIndex":"f41d5eb1"},"/docs/editors/vscode-501":{"__comp":"17896441","content":"b8f3d4c8"},"/docs/faq-fe9":{"__comp":"17896441","content":"ea313555"},"/docs/guides/ci-d5d":{"__comp":"17896441","content":"b78f40a6"},"/docs/guides/codegen-527":{"__comp":"17896441","content":"488a99ce"},"/docs/guides/codeowners-598":{"__comp":"17896441","content":"9f838734"},"/docs/guides/debug-task-fe5":{"__comp":"17896441","content":"36027025"},"/docs/guides/docker-578":{"__comp":"17896441","content":"89a53707"},"/docs/guides/examples/angular-3ac":{"__comp":"17896441","content":"ff13fcd4"},"/docs/guides/examples/astro-810":{"__comp":"17896441","content":"195293b6"},"/docs/guides/examples/eslint-161":{"__comp":"17896441","content":"a581e456"},"/docs/guides/examples/jest-789":{"__comp":"17896441","content":"fe36d4cd"},"/docs/guides/examples/nest-0d4":{"__comp":"17896441","content":"d93dbc28"},"/docs/guides/examples/next-d2c":{"__comp":"17896441","content":"56a06382"},"/docs/guides/examples/nuxt-475":{"__comp":"17896441","content":"aa431e4a"},"/docs/guides/examples/packemon-c08":{"__comp":"17896441","content":"303db6c1"},"/docs/guides/examples/prettier-fda":{"__comp":"17896441","content":"90f88783"},"/docs/guides/examples/react-7da":{"__comp":"17896441","content":"759c01e9"},"/docs/guides/examples/remix-a9b":{"__comp":"17896441","content":"0cd40d9b"},"/docs/guides/examples/solid-00c":{"__comp":"17896441","content":"5f3507b2"},"/docs/guides/examples/storybook-155":{"__comp":"17896441","content":"0cb5fac6"},"/docs/guides/examples/sveltekit-0c7":{"__comp":"17896441","content":"0034bcd6"},"/docs/guides/examples/typescript-e4a":{"__comp":"17896441","content":"03193cc0"},"/docs/guides/examples/vite-593":{"__comp":"17896441","content":"e898b7f3"},"/docs/guides/examples/vue-5c0":{"__comp":"17896441","content":"f7f505dc"},"/docs/guides/javascript/deno-handbook-ef8":{"__comp":"17896441","content":"02401b2b"},"/docs/guides/javascript/node-handbook-f9e":{"__comp":"17896441","content":"2dffafe2"},"/docs/guides/javascript/typescript-eslint-3a8":{"__comp":"17896441","content":"6dd55018"},"/docs/guides/javascript/typescript-project-refs-e9d":{"__comp":"17896441","content":"6c24c6c6"},"/docs/guides/node/examples-dd3":{"__comp":"14eb3368","categoryGeneratedIndex":"4e9707d9"},"/docs/guides/offline-mode-422":{"__comp":"17896441","content":"2d15743f"},"/docs/guides/open-source-339":{"__comp":"17896441","content":"766b2171"},"/docs/guides/profile-b9d":{"__comp":"17896441","content":"8f6f7bb5"},"/docs/guides/remote-cache-7a9":{"__comp":"17896441","content":"db0cc9f1"},"/docs/guides/root-project-272":{"__comp":"17896441","content":"073e718f"},"/docs/guides/rust/handbook-b00":{"__comp":"17896441","content":"49b772d3"},"/docs/guides/sharing-config-554":{"__comp":"17896441","content":"a33962b9"},"/docs/guides/vcs-hooks-c03":{"__comp":"17896441","content":"39b245d7"},"/docs/guides/webhooks-b9d":{"__comp":"17896441","content":"87d62477"},"/docs/how-it-works-837":{"__comp":"14eb3368","categoryGeneratedIndex":"fd27c808"},"/docs/how-it-works/action-graph-f15":{"__comp":"17896441","content":"6fb24ff7"},"/docs/how-it-works/languages-165":{"__comp":"17896441","content":"4fa82ff8"},"/docs/how-it-works/project-graph-6b7":{"__comp":"17896441","content":"8876813e"},"/docs/install-7a2":{"__comp":"17896441","content":"046e2194"},"/docs/migrate-to-moon-aa1":{"__comp":"17896441","content":"b65c3624"},"/docs/proto-7be":{"__comp":"17896441","content":"ad536080"},"/docs/proto/commands/add-plugin-bda":{"__comp":"17896441","content":"69bc0e2c"},"/docs/proto/commands/alias-8ad":{"__comp":"17896441","content":"9f025583"},"/docs/proto/commands/bin-dc5":{"__comp":"17896441","content":"fab64b27"},"/docs/proto/commands/clean-740":{"__comp":"17896441","content":"413318e8"},"/docs/proto/commands/completions-87c":{"__comp":"17896441","content":"6eae5b23"},"/docs/proto/commands/install-f7b":{"__comp":"17896441","content":"a20401e4"},"/docs/proto/commands/install-global-59f":{"__comp":"17896441","content":"4d66ab66"},"/docs/proto/commands/list-50b":{"__comp":"17896441","content":"d1576682"},"/docs/proto/commands/list-global-fb9":{"__comp":"17896441","content":"1e76467f"},"/docs/proto/commands/list-remote-0b7":{"__comp":"17896441","content":"a701d349"},"/docs/proto/commands/outdated-dba":{"__comp":"17896441","content":"5e371f0f"},"/docs/proto/commands/pin-65a":{"__comp":"17896441","content":"79765aba"},"/docs/proto/commands/plugins-9c9":{"__comp":"17896441","content":"a9e1900f"},"/docs/proto/commands/remove-plugin-570":{"__comp":"17896441","content":"2e1ef406"},"/docs/proto/commands/run-a65":{"__comp":"17896441","content":"cae36b15"},"/docs/proto/commands/setup-735":{"__comp":"17896441","content":"d4c755e6"},"/docs/proto/commands/tools-092":{"__comp":"17896441","content":"fc62dd75"},"/docs/proto/commands/unalias-734":{"__comp":"17896441","content":"a18798d1"},"/docs/proto/commands/uninstall-bbc":{"__comp":"17896441","content":"c5980a65"},"/docs/proto/commands/uninstall-global-10a":{"__comp":"17896441","content":"5552634a"},"/docs/proto/commands/upgrade-edc":{"__comp":"17896441","content":"be324e15"},"/docs/proto/commands/use-966":{"__comp":"17896441","content":"a452709a"},"/docs/proto/config-2e0":{"__comp":"17896441","content":"0627e785"},"/docs/proto/detection-406":{"__comp":"17896441","content":"a641c963"},"/docs/proto/faq-fc6":{"__comp":"17896441","content":"c7d98fe2"},"/docs/proto/install-abd":{"__comp":"17896441","content":"f440db1d"},"/docs/proto/plugins-49c":{"__comp":"17896441","content":"b49860f1"},"/docs/proto/toml-plugin-33c":{"__comp":"17896441","content":"f714495d"},"/docs/proto/tools-6c5":{"__comp":"17896441","content":"4178efb8"},"/docs/proto/wasm-plugin-4c5":{"__comp":"17896441","content":"9e528cee"},"/docs/run-task-db3":{"__comp":"17896441","content":"819f977d"},"/docs/setup-toolchain-ee9":{"__comp":"17896441","content":"9edb948e"},"/docs/setup-workspace-34e":{"__comp":"17896441","content":"f18fbdcd"},"/docs/terminology-0ff":{"__comp":"17896441","content":"6b50e60a"},"/-b14":{"__comp":"1df93b7f","__context":{"plugin":"f3f44898"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[40532],(()=>{return t=93002,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.6a2889a1.js.LICENSE.txt b/assets/js/main.f61cdfcc.js.LICENSE.txt similarity index 100% rename from assets/js/main.6a2889a1.js.LICENSE.txt rename to assets/js/main.f61cdfcc.js.LICENSE.txt diff --git a/assets/js/runtime~main.0eb29a1d.js b/assets/js/runtime~main.0eb29a1d.js new file mode 100644 index 00000000000..f51175080c0 --- /dev/null +++ b/assets/js/runtime~main.0eb29a1d.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,f,d,c,a,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,e=[],r.O=(f,d,c,a)=>{if(!d){var b=1/0;for(i=0;i<e.length;i++){d=e[i][0],c=e[i][1],a=e[i][2];for(var t=!0,o=0;o<d.length;o++)(!1&a||b>=a)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,a<b&&(b=a));if(t){e.splice(i--,1);var n=c();void 0!==n&&(f=n)}}return f}a=a||0;for(var i=e.length;i>0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[d,c,a]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var a=Object.create(null);r.r(a);var b={};f=f||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(a,b),a},r.d=(e,f)=>{for(var d in f)r.o(f,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:f[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,d)=>(r.f[d](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"409da100",323:"686e1776",433:"14f9b0f2",601:"01b81367",638:"d213043e",1175:"0cd40d9b",1358:"6fb24ff7",1531:"11ce4159",1607:"cf510f60",1719:"0cb5fac6",1795:"86257f88",2033:"a65441a5",2074:"2cd5cbb6",2571:"1e070f27",2615:"8876813e",2801:"202af6b6",3206:"f8409a7e",4068:"1badf320",4138:"88aaac27",4590:"a372a63b",5016:"cfdf2b5f",5758:"2eaf3a2f",5826:"f8de77c0",6274:"ef3509ef",6388:"19ca9089",6506:"d1576682",6517:"7aad579e",6633:"9e528cee",6652:"78060cbc",6759:"0f8a713b",6855:"9a062e52",7012:"711949de",7037:"125698e9",7278:"1e542d68",7429:"7d9726a8",7566:"3dc68565",8057:"c095dcfa",8100:"7d4c8b40",8114:"90b14878",8159:"4e9707d9",8248:"ce2c6db8",8450:"b819cecb",8678:"8d06f620",9010:"e629dea5",9157:"b831fe65",9197:"6be7ee83",9551:"87d62477",9817:"14eb3368",9847:"be324e15",10001:"8eb4e46b",10252:"3db5b877",10537:"4178efb8",10722:"722146fe",10744:"24556f49",10938:"f8deddba",10948:"97878c65",11126:"4c8cef38",11280:"fc62dd75",11477:"b2f554cd",11558:"0e22a4b2",11665:"2e1ef406",11713:"a7023ddc",12174:"ff13fcd4",12391:"204dd830",12454:"479321cf",12785:"957809ee",12949:"b0e766b4",13089:"bf04367c",13481:"90f88783",13751:"3720c009",13774:"318f6953",13869:"769e9ed2",14640:"0ff9eadc",15050:"f18fbdcd",15091:"56a06382",15411:"fc3ae8bf",15428:"9d3c1a44",15437:"4bddfbdb",15494:"f9651623",15867:"48b0f434",15911:"57bd32c7",15995:"861abce9",16039:"eb514dbf",16144:"42611ca7",16447:"cce51cf2",16502:"f5b890ba",16732:"c67cfbac",16835:"ed26bce9",16836:"427e2c3d",16974:"232c92ba",17642:"fcb295ad",18442:"92999a1c",18496:"5cde4d5c",18509:"cdad2d50",18869:"61486960",18914:"5419aa43",19821:"83943ce1",19902:"e8700426",19950:"8f6f7bb5",20019:"dd99bf53",20384:"752c6bfa",20612:"4b8535eb",20728:"dae127b6",20735:"3fc19409",20739:"8c4a23a7",20984:"f440db1d",21042:"39b245d7",21258:"f5f247cc",21364:"bb624440",21393:"7c4e6415",21396:"459b1c5c",21575:"0b289f4d",21756:"3b568f5a",22108:"3e7d7789",22293:"54024cf2",22461:"ddec1041",22636:"46561613",23131:"c5ed658f",23157:"89a53707",23168:"1cb65c7d",23358:"766b2171",23512:"aa431e4a",23523:"33d935e4",23615:"71dfd0a8",23664:"fd8ac5c7",24404:"f7bfbae9",24744:"ec9f380e",24871:"24a07a83",25370:"bc6c5049",25425:"68d17c71",25547:"a0d8b188",25624:"77b7a366",25971:"0b1dc2cd",26009:"a9e1900f",26027:"ffef4e04",26051:"3e1aa1b6",26285:"18dd62e9",26622:"8d701eb4",26911:"b184781f",27418:"63aeb80b",27460:"a18798d1",27594:"63243ad1",27756:"39a2c297",27918:"17896441",28129:"36027025",28149:"44183a86",28444:"376f2f8c",28495:"860d7f34",29219:"1cbc9cf3",29453:"affd832d",29514:"1be78505",29631:"2dffafe2",29719:"5552634a",29737:"f7b99134",29754:"3f5148d4",29769:"4fa82ff8",29917:"1365e0a6",29958:"a6d9fcee",30027:"3353503a",30464:"2fafdb99",30601:"0681d8e1",30727:"60262e21",30808:"271a7b09",30827:"a86b7c98",30841:"eb1a9ca0",30959:"09d7020f",31622:"819f977d",31737:"cd988af7",32433:"b072568e",32571:"ec4f6a24",33062:"66a08410",33068:"a701d349",33071:"937d7adc",33134:"bc74446d",33439:"53df8e83",33643:"c6200b76",33984:"e746f759",35334:"b03b3eac",35537:"9529487c",35649:"7b667a7f",35666:"068b8e98",36095:"69ea3d78",36167:"423a0e62",36297:"0c7f16c1",36361:"4f0c5301",36371:"163fb342",36394:"edfea66c",36861:"2048b789",36863:"df212c12",37007:"8593ff01",37133:"be1aaa14",37394:"151c652b",37440:"79765aba",37633:"907bfa82",37930:"600433a8",37941:"2d15743f",38086:"db676956",38428:"1e90ea6d",38488:"759c01e9",38670:"2804bc6d",38830:"9ff86157",39200:"2b3490d9",39818:"fb2dd7db",40216:"6e15e01b",40805:"c19ad3d7",40824:"47b3b041",41303:"5d48ec89",41525:"c5980a65",42121:"2ed8359a",42277:"d9c57d72",42334:"7c9b29bb",42463:"14f81d84",42656:"073e718f",42839:"170d6c86",42945:"5e371f0f",43109:"5a3a719f",43171:"e8d2c25f",43238:"5534fb85",43310:"f761bd07",43363:"03193cc0",43408:"87f861ef",43869:"40c69ef1",43871:"d43cc2ec",43972:"0e736169",43993:"d8fdbe7a",44343:"9f025583",44436:"9edb948e",44497:"f90d8a46",44752:"69bc0e2c",44817:"31fff4a5",44867:"c83c6fdf",44873:"1910946c",44969:"3d0b0327",45048:"d7cb860d",45244:"128a5f34",45420:"fe36d4cd",46070:"77530bb9",46103:"ccc49370",46480:"4d69ebec",46500:"66222453",46526:"a452709a",46920:"7d55a0f0",46947:"752283db",47265:"3db947d3",47789:"e8f62c55",47822:"b1144183",47890:"b7a8f57a",47969:"89c16be8",47999:"1a2b669c",48114:"2497986c",48233:"4e986fc6",48529:"4931a616",48610:"6875c492",48667:"046e2194",50167:"2e94733f",50609:"80514956",50670:"0684a904",50818:"4ec8a4a9",50984:"54eec65a",51084:"c7d98fe2",51109:"976dc663",51294:"51ada3e3",51578:"8e65fbae",51684:"3f885d22",51705:"a6746ab5",51909:"2df21221",52080:"626ef9ce",52201:"f41d5eb1",52287:"66926af2",52535:"814f3328",52606:"bcbbf42e",52753:"146ca1ad",53184:"dd5ac54b",53237:"1df93b7f",53608:"9e4087bc",53647:"fbcfc993",53733:"245d4974",53941:"fac0f815",54252:"679bd524",54362:"c1721191",54403:"062a1a43",54488:"4ab2bb95",54841:"f3f44898",55649:"b49860f1",56040:"efef7eb9",56256:"5c653e8d",56336:"3f2d0a0e",56448:"be1609b7",56630:"75408299",56720:"f1d6ac1e",56819:"bec065e9",56842:"4fd1aaa1",56971:"daf4eece",57690:"2d92dfb9",58074:"b1c60aef",58696:"6196de5a",58751:"f9cc98ab",58941:"d5875de2",59364:"dd3540fa",59639:"bf95ed3d",59673:"1202c0b0",60026:"f714495d",60314:"eda853ca",60354:"788e7a3c",60499:"b0cf9b20",60730:"b65c3624",60846:"3691c6ec",61988:"c4542d8c",62441:"2172420b",62687:"bd6bded1",62814:"750b9005",62865:"26419218",63058:"5b4d43ff",63210:"5794c75f",63450:"ccfb5782",64013:"01a85c17",64043:"60fa46e1",64065:"db0cc9f1",64067:"365a10b6",64147:"b15686f4",64197:"8de38bef",64414:"16ea2389",64492:"5613e7cf",64788:"0ae21139",64859:"93bce8ec",65077:"ad536080",65217:"7599f4f1",65379:"43bdf210",65537:"f7f505dc",65819:"f41735e0",65899:"e7d7123e",66065:"303db6c1",66172:"e13166f5",66458:"49b772d3",66647:"7f3e2518",66882:"e5f23965",67005:"d7cf5e1f",67143:"2bd8a6cf",67217:"49af4b98",67448:"1740b646",67619:"98ae4a66",67622:"dbbb982f",67964:"fab64b27",68005:"a91ae4c2",68007:"250d5d50",68026:"6c24c6c6",68282:"a88c4343",68573:"c532175a",68876:"676566fe",68900:"8b38bcbd",69015:"3df11149",69186:"f09f371a",69201:"688193a4",69959:"1aebc10b",70731:"2adc0ba4",70866:"dffc4bd7",70951:"e570d6db",70969:"a20401e4",71133:"fe55d425",71478:"771f38eb",72178:"7ec3d878",72484:"195293b6",72882:"088b3228",73250:"edd7d65c",73443:"110403ef",73931:"a641c963",73986:"5f3507b2",74121:"55960ee5",74675:"8e9e3e30",74824:"0627e785",74825:"22e78681",74875:"81d944d1",75394:"caa6a735",75706:"9e4ae2cc",75847:"2e4722bd",75852:"f01f44c3",76331:"be0fdac8",76352:"17ae22f4",76353:"51985ffa",76629:"b78f40a6",76939:"1e76467f",77008:"4a1ab9c8",77142:"44ac4dbb",77363:"69c95af3",77465:"6fe6957f",77659:"fc3deafd",77838:"a26a8dd3",77869:"78dd992d",77889:"350ea002",77937:"ea313555",77963:"c5de23c8",78158:"fffcdd84",78195:"2573a9a7",78463:"b80596f4",79357:"f616eec2",79702:"7e9fb3d2",79716:"b2d692e7",80053:"935f2afb",80115:"b717531a",80146:"d84e8684",80175:"140321b2",80368:"620e72fa",80632:"59abedb6",81148:"4c2d8fdb",81187:"b972506a",81812:"405d593f",82056:"016d6d21",82192:"a5a57258",82258:"488a99ce",82444:"b8f3d4c8",82687:"6eae5b23",82763:"a33962b9",83075:"ac1be023",83088:"2994c7d6",83508:"413318e8",83549:"7d19a980",83561:"7f6c6f55",83884:"4a3d03f6",84247:"23ef67df",84470:"00568285",84536:"b104f86f",85027:"02401b2b",85029:"69e0bfe1",85390:"6dd55018",85620:"8526ffa3",85679:"d93dbc28",85723:"6ea8a316",85880:"8c079f7d",85950:"22eddac1",86551:"04d8c43e",86795:"3c3b6fb9",87387:"d4c755e6",87451:"1b469a71",87538:"9c090340",87584:"e898b7f3",88663:"2c114e85",88893:"17cacc08",89094:"3d4b58f3",89126:"c8acf440",89531:"99b94e0d",89624:"b6e1085a",89819:"e4c23816",90297:"b9e9925e",90439:"fcbcdf3c",90514:"fba28ebc",90533:"b2b675dd",90543:"fd485bd3",90661:"fd27c808",91324:"8c241076",91816:"28508d4c",92105:"ffc0ac08",92129:"15a4ce61",92293:"4d66ab66",92702:"aacc3e35",92778:"a581e456",93089:"a6aa9e1f",93160:"24adbf31",93231:"9f838734",93287:"fea2b255",93363:"54350ada",93791:"c6c73cac",93811:"1d14c2f4",94268:"6b50e60a",94312:"cae36b15",94384:"c413f1b7",94488:"37e4cb73",94672:"32632728",94734:"98738a6c",94979:"450b14c3",95084:"351d319b",95129:"357f2143",95653:"b652e05c",95924:"4665933c",96321:"90fdb9b5",96370:"43dc46d9",96758:"4ddbfcdc",96897:"4aa262b7",97424:"0034bcd6",97547:"fff5a6d1",97749:"a219b733",97889:"e16afba1",97920:"1a4e3797",98401:"c4f95133",98450:"1aa28b52",98685:"b38a02d7",99067:"bb86fac5",99662:"193b481a",99827:"bf5d9784",99924:"df203c0f"}[e]||e)+"."+{1:"1636f741",323:"d94a52c5",433:"389ba6da",601:"bc8690a1",638:"26057519",1175:"0eaad8c0",1358:"b96c4d0b",1531:"77186aad",1607:"7efa5bc1",1719:"25cb92a6",1795:"5b564cd1",2033:"48b06076",2074:"46e2c695",2571:"8a307946",2615:"0eeff7a1",2801:"513f44b9",3206:"fb0cd7af",4068:"6d36c226",4138:"0e10d391",4590:"9cc81a6a",5016:"341c4a8c",5758:"df663f84",5826:"35b2d96a",6274:"57a61e0b",6388:"f4ad3aeb",6506:"17402f99",6517:"3d11a665",6633:"7dbc7d65",6652:"fa1b780f",6759:"18c21049",6855:"5f0c08b7",7012:"505f26ef",7037:"73615ac4",7278:"90294187",7429:"0661fc84",7566:"a77cf993",8057:"8424e0e5",8100:"d01a5e2b",8114:"9e5d1974",8159:"70e4729a",8248:"b5f8128e",8450:"7292184f",8678:"cb05c1f4",9010:"754f7761",9157:"7564adc0",9197:"58d68ae7",9551:"714bcbfd",9817:"502e83b6",9847:"57d3de02",10001:"818d4eb8",10252:"b0f4ddb0",10537:"03054977",10722:"aeee5532",10744:"6dcc7c6c",10938:"f0bb0eb0",10948:"afd1a510",11126:"8da52144",11280:"3c243465",11477:"2413f90d",11558:"1fc681f9",11665:"31ebba6c",11713:"3d2c7ca4",12174:"5c654c20",12391:"4b6dbd29",12454:"84f9bccd",12700:"03a0accc",12785:"31ddf86c",12949:"ff5fa677",13089:"c9528421",13481:"8572bd77",13751:"73933c11",13774:"0efba10b",13869:"dac44f1f",14640:"6c7d2b09",15050:"cab1effa",15091:"a6fad1ed",15411:"a318dd9f",15428:"96479d33",15437:"ebbc8b8a",15494:"95685a4a",15867:"3c0ff780",15911:"6fbe4157",15995:"6c85e833",16039:"66c0757e",16144:"090ea3dd",16447:"395d4f10",16502:"5a58db70",16732:"6220e8c2",16835:"8603abef",16836:"1606f310",16974:"2d7c051f",17642:"e4bd04c4",18442:"62a505db",18496:"c4892f4e",18509:"119b23fa",18869:"074a736c",18914:"a273dc78",19821:"96ff7e1c",19902:"60166484",19950:"4e2ebbda",20019:"85834099",20384:"8ffd2dc5",20612:"1ec02750",20728:"b695189d",20735:"a8d36788",20739:"f97689cb",20984:"23661477",21042:"47f350ff",21258:"917d67ad",21364:"adddcf9c",21393:"161a874c",21396:"79672344",21575:"11ee9f8c",21756:"7f727c83",21947:"d4902817",22108:"d2dca79d",22293:"f40bb160",22461:"fe39ec2e",22636:"4b94259b",23131:"82641341",23157:"52b5d760",23168:"d1b52804",23358:"aef362a6",23512:"23b241ea",23523:"b7a2aef6",23615:"ae8ea995",23664:"37ac192a",24404:"38919970",24744:"659353a2",24871:"dc6fa7da",25370:"f2887640",25425:"e9f3591f",25547:"2f8d6aa5",25624:"caef0281",25971:"2e288bee",26009:"e707fb4b",26027:"cc7c1eac",26051:"3d556467",26285:"58ebab93",26622:"2b27358b",26911:"effa9a83",27418:"dd95895d",27460:"be912ea9",27594:"cde04bbe",27756:"0ed03b8d",27918:"9d895065",28129:"1ffbe4b3",28149:"4509236d",28444:"d5c1df98",28495:"e4bb48a6",29219:"bdb3d1ac",29453:"23f5c49b",29514:"bf62a83c",29631:"982d7e46",29719:"56ede7c7",29737:"da4a5579",29754:"94136e5c",29769:"0c1fe6b2",29917:"43d2419c",29958:"6ddfcff9",30027:"015e96f4",30464:"b50e26b8",30601:"ae51b0af",30727:"a38128fc",30780:"40ec253d",30808:"8059694d",30827:"221edfea",30841:"7f1e8c4a",30959:"897cc5fb",31622:"1a660b08",31737:"a97df8c3",32392:"be4ae757",32433:"ffc8c841",32571:"5a68ea0e",33062:"899053d6",33068:"28d5925f",33071:"7c4d7c9f",33134:"3e06f93f",33439:"94eed950",33643:"ec41862c",33984:"1a125948",34670:"931c0ca5",35334:"a427b525",35537:"2749a8ed",35649:"7fd4670b",35666:"6678dce6",36095:"79abe347",36167:"709e892d",36297:"d84e68fc",36361:"cada38e0",36371:"03d52823",36394:"cec4f3d3",36861:"658021f8",36863:"d3192014",37007:"2a398534",37133:"12d05dea",37394:"cf961f60",37440:"ad91eedb",37633:"ac27cc7e",37930:"d7107184",37941:"d7dd6924",38086:"e86c0753",38428:"1745a80b",38488:"fed1259e",38670:"95a87ba0",38830:"54c7cec4",39200:"5c6f7c82",39818:"c4cf94ec",40216:"e12cc10a",40805:"fab4f39c",40824:"1275dfd3",41303:"ee5a33c7",41525:"23f83a0b",42121:"718ecb40",42277:"76923581",42334:"c619ec07",42463:"b76e9d73",42656:"7eb896e0",42839:"809630d3",42945:"7bc831db",43109:"c216f3c6",43171:"a8a261eb",43238:"615837c5",43310:"9dbe5b6a",43363:"865f0bad",43408:"7b5d71e0",43869:"d025f7a2",43871:"d6514e1d",43972:"fc563273",43993:"3963b871",44343:"36080b90",44436:"bc28d624",44497:"309ea049",44752:"73b67ea3",44817:"0d43e3cd",44867:"41e99a79",44873:"ddf8eb03",44969:"a029e844",45048:"5a966fe0",45244:"7ae3698b",45420:"9ea8e682",46070:"887b4f2a",46103:"bcbd185b",46480:"5b66bd1f",46500:"f247ff59",46526:"6e05ece5",46920:"a547811d",46947:"459ab70f",47265:"089dad04",47789:"008e6065",47822:"2294c876",47890:"44a50114",47969:"056f977a",47999:"414c293c",48114:"449f18fa",48233:"5a40e0a8",48529:"fcb42eab",48610:"a33b77a6",48667:"aa145bbf",50167:"ba6d40e4",50609:"66ec961f",50670:"15fdecc8",50818:"6065a421",50984:"cc360961",51084:"993a0912",51109:"e191ceae",51294:"a61b6085",51578:"8826264e",51684:"a2376509",51705:"82de9a64",51909:"39d56dfd",52080:"ee311e9e",52201:"13081022",52287:"8a6aef24",52535:"2c06b562",52606:"dc9cb80b",52753:"1c442348",53184:"54864967",53237:"94ddde62",53608:"997bbe44",53647:"1736e04b",53733:"b247685f",53893:"283b8554",53941:"74920a49",54252:"ce78743c",54362:"854e7ff1",54403:"8907525f",54488:"adfce42e",54841:"3924bbec",55649:"30799f2b",56040:"d3e2f109",56256:"afb8bbd9",56336:"eabd15a7",56448:"6b519e87",56630:"3abe38b4",56720:"537b0fec",56819:"ff4adfa0",56842:"d428f9ea",56971:"0c0742d2",57690:"9d4f11fd",58074:"5563057d",58696:"d0ad612d",58751:"56eea9b0",58941:"db46bb4e",59262:"fbc6c49f",59364:"9753eafc",59639:"10acef3e",59673:"36f9306b",60026:"32dec193",60314:"38c686c2",60354:"55ef5e64",60499:"32752660",60730:"3e442d99",60846:"a12f97f8",61988:"b5318905",62441:"a8634052",62687:"53894a22",62814:"2bc72397",62865:"64dd0a0c",63058:"764f8770",63210:"bba9810b",63450:"9a192da0",64013:"3b1d4df3",64043:"b6e5e3d9",64065:"19956b64",64067:"510bc3c5",64147:"1fb40b3a",64197:"899dd2c0",64414:"46d9e3cb",64492:"707015fb",64788:"9dd01147",64859:"f507e5fc",65077:"7fe83a3c",65217:"59c6369a",65379:"6de01a83",65537:"a9b4212e",65819:"d56f7156",65899:"a68e2dcc",66065:"8f89b640",66172:"e41fc580",66458:"e3ebaf0c",66647:"6f646df8",66882:"82389a5c",67005:"dfd62478",67143:"f68e470d",67217:"5b8b614b",67448:"a009b328",67619:"fb1f2db8",67622:"ab5a3f4b",67964:"0283795c",68005:"1f753d81",68007:"9e37bb40",68026:"8a06e822",68282:"87047bd7",68573:"dc12bf72",68876:"066ca5ad",68900:"c0a2f1ac",69015:"2b89504a",69186:"a4a11aa9",69201:"40afe3f6",69959:"dd5c1c7b",70731:"183514f3",70866:"efacc5a5",70951:"387d1b7c",70969:"a0c49a35",71133:"e5005393",71478:"e0b21c1e",71947:"12a59fad",72178:"b3bc87a8",72484:"179bd183",72882:"a4173c89",73250:"458e858f",73443:"341bc528",73931:"fc36d55b",73986:"1c35ec49",74121:"4631ebe6",74675:"9a64e8c0",74824:"223d2568",74825:"9fa73b58",74875:"51932674",75394:"311f28fd",75706:"62333167",75847:"44935555",75852:"fa2e6d38",76331:"c7d441a4",76352:"353e722b",76353:"ce3664cc",76629:"f3681826",76939:"03d81dde",77008:"8b0f8273",77142:"1fc0f8ee",77363:"c8d6dea2",77465:"bdb02167",77659:"d7f57ef0",77838:"68858f97",77869:"77594a62",77889:"3c193ffd",77937:"96fcc5b8",77963:"63d81a92",78158:"e84fb357",78195:"849d5634",78463:"ecacbbc9",79357:"4eee968e",79702:"eab2ef42",79716:"d932d43a",80053:"95d45e22",80115:"039033d7",80146:"bd86b455",80175:"63ef4da2",80368:"1c042a70",80632:"f14a4eb3",81148:"f81c6c57",81187:"eaca5039",81812:"3ef619b4",82056:"6204358b",82192:"accd49df",82258:"1e8725bc",82444:"ae2aa553",82687:"3d9df4f2",82763:"6b62fb1f",83075:"2175f94c",83088:"143c362e",83508:"8556c3f8",83549:"ff26f5c5",83561:"be59f03e",83884:"01b14516",84247:"c4765957",84470:"1866b646",84536:"2359f042",85027:"84d5a897",85029:"ff27b86f",85390:"14633250",85620:"72675280",85679:"23bb4bdf",85723:"1ada08b4",85730:"39feec99",85880:"76525273",85950:"b08abec0",86551:"c36837fb",86795:"7595d26c",87387:"b5bd0b0c",87451:"2e65174d",87538:"836cf266",87584:"ba1ad1ed",88663:"e293577a",88777:"90211865",88893:"723fb67e",89094:"d9f38c1e",89126:"17b38429",89127:"70da48ea",89531:"7fed04fe",89624:"4475fd9a",89819:"00f72419",90297:"20cf0257",90439:"afa2dd54",90514:"3f032014",90533:"e1a8dc10",90543:"5078cdf1",90661:"b008d09b",91324:"75f31396",91816:"21ce6b9a",92105:"7e5dd17b",92129:"91fcd43e",92293:"c324234f",92702:"38985873",92778:"38e8baea",93089:"a99bc49b",93160:"8324a4e1",93231:"5dcc8b96",93287:"4388d1fe",93363:"590fdef8",93791:"912d1b85",93811:"28abd01f",94268:"7477a56a",94312:"6a78e9d8",94384:"a79d358b",94488:"9b37e3fa",94672:"c5f1b52c",94734:"c50ae379",94979:"f1410100",95084:"62bae418",95129:"7fcbc4a1",95653:"9ed4cc40",95924:"7e55d8ce",96321:"ea27b65f",96370:"5d4ff218",96758:"b83ea6ac",96897:"342e9402",97279:"b60bee5d",97424:"e6748a63",97547:"29a7ddae",97749:"a43da68e",97889:"6b43f1e4",97920:"e84955d0",98401:"375f09a0",98450:"237af543",98685:"228fb587",99067:"e90a1f5f",99662:"0cac2cea",99827:"0f07feb1",99924:"0128476c"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},a="website:",r.l=(e,f,d,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==a+d){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",a+d),t.src=e),c[e]=[f];var u=(f,d)=>{t.onerror=t.onload=null,clearTimeout(s);var a=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),a&&a.forEach((e=>e(d))),f)return f(d)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"27918",26419218:"62865",32632728:"94672",36027025:"28129",46561613:"22636",61486960:"18869",66222453:"46500",75408299:"56630",80514956:"50609","409da100":"1","686e1776":"323","14f9b0f2":"433","01b81367":"601",d213043e:"638","0cd40d9b":"1175","6fb24ff7":"1358","11ce4159":"1531",cf510f60:"1607","0cb5fac6":"1719","86257f88":"1795",a65441a5:"2033","2cd5cbb6":"2074","1e070f27":"2571","8876813e":"2615","202af6b6":"2801",f8409a7e:"3206","1badf320":"4068","88aaac27":"4138",a372a63b:"4590",cfdf2b5f:"5016","2eaf3a2f":"5758",f8de77c0:"5826",ef3509ef:"6274","19ca9089":"6388",d1576682:"6506","7aad579e":"6517","9e528cee":"6633","78060cbc":"6652","0f8a713b":"6759","9a062e52":"6855","711949de":"7012","125698e9":"7037","1e542d68":"7278","7d9726a8":"7429","3dc68565":"7566",c095dcfa:"8057","7d4c8b40":"8100","90b14878":"8114","4e9707d9":"8159",ce2c6db8:"8248",b819cecb:"8450","8d06f620":"8678",e629dea5:"9010",b831fe65:"9157","6be7ee83":"9197","87d62477":"9551","14eb3368":"9817",be324e15:"9847","8eb4e46b":"10001","3db5b877":"10252","4178efb8":"10537","722146fe":"10722","24556f49":"10744",f8deddba:"10938","97878c65":"10948","4c8cef38":"11126",fc62dd75:"11280",b2f554cd:"11477","0e22a4b2":"11558","2e1ef406":"11665",a7023ddc:"11713",ff13fcd4:"12174","204dd830":"12391","479321cf":"12454","957809ee":"12785",b0e766b4:"12949",bf04367c:"13089","90f88783":"13481","3720c009":"13751","318f6953":"13774","769e9ed2":"13869","0ff9eadc":"14640",f18fbdcd:"15050","56a06382":"15091",fc3ae8bf:"15411","9d3c1a44":"15428","4bddfbdb":"15437",f9651623:"15494","48b0f434":"15867","57bd32c7":"15911","861abce9":"15995",eb514dbf:"16039","42611ca7":"16144",cce51cf2:"16447",f5b890ba:"16502",c67cfbac:"16732",ed26bce9:"16835","427e2c3d":"16836","232c92ba":"16974",fcb295ad:"17642","92999a1c":"18442","5cde4d5c":"18496",cdad2d50:"18509","5419aa43":"18914","83943ce1":"19821",e8700426:"19902","8f6f7bb5":"19950",dd99bf53:"20019","752c6bfa":"20384","4b8535eb":"20612",dae127b6:"20728","3fc19409":"20735","8c4a23a7":"20739",f440db1d:"20984","39b245d7":"21042",f5f247cc:"21258",bb624440:"21364","7c4e6415":"21393","459b1c5c":"21396","0b289f4d":"21575","3b568f5a":"21756","3e7d7789":"22108","54024cf2":"22293",ddec1041:"22461",c5ed658f:"23131","89a53707":"23157","1cb65c7d":"23168","766b2171":"23358",aa431e4a:"23512","33d935e4":"23523","71dfd0a8":"23615",fd8ac5c7:"23664",f7bfbae9:"24404",ec9f380e:"24744","24a07a83":"24871",bc6c5049:"25370","68d17c71":"25425",a0d8b188:"25547","77b7a366":"25624","0b1dc2cd":"25971",a9e1900f:"26009",ffef4e04:"26027","3e1aa1b6":"26051","18dd62e9":"26285","8d701eb4":"26622",b184781f:"26911","63aeb80b":"27418",a18798d1:"27460","63243ad1":"27594","39a2c297":"27756","44183a86":"28149","376f2f8c":"28444","860d7f34":"28495","1cbc9cf3":"29219",affd832d:"29453","1be78505":"29514","2dffafe2":"29631","5552634a":"29719",f7b99134:"29737","3f5148d4":"29754","4fa82ff8":"29769","1365e0a6":"29917",a6d9fcee:"29958","3353503a":"30027","2fafdb99":"30464","0681d8e1":"30601","60262e21":"30727","271a7b09":"30808",a86b7c98:"30827",eb1a9ca0:"30841","09d7020f":"30959","819f977d":"31622",cd988af7:"31737",b072568e:"32433",ec4f6a24:"32571","66a08410":"33062",a701d349:"33068","937d7adc":"33071",bc74446d:"33134","53df8e83":"33439",c6200b76:"33643",e746f759:"33984",b03b3eac:"35334","9529487c":"35537","7b667a7f":"35649","068b8e98":"35666","69ea3d78":"36095","423a0e62":"36167","0c7f16c1":"36297","4f0c5301":"36361","163fb342":"36371",edfea66c:"36394","2048b789":"36861",df212c12:"36863","8593ff01":"37007",be1aaa14:"37133","151c652b":"37394","79765aba":"37440","907bfa82":"37633","600433a8":"37930","2d15743f":"37941",db676956:"38086","1e90ea6d":"38428","759c01e9":"38488","2804bc6d":"38670","9ff86157":"38830","2b3490d9":"39200",fb2dd7db:"39818","6e15e01b":"40216",c19ad3d7:"40805","47b3b041":"40824","5d48ec89":"41303",c5980a65:"41525","2ed8359a":"42121",d9c57d72:"42277","7c9b29bb":"42334","14f81d84":"42463","073e718f":"42656","170d6c86":"42839","5e371f0f":"42945","5a3a719f":"43109",e8d2c25f:"43171","5534fb85":"43238",f761bd07:"43310","03193cc0":"43363","87f861ef":"43408","40c69ef1":"43869",d43cc2ec:"43871","0e736169":"43972",d8fdbe7a:"43993","9f025583":"44343","9edb948e":"44436",f90d8a46:"44497","69bc0e2c":"44752","31fff4a5":"44817",c83c6fdf:"44867","1910946c":"44873","3d0b0327":"44969",d7cb860d:"45048","128a5f34":"45244",fe36d4cd:"45420","77530bb9":"46070",ccc49370:"46103","4d69ebec":"46480",a452709a:"46526","7d55a0f0":"46920","752283db":"46947","3db947d3":"47265",e8f62c55:"47789",b1144183:"47822",b7a8f57a:"47890","89c16be8":"47969","1a2b669c":"47999","2497986c":"48114","4e986fc6":"48233","4931a616":"48529","6875c492":"48610","046e2194":"48667","2e94733f":"50167","0684a904":"50670","4ec8a4a9":"50818","54eec65a":"50984",c7d98fe2:"51084","976dc663":"51109","51ada3e3":"51294","8e65fbae":"51578","3f885d22":"51684",a6746ab5:"51705","2df21221":"51909","626ef9ce":"52080",f41d5eb1:"52201","66926af2":"52287","814f3328":"52535",bcbbf42e:"52606","146ca1ad":"52753",dd5ac54b:"53184","1df93b7f":"53237","9e4087bc":"53608",fbcfc993:"53647","245d4974":"53733",fac0f815:"53941","679bd524":"54252",c1721191:"54362","062a1a43":"54403","4ab2bb95":"54488",f3f44898:"54841",b49860f1:"55649",efef7eb9:"56040","5c653e8d":"56256","3f2d0a0e":"56336",be1609b7:"56448",f1d6ac1e:"56720",bec065e9:"56819","4fd1aaa1":"56842",daf4eece:"56971","2d92dfb9":"57690",b1c60aef:"58074","6196de5a":"58696",f9cc98ab:"58751",d5875de2:"58941",dd3540fa:"59364",bf95ed3d:"59639","1202c0b0":"59673",f714495d:"60026",eda853ca:"60314","788e7a3c":"60354",b0cf9b20:"60499",b65c3624:"60730","3691c6ec":"60846",c4542d8c:"61988","2172420b":"62441",bd6bded1:"62687","750b9005":"62814","5b4d43ff":"63058","5794c75f":"63210",ccfb5782:"63450","01a85c17":"64013","60fa46e1":"64043",db0cc9f1:"64065","365a10b6":"64067",b15686f4:"64147","8de38bef":"64197","16ea2389":"64414","5613e7cf":"64492","0ae21139":"64788","93bce8ec":"64859",ad536080:"65077","7599f4f1":"65217","43bdf210":"65379",f7f505dc:"65537",f41735e0:"65819",e7d7123e:"65899","303db6c1":"66065",e13166f5:"66172","49b772d3":"66458","7f3e2518":"66647",e5f23965:"66882",d7cf5e1f:"67005","2bd8a6cf":"67143","49af4b98":"67217","1740b646":"67448","98ae4a66":"67619",dbbb982f:"67622",fab64b27:"67964",a91ae4c2:"68005","250d5d50":"68007","6c24c6c6":"68026",a88c4343:"68282",c532175a:"68573","676566fe":"68876","8b38bcbd":"68900","3df11149":"69015",f09f371a:"69186","688193a4":"69201","1aebc10b":"69959","2adc0ba4":"70731",dffc4bd7:"70866",e570d6db:"70951",a20401e4:"70969",fe55d425:"71133","771f38eb":"71478","7ec3d878":"72178","195293b6":"72484","088b3228":"72882",edd7d65c:"73250","110403ef":"73443",a641c963:"73931","5f3507b2":"73986","55960ee5":"74121","8e9e3e30":"74675","0627e785":"74824","22e78681":"74825","81d944d1":"74875",caa6a735:"75394","9e4ae2cc":"75706","2e4722bd":"75847",f01f44c3:"75852",be0fdac8:"76331","17ae22f4":"76352","51985ffa":"76353",b78f40a6:"76629","1e76467f":"76939","4a1ab9c8":"77008","44ac4dbb":"77142","69c95af3":"77363","6fe6957f":"77465",fc3deafd:"77659",a26a8dd3:"77838","78dd992d":"77869","350ea002":"77889",ea313555:"77937",c5de23c8:"77963",fffcdd84:"78158","2573a9a7":"78195",b80596f4:"78463",f616eec2:"79357","7e9fb3d2":"79702",b2d692e7:"79716","935f2afb":"80053",b717531a:"80115",d84e8684:"80146","140321b2":"80175","620e72fa":"80368","59abedb6":"80632","4c2d8fdb":"81148",b972506a:"81187","405d593f":"81812","016d6d21":"82056",a5a57258:"82192","488a99ce":"82258",b8f3d4c8:"82444","6eae5b23":"82687",a33962b9:"82763",ac1be023:"83075","2994c7d6":"83088","413318e8":"83508","7d19a980":"83549","7f6c6f55":"83561","4a3d03f6":"83884","23ef67df":"84247","00568285":"84470",b104f86f:"84536","02401b2b":"85027","69e0bfe1":"85029","6dd55018":"85390","8526ffa3":"85620",d93dbc28:"85679","6ea8a316":"85723","8c079f7d":"85880","22eddac1":"85950","04d8c43e":"86551","3c3b6fb9":"86795",d4c755e6:"87387","1b469a71":"87451","9c090340":"87538",e898b7f3:"87584","2c114e85":"88663","17cacc08":"88893","3d4b58f3":"89094",c8acf440:"89126","99b94e0d":"89531",b6e1085a:"89624",e4c23816:"89819",b9e9925e:"90297",fcbcdf3c:"90439",fba28ebc:"90514",b2b675dd:"90533",fd485bd3:"90543",fd27c808:"90661","8c241076":"91324","28508d4c":"91816",ffc0ac08:"92105","15a4ce61":"92129","4d66ab66":"92293",aacc3e35:"92702",a581e456:"92778",a6aa9e1f:"93089","24adbf31":"93160","9f838734":"93231",fea2b255:"93287","54350ada":"93363",c6c73cac:"93791","1d14c2f4":"93811","6b50e60a":"94268",cae36b15:"94312",c413f1b7:"94384","37e4cb73":"94488","98738a6c":"94734","450b14c3":"94979","351d319b":"95084","357f2143":"95129",b652e05c:"95653","4665933c":"95924","90fdb9b5":"96321","43dc46d9":"96370","4ddbfcdc":"96758","4aa262b7":"96897","0034bcd6":"97424",fff5a6d1:"97547",a219b733:"97749",e16afba1:"97889","1a4e3797":"97920",c4f95133:"98401","1aa28b52":"98450",b38a02d7:"98685",bb86fac5:"99067","193b481a":"99662",bf5d9784:"99827",df203c0f:"99924"}[e]||e,r.p+r.u(e)},(()=>{var e={51303:0,40532:0};r.f.j=(f,d)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(40532|51303)$/.test(f))e[f]=0;else{var a=new Promise(((d,a)=>c=e[f]=[d,a]));d.push(c[2]=a);var b=r.p+r.u(f),t=new Error;r.l(b,(d=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var a=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+f+" failed.\n("+a+": "+b+")",t.name="ChunkLoadError",t.type=a,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,d)=>{var c,a,b=d[0],t=d[1],o=d[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(d);n<b.length;n++)a=b[n],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(i)},d=self.webpackChunkwebsite=self.webpackChunkwebsite||[];d.forEach(f.bind(null,0)),d.push=f.bind(null,d.push.bind(d))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.b7c7f339.js b/assets/js/runtime~main.b7c7f339.js deleted file mode 100644 index d88d1abdf9a..00000000000 --- a/assets/js/runtime~main.b7c7f339.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,f,d,a,c,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,e=[],r.O=(f,d,a,c)=>{if(!d){var b=1/0;for(i=0;i<e.length;i++){d=e[i][0],a=e[i][1],c=e[i][2];for(var t=!0,o=0;o<d.length;o++)(!1&c||b>=c)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,c<b&&(b=c));if(t){e.splice(i--,1);var n=a();void 0!==n&&(f=n)}}return f}c=c||0;for(var i=e.length;i>0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,a,c]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};f=f||[null,d({}),d([]),d(d)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(c,b),c},r.d=(e,f)=>{for(var d in f)r.o(f,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:f[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,d)=>(r.f[d](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"409da100",19:"dd99bf53",26:"f714495d",27:"3353503a",53:"935f2afb",115:"b717531a",146:"d84e8684",175:"140321b2",216:"6e15e01b",252:"3db5b877",297:"b9e9925e",314:"eda853ca",323:"686e1776",354:"788e7a3c",368:"620e72fa",384:"752c6bfa",433:"14f9b0f2",439:"fcbcdf3c",464:"2fafdb99",499:"b0cf9b20",514:"fba28ebc",533:"b2b675dd",537:"4178efb8",543:"fd485bd3",601:"01b81367",609:"80514956",612:"4b8535eb",632:"59abedb6",638:"d213043e",661:"fd27c808",670:"0684a904",722:"722146fe",727:"60262e21",730:"b65c3624",731:"2adc0ba4",735:"3fc19409",739:"8c4a23a7",744:"24556f49",805:"c19ad3d7",808:"271a7b09",818:"4ec8a4a9",824:"47b3b041",827:"a86b7c98",841:"eb1a9ca0",846:"3691c6ec",866:"dffc4bd7",938:"f8deddba",948:"97878c65",951:"e570d6db",959:"09d7020f",969:"a20401e4",984:"54eec65a",1042:"39b245d7",1084:"c7d98fe2",1109:"976dc663",1126:"4c8cef38",1133:"fe55d425",1148:"4c2d8fdb",1175:"0cd40d9b",1187:"b972506a",1258:"f5f247cc",1280:"fc62dd75",1294:"51ada3e3",1303:"5d48ec89",1324:"8c241076",1358:"6fb24ff7",1364:"bb624440",1393:"7c4e6415",1396:"459b1c5c",1477:"b2f554cd",1478:"771f38eb",1512:"90b14878",1525:"c5980a65",1531:"11ce4159",1558:"0e22a4b2",1575:"0b289f4d",1578:"8e65fbae",1607:"cf510f60",1622:"819f977d",1665:"2e1ef406",1684:"3f885d22",1705:"a6746ab5",1713:"a7023ddc",1719:"0cb5fac6",1737:"cd988af7",1756:"3b568f5a",1783:"54024cf2",1795:"86257f88",1812:"405d593f",1816:"28508d4c",1909:"2df21221",1988:"c4542d8c",2033:"a65441a5",2056:"016d6d21",2074:"2cd5cbb6",2080:"626ef9ce",2105:"ffc0ac08",2108:"3e7d7789",2121:"2ed8359a",2129:"15a4ce61",2174:"ff13fcd4",2178:"7ec3d878",2192:"a5a57258",2201:"f41d5eb1",2258:"488a99ce",2277:"d9c57d72",2287:"66926af2",2293:"4d66ab66",2334:"7c9b29bb",2391:"204dd830",2433:"b072568e",2441:"2172420b",2444:"b8f3d4c8",2454:"479321cf",2461:"ddec1041",2463:"14f81d84",2484:"195293b6",2535:"814f3328",2571:"1e070f27",2606:"bcbbf42e",2615:"8876813e",2636:"46561613",2656:"073e718f",2687:"6eae5b23",2700:"b49860f1",2702:"aacc3e35",2753:"146ca1ad",2763:"a33962b9",2778:"a581e456",2785:"957809ee",2801:"202af6b6",2814:"750b9005",2839:"170d6c86",2865:"26419218",2882:"088b3228",2945:"5e371f0f",2949:"b0e766b4",3058:"5b4d43ff",3062:"66a08410",3068:"a701d349",3071:"937d7adc",3075:"ac1be023",3088:"2994c7d6",3089:"a6aa9e1f",3109:"5a3a719f",3131:"c5ed658f",3134:"bc74446d",3157:"89a53707",3160:"24adbf31",3168:"1cb65c7d",3171:"e8d2c25f",3184:"dd5ac54b",3206:"f8409a7e",3210:"5794c75f",3231:"9f838734",3237:"1df93b7f",3238:"5534fb85",3250:"edd7d65c",3287:"fea2b255",3310:"f761bd07",3358:"766b2171",3363:"03193cc0",3380:"b819cecb",3408:"87f861ef",3439:"53df8e83",3443:"110403ef",3450:"ccfb5782",3481:"90f88783",3508:"413318e8",3512:"aa431e4a",3523:"33d935e4",3535:"f440db1d",3549:"7d19a980",3561:"7f6c6f55",3608:"9e4087bc",3615:"71dfd0a8",3643:"c6200b76",3647:"fbcfc993",3664:"fd8ac5c7",3733:"245d4974",3751:"3720c009",3774:"318f6953",3791:"c6c73cac",3811:"1d14c2f4",3869:"40c69ef1",3871:"d43cc2ec",3884:"4a3d03f6",3916:"bf04367c",3931:"a641c963",3941:"fac0f815",3972:"0e736169",3984:"e746f759",3986:"5f3507b2",3993:"d8fdbe7a",4013:"01a85c17",4043:"60fa46e1",4065:"db0cc9f1",4067:"365a10b6",4068:"1badf320",4121:"55960ee5",4138:"88aaac27",4147:"b15686f4",4197:"8de38bef",4247:"23ef67df",4252:"679bd524",4268:"6b50e60a",4312:"cae36b15",4343:"9f025583",4362:"c1721191",4384:"c413f1b7",4403:"062a1a43",4404:"f7bfbae9",4414:"16ea2389",4436:"9edb948e",4470:"00568285",4488:"37e4cb73",4492:"5613e7cf",4497:"f90d8a46",4536:"b104f86f",4590:"a372a63b",4672:"32632728",4675:"8e9e3e30",4734:"98738a6c",4744:"ec9f380e",4752:"69bc0e2c",4788:"0ae21139",4817:"31fff4a5",4824:"0627e785",4825:"22e78681",4841:"f3f44898",4859:"93bce8ec",4867:"c83c6fdf",4871:"24a07a83",4873:"1910946c",4875:"81d944d1",4903:"bd6bded1",4969:"3d0b0327",4979:"450b14c3",5027:"02401b2b",5029:"69e0bfe1",5048:"d7cb860d",5050:"f18fbdcd",5077:"ad536080",5084:"351d319b",5091:"56a06382",5129:"357f2143",5217:"7599f4f1",5244:"128a5f34",5334:"b03b3eac",5370:"bc6c5049",5379:"43bdf210",5390:"6dd55018",5394:"caa6a735",5411:"fc3ae8bf",5420:"fe36d4cd",5425:"68d17c71",5428:"9d3c1a44",5437:"4bddfbdb",5494:"f9651623",5537:"9529487c",5547:"a0d8b188",5620:"8526ffa3",5624:"77b7a366",5649:"7b667a7f",5653:"b652e05c",5666:"068b8e98",5679:"d93dbc28",5706:"9e4ae2cc",5723:"6ea8a316",5758:"2eaf3a2f",5819:"f41735e0",5826:"f8de77c0",5847:"2e4722bd",5852:"f01f44c3",5867:"48b0f434",5880:"8c079f7d",5899:"e7d7123e",5911:"57bd32c7",5924:"4665933c",5950:"22eddac1",5971:"0b1dc2cd",5995:"861abce9",6009:"a9e1900f",6018:"8eb4e46b",6027:"ffef4e04",6039:"eb514dbf",6040:"efef7eb9",6051:"3e1aa1b6",6065:"303db6c1",6070:"77530bb9",6095:"69ea3d78",6103:"ccc49370",6144:"42611ca7",6154:"54350ada",6167:"423a0e62",6172:"e13166f5",6256:"5c653e8d",6274:"ef3509ef",6282:"4ab2bb95",6285:"18dd62e9",6297:"0c7f16c1",6321:"90fdb9b5",6331:"be0fdac8",6336:"3f2d0a0e",6352:"17ae22f4",6353:"51985ffa",6361:"4f0c5301",6370:"43dc46d9",6371:"163fb342",6388:"19ca9089",6394:"edfea66c",6447:"cce51cf2",6448:"be1609b7",6458:"49b772d3",6480:"4d69ebec",6500:"66222453",6502:"f5b890ba",6506:"d1576682",6517:"7aad579e",6526:"a452709a",6551:"04d8c43e",6622:"8d701eb4",6629:"b78f40a6",6630:"75408299",6633:"9e528cee",6647:"7f3e2518",6652:"78060cbc",6720:"f1d6ac1e",6728:"769e9ed2",6732:"c67cfbac",6755:"e16afba1",6758:"4ddbfcdc",6759:"0f8a713b",6795:"3c3b6fb9",6819:"bec065e9",6835:"ed26bce9",6836:"427e2c3d",6842:"4fd1aaa1",6855:"9a062e52",6861:"2048b789",6863:"df212c12",6882:"e5f23965",6897:"4aa262b7",6911:"b184781f",6920:"7d55a0f0",6939:"1e76467f",6947:"752283db",6971:"daf4eece",6974:"232c92ba",7005:"d7cf5e1f",7007:"8593ff01",7008:"4a1ab9c8",7012:"711949de",7037:"125698e9",7133:"be1aaa14",7142:"44ac4dbb",7143:"2bd8a6cf",7217:"49af4b98",7265:"3db947d3",7278:"1e542d68",7363:"69c95af3",7387:"d4c755e6",7394:"151c652b",7418:"63aeb80b",7424:"0034bcd6",7429:"7d9726a8",7440:"79765aba",7448:"1740b646",7451:"1b469a71",7460:"a18798d1",7465:"6fe6957f",7538:"9c090340",7547:"fff5a6d1",7566:"3dc68565",7584:"e898b7f3",7594:"63243ad1",7619:"98ae4a66",7622:"dbbb982f",7633:"907bfa82",7642:"fcb295ad",7659:"fc3deafd",7690:"2d92dfb9",7749:"a219b733",7756:"39a2c297",7789:"e8f62c55",7822:"b1144183",7838:"a26a8dd3",7869:"78dd992d",7889:"350ea002",7890:"b7a8f57a",7918:"17896441",7920:"1a4e3797",7930:"600433a8",7937:"ea313555",7941:"2d15743f",7963:"c5de23c8",7964:"fab64b27",7969:"89c16be8",7999:"1a2b669c",8005:"a91ae4c2",8007:"250d5d50",8026:"6c24c6c6",8057:"c095dcfa",8074:"b1c60aef",8086:"db676956",8114:"2497986c",8129:"36027025",8149:"44183a86",8159:"4e9707d9",8195:"2573a9a7",8233:"4e986fc6",8248:"ce2c6db8",8282:"a88c4343",8357:"0681d8e1",8401:"c4f95133",8428:"1e90ea6d",8442:"92999a1c",8444:"376f2f8c",8450:"1aa28b52",8463:"b80596f4",8488:"759c01e9",8495:"860d7f34",8496:"5cde4d5c",8509:"cdad2d50",8529:"4931a616",8573:"c532175a",8610:"6875c492",8663:"2c114e85",8667:"046e2194",8670:"2804bc6d",8678:"8d06f620",8685:"b38a02d7",8696:"6196de5a",8751:"f9cc98ab",8830:"9ff86157",8869:"61486960",8876:"676566fe",8881:"f7f505dc",8893:"17cacc08",8898:"ec4f6a24",8900:"8b38bcbd",8914:"5419aa43",8941:"d5875de2",9010:"e629dea5",9015:"3df11149",9067:"bb86fac5",9094:"3d4b58f3",9126:"c8acf440",9157:"b831fe65",9186:"f09f371a",9197:"6be7ee83",9200:"2b3490d9",9201:"688193a4",9219:"1cbc9cf3",9357:"f616eec2",9364:"dd3540fa",9453:"affd832d",9514:"1be78505",9531:"99b94e0d",9551:"87d62477",9624:"b6e1085a",9631:"2dffafe2",9639:"bf95ed3d",9662:"193b481a",9673:"1202c0b0",9702:"7e9fb3d2",9716:"b2d692e7",9719:"5552634a",9737:"f7b99134",9754:"3f5148d4",9769:"4fa82ff8",9817:"14eb3368",9818:"fb2dd7db",9819:"e4c23816",9821:"83943ce1",9827:"bf5d9784",9847:"be324e15",9902:"e8700426",9917:"1365e0a6",9924:"df203c0f",9950:"8f6f7bb5",9958:"a6d9fcee",9959:"1aebc10b"}[e]||e)+"."+{1:"1636f741",19:"81bfd095",26:"9172398e",27:"e0e8667e",53:"e4a00393",115:"1419f61b",146:"ca10318e",175:"6d0c8ee2",216:"72c9a56e",252:"5bf08b8b",297:"00995af4",314:"fd69bb83",323:"d94a52c5",354:"2d6eda8d",368:"dc8d3c75",384:"962a0ef6",433:"389ba6da",439:"cdb71939",464:"4ebc0bc6",499:"707a5ff9",514:"10468891",533:"7f94790f",537:"88393d86",543:"7daeec12",601:"bc8690a1",609:"3dfd96bc",612:"df8acacc",632:"abda1003",638:"26057519",661:"5e1d9661",670:"db1d8b27",722:"4d803d8f",727:"c3f15032",730:"34f6cb5e",731:"d0591a26",735:"59395fb8",739:"efed62da",744:"8a8d4bec",780:"d5e09d6d",805:"f2491f65",808:"c59c003f",818:"d6d1b4ab",824:"e14c0ade",827:"c77b1c37",841:"b2ca298d",846:"1b37f16f",866:"56bc275b",938:"532a2fa6",948:"ce826328",951:"5f9dade4",959:"b3cae273",969:"8ab92f76",984:"15b3c20a",1042:"86f6a98f",1084:"89b445ff",1109:"553bf969",1126:"93be090c",1133:"a8681006",1148:"c1808cff",1175:"0eaad8c0",1187:"33ba0baf",1258:"966aced7",1280:"54c3e13f",1294:"d44d0d14",1303:"17edefbb",1324:"b55fee09",1358:"b96c4d0b",1364:"2c3310dd",1393:"85caf0b6",1396:"70643eb5",1477:"65473cef",1478:"6dabf2a5",1512:"0de805cb",1525:"8ec9e95a",1531:"fb2dd90d",1558:"d482b639",1575:"9f04606d",1578:"2034a2d2",1607:"7efa5bc1",1622:"e4c2c495",1665:"5e9b6d58",1684:"e3954697",1705:"a6ec2c4c",1713:"2ebb91ff",1719:"25cb92a6",1737:"d755ed7f",1756:"6f387076",1783:"1e9f4e38",1795:"5b564cd1",1812:"3e4dacad",1816:"214abf2b",1909:"26680769",1947:"50774d97",1988:"f48bdc8c",2033:"48b06076",2056:"df7ca08e",2074:"46e2c695",2080:"c9a27d35",2105:"1f345f67",2108:"3cf07ea7",2121:"2e63bbb4",2129:"1419bb38",2174:"20b181cf",2178:"136f9042",2192:"5ac91281",2201:"fcf9ad12",2258:"d4313d13",2277:"6a67e8de",2287:"b860e825",2293:"e287665e",2334:"8099e0e8",2391:"b1833362",2392:"54ee0f8c",2433:"114a1c83",2441:"7f574c46",2444:"1c928742",2454:"633bb3dd",2461:"271ff754",2463:"dc0bc4b8",2484:"3b6e5efa",2535:"4463a7d3",2571:"8a307946",2606:"1dcbb974",2615:"0eeff7a1",2636:"6e89569d",2656:"74f8d7fd",2687:"a2690693",2700:"ff89a7f6",2702:"1e5d6269",2753:"3d9bff70",2763:"b30fc7e1",2778:"2797b077",2785:"29088a3c",2801:"513f44b9",2814:"56dfdc31",2839:"ec9b8614",2865:"0a760924",2882:"c92fd087",2945:"b960cf4c",2949:"51a2f42a",3058:"1a328eef",3062:"97667856",3068:"637b0614",3071:"ac0053de",3075:"d3efe7ac",3088:"94a4e91f",3089:"6df45cd0",3109:"a86f940c",3131:"10a48c77",3134:"9aff22ce",3157:"69f7ea99",3160:"f7bd552f",3168:"9e0668a8",3171:"49cabd06",3184:"f6f6d365",3206:"fb0cd7af",3210:"047b7365",3231:"a2b29331",3237:"544fda6c",3238:"c3d88f18",3250:"7b7f5bca",3287:"d272d8bc",3310:"bfd3fa11",3358:"872855c8",3363:"f387ef9b",3380:"1109e264",3408:"e399e304",3439:"99d5018a",3443:"0565ca1d",3450:"a69cecc1",3481:"a49c4640",3508:"06d02761",3512:"ca5ac251",3523:"f3891fb3",3535:"1bcc53dd",3549:"66f700df",3561:"b7f1dba2",3608:"eecb89b0",3615:"e7e3fae3",3643:"d377e587",3647:"2caa3c49",3664:"80dd90a4",3733:"b7e3ec45",3751:"f7275849",3774:"8ec50218",3791:"dffb19fb",3811:"03291b85",3869:"6c086c0a",3871:"1e45388c",3884:"d20ef42d",3893:"72192441",3916:"473c80db",3931:"91b2c095",3941:"a637b488",3972:"d91f3868",3984:"aaa2ab80",3986:"cad679f4",3993:"49ef283d",4013:"9c5c9b0d",4043:"c6af3737",4065:"f2927ff7",4067:"2df24fa3",4068:"6d36c226",4121:"011ee45d",4138:"0e10d391",4147:"5241c7ad",4197:"ea97f77e",4247:"1dbd2e57",4252:"b17d1ec7",4268:"8e4b308a",4312:"3bf41b72",4343:"37f6e918",4362:"3e79b686",4384:"a015b083",4403:"da8f58eb",4404:"9d39fe55",4414:"992db5e1",4436:"99a0394c",4470:"33494716",4488:"7ebdd47f",4492:"b49c10e3",4497:"a64dbc04",4536:"966c57a6",4590:"9cc81a6a",4670:"275fd1d9",4672:"96529d1f",4675:"3fadd857",4734:"8c2047bf",4744:"cbf2b84d",4752:"e7f9cf7d",4788:"dafa5cb4",4817:"b2a5106c",4824:"d76891bf",4825:"9fd34144",4841:"3ea2f523",4859:"8355e4dd",4867:"05aafe85",4871:"7798beba",4873:"db06c448",4875:"48d8a669",4903:"93dfd685",4969:"38ef35fc",4979:"e4df2314",5027:"b8f7007a",5029:"c5549ed4",5048:"0d2a6bf0",5050:"65b4b669",5077:"ca5d2959",5084:"03a4a3ab",5091:"6c6ffc0b",5129:"f8c6b502",5217:"5dd577d2",5244:"52c1d322",5334:"e806946d",5370:"4db07042",5379:"e9d7159f",5390:"cceda539",5394:"e86e456f",5411:"b465b9a0",5420:"f5f3d960",5425:"ad6c1438",5428:"4ff18cc8",5437:"21c1a6d5",5494:"7173ae43",5537:"fa36ef49",5547:"05b6a8dd",5620:"79b584ba",5624:"f922420b",5649:"fa34c87a",5653:"59ecf577",5666:"a59995ff",5679:"c5914b9c",5706:"6eb4065e",5723:"f10b7939",5730:"b7c57b9c",5758:"df663f84",5819:"d6bf1257",5826:"35b2d96a",5847:"97b5f0a4",5852:"d8d4c891",5867:"7a398d57",5880:"4fd3e085",5899:"eb777111",5911:"78322b6b",5924:"9a995aa2",5950:"3eb330b9",5971:"207f9a3e",5995:"efda154f",6009:"9b72440e",6018:"54d7c6e0",6027:"d2ae2a50",6039:"f0ab3f8b",6040:"2d0f50a0",6051:"93dbce9d",6065:"2ceb0e42",6070:"68426064",6095:"56dc71d2",6103:"b217df49",6144:"fe0313a7",6154:"2ac61142",6167:"92d1e223",6172:"f8518489",6256:"39df2a71",6274:"57a61e0b",6282:"24cdd91d",6285:"add3c4c3",6297:"56b4a48e",6321:"c6fee719",6331:"d77ffe0d",6336:"8cc7f732",6352:"4339294e",6353:"ce564ac0",6361:"088212bb",6370:"1eac9964",6371:"2061f94e",6388:"f4ad3aeb",6394:"b7f94265",6432:"f516e3d1",6447:"737cc852",6448:"20291714",6458:"5c877858",6480:"2f907b31",6500:"4dcd0483",6502:"98d7c669",6506:"17402f99",6517:"3d11a665",6526:"186febfe",6551:"aee81211",6622:"569701a6",6629:"bf83221d",6630:"f8332bfc",6633:"4136debd",6647:"84821248",6652:"fa1b780f",6720:"78f2fda6",6728:"7045c1c8",6732:"11e7de29",6755:"5c8d4954",6758:"c4f28645",6759:"18c21049",6795:"8bda14ce",6819:"38d250ba",6835:"03f71417",6836:"8f996118",6842:"009d6638",6855:"5f0c08b7",6861:"3cb580dd",6863:"2b04b6cb",6882:"1ff5f462",6897:"60472b77",6911:"1add21f8",6920:"3640e2eb",6939:"c9dfd363",6947:"174f5159",6971:"b7b46b77",6974:"3177ef24",7005:"55dfdbc4",7007:"26a6a233",7008:"2a4aa1f0",7012:"505f26ef",7037:"73615ac4",7133:"6d3fef0c",7142:"80de6629",7143:"a7381ec8",7217:"9d8402ea",7265:"882207b0",7278:"90294187",7279:"22e8b3f8",7363:"325898c3",7387:"0b026baf",7394:"99da601a",7418:"b2c7c976",7424:"07008b68",7429:"48b7ef1a",7440:"5dce3e69",7448:"0a4424fc",7451:"28f39834",7460:"6786a819",7465:"8e85147c",7538:"3654d782",7547:"7390e3ff",7566:"a77cf993",7584:"1a8819b4",7594:"d8eb69c0",7619:"d5cf8e9a",7622:"da357996",7633:"7727ec8d",7642:"e39762a9",7659:"c41e85b6",7690:"5748e210",7749:"79c5b378",7756:"1289a44f",7789:"fb855fed",7822:"b5af15dd",7838:"699d2c09",7869:"b447f03d",7889:"40642b20",7890:"ed128740",7918:"d36c3217",7920:"2712433e",7930:"d62b0992",7937:"ec4a624b",7941:"74150ef1",7963:"2d01af65",7964:"cfe1e3a3",7969:"2cf21373",7999:"a2a5c543",8005:"0660e320",8007:"21e85a9f",8026:"715e11ae",8057:"8424e0e5",8074:"605ca59d",8086:"23a41c29",8114:"b9358fd5",8129:"0a759b6a",8149:"572d8202",8159:"70e4729a",8195:"eae4e3af",8233:"4c608e63",8248:"b5f8128e",8282:"b34f49bf",8357:"c4a8ee4d",8401:"6eb33f15",8428:"d22b431f",8442:"b8df9ede",8444:"4b2f0f67",8450:"e4f71fe8",8463:"64a245cd",8488:"d1824a12",8495:"c81faa15",8496:"f75a0d9e",8509:"cc2a7b32",8529:"ae3384f8",8573:"e2157934",8610:"9d5863f4",8663:"4238c3fa",8667:"cd029424",8670:"83e73047",8678:"cb05c1f4",8685:"25ef285b",8696:"f61ac44c",8751:"c9821767",8777:"93eac301",8830:"a9b98ed2",8869:"aaef6a4c",8876:"a8142acc",8881:"fbecb8f4",8893:"e0e6fa7a",8898:"75ea453c",8900:"371763d4",8914:"bb1d4d7f",8941:"211d6286",9010:"754f7761",9015:"5fbcbd5c",9067:"b5cfef45",9094:"940b9b31",9126:"8a64dcfd",9127:"686f7823",9157:"7564adc0",9186:"8ceeb955",9197:"58d68ae7",9200:"7cc523de",9201:"4b40503a",9219:"f7114b88",9262:"4c68992b",9357:"eda63aa1",9364:"0a8cf981",9453:"5decf110",9514:"077cb454",9531:"05c3f6e9",9551:"714bcbfd",9624:"9308dce6",9631:"5722a260",9639:"96f00ba2",9662:"4f4fa395",9673:"8ec8755c",9702:"2345714e",9716:"b94c42f7",9719:"4bfd380d",9737:"d4bc9035",9754:"a6030c79",9769:"0b537110",9817:"350b9fa4",9818:"4855a250",9819:"e0539788",9821:"243cef91",9827:"ab1d5cf6",9847:"57d3de02",9902:"249ad59c",9917:"73ef177f",9924:"e542d5cd",9926:"40f41297",9950:"52a79037",9958:"bb5fad90",9959:"d6207dc2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},c="website:",r.l=(e,f,d,b)=>{if(a[e])a[e].push(f);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==c+d){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",c+d),t.src=e),a[e]=[f];var u=(f,d)=>{t.onerror=t.onload=null,clearTimeout(s);var c=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(d))),f)return f(d)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"7918",26419218:"2865",32632728:"4672",36027025:"8129",46561613:"2636",61486960:"8869",66222453:"6500",75408299:"6630",80514956:"609","409da100":"1",dd99bf53:"19",f714495d:"26","3353503a":"27","935f2afb":"53",b717531a:"115",d84e8684:"146","140321b2":"175","6e15e01b":"216","3db5b877":"252",b9e9925e:"297",eda853ca:"314","686e1776":"323","788e7a3c":"354","620e72fa":"368","752c6bfa":"384","14f9b0f2":"433",fcbcdf3c:"439","2fafdb99":"464",b0cf9b20:"499",fba28ebc:"514",b2b675dd:"533","4178efb8":"537",fd485bd3:"543","01b81367":"601","4b8535eb":"612","59abedb6":"632",d213043e:"638",fd27c808:"661","0684a904":"670","722146fe":"722","60262e21":"727",b65c3624:"730","2adc0ba4":"731","3fc19409":"735","8c4a23a7":"739","24556f49":"744",c19ad3d7:"805","271a7b09":"808","4ec8a4a9":"818","47b3b041":"824",a86b7c98:"827",eb1a9ca0:"841","3691c6ec":"846",dffc4bd7:"866",f8deddba:"938","97878c65":"948",e570d6db:"951","09d7020f":"959",a20401e4:"969","54eec65a":"984","39b245d7":"1042",c7d98fe2:"1084","976dc663":"1109","4c8cef38":"1126",fe55d425:"1133","4c2d8fdb":"1148","0cd40d9b":"1175",b972506a:"1187",f5f247cc:"1258",fc62dd75:"1280","51ada3e3":"1294","5d48ec89":"1303","8c241076":"1324","6fb24ff7":"1358",bb624440:"1364","7c4e6415":"1393","459b1c5c":"1396",b2f554cd:"1477","771f38eb":"1478","90b14878":"1512",c5980a65:"1525","11ce4159":"1531","0e22a4b2":"1558","0b289f4d":"1575","8e65fbae":"1578",cf510f60:"1607","819f977d":"1622","2e1ef406":"1665","3f885d22":"1684",a6746ab5:"1705",a7023ddc:"1713","0cb5fac6":"1719",cd988af7:"1737","3b568f5a":"1756","54024cf2":"1783","86257f88":"1795","405d593f":"1812","28508d4c":"1816","2df21221":"1909",c4542d8c:"1988",a65441a5:"2033","016d6d21":"2056","2cd5cbb6":"2074","626ef9ce":"2080",ffc0ac08:"2105","3e7d7789":"2108","2ed8359a":"2121","15a4ce61":"2129",ff13fcd4:"2174","7ec3d878":"2178",a5a57258:"2192",f41d5eb1:"2201","488a99ce":"2258",d9c57d72:"2277","66926af2":"2287","4d66ab66":"2293","7c9b29bb":"2334","204dd830":"2391",b072568e:"2433","2172420b":"2441",b8f3d4c8:"2444","479321cf":"2454",ddec1041:"2461","14f81d84":"2463","195293b6":"2484","814f3328":"2535","1e070f27":"2571",bcbbf42e:"2606","8876813e":"2615","073e718f":"2656","6eae5b23":"2687",b49860f1:"2700",aacc3e35:"2702","146ca1ad":"2753",a33962b9:"2763",a581e456:"2778","957809ee":"2785","202af6b6":"2801","750b9005":"2814","170d6c86":"2839","088b3228":"2882","5e371f0f":"2945",b0e766b4:"2949","5b4d43ff":"3058","66a08410":"3062",a701d349:"3068","937d7adc":"3071",ac1be023:"3075","2994c7d6":"3088",a6aa9e1f:"3089","5a3a719f":"3109",c5ed658f:"3131",bc74446d:"3134","89a53707":"3157","24adbf31":"3160","1cb65c7d":"3168",e8d2c25f:"3171",dd5ac54b:"3184",f8409a7e:"3206","5794c75f":"3210","9f838734":"3231","1df93b7f":"3237","5534fb85":"3238",edd7d65c:"3250",fea2b255:"3287",f761bd07:"3310","766b2171":"3358","03193cc0":"3363",b819cecb:"3380","87f861ef":"3408","53df8e83":"3439","110403ef":"3443",ccfb5782:"3450","90f88783":"3481","413318e8":"3508",aa431e4a:"3512","33d935e4":"3523",f440db1d:"3535","7d19a980":"3549","7f6c6f55":"3561","9e4087bc":"3608","71dfd0a8":"3615",c6200b76:"3643",fbcfc993:"3647",fd8ac5c7:"3664","245d4974":"3733","3720c009":"3751","318f6953":"3774",c6c73cac:"3791","1d14c2f4":"3811","40c69ef1":"3869",d43cc2ec:"3871","4a3d03f6":"3884",bf04367c:"3916",a641c963:"3931",fac0f815:"3941","0e736169":"3972",e746f759:"3984","5f3507b2":"3986",d8fdbe7a:"3993","01a85c17":"4013","60fa46e1":"4043",db0cc9f1:"4065","365a10b6":"4067","1badf320":"4068","55960ee5":"4121","88aaac27":"4138",b15686f4:"4147","8de38bef":"4197","23ef67df":"4247","679bd524":"4252","6b50e60a":"4268",cae36b15:"4312","9f025583":"4343",c1721191:"4362",c413f1b7:"4384","062a1a43":"4403",f7bfbae9:"4404","16ea2389":"4414","9edb948e":"4436","00568285":"4470","37e4cb73":"4488","5613e7cf":"4492",f90d8a46:"4497",b104f86f:"4536",a372a63b:"4590","8e9e3e30":"4675","98738a6c":"4734",ec9f380e:"4744","69bc0e2c":"4752","0ae21139":"4788","31fff4a5":"4817","0627e785":"4824","22e78681":"4825",f3f44898:"4841","93bce8ec":"4859",c83c6fdf:"4867","24a07a83":"4871","1910946c":"4873","81d944d1":"4875",bd6bded1:"4903","3d0b0327":"4969","450b14c3":"4979","02401b2b":"5027","69e0bfe1":"5029",d7cb860d:"5048",f18fbdcd:"5050",ad536080:"5077","351d319b":"5084","56a06382":"5091","357f2143":"5129","7599f4f1":"5217","128a5f34":"5244",b03b3eac:"5334",bc6c5049:"5370","43bdf210":"5379","6dd55018":"5390",caa6a735:"5394",fc3ae8bf:"5411",fe36d4cd:"5420","68d17c71":"5425","9d3c1a44":"5428","4bddfbdb":"5437",f9651623:"5494","9529487c":"5537",a0d8b188:"5547","8526ffa3":"5620","77b7a366":"5624","7b667a7f":"5649",b652e05c:"5653","068b8e98":"5666",d93dbc28:"5679","9e4ae2cc":"5706","6ea8a316":"5723","2eaf3a2f":"5758",f41735e0:"5819",f8de77c0:"5826","2e4722bd":"5847",f01f44c3:"5852","48b0f434":"5867","8c079f7d":"5880",e7d7123e:"5899","57bd32c7":"5911","4665933c":"5924","22eddac1":"5950","0b1dc2cd":"5971","861abce9":"5995",a9e1900f:"6009","8eb4e46b":"6018",ffef4e04:"6027",eb514dbf:"6039",efef7eb9:"6040","3e1aa1b6":"6051","303db6c1":"6065","77530bb9":"6070","69ea3d78":"6095",ccc49370:"6103","42611ca7":"6144","54350ada":"6154","423a0e62":"6167",e13166f5:"6172","5c653e8d":"6256",ef3509ef:"6274","4ab2bb95":"6282","18dd62e9":"6285","0c7f16c1":"6297","90fdb9b5":"6321",be0fdac8:"6331","3f2d0a0e":"6336","17ae22f4":"6352","51985ffa":"6353","4f0c5301":"6361","43dc46d9":"6370","163fb342":"6371","19ca9089":"6388",edfea66c:"6394",cce51cf2:"6447",be1609b7:"6448","49b772d3":"6458","4d69ebec":"6480",f5b890ba:"6502",d1576682:"6506","7aad579e":"6517",a452709a:"6526","04d8c43e":"6551","8d701eb4":"6622",b78f40a6:"6629","9e528cee":"6633","7f3e2518":"6647","78060cbc":"6652",f1d6ac1e:"6720","769e9ed2":"6728",c67cfbac:"6732",e16afba1:"6755","4ddbfcdc":"6758","0f8a713b":"6759","3c3b6fb9":"6795",bec065e9:"6819",ed26bce9:"6835","427e2c3d":"6836","4fd1aaa1":"6842","9a062e52":"6855","2048b789":"6861",df212c12:"6863",e5f23965:"6882","4aa262b7":"6897",b184781f:"6911","7d55a0f0":"6920","1e76467f":"6939","752283db":"6947",daf4eece:"6971","232c92ba":"6974",d7cf5e1f:"7005","8593ff01":"7007","4a1ab9c8":"7008","711949de":"7012","125698e9":"7037",be1aaa14:"7133","44ac4dbb":"7142","2bd8a6cf":"7143","49af4b98":"7217","3db947d3":"7265","1e542d68":"7278","69c95af3":"7363",d4c755e6:"7387","151c652b":"7394","63aeb80b":"7418","0034bcd6":"7424","7d9726a8":"7429","79765aba":"7440","1740b646":"7448","1b469a71":"7451",a18798d1:"7460","6fe6957f":"7465","9c090340":"7538",fff5a6d1:"7547","3dc68565":"7566",e898b7f3:"7584","63243ad1":"7594","98ae4a66":"7619",dbbb982f:"7622","907bfa82":"7633",fcb295ad:"7642",fc3deafd:"7659","2d92dfb9":"7690",a219b733:"7749","39a2c297":"7756",e8f62c55:"7789",b1144183:"7822",a26a8dd3:"7838","78dd992d":"7869","350ea002":"7889",b7a8f57a:"7890","1a4e3797":"7920","600433a8":"7930",ea313555:"7937","2d15743f":"7941",c5de23c8:"7963",fab64b27:"7964","89c16be8":"7969","1a2b669c":"7999",a91ae4c2:"8005","250d5d50":"8007","6c24c6c6":"8026",c095dcfa:"8057",b1c60aef:"8074",db676956:"8086","2497986c":"8114","44183a86":"8149","4e9707d9":"8159","2573a9a7":"8195","4e986fc6":"8233",ce2c6db8:"8248",a88c4343:"8282","0681d8e1":"8357",c4f95133:"8401","1e90ea6d":"8428","92999a1c":"8442","376f2f8c":"8444","1aa28b52":"8450",b80596f4:"8463","759c01e9":"8488","860d7f34":"8495","5cde4d5c":"8496",cdad2d50:"8509","4931a616":"8529",c532175a:"8573","6875c492":"8610","2c114e85":"8663","046e2194":"8667","2804bc6d":"8670","8d06f620":"8678",b38a02d7:"8685","6196de5a":"8696",f9cc98ab:"8751","9ff86157":"8830","676566fe":"8876",f7f505dc:"8881","17cacc08":"8893",ec4f6a24:"8898","8b38bcbd":"8900","5419aa43":"8914",d5875de2:"8941",e629dea5:"9010","3df11149":"9015",bb86fac5:"9067","3d4b58f3":"9094",c8acf440:"9126",b831fe65:"9157",f09f371a:"9186","6be7ee83":"9197","2b3490d9":"9200","688193a4":"9201","1cbc9cf3":"9219",f616eec2:"9357",dd3540fa:"9364",affd832d:"9453","1be78505":"9514","99b94e0d":"9531","87d62477":"9551",b6e1085a:"9624","2dffafe2":"9631",bf95ed3d:"9639","193b481a":"9662","1202c0b0":"9673","7e9fb3d2":"9702",b2d692e7:"9716","5552634a":"9719",f7b99134:"9737","3f5148d4":"9754","4fa82ff8":"9769","14eb3368":"9817",fb2dd7db:"9818",e4c23816:"9819","83943ce1":"9821",bf5d9784:"9827",be324e15:"9847",e8700426:"9902","1365e0a6":"9917",df203c0f:"9924","8f6f7bb5":"9950",a6d9fcee:"9958","1aebc10b":"9959"}[e]||e,r.p+r.u(e)},(()=>{var e={6552:0,532:0};r.f.j=(f,d)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)d.push(a[2]);else if(/^(53|655)2$/.test(f))e[f]=0;else{var c=new Promise(((d,c)=>a=e[f]=[d,c]));d.push(a[2]=c);var b=r.p+r.u(f),t=new Error;r.l(b,(d=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+f+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,d)=>{var a,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(d);n<b.length;n++)c=b[n],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return r.O(i)},d=self.webpackChunkwebsite=self.webpackChunkwebsite||[];d.forEach(f.bind(null,0)),d.push=f.bind(null,d.push.bind(d))})()})(); \ No newline at end of file diff --git a/blog.html b/blog.html index 37cbf98f83a..015ebc36607 100644 --- a/blog.html +++ b/blog.html @@ -13,16 +13,16 @@ <link rel="search" type="application/opensearchdescription+xml" title="moonrepo" href="/opensearch.xml"><link rel="stylesheet" href="/assets/css/styles.8ed5d838.css"> -<link rel="preload" href="/assets/js/runtime~main.b7c7f339.js" as="script"> -<link rel="preload" href="/assets/js/main.6a2889a1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.0eb29a1d.js" as="script"> +<link rel="preload" href="/assets/js/main.f61cdfcc.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> -<div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--light_HAxW"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--dark_bGx0"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Products</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/moon"><strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div></a></li><li><a class="dropdown__link" href="/moonbase"><strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div></a></li><li><a class="dropdown__link" href="/proto"><strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div></a></li><li><a href="https://espresso.build" target="_blank" rel="noopener noreferrer" class="dropdown__link"><strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs"><strong>moon</strong></a></li><li><a class="dropdown__link" href="/docs/proto"><strong>proto</strong></a></li></ul></div><a class="navbar__item navbar__link" href="/docs/guides/ci">Guides</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a></div><div class="navbar__items navbar__items--right"><a href="https://moonrepo.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Sign in</a><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_WqAV"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_MB5r"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_CLW8 thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_DQfJ margin-bottom--md">Recent posts</div><ul class="sidebarItemList_rvuc clean-list"><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.15">moon v1.15 - Next-generation action graph</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.19">proto v0.19 - Version pinning and outdated checks</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.14">moon v1.14 - Improvements to running targets and toolchain versions</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.18">proto v0.18 - List installed tools and configure HTTP client</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.17">proto v0.17 - Experimental Python support and canary releases</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we've taken the next step in modernizing our action pipeline, by rewriting the"><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.15-24f6509aa7bcbfaf9ac48f4d63883483.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.15">moon v1.15 - Next-generation action graph</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-10-09T00:00:00.000Z" itemprop="datePublished">October 9, 2023</time> · <!-- -->5 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +<div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--light_HAxW"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--dark_bGx0"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Products</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/moon"><strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div></a></li><li><a class="dropdown__link" href="/moonbase"><strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div></a></li><li><a class="dropdown__link" href="/proto"><strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div></a></li><li><a href="https://espresso.build" target="_blank" rel="noopener noreferrer" class="dropdown__link"><strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs"><strong>moon</strong></a></li><li><a class="dropdown__link" href="/docs/proto"><strong>proto</strong></a></li></ul></div><a class="navbar__item navbar__link" href="/docs/guides/ci">Guides</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a></div><div class="navbar__items navbar__items--right"><a href="https://moonrepo.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Sign in</a><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_WqAV"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_MB5r"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_CLW8 thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_DQfJ margin-bottom--md">Recent posts</div><ul class="sidebarItemList_rvuc clean-list"><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.20">proto v0.20 - New shims and binaries management</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.15">moon v1.15 - Next-generation action graph</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.19">proto v0.19 - Version pinning and outdated checks</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.14">moon v1.14 - Improvements to running targets and toolchain versions</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.18">proto v0.18 - List installed tools and configure HTTP client</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we're reworking how shims and binaries work."><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.20">proto v0.20 - New shims and binaries management</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-10-20T00:00:00.000Z" itemprop="datePublished">October 20, 2023</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we're reworking how shims and binaries work.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/bin">bin</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/shim">shim</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/checksum">checksum</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.20 - New shims and binaries management" href="/blog/proto-v0.20"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we've taken the next step in modernizing our action pipeline, by rewriting the"><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.15-24f6509aa7bcbfaf9ac48f4d63883483.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.15">moon v1.15 - Next-generation action graph</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-10-09T00:00:00.000Z" itemprop="datePublished">October 9, 2023</time> · <!-- -->5 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we've taken the next step in modernizing our action pipeline, by rewriting the dependency graph.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/action">action</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/dependency">dependency</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/graph">graph</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/pipeline">pipeline</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/railway">railway</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.15 - Next-generation action graph" href="/blog/moon-v1.15"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we're improving version pinning and introducing a new command to check for outdated"><link itemprop="image" href="https://moonrepo.dev/assets/images/v0.19-8de1899b49d54ec36a7294e44f3880ca.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.19">proto v0.19 - Version pinning and outdated checks</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-29T00:00:00.000Z" itemprop="datePublished">September 29, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we're improving version pinning and introducing a new command to check for outdated versions.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/pin">pin</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/global">global</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/local">local</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/outdated">outdated</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.19 - Version pinning and outdated checks" href="/blog/proto-v0.19"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we've focused on loosening restrictions to improve the overall developer"><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.14-3ce565f42964d96ef37006c8ad92d6d6.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.14">moon v1.14 - Improvements to running targets and toolchain versions</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-25T00:00:00.000Z" itemprop="datePublished">September 25, 2023</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we've focused on loosening restrictions to improve the overall developer -experience.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/run">run</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/target">target</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/toolchain">toolchain</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/version">version</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/ci">ci</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/shorthand">shorthand</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.14 - Improvements to running targets and toolchain versions" href="/blog/moon-v1.14"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="Today we've got a small release that includes some helpful features."><link itemprop="image" href="https://moonrepo.dev/assets/images/v0.18-5b6a0663f8077d6443d06ab243e966f6.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.18">proto v0.18 - List installed tools and configure HTTP client</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-18T00:00:00.000Z" itemprop="datePublished">September 18, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Today we've got a small release that includes some helpful features.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/http">http</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/registry">registry</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/index">index</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.18 - List installed tools and configure HTTP client" href="/blog/proto-v0.18"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This release implements two long requested features, Python language support and canary releases."><link itemprop="image" href="https://moonrepo.dev/assets/images/v0.17-c6f866913e8dd547a862c49630b6a96b.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.17">proto v0.17 - Experimental Python support and canary releases</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-11T00:00:00.000Z" itemprop="datePublished">September 11, 2023</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This release implements two long requested features, Python language support and canary releases.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/tool">tool</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/canary">canary</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/python">python</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.17 - Experimental Python support and canary releases" href="/blog/proto-v0.17"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This is a light release that focused primarily on upgrading to the WASM based proto implementation."><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.13-a119a59c6b1d80abaf4f3855114d1b48.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.13">moon v1.13 - Toolchain now uses WASM plugins</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-05T00:00:00.000Z" itemprop="datePublished">September 5, 2023</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is a light release that focused primarily on upgrading to the WASM based proto implementation.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/tasks">tasks</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/wasm">wasm</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.13 - Toolchain now uses WASM plugins" href="/blog/moon-v1.13"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This release adds functionality for managing plugins and purging the proto store."><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.16">proto v0.16 - Add, remove, and purge plugins</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-04T00:00:00.000Z" itemprop="datePublished">September 4, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This release adds functionality for managing plugins and purging the proto store.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.16 - Add, remove, and purge plugins" href="/blog/proto-v0.16"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This is a small release that adds support for uninstalling globals, and improves our WASM APIs."><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.15">proto v0.15 - Install and uninstall globals</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-08-23T00:00:00.000Z" itemprop="datePublished">August 23, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is a small release that adds support for uninstalling globals, and improves our WASM APIs.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/wasm">wasm</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/global">global</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.15 - Install and uninstall globals" href="/blog/proto-v0.15"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we focused heavily on improving tasks, its configuration, and related systems."><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.12-3a89ebd0fa3a2732d0f38951967f4d19.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.12">moon v1.12 - Task improvements: extending, interactive, and more</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-08-21T00:00:00.000Z" itemprop="datePublished">August 21, 2023</time> · <!-- -->4 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we focused heavily on improving tasks, its configuration, and related systems.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/tasks">tasks</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/inheritance">inheritance</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.12 - Task improvements: extending, interactive, and more" href="/blog/moon-v1.12"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="With this release, we've finished our migration to a WASM based plugin architecture."><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.14">proto v0.14 - Node.js and Rust now powered by WASM plugins</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-08-11T00:00:00.000Z" itemprop="datePublished">August 11, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>With this release, we've finished our migration to a WASM based plugin architecture.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/wasm">wasm</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.14 - Node.js and Rust now powered by WASM plugins" href="/blog/proto-v0.14"><b>Read More</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><div class="flex-1 text-right"><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-bold" href="/blog/page/2">Older Entries<span class="inline-block ml-1 icon-next" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="chevron-right" class="svg-inline--fa fa-chevron-right" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"></path></svg></span></a></div></nav></main></div></div></div><footer class="bg-gray-100 dark:bg-slate-600" aria-labelledby="footer-heading"><h2 id="footer-heading" class="sr-only">Footer</h2><div class="max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"><div class="lg:grid lg:grid-cols-5 lg:gap-3"><div class="grid grid-cols-3 gap-3 lg:col-span-3"><div><h6 class="m-0 text-base font-semibold uppercase">Learn</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs">Docs</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs/guides/ci">Guides</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/blog">Blog</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/api">API</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Ecosystem</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo/moon/releases" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Releases</a></li><li><a href="https://github.com/moonrepo/moon-configs" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Shared configs</a></li><li><a href="https://github.com/moonrepo/dev" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Developer tools</a></li><li><a href="https://github.com/moonrepo/examples" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Examples repository</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Support</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">GitHub</a></li><li><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Discord</a></li><li><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Twitter</a></li></ul></div></div><div class="mt-4 lg:mt-0 col-span-2"><h6 class="m-0 text-base font-semibold uppercase">Contact us</h6><p class="text-base text-gray-800 dark:text-slate-100 font-normal">Want to learn more about moonrepo? Have questions?</p><div class="mt-2"><div class="flex justify-between gap-x-1"><div class="w-3/4"><label for="subject" class="sr-only">Subject</label><select id="subject" name="subject" required="" class="outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans"><option value="" selected=""></option><option value="Consultation">Consultation</option><option value="Partnership">Partnership</option><option value="Affiliation">Affiliation</option></select></div><button class="border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600 opacity-60 py-1 w-1/4" disabled="" id="contact-next" type="button">Next</button></div></div><div class="mt-4 flex justify-end items-start gap-1"><div><p class="text-sm text-gray-800 dark:text-slate-100 font-normal">Backed by</p></div><div><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1604 320" style="enable-background:new 0 0 1604 320" xml:space="preserve" role="img" height="22"><style>.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}</style><g id="Group-19"><path id="Fill-1" class="st0" d="M0 320h320V0H0z"></path><path id="Fill-2" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff" d="M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"></path><g id="Group-18" transform="translate(425.854 73.217)"><path id="Fill-3" class="st0" d="M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"></path><path id="Fill-5" class="st0" d="M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-7" class="st0" d="M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"></path><path id="Fill-9" class="st0" d="M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"></path><path id="Fill-11" class="st0" d="M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"></path><path id="Fill-13" class="st0" d="M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"></path><path id="Fill-14" class="st0" d="M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"></path><path id="Fill-15" class="st0" d="M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"></path><path id="Fill-16" class="st0" d="M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-17" class="st0" d="M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"></path></g></g></svg></div></div></div></div><div class="mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"><div class="text-sm text-gray-800 dark:text-slate-100 font-normal m-0"><div class="footer__copyright">Copyright © 2023, moonrepo, Inc.</div></div><div class="flex space-x-2"><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">GitHub</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></span></a><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Discord</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg></span></a><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Twitter</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></span></a></div></div></div></footer></div> -<script src="/assets/js/runtime~main.b7c7f339.js"></script> -<script src="/assets/js/main.6a2889a1.js"></script> +experience.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/run">run</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/target">target</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/toolchain">toolchain</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/version">version</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/ci">ci</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/shorthand">shorthand</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.14 - Improvements to running targets and toolchain versions" href="/blog/moon-v1.14"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="Today we've got a small release that includes some helpful features."><link itemprop="image" href="https://moonrepo.dev/assets/images/v0.18-5b6a0663f8077d6443d06ab243e966f6.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.18">proto v0.18 - List installed tools and configure HTTP client</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-18T00:00:00.000Z" itemprop="datePublished">September 18, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Today we've got a small release that includes some helpful features.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/http">http</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/registry">registry</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/index">index</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.18 - List installed tools and configure HTTP client" href="/blog/proto-v0.18"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This release implements two long requested features, Python language support and canary releases."><link itemprop="image" href="https://moonrepo.dev/assets/images/v0.17-c6f866913e8dd547a862c49630b6a96b.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.17">proto v0.17 - Experimental Python support and canary releases</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-11T00:00:00.000Z" itemprop="datePublished">September 11, 2023</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This release implements two long requested features, Python language support and canary releases.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/tool">tool</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/canary">canary</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/python">python</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.17 - Experimental Python support and canary releases" href="/blog/proto-v0.17"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This is a light release that focused primarily on upgrading to the WASM based proto implementation."><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.13-a119a59c6b1d80abaf4f3855114d1b48.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.13">moon v1.13 - Toolchain now uses WASM plugins</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-05T00:00:00.000Z" itemprop="datePublished">September 5, 2023</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is a light release that focused primarily on upgrading to the WASM based proto implementation.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/tasks">tasks</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/wasm">wasm</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.13 - Toolchain now uses WASM plugins" href="/blog/moon-v1.13"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This release adds functionality for managing plugins and purging the proto store."><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.16">proto v0.16 - Add, remove, and purge plugins</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-09-04T00:00:00.000Z" itemprop="datePublished">September 4, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This release adds functionality for managing plugins and purging the proto store.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.16 - Add, remove, and purge plugins" href="/blog/proto-v0.16"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="This is a small release that adds support for uninstalling globals, and improves our WASM APIs."><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/proto-v0.15">proto v0.15 - Install and uninstall globals</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-08-23T00:00:00.000Z" itemprop="datePublished">August 23, 2023</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is a small release that adds support for uninstalling globals, and improves our WASM APIs.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/wasm">wasm</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/plugin">plugin</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/global">global</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about proto v0.15 - Install and uninstall globals" href="/blog/proto-v0.15"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="In this release, we focused heavily on improving tasks, its configuration, and related systems."><link itemprop="image" href="https://moonrepo.dev/assets/images/v1.12-3a89ebd0fa3a2732d0f38951967f4d19.png"><header><h2 class="title_Kdtz" itemprop="headline"><a itemprop="url" href="/blog/moon-v1.12">moon v1.12 - Task improvements: extending, interactive, and more</a></h2><div class="container_iZB2 margin-vert--md"><time datetime="2023-08-21T00:00:00.000Z" itemprop="datePublished">August 21, 2023</time> · <!-- -->4 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>In this release, we focused heavily on improving tasks, its configuration, and related systems.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/tasks">tasks</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/inheritance">inheritance</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about moon v1.12 - Task improvements: extending, interactive, and more" href="/blog/moon-v1.12"><b>Read More</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><div class="flex-1 text-right"><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-bold" href="/blog/page/2">Older Entries<span class="inline-block ml-1 icon-next" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="chevron-right" class="svg-inline--fa fa-chevron-right" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"></path></svg></span></a></div></nav></main></div></div></div><footer class="bg-gray-100 dark:bg-slate-600" aria-labelledby="footer-heading"><h2 id="footer-heading" class="sr-only">Footer</h2><div class="max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"><div class="lg:grid lg:grid-cols-5 lg:gap-3"><div class="grid grid-cols-3 gap-3 lg:col-span-3"><div><h6 class="m-0 text-base font-semibold uppercase">Learn</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs">Docs</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs/guides/ci">Guides</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/blog">Blog</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/api">API</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Ecosystem</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo/moon/releases" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Releases</a></li><li><a href="https://github.com/moonrepo/moon-configs" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Shared configs</a></li><li><a href="https://github.com/moonrepo/dev" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Developer tools</a></li><li><a href="https://github.com/moonrepo/examples" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Examples repository</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Support</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">GitHub</a></li><li><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Discord</a></li><li><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Twitter</a></li></ul></div></div><div class="mt-4 lg:mt-0 col-span-2"><h6 class="m-0 text-base font-semibold uppercase">Contact us</h6><p class="text-base text-gray-800 dark:text-slate-100 font-normal">Want to learn more about moonrepo? Have questions?</p><div class="mt-2"><div class="flex justify-between gap-x-1"><div class="w-3/4"><label for="subject" class="sr-only">Subject</label><select id="subject" name="subject" required="" class="outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans"><option value="" selected=""></option><option value="Consultation">Consultation</option><option value="Partnership">Partnership</option><option value="Affiliation">Affiliation</option></select></div><button class="border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600 opacity-60 py-1 w-1/4" disabled="" id="contact-next" type="button">Next</button></div></div><div class="mt-4 flex justify-end items-start gap-1"><div><p class="text-sm text-gray-800 dark:text-slate-100 font-normal">Backed by</p></div><div><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1604 320" style="enable-background:new 0 0 1604 320" xml:space="preserve" role="img" height="22"><style>.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}</style><g id="Group-19"><path id="Fill-1" class="st0" d="M0 320h320V0H0z"></path><path id="Fill-2" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff" d="M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"></path><g id="Group-18" transform="translate(425.854 73.217)"><path id="Fill-3" class="st0" d="M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"></path><path id="Fill-5" class="st0" d="M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-7" class="st0" d="M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"></path><path id="Fill-9" class="st0" d="M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"></path><path id="Fill-11" class="st0" d="M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"></path><path id="Fill-13" class="st0" d="M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"></path><path id="Fill-14" class="st0" d="M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"></path><path id="Fill-15" class="st0" d="M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"></path><path id="Fill-16" class="st0" d="M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-17" class="st0" d="M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"></path></g></g></svg></div></div></div></div><div class="mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"><div class="text-sm text-gray-800 dark:text-slate-100 font-normal m-0"><div class="footer__copyright">Copyright © 2023, moonrepo, Inc.</div></div><div class="flex space-x-2"><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">GitHub</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></span></a><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Discord</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg></span></a><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Twitter</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></span></a></div></div></div></footer></div> +<script src="/assets/js/runtime~main.0eb29a1d.js"></script> +<script src="/assets/js/main.f61cdfcc.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/2023-roadmap.html b/blog/2023-roadmap.html index 983fc579d69..9ad8243dfa3 100644 --- a/blog/2023-roadmap.html +++ b/blog/2023-roadmap.html @@ -13,12 +13,12 @@ <link rel="search" type="application/opensearchdescription+xml" title="moonrepo" href="/opensearch.xml"><link rel="stylesheet" href="/assets/css/styles.8ed5d838.css"> -<link rel="preload" href="/assets/js/runtime~main.b7c7f339.js" as="script"> -<link rel="preload" href="/assets/js/main.6a2889a1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.0eb29a1d.js" as="script"> +<link rel="preload" href="/assets/js/main.f61cdfcc.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> -<div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--light_HAxW"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--dark_bGx0"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Products</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/moon"><strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div></a></li><li><a class="dropdown__link" href="/moonbase"><strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div></a></li><li><a class="dropdown__link" href="/proto"><strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div></a></li><li><a href="https://espresso.build" target="_blank" rel="noopener noreferrer" class="dropdown__link"><strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs"><strong>moon</strong></a></li><li><a class="dropdown__link" href="/docs/proto"><strong>proto</strong></a></li></ul></div><a class="navbar__item navbar__link" href="/docs/guides/ci">Guides</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a></div><div class="navbar__items navbar__items--right"><a href="https://moonrepo.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Sign in</a><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_WqAV"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_MB5r"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_CLW8 thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_DQfJ margin-bottom--md">Recent posts</div><ul class="sidebarItemList_rvuc clean-list"><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.15">moon v1.15 - Next-generation action graph</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.19">proto v0.19 - Version pinning and outdated checks</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.14">moon v1.14 - Improvements to running targets and toolchain versions</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.18">proto v0.18 - List installed tools and configure HTTP client</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.17">proto v0.17 - Experimental Python support and canary releases</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long"><header><h1 class="title_Kdtz" itemprop="headline">What's in store for 2023</h1><div class="container_iZB2 margin-vert--md"><time datetime="2023-01-04T00:00:00.000Z" itemprop="datePublished">January 4, 2023</time> · <!-- -->6 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div id="__blog-post-container" class="markdown" itemprop="articleBody"><p>Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long +<div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--light_HAxW"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--dark_bGx0"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Products</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/moon"><strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div></a></li><li><a class="dropdown__link" href="/moonbase"><strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div></a></li><li><a class="dropdown__link" href="/proto"><strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div></a></li><li><a href="https://espresso.build" target="_blank" rel="noopener noreferrer" class="dropdown__link"><strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs"><strong>moon</strong></a></li><li><a class="dropdown__link" href="/docs/proto"><strong>proto</strong></a></li></ul></div><a class="navbar__item navbar__link" href="/docs/guides/ci">Guides</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a></div><div class="navbar__items navbar__items--right"><a href="https://moonrepo.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Sign in</a><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_WqAV"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_MB5r"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_CLW8 thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_DQfJ margin-bottom--md">Recent posts</div><ul class="sidebarItemList_rvuc clean-list"><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.20">proto v0.20 - New shims and binaries management</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.15">moon v1.15 - Next-generation action graph</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.19">proto v0.19 - Version pinning and outdated checks</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/moon-v1.14">moon v1.14 - Improvements to running targets and toolchain versions</a></li><li class="sidebarItem__RMN"><a class="sidebarItemLink_Ony9" href="/blog/proto-v0.18">proto v0.18 - List installed tools and configure HTTP client</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><meta itemprop="description" content="Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long"><header><h1 class="title_Kdtz" itemprop="headline">What's in store for 2023</h1><div class="container_iZB2 margin-vert--md"><time datetime="2023-01-04T00:00:00.000Z" itemprop="datePublished">January 4, 2023</time> · <!-- -->6 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_v1VX"><div class="avatar margin-bottom--sm"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="/img/authors/miles.jpg" alt="Miles Johnson" itemprop="image"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/milesj" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Miles Johnson</span></a></div><small class="avatar__subtitle" itemprop="description">Founder, developer</small></div></div></div></div></header><div id="__blog-post-container" class="markdown" itemprop="articleBody"><p>Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long roadmap.</p><h2 class="anchor anchorWithStickyNavbar_JmGV" id="year-2022-in-review">Year 2022 in review<a href="#year-2022-in-review" class="hash-link" aria-label="Direct link to Year 2022 in review" title="Direct link to Year 2022 in review">​</a></h2><p>The original concept and <a href="https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d" target="_blank" rel="noopener noreferrer">first commit of moon</a> (codenamed monolith) landed October 23rd, 2021. Eight months later, we @@ -73,7 +73,7 @@ Some examples of this are in-repository secrets management, git hooks management, code ownership and quality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much more.</p></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_JgJa"><div class="col"><b>Tags:</b><ul class="tags_Ow0B padding--none margin-left--sm"><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/roadmap">roadmap</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/moonbase">moonbase</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/proto">proto</a></li><li class="tag_DFxh"><a class="tag_otG2 tagRegular_s0E1" href="/blog/tags/toolchain">toolchain</a></li></ul></div><div class="col margin-top--sm"><a href="https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_bHB7" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><div class="flex-1 text-left"><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-bold" href="/blog/v0.22"><span class="inline-block mr-1 icon-previous" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="chevron-left" class="svg-inline--fa fa-chevron-left" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M15 239c-9.4 9.4-9.4 24.6 0 33.9L207 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L65.9 256 241 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L15 239z"></path></svg></span>moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration</a></div><div class="flex-1 text-right"><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-bold" href="/blog/v0.21">moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust<span class="inline-block ml-1 icon-next" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="chevron-right" class="svg-inline--fa fa-chevron-right" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"></path></svg></span></a></div></nav></main><div class="col col--2"><div class="tableOfContents_XG6w thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#year-2022-in-review" class="table-of-contents__link toc-highlight">Year 2022 in review</a></li><li><a href="#path-to-an-official-v1-release" class="table-of-contents__link toc-highlight">Path to an official v1 release</a></li><li><a href="#launching-moonbase" class="table-of-contents__link toc-highlight">Launching moonbase</a></li><li><a href="#launching-proto" class="table-of-contents__link toc-highlight">Launching proto</a></li><li><a href="#expanding-language-support" class="table-of-contents__link toc-highlight">Expanding language support</a></li><li><a href="#supporting-release-workflows" class="table-of-contents__link toc-highlight">Supporting release workflows</a></li><li><a href="#more-repository-management-tooling" class="table-of-contents__link toc-highlight">More repository management tooling</a></li></ul></div></div></div></div></div><footer class="bg-gray-100 dark:bg-slate-600" aria-labelledby="footer-heading"><h2 id="footer-heading" class="sr-only">Footer</h2><div class="max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"><div class="lg:grid lg:grid-cols-5 lg:gap-3"><div class="grid grid-cols-3 gap-3 lg:col-span-3"><div><h6 class="m-0 text-base font-semibold uppercase">Learn</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs">Docs</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs/guides/ci">Guides</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/blog">Blog</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/api">API</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Ecosystem</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo/moon/releases" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Releases</a></li><li><a href="https://github.com/moonrepo/moon-configs" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Shared configs</a></li><li><a href="https://github.com/moonrepo/dev" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Developer tools</a></li><li><a href="https://github.com/moonrepo/examples" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Examples repository</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Support</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">GitHub</a></li><li><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Discord</a></li><li><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Twitter</a></li></ul></div></div><div class="mt-4 lg:mt-0 col-span-2"><h6 class="m-0 text-base font-semibold uppercase">Contact us</h6><p class="text-base text-gray-800 dark:text-slate-100 font-normal">Want to learn more about moonrepo? Have questions?</p><div class="mt-2"><div class="flex justify-between gap-x-1"><div class="w-3/4"><label for="subject" class="sr-only">Subject</label><select id="subject" name="subject" required="" class="outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans"><option value="" selected=""></option><option value="Consultation">Consultation</option><option value="Partnership">Partnership</option><option value="Affiliation">Affiliation</option></select></div><button class="border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600 opacity-60 py-1 w-1/4" disabled="" id="contact-next" type="button">Next</button></div></div><div class="mt-4 flex justify-end items-start gap-1"><div><p class="text-sm text-gray-800 dark:text-slate-100 font-normal">Backed by</p></div><div><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1604 320" style="enable-background:new 0 0 1604 320" xml:space="preserve" role="img" height="22"><style>.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}</style><g id="Group-19"><path id="Fill-1" class="st0" d="M0 320h320V0H0z"></path><path id="Fill-2" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff" d="M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"></path><g id="Group-18" transform="translate(425.854 73.217)"><path id="Fill-3" class="st0" d="M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"></path><path id="Fill-5" class="st0" d="M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-7" class="st0" d="M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"></path><path id="Fill-9" class="st0" d="M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"></path><path id="Fill-11" class="st0" d="M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"></path><path id="Fill-13" class="st0" d="M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"></path><path id="Fill-14" class="st0" d="M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"></path><path id="Fill-15" class="st0" d="M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"></path><path id="Fill-16" class="st0" d="M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-17" class="st0" d="M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"></path></g></g></svg></div></div></div></div><div class="mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"><div class="text-sm text-gray-800 dark:text-slate-100 font-normal m-0"><div class="footer__copyright">Copyright © 2023, moonrepo, Inc.</div></div><div class="flex space-x-2"><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">GitHub</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></span></a><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Discord</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg></span></a><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Twitter</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></span></a></div></div></div></footer></div> -<script src="/assets/js/runtime~main.b7c7f339.js"></script> -<script src="/assets/js/main.6a2889a1.js"></script> +<script src="/assets/js/runtime~main.0eb29a1d.js"></script> +<script src="/assets/js/main.f61cdfcc.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/archive.html b/blog/archive.html index 48cdc0894c9..e8ffb174b0b 100644 --- a/blog/archive.html +++ b/blog/archive.html @@ -13,13 +13,13 @@ <link rel="search" type="application/opensearchdescription+xml" title="moonrepo" href="/opensearch.xml"><link rel="stylesheet" href="/assets/css/styles.8ed5d838.css"> -<link rel="preload" href="/assets/js/runtime~main.b7c7f339.js" as="script"> -<link rel="preload" href="/assets/js/main.6a2889a1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.0eb29a1d.js" as="script"> +<link rel="preload" href="/assets/js/main.f61cdfcc.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> -<div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--light_HAxW"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--dark_bGx0"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Products</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/moon"><strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div></a></li><li><a class="dropdown__link" href="/moonbase"><strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div></a></li><li><a class="dropdown__link" href="/proto"><strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div></a></li><li><a href="https://espresso.build" target="_blank" rel="noopener noreferrer" class="dropdown__link"><strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs"><strong>moon</strong></a></li><li><a class="dropdown__link" href="/docs/proto"><strong>proto</strong></a></li></ul></div><a class="navbar__item navbar__link" href="/docs/guides/ci">Guides</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a></div><div class="navbar__items navbar__items--right"><a href="https://moonrepo.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Sign in</a><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_WqAV"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_MB5r"><header class="hero hero--primary"><div class="container"><h1 class="hero__title">Archive</h1><p class="hero__subtitle">Archive</p></div></header><main><section class="margin-vert--lg"><div class="container"><div class="row"><div class="col col--4 margin-vert--lg"><h3>2022</h3><ul><li><a href="/blog/v0.21">December 19, 2022<!-- --> - <!-- -->moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust</a></li><li><a href="/blog/v0.20">November 29, 2022<!-- --> - <!-- -->moon v0.20 - Toolchain, caching, and hydration improvements</a></li><li><a href="/blog/typescript-monorepo">November 21, 2022<!-- --> - <!-- -->Integrating TypeScript in a monorepo</a></li><li><a href="/blog/v0.19">November 14, 2022<!-- --> - <!-- -->moon v0.19 - Remote caching beta, affected files, and graph optimization</a></li><li><a href="/blog/v0.18">October 31, 2022<!-- --> - <!-- -->moon v0.18 - Improved configuration and initialization flow</a></li><li><a href="/blog/v0.17">October 21, 2022<!-- --> - <!-- -->moon v0.17 - Webhooks, extended YAML, and improved runtime performance</a></li><li><a href="/blog/vscode-extension">October 17, 2022<!-- --> - <!-- -->New VS Code extension!</a></li><li><a href="/blog/v0.16">October 6, 2022<!-- --> - <!-- -->moon v0.16 - Per-project tool versions and TypeScript improvements</a></li><li><a href="/blog/v0.15">September 26, 2022<!-- --> - <!-- -->moon v0.15 - Enhanced Docker support and 1,000 stars!</a></li><li><a href="/blog/v0.14">September 13, 2022<!-- --> - <!-- -->moon v0.14 - Code generation and implicit dependencies</a></li><li><a href="/blog/v0.13">September 1, 2022<!-- --> - <!-- -->moon v0.13 - Hashing and toolchain improvements</a></li></ul></div><div class="col col--4 margin-vert--lg"><h3>2023</h3><ul><li><a href="/blog/moon-v1.15">October 9, 2023<!-- --> - <!-- -->moon v1.15 - Next-generation action graph</a></li><li><a href="/blog/proto-v0.19">September 29, 2023<!-- --> - <!-- -->proto v0.19 - Version pinning and outdated checks</a></li><li><a href="/blog/moon-v1.14">September 25, 2023<!-- --> - <!-- -->moon v1.14 - Improvements to running targets and toolchain versions</a></li><li><a href="/blog/proto-v0.18">September 18, 2023<!-- --> - <!-- -->proto v0.18 - List installed tools and configure HTTP client</a></li><li><a href="/blog/proto-v0.17">September 11, 2023<!-- --> - <!-- -->proto v0.17 - Experimental Python support and canary releases</a></li><li><a href="/blog/moon-v1.13">September 5, 2023<!-- --> - <!-- -->moon v1.13 - Toolchain now uses WASM plugins</a></li><li><a href="/blog/proto-v0.16">September 4, 2023<!-- --> - <!-- -->proto v0.16 - Add, remove, and purge plugins</a></li><li><a href="/blog/proto-v0.15">August 23, 2023<!-- --> - <!-- -->proto v0.15 - Install and uninstall globals</a></li><li><a href="/blog/moon-v1.12">August 21, 2023<!-- --> - <!-- -->moon v1.12 - Task improvements: extending, interactive, and more</a></li><li><a href="/blog/proto-v0.14">August 11, 2023<!-- --> - <!-- -->proto v0.14 - Node.js and Rust now powered by WASM plugins</a></li><li><a href="/blog/moon-v1.11">July 31, 2023<!-- --> - <!-- -->moon v1.11 - Next-generation project graph</a></li><li><a href="/blog/proto-v0.13">July 21, 2023<!-- --> - <!-- -->proto v0.13 - Bun, Deno, and Go now powered by WASM plugins</a></li><li><a href="/blog/moon-v1.10">July 10, 2023<!-- --> - <!-- -->moon v1.10 - Mid-year quality of life improvements</a></li><li><a href="/blog/proto-v0.12">July 7, 2023<!-- --> - <!-- -->proto v0.12 - Experimental WASM plugins</a></li><li><a href="/blog/moon-v1.9">June 26, 2023<!-- --> - <!-- -->moon v1.9 - VCS hooks management and improved task inheritance</a></li><li><a href="/blog/proto-v0.11">June 25, 2023<!-- --> - <!-- -->proto v0.11 - New shims and better logging</a></li><li><a href="/blog/moon-v1.8">June 12, 2023<!-- --> - <!-- -->moon v1.8 - Code owners and shared configuration</a></li><li><a href="/blog/moon-v1.7">May 30, 2023<!-- --> - <!-- -->moon v1.7 - Next-generation configuration and errors</a></li><li><a href="/blog/proto-v0.9">May 23, 2023<!-- --> - <!-- -->proto v0.9 - New GitHub action, plugin unpacking, and more</a></li><li><a href="/blog/moon-v1.6">May 15, 2023<!-- --> - <!-- -->moon v1.6 - Persistent tasks and task extending RFC</a></li><li><a href="/blog/moon-v1.5">May 8, 2023<!-- --> - <!-- -->moon v1.5 - Rust tier 2 and 3 support</a></li><li><a href="/blog/moon-v1.4">May 1, 2023<!-- --> - <!-- -->moon v1.4 - New tag target scope, MQL support for query commands, and more!</a></li><li><a href="/blog/proto-v0.8">April 28, 2023<!-- --> - <!-- -->proto v0.8 - Version detection and installation improvements</a></li><li><a href="/blog/moon-v1.3">April 24, 2023<!-- --> - <!-- -->moon v1.3 - Advanced run targeting and an official proto plugin</a></li><li><a href="/blog/proto-v0.7">April 21, 2023<!-- --> - <!-- -->proto v0.7 - First step towards plugins</a></li><li><a href="/blog/moon-v1.2">April 17, 2023<!-- --> - <!-- -->moon v1.2 - Tag based task inheritance</a></li><li><a href="/blog/proto-v0.6">April 13, 2023<!-- --> - <!-- -->proto v0.6 - Unused cleaning and improved global binaries</a></li><li><a href="/blog/proto-v0.5">April 6, 2023<!-- --> - <!-- -->proto v0.5 - Version aliasing and global binaries</a></li><li><a href="/blog/moon-v1.1">April 3, 2023<!-- --> - <!-- -->moon v1.1 - Task debugging and improvements</a></li><li><a href="/blog/proto-v0.4">March 31, 2023<!-- --> - <!-- -->proto v0.4 - Rust support, user configs, and more</a></li><li><a href="/blog/moon-v1.0">March 27, 2023<!-- --> - <!-- -->moon v1.0 - Official release! Project constraints, tagging, and more!</a></li><li><a href="/blog/proto-v0.3">March 15, 2023<!-- --> - <!-- -->proto v0.3 - Improved npm, go, and version requirement support</a></li><li><a href="/blog/v0.26">March 13, 2023<!-- --> - <!-- -->moon v0.26 - Deeper proto integration, Docker setup, and query commands</a></li><li><a href="/blog/proto">March 9, 2023<!-- --> - <!-- -->Introducing proto, a next-generation toolchain manager!</a></li><li><a href="/blog/v0.25">February 27, 2023<!-- --> - <!-- -->moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more</a></li><li><a href="/blog/v0.24">February 13, 2023<!-- --> - <!-- -->moon v0.24 - Remote caching, interactive tasks, query improvements, and more</a></li><li><a href="/blog/moonbase">February 8, 2023<!-- --> - <!-- -->Remote caching is now publicly available through moonbase</a></li><li><a href="/blog/v0.23">January 30, 2023<!-- --> - <!-- -->moon v0.23 - Scoped task inheritance, and project config updates</a></li><li><a href="/blog/v0.22">January 16, 2023<!-- --> - <!-- -->moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration</a></li><li><a href="/blog/2023-roadmap">January 4, 2023<!-- --> - <!-- -->What's in store for 2023</a></li></ul></div></div></div></section></main></div><footer class="bg-gray-100 dark:bg-slate-600" aria-labelledby="footer-heading"><h2 id="footer-heading" class="sr-only">Footer</h2><div class="max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"><div class="lg:grid lg:grid-cols-5 lg:gap-3"><div class="grid grid-cols-3 gap-3 lg:col-span-3"><div><h6 class="m-0 text-base font-semibold uppercase">Learn</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs">Docs</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs/guides/ci">Guides</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/blog">Blog</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/api">API</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Ecosystem</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo/moon/releases" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Releases</a></li><li><a href="https://github.com/moonrepo/moon-configs" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Shared configs</a></li><li><a href="https://github.com/moonrepo/dev" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Developer tools</a></li><li><a href="https://github.com/moonrepo/examples" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Examples repository</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Support</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">GitHub</a></li><li><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Discord</a></li><li><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Twitter</a></li></ul></div></div><div class="mt-4 lg:mt-0 col-span-2"><h6 class="m-0 text-base font-semibold uppercase">Contact us</h6><p class="text-base text-gray-800 dark:text-slate-100 font-normal">Want to learn more about moonrepo? Have questions?</p><div class="mt-2"><div class="flex justify-between gap-x-1"><div class="w-3/4"><label for="subject" class="sr-only">Subject</label><select id="subject" name="subject" required="" class="outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans"><option value="" selected=""></option><option value="Consultation">Consultation</option><option value="Partnership">Partnership</option><option value="Affiliation">Affiliation</option></select></div><button class="border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600 opacity-60 py-1 w-1/4" disabled="" id="contact-next" type="button">Next</button></div></div><div class="mt-4 flex justify-end items-start gap-1"><div><p class="text-sm text-gray-800 dark:text-slate-100 font-normal">Backed by</p></div><div><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1604 320" style="enable-background:new 0 0 1604 320" xml:space="preserve" role="img" height="22"><style>.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}</style><g id="Group-19"><path id="Fill-1" class="st0" d="M0 320h320V0H0z"></path><path id="Fill-2" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff" d="M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"></path><g id="Group-18" transform="translate(425.854 73.217)"><path id="Fill-3" class="st0" d="M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"></path><path id="Fill-5" class="st0" d="M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-7" class="st0" d="M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"></path><path id="Fill-9" class="st0" d="M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"></path><path id="Fill-11" class="st0" d="M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"></path><path id="Fill-13" class="st0" d="M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"></path><path id="Fill-14" class="st0" d="M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"></path><path id="Fill-15" class="st0" d="M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"></path><path id="Fill-16" class="st0" d="M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-17" class="st0" d="M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"></path></g></g></svg></div></div></div></div><div class="mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"><div class="text-sm text-gray-800 dark:text-slate-100 font-normal m-0"><div class="footer__copyright">Copyright © 2023, moonrepo, Inc.</div></div><div class="flex space-x-2"><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">GitHub</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></span></a><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Discord</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg></span></a><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Twitter</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></span></a></div></div></div></footer></div> -<script src="/assets/js/runtime~main.b7c7f339.js"></script> -<script src="/assets/js/main.6a2889a1.js"></script> +<div role="region" aria-label="Skip to main content"><a class="skipToContent_oPtH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--light_HAxW"><img src="/img/logo.svg" alt="moon" class="themedImage_BQGR themedImage--dark_bGx0"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Products</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/moon"><strong class="block mr-2">moon</strong><div class="opacity-60">Build system for managing codebases</div></a></li><li><a class="dropdown__link" href="/moonbase"><strong class="block mr-2">moonbase</strong><div class="opacity-60">Service for scaling CI pipelines</div></a></li><li><a class="dropdown__link" href="/proto"><strong class="block mr-2">proto</strong><div class="opacity-60">Multi-language version manager</div></a></li><li><a href="https://espresso.build" target="_blank" rel="noopener noreferrer" class="dropdown__link"><strong class="block mr-2">espresso</strong><div class="opacity-60">Next-gen JavaScript package system</div></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs"><strong>moon</strong></a></li><li><a class="dropdown__link" href="/docs/proto"><strong>proto</strong></a></li></ul></div><a class="navbar__item navbar__link" href="/docs/guides/ci">Guides</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a></div><div class="navbar__items navbar__items--right"><a href="https://moonrepo.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Sign in</a><div class="toggle_ki11 colorModeToggle_Hewu"><button class="clean-btn toggleButton_MMFG toggleButtonDisabled_Uw7m" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_lgto"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_U96C"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_WqAV"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_MB5r"><header class="hero hero--primary"><div class="container"><h1 class="hero__title">Archive</h1><p class="hero__subtitle">Archive</p></div></header><main><section class="margin-vert--lg"><div class="container"><div class="row"><div class="col col--4 margin-vert--lg"><h3>2022</h3><ul><li><a href="/blog/v0.21">December 19, 2022<!-- --> - <!-- -->moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust</a></li><li><a href="/blog/v0.20">November 29, 2022<!-- --> - <!-- -->moon v0.20 - Toolchain, caching, and hydration improvements</a></li><li><a href="/blog/typescript-monorepo">November 21, 2022<!-- --> - <!-- -->Integrating TypeScript in a monorepo</a></li><li><a href="/blog/v0.19">November 14, 2022<!-- --> - <!-- -->moon v0.19 - Remote caching beta, affected files, and graph optimization</a></li><li><a href="/blog/v0.18">October 31, 2022<!-- --> - <!-- -->moon v0.18 - Improved configuration and initialization flow</a></li><li><a href="/blog/v0.17">October 21, 2022<!-- --> - <!-- -->moon v0.17 - Webhooks, extended YAML, and improved runtime performance</a></li><li><a href="/blog/vscode-extension">October 17, 2022<!-- --> - <!-- -->New VS Code extension!</a></li><li><a href="/blog/v0.16">October 6, 2022<!-- --> - <!-- -->moon v0.16 - Per-project tool versions and TypeScript improvements</a></li><li><a href="/blog/v0.15">September 26, 2022<!-- --> - <!-- -->moon v0.15 - Enhanced Docker support and 1,000 stars!</a></li><li><a href="/blog/v0.14">September 13, 2022<!-- --> - <!-- -->moon v0.14 - Code generation and implicit dependencies</a></li><li><a href="/blog/v0.13">September 1, 2022<!-- --> - <!-- -->moon v0.13 - Hashing and toolchain improvements</a></li></ul></div><div class="col col--4 margin-vert--lg"><h3>2023</h3><ul><li><a href="/blog/proto-v0.20">October 20, 2023<!-- --> - <!-- -->proto v0.20 - New shims and binaries management</a></li><li><a href="/blog/moon-v1.15">October 9, 2023<!-- --> - <!-- -->moon v1.15 - Next-generation action graph</a></li><li><a href="/blog/proto-v0.19">September 29, 2023<!-- --> - <!-- -->proto v0.19 - Version pinning and outdated checks</a></li><li><a href="/blog/moon-v1.14">September 25, 2023<!-- --> - <!-- -->moon v1.14 - Improvements to running targets and toolchain versions</a></li><li><a href="/blog/proto-v0.18">September 18, 2023<!-- --> - <!-- -->proto v0.18 - List installed tools and configure HTTP client</a></li><li><a href="/blog/proto-v0.17">September 11, 2023<!-- --> - <!-- -->proto v0.17 - Experimental Python support and canary releases</a></li><li><a href="/blog/moon-v1.13">September 5, 2023<!-- --> - <!-- -->moon v1.13 - Toolchain now uses WASM plugins</a></li><li><a href="/blog/proto-v0.16">September 4, 2023<!-- --> - <!-- -->proto v0.16 - Add, remove, and purge plugins</a></li><li><a href="/blog/proto-v0.15">August 23, 2023<!-- --> - <!-- -->proto v0.15 - Install and uninstall globals</a></li><li><a href="/blog/moon-v1.12">August 21, 2023<!-- --> - <!-- -->moon v1.12 - Task improvements: extending, interactive, and more</a></li><li><a href="/blog/proto-v0.14">August 11, 2023<!-- --> - <!-- -->proto v0.14 - Node.js and Rust now powered by WASM plugins</a></li><li><a href="/blog/moon-v1.11">July 31, 2023<!-- --> - <!-- -->moon v1.11 - Next-generation project graph</a></li><li><a href="/blog/proto-v0.13">July 21, 2023<!-- --> - <!-- -->proto v0.13 - Bun, Deno, and Go now powered by WASM plugins</a></li><li><a href="/blog/moon-v1.10">July 10, 2023<!-- --> - <!-- -->moon v1.10 - Mid-year quality of life improvements</a></li><li><a href="/blog/proto-v0.12">July 7, 2023<!-- --> - <!-- -->proto v0.12 - Experimental WASM plugins</a></li><li><a href="/blog/moon-v1.9">June 26, 2023<!-- --> - <!-- -->moon v1.9 - VCS hooks management and improved task inheritance</a></li><li><a href="/blog/proto-v0.11">June 25, 2023<!-- --> - <!-- -->proto v0.11 - New shims and better logging</a></li><li><a href="/blog/moon-v1.8">June 12, 2023<!-- --> - <!-- -->moon v1.8 - Code owners and shared configuration</a></li><li><a href="/blog/moon-v1.7">May 30, 2023<!-- --> - <!-- -->moon v1.7 - Next-generation configuration and errors</a></li><li><a href="/blog/proto-v0.9">May 23, 2023<!-- --> - <!-- -->proto v0.9 - New GitHub action, plugin unpacking, and more</a></li><li><a href="/blog/moon-v1.6">May 15, 2023<!-- --> - <!-- -->moon v1.6 - Persistent tasks and task extending RFC</a></li><li><a href="/blog/moon-v1.5">May 8, 2023<!-- --> - <!-- -->moon v1.5 - Rust tier 2 and 3 support</a></li><li><a href="/blog/moon-v1.4">May 1, 2023<!-- --> - <!-- -->moon v1.4 - New tag target scope, MQL support for query commands, and more!</a></li><li><a href="/blog/proto-v0.8">April 28, 2023<!-- --> - <!-- -->proto v0.8 - Version detection and installation improvements</a></li><li><a href="/blog/moon-v1.3">April 24, 2023<!-- --> - <!-- -->moon v1.3 - Advanced run targeting and an official proto plugin</a></li><li><a href="/blog/proto-v0.7">April 21, 2023<!-- --> - <!-- -->proto v0.7 - First step towards plugins</a></li><li><a href="/blog/moon-v1.2">April 17, 2023<!-- --> - <!-- -->moon v1.2 - Tag based task inheritance</a></li><li><a href="/blog/proto-v0.6">April 13, 2023<!-- --> - <!-- -->proto v0.6 - Unused cleaning and improved global binaries</a></li><li><a href="/blog/proto-v0.5">April 6, 2023<!-- --> - <!-- -->proto v0.5 - Version aliasing and global binaries</a></li><li><a href="/blog/moon-v1.1">April 3, 2023<!-- --> - <!-- -->moon v1.1 - Task debugging and improvements</a></li><li><a href="/blog/proto-v0.4">March 31, 2023<!-- --> - <!-- -->proto v0.4 - Rust support, user configs, and more</a></li><li><a href="/blog/moon-v1.0">March 27, 2023<!-- --> - <!-- -->moon v1.0 - Official release! Project constraints, tagging, and more!</a></li><li><a href="/blog/proto-v0.3">March 15, 2023<!-- --> - <!-- -->proto v0.3 - Improved npm, go, and version requirement support</a></li><li><a href="/blog/v0.26">March 13, 2023<!-- --> - <!-- -->moon v0.26 - Deeper proto integration, Docker setup, and query commands</a></li><li><a href="/blog/proto">March 9, 2023<!-- --> - <!-- -->Introducing proto, a next-generation toolchain manager!</a></li><li><a href="/blog/v0.25">February 27, 2023<!-- --> - <!-- -->moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more</a></li><li><a href="/blog/v0.24">February 13, 2023<!-- --> - <!-- -->moon v0.24 - Remote caching, interactive tasks, query improvements, and more</a></li><li><a href="/blog/moonbase">February 8, 2023<!-- --> - <!-- -->Remote caching is now publicly available through moonbase</a></li><li><a href="/blog/v0.23">January 30, 2023<!-- --> - <!-- -->moon v0.23 - Scoped task inheritance, and project config updates</a></li><li><a href="/blog/v0.22">January 16, 2023<!-- --> - <!-- -->moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration</a></li><li><a href="/blog/2023-roadmap">January 4, 2023<!-- --> - <!-- -->What's in store for 2023</a></li></ul></div></div></div></section></main></div><footer class="bg-gray-100 dark:bg-slate-600" aria-labelledby="footer-heading"><h2 id="footer-heading" class="sr-only">Footer</h2><div class="max-w-7xl mx-auto py-3 px-2 sm:px-3 md:py-4 md:px-4 lg:px-6"><div class="lg:grid lg:grid-cols-5 lg:gap-3"><div class="grid grid-cols-3 gap-3 lg:col-span-3"><div><h6 class="m-0 text-base font-semibold uppercase">Learn</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs">Docs</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/docs/guides/ci">Guides</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/blog">Blog</a></li><li><a class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal" href="/api">API</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Ecosystem</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo/moon/releases" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Releases</a></li><li><a href="https://github.com/moonrepo/moon-configs" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Shared configs</a></li><li><a href="https://github.com/moonrepo/dev" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Developer tools</a></li><li><a href="https://github.com/moonrepo/examples" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Examples repository</a></li></ul></div><div><h6 class="m-0 text-base font-semibold uppercase">Support</h6><ul role="list" class="m-0 mt-2 p-0 space-y-1 list-none"><li><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">GitHub</a></li><li><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Discord</a></li><li><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal">Twitter</a></li></ul></div></div><div class="mt-4 lg:mt-0 col-span-2"><h6 class="m-0 text-base font-semibold uppercase">Contact us</h6><p class="text-base text-gray-800 dark:text-slate-100 font-normal">Want to learn more about moonrepo? Have questions?</p><div class="mt-2"><div class="flex justify-between gap-x-1"><div class="w-3/4"><label for="subject" class="sr-only">Subject</label><select id="subject" name="subject" required="" class="outline-none min-w-0 w-full bg-white border border-transparent rounded-md px-1 py-1 text-base text-gray-800 placeholder-gray-600 h-full font-sans"><option value="" selected=""></option><option value="Consultation">Consultation</option><option value="Partnership">Partnership</option><option value="Affiliation">Affiliation</option></select></div><button class="border border-transparent rounded-md px-2 flex items-center justify-center text-base font-bold text-white bg-blurple-400 dark:bg-purple-600 opacity-60 py-1 w-1/4" disabled="" id="contact-next" type="button">Next</button></div></div><div class="mt-4 flex justify-end items-start gap-1"><div><p class="text-sm text-gray-800 dark:text-slate-100 font-normal">Backed by</p></div><div><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1604 320" style="enable-background:new 0 0 1604 320" xml:space="preserve" role="img" height="22"><style>.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#fb651e}</style><g id="Group-19"><path id="Fill-1" class="st0" d="M0 320h320V0H0z"></path><path id="Fill-2" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff" d="M173 175.9V247h-27v-71.1L77.1 73H110l49.6 76L209 73h32.9z"></path><g id="Group-18" transform="translate(425.854 73.217)"><path id="Fill-3" class="st0" d="M81.8 34.1C52.2 34.1 30 57 30 86.6s22.2 52.7 51.8 52.7c19 0 35.5-9.8 44.4-26.3l25.4 15.1c-14.2 24.3-40.8 40.1-69.8 40.1C36.2 168.1 0 131.9 0 86.6 0 41.2 36.2 5 81.8 5c29.3 0 55.6 15.6 69.8 40.1l-25.4 15.1c-9-16.5-25.4-26.1-44.4-26.1"></path><path id="Fill-5" class="st0" d="M249.2 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-7" class="st0" d="M467.1 97.6v67.2h-29v-62.1c0-17.4-8.5-28.4-21.3-28.4-13.1 0-22.7 11-22.7 28.4v62.1h-28v-62.1c0-17.4-8.8-28.4-21.7-28.4-12.9 0-22.3 11-22.3 28.4v62.1h-29v-115h29v14.7c7.1-11 18.1-17.9 31.6-17.9 14.7 0 26.3 8.3 33.4 21.2 7.3-11.5 20.8-21.2 37.8-21.2 25.5 0 42.2 22.5 42.2 51"></path><path id="Fill-9" class="st0" d="M570.2 108.4c0-19.2-11.9-33-28.6-33-16.3 0-28.6 13.1-28.6 32.7 0 19.5 12.6 32.7 29.1 32.7 16.2-.1 28.1-13.6 28.1-32.4m-22.5 59.4c-16 0-27.8-7.3-34.6-17.4v14.4h-29V4.8h29v59c7-9.4 18.8-16.2 34.1-16.2 29.7 0 52.4 25.6 52.9 60.1.5 34.9-22.7 60.1-52.4 60.1"></path><path id="Fill-11" class="st0" d="M612.1 164.8h29v-115h-29v115zm-3.7-147.6c0-9.8 8.2-17.2 18.1-17.2 9.6 0 17.6 7.3 17.6 17.2 0 9.8-8 17.2-17.6 17.2-9.8-.1-18.1-7.4-18.1-17.2z"></path><path id="Fill-13" class="st0" d="M766.1 98.1v66.7h-28v-60.5c0-18.5-9.7-30-23.7-30-15.4 0-26.3 14-26.3 30.5v60h-28v-115h28v14.5c7.8-10.8 20.3-17.7 34.9-17.7 25.8 0 43.1 22 43.1 51.5"></path><path id="Fill-14" class="st0" d="M854.1 113.8v-2.5l-29.3 5.7c-9.8 2.3-15.8 7.3-15.8 14 0 7.1 6.5 12.4 17.2 12.1 15.4-.5 27.9-13.9 27.9-29.3m28-18.4v69.4h-28v-13.3c-8.5 9.2-21.8 16-36.5 16.3-19.5 0-36.7-12.8-36.7-34.8 0-20.8 15.6-32.7 38.8-37.3l33.7-6.4c-2.3-9.6-9.6-16.9-20.7-16.9-11 0-21.3 6.9-27.5 15.6l-21.1-15.3c10.8-15.1 29.8-25.2 48.7-25.2 28.2-.2 49.3 19.3 49.3 47.9"></path><path id="Fill-15" class="st0" d="M941.1 75.8V124c0 9.4 4.1 13.7 12.6 13.7h14.4v27h-18.4c-24.5 0-36.6-12-36.6-37.2V75.8h-21v-26h20V21.4l29-8.9v37.3h27v26h-27z"></path><path id="Fill-16" class="st0" d="M1069 107.2c0-18.5-13.5-32.5-30.9-32.5-17.9 0-31.4 14-31.4 32.5s13.5 32.5 31.4 32.5c17.1 0 30.9-14 30.9-32.5m-91.4 0c0-33.4 26.8-60.2 60.5-60.2 33.2 0 60 26.8 60 60.2s-26.8 60.2-60 60.2c-33.7 0-60.5-26.8-60.5-60.2"></path><path id="Fill-17" class="st0" d="M1178.1 47.3v27.9c-25.9 0-37 12.6-37 29.1v60.5h-28v-115h28v14.4c7.9-10.3 20.6-16.9 37-16.9"></path></g></g></svg></div></div></div></div><div class="mt-3 pt-3 md:mt-4 md:pt-4 border-0 border-t border-solid border-gray-200 dark:border-slate-400 flex items-center justify-between"><div class="text-sm text-gray-800 dark:text-slate-100 font-normal m-0"><div class="footer__copyright">Copyright © 2023, moonrepo, Inc.</div></div><div class="flex space-x-2"><a href="https://github.com/moonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">GitHub</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></span></a><a href="https://discord.gg/qCh9MEynv2" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Discord</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg></span></a><a href="https://twitter.com/tothemoonrepo" target="_blank" rel="noopener noreferrer" class="cursor-pointer text-base text-blurple-300 hover:text-blurple-500 dark:text-purple-400 dark:hover:text-purple-200 font-normal"><span class="sr-only">Twitter</span><span class="inline-block" aria-hidden="true"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></span></a></div></div></div></footer></div> +<script src="/assets/js/runtime~main.0eb29a1d.js"></script> +<script src="/assets/js/main.f61cdfcc.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index 68817971065..78b1df1904a 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -2,11 +2,47 @@ <feed xmlns="http://www.w3.org/2005/Atom"> <id>https://moonrepo.dev/blog</id> <title>moonrepo Blog - 2023-10-09T00:00:00.000Z + 2023-10-20T00:00:00.000Z https://github.com/jpmonette/feed moonrepo Blog https://moonrepo.dev/img/favicon.svg + + <![CDATA[proto v0.20 - New shims and binaries management]]> + https://moonrepo.dev/blog/proto-v0.20 + + 2023-10-20T00:00:00.000Z + + In this release, we're reworking how shims and binaries work.

Shims and Binaries (breaking)

Since proto's inception, we've used shims as a way to execute installed tools. This allowed us to +wrap the underlying tool binary to provide additional functionality, such as automatic version +detection, runtime hooks, and more. However, this approach has some limitations, such as:

  • Shims are forced onto you and there's no way to use proto without shims.
  • Shims are slower than executing the native binary, upwards of 10x slower. While this equates in +milliseconds, it can be noticeable dependending on the tool.
  • For Windows, our shim files are .cmd and not .exe. This causes a lot of weird and unexpected +problems when an environment expects a real executable, or uses a hard-coded .exe extension.

To remedy this, we're introducing both a shim and non-shim approach, which has resulted in a pretty +big breaking change. Shims are now generated in ~/.proto/shims (instead of ~/.proto/bin), while +~/.proto/bin will now store symlinks to native binaries. To migrate to this new pattern, we're +introducing a new proto migrate command (this only needs to be ran once).

$ proto upgrade
$ proto migrate v0.20 --log debug

How it works

When installing proto for the first time, or running the proto migrate command, we prepend PATH +with $PROTO_HOME/shims:$PROTO_HOME/bin. This allows shims to be executed first and fallthrough +to native binaries if a shim does not exist (for example, .exe on Windows).

Furthermore, if you'd prefer to only use shims, or only use binaries, you can update PATH and +remove the unwanted directory path.

And lastly, if shims are causing problems, you can now easily reference the native binaries +directly. This was rather complicated before.

Comparison

ShimsBinaries
Location~/.proto/shims~/.proto/bin
Created asScripts that run proto runSymlinks to the native binary
Version executedDetects version at runtimeLast version that was installed + pinned
Supported forAll toolsOnly tools that support native execution (may not work for .js files)

Support for minisign checksums

When proto installs a tool, it runs a process known as checksum verification, where we ensure the +download hasn't been modified maliciously in anyway. Historically we only supported SHA256 +checksums, but now, we also support the new minisign tool, +used by popular tools like Zig.

If you're building a plugin for a tool that uses minisign, you can use the new +checksum_public_key (WASM) or +install.checksum-public-key (TOML) field to +provide the public key for use in verification.

When the checksum URL ends in a .minisig extension, proto will automatically use minisign for +checksum verification!

[install]
checksum-url = "https://domain.com/some/path/to/checksum.minisig"
checksum-public-key = "untrusted comment: ..."

Other changes

View the official release for a full list +of changes.

  • Updated proto use to install tools in parallel.
  • Updated proto plugins and proto tools to load plugins in parallel.
  • Updated proto run to error when the tool attempts to self-upgrade outside of proto.
  • Rust plugin
    • Will now attempt to install rustup if it does not exist on the current machine.
    • Will now respect the RUSTUP_HOME environment variable when locating the .rustup store.
  • Schema plugin
    • Added install.checksum_public_key for defining the public key used to verify checksums.
    • Added metadata.self_upgrade_commands for defining which sub-commands should be blocked for +self-upgrades.
]]>
+ + Miles Johnson + https://github.com/milesj + + + + + +
<![CDATA[moon v1.15 - Next-generation action graph]]> https://moonrepo.dev/blog/moon-v1.15 diff --git a/blog/moon-v1.0.html b/blog/moon-v1.0.html index 5a04d7d9ba3..3ead1039018 100644 --- a/blog/moon-v1.0.html +++ b/blog/moon-v1.0.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.0 - Official release! Project constraints, tagging, and more!

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

moon v1.0 - Official release! Project constraints, tagging, and more!

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've officially reached a stable v1 of moon! This release is feature packed with quality of life improvements.

The road to v1

It's been 10 months since moon launched publicly, and since that time we have landed 501 pull requests, fixed 100's of bugs, made 16 breaking changes, released 26 versions, and have been used by @@ -63,7 +63,7 @@ $timestamp. With these new tokens, you're now able to implement clever or unusual solutions, like grouping builds or deploys based on the current timestamp.

moon.yml
tasks:
deploy:
command: 'app deploy --output ./build/$timestamp'

Other changes

View the official release for a full list of changes.

  • Added a hasher.warnOnMissingInputs setting to .moon/workspace.yml.
  • Added a $projectAlias task token.
  • Added a telemetry setting to .moon/workspace.yml.
  • Updated the new version check to only run on the check, ci, run, and sync commands.

What's next?

Expect the following in the v1.1 release!

  • Polish and stability initiatives.
  • Task inheritance based on tags.
  • Deno tier 3 support.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.1.html b/blog/moon-v1.1.html index f9303d56f70..c03a761c681 100644 --- a/blog/moon-v1.1.html +++ b/blog/moon-v1.1.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.1 - Task debugging and improvements

· 2 min read
Miles Johnson

With this release, we're introducing some quality of life task improvements.

Token variable support in task commands

moon supports a concept known as tokens where values are injected into tasks +

moon v1.1 - Task debugging and improvements

· 2 min read
Miles Johnson

With this release, we're introducing some quality of life task improvements.

Token variable support in task commands

moon supports a concept known as tokens where values are injected into tasks during project graph creation. This allows for dynamic values in your tasks, such as the current project language, or the current task name, and is crucial for task inheritance to work.

However, tokens were only supported by task args, inputs, and outputs, but not commands... until now. Commands can now use token variables (but not token functions). For example, this is useful for @@ -29,7 +29,7 @@ task information by running moon task <target>.

$ moon task app:build

This command will display resolved information, including inherited settings, and path resolved inputs and outputs. Here's an example:

RUNTIME:BUILD

ID: build
Project: runtime
Platform: node
Type: build

PROCESS

Command: packemon build --addFiles --addExports --declaration
Environment variables:
- NODE_ENV = production
Working directory: /Projects/moon/packages/runtime
Runs dependencies: Concurrently
Runs in CI: Yes

DEPENDS ON

- types:build

INPUTS

- .moon/*.yml
- packages/runtime/src/**/*
- packages/runtime/tsconfig.*.json
- packages/runtime/types/**/*
- packages/runtime/package.json
- packages/runtime/tsconfig.json
- tsconfig.options.json

OUTPUTS

- packages/runtime/cjs

Other changes

View the official release for a full list of changes.

  • Support pnpm v8's new lockfile format.
  • Better handling for task's that execute the moon binary.
  • Updated noop tasks to be cacheable, so that they can be used for cache hit early returns.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.10.html b/blog/moon-v1.10.html index ab03e8c3551..4c412acda65 100644 --- a/blog/moon-v1.10.html +++ b/blog/moon-v1.10.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.10 - Mid-year quality of life improvements

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

moon v1.10 - Mid-year quality of life improvements

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer experience improvements.

Quality improvements

In the past 6 months, we've released over 16 versions of moon, with our official v1.0 release among them. This is extremely impressive and we're very proud of the progress we've made. To continue this trend, we'll be starting a new initiative that will land quality of life improvements (instead of @@ -53,7 +53,7 @@ use internally to diagnose reported issues, or help the Discord community. We hope you find this guide extremely beneficial!

Other changes

View the official release for a full list of changes.

  • Updated moon ci to include a summary of all failed actions.
  • Updated the run report to include stderr/stdout for all attempts.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.11.html b/blog/moon-v1.11.html index cb15bcb038b..bf5f09fd3fc 100644 --- a/blog/moon-v1.11.html +++ b/blog/moon-v1.11.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.11 - Next-generation project graph

· 5 min read
Miles Johnson

With this release, we've focused heavily on rewriting our project graph for the next-generation of +

moon v1.11 - Next-generation project graph

· 5 min read
Miles Johnson

With this release, we've focused heavily on rewriting our project graph for the next-generation of moon.

New project graph

One of the first features that was built for moon was the project graph, as this was required to determine relationships between tasks and projects. Its initial implementation was rather simple, as it was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project @@ -56,7 +56,7 @@ then those from the system.

moon.yml
tasks:
build:
command: 'docker build --build-arg pkg=$PKG_NAME'
env:
PKG_NAME: 'foo-bar'
  • Project dependencies can now mark relationships as build. This is only applicable for languages that support build dependencies, like Rust.
moon.yml
dependsOn:
- id: 'foo'
scope: 'build'

Other changes

View the official release for a full list of changes.

  • Identifiers (project names, file groups, etc) can now be prefixed with underscores (_).
  • Added Poetry detection support for Python projects.
  • Added an experiments setting to .moon/workspace.yml.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.12.html b/blog/moon-v1.12.html index faa1082c1ae..269118f98f3 100644 --- a/blog/moon-v1.12.html +++ b/blog/moon-v1.12.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.12 - Task improvements: extending, interactive, and more

· 4 min read
Miles Johnson

In this release, we focused heavily on improving tasks, its configuration, and related systems.

Extending sibling or inherited tasks

Three months ago, we posted an +

moon v1.12 - Task improvements: extending, interactive, and more

· 4 min read
Miles Johnson

In this release, we focused heavily on improving tasks, its configuration, and related systems.

Extending sibling or inherited tasks

Three months ago, we posted an RFC on how to support task extending / task variants. On paper this doesn't sound like a hard problem to solve, but internally it would of been an uphill battle to implement. Thanks to previous releases from the past few months, and the rewrite of the @@ -45,7 +45,7 @@ variable, like @group(sources), the list of paths will be joined with a comma (,).

moon.yml
tasks:
build:
# ...
env:
SRCS: '@group(sources)'

Since the environment variable is simply a string, you could parse it with your language of choice to extract the list of paths.

const paths = process.env.SRCS.split(',');

Other changes

View the official release for a full list of changes.

  • Added git worktree support.
  • Updated task outputs to support negated globs.
  • Will now log a warning to the console if a configuration file uses the .yaml extension.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.13.html b/blog/moon-v1.13.html index fd4abe2c91e..fe44371ec2c 100644 --- a/blog/moon-v1.13.html +++ b/blog/moon-v1.13.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.13 - Toolchain now uses WASM plugins

· 3 min read
Miles Johnson

This is a light release that focused primarily on upgrading to the WASM based proto implementation.

proto upgrade and WASM plugins

Over the last few months, we've made immense strides on proto, our multi-language +

moon v1.13 - Toolchain now uses WASM plugins

· 3 min read
Miles Johnson

This is a light release that focused primarily on upgrading to the WASM based proto implementation.

proto upgrade and WASM plugins

Over the last few months, we've made immense strides on proto, our multi-language toolchain. For those of you unaware, moon's toolchain is built on top of proto, and we accomplish this by utilizing the same Rust code between both tools.

However, moon has been locked to proto v0.12, which was a purely Rust based implementation. With the release of proto v0.13 and onward, proto has moved to @@ -44,7 +44,7 @@ that it's side-effect free.

Other changes

View the official release for a full list of changes.

  • Added colors to command line --help menus.
  • Updated runner.archivableTargets to support tag scoped targets.
  • Updated moon query tasks --affected to filter based on affected task, instead of affected project.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.14.html b/blog/moon-v1.14.html index a52c6e2edbc..c39ed8fa5e7 100644 --- a/blog/moon-v1.14.html +++ b/blog/moon-v1.14.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.14 - Improvements to running targets and toolchain versions

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

moon v1.14 - Improvements to running targets and toolchain versions

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer experience.

Shorthand for moon run

This has been a long requested feature and we're happy to finally deliver it! You can now omit the "run" keyword for the moon run command, just so long as the first non-option argument is a target (must contain a :).

# v1.13
$ moon run app:build

# v1.14+
$ moon app:build

Choose targets for moon ci

When we initially built moon ci, we wanted a solution that simply ran @@ -40,7 +40,7 @@ official version specification documentation.

Other changes

View the official release for a full list of changes.

  • Added packemon, sveltekit, vite, vitest to moonrepo/moon-configs.
  • Updated .moon/tasks to support nested folders, for better organization of task files.
  • Improved handling of certificates and proxies.
  • Updated to proto v0.18.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.15.html b/blog/moon-v1.15.html index 52e6d24319d..8052f47129f 100644 --- a/blog/moon-v1.15.html +++ b/blog/moon-v1.15.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.15 - Next-generation action graph

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +

moon v1.15 - Next-generation action graph

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the dependency graph.

Hello action graph, goodbye dependency graph

For the past few months, we've been working on a rewrite of our action pipeline, which consists of the project graph, dependency graph, task executor, process pipeline, and more. It's a slow process, with many different pieces that must land in sequence, but we're almost done. The next step in this @@ -59,8 +59,8 @@ moon run <app>:start respectively. To customize the task names, you can set the NIXPACKS_MOON_BUILD_TASK and NIXPACKS_MOON_START_TASK environment variables.

info

This is currently only supported for Node.js projects, but will be expanded to other languages in the future!

Other changes

View the official release for a full list -of changes.

  • Added a moon action-graph command.
  • Added a --dependents argument to moon action-graph.
  • Added the ability to skip non-RunTask actions using environment variables.
  • Deprecated the moon dep-graph command.
- - +of changes.

  • Added a moon action-graph command.
  • Added a --dependents argument to moon action-graph.
  • Added the ability to skip non-RunTask actions using environment variables.
  • Deprecated the moon dep-graph command.
+ + \ No newline at end of file diff --git a/blog/moon-v1.2.html b/blog/moon-v1.2.html index d7daaa0f1d6..53115c96bf5 100644 --- a/blog/moon-v1.2.html +++ b/blog/moon-v1.2.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.2 - Tag based task inheritance

· 2 min read
Miles Johnson

In this small release, we're improving our task inheritance and performance.

Task inheritance based on project tags

In v0.23 we introduced scoped task inheritance by +

moon v1.2 - Tag based task inheritance

· 2 min read
Miles Johnson

In this small release, we're improving our task inheritance and performance.

Task inheritance based on project tags

In v0.23 we introduced scoped task inheritance by project type/language, and in v1.0 we introduced project tagging, but what if we combined both of these features? In this release, you can now define workspace-level tasks by tag that'll be inherited by all projects with that tag.

To demonstrate this, say you have a monorepo composed of multiple Astro @@ -29,7 +29,7 @@ the official task inheritance docs for more information on tag based inheritance.

Other changes

View the official release for a full list of changes.

  • Upgraded to proto v0.6.
  • Improvements to file system operations.
  • Minor improvements to performance.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.3.html b/blog/moon-v1.3.html index 81ff3d25f8e..9db13bbdb5f 100644 --- a/blog/moon-v1.3.html +++ b/blog/moon-v1.3.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.3 - Advanced run targeting and an official proto plugin

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

moon v1.3 - Advanced run targeting and an official proto plugin

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query language!

Run targets based on a query

Our moon run command is pretty powerful. It allows you to run targets in one, many, or all projects. It also supports running multiple targets in parallel. However, it wasn't powerful enough, as it couldn't run the following types of scenarios:

  • Run a target in projects of a specific language.
  • Run a target in libraries or applications.
  • Run a target based on project file system path.
  • Run a target in projects with a matching tag.
  • Run a target in projects that match a keyword.
  • Run a target in projects based on AND or OR conditions.
  • Or a combination of these.
  • And many more!

Supporting all of these scenarios through CLI arguments just feels like bad design, and would result @@ -33,7 +33,7 @@ enforcing the same version for all developers on your team!

.prototools
moon = "1.3.0"

When using this approach, be sure ~/proto/.bin is in your PATH, and takes precedence over ~/.moon/bin.

Other changes

View the official release for a full list of changes.

  • Upgraded to proto v0.7.
  • Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders.
  • Updated config loading to be strict and error on unknown fields for non-root fields.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.4.html b/blog/moon-v1.4.html index 899790ee463..7f458e0fac9 100644 --- a/blog/moon-v1.4.html +++ b/blog/moon-v1.4.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.4 - New tag target scope, MQL support for query commands, and more!

· 2 min read
Miles Johnson

With this release, we're bringing further improvements to tags and MQL.

Run targets by tag with #tag:task

We love our community, as you all continuously suggest new and awesome features that haven't crossed +

moon v1.4 - New tag target scope, MQL support for query commands, and more!

· 2 min read
Miles Johnson

With this release, we're bringing further improvements to tags and MQL.

Run targets by tag with #tag:task

We love our community, as you all continuously suggest new and awesome features that haven't crossed our minds. One such feature was the ability to run tasks for all projects with a tag, suggested by @theoephraim, which is now possible with the new tag scope, #tag:task.

As an example, we can easily lint all projects that have the frontend tag.

$ moon run '#frontend:lint'

Because # is special syntax and denotes a comment, the target will need to be quoted to work @@ -34,7 +34,7 @@ instead will now always inherit the package.json name as an alias. For example, if you're package name was @company/utils, you can now run a target like so:

$ moon run @company/utils:build

This setting is now a no-op and can be removed from your configuration.

Other changes

View the official release for a full list of changes.

  • Upgraded to proto v0.8.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.5.html b/blog/moon-v1.5.html index 8d9e2176cad..55eea8785c2 100644 --- a/blog/moon-v1.5.html +++ b/blog/moon-v1.5.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.5 - Rust tier 2 and 3 support

· 3 min read
Miles Johnson

With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language.

As big fans of Rust (moon is written in it), we're stoked to finally add full language support, and +

moon v1.5 - Rust tier 2 and 3 support

· 3 min read
Miles Johnson

With this release, we're announcing not just tier 2, but also tier 3 support for the Rust language.

As big fans of Rust (moon is written in it), we're stoked to finally add full language support, and to integrate our first non-JavaScript language! This release is rather massive, and required a ton of internal work, most of which we'll skip over.

Instead we'll only talk about the key features that you, the consumers, will actually care about. To start, we've started working on a Rust handbook, that outlines how to enable Rust, what kind of @@ -48,7 +48,7 @@ remove the entire target directory, greatly reducing the size of the image. Pruning makes the assumption that it's being ran after a release profile has been built.

RUN moon run rust-app:build-release
RUN moon docker prune

Other changes

View the official release for a full list of changes.

- - + + \ No newline at end of file diff --git a/blog/moon-v1.6.html b/blog/moon-v1.6.html index 219162aaf28..76fa049201a 100644 --- a/blog/moon-v1.6.html +++ b/blog/moon-v1.6.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.6 - Persistent tasks and task extending RFC

· 4 min read
Miles Johnson

In this release, we're introducing a new feature called persistent tasks, and an RFC for extending +

moon v1.6 - Persistent tasks and task extending RFC

· 4 min read
Miles Johnson

In this release, we're introducing a new feature called persistent tasks, and an RFC for extending tasks.

RFC: Task extending/variants

Before we dive into this release, we want to briefly talk about a new RFC that we're looking for feedback on, task extending/variants. This is a feature that has been top-of-mind since moon's inception, but we haven't had the foundation in place @@ -42,7 +42,7 @@ excerpt below, all messages with "log" after the date are the old log crate, while the others with distinct module names are the new tracing crate.

[DEBUG 14:44:19] moon_process::command_inspector  Running command git status --porcelain --untracked-files -z  env_vars={} working_dir="~/Projects/moon"
[DEBUG 14:44:19] log Filtering based on touched status "all" log.target="moon:query:touched-files" log.module_path="moon_cli::queries::touched_files" log.file="crates/cli/src/queries/touched_files.rs" log.line=85
[DEBUG 14:44:19] log Creating dependency graph log.target="moon:dep-graph" log.module_path="moon_dep_graph::dep_builder" log.file="crates/core/dep-graph/src/dep_builder.rs" log.line=35
[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target="moon:action-pipeline" log.module_path="moon_action_pipeline::pipeline" log.file="crates/core/action-pipeline/src/pipeline.rs" log.line=93
[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target="moon:action:setup-tool" log.module_path="moon_action_pipeline::actions::setup_tool" log.file="crates/core/action-pipeline/src/actions/setup_tool.rs" log.line=26
[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for "20.0.0"
[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json

Other changes

View the official release for a full list of changes.

  • Updated long running processes to log a checkpoint indicating it's still running.
  • Reworked file groups to use workspace relative paths, instead of project relative.
  • Reworked processes to better handle command line arguments, shells, and piped stdin input.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.7.html b/blog/moon-v1.7.html index 6ff4a17e5e1..c9037cb7df3 100644 --- a/blog/moon-v1.7.html +++ b/blog/moon-v1.7.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.7 - Next-generation configuration and errors

· 3 min read
Miles Johnson

With this release, we've rewritten configuration from the ground up, improved error messages, and +

moon v1.7 - Next-generation configuration and errors

· 3 min read
Miles Johnson

With this release, we've rewritten configuration from the ground up, improved error messages, and started work on diagnostics!

Configuration rewrite

If you've ever written Rust before, you may be familiar with the state of configuration crates in the ecosystem. There's only 2 viable choices to choose from, and we've been using 1 of them. However, it's been a constant source of friction for our use cases, and didn't support features that @@ -38,7 +38,7 @@ Rust crate, miette.

We've introduced this crate to handle all errors and diagnostics within moon, not just configuration. So expect a much better developer experience moving forward!

Other changes

View the official release for a full list of changes.

  • Added support for npm lockfile v3 format.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.8.html b/blog/moon-v1.8.html index 6e4caceb89f..8ac40c44d3d 100644 --- a/blog/moon-v1.8.html +++ b/blog/moon-v1.8.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.8 - Code owners and shared configuration

· 4 min read
Miles Johnson

With this release, we've focused on a critical facet of managing a large codebase, source code +

moon v1.8 - Code owners and shared configuration

· 4 min read
Miles Johnson

With this release, we've focused on a critical facet of managing a large codebase, source code ownership, and sharing task configuration.

Support for code ownership

An important workflow for companies of any size is reviewing code, and ensuring the right people are reviewing and approving that code. This is especially true for large companies with hundreds of developers, or many distinct teams working in a single codebase.

Popular VCS providers like GitHub, GitLab, and @@ -51,7 +51,7 @@ can inherit tasks from a remote source, and then extend or override them as needed. For example, create the tag-based config:

.moon/tasks/tag-rust.yml
extends: 'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml'

And then in Rust projects that you'd like to inherit these tasks, add the following tags:

<project>/moon.yml
tags: ['rust']

It's as simple as that!

Other changes

View the official release for a full list of changes.

  • Added a new action to the graph, SyncWorkspace, that'll be used for workspace-level checks.
  • Added MOON_OUTPUT_STYLE and MOON_RETRY_COUNT environment variables.
- - + + \ No newline at end of file diff --git a/blog/moon-v1.9.html b/blog/moon-v1.9.html index 756f8ece254..dc76742f846 100644 --- a/blog/moon-v1.9.html +++ b/blog/moon-v1.9.html @@ -13,12 +13,12 @@ - - + +
-

moon v1.9 - VCS hooks management and improved task inheritance

· 3 min read
Miles Johnson

In this release, we're introducing a long requested feature, VCS hooks! As well as a complete +

moon v1.9 - VCS hooks management and improved task inheritance

· 3 min read
Miles Johnson

In this release, we're introducing a long requested feature, VCS hooks! As well as a complete rewrite of our task inheritance layer.

Support for VCS hooks

In our last release, we added support for code ownership, to better help teams manage their code review and approval workflows. To continue this trend of "features all companies require but don't have a good solution for", we're adding support for VCS hooks, @@ -47,7 +47,7 @@ it's either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not accounted for in our current unit test suite. Please report them either way!

Other changes

View the official release for a full list of changes.

  • Added --clean and --force flags to moon sync codeowners command.
  • Updated moon init to detect VCS providers and resolve fully-qualified tool versions.
  • Improved VCS file handling, caching, and performance.
- - + + \ No newline at end of file diff --git a/blog/moonbase.html b/blog/moonbase.html index f7bbef7842d..a5c3d602a9b 100644 --- a/blog/moonbase.html +++ b/blog/moonbase.html @@ -13,12 +13,12 @@ - - + +
-

Remote caching is now publicly available through moonbase

· 2 min read
Miles Johnson
James Pozdena

We are proud to announce the launch of moonbase remote caching – a new solution that +

Remote caching is now publicly available through moonbase

· 2 min read
Miles Johnson
James Pozdena

We are proud to announce the launch of moonbase remote caching – a new solution that helps moon developers streamline their build processes and save time.

Remote caching allows developers to cache artifacts across builds, improving the efficiency of their Continuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts when moon is run with moonbase remote caching enabled. In the event @@ -36,7 +36,7 @@ moon and moonbase. This includes new logos and typography, which we're very excited for! This is only the beginning, as we're also working on additional behind the scenes products. Stay tuned!

- - + + \ No newline at end of file diff --git a/blog/page/2.html b/blog/page/2.html index 628dd77d9a3..d6872ef206e 100644 --- a/blog/page/2.html +++ b/blog/page/2.html @@ -13,19 +13,18 @@ - - + +
-

· 5 min read
Miles Johnson

With this release, we've focused heavily on rewriting our project graph for the next-generation of +

- - +started work on diagnostics!

+ + \ No newline at end of file diff --git a/blog/page/3.html b/blog/page/3.html index 76dd0c8888a..4cfcac0e950 100644 --- a/blog/page/3.html +++ b/blog/page/3.html @@ -13,15 +13,16 @@ - - + +
-

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

- - +improvements.

+ + \ No newline at end of file diff --git a/blog/page/4.html b/blog/page/4.html index f15249b3991..7beb467e347 100644 --- a/blog/page/4.html +++ b/blog/page/4.html @@ -13,12 +13,12 @@ - - + +
-

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

- - +infrastructure and workflow improvements!

+ + \ No newline at end of file diff --git a/blog/page/5.html b/blog/page/5.html index 8c9f04185c1..720afae0f79 100644 --- a/blog/page/5.html +++ b/blog/page/5.html @@ -13,12 +13,13 @@ - - + +
-

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered +

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

- - +workflow, as well as some minor quality of life improvements for template files and run reports.

+ + \ No newline at end of file diff --git a/blog/page/6.html b/blog/page/6.html index 5702e11a6ee..abb4f726ce3 100644 --- a/blog/page/6.html +++ b/blog/page/6.html @@ -13,14 +13,16 @@ - - + +
-

· 3 min read
Miles Johnson

With this release, we've landed some improvements to our smart hashing, and paved the road for +

- - + + \ No newline at end of file diff --git a/blog/proto-v0.11.html b/blog/proto-v0.11.html index 74af039e6e3..c719b9e94ec 100644 --- a/blog/proto-v0.11.html +++ b/blog/proto-v0.11.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.11 - New shims and better logging

· 2 min read
Miles Johnson

This is a small release that improves shims and logs.

New and improved shims

The core facet of proto is our shims found at ~/.proto/bin. They exist purely to re-route tool +

proto v0.11 - New shims and better logging

· 2 min read
Miles Johnson

This is a small release that improves shims and logs.

New and improved shims

The core facet of proto is our shims found at ~/.proto/bin. They exist purely to re-route tool executions internally to proto, so that we can detect the correct version of these tools to run. However, maintaining and creating these shims has historically been very complicated. So we chose to rewrite them from the ground-up!

All tools should continue to function exactly as they did before, if not better. Furthermore, @@ -28,7 +28,7 @@ now support a global --log option, which can be passed to any proto command.

$ proto install node --log trace

On top of this, we also ran an audit of all our log calls, to improve messaging, include additional information, rework applicable levels, and more. They should be far more readable!

Other changes

View the official release for a full list of changes.

- - + + \ No newline at end of file diff --git a/blog/proto-v0.12.html b/blog/proto-v0.12.html index f4ad49e679f..0b04c9361a9 100644 --- a/blog/proto-v0.12.html +++ b/blog/proto-v0.12.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.12 - Experimental WASM plugins

· 2 min read
Miles Johnson

After months of hard work, we're excited to release our first iteration of WASM plugins for proto.

WASM plugins

Three months ago, we published an RFC for supporting +

proto v0.12 - Experimental WASM plugins

· 2 min read
Miles Johnson

After months of hard work, we're excited to release our first iteration of WASM plugins for proto.

WASM plugins

Three months ago, we published an RFC for supporting plugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional tools, instead of them being built into proto core (which is very time consuming).

Two months ago, we released support for TOML plugins. These are very simple plugins powered by static configuration files. They're great for simple tools like CLIs and @@ -33,7 +33,7 @@ plugins, here's an example function that defines parameters for downloading and installing Node.js. This is written in Rust and using Extism's official PDK.

#[plugin_fn]
pub fn download_prebuilt(
Json(input): Json<DownloadPrebuiltInput>,
) -> FnResult<Json<DownloadPrebuiltOutput>> {
let version = input.env.version;
let arch = input.env.arch;

let prefix = match input.env.os {
HostOS::Linux => format!("node-v{version}-linux-{arch}"),
HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),
HostOS::Windows => format!("node-v{version}-win-{arch}"),
other => {
return Err(PluginError::UnsupportedPlatform {
tool: NAME.into(),
platform: format!("{:?}", other),
})?;
}
};

let filename = if input.env.os == HostOS::Windows {
format!("{prefix}.zip")
} else {
format!("{prefix}.tar.xz")
};

Ok(Json(DownloadPrebuiltOutput {
archive_prefix: Some(prefix),
download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),
download_name: Some(filename),
checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),
..DownloadPrebuiltOutput::default()
}))
}

Other changes

View the official release for a full list of changes.

- - + + \ No newline at end of file diff --git a/blog/proto-v0.13.html b/blog/proto-v0.13.html index 0da8a953146..88aea32c86e 100644 --- a/blog/proto-v0.13.html +++ b/blog/proto-v0.13.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.13 - Bun, Deno, and Go now powered by WASM plugins

· 3 min read
Miles Johnson

With this release, we're embracing WASM even further.

Core migration to WASM

Now that WASM plugin support is up and running, we've hit a non-ideal situation where we have +

proto v0.13 - Bun, Deno, and Go now powered by WASM plugins

· 3 min read
Miles Johnson

With this release, we're embracing WASM even further.

Core migration to WASM

Now that WASM plugin support is up and running, we've hit a non-ideal situation where we have multiple competing implementations for "tools" in proto. We currently have 3 different approaches:

  • Tools implemented in Rust and built into proto's core.
  • TOML based plugins, with a simple Rust based wrapper.
  • WASM based plugins.

This is far too many implementations to support, and makes it extremely difficult to add new features for tools, as it affects all 3. To remedy this situation, we've decided to migrate all core tools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will @@ -39,7 +39,7 @@ ~/.proto/config.toml.

$ proto plugins
bun - Bun
GitHub: moonrepo/bun-plugin
Tag: latest

deno - Deno
GitHub: moonrepo/deno-plugin
Tag: latest

go - Go
GitHub: moonrepo/go-plugin
Tag: latest

Learn more about this new command!

Other changes

View the official release for a full list of changes.

  • Added documentation for writing unit tests for WASM plugins.
  • Updated proto clean and proto use to load and merge all .prototools from the current directory and upwards.
  • Many WASM API improvements.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.14.html b/blog/proto-v0.14.html index a3627aba218..9cc36d5403b 100644 --- a/blog/proto-v0.14.html +++ b/blog/proto-v0.14.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.14 - Node.js and Rust now powered by WASM plugins

· 2 min read
Miles Johnson

With this release, we've finished our migration to a WASM based plugin architecture.

Full migration to WASM

In our last release, we migrated the Bun, Deno, and Go plugins to WASM. In this +

proto v0.14 - Node.js and Rust now powered by WASM plugins

· 2 min read
Miles Johnson

With this release, we've finished our migration to a WASM based plugin architecture.

Full migration to WASM

In our last release, we migrated the Bun, Deno, and Go plugins to WASM. In this release, we're excited to announce that we have completed our WASM migration by also converting Node.js (and npm, etc) and Rust to WASM plugins. We've also updated our TOML plugin layer to use WASM under the hood.

With this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the @@ -33,7 +33,7 @@ smart enough to unpack or move files automatically.

Other changes

View the official release for a full list of changes.

  • Versions defined in .prototools must be fully-qualified semantic versions. Partial versions (missing patch or minor) are no longer supported. This may change in the future based on feedback.
  • Tool and plugin names must now be in kebab-case.
  • Node
    • Yarn 2+ is now installed using @yarnpkg/cli-dist. We no longer downgrade to the latest v1.
    • Will no longer detect a version from engines in package.json.
  • Rust
    • Will now detect a version/channel from rust-toolchain.toml and rust-toolchain.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.15.html b/blog/proto-v0.15.html index 6f2dfbdd207..7e8946cf587 100644 --- a/blog/proto-v0.15.html +++ b/blog/proto-v0.15.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.15 - Install and uninstall globals

· 2 min read
Miles Johnson

This is a small release that adds support for uninstalling globals, and improves our WASM APIs.

Uninstall global dependencies

proto has supported installing globals since v0.5, but there's been no way to +

proto v0.15 - Install and uninstall globals

· 2 min read
Miles Johnson

This is a small release that adds support for uninstalling globals, and improves our WASM APIs.

Uninstall global dependencies

proto has supported installing globals since v0.5, but there's been no way to uninstall an existing global, until now! In this release, we're introducing the proto uninstall-global command, which will do just that! The API is exactly the same as its installation counter-part.

proto install-global node prettier

# On second thought, nevermind...
proto uninstall-global node prettier

WASM functions

Implementing this command was rather straight forward, but most of the work went into supporting @@ -31,7 +31,7 @@ is soon), and with this, it requires more documentation. As part of this release, we've done a giant polish pass on our WASM documentation, and have included the following sections:

Other changes

View the official release for a full list of changes.

  • Major WASM API improvements, including backwards incompatible changes.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.16.html b/blog/proto-v0.16.html index be924b7e350..47dc2bc77ea 100644 --- a/blog/proto-v0.16.html +++ b/blog/proto-v0.16.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.16 - Add, remove, and purge plugins

· 2 min read
Miles Johnson

This release adds functionality for managing plugins and purging the proto store.

Add and remove plugins

Now that proto has fully embraced a plugin based architecture, we thought it'd be nice to support +

proto v0.16 - Add, remove, and purge plugins

· 2 min read
Miles Johnson

This release adds functionality for managing plugins and purging the proto store.

Add and remove plugins

Now that proto has fully embraced a plugin based architecture, we thought it'd be nice to support the management of these plugins through the CLI. This release adds two new commands: proto add-plugin and proto remove-plugin.

Adding a plugin requires a unique ID and what we call a locator, which is a string that dictates @@ -32,7 +32,7 @@ tool, its manifest, all installed versions, and the entire ~/.proto/tools/<id> directory.

# Delete all traces of Node.js
$ proto clean --purge node

Additionaly, a new --purge-plugins option can be used to delete all downloaded plugins (the ~/.proto/plugins directory). Useful for house keeping or if you want to start fresh.

$ proto clean --purge-plugins

Other changes

View the official release for a full list of changes.

  • Added folder locking during tool installation to avoid colliding processes.
  • Renamed PROTO_ROOT to PROTO_HOME, but we'll support PROTO_ROOT for the time being.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.17.html b/blog/proto-v0.17.html index 1619a8c6453..ef49f20729c 100644 --- a/blog/proto-v0.17.html +++ b/blog/proto-v0.17.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.17 - Experimental Python support and canary releases

· 3 min read
Miles Johnson

This release implements two long requested features, Python language support and canary releases.

Experimental Python support

It's been quite a while since we've introduced a new language into proto, and we're excited to +

proto v0.17 - Experimental Python support and canary releases

· 3 min read
Miles Johnson

This release implements two long requested features, Python language support and canary releases.

Experimental Python support

It's been quite a while since we've introduced a new language into proto, and we're excited to announce the highly requested language, Python! Since Python is now an officially supported language, installing Python (and pip) is as simple as:

$ proto install python

However, we're marking language support as experimental for the time being. We expect our @@ -40,7 +40,7 @@ release can be used. Re-installing with --canary will overwrite the previous canary installation.

However, because we detect a version to run with at runtime, how should you actually run canary? The easiest way is to prefix the shim with an environment variable:

$ PROTO_BUN_VERSION=canary bun ./index.ts

Or to explicitly configure the version in .prototools:

bun = "canary"

Other changes

View the official release for a full list of changes.

  • Added colors to command line --help menus.
  • Updated the following locations to support partial versions and aliases:
    • Tool versions in .prototools.
    • Pinning a default version with proto install --pin.
    • Setting global version with proto global.
    • Setting local version with proto local.
  • Node, npm, pnpm, and yarn will again extract a version from package.json engines.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.18.html b/blog/proto-v0.18.html index a9fad1ff2d7..fc38ec780dd 100644 --- a/blog/proto-v0.18.html +++ b/blog/proto-v0.18.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.18 - List installed tools and configure HTTP client

· 2 min read
Miles Johnson

Today we've got a small release that includes some helpful features.

New proto tools command

Are you curious what tools you have installed? And more specifically, which versions? What about +

proto v0.18 - List installed tools and configure HTTP client

· 2 min read
Miles Johnson

Today we've got a small release that includes some helpful features.

New proto tools command

Are you curious what tools you have installed? And more specifically, which versions? What about configured aliases? Until now, you had to manually check the ~/.proto/tools directory for this information, but now, you can simply run proto tools to get a list of all installed tools.

This command will list all tools that have been installed, along with their installed versions, @@ -33,7 +33,7 @@ for showcasing tools maintained by the community!

Other changes

View the official release for a full list of changes.

  • For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML, which may cause breakages depending on a version mismatch between proto and the plugin.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.19.html b/blog/proto-v0.19.html index d6123b6d2c4..02ddc926b8c 100644 --- a/blog/proto-v0.19.html +++ b/blog/proto-v0.19.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.19 - Version pinning and outdated checks

· 2 min read
Miles Johnson

In this release, we're improving version pinning and introducing a new command to check for outdated +

proto v0.19 - Version pinning and outdated checks

· 2 min read
Miles Johnson

In this release, we're improving version pinning and introducing a new command to check for outdated versions.

New proto pin command (breaking)

Before our official v1 release, which is relatively soon, we'll be making some breaking changes with the proto APIs. The first is the introduction of the new proto pin command, which replaces the previous proto local and proto global commands. We felt this was a @@ -35,7 +35,7 @@ configured in the closest .prototools file. Very handy for keeping your tools up to date.

$ proto outdated

go - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!
node - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!

Other changes

View the official release for a full list of changes.

  • Added PROTO_WASM_LOG environment variable to toggle the logging of messages from Extism and WASM plugins. Useful for debugging.
  • Updated proto install to auto-clean stale plugins after a successful installation.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.20.html b/blog/proto-v0.20.html new file mode 100644 index 00000000000..ae7e95db96f --- /dev/null +++ b/blog/proto-v0.20.html @@ -0,0 +1,45 @@ + + + + + +proto v0.20 - New shims and binaries management | moonrepo + + + + + + + + + + + + + +
+

proto v0.20 - New shims and binaries management

· 3 min read
Miles Johnson

In this release, we're reworking how shims and binaries work.

Shims and Binaries (breaking)

Since proto's inception, we've used shims as a way to execute installed tools. This allowed us to +wrap the underlying tool binary to provide additional functionality, such as automatic version +detection, runtime hooks, and more. However, this approach has some limitations, such as:

  • Shims are forced onto you and there's no way to use proto without shims.
  • Shims are slower than executing the native binary, upwards of 10x slower. While this equates in +milliseconds, it can be noticeable dependending on the tool.
  • For Windows, our shim files are .cmd and not .exe. This causes a lot of weird and unexpected +problems when an environment expects a real executable, or uses a hard-coded .exe extension.

To remedy this, we're introducing both a shim and non-shim approach, which has resulted in a pretty +big breaking change. Shims are now generated in ~/.proto/shims (instead of ~/.proto/bin), while +~/.proto/bin will now store symlinks to native binaries. To migrate to this new pattern, we're +introducing a new proto migrate command (this only needs to be ran once).

$ proto upgrade
$ proto migrate v0.20 --log debug

How it works

When installing proto for the first time, or running the proto migrate command, we prepend PATH +with $PROTO_HOME/shims:$PROTO_HOME/bin. This allows shims to be executed first and fallthrough +to native binaries if a shim does not exist (for example, .exe on Windows).

Furthermore, if you'd prefer to only use shims, or only use binaries, you can update PATH and +remove the unwanted directory path.

And lastly, if shims are causing problems, you can now easily reference the native binaries +directly. This was rather complicated before.

Comparison

ShimsBinaries
Location~/.proto/shims~/.proto/bin
Created asScripts that run proto runSymlinks to the native binary
Version executedDetects version at runtimeLast version that was installed + pinned
Supported forAll toolsOnly tools that support native execution (may not work for .js files)

Support for minisign checksums

When proto installs a tool, it runs a process known as checksum verification, where we ensure the +download hasn't been modified maliciously in anyway. Historically we only supported SHA256 +checksums, but now, we also support the new minisign tool, +used by popular tools like Zig.

If you're building a plugin for a tool that uses minisign, you can use the new +checksum_public_key (WASM) or +install.checksum-public-key (TOML) field to +provide the public key for use in verification.

When the checksum URL ends in a .minisig extension, proto will automatically use minisign for +checksum verification!

[install]
checksum-url = "https://domain.com/some/path/to/checksum.minisig"
checksum-public-key = "untrusted comment: ..."

Other changes

View the official release for a full list +of changes.

  • Updated proto use to install tools in parallel.
  • Updated proto plugins and proto tools to load plugins in parallel.
  • Updated proto run to error when the tool attempts to self-upgrade outside of proto.
  • Rust plugin
    • Will now attempt to install rustup if it does not exist on the current machine.
    • Will now respect the RUSTUP_HOME environment variable when locating the .rustup store.
  • Schema plugin
    • Added install.checksum_public_key for defining the public key used to verify checksums.
    • Added metadata.self_upgrade_commands for defining which sub-commands should be blocked for +self-upgrades.
+ + + + \ No newline at end of file diff --git a/blog/proto-v0.3.html b/blog/proto-v0.3.html index ca2ff836238..0381b4ad93a 100644 --- a/blog/proto-v0.3.html +++ b/blog/proto-v0.3.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.3 - Improved npm, go, and version requirement support

· 2 min read
Miles Johnson

With this release, we're improving some workflows and version detection logic based on initial +

proto v0.3 - Improved npm, go, and version requirement support

· 2 min read
Miles Johnson

With this release, we're improving some workflows and version detection logic based on initial feedback.

Bundled npm support

After Node.js is installed, the version of npm that came bundled with that Node.js version will also be installed into proto. This functionality can be skipped by passing --no-bundled-npm during installation.

$ proto install node -- --no-bundled-npm

To further expand upon this, bundled is now considered a built-in alias, and will be used during @@ -31,7 +31,7 @@ result in far too many local installs as that satisfied version constantly changed.

Instead, we now satisfy the version requirement based on versions that have been installed locally to ~/.proto/tools. If no version matches, detection will simply move on to the next case, and eventually fallback to the global default version.

- - + + \ No newline at end of file diff --git a/blog/proto-v0.4.html b/blog/proto-v0.4.html index ff533ed6cc0..da3753f7d8f 100644 --- a/blog/proto-v0.4.html +++ b/blog/proto-v0.4.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.4 - Rust support, user configs, and more

· 2 min read
Miles Johnson

With this release, we've added Rust language support, user configs, and a few other improvements.

Rust language support

We're very excited to announce support for the Rust language in proto. +

proto v0.4 - Rust support, user configs, and more

· 2 min read
Miles Johnson

With this release, we've added Rust language support, user configs, and a few other improvements.

Rust language support

We're very excited to announce support for the Rust language in proto. This is our first language addition since the initial release, and we're very happy with how it turned out.

$ proto install rust stable

For those of you unfamiliar with Rust, Rust provides its own toolchain manager through rustup — a very powerful one at that. We don't want to reinvent the wheel @@ -31,7 +31,7 @@ will automatically install a missing tool for the detected version when running proto run (or a shim).

New proto upgrade command

We now provide a proto upgrade command for upgrading proto itself. This will download the latest version and replace the binary at ~/.proto/bin/proto.

$ proto upgrade
- - + + \ No newline at end of file diff --git a/blog/proto-v0.5.html b/blog/proto-v0.5.html index faa5b58a4a6..bca918c912f 100644 --- a/blog/proto-v0.5.html +++ b/blog/proto-v0.5.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.5 - Version aliasing and global binaries

· 2 min read
Miles Johnson

With this release, we're providing solutions for installing globals and using aliases.

Install global binaries

Installing global binaries (packages, modules, etc) is a common task for developers, and proto now +

proto v0.5 - Version aliasing and global binaries

· 2 min read
Miles Johnson

With this release, we're providing solutions for installing globals and using aliases.

Install global binaries

Installing global binaries (packages, modules, etc) is a common task for developers, and proto now provides a solution for this workflow with the proto install-global command. Continue reading for more information.

info

Global install directories will need to be added manually to your PATH from your shell.

Bun, Deno, Go, Rust

All of these languages provide a built-in solution for installing global binaries to a shared @@ -34,7 +34,7 @@ Aliasing of versions is a feature that allows you to assign a custom name or label to a specific version of a tool.

For example, instead of using the version number, you can assign a label such as "work" or "personal" to a version. This makes it easier to remember and manage different versions.

$ proto alias node work 16.16
$ proto alias node personal 18

Aliases can be used anywhere a version is accepted, for example:

$ proto bin node work
$ proto install node personal
- - + + \ No newline at end of file diff --git a/blog/proto-v0.6.html b/blog/proto-v0.6.html index a3eb12110a3..7996ed32c57 100644 --- a/blog/proto-v0.6.html +++ b/blog/proto-v0.6.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.6 - Unused cleaning and improved global binaries

· 3 min read
Miles Johnson

With this release, we're expanding on our global binary support and providing quality of life +

proto v0.6 - Unused cleaning and improved global binaries

· 3 min read
Miles Johnson

With this release, we're expanding on our global binary support and providing quality of life improvements.

RFC: Plugins system

Since proto's inception, plugins have been top of mind, but runtime based plugins in Rust are difficult. The only viable solution to this problem is WASM, but most developers have never used WASM before, nor are they familiar with WASM tooling (myself included).

However, we're at a point in proto's life-cycle where the core is rather stable, and it's time to @@ -41,7 +41,7 @@ Starbase, which will be the new foundation for proto and moon moving forward. One of the major benefits of this new architecture is a rewritten error system that provides more context and better error messages.

Here's an example of this, albeit with a contrived situation:

- - + + \ No newline at end of file diff --git a/blog/proto-v0.7.html b/blog/proto-v0.7.html index 70b840ffa3b..b25661df3e8 100644 --- a/blog/proto-v0.7.html +++ b/blog/proto-v0.7.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.7 - First step towards plugins

· 3 min read
Miles Johnson

With this release, we're very excited to announce our initial support for plugins in proto!

Initial plugins architecture

Last week we posted an RFC for a new plugins architecture for +

proto v0.7 - First step towards plugins

· 3 min read
Miles Johnson

With this release, we're very excited to announce our initial support for plugins in proto!

Initial plugins architecture

Last week we posted an RFC for a new plugins architecture for proto. We believe plugins will unlock an array of capabilities for proto, will enable the community to add their own custom integrations, and the ability for tools to be managed within proto's toolchain.

We were very excited for this RFC, and couldn't wait, so we spent the last week prototyping @@ -37,7 +37,7 @@ improvements to the cleaning process:

  • Added a --yes option to proto clean, allowing prompts to be bypassed.
  • Added a auto-clean setting to ~/.proto/config.toml, enabling automatic cleaning when proto use is ran.
- - + + \ No newline at end of file diff --git a/blog/proto-v0.8.html b/blog/proto-v0.8.html index 669ff276335..e49b285fba7 100644 --- a/blog/proto-v0.8.html +++ b/blog/proto-v0.8.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.8 - Version detection and installation improvements

· 2 min read
Miles Johnson

In this release, we're dropping some quality of life workflow improvements.

Built-in detection for proto use

The proto use command is extremely useful for bootstrapping your +

proto v0.8 - Version detection and installation improvements

· 2 min read
Miles Johnson

In this release, we're dropping some quality of life workflow improvements.

Built-in detection for proto use

The proto use command is extremely useful for bootstrapping your development environment with all necessary tooling, but it had a hard requirement on the .prototools configuration file. But what if you're already using non-proto version files, like .nvmrc or .dvmrc? Or maybe manifest settings, like packageManager or @@ -33,7 +33,7 @@ versions first when encountering a partial version. This solves the problem above by allowing 1.2.3 to satisfy the requirement, instead of forcing an install of 1.2.4.

Other changes

View the official release for a full list of changes.

- - + + \ No newline at end of file diff --git a/blog/proto-v0.9.html b/blog/proto-v0.9.html index 2fe9b2a9928..3f69431e5ee 100644 --- a/blog/proto-v0.9.html +++ b/blog/proto-v0.9.html @@ -13,12 +13,12 @@ - - + +
-

proto v0.9 - New GitHub action, plugin unpacking, and more

· 2 min read
Miles Johnson

This is a small release that provides many internal improvements.

New moonrepo/setup-proto GitHub action

If you're using proto in GitHub Actions and would love to automate the workflow as much as possible, +

proto v0.9 - New GitHub action, plugin unpacking, and more

· 2 min read
Miles Johnson

This is a small release that provides many internal improvements.

New moonrepo/setup-proto GitHub action

If you're using proto in GitHub Actions and would love to automate the workflow as much as possible, well look no further, as we're introducing the moonrepo/setup-proto action. Thanks to Tom Davidson for the initial spike of work!

This action will automatically install the proto binary globally, and cache the toolchain at @@ -34,7 +34,7 @@ instead of Node.js... for some reason.

With that being said, this is currently experimental, as we haven't tested it thoroughly, and are unaware of all the possible edge cases. So keep that in mind!

Other changes

View the official release for a full list of changes.

- - + + \ No newline at end of file diff --git a/blog/proto.html b/blog/proto.html index 166429b657f..2830a95c10f 100644 --- a/blog/proto.html +++ b/blog/proto.html @@ -13,12 +13,12 @@ - - + +
-

Introducing proto, a next-generation toolchain manager!

· 2 min read
Miles Johnson

We are proud to announce the launch of proto, a next-generation toolchain manager for all +

Introducing proto, a next-generation toolchain manager!

· 2 min read
Miles Johnson

We are proud to announce the launch of proto, a next-generation toolchain manager for all of your favorite programming languages.

proto is a Rust based multi-language toolchain manager that will download and install tools by version, and immediately make them available on PATH. proto is launching with initial support for Bun, Deno, Node.js (and @@ -33,7 +33,7 @@ proto out into a standalone Rust CLI and Rust crates that moon inherits.

Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each with different workflows, CLI commands, and configuration files, is a poor developer experience.

Our goal is to unify all of these into a single performant interface. A toolchain manager is the next step in the version manager evolution.

- - + + \ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml index 3cc1b65e89f..094811ea9ca 100644 --- a/blog/rss.xml +++ b/blog/rss.xml @@ -4,10 +4,42 @@ moonrepo Blog https://moonrepo.dev/blog moonrepo Blog - Mon, 09 Oct 2023 00:00:00 GMT + Fri, 20 Oct 2023 00:00:00 GMT https://validator.w3.org/feed/docs/rss2.html https://github.com/jpmonette/feed en + + <![CDATA[proto v0.20 - New shims and binaries management]]> + https://moonrepo.dev/blog/proto-v0.20 + https://moonrepo.dev/blog/proto-v0.20 + Fri, 20 Oct 2023 00:00:00 GMT + + In this release, we're reworking how shims and binaries work.

Shims and Binaries (breaking)

Since proto's inception, we've used shims as a way to execute installed tools. This allowed us to +wrap the underlying tool binary to provide additional functionality, such as automatic version +detection, runtime hooks, and more. However, this approach has some limitations, such as:

  • Shims are forced onto you and there's no way to use proto without shims.
  • Shims are slower than executing the native binary, upwards of 10x slower. While this equates in +milliseconds, it can be noticeable dependending on the tool.
  • For Windows, our shim files are .cmd and not .exe. This causes a lot of weird and unexpected +problems when an environment expects a real executable, or uses a hard-coded .exe extension.

To remedy this, we're introducing both a shim and non-shim approach, which has resulted in a pretty +big breaking change. Shims are now generated in ~/.proto/shims (instead of ~/.proto/bin), while +~/.proto/bin will now store symlinks to native binaries. To migrate to this new pattern, we're +introducing a new proto migrate command (this only needs to be ran once).

$ proto upgrade
$ proto migrate v0.20 --log debug

How it works

When installing proto for the first time, or running the proto migrate command, we prepend PATH +with $PROTO_HOME/shims:$PROTO_HOME/bin. This allows shims to be executed first and fallthrough +to native binaries if a shim does not exist (for example, .exe on Windows).

Furthermore, if you'd prefer to only use shims, or only use binaries, you can update PATH and +remove the unwanted directory path.

And lastly, if shims are causing problems, you can now easily reference the native binaries +directly. This was rather complicated before.

Comparison

ShimsBinaries
Location~/.proto/shims~/.proto/bin
Created asScripts that run proto runSymlinks to the native binary
Version executedDetects version at runtimeLast version that was installed + pinned
Supported forAll toolsOnly tools that support native execution (may not work for .js files)

Support for minisign checksums

When proto installs a tool, it runs a process known as checksum verification, where we ensure the +download hasn't been modified maliciously in anyway. Historically we only supported SHA256 +checksums, but now, we also support the new minisign tool, +used by popular tools like Zig.

If you're building a plugin for a tool that uses minisign, you can use the new +checksum_public_key (WASM) or +install.checksum-public-key (TOML) field to +provide the public key for use in verification.

When the checksum URL ends in a .minisig extension, proto will automatically use minisign for +checksum verification!

[install]
checksum-url = "https://domain.com/some/path/to/checksum.minisig"
checksum-public-key = "untrusted comment: ..."

Other changes

View the official release for a full list +of changes.

  • Updated proto use to install tools in parallel.
  • Updated proto plugins and proto tools to load plugins in parallel.
  • Updated proto run to error when the tool attempts to self-upgrade outside of proto.
  • Rust plugin
    • Will now attempt to install rustup if it does not exist on the current machine.
    • Will now respect the RUSTUP_HOME environment variable when locating the .rustup store.
  • Schema plugin
    • Added install.checksum_public_key for defining the public key used to verify checksums.
    • Added metadata.self_upgrade_commands for defining which sub-commands should be blocked for +self-upgrades.
]]>
+ proto + bin + shim + checksum +
<![CDATA[moon v1.15 - Next-generation action graph]]> https://moonrepo.dev/blog/moon-v1.15 diff --git a/blog/tags.html b/blog/tags.html index 66fff330a7f..3ed6dd11b04 100644 --- a/blog/tags.html +++ b/blog/tags.html @@ -13,13 +13,13 @@ - - + +
-
- - +
+ + \ No newline at end of file diff --git a/blog/tags/action.html b/blog/tags/action.html index ede68a12458..cdee93f8c79 100644 --- a/blog/tags/action.html +++ b/blog/tags/action.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "action"

View All Tags

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +

2 posts tagged with "action"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/affected.html b/blog/tags/affected.html index 2978b1e1674..b50a02ba3aa 100644 --- a/blog/tags/affected.html +++ b/blog/tags/affected.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "affected"

View All Tags

· 3 min read
Miles Johnson

With this release, we've focused heavily on our remote caching architecture. Since this is a massive +

One post tagged with "affected"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/alias.html b/blog/tags/alias.html index 8c5e202fe16..26b52fc77b5 100644 --- a/blog/tags/alias.html +++ b/blog/tags/alias.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/bin.html b/blog/tags/bin.html new file mode 100644 index 00000000000..04b444fd269 --- /dev/null +++ b/blog/tags/bin.html @@ -0,0 +1,25 @@ + + + + + +One post tagged with "bin" | moonrepo + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/cache.html b/blog/tags/cache.html index c6feb3ec2cd..81a865ab6e7 100644 --- a/blog/tags/cache.html +++ b/blog/tags/cache.html @@ -13,16 +13,16 @@ - - + +
-

One post tagged with "cache"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered +

One post tagged with "cache"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

- - + + \ No newline at end of file diff --git a/blog/tags/canary.html b/blog/tags/canary.html index d282c37fd3d..1420c7bf574 100644 --- a/blog/tags/canary.html +++ b/blog/tags/canary.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/checksum.html b/blog/tags/checksum.html new file mode 100644 index 00000000000..ffb899b1912 --- /dev/null +++ b/blog/tags/checksum.html @@ -0,0 +1,25 @@ + + + + + +One post tagged with "checksum" | moonrepo + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/ci.html b/blog/tags/ci.html index 4e020eb97ad..d5a2a9b47c7 100644 --- a/blog/tags/ci.html +++ b/blog/tags/ci.html @@ -13,17 +13,17 @@ - - + +
-

3 posts tagged with "ci"

View All Tags

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

3 posts tagged with "ci"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/clean.html b/blog/tags/clean.html index fd49e1d0641..cb4025d49d8 100644 --- a/blog/tags/clean.html +++ b/blog/tags/clean.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "clean"

View All Tags

· 3 min read
Miles Johnson

With this release, we're expanding on our global binary support and providing quality of life +

- - + + \ No newline at end of file diff --git a/blog/tags/code.html b/blog/tags/code.html index 93c1fd2c641..cd25502fe80 100644 --- a/blog/tags/code.html +++ b/blog/tags/code.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "code"

View All Tags

· 4 min read
Miles Johnson

With this release, we've focused on a critical facet of managing a large codebase, source code +

- - + + \ No newline at end of file diff --git a/blog/tags/config.html b/blog/tags/config.html index b1fd3b19a41..f425f080e53 100644 --- a/blog/tags/config.html +++ b/blog/tags/config.html @@ -13,17 +13,17 @@ - - + +
-

4 posts tagged with "config"

View All Tags

· 3 min read
Miles Johnson

With this release, we've rewritten configuration from the ground up, improved error messages, and +

4 posts tagged with "config"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/constraints.html b/blog/tags/constraints.html index 22cadc7317c..4eb45422980 100644 --- a/blog/tags/constraints.html +++ b/blog/tags/constraints.html @@ -13,15 +13,15 @@ - - + +
-

One post tagged with "constraints"

View All Tags

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

One post tagged with "constraints"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/debug.html b/blog/tags/debug.html index a1c2b904852..b6baef92338 100644 --- a/blog/tags/debug.html +++ b/blog/tags/debug.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "debug"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

- - + + \ No newline at end of file diff --git a/blog/tags/deno.html b/blog/tags/deno.html index f118bd72e74..96893c50307 100644 --- a/blog/tags/deno.html +++ b/blog/tags/deno.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "deno"

View All Tags

· 5 min read
Miles Johnson

With this release, we're landing Deno, our first supported language besides Node.js, and improving +

- - + + \ No newline at end of file diff --git a/blog/tags/dep-graph.html b/blog/tags/dep-graph.html index 085c7288ac3..a3ff23fb099 100644 --- a/blog/tags/dep-graph.html +++ b/blog/tags/dep-graph.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "dep-graph"

View All Tags

· 3 min read
Miles Johnson

With this release, we've focused heavily on our remote caching architecture. Since this is a massive +

One post tagged with "dep-graph"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/dependency.html b/blog/tags/dependency.html index 857a978ab6b..9dbbf3f5191 100644 --- a/blog/tags/dependency.html +++ b/blog/tags/dependency.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "dependency"

View All Tags

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +

- - + + \ No newline at end of file diff --git a/blog/tags/detect.html b/blog/tags/detect.html index 653b27bb3ba..29186f5e150 100644 --- a/blog/tags/detect.html +++ b/blog/tags/detect.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/docker.html b/blog/tags/docker.html index 16e7ac93769..52e4ed131eb 100644 --- a/blog/tags/docker.html +++ b/blog/tags/docker.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "docker"

View All Tags

· 4 min read
Miles Johnson

With this release, we're providing deeper integration with our new proto toolchain +

2 posts tagged with "docker"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/editors.html b/blog/tags/editors.html index 268387ae7b7..a07fcb13ffe 100644 --- a/blog/tags/editors.html +++ b/blog/tags/editors.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "editors"

View All Tags

· 4 min read
Miles Johnson

With this release, we're landing the first iteration of our notifier service, starting with +

2 posts tagged with "editors"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/env-vars.html b/blog/tags/env-vars.html index cd63b3cbace..5e09e49170d 100644 --- a/blog/tags/env-vars.html +++ b/blog/tags/env-vars.html @@ -13,15 +13,15 @@ - - + +
-

One post tagged with "env-vars"

View All Tags

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

One post tagged with "env-vars"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/errors.html b/blog/tags/errors.html index d1376d2c190..25168c1e93a 100644 --- a/blog/tags/errors.html +++ b/blog/tags/errors.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "errors"

View All Tags

· 3 min read
Miles Johnson

With this release, we've rewritten configuration from the ground up, improved error messages, and +

2 posts tagged with "errors"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/generator.html b/blog/tags/generator.html index 7e827b1c8b8..87bffbcfb06 100644 --- a/blog/tags/generator.html +++ b/blog/tags/generator.html @@ -13,18 +13,18 @@ - - + +
-

4 posts tagged with "generator"

View All Tags

· 4 min read
Miles Johnson

With this release, we've focused heavily on future proofing our toolchain and how it integrates with +

4 posts tagged with "generator"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/git.html b/blog/tags/git.html index c153c422164..f45bb4c10ce 100644 --- a/blog/tags/git.html +++ b/blog/tags/git.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "git"

View All Tags

· 3 min read
Miles Johnson

In this release, we're introducing a long requested feature, VCS hooks! As well as a complete +

- - + + \ No newline at end of file diff --git a/blog/tags/github.html b/blog/tags/github.html index ea2afbf3cbd..71df25835a8 100644 --- a/blog/tags/github.html +++ b/blog/tags/github.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "github"

View All Tags

· 5 min read
Miles Johnson

With this release, we're landing Deno, our first supported language besides Node.js, and improving +

2 posts tagged with "github"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/global.html b/blog/tags/global.html index 48bdd129d11..46089b2dca2 100644 --- a/blog/tags/global.html +++ b/blog/tags/global.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "global"

View All Tags

· 2 min read
Miles Johnson

In this release, we're improving version pinning and introducing a new command to check for outdated +

2 posts tagged with "global"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/globals.html b/blog/tags/globals.html index b0d76a18625..db6d5459aec 100644 --- a/blog/tags/globals.html +++ b/blog/tags/globals.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "globals"

View All Tags

· 3 min read
Miles Johnson

With this release, we're expanding on our global binary support and providing quality of life +

2 posts tagged with "globals"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/go.html b/blog/tags/go.html index a3cf1d24409..143580ba2eb 100644 --- a/blog/tags/go.html +++ b/blog/tags/go.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "go"

View All Tags

· 2 min read
Miles Johnson

With this release, we're improving some workflows and version detection logic based on initial +

- - + + \ No newline at end of file diff --git a/blog/tags/graph.html b/blog/tags/graph.html index 4fdc2e891b8..1396130502d 100644 --- a/blog/tags/graph.html +++ b/blog/tags/graph.html @@ -13,18 +13,18 @@ - - + +
-

3 posts tagged with "graph"

View All Tags

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +

3 posts tagged with "graph"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

- - + + \ No newline at end of file diff --git a/blog/tags/hash.html b/blog/tags/hash.html index 5506c8b51c3..64d2830e4f1 100644 --- a/blog/tags/hash.html +++ b/blog/tags/hash.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "hash"

View All Tags

· 4 min read
Miles Johnson

With this release, we're providing deeper integration with our new proto toolchain +

- - + + \ No newline at end of file diff --git a/blog/tags/hasher.html b/blog/tags/hasher.html index 845557a9565..ae62d32d77e 100644 --- a/blog/tags/hasher.html +++ b/blog/tags/hasher.html @@ -13,16 +13,16 @@ - - + +
-

3 posts tagged with "hasher"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

3 posts tagged with "hasher"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/hooks.html b/blog/tags/hooks.html index a037f1b999e..f36facf3e00 100644 --- a/blog/tags/hooks.html +++ b/blog/tags/hooks.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "hooks"

View All Tags

· 3 min read
Miles Johnson

In this release, we're introducing a long requested feature, VCS hooks! As well as a complete +

- - + + \ No newline at end of file diff --git a/blog/tags/http.html b/blog/tags/http.html index fd8965fe86f..f7d9f5b93b9 100644 --- a/blog/tags/http.html +++ b/blog/tags/http.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/hydration.html b/blog/tags/hydration.html index b0af1929f9f..44f8adc0ce0 100644 --- a/blog/tags/hydration.html +++ b/blog/tags/hydration.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "hydration"

View All Tags

· 4 min read
Miles Johnson

With this release, we've focused heavily on future proofing our toolchain and how it integrates with +

One post tagged with "hydration"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/ignore.html b/blog/tags/ignore.html index bdd263402e8..575c706daf2 100644 --- a/blog/tags/ignore.html +++ b/blog/tags/ignore.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "ignore"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

- - + + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index 7b20497dc52..048c88308d1 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/inheritance.html b/blog/tags/inheritance.html index 5a27d595261..1585b494f72 100644 --- a/blog/tags/inheritance.html +++ b/blog/tags/inheritance.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "inheritance"

View All Tags

· 3 min read
Miles Johnson

In this release, we're introducing a long requested feature, VCS hooks! As well as a complete +

2 posts tagged with "inheritance"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/init.html b/blog/tags/init.html index ed411c902d0..9f37ceba9c7 100644 --- a/blog/tags/init.html +++ b/blog/tags/init.html @@ -13,15 +13,15 @@ - - + +
-

One post tagged with "init"

View All Tags

· 3 min read
Miles Johnson

Happy Halloween 🎃 👻! With this spooky release, we've focused heavily on our internals and +

One post tagged with "init"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/lang.html b/blog/tags/lang.html index 6b5ffbc8df0..12071a2937b 100644 --- a/blog/tags/lang.html +++ b/blog/tags/lang.html @@ -13,14 +13,14 @@ - - + +
-

3 posts tagged with "lang"

View All Tags

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

3 posts tagged with "lang"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/language.html b/blog/tags/language.html index a593ad28761..389274ee4f7 100644 --- a/blog/tags/language.html +++ b/blog/tags/language.html @@ -13,16 +13,16 @@ - - + +
-

One post tagged with "language"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered +

One post tagged with "language"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

- - + + \ No newline at end of file diff --git a/blog/tags/life.html b/blog/tags/life.html index d385c2e4738..052df67e04d 100644 --- a/blog/tags/life.html +++ b/blog/tags/life.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "life"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

- - + + \ No newline at end of file diff --git a/blog/tags/local.html b/blog/tags/local.html index 57d0781f63e..a8007c22375 100644 --- a/blog/tags/local.html +++ b/blog/tags/local.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "local"

View All Tags

· 2 min read
Miles Johnson

In this release, we're improving version pinning and introducing a new command to check for outdated +

- - + + \ No newline at end of file diff --git a/blog/tags/log.html b/blog/tags/log.html index 3c66ea24acc..5d55ee78cf5 100644 --- a/blog/tags/log.html +++ b/blog/tags/log.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "log"

View All Tags

· 4 min read
Miles Johnson

In this release, we're introducing a new feature called persistent tasks, and an RFC for extending +

- - + + \ No newline at end of file diff --git a/blog/tags/logging.html b/blog/tags/logging.html index 784ad91c5b4..3dab85bd9ae 100644 --- a/blog/tags/logging.html +++ b/blog/tags/logging.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/migrate.html b/blog/tags/migrate.html index 40ac77fbfb0..618da6cdf94 100644 --- a/blog/tags/migrate.html +++ b/blog/tags/migrate.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "migrate"

View All Tags

· 3 min read
Miles Johnson

It's the first release of the year, and with this release, we're landing some quality of life +

- - + + \ No newline at end of file diff --git a/blog/tags/monorepo.html b/blog/tags/monorepo.html index 8ab127de770..3dc9d9a1ba9 100644 --- a/blog/tags/monorepo.html +++ b/blog/tags/monorepo.html @@ -13,15 +13,15 @@ - - + +
-

One post tagged with "monorepo"

View All Tags

· One min read
Miles Johnson

A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is +

One post tagged with "monorepo"

View All Tags

· One min read
Miles Johnson

A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is a fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we took it upon ourselves to answer this question!

- - + + \ No newline at end of file diff --git a/blog/tags/moonbase.html b/blog/tags/moonbase.html index 5b5d1c4740d..5347717f107 100644 --- a/blog/tags/moonbase.html +++ b/blog/tags/moonbase.html @@ -13,16 +13,16 @@ - - + +
-

4 posts tagged with "moonbase"

View All Tags

· 5 min read
Miles Johnson

With this release, we're landing Deno, our first supported language besides Node.js, and improving +

4 posts tagged with "moonbase"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/node.html b/blog/tags/node.html index e81dc27179d..05754f4ef94 100644 --- a/blog/tags/node.html +++ b/blog/tags/node.html @@ -13,16 +13,16 @@ - - + +
-

2 posts tagged with "node"

View All Tags

· 3 min read
Miles Johnson

Happy Halloween 🎃 👻! With this spooky release, we've focused heavily on our internals and +

2 posts tagged with "node"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/notifier.html b/blog/tags/notifier.html index b54c7e835db..1a86b971da1 100644 --- a/blog/tags/notifier.html +++ b/blog/tags/notifier.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "notifier"

View All Tags

· 4 min read
Miles Johnson

With this release, we're landing the first iteration of our notifier service, starting with +

- - + + \ No newline at end of file diff --git a/blog/tags/npm.html b/blog/tags/npm.html index 9d3341eba4a..a52795335e0 100644 --- a/blog/tags/npm.html +++ b/blog/tags/npm.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "npm"

View All Tags

· 2 min read
Miles Johnson

With this release, we're improving some workflows and version detection logic based on initial +

- - + + \ No newline at end of file diff --git a/blog/tags/offline.html b/blog/tags/offline.html index 05661f1b67f..ab8ec5ce467 100644 --- a/blog/tags/offline.html +++ b/blog/tags/offline.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "offline"

View All Tags

· 5 min read
Miles Johnson

With this release, we're landing Deno, our first supported language besides Node.js, and improving +

- - + + \ No newline at end of file diff --git a/blog/tags/outdated.html b/blog/tags/outdated.html index f96da847485..d7f1b18543d 100644 --- a/blog/tags/outdated.html +++ b/blog/tags/outdated.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "outdated"

View All Tags

· 2 min read
Miles Johnson

In this release, we're improving version pinning and introducing a new command to check for outdated +

- - + + \ No newline at end of file diff --git a/blog/tags/owners.html b/blog/tags/owners.html index ac85de20a5d..b85387a3638 100644 --- a/blog/tags/owners.html +++ b/blog/tags/owners.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "owners"

View All Tags

· 4 min read
Miles Johnson

With this release, we've focused on a critical facet of managing a large codebase, source code +

- - + + \ No newline at end of file diff --git a/blog/tags/ownership.html b/blog/tags/ownership.html index b198bf99900..1d9426648d4 100644 --- a/blog/tags/ownership.html +++ b/blog/tags/ownership.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "ownership"

View All Tags

· 4 min read
Miles Johnson

With this release, we've focused on a critical facet of managing a large codebase, source code +

- - + + \ No newline at end of file diff --git a/blog/tags/pin.html b/blog/tags/pin.html index 949c4ea1913..6e2daec6edd 100644 --- a/blog/tags/pin.html +++ b/blog/tags/pin.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "pin"

View All Tags

· 2 min read
Miles Johnson

In this release, we're improving version pinning and introducing a new command to check for outdated +

- - + + \ No newline at end of file diff --git a/blog/tags/pipeline.html b/blog/tags/pipeline.html index 93e4edd80d8..7f23e5a3c12 100644 --- a/blog/tags/pipeline.html +++ b/blog/tags/pipeline.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "pipeline"

View All Tags

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +

2 posts tagged with "pipeline"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/platform.html b/blog/tags/platform.html index fe50644d423..1fa18f394a3 100644 --- a/blog/tags/platform.html +++ b/blog/tags/platform.html @@ -13,16 +13,16 @@ - - + +
-

2 posts tagged with "platform"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered +

2 posts tagged with "platform"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

- - + + \ No newline at end of file diff --git a/blog/tags/plugin.html b/blog/tags/plugin.html index 9cdf0960014..28d7813367a 100644 --- a/blog/tags/plugin.html +++ b/blog/tags/plugin.html @@ -13,13 +13,13 @@ - - + +
-

6 posts tagged with "plugin"

View All Tags
- - +

6 posts tagged with "plugin"

View All Tags
+ + \ No newline at end of file diff --git a/blog/tags/plugins.html b/blog/tags/plugins.html index c50bc6a89cd..f6629598b04 100644 --- a/blog/tags/plugins.html +++ b/blog/tags/plugins.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/project-graph.html b/blog/tags/project-graph.html index c64eaf62598..f0b6961fdc0 100644 --- a/blog/tags/project-graph.html +++ b/blog/tags/project-graph.html @@ -13,16 +13,16 @@ - - + +
-

2 posts tagged with "project-graph"

View All Tags

· 5 min read
Miles Johnson

With this release, we've focused heavily on rewriting our project graph for the next-generation of +

2 posts tagged with "project-graph"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/project.html b/blog/tags/project.html index a90526e14d7..33720e0cae2 100644 --- a/blog/tags/project.html +++ b/blog/tags/project.html @@ -13,16 +13,16 @@ - - + +
-

3 posts tagged with "project"

View All Tags

· 5 min read
Miles Johnson

With this release, we've focused heavily on rewriting our project graph for the next-generation of +

3 posts tagged with "project"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/projects.html b/blog/tags/projects.html index be447784d03..0803d83bfb0 100644 --- a/blog/tags/projects.html +++ b/blog/tags/projects.html @@ -13,16 +13,16 @@ - - + +
-

2 posts tagged with "projects"

View All Tags

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

2 posts tagged with "projects"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/proto.html b/blog/tags/proto.html index 722e8606fc8..0949d30cfb8 100644 --- a/blog/tags/proto.html +++ b/blog/tags/proto.html @@ -3,7 +3,7 @@ -21 posts tagged with "proto" | moonrepo +22 posts tagged with "proto" | moonrepo @@ -13,14 +13,14 @@ - - + +
-

21 posts tagged with "proto"

View All Tags
- - +

22 posts tagged with "proto"

View All Tags
+ + \ No newline at end of file diff --git a/blog/tags/proto/page/2.html b/blog/tags/proto/page/2.html index ef11099e2fe..77f3df127bd 100644 --- a/blog/tags/proto/page/2.html +++ b/blog/tags/proto/page/2.html @@ -3,7 +3,7 @@ -21 posts tagged with "proto" | moonrepo +22 posts tagged with "proto" | moonrepo @@ -13,18 +13,17 @@ - - + +
-

21 posts tagged with "proto"

View All Tags

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

22 posts tagged with "proto"

View All Tags
- - +manager, better Docker support, and new query commands for debugging.

+ + \ No newline at end of file diff --git a/blog/tags/proto/page/3.html b/blog/tags/proto/page/3.html index 510bfdc5f5d..ed489cccb9e 100644 --- a/blog/tags/proto/page/3.html +++ b/blog/tags/proto/page/3.html @@ -3,7 +3,7 @@ -21 posts tagged with "proto" | moonrepo +22 posts tagged with "proto" | moonrepo @@ -13,14 +13,15 @@ - - + +
-

21 posts tagged with "proto"

View All Tags

· 6 min read
Miles Johnson

Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long +

22 posts tagged with "proto"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/python.html b/blog/tags/python.html index ff10a6fccfd..f2c828566b0 100644 --- a/blog/tags/python.html +++ b/blog/tags/python.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/qol.html b/blog/tags/qol.html index ae8637f4df2..eb8f21d9e8c 100644 --- a/blog/tags/qol.html +++ b/blog/tags/qol.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "qol"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

- - + + \ No newline at end of file diff --git a/blog/tags/quality.html b/blog/tags/quality.html index f6b55fea6c0..09dc8a251d6 100644 --- a/blog/tags/quality.html +++ b/blog/tags/quality.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "quality"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

- - + + \ No newline at end of file diff --git a/blog/tags/query.html b/blog/tags/query.html index 30072a627c7..fab35fbf321 100644 --- a/blog/tags/query.html +++ b/blog/tags/query.html @@ -13,15 +13,15 @@ - - + +
-

3 posts tagged with "query"

View All Tags

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

3 posts tagged with "query"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/railway.html b/blog/tags/railway.html index fb38c9f176a..b1b2c3c78a9 100644 --- a/blog/tags/railway.html +++ b/blog/tags/railway.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "railway"

View All Tags

· 5 min read
Miles Johnson

In this release, we've taken the next step in modernizing our action pipeline, by rewriting the +

- - + + \ No newline at end of file diff --git a/blog/tags/registry.html b/blog/tags/registry.html index 2d97e98f7e7..7d869757f23 100644 --- a/blog/tags/registry.html +++ b/blog/tags/registry.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/remote-cache.html b/blog/tags/remote-cache.html index 15154282c74..b446de38e41 100644 --- a/blog/tags/remote-cache.html +++ b/blog/tags/remote-cache.html @@ -13,15 +13,15 @@ - - + +
-

3 posts tagged with "remote-cache"

View All Tags

· 2 min read
Miles Johnson
James Pozdena

We are proud to announce the launch of moonbase remote caching – a new solution that +

3 posts tagged with "remote-cache"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/rfc.html b/blog/tags/rfc.html index db39903f144..35bc8e70165 100644 --- a/blog/tags/rfc.html +++ b/blog/tags/rfc.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "rfc"

View All Tags

· 4 min read
Miles Johnson

In this release, we're introducing a new feature called persistent tasks, and an RFC for extending +

- - + + \ No newline at end of file diff --git a/blog/tags/roadmap.html b/blog/tags/roadmap.html index d133b2c64b9..04347f7f5cd 100644 --- a/blog/tags/roadmap.html +++ b/blog/tags/roadmap.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "roadmap"

View All Tags

· 6 min read
Miles Johnson

Happy new year! Let's start 2023 by reflecting on last year and diving into our tentative year long +

- - + + \ No newline at end of file diff --git a/blog/tags/run.html b/blog/tags/run.html index 8fc4badea49..32692df84f1 100644 --- a/blog/tags/run.html +++ b/blog/tags/run.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "run"

View All Tags

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

- - + + \ No newline at end of file diff --git a/blog/tags/runner.html b/blog/tags/runner.html index abdd14c95a1..55274329033 100644 --- a/blog/tags/runner.html +++ b/blog/tags/runner.html @@ -13,19 +13,19 @@ - - + +
-

4 posts tagged with "runner"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered +

4 posts tagged with "runner"

View All Tags

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

- - + + \ No newline at end of file diff --git a/blog/tags/rust.html b/blog/tags/rust.html index ea167c95d3c..0f76febfaa4 100644 --- a/blog/tags/rust.html +++ b/blog/tags/rust.html @@ -13,13 +13,13 @@ - - + +
-

2 posts tagged with "rust"

View All Tags
- - +

2 posts tagged with "rust"

View All Tags
+ + \ No newline at end of file diff --git a/blog/tags/schema.html b/blog/tags/schema.html index feef308c311..044abd3e333 100644 --- a/blog/tags/schema.html +++ b/blog/tags/schema.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "schema"

View All Tags

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

- - + + \ No newline at end of file diff --git a/blog/tags/shim.html b/blog/tags/shim.html index 98d0a6cc570..de94a328866 100644 --- a/blog/tags/shim.html +++ b/blog/tags/shim.html @@ -3,7 +3,7 @@ -One post tagged with "shim" | moonrepo +2 posts tagged with "shim" | moonrepo @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/shorthand.html b/blog/tags/shorthand.html index 9ee3bb0582f..a3264e2bacb 100644 --- a/blog/tags/shorthand.html +++ b/blog/tags/shorthand.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "shorthand"

View All Tags

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

- - + + \ No newline at end of file diff --git a/blog/tags/source.html b/blog/tags/source.html index 4842a7772e4..9681211ade4 100644 --- a/blog/tags/source.html +++ b/blog/tags/source.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "source"

View All Tags

· 4 min read
Miles Johnson

With this release, we've focused on a critical facet of managing a large codebase, source code +

- - + + \ No newline at end of file diff --git a/blog/tags/survey.html b/blog/tags/survey.html index e92d72893ec..9d440c15ce6 100644 --- a/blog/tags/survey.html +++ b/blog/tags/survey.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "survey"

View All Tags

· 6 min read
Miles Johnson

With this release, we're launching the next iteration of our task inheritance model, as well as +

- - + + \ No newline at end of file diff --git a/blog/tags/tag.html b/blog/tags/tag.html index 4b6a7ce1085..f9ace030e0b 100644 --- a/blog/tags/tag.html +++ b/blog/tags/tag.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/tags.html b/blog/tags/tags.html index ddd70db000c..926c3ad3e24 100644 --- a/blog/tags/tags.html +++ b/blog/tags/tags.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "tags"

View All Tags

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

2 posts tagged with "tags"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/target.html b/blog/tags/target.html index 65901992b8d..f7ec6526771 100644 --- a/blog/tags/target.html +++ b/blog/tags/target.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "target"

View All Tags

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

2 posts tagged with "target"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/task.html b/blog/tags/task.html index baf4c20dfec..02e6908ceef 100644 --- a/blog/tags/task.html +++ b/blog/tags/task.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "task"

View All Tags

· 3 min read
Miles Johnson

In this release, we're introducing a long requested feature, VCS hooks! As well as a complete +

- - + + \ No newline at end of file diff --git a/blog/tags/tasks.html b/blog/tags/tasks.html index da6d56ebd39..6a47b23d66b 100644 --- a/blog/tags/tasks.html +++ b/blog/tags/tasks.html @@ -13,15 +13,15 @@ - - + +
-

6 posts tagged with "tasks"

View All Tags

· 4 min read
Miles Johnson

In this release, we're introducing a new feature called persistent tasks, and an RFC for extending +

6 posts tagged with "tasks"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/tier.html b/blog/tags/tier.html index 9f247526b86..a962f4e181a 100644 --- a/blog/tags/tier.html +++ b/blog/tags/tier.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/tokens.html b/blog/tags/tokens.html index 53b70849fdf..37a27e3b310 100644 --- a/blog/tags/tokens.html +++ b/blog/tags/tokens.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "tokens"

View All Tags

· 5 min read
Miles Johnson

🎉 It's finally here! After almost a year of development, a handful of breaking changes, we've +

2 posts tagged with "tokens"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/toml.html b/blog/tags/toml.html index 2aef3156797..6d5d672a03f 100644 --- a/blog/tags/toml.html +++ b/blog/tags/toml.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "toml"

View All Tags

· 3 min read
Miles Johnson

After many months of design and development, we're finally introducing MQL, our own unique query +

- - + + \ No newline at end of file diff --git a/blog/tags/tool.html b/blog/tags/tool.html index ffd79718d98..a20f04634e8 100644 --- a/blog/tags/tool.html +++ b/blog/tags/tool.html @@ -13,13 +13,13 @@ - - + + - - +
+ + \ No newline at end of file diff --git a/blog/tags/toolchain.html b/blog/tags/toolchain.html index 1ef755ee2be..a8024de817c 100644 --- a/blog/tags/toolchain.html +++ b/blog/tags/toolchain.html @@ -13,12 +13,12 @@ - - + +
-

7 posts tagged with "toolchain"

View All Tags

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

7 posts tagged with "toolchain"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/typescript.html b/blog/tags/typescript.html index fe0c04f36ac..520d7e492d3 100644 --- a/blog/tags/typescript.html +++ b/blog/tags/typescript.html @@ -13,16 +13,16 @@ - - + +
-

2 posts tagged with "typescript"

View All Tags

· One min read
Miles Johnson

A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is +

2 posts tagged with "typescript"

View All Tags

· One min read
Miles Johnson

A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is a fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we took it upon ourselves to answer this question!

- - + + \ No newline at end of file diff --git a/blog/tags/vcs.html b/blog/tags/vcs.html index f582930a7a8..eeec7261356 100644 --- a/blog/tags/vcs.html +++ b/blog/tags/vcs.html @@ -13,15 +13,15 @@ - - + +
-

2 posts tagged with "vcs"

View All Tags

· 4 min read
Miles Johnson

Instead of launching a large feature this release, we're focusing on quality of life and developer +

2 posts tagged with "vcs"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/version.html b/blog/tags/version.html index 84d7aed10bf..c5aa0602a9a 100644 --- a/blog/tags/version.html +++ b/blog/tags/version.html @@ -13,14 +13,14 @@ - - + +
-

One post tagged with "version"

View All Tags

· 3 min read
Miles Johnson

In this release, we've focused on loosening restrictions to improve the overall developer +

- - + + \ No newline at end of file diff --git a/blog/tags/vscode.html b/blog/tags/vscode.html index 578cffbc069..f481d1f7f69 100644 --- a/blog/tags/vscode.html +++ b/blog/tags/vscode.html @@ -13,14 +13,14 @@ - - + +
-

2 posts tagged with "vscode"

View All Tags

· 4 min read
Miles Johnson

With this release, we're landing the first iteration of our notifier service, starting with +

2 posts tagged with "vscode"

View All Tags
- - + + \ No newline at end of file diff --git a/blog/tags/wasm.html b/blog/tags/wasm.html index b81e4af6ef2..c1fc76e8425 100644 --- a/blog/tags/wasm.html +++ b/blog/tags/wasm.html @@ -13,13 +13,13 @@ - - + +
-

5 posts tagged with "wasm"

View All Tags
- - +

5 posts tagged with "wasm"

View All Tags
+ + \ No newline at end of file diff --git a/blog/typescript-monorepo.html b/blog/typescript-monorepo.html index 6dcf20685db..01ce030637f 100644 --- a/blog/typescript-monorepo.html +++ b/blog/typescript-monorepo.html @@ -13,18 +13,18 @@ - - + +
-

Integrating TypeScript in a monorepo

· One min read
Miles Johnson

A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is +

Integrating TypeScript in a monorepo

· One min read
Miles Johnson

A common question in the JavaScript ecosystem is how to integrate TypeScript in a monorepo. This is a fair question, as there's no in-depth source of truth, or one perfect way of doing it. However, we took it upon ourselves to answer this question!

Based on our experience scaling and managing frontend repositories in open source and large companies like Airbnb and Coinbase, we're happy to announce an in-depth guide on using TypeScript project references in a monorepo!

We hope you find this guide useful, and if you have any questions, feel free to discuss them in our Discord community!

- - + + \ No newline at end of file diff --git a/blog/v0.13.html b/blog/v0.13.html index 580fde98be0..e7a2669e66a 100644 --- a/blog/v0.13.html +++ b/blog/v0.13.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.13 - Hashing and toolchain improvements

· 3 min read
Miles Johnson

With this release, we've landed some improvements to our smart hashing, and paved the road for +

moon v0.13 - Hashing and toolchain improvements

· 3 min read
Miles Johnson

With this release, we've landed some improvements to our smart hashing, and paved the road for additional languagues and tooling.

Node.js is now optional

Title may seem confusing at first, but don't worry, everything is fine! For some context, moon has been designed to be language agnostic as we plan to support more than JavaScript in the future. However, some aspects of the codebase were hard-coded for JavaScript and made the assumption that @@ -53,7 +53,7 @@ runner.

What's next?

Expect the following in the v0.14 release!

  • A moon generate command to generate new projects, files, scaffolding, and more from pre-defined templates.
  • Implicit dependency discovery. moon will now scan manifest files and determine project relationships.
- - + + \ No newline at end of file diff --git a/blog/v0.14.html b/blog/v0.14.html index d1782525ccf..f204e562ebd 100644 --- a/blog/v0.14.html +++ b/blog/v0.14.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.14 - Code generation and implicit dependencies

· 2 min read
Miles Johnson

With this release, we've landed some new features that have been requested multiple times since +

moon v0.14 - Code generation and implicit dependencies

· 2 min read
Miles Johnson

With this release, we've landed some new features that have been requested multiple times since launch. A code generation and template scaffolding layer, as well as implicit dependency scanning for the project graph!

New moon generate command

Code generation is the staple of any large company or repository. Want to spin up a new application? What about an npm package? Or maybe third-party integrations? Avoid copy-and-pasting existing code, @@ -40,7 +40,7 @@ official release for a full list of changes.

  • When running in a Docker container, caching is disabled in an effort to greatly reduce the size of the image.
  • Updated moon setup to also install Node.js dependencies.

What's next?

Expect the following in the v0.15 release!

  • Major Docker workflow improvements!
  • Frontmatter configuration within template files.
- - + + \ No newline at end of file diff --git a/blog/v0.15.html b/blog/v0.15.html index 5d7ea08b77d..0e95a0b4b88 100644 --- a/blog/v0.15.html +++ b/blog/v0.15.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.15 - Enhanced Docker support and 1,000 stars!

· 4 min read
Miles Johnson

With this release, we've focused heavily on Docker integration and enhancing the Dockerfile +

moon v0.15 - Enhanced Docker support and 1,000 stars!

· 4 min read
Miles Johnson

With this release, we've focused heavily on Docker integration and enhancing the Dockerfile workflow, as well as some minor quality of life improvements for template files and run reports.

1,000 ⭐️🌟⭐️!

Before we dive into the release, we want to thank everyone for the initial support, as we passed 1,000 stars on GitHub earlier this week! moon was announced back in June, and to reach this milestone in roughly 3 months is very exciting. We greatly appreciate the @@ -43,7 +43,7 @@ full list of changes.

  • Run reports (via --report) now include additional information, like the total duration, and estimated time savings.
  • Improved pnpm integration for Go/Rust binaries shipped in node modules.

What's next?

Expect the following in the v0.16 release!

  • Quality of life improvements for TypeScript.
  • Per-project overrides for language/tool versions.
- - + + \ No newline at end of file diff --git a/blog/v0.16.html b/blog/v0.16.html index 9a489424b47..b855a61138e 100644 --- a/blog/v0.16.html +++ b/blog/v0.16.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.16 - Per-project tool versions and TypeScript improvements

· 4 min read
Miles Johnson

With this release, we've landed a long standing request of supporting project-level overrides for +

moon v0.16 - Per-project tool versions and TypeScript improvements

· 4 min read
Miles Johnson

With this release, we've landed a long standing request of supporting project-level overrides for tools configured in the workspace, as well as some quality of life improvements for TypeScript.

Per-project tool version overrides

Since moons inception, our toolchain has only supported a single version of a tool (Node.js), as we wanted to embrace the single version policy and encourage all consumers to keep their tooling version consistent across all projects for reliability. While this @@ -52,7 +52,7 @@ full list of changes.

  • Template files can now be suffixed with .tera or .twig for syntax highlighting.
  • We now display more commands and information when running tasks.
  • Declare implicit task dependencies with a new runner.implicitDeps setting.

What's next?

Expect the following in the v0.17 release!

  • Webhooks for important pipeline events (for real this time)!
  • YAML anchors and references in config files.
  • And many more...
- - + + \ No newline at end of file diff --git a/blog/v0.17.html b/blog/v0.17.html index 9927637b247..7bd1813085e 100644 --- a/blog/v0.17.html +++ b/blog/v0.17.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.17 - Webhooks, extended YAML, and improved runtime performance

· 4 min read
Miles Johnson

With this release, we're landing the first iteration of our notifier service, starting with +

moon v0.17 - Webhooks, extended YAML, and improved runtime performance

· 4 min read
Miles Johnson

With this release, we're landing the first iteration of our notifier service, starting with webhooks! We've also spent some time working on quality of life improvements.

Breaking changes

To start, we have a few breaking changes this release to be aware of!

Minor changes to ID formatting

An ID refers to many things — project names, task names, target segments, so on and so forth. When parsing these values, we format them to remove unwanted characters, as these IDs are used in many contexts, many of which need to be strict.

Previously, we would remove unwanted characters entirely. Instead, we now replace them with dashes @@ -38,7 +38,7 @@ official release for a full list of changes.

  • Increased runtime performance and reduced memory consumption.
  • Template enum variables can now define objects for their values.
  • Task deps can now omit the ~: prefix for tasks within the current project.
  • The moon check command can now use the --report option.

What's next?

Expect the following in the v0.18 release!

  • Workflow improvements for moon init.
  • Benchmarks and performance tuning.
  • Individual stdout/stderr log files when running tasks.
- - + + \ No newline at end of file diff --git a/blog/v0.18.html b/blog/v0.18.html index 2ba3a79415b..071f5cbbbec 100644 --- a/blog/v0.18.html +++ b/blog/v0.18.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.18 - Improved configuration and initialization flow

· 3 min read
Miles Johnson

Happy Halloween 🎃 👻! With this spooky release, we've focused heavily on our internals and +

moon v0.18 - Improved configuration and initialization flow

· 3 min read
Miles Johnson

Happy Halloween 🎃 👻! With this spooky release, we've focused heavily on our internals and benchmarking performance metrics, so it's rather light on new features, but we still have some to show!

Improved projects configuration

When moon initially launched, it required defining all projects using a map. In v0.3, we added support for globs to @@ -38,7 +38,7 @@ Boost module loader!

Other changes

View the official release for a full list of changes.

  • Default Node.js version has been updated to v18.12 (the new LTS) from v16.17.
  • Updated the moon check command to support an --all flag.
  • Improvements to how we store stdout/stderr logs for ran targets.
  • Work tree dirty checks when running migration commands.

What's next?

Expect the following in the v0.19 release!

  • Laying the groundwork for remote caching!
  • An in-repo secrets management layer.
  • Performance and affected improvements.
- - + + \ No newline at end of file diff --git a/blog/v0.19.html b/blog/v0.19.html index 785652c3fa5..03993afa375 100644 --- a/blog/v0.19.html +++ b/blog/v0.19.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.19 - Remote caching beta, affected files, and graph optimization

· 3 min read
Miles Johnson

With this release, we've focused heavily on our remote caching architecture. Since this is a massive +

moon v0.19 - Remote caching beta, affected files, and graph optimization

· 3 min read
Miles Johnson

With this release, we've focused heavily on our remote caching architecture. Since this is a massive task that requires much work behind the scenes, this overall release is rather light.

Remote caching beta

A major request for moon is to support remote caching. This is a critical feature that allows artifacts to be shared across machines and environments, by storing them in a cloud storage provider, like AWS S3.

We've been working on this feature for months, primarily behind the scenes building the necessary @@ -45,7 +45,7 @@ a 5-10% increase in performance!

Other changes

View the official release for a full list of changes.

  • Package managers in the toolchain are now installed in isolation, instead of through Node.js.
  • JSON files will now respect the closest .editorconfig file.
  • Webhook payloads now include information about the running CI/CD environment.
  • Generator can now merge JSON/YAML template files.

What's next?

Expect the following in the v0.20 release!

  • Continuation of remote caching work!
  • Performance improvements for output hydration.
  • Toolchain improvements.
- - + + \ No newline at end of file diff --git a/blog/v0.20.html b/blog/v0.20.html index b985f0d6b46..c319d00c7d9 100644 --- a/blog/v0.20.html +++ b/blog/v0.20.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.20 - Toolchain, caching, and hydration improvements

· 4 min read
Miles Johnson

With this release, we've focused heavily on future proofing our toolchain and how it integrates with +

moon v0.20 - Toolchain, caching, and hydration improvements

· 4 min read
Miles Johnson

With this release, we've focused heavily on future proofing our toolchain and how it integrates with moon. We've also landed a handful of quality of life improvements.

Breaking changes

To start, we have a few breaking changes this release to be aware of!

Moved toolchain settings

The .moon/workspace.yml config file was getting rather bloated and complicated, as it contained the projects list, settings for each toolchain language, and settings for each supported service (runner, generator, etc). Furthermore, this file will keep getting larger @@ -58,7 +58,7 @@ full list of changes.

  • Added vcs.remoteCandidates to .moon/workspace.yml to customize the remotes for Git to query against.
  • Added support for moduleSuffixes and moduleDetection in TypeScript tsconfig.json compiler options.
  • YAML files will now respect the closest .editorconfig file.
  • Refactored terminal output for bette readability.

What's next?

Expect the following in the v0.21 release!

  • An interactive dependency and project graph visualizer.
  • A more performant project graph.
  • More quality of life improvements for affected files.
- - + + \ No newline at end of file diff --git a/blog/v0.21.html b/blog/v0.21.html index d8d327e06e5..6a9cf055a46 100644 --- a/blog/v0.21.html +++ b/blog/v0.21.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered +

moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust

· 5 min read
Miles Johnson

Happy Holidays 🎄☃️! With our last release of the year, we're very excited to announce our tiered language support structure, which lays the foundation for turning moon into a multi-language build system! On top of this, we've worked heavily on bug fixing, optimizations, and overall quality of life improvements.

New tiered language support

The most common question we receive is whether we plan to support additional languages besides @@ -63,7 +63,7 @@ affectedFiles task option changes!

Other changes

View the official release for a full list of changes.

  • Refactored project and dependency graphs for improved performance.
  • Added args and env var variants to the affectedFiles task option.
  • Added --minimal to moon init for quick scaffolding and prototyping.

What's next?

Expect the following in the v0.22 release!

  • Generalized hashing for use in any context (improved deps installation).
  • More work on language integrations.
- - + + \ No newline at end of file diff --git a/blog/v0.22.html b/blog/v0.22.html index 4d585e3ce60..1728aef81f5 100644 --- a/blog/v0.22.html +++ b/blog/v0.22.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration

· 3 min read
Miles Johnson

It's the first release of the year, and with this release, we're landing some quality of life +

moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration

· 3 min read
Miles Johnson

It's the first release of the year, and with this release, we're landing some quality of life infrastructure and workflow improvements!

New action pipeline

When running targets, we generate a graph of actions to execute in order within the action runner. An action is one of "setup toolchain", "install dependencies", "run target", so on and so forth. Our action runner would then spawn threads for every action using the Tokio @@ -46,7 +46,7 @@ full list of changes.

  • Added Bun as a tier 1 language (doesn't do much at the moment).
  • Added a versionConstraint setting in .moon/workspace.yml that enforces a requirement on the running moon binary.
  • Updated the project fields in moon.yml to be optional, excluding description.
  • Internal improvements to remote caching and artifact uploading.

What's next?

Expect the following in the v0.23 release!

  • Improved task inheritance workflow.
  • Glob support in task outputs.
  • Project-level environment variables.
- - + + \ No newline at end of file diff --git a/blog/v0.23.html b/blog/v0.23.html index 1d60686f310..260badc9ade 100644 --- a/blog/v0.23.html +++ b/blog/v0.23.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.23 - Scoped task inheritance, and project config updates

· 6 min read
Miles Johnson

With this release, we're launching the next iteration of our task inheritance model, as well as +

moon v0.23 - Scoped task inheritance, and project config updates

· 6 min read
Miles Johnson

With this release, we're launching the next iteration of our task inheritance model, as well as quality of life improvements for project configuration.

Developer survey

Before we dive into this new release, we have a quick survey for everyone. We know how everyone feels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice questions.

We're looking for feedback on moon itself, what features you're looking for, what you currently do @@ -65,7 +65,7 @@ files, but exclude everything else (.map, etc).

moon.yml
tasks:
build:
command: 'webpack'
outputs:
- 'build/**/*.{js,css}'

Other changes

View the official release for a full list of changes.

  • Updated moon migrate from-turborepo to preserve globs in outputs.
  • Updated project graph to no longer cache when there's no VCS root.
  • Updated pnpm to use the new pnpm dedupe command when the version is >= 7.26.0.

What's next?

Expect the following in the v0.24 release!

  • New moon query tasks command.
  • New per-project platform setting.
  • Token support in task outputs.
  • TypeScript v5 support.
- - + + \ No newline at end of file diff --git a/blog/v0.24.html b/blog/v0.24.html index b745521cef8..464073a4078 100644 --- a/blog/v0.24.html +++ b/blog/v0.24.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.24 - Remote caching, interactive tasks, query improvements, and more

· 5 min read
Miles Johnson
James Pozdena

With this release, we've polished our CLI experience and improved task interoperability.

Remote caching now available

If you missed our announcement earlier this week, +

moon v0.24 - Remote caching, interactive tasks, query improvements, and more

· 5 min read
Miles Johnson
James Pozdena

With this release, we've polished our CLI experience and improved task interoperability.

Remote caching now available

If you missed our announcement earlier this week, remote caching is now publicly available through our new service moonbase! If you're looking to speed up your CI pipelines and share build artifacts between runs, moonbase can help.

Project-level task platform

In our previous release, v0.23, we added support for @@ -53,7 +53,7 @@ official release for a full list of changes.

  • Added TypeScript v5 support.
  • Added a hasher.walkStrategy setting to .moon/workspace.yml.
  • Updated task outputs to support token functions (@group, @globs, etc).
  • Reworked our comparison/baseline estimations calcuations.

What's next?

Expect the following in the v0.25 release!

  • Deno tier 2 support.
  • CI insights and metrics within moonbase.
  • Project-level TypeScript settings.
- - + + \ No newline at end of file diff --git a/blog/v0.25.html b/blog/v0.25.html index 3226eb2b5b8..33fe3025478 100644 --- a/blog/v0.25.html +++ b/blog/v0.25.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more

· 5 min read
Miles Johnson

With this release, we're landing Deno, our first supported language besides Node.js, and improving +

moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more

· 5 min read
Miles Johnson

With this release, we're landing Deno, our first supported language besides Node.js, and improving interoperability of languages as a whole.

Deno tier 2 support (experimental)

Three months ago we announced our new tiered support structure for languages, and as of today, we're happy to announce that our second language to reach tier 2 is Deno! With tier 2 support, we now analyze Deno specific configuration files @@ -65,7 +65,7 @@ official release for a full list of changes.

  • Updated project, task, and target identifiers to support periods (.).
  • Refactored glob matching to use workspace relative paths instead of absolute. Please report an issue if hashing or affected detection is now inaccurate.
  • We now build against older operating systems in an attempt to solve GLIBC version errors.

What's next?

Expect the following in the v0.26 release!

  • Officially release proto!
  • Improved Deno interoperability.
- - + + \ No newline at end of file diff --git a/blog/v0.26.html b/blog/v0.26.html index 8814afc0038..eb288b0d313 100644 --- a/blog/v0.26.html +++ b/blog/v0.26.html @@ -13,12 +13,12 @@ - - + +
-

moon v0.26 - Deeper proto integration, Docker setup, and query commands

· 4 min read
Miles Johnson

With this release, we're providing deeper integration with our new proto toolchain +

moon v0.26 - Deeper proto integration, Docker setup, and query commands

· 4 min read
Miles Johnson

With this release, we're providing deeper integration with our new proto toolchain manager, better Docker support, and new query commands for debugging.

Full proto toolchain integration

Earlier this week we announced proto, our own toolchain manager, and an attempt at a next generation version manager for multiple languages. proto was originally moon's toolchain layer, but we felt it best to extract it out into a stand-alone tool for everyone to use, especially those not @@ -47,7 +47,7 @@ official release for a full list of changes.

  • A handful of critical bug fixes.
  • Targets that generate an empty hash are now considered a failure, as they may be an edge case not accounted for.

What's next?

Expect the following in the v1 release!

  • Officially release a v1!
  • Project tagging and constraints.
- - + + \ No newline at end of file diff --git a/blog/vscode-extension.html b/blog/vscode-extension.html index 1c8e2e74725..98854f16e76 100644 --- a/blog/vscode-extension.html +++ b/blog/vscode-extension.html @@ -13,18 +13,18 @@ - - + +
-

New VS Code extension!

· One min read
Miles Johnson

We're very excited to announce the initial release of our Visual Studio Code extension!

If you're a huge VS Code fan like us, you most likely use extensions in your everyday workflow. We +

New VS Code extension!

· One min read
Miles Johnson

We're very excited to announce the initial release of our Visual Studio Code extension!

If you're a huge VS Code fan like us, you most likely use extensions in your everyday workflow. We want to enhance this experience by providing a fully integrated and interactive moon console! Here's a preview of what it looks like:

Excited?? Want to learn more? Check out the official moonrepo.moon-console marketplace page, or read the official documentation. This is only the first iteration of the extension. Expect more advanced features in the future, like...

  • Schema validation for configuration files
  • Autocompletion for configuration files
  • Automatic running/building of projects in the background
  • File type association
  • Integrated language server
  • And much more!
- - + + \ No newline at end of file diff --git a/docs.html b/docs.html index 6b2fe742559..1f0bcc90271 100644 --- a/docs.html +++ b/docs.html @@ -13,8 +13,8 @@ - - + +
@@ -67,7 +67,7 @@ tracking of CI jobs to detect flakiness and regressions, project and code ownership registries, repository health, and much more!

This service is currently in heavy development.

proto

proto is a version manager for your favorite programming languages. View proto documentation.

- - + + \ No newline at end of file diff --git a/docs/cheat-sheet.html b/docs/cheat-sheet.html index 98839f94512..bfa6e6d27d5 100644 --- a/docs/cheat-sheet.html +++ b/docs/cheat-sheet.html @@ -13,13 +13,13 @@ - - + +

Cheat sheet

Don't have time to read the docs? Here's a quick cheat sheet to get you started.

Tasks

Learn more about tasks and targets.

Run all build and test tasks for all projects

moon check --all

Run all build and test tasks in a project

moon check project

Run all build and test tasks for closest project based on working directory

moon check

Run a task in all projects

moon run :task

Run a task in all projects with a tag

moon run '#tag:task'
# OR
moon run \#tag:task
# OR
moon run :task --query "tag=tag"

Run a task in a project

moon run project:task

Run multiple tasks in all projects

moon run :task1 :task2

Run multiple tasks in any project

moon run projecta:task1 projectb:task2

Run a task in applications, libraries, or tools

moon run :task --query "projectType=application"

Run a task in projects of a specific language

moon run :task --query "language=typescript"

Run a task in projects matching a keyword

moon run :task --query "project~react-*"

Run a task in projects based on file path

moon run :task --query "projectSource~packages/*"

Task configuration

Learn more about available options.

Disable caching

moon.yml
tasks:
example:
# ...
options:
cache: false

Re-run flaky tasks

moon.yml
tasks:
example:
# ...
options:
retryCount: 3

Depend on tasks from parent project's dependencies

moon.yml
# Also inferred from the language's platform
dependsOn:
- 'project-a'
- 'project-b'

tasks:
example:
# ...
deps:
- '^:build'

Depend on tasks from arbitrary projects

moon.yml
tasks:
example:
# ...
deps:
- 'other-project:task'

Run dependencies serially

moon.yml
tasks:
example:
# ...
deps:
- 'first'
- 'second'
- 'third'
options:
runDepsInParallel: false

Run multiple watchers/servers in parallel

moon.yml
tasks:
example:
command: 'noop'
deps:
- 'app:watch'
- 'backend:start'
- 'tailwind:watch'
local: true

The local or persistent settings are required for this to work.

Languages

Run system binaries available on PATH

moon.yml
language: 'bash' # batch, etc

tasks:
example:
command: 'printenv'
moon.yml
tasks:
example:
command: 'printenv'
platform: 'system'

Run language binaries not supported in moon's toolchain

moon.yml
language: 'ruby'

tasks:
example:
command: 'rubocop'
platform: 'system'

Run npm binaries (Node.js)

moon.yml
language: 'javascript' # typescript

tasks:
example:
command: 'eslint'
moon.yml
tasks:
example:
command: 'eslint'
platform: 'node'
- - + + \ No newline at end of file diff --git a/docs/commands.html b/docs/commands.html index 71692d15200..184248e4517 100644 --- a/docs/commands.html +++ b/docs/commands.html @@ -13,13 +13,13 @@ - - + +

Commands

- - + + \ No newline at end of file diff --git a/docs/commands/action-graph.html b/docs/commands/action-graph.html index 8efe0dd4d9a..860659a711e 100644 --- a/docs/commands/action-graph.html +++ b/docs/commands/action-graph.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ action graph. In other tools, this is sometimes referred to as a dependency graph or task graph.

# Run the visualizer locally
$ moon action-graph

# Export to DOT format
$ moon action-graph --dot > graph.dot

A target can be passed to focus the graph, including dependencies and dependents. For example, moon action-graph app:build.

Arguments

  • [target] - Optional target to focus.

Options

  • --dot - Output the graph in DOT format.

Example output

The following output is an example of the graph in DOT format.

digraph {
0 [ label="SetupNodeTool" style=filled, shape=oval, fillcolor=black, fontcolor=white]
1 [ label="InstallNodeDeps" style=filled, shape=oval, fillcolor=gray, fontcolor=black]
2 [ label="SyncNodeProject(node)" style=filled, shape=oval, fillcolor=gray, fontcolor=black]
3 [ label="RunTask(node:standard)" style=filled, shape=oval, fillcolor=gray, fontcolor=black]
1 -> 0 [ arrowhead=box, arrowtail=box]
2 -> 0 [ arrowhead=box, arrowtail=box]
3 -> 1 [ arrowhead=box, arrowtail=box]
3 -> 2 [ arrowhead=box, arrowtail=box]
}
- - + + \ No newline at end of file diff --git a/docs/commands/bin.html b/docs/commands/bin.html index bbff3f263fa..40a91c142c3 100644 --- a/docs/commands/bin.html +++ b/docs/commands/bin.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ respectively.

$ moon bin node
/Users/example/.proto/tools/node/x.x.x/bin/node

A tool is considered "not configured" when not in use, for example, querying yarn/pnpm when the package manager is configured for "npm". A tool is considered "not installed", when it has not been downloaded and installed into the tools directory.

Arguments

  • <tool> - Name of the tool to query.
- - + + \ No newline at end of file diff --git a/docs/commands/check.html b/docs/commands/check.html index 2d1f0ace395..af5760db616 100644 --- a/docs/commands/check.html +++ b/docs/commands/check.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ command for verifying the current state of a project, instead of running multiple moon run commands.

# Check project at current working directory
$ moon check

# Check project by name
$ moon check app

# Check multiple projects by name
$ moon check client server

# Check ALL projects (may be costly)
$ moon check --all

Arguments

  • [...names] - List of project names or aliases to explicitly check, as defined in projects.

Options

  • --all - Run check for all projects in the workspace.
  • -u, --updateCache - Bypass cache and force update any existing items.
- - + + \ No newline at end of file diff --git a/docs/commands/ci.html b/docs/commands/ci.html index c84aed722ab..3d62a4dbc67 100644 --- a/docs/commands/ci.html +++ b/docs/commands/ci.html @@ -13,8 +13,8 @@ - - + +
@@ -24,7 +24,7 @@ to utilize this command.

Arguments

Options

  • --base <rev> - Base branch, commit, or revision to compare against. Can be set with MOON_BASE. Defaults to vcs.defaultBranch.
  • --head <rev> - Current branch, commit, or revision to compare with. Can be set with MOON_HEAD. Defaults to HEAD.
  • --job <index> - Index of the current job.
  • --jobTotal <total> Total amount of jobs to run.
- - + + \ No newline at end of file diff --git a/docs/commands/clean.html b/docs/commands/clean.html index e9acbaa6c4f..22e633ca1a9 100644 --- a/docs/commands/clean.html +++ b/docs/commands/clean.html @@ -13,8 +13,8 @@ - - + +
@@ -22,7 +22,7 @@ part, the action pipeline will clean automatically, but this command can be used to reset the workspace entirely.

$ moon clean

# Delete cache with a custom lifetime
$ moon clean --lifetime '24 hours'

Options

  • --lifetime - The maximum lifetime of cached artifacts before being marked as stale. Defaults to "7 days".
- - + + \ No newline at end of file diff --git a/docs/commands/completions.html b/docs/commands/completions.html index 7c7ae352e4d..02dab2ffc79 100644 --- a/docs/commands/completions.html +++ b/docs/commands/completions.html @@ -13,15 +13,15 @@ - - + +

completions

The moon completions command will generate moon command and argument completions for your current shell. This command will write to stdout, which can then be redirected to a file of your choice.

$ moon completions > ~/.bash_completion.d/moon.sh

Options

  • --shell - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or "zsh".
- - + + \ No newline at end of file diff --git a/docs/commands/docker.html b/docs/commands/docker.html index b7d50cad974..84c39685d2b 100644 --- a/docs/commands/docker.html +++ b/docs/commands/docker.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/commands/docker/prune.html b/docs/commands/docker/prune.html index afe72b8c06a..cba9f46c289 100644 --- a/docs/commands/docker/prune.html +++ b/docs/commands/docker/prune.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ applicable extraneous files.

$ moon docker prune

View the official Docker usage guide for a more in-depth example of how to utilize this command.

caution

This command must be ran after moon docker scaffold and is typically ran within a Dockerfile!

- - + + \ No newline at end of file diff --git a/docs/commands/docker/scaffold.html b/docs/commands/docker/scaffold.html index 3b13ce0e059..eb7dab23535 100644 --- a/docs/commands/docker/scaffold.html +++ b/docs/commands/docker/scaffold.html @@ -13,8 +13,8 @@ - - + +
@@ -36,7 +36,7 @@ moon run and other commands to work within the Dockerfile, and avoid having to COPY . . the entire repository.

Using our example workspace above, our sources skeleton would look like the following, assuming our client project is passed as an argument, and this project depends on the foo and baz projects.

.moon/docker/sources/
├── apps/
│ └── client/
| ├── src/
| ├── tests/
| ├── public/
| ├── package.json
| ├── tsconfig.json
│ └── (anything else)
└── packages/
├── foo/
│ ├── lib/
│ ├── src/
│ ├── package.json
│ ├── tsconfig.json
│ └── (anything else)
└── baz/
├── lib/
├── src/
├── package.json
├── tsconfig.json
└── (anything else)
- - + + \ No newline at end of file diff --git a/docs/commands/docker/setup.html b/docs/commands/docker/setup.html index fa1b121b708..7446ae6846b 100644 --- a/docs/commands/docker/setup.html +++ b/docs/commands/docker/setup.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ commands.

$ moon docker setup

View the official Docker usage guide for a more in-depth example of how to utilize this command.

caution

This command must be ran after moon docker scaffold and is typically ran within a Dockerfile!

- - + + \ No newline at end of file diff --git a/docs/commands/generate.html b/docs/commands/generate.html index ea660102077..fd51b1a1cca 100644 --- a/docs/commands/generate.html +++ b/docs/commands/generate.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ based on the generator.templates setting.

# Generate code from a template to a target directory
$ moon generate npm-package ./packages/example

# Generate code while declaring custom variable values
$ moon generate npm-package ./packages/example -- --name "@company/example"

# Create a new template
$ moon generate react-app --template

View the official code generation guide for a more in-depth example of how to utilize this command.

Arguments

  • <name> - Name of the template to generate.
  • [dest] - Destination to write files to, relative from the current working directory. If not defined, will be prompted during generation.
  • [-- <vars>] - Additional arguments to override default variable values.

Options

  • --defaults - Use the default value of all variables instead of prompting the user.
  • --dryRun - Run entire generator process without writing files.
  • --force - Force overwrite any existing files at the destination.
  • --template - Create a new template with the provided name.
- - + + \ No newline at end of file diff --git a/docs/commands/init.html b/docs/commands/init.html index 1ae52adc036..552abade971 100644 --- a/docs/commands/init.html +++ b/docs/commands/init.html @@ -13,8 +13,8 @@ - - + +
@@ -24,7 +24,7 @@ other ecosystem related settings.

$ moon init

# In another directory
$ moon init ./app

The command can also be used to initialize a specific tool after moon has already been initialized. Perfect for adopting a new language into the workspace.

$ moon init --tool typescript

Arguments

  • [dest] - Destination to initialize and scaffold into. Defaults to . (current working directory).

Options

  • --force - Overwrite existing config files if they exist.
  • --minimal - Generate minimal configurations and sane defaults.
  • --tool - Individual tool to initialize and configure.
    • Accepts: node, rust, typescript
  • --yes - Skip all prompts and enables tools based on file detection.
- - + + \ No newline at end of file diff --git a/docs/commands/migrate.html b/docs/commands/migrate.html index 085467db154..6cda3859bc0 100644 --- a/docs/commands/migrate.html +++ b/docs/commands/migrate.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/commands/migrate/from-package-json.html b/docs/commands/migrate/from-package-json.html index f1512097c5f..720a8b2183e 100644 --- a/docs/commands/migrate/from-package-json.html +++ b/docs/commands/migrate/from-package-json.html @@ -13,8 +13,8 @@ - - + +
@@ -50,7 +50,7 @@ as a task dependency.

For example, a posttest script would be converted into a posttest task, with the test task included in deps. For this to actually run correctly, you'll need to use moon run <project>:posttest AND NOT moon run <project>:test.

- - + + \ No newline at end of file diff --git a/docs/commands/migrate/from-turborepo.html b/docs/commands/migrate/from-turborepo.html index 64c2ca95005..f4f3962f9a6 100644 --- a/docs/commands/migrate/from-turborepo.html +++ b/docs/commands/migrate/from-turborepo.html @@ -13,8 +13,8 @@ - - + +
@@ -25,7 +25,7 @@ the toolchain before this command is ran!

Furthermore, this process does not change existing package.json scripts, so if you're looking to migrate them as well, use the moon migrate from-package-json command.

Caveats

  • This process will not migrate root-level Turborepo tasks (those starting with //#). You'll need to manually create a moon root-level project and migrate tasks.
- - + + \ No newline at end of file diff --git a/docs/commands/overview.html b/docs/commands/overview.html index 5bb98a6afc5..a38262c2d95 100644 --- a/docs/commands/overview.html +++ b/docs/commands/overview.html @@ -13,8 +13,8 @@ - - + +
@@ -45,7 +45,7 @@ levels are supported, in priority order.

  • off - Turn off logging entirely.
  • error - Only show error logs.
  • warn - Only show warning logs and above.
  • info (default) - Only show info logs and above.
  • debug - Only show debug logs and above.
  • trace - Show all logs, including network requests and child processes.
$ moon run app:build --log trace
# Or
$ MOON_LOG=trace moon run app:build

Outputting logs to a file

moon can dump the logs from a command to a file using the --logFile option, or the MOON_LOG_FILE environment variable. The dumped logs will respect the --log option and filter the logs piped to the output file.

$ moon run app:build --logFile=output.log
# Or
$ MOON_LOG_FILE=output.log moon run app:build
- - + + \ No newline at end of file diff --git a/docs/commands/project-graph.html b/docs/commands/project-graph.html index 2297efd3fe5..cba8e58b2b8 100644 --- a/docs/commands/project-graph.html +++ b/docs/commands/project-graph.html @@ -13,8 +13,8 @@ - - + +
@@ -23,7 +23,7 @@ Graphviz DOT format.

# Run the visualizer locally
$ moon project-graph

# Export to DOT format
$ moon project-graph --dot > graph.dot

A project name can be passed to focus the graph to only that project and it's dependencies. For example, moon project-graph app.

Arguments

  • [name] - Optional name or alias of a project to focus, as defined in projects.

Options

  • --dot - Output the graph in DOT format.

Example output

The following output is an example of the graph in DOT format.

digraph {
0 [ label="(workspace)" style=filled, shape=circle, fillcolor=black, fontcolor=white]
1 [ label="runtime" style=filled, shape=circle, fillcolor=gray, fontcolor=black]
2 [ label="website" style=filled, shape=circle, fillcolor=gray, fontcolor=black]
0 -> 1 [ arrowhead=none]
0 -> 2 [ arrowhead=none]
}
- - + + \ No newline at end of file diff --git a/docs/commands/project.html b/docs/commands/project.html index 57f81383e8e..dba16c63eab 100644 --- a/docs/commands/project.html +++ b/docs/commands/project.html @@ -13,8 +13,8 @@ - - + +
@@ -22,7 +22,7 @@ project that has been configured and exists within the graph. If a project does not exist, the program will return with a 1 exit code.

$ moon project web

Arguments

  • <name> - Name or alias of a project, as defined in projects.

Options

  • --json - Print the project and its configuration as JSON.

Example output

The following output is an example of what this command prints, using our very own @moonrepo/runtime package.

RUNTIME

ID: runtime
Alias: @moonrepo/runtime
Source: packages/runtime
Root: /Projects/moon/packages/runtime

TASKS

build: packemon build --addEngines --addExports
format: prettier --check .
lint: eslint --no-error-on-unmatched-pattern .
test: jest --passWithNoTests .
typecheck: tsc --build

FILE GROUPS

configs:
- *.{js,json}
sources:
- src/**/*
- types/**/*
tests:
- tests/**/*.test.*
- - + + \ No newline at end of file diff --git a/docs/commands/query.html b/docs/commands/query.html index f7a3548bf3a..7fb85e9ec56 100644 --- a/docs/commands/query.html +++ b/docs/commands/query.html @@ -13,13 +13,13 @@ - - + +
- - + + \ No newline at end of file diff --git a/docs/commands/query/hash-diff.html b/docs/commands/query/hash-diff.html index 85b0ba57619..88457efb15b 100644 --- a/docs/commands/query/hash-diff.html +++ b/docs/commands/query/hash-diff.html @@ -13,8 +13,8 @@ - - + +
@@ -24,7 +24,7 @@ left differences printed in green, and right differences printed in red. If you use git diff, this will feel familiar to you.

Left:  0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde
Right: 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171

{
"command": "build",
"args": [
+ "./dist"
- "./build"
],
...
}

The differences can also be output in JSON by passing the --json flag. The output has the following structure:

{
left: string,
left_hash: string,
left_diffs: string[],
right: string,
right_hash: string,
right_diffs: string[],
}

Options

  • --json - Display the manifest in JSON format.
- - + + \ No newline at end of file diff --git a/docs/commands/query/hash.html b/docs/commands/query/hash.html index f8d0dfe9bf5..ece96eb6e23 100644 --- a/docs/commands/query/hash.html +++ b/docs/commands/query/hash.html @@ -13,15 +13,15 @@ - - + +

query hash

Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also known as the hash manifest. This is extremely useful in debugging task inputs.

$ moon query hash 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde

# Query hash using short form
$ moon query hash 0b55b234

By default, this will output the contents of the hash manifest (which is JSON), and the fully qualified resolved hash.

Hash: 0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde

{
"command": "build",
"args": ["./build"]
// ...
}

The command can also be output raw JSON by passing the --json flag.

Options

  • --json - Display the diff in JSON format.
- - + + \ No newline at end of file diff --git a/docs/commands/query/projects.html b/docs/commands/query/projects.html index f790d542a7b..ea44ce8bc73 100644 --- a/docs/commands/query/projects.html +++ b/docs/commands/query/projects.html @@ -13,8 +13,8 @@ - - + +
@@ -26,7 +26,7 @@ tree. For advanced control, you can also pass the results of moon query touched-files to stdin.

# Find all affected projects
$ moon query projects --affected

# Find all affected projects using the results of another query
$ moon query touched-files | moon query projects --affected

Arguments

Options

  • --affected - Filter projects that have been affected by touched files. This will only filter based on files, and does not include upstream or downstream dependencies.
  • --json - Display the projects in JSON format.

Filters

All option values are case-insensitive regex patterns.

  • --alias <regex> - Filter projects that match this alias.
  • --id <regex> - Filter projects that match this ID/name.
  • --language <regex> - Filter projects of this programming language.
  • --source <regex> - Filter projects that match this source path.
  • --tags <regex> - Filter projects that have the following tags.
  • --tasks <regex> - Filter projects that have the following tasks.
  • --type <regex> - Filter project of this type.
- - + + \ No newline at end of file diff --git a/docs/commands/query/tasks.html b/docs/commands/query/tasks.html index 46130be8887..b680bdf1eac 100644 --- a/docs/commands/query/tasks.html +++ b/docs/commands/query/tasks.html @@ -13,8 +13,8 @@ - - + +
@@ -25,7 +25,7 @@ passing the --json flag. The output has the following structure:

{
tasks: Record<string, Record<string, Task>>,
options: QueryOptions,
}

Arguments

Options

  • --affected - Filter projects that have been affected by touched files. This will only filter based on files, and does not include upstream or downstream dependencies.
  • --json - Display the projects in JSON format.

Filters

All option values are case-insensitive regex patterns.

  • --alias <regex> - Filter projects that match this alias.
  • --id <regex> - Filter projects that match this ID/name.
  • --language <regex> - Filter projects of this programming language.
  • --source <regex> - Filter projects that match this source path.
  • --tasks <regex> - Filter projects that have the following tasks.
  • --type <regex> - Filter project of this type.
- - + + \ No newline at end of file diff --git a/docs/commands/query/touched-files.html b/docs/commands/query/touched-files.html index 0ec7de344c9..6c43dd3cb8d 100644 --- a/docs/commands/query/touched-files.html +++ b/docs/commands/query/touched-files.html @@ -13,8 +13,8 @@ - - + +
@@ -26,7 +26,7 @@ uses.
  • If --local is provided, touched files are based on your local index only (git status).
  • Otherwise, then compare the defined base (--base) against head (--head).
  • # Return all files
    $ moon query touched-files

    # Return deleted files
    $ moon query touched-files --status deleted

    # Return all files between 2 revisions
    $ moon query touched-files --base <branch> --head <commit>

    By default, this will output a list of absolute file paths, separated by new lines.

    /absolute/file/one.ts
    /absolute/file/two.ts

    The files can also be output in JSON by passing the --json flag. The output has the following structure:

    {
    files: string[],
    options: QueryOptions,
    }

    Options

    • --defaultBranch - When on the default branch, compare against the previous revision.
    • --base <rev> - Base branch, commit, or revision to compare against. Defaults to vcs.defaultBranch.
    • --head <rev> - Current branch, commit, or revision to compare with. Defaults to HEAD.
    • --json - Display the files in JSON format.
    • --local - Gather files from you local state instead of remote.
    • --status <type> - Filter files based on a touched status. Can be passed multiple times.
      • Types: all (default), added, deleted, modified, staged, unstaged, untracked
    - - + + \ No newline at end of file diff --git a/docs/commands/run.html b/docs/commands/run.html index 8f9df8ce948..a2ad5b6fa74 100644 --- a/docs/commands/run.html +++ b/docs/commands/run.html @@ -13,8 +13,8 @@ - - + +
    @@ -26,7 +26,7 @@ pass to the underlying command.

    Options

    • -f, --force - Force run and ignore touched files and affected status. Will not query VCS.
    • --dependents - Run downstream dependent targets (of the same task name) as well.
    • -i, --interactive - Run the target in an interactive mode.
    • --profile <type> - Record and generate a profile for ran tasks.
      • Types: cpu, heap
    • --query - Filter projects to run targets against using a query statement. v1.3.0
    • -u, --updateCache - Bypass cache and force update any existing items.

    Affected

    • --affected - Only run target if affected by changed files, otherwise will always run.
    • --remote - Determine affected against remote by comparing HEAD against a base revision (default branch), otherwise uses local changes.
      • Can control revisions with MOON_BASE and MOON_HEAD.
    • --status <type> - Filter affected based on a change status. Can be passed multiple times.
      • Types: all (default), added, deleted, modified, staged, unstaged, untracked
    - - + + \ No newline at end of file diff --git a/docs/commands/setup.html b/docs/commands/setup.html index 83cdb4a0190..913c333b9e5 100644 --- a/docs/commands/setup.html +++ b/docs/commands/setup.html @@ -13,15 +13,15 @@ - - + +

    setup

    The moon setup command can be used to setup the developer and pipeline environments. It achieves this by downloading and installing all configured tools into the toolchain.

    $ moon setup
    info

    This command should rarely be used, as the environment is automatically setup when running other commands, like detecting affected projects, running a task, or generating a build artifact.

    - - + + \ No newline at end of file diff --git a/docs/commands/sync.html b/docs/commands/sync.html index 9ca45d58913..5d6f425c9fd 100644 --- a/docs/commands/sync.html +++ b/docs/commands/sync.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/commands/sync/codeowners.html b/docs/commands/sync/codeowners.html index 19c6e30e931..ebc6cc590f6 100644 --- a/docs/commands/sync/codeowners.html +++ b/docs/commands/sync/codeowners.html @@ -13,15 +13,15 @@ - - + +

    sync codeowners

    v1.8.0

    The moon sync codeowners command will manually sync code owners, by aggregating all owners from projects, and generating a single CODEOWNERS file. Refer to the official code owners guide for more information.

    $ moon sync codeowners

    Options

    • --clean - Clean and remove previously generated file.
    • --force - Bypass cache and force create file.
    - - + + \ No newline at end of file diff --git a/docs/commands/sync/hooks.html b/docs/commands/sync/hooks.html index af5961d334d..02ea75e561f 100644 --- a/docs/commands/sync/hooks.html +++ b/docs/commands/sync/hooks.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ VCS, by generating and referencing hook scripts from the vcs.hooks setting. Refer to the official VCS hooks guide for more information.

    $ moon sync hooks

    Options

    • --clean - Clean and remove previously generated hooks.
    • --force - Bypass cache and force create hooks.
    - - + + \ No newline at end of file diff --git a/docs/commands/sync/projects.html b/docs/commands/sync/projects.html index d229138387e..7d1a57d8b58 100644 --- a/docs/commands/sync/projects.html +++ b/docs/commands/sync/projects.html @@ -13,8 +13,8 @@ - - + +
    @@ -24,7 +24,7 @@ dependsOn.
  • Ensures language specific configuration files are present and accurate (package.json, tsconfig.json, etc).
  • Ensures root configuration and project configuration are in sync.
  • Any additional language specific semantics that may be required.
  • $ moon sync projects

    This command should rarely be ran, as moon run will sync affected projects automatically! However, when migrating or refactoring, manual syncing may be necessary.

    - - + + \ No newline at end of file diff --git a/docs/commands/task.html b/docs/commands/task.html index 3f7a64ff6ef..7dc2580f73c 100644 --- a/docs/commands/task.html +++ b/docs/commands/task.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ configured and exists within a project. If a task does not exist, the program will return with a 1 exit code.

    $ moon task web:build

    Arguments

    • <target> - Fully qualified project + task target.

    Options

    • --json - Print the task and its configuration as JSON.

    Example output

    The following output is an example of what this command prints, using our very own @moonrepo/runtime package.

    RUNTIME:BUILD

    ID: build
    Project: runtime
    Platform: node
    Type: build

    PROCESS

    Command: packemon build --addFiles --addExports --declaration
    Environment variables:
    - NODE_ENV = production
    Working directory: /Projects/moon/packages/runtime
    Runs dependencies: Concurrently
    Runs in CI: Yes

    DEPENDS ON

    - types:build

    INPUTS

    - .moon/*.yml
    - packages/runtime/src/**/*
    - packages/runtime/tsconfig.*.json
    - packages/runtime/types/**/*
    - packages/runtime/package.json
    - packages/runtime/tsconfig.json
    - tsconfig.options.json

    OUTPUTS

    - packages/runtime/cjs
    - - + + \ No newline at end of file diff --git a/docs/commands/teardown.html b/docs/commands/teardown.html index e1c612d351b..b915af7df60 100644 --- a/docs/commands/teardown.html +++ b/docs/commands/teardown.html @@ -13,14 +13,14 @@ - - + +

    teardown

    The moon teardown command, as its name infers, will teardown and clean the current environment, opposite the setup command. It achieves this by doing the following:

    • Uninstalling all configured tools in the toolchain.
    • Removing any download or temporary files/folders.
    $ moon teardown
    - - + + \ No newline at end of file diff --git a/docs/commands/upgrade.html b/docs/commands/upgrade.html index fd9cee69df9..60fefd5cd95 100644 --- a/docs/commands/upgrade.html +++ b/docs/commands/upgrade.html @@ -13,15 +13,15 @@ - - + +

    upgrade

    The moon upgrade command can be used to upgrade your current moon binary (if installed globally) to the latest version.

    $ moon upgrade
    caution

    This command will only work if moon was installed in the ~/.moon directory, using our official installation script. If installed through Node.js, you'll need to upgrade manually.

    - - + + \ No newline at end of file diff --git a/docs/comparison.html b/docs/comparison.html index 9d2a2548eeb..6a21dc11096 100644 --- a/docs/comparison.html +++ b/docs/comparison.html @@ -13,8 +13,8 @@ - - + +
    @@ -58,7 +58,7 @@ Lerna was able to run scripts in parallel, it wasn't the most efficient, as it did not support caching, hashing, or performant scheduling.

    However, the reason Lerna is not compared in-depth, is that Lerna was unowned and unmaintained for quite some time, and has recently fallen under the Nx umbrella. Lerna is basically Nx lite now.

    Comparison tables

    🟩 Supported🟨 Partially supported🟦 Similarly supported🟥 Not supported

    Workspace

    moon (10)nx (8)turborepo (7)

    Written in

    Rust

    Node.js

    Go (being rewritten in Rust)

    Workspace configured with

    .moon/workspace.yml

    nx.json

    turbo.json

    Project list configured in

    .moon/workspace.yml

    workspace.json

    package.json workspaces

    Repo / folder structure

    loose

    strict

    loose

    Ignore file support

    🟩  via hasher.ignorePatterns

    🟩  .nxignore

    🟥

    Supports dependencies inherited by all tasks

    🟩  via implicitDeps

    🟥🟥

    Supports inputs inherited by all tasks

    🟩  via implicitInputs

    🟩  via implicitDependencies

    🟩  via globalDependencies

    Supports tasks inherited by all projects

    🟩🟥🟥

    Integrates with a version control system

    🟩  git

    🟩  git

    🟩  git

    Supports scaffolding / generators

    🟩🟩🟩

    Toolchain

    moon (5)nx (2)turborepo (2)

    Supported languages

    Bash, Batch, Bun, Deno, Go, Node, JavaScript, TypeScript, PHP, Ruby, Rust, Python

    JavaScript, TypeScript

    JavaScript, TypeScript

    Supported dependency managers

    npm, pnpm, yarn

    npm, pnpm, yarn

    npm, pnpm, yarn

    Has a built-in toolchain

    🟩🟥🟥

    Downloads and installs languages (when applicable)

    🟩🟥🟥

    Configures explicit language/dependency manager versions

    🟩🟥🟥

    Projects

    moon (7)nx (5)turborepo (2)

    Dependencies on other projects

    🟩  implicit from package.json or explicit in moon.yml

    🟩  implicit from package.json or explicit in project.json

    🟩  implicit from package.json

    Ownership metadata

    🟩🟥🟥

    Primary programming language

    🟩🟥🟥

    Project type (app, lib, etc)

    🟩  app, lib, tool

    🟩  app, lib

    🟥

    Project-level file groups

    🟩

    🟩  via namedInputs

    🟥

    Project-level tasks

    🟩🟩🟩

    Tags and scopes (boundaries)

    🟩  native for all languages

    🟩  via ESLint (JavaScript only)

    🟥

    Tasks

    moon (22)nx (18)turborepo (16)

    Known as

    tasks

    targets, executors

    tasks

    Defines tasks in

    moon.yml or package.json scripts

    project.json or package.json scripts

    package.json scripts

    Run a single task with

    moon run project:task

    nx run project:target

    turbo run task --filter=project

    Run multiple tasks with

    moon run :task or moon run a:task b:task or moon check

    nx run-many --target=target

    turbo run task or turbo run a b c

    Run tasks based on a query/filter

    moon run :task --query "..."

    🟥🟥

    Can define tasks globally

    🟩  with .moon/tasks.yml

    🟥🟥

    Merges or overrides global tasks

    🟩🟥🟥

    Runs a command with args

    🟩

    🟦  behind an executor abstraction

    🟨  within the script

    Runs commands from

    project or workspace root

    workspace root

    project root

    Supports pipes, redirects, etc

    🟨  encapsulated in a file

    🟨  within the executor or script

    🟨  within the script

    Dependencies on other tasks

    🟩  via deps

    🟩  via dependsOn

    🟩  via dependsOn

    Can depend on arbitrary or unrelated tasks

    🟩

    🟥  dependent projects only

    🟥  dependent projects only

    Runs task dependencies in parallel

    🟩🟩🟩

    Can run task dependencies in serial

    🟩🟥🟥

    File groups

    🟩

    🟦  via namedInputs

    🟥

    Environment variables

    🟩  via env

    🟨  within the executor or script

    🟨  within the script

    Inputs

    🟩  files, globs, env vars

    🟩  files, globs, env vars, runtime

    🟩  files, globs

    Outputs

    🟩  files

    🟩  files, globs

    🟩  files

    Output logging style

    🟩  via outputStyle

    🟩  via --output-style

    🟩  via outputMode

    Custom hash inputs

    🟥

    🟩  via runtimeCacheInputs

    🟩  via globalDependencies

    Token substitution

    🟩🟥🟥

    Configuration presets

    🟩  via task extends

    🟩  via configurations

    🟥

    Configurable options

    🟩🟩🟩

    Task runner

    moon (9)nx (7)turborepo (7)

    Known as

    action pipeline

    task runner

    pipeline

    Generates a dependency graph

    🟩🟩🟩

    Runs in topological order

    🟩🟩🟩

    Automatically retries failed tasks

    🟩🟥🟥

    Caches task outputs via a unique hash

    🟩🟩🟩

    Can customize the underlying runner

    🟥🟩🟥

    Can profile running tasks

    🟩  cpu, heap

    🟩  cpu

    🟩  cpu

    Can generate run reports

    🟩🟥🟩

    Continuous integration (CI) support

    🟩🟨🟨

    Continuous deployment (CD) support

    🟥🟥🟥

    Remote / cloud caching and syncing

    🟩  with moonrepo.app (free / paid)

    🟩  with Nx cloud (paid)

    🟩  requires a Vercel account (free)

    Generator

    moon (13)nx (11)turborepo (11)

    Known as

    generator

    generator

    generator

    Templates are configured with a schema

    🟩  via template.yml

    🟩🟥

    Template file extensions (optional)

    🟩  .tera, .twig

    🟥

    🟩  .hbs

    Template files support frontmatter

    🟩🟥🟥

    Creates/copies files to destination

    🟩🟩🟩

    Updates/merges with existing files

    🟩  JSON/YAML only

    🟩  using JavaScript

    🟩

    Renders with a template engine

    🟩  via Tera

    🟩  via EJS

    🟩  via Handlebars

    Variable interpolation in file content

    🟩🟩🟩

    Variable interpolation in file paths

    🟩🟩🟩

    Can define variable values via interactive prompts

    🟩🟩🟩

    Can define variable values via command line args

    🟩🟥🟩

    Supports dry runs

    🟩🟩🟥

    Supports render helpers, filters, and built-ins

    🟩🟩🟩

    Generators can compose other generators

    🟥

    🟩  using JavaScript

    🟩  using JavaScript

    Other systems

    moon (6)nx (0)turborepo (1)

    Can send webhooks for critical pipeline events

    🟩🟥🟥

    Generates run reports with granular stats/metrics

    🟩🟥🟩

    Can define and manage code owners

    🟩🟥🟥

    Can generate a CODEOWNERS file

    🟩🟥🟥

    Can define and manage VCS (git) hooks

    🟩🟥🟥

    Supports git worktrees

    🟩🟥🟥

    JavaScript ecosystem

    moon (10)nx (0)turborepo (0)

    Will automatically install node modules when lockfile changes

    🟩🟥🟥

    Can automatically dedupe when lockfile changes

    🟩🟥🟥

    Can alias package.json names for projects

    🟩🟥🟥

    Can add engines constraint to root package.json

    🟩🟥🟥

    Can sync version manager configs (.nvmrc, etc)

    🟩🟥🟥

    Can sync cross-project dependencies to package.json

    🟩🟥🟥

    Can sync project references to applicable tsconfig.json

    🟩🟥🟥

    Can auto-create missing tsconfig.json

    🟩🟥🟥

    Can sync dependencies as paths to tsconfig.json

    🟩🟥🟥

    Can route outDir to a shared cached in tsconfig.json

    🟩🟥🟥

    Docker integration

    moon (3)nx (0)turborepo (2)

    Efficient scaffolding for Dockerfile layer caching

    🟩🟥🟩

    Automatic production-only dependency installation

    🟩🟥🟥

    Environment pruning to reduce image/container sizes

    🟩🟥🟩
    - - + + \ No newline at end of file diff --git a/docs/concepts.html b/docs/concepts.html index bb5b6719475..f150025d93b 100644 --- a/docs/concepts.html +++ b/docs/concepts.html @@ -13,13 +13,13 @@ - - + +
    - - + + \ No newline at end of file diff --git a/docs/concepts/cache.html b/docs/concepts/cache.html index fdd0bb9e625..38e1008afc3 100644 --- a/docs/concepts/cache.html +++ b/docs/concepts/cache.html @@ -13,8 +13,8 @@ - - + +
    @@ -34,7 +34,7 @@ timeline, where every point in time will have its own hash + archive that moon can play back.

    Furthermore, if we receive a cache hit on the hash, and the hash is the same as the last run, and outputs exist, we exit early without hydrating and assume the project is already hydrated. In the terminal, you'll see a message for "cached from previous run".

    File structure

    The following diagram outlines our cache folder structure and why each piece exists.

    .moon/cache/
    # Stores hash manifests of every ran task. Exists purely for debugging purposes.
    hashes/
    # Contents includes all sources used to generate the hash.
    <hash>.json

    # Stores `tar.gz` archives of a task's outputs based on its generated hash.
    outputs/
    <hash>.tar.gz

    # State information about anything and everything within moon. Toolchain,
    # dependencies, projects, running targets, etc.
    states/
    # Files at the root pertain to the entire workspace.
    <state>.json

    # Files for a project are nested within a folder by the project name.
    <project>/
    # Informational snapshot of the project, its tasks, and its configs.
    # Can be used at runtime by tasks that require this information.
    snapshot.json

    <task>/
    # Contents of the child process, including the exit code and
    # unique hash that is referenced above.
    lastRun.json

    # Outputs of last run target.
    stderr.log
    stdout.log
    - - + + \ No newline at end of file diff --git a/docs/concepts/file-group.html b/docs/concepts/file-group.html index 3c68698e0e3..826c8700347 100644 --- a/docs/concepts/file-group.html +++ b/docs/concepts/file-group.html @@ -13,8 +13,8 @@ - - + +
    @@ -28,7 +28,7 @@ override file groups defined at the workspace-level. For example, say we want to override the sources file group because our source folder is named "lib" and not "src", we would define our file groups as followed.

    .moon/tasks.yml
    fileGroups:
    sources:
    - 'src/**/*'
    - 'types/**/*'
    tests:
    - 'tests/**/*.test.*'
    - '**/__tests__/**/*'
    moon.yml
    fileGroups:
    # Overrides global
    sources:
    - 'lib/**/*'
    - 'types/**/*'
    # Inherited as-is
    tests:
    - 'tests/**/*.test.*'
    - '**/__tests__/**/*'
    - - + + \ No newline at end of file diff --git a/docs/concepts/file-pattern.html b/docs/concepts/file-pattern.html index 12b9156b339..4ed5efa4259 100644 --- a/docs/concepts/file-pattern.html +++ b/docs/concepts/file-pattern.html @@ -13,8 +13,8 @@ - - + +
    @@ -27,7 +27,7 @@ project root they will be ran in. They must not start with ./, or traverse upwards with ...

    # Valid
    src/**/*
    package.json

    # Invalid
    ./src/**/*
    ../utils

    Workspace relative

    When configuring fileGroups, inputs, and outputs, a listed file path or glob can be prefixed with / to resolve relative from the workspace root, and not the project root.

    # In project
    package.json

    # In workspace
    /package.json
    - - + + \ No newline at end of file diff --git a/docs/concepts/project.html b/docs/concepts/project.html index 3f65245404a..4c832056487 100644 --- a/docs/concepts/project.html +++ b/docs/concepts/project.html @@ -13,8 +13,8 @@ - - + +
    @@ -39,7 +39,7 @@ scanning the repository. How an implicit dependency is discovered is based on the project's language setting, and how that language's ecosystem functions.

    Configuration

    Projects can be configured with an optional moon.yml in the project root, or through the optional workspace-level .moon/tasks.yml.

    - - + + \ No newline at end of file diff --git a/docs/concepts/query-lang.html b/docs/concepts/query-lang.html index 88e2c296803..fe4ea4fe44d 100644 --- a/docs/concepts/query-lang.html +++ b/docs/concepts/query-lang.html @@ -13,8 +13,8 @@ - - + +
    @@ -30,7 +30,7 @@ logical groupings. Groups can also be nested within other groups.

    language=javascript && (taskType=test || taskType=build)

    Fields

    The following fields can be used as criteria, and are related to task tokens.

    language

    Programming language the project is written in, as defined in moon.yml.

    language=rust

    project

    Name OR alias of the project.

    project=server

    projectAlias

    Alias of the project. For example, the package.json name.

    projectAlias~@scope/*

    projectName

    Name of the project, as defined in .moon/workspace.yml.

    project=server

    projectSource

    Relative file path from the workspace root to the project root, as defined in .moon/workspace.yml.

    projectSource~packages/*

    projectType

    The type of project, as defined in moon.yml.

    projectType=application

    tag

    A tag within the project, as defined in moon.yml.

    tag~react-*

    task

    ID/name of a task within the project.

    task=[build,test]

    taskPlatform

    The platform a task will run against, as defined in moon.yml.

    taskPlatform=node

    taskType

    The type of task, based on its configured settings.

    taskType=build
    - - + + \ No newline at end of file diff --git a/docs/concepts/target.html b/docs/concepts/target.html index 7b6ab02ac97..3ced4476abc 100644 --- a/docs/concepts/target.html +++ b/docs/concepts/target.html @@ -13,8 +13,8 @@ - - + +
    @@ -30,7 +30,7 @@ the ~: prefix altogether, which will be expanded to the current project's name. This is useful for situations where the name is unknown, for example, when configuring .moon/tasks.yml, or if you just want a shortcut!

    .moon/tasks.yml
    # Configured as
    tasks:
    lint:
    command: 'eslint'
    deps:
    - '~:typecheck'
    # OR
    - 'typecheck'
    typecheck:
    command: 'tsc'

    # Resolves to (assuming project is "foo")
    tasks:
    lint:
    command: 'eslint'
    deps:
    - 'foo:typecheck'
    typecheck:
    command: 'tsc'
    - - + + \ No newline at end of file diff --git a/docs/concepts/task-inheritance.html b/docs/concepts/task-inheritance.html index 518f92aaac0..295e4b448fa 100644 --- a/docs/concepts/task-inheritance.html +++ b/docs/concepts/task-inheritance.html @@ -13,8 +13,8 @@ - - + +
    @@ -51,7 +51,7 @@ positional arguments.
  • replace - Values found in the local task entirely replaces the values in the global task. This strategy is useful when you need full control.
  • All 3 of these strategies are demonstrated below, with a somewhat contrived example, but you get the point.

    # Global
    tasks:
    build:
    command:
    - 'webpack'
    - '--mode'
    - 'production'
    - '--color'
    deps:
    - 'designSystem:build'
    inputs:
    - '/webpack.config.js'
    outputs:
    - 'build/'

    # Local
    tasks:
    build:
    args: '--no-color --no-stats'
    deps:
    - 'reactHooks:build'
    inputs:
    - 'webpack.config.js'
    options:
    mergeArgs: 'append'
    mergeDeps: 'prepend'
    mergeInputs: 'replace'

    # Merged result
    tasks:
    build:
    command:
    - 'webpack'
    - '--mode'
    - 'production'
    - '--color'
    - '--no-color'
    - '--no-stats'
    deps:
    - 'reactHooks:build'
    - 'designSystem:build'
    inputs:
    - 'webpack.config.js'
    outputs:
    - 'build/'
    options:
    mergeArgs: 'append'
    mergeDeps: 'prepend'
    mergeInputs: 'replace'
    - - + + \ No newline at end of file diff --git a/docs/concepts/task.html b/docs/concepts/task.html index 9881eb7f757..fde159d1247 100644 --- a/docs/concepts/task.html +++ b/docs/concepts/task.html @@ -13,8 +13,8 @@ - - + +
    @@ -39,7 +39,7 @@ run them last as a batch. This is perfect for a few reasons:

    • All persistent tasks are ran in parallel, so they don't block each other.
    • Running both the backend API and frontend webapp in parallel is a breeze.
    • Dependencies of persistent tasks are guaranteed to have ran and completed.

    To mark a task as persistent, enable the local or options.persistent settings.

    moon.yml
    tasks:
    dev:
    command: 'start-dev-server'
    local: true
    # OR
    options:
    persistent: true

    Configuration

    Tasks can be configured per project through moon.yml, or for many projects through .moon/tasks.yml.

    Inheritance

    View the official documentation on task inheritance.

    - - + + \ No newline at end of file diff --git a/docs/concepts/token.html b/docs/concepts/token.html index dd97a5cf46b..052a452e984 100644 --- a/docs/concepts/token.html +++ b/docs/concepts/token.html @@ -13,8 +13,8 @@ - - + +
    @@ -50,7 +50,7 @@ .moon/workspace.yml.

    # Configured as
    tasks:
    build:
    command:
    - 'example'
    - '--cache-dir'
    - '../../.cache/$projectSource'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--cache-dir'
    - '../../.cache/apps/web'

    $projectType

    The type of project, as defined in moon.yml. If the project has not defined the type setting, or does not have a config, this defaults to "unknown".

    # Configured as
    tasks:
    build:
    command: 'example debug $projectType'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - 'debug'
    - 'application'

    Task

    $target

    Target that is currently running.

    # Configured as
    tasks:
    build:
    command: 'example $target'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - 'web:build'

    $task

    ID/name of the task that is currently running.

    # Configured as
    tasks:
    build:
    command: 'example --task=$task'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--task=build'

    $taskPlatform

    The platform that task will run against, as defined in moon.yml.

    # Configured as
    tasks:
    build:
    command: 'example --platform $taskPlatform'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--platform'
    - 'system'

    $taskType

    The type of task, based on its configured settings.

    # Configured as
    tasks:
    build:
    command: 'example --type $taskType'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--type'
    - 'build'

    Date/Time

    $date

    The current date in the format of YYYY-MM-DD.

    # Configured as
    tasks:
    build:
    command: 'example --date $date'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--date'
    - '2023-03-17'

    $time

    The current time in the format of HH:MM:SS.

    # Configured as
    tasks:
    build:
    command: 'example --time $time'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--time'
    - '14:05:10'

    $datetime

    The current date and time in the format of YYYY-MM-DD_HH:MM:SS.

    # Configured as
    tasks:
    build:
    command: 'example --datetime $datetime'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--datetime'
    - '2023-03-17_14:05:10'

    $timestamp

    The current date and time as a UNIX timestamp in seconds.

    # Configured as
    tasks:
    build:
    command: 'example --timestamp $timestamp'

    # Resolves to
    tasks:
    build:
    command:
    - 'example'
    - '--timestamp'
    - '1679087127'
    - - + + \ No newline at end of file diff --git a/docs/concepts/toolchain.html b/docs/concepts/toolchain.html index 60a7c774a0c..6cee10dd0ea 100644 --- a/docs/concepts/toolchain.html +++ b/docs/concepts/toolchain.html @@ -13,8 +13,8 @@ - - + +
    @@ -45,7 +45,7 @@ Otherwise, we'll download the latest version that matches the partial version, and install it locally.

    Supported tools

    The following tools are currently managed by the toolchain.

    Deno

    • Configured with: deno
    • Installed to: ~/.proto/tools/deno/x.x.x

    Node.js

    • Configured with: node
    • Installed to: ~/.proto/tools/node/x.x.x
    • Dependency managers: npm, pnpm, yarn
    - - + + \ No newline at end of file diff --git a/docs/concepts/workspace.html b/docs/concepts/workspace.html index 009701666d2..0a6f8c0d8f8 100644 --- a/docs/concepts/workspace.html +++ b/docs/concepts/workspace.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ runs tasks, and is coupled with a VCS repository. The root of a workspace is denoted by a .moon folder.

    By default moon has been designed for monorepos, but can also be used for polyrepos.

    Configuration

    Configuration that's applied to the entire workspace is defined in .moon/workspace.yml.

    - - + + \ No newline at end of file diff --git a/docs/config.html b/docs/config.html index ba8046c77fe..ae7838d6283 100644 --- a/docs/config.html +++ b/docs/config.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/config/project.html b/docs/config/project.html index 560d8b4d5ad..06740da082a 100644 --- a/docs/config/project.html +++ b/docs/config/project.html @@ -13,8 +13,8 @@ - - + +
    @@ -158,7 +158,7 @@ project. It accepts a map of strings, where the key is the original name (found in the global project config), and the value is the new name to use.

    For example, say we have 2 tasks in the global project config called buildPackage and buildApplication, but we only need 1, and since we're an application, we should omit and rename.

    moon.yml
    workspace:
    inheritedTasks:
    exclude: ['buildPackage']
    rename:
    buildApplication: 'build'

    Renaming occurs after inclusion and exclusion.

    - - + + \ No newline at end of file diff --git a/docs/config/tasks.html b/docs/config/tasks.html index eca59112289..f7e83d9af79 100644 --- a/docs/config/tasks.html +++ b/docs/config/tasks.html @@ -13,8 +13,8 @@ - - + +
    @@ -42,7 +42,7 @@ tasks that are inherited by many projects within the workspace, but can also be overridden per project.

    .moon/tasks.yml
    tasks:
    format:
    command: 'prettier --check .'

    lint:
    command: 'eslint --no-error-on-unmatched-pattern .'

    test:
    command: 'jest --passWithNoTests'

    typecheck:
    command: 'tsc --build'

    Relative file paths and globs used within a task are relative from the inherited project's root, and not the workspace.

    - - + + \ No newline at end of file diff --git a/docs/config/template.html b/docs/config/template.html index 936286d46cd..cc09f403d84 100644 --- a/docs/config/template.html +++ b/docs/config/template.html @@ -13,8 +13,8 @@ - - + +
    @@ -37,7 +37,7 @@ will override the file path within the template folder, and allow for conditional rendering and engine filters to be used.

    {% set component_name = name | pascal_case %}

    ---
    to: components/{{ component_name }}.tsx
    ---

    export function {{ component_name }}() {
    return <div />;
    }

    skip

    When enabled, the template file will be skipped while writing to the destination path. This setting can be used to conditionally render a file.

    ---
    skip: {{ name == "someCondition" }}
    ---

    Some template content!
    - - + + \ No newline at end of file diff --git a/docs/config/toolchain.html b/docs/config/toolchain.html index 29ff4f5434d..624f1805b75 100644 --- a/docs/config/toolchain.html +++ b/docs/config/toolchain.html @@ -13,8 +13,8 @@ - - + +
    @@ -89,7 +89,7 @@ toolchain.channel field in rust-toolchain.toml, relative to the root Cargo.lock. If the file does not exist, it will be created.

    This is a special setting that ensures other Rust/Cargo processes outside of our toolchain are utilizing the same version, which is a very common practice.

    .moon/toolchain.yml
    rust:
    version: '1.69.0'
    syncToolchainConfig: true

    To demonstrate this, the settings above would sync the following file:

    rust-toolchain.toml
    [toolchain]
    channel = "1.69.0"
    - - + + \ No newline at end of file diff --git a/docs/config/workspace.html b/docs/config/workspace.html index d9c102717b2..50c9997dabc 100644 --- a/docs/config/workspace.html +++ b/docs/config/workspace.html @@ -13,8 +13,8 @@ - - + +
    @@ -92,7 +92,7 @@ projects, this may be fine, but for larger projects, this may be undesirable and disruptive!

    versionConstraint

    Defines a version requirement for the currently running moon binary. This provides a mechanism for enforcing that the globally installed moon on every developers machine is using an applicable version.

    .moon/workspace.yml
    versionConstraint: '>=0.20.0'
    - - + + \ No newline at end of file diff --git a/docs/create-project.html b/docs/create-project.html index 6158006e686..b0e803e1613 100644 --- a/docs/create-project.html +++ b/docs/create-project.html @@ -13,8 +13,8 @@ - - + +
    @@ -40,7 +40,7 @@ more!

    Furthermore, we also support the type and language settings for a more granular breakdown of what exists in the repository.

    <project>/moon.yml
    type: 'tool'
    language: 'typescript'

    project:
    name: 'moon'
    description: 'A repo management tool.'
    channel: '#moon'
    owner: 'infra.platform'
    maintainers: ['miles.johnson']

    Next steps

    - - + + \ No newline at end of file diff --git a/docs/create-task.html b/docs/create-task.html index e39d5179901..865f6176120 100644 --- a/docs/create-task.html +++ b/docs/create-task.html @@ -13,8 +13,8 @@ - - + +
    @@ -54,7 +54,7 @@ @files token functions. Tokens are an advanced feature, so please refer to their documentation for more information!

    <project>/moon.yml
    language: 'javascript'

    fileGroups:
    # ...

    tasks:
    build:
    command: 'webpack build --mode production --no-stats --output-path @out(0)'
    inputs:
    - '@globs(sources)'
    - 'webpack.config.js'
    - '/webpack-shared.config.js'
    outputs:
    - 'build'

    With file groups (and tokens), you're able to reduce the amount of configuration required and encourage certain file structures for consuming projects!

    Next steps

    - - + + \ No newline at end of file diff --git a/docs/editors.html b/docs/editors.html index 43b623ddd30..0a7912a04be 100644 --- a/docs/editors.html +++ b/docs/editors.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/editors/vscode.html b/docs/editors/vscode.html index b2737e3b285..a3c6a8e1854 100644 --- a/docs/editors/vscode.html +++ b/docs/editors/vscode.html @@ -13,8 +13,8 @@ - - + +
    @@ -30,7 +30,7 @@ official VS Code marketplace for more information on the extension, its commands, available settings, and more!

    If you encounter a bug, or have a feature request, please submit them to the moonrepo/dev repository!

    - - + + \ No newline at end of file diff --git a/docs/faq.html b/docs/faq.html index fc60e570507..d0778f2cd25 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -13,8 +13,8 @@ - - + +
    @@ -85,7 +85,7 @@ node:latest image.
  • Upgrade the enviroment to a newer one. For example, Ubuntu 18 -> 22.
  • Try and install a newer libc (more information).
  • For more information on this problem as a whole, refer to this in-depth article.

    - - + + \ No newline at end of file diff --git a/docs/guides/ci.html b/docs/guides/ci.html index e5335314d25..32767099a38 100644 --- a/docs/guides/ci.html +++ b/docs/guides/ci.html @@ -13,8 +13,8 @@ - - + +
    @@ -51,7 +51,7 @@ moonrepo/run-report-action. This action will report the results of a moon ci run to a pull request as a comment and workflow summary.

    .github/workflows/ci.yml
    # ...
    jobs:
    ci:
    name: 'CI'
    runs-on: 'ubuntu-latest'
    steps:
    # ...
    - run: 'yarn moon ci'
    - uses: 'moonrepo/run-report-action@v1'
    if: success() || failure()
    with:
    access-token: ${{ secrets.GITHUB_TOKEN }}

    The report looks something like the following:

    - - + + \ No newline at end of file diff --git a/docs/guides/codegen.html b/docs/guides/codegen.html index 38d3b5f7b48..5a423564228 100644 --- a/docs/guides/codegen.html +++ b/docs/guides/codegen.html @@ -13,8 +13,8 @@ - - + +
    @@ -69,7 +69,7 @@ templates to exist within the current repository, relative from the workspace root. So how can we share templates across repositories? Why not try...

    • Git submodules
    • npm packages
    • Another packaging system

    Regardless of the choice, simply configure generator.templates to point to these locations:

    .moon/workspace.yml
    generator:
    templates:
    - './templates'
    - './node_modules/@company/shared-templates'
    - './path/to/submodules'
    - - + + \ No newline at end of file diff --git a/docs/guides/codeowners.html b/docs/guides/codeowners.html index bc363a69f5e..2a979f360a6 100644 --- a/docs/guides/codeowners.html +++ b/docs/guides/codeowners.html @@ -13,8 +13,8 @@ - - + +
    @@ -45,7 +45,7 @@ CODEOWNERS file.

    While this is useful for viewing ownership of a folder at a glance, it incurs a massive performance hit as we'd have to constantly glob the entire repository to find all OWNERS files. We found it best to define owners in moon.yml instead for the following reasons:

    • No performance hit, as we're already loading and parsing these config files.
    • Co-locates owners with the rest of moon's configuration.
    • Ownership is now a part of the project graph, enabling future features.
    - - + + \ No newline at end of file diff --git a/docs/guides/debug-task.html b/docs/guides/debug-task.html index 8ef081e65eb..838bbce8d02 100644 --- a/docs/guides/debug-task.html +++ b/docs/guides/debug-task.html @@ -13,8 +13,8 @@ - - + +
    @@ -66,7 +66,7 @@ output, allowing for simple line-by-line comparison debugging.

    moon query hash-diff <hash-left> <hash-right>
    Left:  0b55b234f1018581c45b00241d7340dc648c63e639fbafdaf85a4cd7e718fdde
    Right: 2388552fee5a02062d0ef402bdc7232f0a447458b058c80ce9c3d0d4d7cfe171

    [
    {
    "command": "build",
    "args": [
    + "./dist"
    - "./build"
    ],
    ...
    }
    ]

    This is extremely useful in diagnoising why a task is running differently than before, and is much easier than inspecting the hash manifest files manually!

    Ask for help

    If you've made it this far, and still can't figure out why a task is not working correctly, please ask for help!

    - - + + \ No newline at end of file diff --git a/docs/guides/docker.html b/docs/guides/docker.html index e84cabb54f8..c43d2320901 100644 --- a/docs/guides/docker.html +++ b/docs/guides/docker.html @@ -13,8 +13,8 @@ - - + +
    @@ -50,7 +50,7 @@ just fine, albeit with some functionality disabled.
  • Ensure that the git library is installed in the container, and copy the .git folder with COPY. moon will work with full functionality, but it will increase the overall size of the image because of caching.
  • - - + + \ No newline at end of file diff --git a/docs/guides/examples/angular.html b/docs/guides/examples/angular.html index 3b9f70f76c8..5e50343359d 100644 --- a/docs/guides/examples/angular.html +++ b/docs/guides/examples/angular.html @@ -13,8 +13,8 @@ - - + +
    @@ -40,7 +40,7 @@ ng command expects the configuration to live relative to the project root.

    Project-level

    When creating a new Angular project, a angular.json is created, and must exist in the project root. This allows each project to configure Angular for their needs.

    <project>/angular.json
    {
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "projects": {
    "angular-app": {
    "projectType": "application",
    ...
    }
    },
    ...
    }
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/astro.html b/docs/guides/examples/astro.html index ecba67a25ac..f0f3a1d93a5 100644 --- a/docs/guides/examples/astro.html +++ b/docs/guides/examples/astro.html @@ -13,8 +13,8 @@ - - + +
    @@ -41,7 +41,7 @@ astro command expects the configuration to live relative to the project root.

    Project-level

    When creating a new Astro project, a astro.config.mjs is created, and must exist in the project root. This allows each project to configure Astro for their needs.

    <project>/astro.config.mjs
    import { defineConfig } from 'astro/config';

    // https://astro.build/config
    export default defineConfig({});
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/eslint.html b/docs/guides/examples/eslint.html index 15931beb4a4..3b49f1d0e13 100644 --- a/docs/guides/examples/eslint.html +++ b/docs/guides/examples/eslint.html @@ -13,8 +13,8 @@ - - + +
    @@ -45,7 +45,7 @@ want to avoid touching many ESLint configs (think migrations), then overrides in the root are a viable option. Otherwise, we highly encourage project-level configs.

    .eslintrc.js
    module.exports = {
    // ...
    overrides: [
    // Only apply to apps "foo" and "bar", but not others
    {
    files: ['apps/foo/**/*', 'apps/bar/**/*'],
    rules: {
    'no-magic-numbers': 'off',
    },
    },
    ],
    };
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/jest.html b/docs/guides/examples/jest.html index fd5d8bee011..5ac7b7c609e 100644 --- a/docs/guides/examples/jest.html +++ b/docs/guides/examples/jest.html @@ -13,8 +13,8 @@ - - + +
    @@ -32,7 +32,7 @@ projects as the test task is ran per project. If you'd like to test multiple projects, use moon run :test.

    - - + + \ No newline at end of file diff --git a/docs/guides/examples/nest.html b/docs/guides/examples/nest.html index 829744e9b08..967b6e84552 100644 --- a/docs/guides/examples/nest.html +++ b/docs/guides/examples/nest.html @@ -13,8 +13,8 @@ - - + +
    @@ -28,7 +28,7 @@ nest command expects the configuration to live relative to the project root.

    Project-level

    When creating a new NestJS project, a nest-cli.json is created, and must exist in the project root. This allows each project to configure NestJS for their needs.

    <project>/nest-cli.json
    {
    "$schema": "https://json.schemastore.org/nest-cli",
    "collection": "@nestjs/schematics",
    "type": "application",
    "root": "./",
    "sourceRoot": "src",
    "compilerOptions": {
    "tsConfigPath": "tsconfig.build.json"
    }
    }
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/next.html b/docs/guides/examples/next.html index b5bcd56f079..a8b3ee09c77 100644 --- a/docs/guides/examples/next.html +++ b/docs/guides/examples/next.html @@ -13,8 +13,8 @@ - - + +
    @@ -43,7 +43,7 @@ next.config.<js|mjs> is created, and must exist in the project root. This allows each project to configure Next.js for their needs.

    <project>/next.config.js
    module.exports = {
    compress: true,
    };
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/nuxt.html b/docs/guides/examples/nuxt.html index eb65aec394b..17fc7812b22 100644 --- a/docs/guides/examples/nuxt.html +++ b/docs/guides/examples/nuxt.html @@ -13,8 +13,8 @@ - - + +
    @@ -28,7 +28,7 @@ nuxt.config.ts is created, and must exist in the project root. This allows each project to configure Next.js for their needs.

    <project>/nuxt.config.ts
    export default defineNuxtConfig({});

    Testing

    Nuxt supports testing through Jest or Vitest. Refer to our Jest documentation or Vitest documentation for more information on testing.

    - - + + \ No newline at end of file diff --git a/docs/guides/examples/packemon.html b/docs/guides/examples/packemon.html index 551d16de6f6..e5e3eab6a6b 100644 --- a/docs/guides/examples/packemon.html +++ b/docs/guides/examples/packemon.html @@ -13,8 +13,8 @@ - - + +
    @@ -29,7 +29,7 @@ declaration output directory.

    tsconfig.esm.json
    {
    "extends": "../../tsconfig.options.json",
    "compilerOptions": {
    "outDir": "esm",
    "rootDir": "src"
    },
    "include": ["src/**/*"],
    "references": []
    }

    Build targets

    To configure the target platform(s) and format(s), you must define a packemon block in the project's package.json. The chosen formats must also be listed as outputs in the task.

    package.json
    {
    "name": "package",
    // ...
    "packemon": {
    "format": "esm",
    "platform": "browser"
    }
    }
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/prettier.html b/docs/guides/examples/prettier.html index e271f067008..f0aecd053b0 100644 --- a/docs/guides/examples/prettier.html +++ b/docs/guides/examples/prettier.html @@ -13,8 +13,8 @@ - - + +
    @@ -29,7 +29,7 @@ work.

    FAQ

    How to use --write?

    Unfortunately, this isn't currently possible, as the prettier binary itself requires either the --check or --write options, and since we're configuring --check in the task above, that takes precedence. This is also the preferred pattern as checks will run (and fail) in CI.

    To work around this limitation, we suggest the following alternatives:

    • Configure your editor to run Prettier on save.
    • Define another task to write the formatted code, like format-write.
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/react.html b/docs/guides/examples/react.html index 3744ce1765d..0e84a45ddf2 100644 --- a/docs/guides/examples/react.html +++ b/docs/guides/examples/react.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ is abstracted away through another tool like webpack. Because of this, moon has no guidelines around utilizing React directly. You can use React however you wish!

    However, with that being said, we do suggest the following:

    • Add react and related dependencies to each project, not the root. This includes @types/react as well. This will ensure accurate hashing.
    yarn workspace <project> add react
    • Configure Babel with the @babel/preset-react preset.
    • Configure TypeScript compiler options with "jsx": "react-jsx".
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/remix.html b/docs/guides/examples/remix.html index 97bf309119c..01b981fc76a 100644 --- a/docs/guides/examples/remix.html +++ b/docs/guides/examples/remix.html @@ -13,8 +13,8 @@ - - + +
    @@ -37,7 +37,7 @@ remix command expects the configuration to live relative to the project root.

    Project-level

    When creating a new Remix project, a remix.config.js is created, and must exist in the project root. This allows each project to configure Remix for their needs.

    <project>/remix.config.js
    module.exports = {
    appDirectory: 'app',
    };
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/solid.html b/docs/guides/examples/solid.html index 871a03d5dd9..ff2134c89d9 100644 --- a/docs/guides/examples/solid.html +++ b/docs/guides/examples/solid.html @@ -13,8 +13,8 @@ - - + +
    @@ -29,7 +29,7 @@ project root.

    <project>/tsconfig.json
    {
    "compilerOptions": {
    "jsx": "preserve",
    "jsxImportSource": "solid-js"
    }
    }

    Vite integration

    If you're using a Vite powered application (Solid Start or starter templates), you should enable vite-plugin-solid instead of configuring Babel. Be sure to read our guide on Vite as well!

    <project>/vite.config.js
    import { defineConfig } from 'vite';
    import solidPlugin from 'vite-plugin-solid';

    export default defineConfig({
    // ...
    plugins: [solidPlugin()],
    });
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/storybook.html b/docs/guides/examples/storybook.html index 014bdf62397..1ed6e2a2ff9 100644 --- a/docs/guides/examples/storybook.html +++ b/docs/guides/examples/storybook.html @@ -13,8 +13,8 @@ - - + +
    @@ -34,7 +34,7 @@ on the Storybook docs.

    Configuration

    Storybook requires a .storybook folder relative to the project root. Because of this, Storybook should be scaffolded in each project individually. Configuration may be shared through package imports.

    - - + + \ No newline at end of file diff --git a/docs/guides/examples/sveltekit.html b/docs/guides/examples/sveltekit.html index 06427610913..14c5b61ebab 100644 --- a/docs/guides/examples/sveltekit.html +++ b/docs/guides/examples/sveltekit.html @@ -13,8 +13,8 @@ - - + +
    @@ -41,7 +41,7 @@ vite command expects the configuration to live relative to the project root.

    Project-level

    When creating a new SvelteKit project, a svelte.config.js is created, and must exist in the project root. This allows each project to configure SvelteKit for their needs.

    <project>/svelte.config.js
    import adapter from '@sveltejs/adapter-auto';
    import { vitePreprocess } from '@sveltejs/kit/vite';

    /** @type {import('@sveltejs/kit').Config} */
    const config = {
    // Consult https://kit.svelte.dev/docs/integrations#preprocessors
    // for more information about preprocessors
    preprocess: vitePreprocess(),

    kit: {
    adapter: adapter(),
    },
    };

    export default config;
    - - + + \ No newline at end of file diff --git a/docs/guides/examples/typescript.html b/docs/guides/examples/typescript.html index 9e64dd3618e..dfddf46ac65 100644 --- a/docs/guides/examples/typescript.html +++ b/docs/guides/examples/typescript.html @@ -13,8 +13,8 @@ - - + +
    @@ -38,7 +38,7 @@ following content.

    packages/tsconfig-company/tsconfig.json
    {
    "compilerOptions": {
    // ...
    "lib": ["esnext"]
    }
    }

    Within another tsconfig.json, you can extend this package to inherit the settings.

    tsconfig.json
    {
    "extends": "tsconfig-company/tsconfig.json"
    }

    FAQ

    How to preserve pretty output?

    TypeScript supports a pretty format where it includes codeframes and color highlighting for failures. However, when tsc is piped or the terminal is not a TTY, the pretty format is lost. To preserve and always display the pretty format, be sure to pass the --pretty argument!

    - - + + \ No newline at end of file diff --git a/docs/guides/examples/vite.html b/docs/guides/examples/vite.html index 37fc20dbbf1..e9e3fdfd9ce 100644 --- a/docs/guides/examples/vite.html +++ b/docs/guides/examples/vite.html @@ -13,8 +13,8 @@ - - + +
    @@ -28,7 +28,7 @@ and must exist in the project root.

    <project>/vite.config.js
    import { defineConfig } from 'vite';

    export default defineConfig({
    // ...
    build: {
    // These must be `outputs` in the `build` task
    outDir: 'dist',
    },
    test: {
    // Vitest settings
    },
    });

    If you'd prefer to configure Vitest in a separate configuration file, create a vitest.config.<js|ts> file.

    - - + + \ No newline at end of file diff --git a/docs/guides/examples/vue.html b/docs/guides/examples/vue.html index 18c7fb3ad3d..0588a01653b 100644 --- a/docs/guides/examples/vue.html +++ b/docs/guides/examples/vue.html @@ -13,8 +13,8 @@ - - + +
    @@ -32,7 +32,7 @@ to support Vue components. Because of this, we should update the typecheck task in the project to utilize this command instead.

    <project>/moon.yml
    workspace:
    inheritedTasks:
    exclude: ['typecheck']

    tasks:
    typecheck:
    command:
    - 'vue-tsc'
    - '--noEmit'
    # Always use pretty output
    - '--pretty'
    inputs:
    - 'env.d.ts'
    # Source and test files
    - 'src/**/*'
    - 'tests/**/*'
    # Project configs
    - 'tsconfig.json'
    - 'tsconfig.*.json'
    # Root configs (extended from only)
    - '/tsconfig.options.json'

    Be sure tsconfig.json compiler options are based on @vue/tsconfig.

    - - + + \ No newline at end of file diff --git a/docs/guides/javascript/deno-handbook.html b/docs/guides/javascript/deno-handbook.html index de31ddf03bf..8cd050b36b9 100644 --- a/docs/guides/javascript/deno-handbook.html +++ b/docs/guides/javascript/deno-handbook.html @@ -13,8 +13,8 @@ - - + +
    @@ -24,7 +24,7 @@ explicitly configured. We follow this approach to avoid unnecessary overhead.

    Enabling the language

    To enable TypeScript support via Deno, define the deno setting in .moon/toolchain.yml, even if an empty object.

    .moon/toolchain.yml
    # Enable Deno
    deno: {}

    # Enable Deno and override default settings
    deno:
    lockfile: true

    Or by pinning a deno version in .prototools in the workspace root.

    .prototools
    deno = "1.31.0"

    This will enable the Deno platform and provide the following automations around its ecosystem:

    • Automatic handling and caching of lockfiles (when the setting is enabled).
    • Relationships between projects will automatically be discovered based on imports, importMap, and deps.ts (currently experimental).
    • And more to come!

    Work in progress

    caution

    Deno support is currently experimental while we finalize the implementation.

    The following features are not supported:

    • deno.jsonc files (use deno.json instead).
    • npm: imports do not consider Node.js dependencies as hash sources.
    • files.exclude are currently considered an input. These will be filtered in a future release.

    Coming soon!

    The handbook is currently being written while we finalize our Deno integration support!

    - - + + \ No newline at end of file diff --git a/docs/guides/javascript/node-handbook.html b/docs/guides/javascript/node-handbook.html index 3a00672bb1c..d1319a2f1f8 100644 --- a/docs/guides/javascript/node-handbook.html +++ b/docs/guides/javascript/node-handbook.html @@ -13,8 +13,8 @@ - - + +
    @@ -97,7 +97,7 @@ on the consuming side, you're using the package as if it's a normal node module, and avoids deviating from the ecosystem.

    TypeScript integration

    We suggest using TypeScript project references. Luckily, we have an in-depth guide on how to properly and efficiently integrate them!

    - - + + \ No newline at end of file diff --git a/docs/guides/javascript/typescript-eslint.html b/docs/guides/javascript/typescript-eslint.html index 9954eaa8254..13b860f7360 100644 --- a/docs/guides/javascript/typescript-eslint.html +++ b/docs/guides/javascript/typescript-eslint.html @@ -13,8 +13,8 @@ - - + +
    @@ -28,7 +28,7 @@ in speed is comparable to 100ms vs 2000ms.

    .vscode/settings.json
    {
    // Automatically run all linting fixes on save as a concurrent code action,
    // and avoid formatting with ESLint. Use another formatter, like Prettier.
    "editor.codeActionsOnSave": ["source.fixAll.eslint"],
    "eslint.format.enable": false,

    // If linting is *too slow* while typing, uncomment the following line to
    // only run the linter on save only.
    // "editor.run": "onSave",

    // Your package manager of choice.
    "eslint.packageManager": "yarn",

    // Use the newer and more performant `ESLint` class implementation.
    "eslint.useESLintClass": true,

    // List of directories that that linter should operate on.
    "eslint.workingDirectories": [{ "pattern": "apps/*" }, { "pattern": "packages/*" }]
    }

    Prettier

    Use the esbenp.prettier-vscode extension.

    .vscode/settings.json
    {
    // Use Prettier as the default formatter for all file types. Types not
    // supported by Prettier can be overriden using bracket syntax, or ignore files.
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
    }
    - - + + \ No newline at end of file diff --git a/docs/guides/javascript/typescript-project-refs.html b/docs/guides/javascript/typescript-project-refs.html index 5e3fcc39686..3082887e01e 100644 --- a/docs/guides/javascript/typescript-project-refs.html +++ b/docs/guides/javascript/typescript-project-refs.html @@ -13,8 +13,8 @@ - - + +
    @@ -210,7 +210,7 @@ create another project, C (typically a shared npm package), and move both pieces of code into C. A and B would then import from C, instead of from each other. We're not aware of any tools that would automate this, or detect cycles, so you'll need to do it manually.

    - - + + \ No newline at end of file diff --git a/docs/guides/node/examples.html b/docs/guides/node/examples.html index 79b58f76dbf..431f92c2a03 100644 --- a/docs/guides/node/examples.html +++ b/docs/guides/node/examples.html @@ -13,13 +13,13 @@ - - + +
    - - + + \ No newline at end of file diff --git a/docs/guides/offline-mode.html b/docs/guides/offline-mode.html index ef7973412be..82b3a863a7d 100644 --- a/docs/guides/offline-mode.html +++ b/docs/guides/offline-mode.html @@ -13,8 +13,8 @@ - - + +
    @@ -24,7 +24,7 @@ an active internet connection, and drop into offline mode if necessary.

    What's disabled when offline

    When offline, moon will skip or disable the following:

    • Automatic dependency installation will be skipped.
    • Toolchain will skip resolving, downloading, and installing tools, and instead use the local cache.
      • If no local cache available, will fallback to binaries found on PATH.
      • If not available on PATH, will fail to run.
    • Upgrade and version checks will be skipped.

    Toggling modes

    While we automatically check for an internet connection, both online and offline modes can be forced with the PROTO_OFFLINE environment variable. Setting the variable to 1 or true will force offline mode, while 0 and false will force online mode.

    - - + + \ No newline at end of file diff --git a/docs/guides/open-source.html b/docs/guides/open-source.html index b1214180a0d..8e716d8ed26 100644 --- a/docs/guides/open-source.html +++ b/docs/guides/open-source.html @@ -13,8 +13,8 @@ - - + +
    @@ -28,7 +28,7 @@ moonrepo/run-report-action GitHub action. This action will report the results of a moon ci run to a pull request as a comment and workflow summary.

    .github/workflows/ci.yml
    # ...
    jobs:
    ci:
    name: 'CI'
    runs-on: 'ubuntu-latest'
    steps:
    # ...
    - run: 'yarn moon ci'
    - uses: 'moonrepo/run-report-action@v1'
    if: success() || failure()
    with:
    access-token: ${{ secrets.GITHUB_TOKEN }}

    The report looks something like the following:

    - - + + \ No newline at end of file diff --git a/docs/guides/profile.html b/docs/guides/profile.html index 7937f44f1b4..b47772e0a03 100644 --- a/docs/guides/profile.html +++ b/docs/guides/profile.html @@ -13,8 +13,8 @@ - - + +
    @@ -44,7 +44,7 @@ children.
    Bottom up profiler view

    Top down

    The Top down view works in a similar fashion to Bottom up, but displays functions starting from the top-level entry points. These are also known as root activities.

    Top down profiler view

    Flame chart

    DevTools represents main thread activity with a flame chart. The x-axis represents the recording over time. The y-axis represents the call stack. The events on top cause the events below it.

    Flame chart profiler view
    - - + + \ No newline at end of file diff --git a/docs/guides/remote-cache.html b/docs/guides/remote-cache.html index aac8fd73882..e80202c473e 100644 --- a/docs/guides/remote-cache.html +++ b/docs/guides/remote-cache.html @@ -13,8 +13,8 @@ - - + +
    @@ -45,7 +45,7 @@ outputs of a task, which is typically built and compiled code. To verify this, you can inspect the tar archives in .moon/cache/outputs.

    Does moon collect any personally identifiable information?

    No, moon does not collect any PII as part of the remote caching process.

    However, to use remote caching, you must create a moonrepo account in which we require an email address, and information about your organization and repository.

    Are artifacts encrypted?

    Yes! We use AWS's built-in SSE-S3 encryption for all S3 buckets.

    - - + + \ No newline at end of file diff --git a/docs/guides/root-project.html b/docs/guides/root-project.html index 6216caa16de..7ec2f800c82 100644 --- a/docs/guides/root-project.html +++ b/docs/guides/root-project.html @@ -13,8 +13,8 @@ - - + +
    @@ -30,7 +30,7 @@ .moon/tasks.yml, which may be unexpected. To mitigate this, you can exclude some or all of these tasks in the root config with workspace.inheritedTasks.

    moon.yml
    workspace:
    inheritedTasks:
    include: []
    - - + + \ No newline at end of file diff --git a/docs/guides/rust/handbook.html b/docs/guides/rust/handbook.html index 92739b553c3..c06417f1fa6 100644 --- a/docs/guides/rust/handbook.html +++ b/docs/guides/rust/handbook.html @@ -13,8 +13,8 @@ - - + +
    @@ -64,7 +64,7 @@ artifacts in a cloud storage provider.

    For moon, if you're looking to persist task results across CI runs, you can utilize the runner.archivableTargets setting. This is useful for caching cargo check, cargo clippy, and other Cargo tasks that do not produce direct outputs.

    .moon/workspace.yml
    runner:
    archivableTargets:
    - 'rust:check'
    - 'rust:lint'
    - 'rust:test'
    - - + + \ No newline at end of file diff --git a/docs/guides/sharing-config.html b/docs/guides/sharing-config.html index 30ccfd83c4b..37dea132f08 100644 --- a/docs/guides/sharing-config.html +++ b/docs/guides/sharing-config.html @@ -13,8 +13,8 @@ - - + +
    @@ -32,7 +32,7 @@ new version should be created, while the previous version remains untouched.

    -extends: '../shared/project.yml'
    +extends: '../shared/project-v1.yml'

    Using branches, tags, or commits

    When using a version control platform, like GitHub above, you can reference the upstream configuration through a branch, tag, commit, or sha. Since these are a reference point in time, they are relatively safe.

    -extends: 'https://raw.githubusercontent.com/moonrepo/examples/master/.moon/tasks.yml'
    +extends: 'https://raw.githubusercontent.com/moonrepo/examples/c3f10160bcd16b48b8d4d21b208bb50f6b09bd96/.moon/tasks.yml'
    - - + + \ No newline at end of file diff --git a/docs/guides/vcs-hooks.html b/docs/guides/vcs-hooks.html index 2604f50bd9f..340d7ac18ac 100644 --- a/docs/guides/vcs-hooks.html +++ b/docs/guides/vcs-hooks.html @@ -13,8 +13,8 @@ - - + +
    @@ -55,7 +55,7 @@ the --affected option so that we only run on changed projects!

    .moon/workspace.yml
    vcs:
    hooks:
    pre-commit:
    - 'moon run :lint :format --affected --status=staged'

    By default this will run on the entire project (all files). If you want to filter it to only the changed files, enable the affectedFiles task option.

    - - + + \ No newline at end of file diff --git a/docs/guides/webhooks.html b/docs/guides/webhooks.html index a5e1a071978..d097e2622ce 100644 --- a/docs/guides/webhooks.html +++ b/docs/guides/webhooks.html @@ -13,8 +13,8 @@ - - + +
    @@ -62,7 +62,7 @@ archivePath field is an absolute path to this archive, but is unique to the host machine that the target ran on.

    This event does not trigger if target-output.hydrating did not run or failed to run.

    {
    "type": "target-output.hydrated",
    "createdAt": "...",
    "environment": "...",
    "event": {
    "archivePath": "...",
    "hash": "1f5205cdb0912e97190e08a6cf98e41804bf6824b0a325d315e8b488a12677b0",
    "project": {
    "id": "app"
    // ...
    },
    "target": "app:build",
    "task": {
    "id": "build"
    // ...
    }
    },
    "uuid": "..."
    }
    - - + + \ No newline at end of file diff --git a/docs/how-it-works.html b/docs/how-it-works.html index f593666cf17..d5c41b70196 100644 --- a/docs/how-it-works.html +++ b/docs/how-it-works.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/how-it-works/action-graph.html b/docs/how-it-works/action-graph.html index 0f3e8f6b393..f28fdf5dcba 100644 --- a/docs/how-it-works/action-graph.html +++ b/docs/how-it-works/action-graph.html @@ -13,8 +13,8 @@ - - + +
    @@ -46,7 +46,7 @@ capabilities. All interactive tasks are run in isolation in the graph.

    Run persistent task

    Like the base run task, but runs the task in a persistent process that never exits. All persistent tasks are run in parallel as the last batch in the graph.

    What is the graph used for?

    Without the action graph, tasks would not efficiently run, or possibly at all! The graph helps to run tasks in parallel, in the correct order, and to ensure a reliable outcome.

    - - + + \ No newline at end of file diff --git a/docs/how-it-works/languages.html b/docs/how-it-works/languages.html index 810d7e5b406..ac235dc1f48 100644 --- a/docs/how-it-works/languages.html +++ b/docs/how-it-works/languages.html @@ -13,8 +13,8 @@ - - + +
    @@ -44,7 +44,7 @@ unusable unless the platform has been entirely integrated, and as such, the platform depends on this tier. This tier handles:

    • Downloading and installing a language into the toolchain.
    • Installing and deduping project dependencies.
    • Detecting appropriate versions of tools to use.
    • Determining which binary to use and execute targets with.
    • Supports a version field in the named configuration block in .moon/toolchain.yml.
    .moon/toolchain.yml
    node:
    version: '18.0.0'
    - - + + \ No newline at end of file diff --git a/docs/how-it-works/project-graph.html b/docs/how-it-works/project-graph.html index 7fb5fe4649f..5b33e282dd8 100644 --- a/docs/how-it-works/project-graph.html +++ b/docs/how-it-works/project-graph.html @@ -13,8 +13,8 @@ - - + +
    @@ -38,7 +38,7 @@ dependency when applicable.

    What is the graph used for?

    Great question, the project graph is used throughout the codebase to accomplish a variety of functions, but mainly:

    • Is fed into the action graph to determine relationships of tasks between other tasks, and across projects.
    • Powers our Docker layer caching and scaffolding implementations.
    • Utilized for project syncing to ensure a healthy repository state.
    • Determines affected projects in continuous integration workflows.
    - - + + \ No newline at end of file diff --git a/docs/install.html b/docs/install.html index 04a79d90b21..716958fa17c 100644 --- a/docs/install.html +++ b/docs/install.html @@ -13,8 +13,8 @@ - - + +
    @@ -39,7 +39,7 @@ @moonrepo/cli under the nightly tag. Releases are versioned by date.
  • As a GitHub prerelease using the nightly tag. This tag always represents the latest release, and is not historical.
  • Next steps

    - - + + \ No newline at end of file diff --git a/docs/migrate-to-moon.html b/docs/migrate-to-moon.html index ad71b2a52f8..ed5aa9dd0ca 100644 --- a/docs/migrate-to-moon.html +++ b/docs/migrate-to-moon.html @@ -13,8 +13,8 @@ - - + +
    @@ -43,7 +43,7 @@ check.
  • The script name contains variations of dev, start, or serve.
  • Next steps

    By this point, you should have a better understanding behind moon's fundamentals! Why not adopt incrementally next? Jump into guides for advanced use cases or concepts for a deeper understanding.

    - - + + \ No newline at end of file diff --git a/docs/proto.html b/docs/proto.html index e7e270ce1f9..cd8f9fd79c5 100644 --- a/docs/proto.html +++ b/docs/proto.html @@ -3,7 +3,7 @@ -What is proto? | moonrepo +What is proto? | moonrepo @@ -13,16 +13,15 @@ - - + +
    -

    What is proto?

    3 min

    proto is a pluggable toolchain manager.

    If you're unfamiliar with the concept of a toolchain, a toolchain is a collection of tools that are +

    What is proto?

    3 min

    proto is a pluggable version manager, a unified toolchain.

    If you're unfamiliar with the concept of a toolchain, a toolchain is a collection of tools that are downloaded, installed, and managed by version through a single interface. In the context of proto's -toolchain, a tool is either a programming language, or a dependency/package manager for a language, -or a custom implementation provided by a plugin. It's the next step in the version manager -evolution.

    Why proto?

    proto was designed to be a modern and holistic version manager for all of your favorite programming +toolchain, a tool is either a programming language, a dependency/package manager for a language, or +a custom implementation provided by a plugin. It's the next step in the version manager evolution.

    Why proto?

    proto was designed to be a modern and holistic version manager for all of your favorite programming languages. We believe a single tool that works the same across every language is better than multiple ad-hoc tools. While we only support a handful of languages today, we aim to support many more in the future!

    tip

    proto powers moon's toolchain, enabling a single source of truth for both tools!

    Features

    • Lightspeed! With Rust and WASM, we can guarantee exceptional performance.
    • Multi-language. A single CLI for managing versions for all of your languages.
    • Cross-platform, for a consistent experience across machines and teams.
    • Contextual version detection, ensuring the correct version of a tool is @@ -31,15 +30,18 @@ downloaded file by running a checksum. If this check fails for any reason, the tool is unusable, and the process is aborted.

      After a successful verification, the last step in the tool's life-cycle can begin, installation. Depending on the type of download, the installation process may differ. For archives, we unpack the -tool to ~/.proto/tools/<name>/<version>. In the future, we'll support building from source.

      From here, we make these tools globally available by prepending ~/.proto/bin to PATH (typically -as part of your shell profile). Continue reading for more about this bin folder.

      Shims

      proto is powered the by industry standard concept of shims. For each tool installed in proto, a shim -file will exist at ~/.proto/bin/<tool>. Shims are not symlinks to the tool's binary, but are +tool to ~/.proto/tools/<name>/<version>. In the future, we'll support building from source.

      From here, we make these tools globally available by prepending ~/.proto/shims and ~/.proto/bin +to PATH (typically as part of your shell profile). Continue reading for more about these folders.

      Shims

      proto is powered the by industry standard concept of shims. For each tool installed in proto, a shim +file will exist at ~/.proto/shims/<tool>. Shims are not symlinks to the tool's binary, but are thin wrappers around proto run, enabling -automatic version detection on every invocation!

      info

      The ~/.proto/bin directory should be in your PATH if proto was setup correctly. If not, run -the proto setup command, or add the path manually.

      Supported tools

      The following tools are officially supported in proto via moonrepo. Additional +automatic version detection on every invocation!

      info

      If you'd prefer to not use shims, remove the ~/.proto/shims directory from PATH in your shell +profile.

      Binaries

      Alternatively, we also support a non-shim based approach, which creates symlinks to a tool's primary +executable. For each tool installed in proto, a symlink will exist at ~/.proto/bin/<tool>.

      The version of a tool that's symlinked is not dynamic, and is manually created by pinning the +chosen version with proto install --pin. This also happens +automatically the first time a tool is installed.

      Supported tools

      The following tools are officially supported in proto via moonrepo. Additional tools can be supported through third-party plugins.

      + npm, pnpm, yarn

      Supported targets

      Because proto is written in Rust, we only support targets that are explicitly compiled for, which -are currently:

      Operating systemArchitectureTarget
      macOS 64-bitIntelx86_64-apple-darwin
      macOS 64-bitARMaarch64-apple-darwin
      Linux 64-bitIntel GNUx86_64-unknown-linux-gnu
      Windows 64-bitIntelx86_64-pc-windows-msvc

      Roadmap

      • Linux ARM/musl support.
      • Build from source for existing languages.
      • New languages.
    - - +are currently:

    Operating systemArchitectureTarget
    macOS 64-bitIntelx86_64-apple-darwin
    macOS 64-bitARMaarch64-apple-darwin
    Linux 64-bitIntel GNUx86_64-unknown-linux-gnu
    Windows 64-bitIntelx86_64-pc-windows-msvc

    Roadmap

    • Linux ARM/musl support.
    • Build from source for existing languages.
    • New languages.
    + + \ No newline at end of file diff --git a/docs/proto/commands/add-plugin.html b/docs/proto/commands/add-plugin.html index 9f03f148078..393451ceee0 100644 --- a/docs/proto/commands/add-plugin.html +++ b/docs/proto/commands/add-plugin.html @@ -13,15 +13,15 @@ - - + +

    add-plugin

    v0.16.0

    The proto add-plugin <id> <locator> (or proto ap) command will add the provided plugin ID and locator string to the [plugins] section of the local (.prototools) or global (~/.proto/config.toml) config file.

    $ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm

    Learn more about plugin locator strings.

    Arguments

    • <id> - ID of the plugin.
    • <locator> - How to locate the plugin.

    Options

    • --global - Add to the global config instead of local.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/alias.html b/docs/proto/commands/alias.html index aaca741cfd6..dfbd0ede3ed 100644 --- a/docs/proto/commands/alias.html +++ b/docs/proto/commands/alias.html @@ -13,15 +13,15 @@ - - + +

    alias

    The proto alias <tool> <label> <version> (or proto a) command will define a custom alias that maps to a specific version for the provided tool. Aliases can be used anywhere a version is accepted.

    $ proto alias node work 16.16

    Arguments

    • <tool> - Type of tool.
    • <label> - Name of the alias. Supports alpanumeric chars.
    • <version> - Version to map to the alias.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/bin.html b/docs/proto/commands/bin.html index a69336dd016..d8869dca858 100644 --- a/docs/proto/commands/bin.html +++ b/docs/proto/commands/bin.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ When a tool has not been installed, or a version cannot be resolved, the command will exit with a failure.

    $ proto bin node 16.10.0
    /Users/example/.proto/tools/node/16.10.0/bin/node

    Arguments

    • <tool> - Type of tool.
    • [version] - Version of tool. If not provided, will attempt to detect the version.

    Options

    • --shim - When applicable, return an absolute path to a tool's local shim file.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/clean.html b/docs/proto/commands/clean.html index 3bb8cf11cc3..bfd7c97eda9 100644 --- a/docs/proto/commands/clean.html +++ b/docs/proto/commands/clean.html @@ -13,15 +13,15 @@ - - + +

    clean

    The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it will remove items that haven't been used in the last 30 days.

    $ proto clean

    Furthermore, the command can be used to purge a tool, which will remove it entirely from proto, or purge all downloaded plugins.

    # Delete node from proto
    $ proto clean --purge node

    # Delete all plugins
    $ proto clean --purge-plugins

    Options

    • --days - Number of days before a tool is considered stale.
    • --purge - Purge and delete the installed tool by ID (~/.proto/tools/<id>).
    • --purge-plugins - Purge and delete all downloaded plugins (~/.proto/plugins).
    • --yes - Avoid and confirm all prompts.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/completions.html b/docs/proto/commands/completions.html index fb26012fb7b..9076b30290d 100644 --- a/docs/proto/commands/completions.html +++ b/docs/proto/commands/completions.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ current shell. This command will write to stdout, which can then be redirected to a file of your choice.

    $ proto completions > ~/.bash_completion.d/proto.sh

    Options

    • --shell - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or "zsh".
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/install-global.html b/docs/proto/commands/install-global.html index 71b96f250e8..dc637721b25 100644 --- a/docs/proto/commands/install-global.html +++ b/docs/proto/commands/install-global.html @@ -13,8 +13,8 @@ - - + +
    @@ -25,7 +25,7 @@ FAQ for more information on why this exists.

    # Install a global by name
    $ proto install-global rust cargo-release

    # Install multiple globals
    $ proto install-global rust cargo-release cargo-udeps

    # Can also include an optional version (depending on the language)
    $ proto install-global node typescript@v5
    caution

    proto installs globals but does not make them available on PATH. You'll need to manually add all the global binary locations to PATH from your shell profile.

    Arguments

    • <tool> - Type of tool.
    • ...<dependencies> - Name of dependencies and optional version.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/install.html b/docs/proto/commands/install.html index e328b55316c..a2251b14e2b 100644 --- a/docs/proto/commands/install.html +++ b/docs/proto/commands/install.html @@ -13,8 +13,8 @@ - - + +
    @@ -23,8 +23,8 @@ exit early.

    The command is also smart enough to resolve partial versions, so 1, 1.2, and 1.2.3 are all acceptable. It even supports aliases when applicable, like latest, next, beta, etc. To install a canary release, use --canary.

    $ proto install deno 1.31
    $ proto install deno --canary

    Some tools run post-install hooks that support arbitrary arguments that can be passed -after --.

    $ proto install go -- --no-gobin

    Arguments

    • <tool> - Type of tool.
    • [version] - Version of tool. Defaults to "latest".
    • [-- <args>] - Additional arguments to pass to post-install hooks.

    Options

    • --canary - Install a canary (next, nightly, etc) version.
    • --pin - Pin the resolved version as the global default.
    - - +after --.

    $ proto install go -- --no-gobin

    Arguments

    • <tool> - Type of tool.
    • [version] - Version of tool. Defaults to "latest".
    • [-- <args>] - Additional arguments to pass to post-install hooks.

    Options

    • --canary - Install a canary (next, nightly, etc) version.
    • --pin - Pin the resolved version as the global default, and create a symlink in ~/.proto/bin.
    + + \ No newline at end of file diff --git a/docs/proto/commands/list-global.html b/docs/proto/commands/list-global.html index 29d190c303f..9faaa85cf6f 100644 --- a/docs/proto/commands/list-global.html +++ b/docs/proto/commands/list-global.html @@ -13,14 +13,14 @@ - - + +

    list-global

    The proto list-global <tool> (or proto lsg) command will list installed global dependencies (and their canonical file location) by scanning the file system at the tool's global bins directory.

    $ proto list-global go
    gopls - ~/go/bin/gopls
    mockery - ~/go/bin/mockery
    reflex - ~/go/bin/reflex

    Arguments

    • <tool> - Type of tool.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/list-remote.html b/docs/proto/commands/list-remote.html index 955686b6a9f..826cef2f685 100644 --- a/docs/proto/commands/list-remote.html +++ b/docs/proto/commands/list-remote.html @@ -13,14 +13,14 @@ - - + +

    list-remote

    The proto list-remote <tool> (or proto lsr) command will list available versions by resolving versions from the tool's remote release manifest.

    $ proto list-remote node
    ...
    18.10.0
    18.11.0
    18.12.0
    18.12.1
    18.13.0
    18.14.0
    18.14.1
    18.14.2
    19.0.0
    19.0.1
    19.1.0
    19.2.0
    19.3.0
    19.4.0
    19.5.0
    19.6.0
    19.6.1
    19.7.0

    Arguments

    • <tool> - Type of tool.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/list.html b/docs/proto/commands/list.html index 1f65e6c7a0e..299f8e67c7b 100644 --- a/docs/proto/commands/list.html +++ b/docs/proto/commands/list.html @@ -13,14 +13,14 @@ - - + +

    list

    The proto list <tool> (or proto ls) command will list installed versions by scanning the manifest at ~/.proto/tools/<tool>/manifest.json for possible versions.

    $ proto list node
    16.16.0
    18.2.0
    19.4.0

    Arguments

    • <tool> - Type of tool.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/outdated.html b/docs/proto/commands/outdated.html index 8cfcc886383..223feb51f0d 100644 --- a/docs/proto/commands/outdated.html +++ b/docs/proto/commands/outdated.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ of each configured tool. By default, only newer versions that match the configured version requirements or ranges will be used. To ignore this and use the latest version, pass --latest.

    $ proto outdated

    go - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!
    node - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!

    Learn more about the .prototools configuration file!

    Options

    • --json - Print the list in JSON format.
    • --latest - Check for the latest available version, ignoring any version requirements, ranges, or constraints.
    • --update - Update the loaded .prototools file with newer versions if available.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/pin.html b/docs/proto/commands/pin.html index 73dd081241c..7ab45a1942c 100644 --- a/docs/proto/commands/pin.html +++ b/docs/proto/commands/pin.html @@ -13,8 +13,8 @@ - - + +
    @@ -23,7 +23,7 @@ detect a version.

    $ proto pin go 1.20

    When the --global option is passed, the version will be pinned globally in ~/.proto/tools/<tool>/manifest.json. This version will be used as a global fallback when attempting to detect a version.

    $ proto pin go 1.20 --global

    Learn more about the .prototools configuration file!

    Arguments

    • <tool> - Type of tool.
    • <version> - Version of tool.

    Options

    • --global - Pin the version globally, rather than in the current directory.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/plugins.html b/docs/proto/commands/plugins.html index 3d7f6ed7d7d..4974b1fbda6 100644 --- a/docs/proto/commands/plugins.html +++ b/docs/proto/commands/plugins.html @@ -13,14 +13,14 @@ - - + +

    plugins

    v0.14.0

    The proto plugins command will list all available and configured plugins. Will load all .prototools traversing upwards, and the ~/.proto/config.toml file.

    $ proto plugins

    bun - Bun v1.2
    Source: https://github.com/moonrepo/bun-plugin/releases/latest/download/bun_plugin.wasm

    deno - Deno v2.0
    GitHub: moonrepo/deno-plugin
    Tag: latest

    go - Go v0.1
    GitHub: moonrepo/go-plugin
    Tag: latest

    Options

    • --json - Print the list in JSON format.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/remove-plugin.html b/docs/proto/commands/remove-plugin.html index e568c3210f5..5738ddee3ec 100644 --- a/docs/proto/commands/remove-plugin.html +++ b/docs/proto/commands/remove-plugin.html @@ -13,14 +13,14 @@ - - + +

    remove-plugin

    v0.16.0

    The proto remove-plugin <id> (or proto rp) command will remove the provided plugin ID from to the [plugins] section of the local (.prototools) or global (~/.proto/config.toml) config file.

    $ proto remove-plugin node

    Built-in plugins cannot be removed!

    Arguments

    • <id> - ID of the plugin.

    Options

    • --global - Remove from the global config instead of local.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/run.html b/docs/proto/commands/run.html index 1f275cf7d95..ffedc9df539 100644 --- a/docs/proto/commands/run.html +++ b/docs/proto/commands/run.html @@ -13,15 +13,15 @@ - - + +

    run

    The proto run <tool> (or proto r) command will run a tool after detecting a version from the environment.

    # Run and detect version from environment
    $ proto run bun

    # Run with explicit version
    $ proto run bun 0.5.3

    # Run with version from environment variable
    $ PROTO_BUN_VERSION=0.5.3 proto run bun

    Arguments can be passed to the underlying tool binary by providing additional arguments after --.

    $ proto run bun -- run ./script.ts

    # When using the binary on PATH
    $ bun run ./script.ts

    Arguments

    • <tool> - Type of tool.
    • [version] - Version of tool. If not provided, will attempt to detect the version from the environment.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/setup.html b/docs/proto/commands/setup.html index f73d756a6db..b74ac6db5e8 100644 --- a/docs/proto/commands/setup.html +++ b/docs/proto/commands/setup.html @@ -13,15 +13,15 @@ - - + +

    setup

    The proto setup command will setup proto in your current shell by modifying an applicable profile file and appending proto's bin directory to PATH.

    $ proto setup

    During setup, the following profiles will be searched:

    • All shells
      • ~/.profile
      • PROFILE environment variable
    • Bash
      • ~/.bash_profile
      • ~/.bashrc
    • Elvish
      • ~/.elvish/rc.elv
      • ~/.config/elvish/rc.elv
    • Fish
      • ~/.config/fish/config.fish
    • PowerShell
      • Will execute the setx command to modify PATH
    • Zsh
      • ~/.zprofile
      • ~/.zshrc

    Options

    • --shell - Shell to explicitly generate for. Accepts "bash", "elvish", "fish", "powershell", or "zsh".
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/tools.html b/docs/proto/commands/tools.html index 9146c182f1e..c147fb5d5a0 100644 --- a/docs/proto/commands/tools.html +++ b/docs/proto/commands/tools.html @@ -13,14 +13,14 @@ - - + +

    tools

    v0.18.0

    The proto tools command will list all tools that have been installed, along with their installed versions, relevant timestamps, available aliases, and store location.

    $ proto tools

    go - Go
    Store: ~/.proto/tools/go
    Versions:
    1.20.0 - installed 08/24/23, last used 09/18/23
    1.20.2 - installed 01/01/70, last used 09/18/23, default version

    node - Node.js
    Store: ~/.proto/tools/node
    Aliases:
    ~20 = stable
    Versions:
    18.0.0 - installed 09/03/23, last used 09/18/23, default version
    18.14.0 - installed 09/04/23, last used 09/04/23
    18.17.1 - installed 09/04/23, last used 09/04/23
    19.0.0 - installed 09/03/23
    20.0.0 - installed 09/03/23
    20.6.0 - installed 09/04/23, last used 09/18/23

    A list of tool IDs can be provided to filter the output list.

    $ proto tools node npm

    Arguments

    • [id...] - IDs of plugins.

    Options

    • --json - Print the list in JSON format.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/unalias.html b/docs/proto/commands/unalias.html index 7ad1889a035..60e6a882172 100644 --- a/docs/proto/commands/unalias.html +++ b/docs/proto/commands/unalias.html @@ -13,14 +13,14 @@ - - + +

    unalias

    The proto unalias <tool> <label> (or proto ua) command will remove a custom alias for the provided tool.

    $ proto unalias node work

    Arguments

    • <tool> - Type of tool.
    • <label> - Name of the alias. Supports alpanumeric chars.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/uninstall-global.html b/docs/proto/commands/uninstall-global.html index 8dc8c30da85..0a1a9163682 100644 --- a/docs/proto/commands/uninstall-global.html +++ b/docs/proto/commands/uninstall-global.html @@ -13,14 +13,14 @@ - - + +

    uninstall-global

    v0.15.0

    The proto uninstall-global <tool> ...<dependencies> (or proto ug) command will uninstall one or many global packages/modules/dependencies for the provided tool.

    # Uninstall a global by name
    $ proto uninstall-global rust cargo-release

    # Uninstall multiple globals
    $ proto uninstall-global rust cargo-release cargo-udeps

    Arguments

    • <tool> - Type of tool.
    • ...<dependencies> - Name of dependencies and optional version.
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/uninstall.html b/docs/proto/commands/uninstall.html index adf4587c02a..c56821e401a 100644 --- a/docs/proto/commands/uninstall.html +++ b/docs/proto/commands/uninstall.html @@ -13,14 +13,14 @@ - - + +

    uninstall

    The proto uninstall <tool> (or proto ui) command will uninstall and remove a tool from ~/.proto/tools/<tool>. If the tool has not been installed, the command will exit early.

    $ proto uninstall deno 1.31

    Arguments

    • <tool> - Type of tool.
    • [version] - Version of tool. Defaults to "latest".
    - - + + \ No newline at end of file diff --git a/docs/proto/commands/upgrade.html b/docs/proto/commands/upgrade.html index 00b6ed08168..3b7d6d392cf 100644 --- a/docs/proto/commands/upgrade.html +++ b/docs/proto/commands/upgrade.html @@ -13,14 +13,14 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/proto/commands/use.html b/docs/proto/commands/use.html index d20e4c1e4b7..b5b19195184 100644 --- a/docs/proto/commands/use.html +++ b/docs/proto/commands/use.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,7 +22,7 @@ parent .prototools configuration files, and any versions detected in the current working directory.

    If auto-clean is enabled, the command will also remove any stale or unused tools.

    $ proto use
    - - + + \ No newline at end of file diff --git a/docs/proto/config.html b/docs/proto/config.html index 9319b91707e..92deefc0c2f 100644 --- a/docs/proto/config.html +++ b/docs/proto/config.html @@ -13,8 +13,8 @@ - - + +
    @@ -37,7 +37,7 @@ [plugins] section above for more information.

    GitHub Action

    To streamline GitHub CI workflows, we provide the moonrepo/setup-proto action, which can be used to install proto globally, and cache the toolchain found at ~/.proto.

    .github/workflows/ci.yml
    # ...
    jobs:
    ci:
    name: 'CI'
    runs-on: 'ubuntu-latest'
    steps:
    - uses: 'actions/checkout@v4'
    - uses: 'moonrepo/setup-proto@v1'
    - run: 'proto use'
    - - + + \ No newline at end of file diff --git a/docs/proto/detection.html b/docs/proto/detection.html index dcdc66aec92..78d09acd150 100644 --- a/docs/proto/detection.html +++ b/docs/proto/detection.html @@ -13,8 +13,8 @@ - - + +
    @@ -29,7 +29,7 @@ more.

    .nvmrc
    18.0.0

    4. Version is defined globally

    As the last check, we look for a "global version" that was pinned with proto pin --global. This version is stored at ~/.proto/tools/*/manifest.json.

    5. Version could not be detected

    If all the previous steps have failed, then we could not detect an applicable version, and the process will fail.

    - - + + \ No newline at end of file diff --git a/docs/proto/faq.html b/docs/proto/faq.html index 21b18c474d5..5e51f2f648d 100644 --- a/docs/proto/faq.html +++ b/docs/proto/faq.html @@ -13,8 +13,8 @@ - - + +
    @@ -37,13 +37,13 @@ also need to manually add these global directories to your PATH.

    However, if you'd prefer to use the native non-proto workflow, you can disable the globals intercept using the node-intercept-globals setting.

    How to run a canary release after installing it?

    Once a tool has been installed with --canary, the canary version can be explicitly referenced using our version detection rules. The easiest approach is to prefix the shim with an -environment variable:

    $ PROTO_BUN_VERSION=canary bun ./index.ts

    Or to explicitly configure the version in .prototools:

    bun = "canary"

    OS is unable to find an installed binary, how to resolve?

    To start, ensure that proto's binaries directory (~/.proto/bin) is listed first on PATH, and -takes precedence over other binaries of the same name that may collide.

    Secondly, proto is powered entirely through shims, which means on Windows, we do not provide .exe -binaries, and instead use .cmd. If you're attempting to run a script that uses a hard-coded binary -name like node.exe, this won't work in proto. You'll need to remove the .exe and simply run -node instead. Windows will use the PATHEXT environment variable to find the appropriate -extension, which includes .cmd by default.

    - - +environment variable:

    $ PROTO_BUN_VERSION=canary bun ./index.ts

    Or to explicitly configure the version in .prototools:

    bun = "canary"

    OS is unable to find an installed binary, how to resolve?

    To start, ensure that proto's shim and binary directories are listed first on PATH, and takes +precedence over other binaries of the same name that may collide.

    Secondly, proto is powered through shims, which means on Windows, we do not provide .exe binaries +(for shims), and instead use .cmd. If you're attempting to run a script that uses a hard-coded +binary name like node.exe, you'll need to do one of the following:

    • Remove the trailing .exe and simply run node instead. Windows will use the PATHEXT +environment variable to find the appropriate extension, which includes .cmd by default.
    • Ensure ~/.proto/bin is in your PATH. If a shim cannot be found, the original binary will be +used instead.
    + + \ No newline at end of file diff --git a/docs/proto/install.html b/docs/proto/install.html index 0dbc7490a8d..b053867b82b 100644 --- a/docs/proto/install.html +++ b/docs/proto/install.html @@ -13,8 +13,8 @@ - - + +
    @@ -25,7 +25,7 @@ rename the file after downloading, and apply the executable bit (chmod +x) on macOS and Linux.

    Upgrading

    To upgrade proto, run the proto upgrade command, or re-run the install scripts above.

    Uninstalling

    To uninstall proto, delete the ~/.proto directory, and remove any PROTO_HOME references from your shell profile.

    - - + + \ No newline at end of file diff --git a/docs/proto/plugins.html b/docs/proto/plugins.html index 3e653d1965c..b8dd2d15a7f 100644 --- a/docs/proto/plugins.html +++ b/docs/proto/plugins.html @@ -13,8 +13,8 @@ - - + +
    @@ -34,7 +34,7 @@ variable to authorize API requests with. If using GitHub Actions, it's as simple as:

    # In some job or step...
    env:
    GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'

    Creating plugins

    To ease the plugin development process, proto supports 2 types of plugins, a TOML based plugin for basic use cases, and a WASM based plugin for advanced use cases.

    - - + + \ No newline at end of file diff --git a/docs/proto/toml-plugin.html b/docs/proto/toml-plugin.html index 5d73235aca3..0f15f47a697 100644 --- a/docs/proto/toml-plugin.html +++ b/docs/proto/toml-plugin.html @@ -13,8 +13,8 @@ - - + +
    @@ -22,8 +22,8 @@ how it should be installed, and how it should be invoked. Since this is a static configuration file, it does not support any logic or complex behavior, and is merely for simple and common use cases, like CLIs.

    Create a plugin

    Let's start by creating a new plugin, and defining the name and type fields. The type can either -be language, dependency-manager, or cli. For this example, we'll create a plugin for our fake -product called Protostar, a CLI tool.

    protostar.toml
    name = "Protostar"
    type = "cli"

    Platform variations

    Native tools are often platform specific, and proto supports this by allowing you to define +be language, dependency-manager, package-manager, or cli. For this example, we'll create a +plugin for our fake product called Protostar, a CLI tool.

    protostar.toml
    name = "Protostar"
    type = "cli"

    Platform variations

    Native tools are often platform specific, and proto supports this by allowing you to define variations based on operating system using the [platform] section. For non-native tools, this section can typically be skipped.

    This section requires a mapping of Rust OS strings to platform settings. The @@ -43,7 +43,7 @@ be downloaded and installed into the toolchain. The following settings are available:

    • arch - A mapping of Rust ARCH strings to custom values for the {arch} token. This is useful if the tool has different terminology.
    • checksum-url - A secure URL to download the checksum file for verification. If the tool does not -support checksum verification, this setting can be omitted.
    • checksum-url-canary - A URL for canary releases.
    • download-url (required) - A secure URL to download the tool/archive.
    • download-url-canary - A URL for canary releases.

    The URL settings support {checksum_file} and {download_file} tokens, which will be replaced with +support checksum verification, this setting can be omitted.

  • checksum-url-canary - A URL for canary releases.
  • checksum-public-key - Public key used for verifying checksums. Only used for .minisig files.
  • download-url (required) - A secure URL to download the tool/archive.
  • download-url-canary - A URL for canary releases.
  • The URL settings support {checksum_file} and {download_file} tokens, which will be replaced with the values from the [platform] section.

    protostar.toml
    # ...

    [install]
    checksum-url = "https://github.com/moonrepo/protostar/releases/download/v{version}/{checksum_file}"
    download-url = "https://github.com/moonrepo/protostar/releases/download/v{version}/{download_file}"

    [install.arch]
    aarch64 = "arm64"
    x86_64 = "x64"

    Global packages

    The [globals] sections can be configured that dictates the installation of global binaries for the tool. If the tool does not support globals (is not a programming language), these settings can be omitted.

    • lookup-dirs - A list of directories to locate and install the global binaries into. This setting @@ -59,7 +59,7 @@ version.
    protostar.toml
    # ...

    [resolve]
    manifest-url = "https://someregistry.com/protostar/versions.json"
    manifest-version-key = "latest_version"

    Detecting versions

    And lastly, we can configure how to detect a version contextually at runtime, using the [detect] setting. At this time, we only support 1 setting:

    • version-files - A list of version files to extract from. The contents of these files can only be the version string itself.
    protostar.toml
    # ...

    [detect]
    version-files = [".protostar-version", ".protostarrc"]
    - - + + \ No newline at end of file diff --git a/docs/proto/tools.html b/docs/proto/tools.html index 6fa7f4fdb0b..42d04aa8303 100644 --- a/docs/proto/tools.html +++ b/docs/proto/tools.html @@ -13,13 +13,13 @@ - - + +

    Supported tools

    Built-in

    The following tools are supported natively in proto's toolchain.

    WASM
    Bun

    Bun is an all-in-one runtime and toolset for JavaScript and TypeScript, powered by Zig and Webkit.

    proto install bun

    Available bins: bun, bunx

    Globals directory: ~/.bun/bin

    WASM
    Deno

    Deno is a secure runtime for JavaScript and TypeScript, powered by Rust and Chrome's V8 engine.

    proto install deno

    Available bins: deno

    Globals directory: $DENO_INSTALL_ROOT/bin, $DENO_HOME/bin, ~/.deno/bin

    Detection sources: .dvmrc

    WASM
    Go

    Go is a simple, secure, and fast systems language.

    proto install go

    Available bins: go

    Globals directory: $GOBIN, $GOROOT/bin, $GOPATH/bin, ~/go/bin

    Detection sources: go.work, go.mod

    WASM
    Node.js

    Node.js is a JavaScript runtime built on Chrome's V8 engine.

    proto install node

    Available bins: node, npx

    Globals directory: ~/.proto/tools/node/globals/bin

    Detection sources: .nvmrc, .node-version, package.json engines

    WASM
    npm, pnpm, yarn

    proto supports all popular Node.js package managers.

    proto install <manager>

    Available bins: npm, pnpm, yarn, node-gyp

    Globals directory: ~/.proto/tools/node/globals/bin

    Detection sources: package.json engines / package manager

    WASM
    Python (experimental)

    Python is a high-level, general-purpose programming language.

    proto install python

    Available bins: python, pip

    Globals directory: ~/.local/bin

    Detection sources: .python-version

    WASM
    Rust

    Rust is a blazingly fast and memory-efficient systems language.

    proto install rust

    Globals directory: ~/.cargo/bin

    Detection sources: rust-toolchain.toml, rust-toolchain

    Third-party

    Add tool

    Additional tools can be supported through plugins.

    TOML
    moon

    moon is a multi-language build system and codebase management tool.

    proto add-plugin moon "source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml"
    proto install moon

    Available bins: moon

    - - + + \ No newline at end of file diff --git a/docs/proto/wasm-plugin.html b/docs/proto/wasm-plugin.html index 6a49843f9f4..9bdc5a55ed2 100644 --- a/docs/proto/wasm-plugin.html +++ b/docs/proto/wasm-plugin.html @@ -13,8 +13,8 @@ - - + +
    @@ -41,22 +41,22 @@ with the home_dir and proto_dir fields, both of which are virtual paths.

    if env.home_dir.join(some_path).exists() {
    // Do something
    }

    Host functions

    WASM is pretty powerful but it can't do everything since it's sandboxed. To work around this, we provide a mechanism known as host functions, which are functions that are implemented on the host (in Rust), and can be executed from WASM. The following host functions are currently available:

    • exec_command - Execute a -system command on the host machine, with a provided list of arguments or environment variables.
    • host_log - Log a message to -the host's stderr. This acts like tracing logs, and is not a general purpose stdout logger.

    To use host functions, you'll need to make them available by registering them at the top of your -Rust file (only add the functions you want to use).

    #[host_fn]
    extern "ExtismHost" {
    fn exec_command(input: Json<ExecCommandInput>) -> Json<ExecCommandOutput>;
    fn host_log(input: Json<HostLogInput>);
    }

    And then calling the provided exec_command! or host_log! macros. Each macro supports shorthand -variants, and an explicit variant that accepts the input struct.

    exec_command!("which", ["node"]);
    exec_command!(pipe, "npm", ["install"]); // Pipe stdout/stderr
    exec_command!(inherit, "npm", ["install"]); // Inherit stdout/stderr
    exec_command!(ExecCommandInput {
    command: "npm".into(),
    args: vec!["install".into()],
    env_vars: HashMap::new(),
    stream: false,
    });
    host_log!("Some message");
    host_log!("Some message with {}", "args");
    host_log!(HostLogInput::Fields {
    message: "Some message with data".into(),
    data: HashMap::from_iter([
    ("data".into(), serde_json::to_value(data)?),
    ]),
    });

    Tool ID and context

    When implementing plugin functions, you'll need to access information about the current tool. To get +system command on the host machine, with a provided list of arguments or environment variables.

  • get_env_var - Get an +environment variable value from the host environment.
  • host_log - Log a message to +the host's stderr. This acts like tracing logs, and is not a general purpose stdout logger.
  • set_env_var - Set an +environment variable to the host environment.
  • To use host functions, you'll need to make them available by registering them at the top of your +Rust file (only add the functions you want to use).

    #[host_fn]
    extern "ExtismHost" {
    fn exec_command(input: Json<ExecCommandInput>) -> Json<ExecCommandOutput>;
    fn get_env_var(key: &str) -> String;
    fn host_log(input: Json<HostLogInput>);
    fn set_env_var(key: &str, value: &str);
    }

    Environment variables

    // Set a value
    host_env!("ENV_VAR", "value");

    // Get a value (returns an `Option`)
    let value = host_env!("ENV_VAR");

    Executing commands

    // Pipe stdout/stderr
    let result = exec_command!("which", ["node"]);
    let result = exec_command!(pipe, "npm", ["install"]);

    // Inherit stdout/stderr
    exec_command!(inherit, "npm", ["install"]);

    // Full control
    exec_command!(ExecCommandInput {
    command: "npm".into(),
    args: vec!["install".into()],
    env_vars: HashMap::new(),
    stream: false,
    });

    Logging

    host_log!("Some message");
    host_log!("Some message with {}", "args");

    // With data
    host_log!(HostLogInput::Fields {
    message: "Some message with data".into(),
    data: HashMap::from_iter([
    ("data".into(), serde_json::to_value(data)?),
    ]),
    });

    Tool ID and context

    When implementing plugin functions, you'll need to access information about the current tool. To get the current tool ID (the key the plugin was configured with), use the get_tool_id function.

    let id = get_tool_id();

    Additionally, we also provide what we call the tool context, which is information that is constantly changing depending on the current step or state of proto's execution. The context cannot be accessed with a stand-alone function, and is instead passed as a context field in the input of many plugin functions.

    #[plugin_fn]
    pub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {
    let version = input.context.version;
    // ...
    }

    The following fields are available on the -context object:

    • env_vars - A map of environment variables requested by the -register_tool function.
    • tool_dir - A virtual path to the tool's directory for the current version.
    • version - The current version or alias. If not resolved, will be "latest".
    caution

    The version field is either a fully-qualified semantic version (1.2.3), an alias ("latest", +context object:

    • tool_dir - A virtual path to the tool's directory for the current version.
    • version - The current version or alias. If not resolved, will be "latest".
    caution

    The version field is either a fully-qualified semantic version (1.2.3), an alias ("latest", "stable"), or canary ("canary"). Be sure to account for all these variations when implementing plugin functions!

    Create a plugin

    info

    Although plugins can be written in any language that compiles to WASM, we've only tested Rust. The rest of this article assume you're using Rust and Cargo! Refer to Extism's documentation or our official Node.js plugin for other -examples.

    To start, create a new crate with Cargo:

    cargo new plugin --lib
    cd plugin

    And set the lib type to cdylib, and other settings.

    Cargo.toml
    [lib]
    crate-type = ['cdylib']

    [profile.release]
    codegen-units = 1
    lto = true

    Our Rust plugins are powered by Extism, so lets add their PDK and ours as a +examples.

    To start, create a new crate with Cargo:

    cargo new plugin --lib
    cd plugin

    And set the lib type to cdylib, and other settings.

    Cargo.toml
    [lib]
    crate-type = ['cdylib']

    [profile.release]
    codegen-units = 1
    debug = false
    lto = true
    opt-level = "s"
    panic = "abort"

    Our Rust plugins are powered by Extism, so lets add their PDK and ours as a dependency.

    cargo add extism-pdk proto_pdk

    In all Rust files, we can import both PDKs with the following:

    src/lib.rs
    use extism_pdk::*;
    use proto_pdk::*;

    We can then build the WASM binary. The file will be available at target/wasm32-wasi/debug/<name>.wasm.

    cargo install cargo-wasi
    cargo wasi build

    Implementing plugin functions

    Plugins are powered by a set of functions that are called from the host, and are annotated with #[plugin_fn].

    Registering metadata

    The first step in a plugin's life-cycle is to register metadata about the plugin with the @@ -69,7 +69,7 @@ the direct folder within the archive that contains the tool, and will be removed when unpacking the archive. If there is no prefix folder within the archive, this setting can be omitted.

  • download_url (required) - A secure URL to download the tool/archive.
  • download_name - File name of the archive to download. If not provided, will attempt to extract it from the URL.
  • checksum_url - A secure URL to download the checksum file for verification. If the tool does not -support checksum verification, this setting can be omitted.
  • #[plugin_fn]
    pub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {
    let env = get_proto_environment()?;

    check_supported_os_and_arch(
    NAME,
    &env,
    permutations! [
    HostOS::Linux => [HostArch::X64, HostArch::Arm64, HostArch::Arm, HostArch::Powerpc64, HostArch::S390x],
    HostOS::MacOS => [HostArch::X64, HostArch::Arm64],
    HostOS::Windows => [HostArch::X64, HostArch::X86, HostArch::Arm64],
    ],
    )?;

    let version = input.context.version;
    let arch = env.arch;
    let os = env.os;

    let prefix = match os {
    HostOS::Linux => format!("node-v{version}-linux-{arch}"),
    HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),
    HostOS::Windows => format!("node-v{version}-win-{arch}"),
    other => {
    return Err(PluginError::UnsupportedPlatform("Node.js".into(), other.into()))?;
    }
    };

    let filename = if os == HostOS::Windows {
    format!("{prefix}.zip")
    } else {
    format!("{prefix}.tar.xz")
    };

    Ok(Json(DownloadPrebuiltOutput {
    archive_prefix: Some(prefix),
    download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),
    download_name: Some(filename),
    checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),
    ..DownloadPrebuiltOutput::default()
    }))
    }

    Unpacking an archive

    Our plugin layer will do its best to detect file extensions, unpack the downloaded file (if an +support checksum verification, this setting can be omitted.

  • checksum_public_key - Public key used for verifying checksums. Only used for .minisig files.
  • #[plugin_fn]
    pub fn download_prebuilt(Json(input): Json<DownloadPrebuiltInput>) -> FnResult<Json<DownloadPrebuiltOutput>> {
    let env = get_proto_environment()?;

    check_supported_os_and_arch(
    NAME,
    &env,
    permutations! [
    HostOS::Linux => [HostArch::X64, HostArch::Arm64, HostArch::Arm, HostArch::Powerpc64, HostArch::S390x],
    HostOS::MacOS => [HostArch::X64, HostArch::Arm64],
    HostOS::Windows => [HostArch::X64, HostArch::X86, HostArch::Arm64],
    ],
    )?;

    let version = input.context.version;
    let arch = env.arch;
    let os = env.os;

    let prefix = match os {
    HostOS::Linux => format!("node-v{version}-linux-{arch}"),
    HostOS::MacOS => format!("node-v{version}-darwin-{arch}"),
    HostOS::Windows => format!("node-v{version}-win-{arch}"),
    other => {
    return Err(PluginError::UnsupportedPlatform("Node.js".into(), other.into()))?;
    }
    };

    let filename = if os == HostOS::Windows {
    format!("{prefix}.zip")
    } else {
    format!("{prefix}.tar.xz")
    };

    Ok(Json(DownloadPrebuiltOutput {
    archive_prefix: Some(prefix),
    download_url: format!("https://nodejs.org/dist/v{version}/{filename}"),
    download_name: Some(filename),
    checksum_url: Some(format!("https://nodejs.org/dist/v{version}/SHASUMS256.txt")),
    ..DownloadPrebuiltOutput::default()
    }))
    }

    Unpacking an archive

    Our plugin layer will do its best to detect file extensions, unpack the downloaded file (if an archive), and install the tool to the correct directory. However, we're unable to account for all edge cases, so for situations where the install params above are not sufficient, you may define an unpack_archive function.

    This function receives an input with the following fields:

    • input_file - Virtual path to the downloaded file. Maps to ~/.proto/temp/<id>/<file>.
    • output_dir - Virtual directory to unpack the archive into, or copy the binary to. Maps to @@ -119,11 +119,14 @@ macros require a plugin ID, but also support additional arguments when creating more than 1 shim. These macros generate snapshots using Insta.

      // Only the single binary
      generate_global_shims_test!("id");

      // When creating alternate/additional globals
      generate_global_shims_test!("id", ["other", "another"]);

      // When creating local shims, each file required in the list
      generate_local_shims_test!("id", ["a", "b", "c"]);

      Building and publishing

      At this point, you should have a fully working WASM plugin, but to make it available to downstream proto users, you'll still need to build and make the .wasm file available. The easiest solution is -to publish a GitHub release and include the .wasm file as an asset.

      Manually create releases

      When your plugin is ready to be published, you can create a release on GitHub using the following -steps.

      1. Tag the release and push to GitHub.
      git tag v0.0.1
      git push --tags
      1. Build a release version of the plugin. The file will be available at -target/wasm32-wasi/release/<name>.wasm.
      cargo wasi build --release
      1. In GitHub, navigate to the tags page, find the new tag, create a new release, and attach the -built file as an asset.

      Automate releases

      Coming soon!

      Resources

      Some helpful resources for learning about and building plugins.

    - - +to publish a GitHub release and include the .wasm file as an asset.

    Building, optimizing, and stripping

    WASM files are pretty fat, even when compiling in release mode. To reduce the size of these files, +we can use wasm-opt and wasm-strip, both of which are provided by +WebAssembly. The following script is what we use to build our own +plugins.

    build-wasm
    #!/usr/bin/env bash

    target="${CARGO_TARGET_DIR:-target}"
    input="$target/wasm32-wasi/release/$1.wasm"
    output="$target/wasm32-wasi/$1.wasm"

    echo "Building"

    cargo build --target wasm32-wasi --release

    echo "Optimizing"

    # https://github.com/WebAssembly/binaryen
    ~/binaryen/bin/wasm-opt -Os "$input" --output "$output"

    echo "Stripping"

    # https://github.com/WebAssembly/wabt
    ~/wabt/bin/wasm-strip "$output"

    Manually create releases

    When your plugin is ready to be published, you can create a release on GitHub using the following +steps.

    1. Tag the release and push to GitHub.
    git tag v0.0.1
    git push --tags
    1. Build a release version of the plugin using the build-wasm script above. The file will be +available at target/wasm32-wasi/<name>.wasm.
    build-wasm <name>
    1. In GitHub, navigate to the tags page, find the new tag, create a new release, and attach the +built file as an asset.

    Automate releases

    Coming soon!

    Resources

    Some helpful resources for learning about and building plugins.

    + + \ No newline at end of file diff --git a/docs/run-task.html b/docs/run-task.html index c75250552df..39e47abe9ac 100644 --- a/docs/run-task.html +++ b/docs/run-task.html @@ -13,8 +13,8 @@ - - + +
    @@ -39,7 +39,7 @@ as-is.

    $ moon run app:build -- --force

    The -- delimiter and any arguments must be defined last on the command line.

    Advanced run targeting

    By this point you should have a basic understanding of how to run tasks, but with moon, we want to provide support for advanced workflows and development scenarios. For example, running a target in all projects:

    $ moon run :build

    Or perhaps running a target based on a query:

    $ moon run :build --query "language=[javascript, typescript]"

    Jump to the official moon run documentation for more examples!

    Next steps

    - - + + \ No newline at end of file diff --git a/docs/setup-toolchain.html b/docs/setup-toolchain.html index 9453a26cbd2..1847c4d8f37 100644 --- a/docs/setup-toolchain.html +++ b/docs/setup-toolchain.html @@ -13,8 +13,8 @@ - - + +
    @@ -52,7 +52,7 @@ use the global moon binary.

    package.json
    {
    // ...
    "scripts": {
    // ...
    "moon": "moon",
    // For Yarn 2+
    "moon": "$(yarn bin moon)"
    }
    }
    caution

    Yarn 2+ does not support executing Rust binaries through package scripts (issue), so we must access the full binary path and execute on that.

    With this script, moon can then be run with npm run moon ... (or yarn run, or pnpm run).

    Next steps

    - - + + \ No newline at end of file diff --git a/docs/setup-workspace.html b/docs/setup-workspace.html index 0e8163c2c19..889783a4b85 100644 --- a/docs/setup-workspace.html +++ b/docs/setup-workspace.html @@ -13,8 +13,8 @@ - - + +
    @@ -26,7 +26,7 @@ quickly initialize and create minimal configuration files.

    Configuring a version control system

    moon requires a version control system (VCS) to be present for functionality like file diffing, hashing, and revision comparison. The VCS and its default branch can be configured through the vcs setting.

    .moon/workspace.yml
    vcs:
    manager: 'git'
    defaultBranch: 'master'

    moon defaults to git and the settings above, so feel free to skip this.

    Next steps

    - - + + \ No newline at end of file diff --git a/docs/tags.html b/docs/tags.html index 65755fe0c4c..2a2bbc04293 100644 --- a/docs/tags.html +++ b/docs/tags.html @@ -13,13 +13,13 @@ - - + + - - + + \ No newline at end of file diff --git a/docs/tags/code.html b/docs/tags/code.html index 9e47a93247e..75cc3633c4b 100644 --- a/docs/tags/code.html +++ b/docs/tags/code.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "code"

    View All Tags

    Code owners

    Code owners enables companies to define individuals, teams, or groups that are responsible for code

    - - + + \ No newline at end of file diff --git a/docs/tags/codegen.html b/docs/tags/codegen.html index 3195a5735e3..5775307fc79 100644 --- a/docs/tags/codegen.html +++ b/docs/tags/codegen.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "codegen"

    View All Tags

    Code generation

    Code generation provides an easy mechanism for automating common development workflows and file

    - - + + \ No newline at end of file diff --git a/docs/tags/codeowners.html b/docs/tags/codeowners.html index b31bfb6449e..b6e6a754da9 100644 --- a/docs/tags/codeowners.html +++ b/docs/tags/codeowners.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "codeowners"

    View All Tags

    Code owners

    Code owners enables companies to define individuals, teams, or groups that are responsible for code

    - - + + \ No newline at end of file diff --git a/docs/tags/generator.html b/docs/tags/generator.html index 9a541791f2e..58fbf0945b6 100644 --- a/docs/tags/generator.html +++ b/docs/tags/generator.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "generator"

    View All Tags

    Code generation

    Code generation provides an easy mechanism for automating common development workflows and file

    - - + + \ No newline at end of file diff --git a/docs/tags/git-hooks.html b/docs/tags/git-hooks.html index 0f1746bb908..225a45476b6 100644 --- a/docs/tags/git-hooks.html +++ b/docs/tags/git-hooks.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "git-hooks"

    View All Tags

    VCS hooks

    VCS hooks (most popular with Git) are a

    - - + + \ No newline at end of file diff --git a/docs/tags/git.html b/docs/tags/git.html index 1b72bb9bff7..cc51ecb70c1 100644 --- a/docs/tags/git.html +++ b/docs/tags/git.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "git"

    View All Tags

    VCS hooks

    VCS hooks (most popular with Git) are a

    - - + + \ No newline at end of file diff --git a/docs/tags/hooks.html b/docs/tags/hooks.html index 624f0c06f03..c4a193b057e 100644 --- a/docs/tags/hooks.html +++ b/docs/tags/hooks.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "hooks"

    View All Tags

    VCS hooks

    VCS hooks (most popular with Git) are a

    - - + + \ No newline at end of file diff --git a/docs/tags/lang.html b/docs/tags/lang.html index d320219321f..2e94f8671bb 100644 --- a/docs/tags/lang.html +++ b/docs/tags/lang.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "lang"

    View All Tags

    Query language

    moon supports an integrated query language, known as MQL, that can be used to filter and select

    - - + + \ No newline at end of file diff --git a/docs/tags/mql.html b/docs/tags/mql.html index 7947d9a5515..af068a8c63e 100644 --- a/docs/tags/mql.html +++ b/docs/tags/mql.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "mql"

    View All Tags

    Query language

    moon supports an integrated query language, known as MQL, that can be used to filter and select

    - - + + \ No newline at end of file diff --git a/docs/tags/owners.html b/docs/tags/owners.html index 70b3e1b7545..35e774980c3 100644 --- a/docs/tags/owners.html +++ b/docs/tags/owners.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "owners"

    View All Tags

    Code owners

    Code owners enables companies to define individuals, teams, or groups that are responsible for code

    - - + + \ No newline at end of file diff --git a/docs/tags/query.html b/docs/tags/query.html index 1f1b1fe1cb0..69ac0bc6a1a 100644 --- a/docs/tags/query.html +++ b/docs/tags/query.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "query"

    View All Tags

    Query language

    moon supports an integrated query language, known as MQL, that can be used to filter and select

    - - + + \ No newline at end of file diff --git a/docs/tags/scaffold.html b/docs/tags/scaffold.html index 42ad1269ab9..138a2968087 100644 --- a/docs/tags/scaffold.html +++ b/docs/tags/scaffold.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "scaffold"

    View All Tags

    Code generation

    Code generation provides an easy mechanism for automating common development workflows and file

    - - + + \ No newline at end of file diff --git a/docs/tags/solid.html b/docs/tags/solid.html index b07ae5fdc8d..0c9aff11924 100644 --- a/docs/tags/solid.html +++ b/docs/tags/solid.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "solid"

    View All Tags

    Solid example

    Solid (also known as SolidJS) is a JavaScript framework for building

    - - + + \ No newline at end of file diff --git a/docs/tags/solidjs.html b/docs/tags/solidjs.html index 4c4e44db382..f975629b967 100644 --- a/docs/tags/solidjs.html +++ b/docs/tags/solidjs.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "solidjs"

    View All Tags

    Solid example

    Solid (also known as SolidJS) is a JavaScript framework for building

    - - + + \ No newline at end of file diff --git a/docs/tags/template.html b/docs/tags/template.html index 0dafe9f2c66..6d2029af987 100644 --- a/docs/tags/template.html +++ b/docs/tags/template.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "template"

    View All Tags

    Code generation

    Code generation provides an easy mechanism for automating common development workflows and file

    - - + + \ No newline at end of file diff --git a/docs/tags/vcs.html b/docs/tags/vcs.html index a4f53419360..a72674a756c 100644 --- a/docs/tags/vcs.html +++ b/docs/tags/vcs.html @@ -13,13 +13,13 @@ - - + +

    One doc tagged with "vcs"

    View All Tags

    VCS hooks

    VCS hooks (most popular with Git) are a

    - - + + \ No newline at end of file diff --git a/docs/terminology.html b/docs/terminology.html index 06809fb801c..684ae343a6f 100644 --- a/docs/terminology.html +++ b/docs/terminology.html @@ -13,13 +13,13 @@ - - + +

    Terminology

    TermDescription
    ActionA node within the dependency graph that gets executed by the action pipeline.
    Action pipelineExecutes actions from our dependency graph in topological order using a thread pool.
    AffectedTouched by an explicit set of inputs or sources.
    CacheFiles and outputs that are stored on the file system to provide incremental builds and increased performance.
    CIContinuous integration. An environment where tests, builds, lints, etc, are continuously ran on every pull/merge request.
    Dependency graphA directed acyclic graph (DAG) of targets to run and their dependencies.
    DownstreamDependents or consumers of the item in question.
    GeneratorGenerates code from pre-defined templates.
    HashA unique SHA256 identifier that represents the result of a ran task.
    HashingThe mechanism of generating a hash based on multiple sources: inputs, dependencies, configs, etc.
    LTSLong-term support.
    Dependency managerInstalls and manages dependencies for a specific tool (npm), using a manifest file (package.json).
    PlatformAn internal concept representing the integration of a programming language (tool) within moon, and also the environment + language that a task runs in.
    Primary targetThe target that was explicitly ran, and is the dependee of transitive targets.
    ProjectAn collection of source and test files, configurations, a manifest and dependencies, and much more. Exists within a workspace
    RevisionIn the context of a VCS: a branch, revision, commit, hash, or point in history.
    RuntimeAn internal concept representing the platform + version of a tool.
    TargetA label and reference to a task within the project, in the format of project:task.
    TaskA command to run within the context of and configured in a project.
    TemplateA collection of files that get scaffolded by a generator.
    Template fileAn individual file within a template.
    Template variableA value that is interpolated within a template file and its file system path.
    TokenA value within task configuration that is substituted at runtime.
    ToolA programming language or dependency manager within the toolchain.
    ToolchainInstalls and manages tools within the workspace.
    Transitive targetA target that is the dependency of the primary target, and must be ran before the primary.
    TouchedA file that has been created, modified, deleted, or changed in any way.
    UpstreamDependencies or producers of the item in question.
    VCSVersion control system (like Git or SVN).
    WorkspaceRoot of the moon installation, and houses one or many projects. Also refers to package manager workspaces (like Yarn).
    - - + + \ No newline at end of file diff --git a/index.html b/index.html index d48d6bf2539..f413870ece5 100644 --- a/index.html +++ b/index.html @@ -13,13 +13,13 @@ - - + +

    New era of productivity tooling

    From build to deploy, moonrepo is a better way to manage codebases, save developer time, and boost your business.

    A system for a solid foundation

    Supercharge your codebase

    For repositories with multiple projects, any number of languages, and team members constantly pushing changes, moon will help simplify the experience of working in and maintaining a complex monorepo.

    Learn more about moon
    A service to expand to the cloud

    Accelerate your pipelines

    With our hosted service moonbase, easily cache build artifacts to reduce CI times, gain insight into your CI pipelines, track the health of your repositories, and overall cut costs.

    Learn more about moonbase
    A toolchain for the modern era

    Automate your environments

    Remove the hassle of managing and enforcing specific versions of programming languages across teams or projects. With proto, our modern version manager, this entire workflow is automated away through a single tool.

    Learn more about proto

    Used by these innovative companies

    - - + + \ No newline at end of file diff --git a/moon.html b/moon.html index d7f44a16232..4e2f7a2398d 100644 --- a/moon.html +++ b/moon.html @@ -13,13 +13,13 @@ - - + +

    A task runner and monorepo management tool for the web ecosystem, written in Rust.

    Supports JavaScript, TypeScript, Rust, Go, Ruby, and more.

    Backed by

    • Smart hashing

      Collects inputs from multiple sources to ensure builds are deterministic and reproducible.

    • Remote caching

      Persists builds, hashes, and caches between teammates and CI/CD environments.

    • Integrated toolchain

      Automatically downloads and installs explicit versions of languages and tools for consistency across the entire workspace or per project.

    • Multi-platform

      Runs on common development platforms: Linux, macOS, and Windows.

    • Project graph

      Generates a project graph for dependency and dependent relationships.

    • Code generation

      Easily scaffold new applications, libraries, tooling, and more!

    • Task inheritance

      Define a task once to be inherited by all or scoped projects. Avoid defining the same task in every project.

    • Code ownership

      New

      Declare owners, maintainers, support channels, and more. Generate CODEOWNERS.

    • Dependency graph

      Generates a dependency graph to increase performance and reduce workloads.

    • Action pipeline

      Executes actions in parallel and in order using a thread pool and our dependency graph.

    • Action distribution

      Coming soon

      Distributes actions across multiple machines to increase throughput.

    • Incremental builds

      With our smart hashing, only rebuild projects that have been touched since the last build.

    • Flakiness detection

      Reduce flaky builds with automatic retries and passthrough settings.

    • Webhook events

      Experimental

      Receive a webhook for every event in the pipeline. Useful for metrics gathering and insights.

    • Terminal notifications

      Coming soon

      Receives notifications in your chosen terminal when builds are successful... or are not.

    • Git hooks

      New

      Manage Git hooks to enforce workflows and requirements for contributors.

    And many more features

    Configuration & convention
    Use moon the way you want, but with some guard rails.
    Scalability aware
    Engineered to scale and grow for codebases of any size.
    Integrated packages

    In development

    Enhance your pipeline with our @moonrepo npm packages.
    Process inspection

    Coming soon

    Inspect and debug failing task processes.
    Build profiles
    Record CPU and heap profiles that can be analyzed in Chrome.
    Editor extensions
    Utilize moon extensions in your favorite editor, like Visual Studio Code.
    - - + + \ No newline at end of file diff --git a/moonbase.html b/moonbase.html index dae58d3bc28..73655cfac63 100644 --- a/moonbase.html +++ b/moonbase.html @@ -13,13 +13,13 @@ - - + +

    A service for monitoring codebases, tracking ownership, and scaling CI pipelines.

    For moon powered repositories.

    moonbase - organization view

    Backed by

    • Artifact caching

      Cache build artifacts between CI runs to reduce job times and overall costs.

    • Run history

      New

      Track CI runs to detect flakiness, regressions, and time spent on task execution.

    • Remote distribution

      Coming soon

      Distribute task execution across multiple remote agents to increase throughput.

    • Project registry

      In development

      An aggregated registry of all projects, across all repositories, within an organization.

    • Code owners

      Coming soon

      A granular breakdown of which team or developer owns a portion of code within each project.

    • Health score

      Coming soon

      Monitor the health of projects and avoid tech debt.

    Pricing

    Use moonbase for free for small, personal, or open source projects.
    Upgrade for more features or for larger teams.

    Start

    Free

    • 1 organization member
    • 5 repositories
    • 100 CI runs/ month
    • 1GB cloud storage

    Scale

    $5

    per member + repo

    monthly

    • Priority support
    • 5 free repositories
    • 1,000 CI runs/ month
    • 10GB cloud storage
    • Unlocked organization settings

    Grow

    Soon

    • Enterprise support
    • 15 free repositories
    • Unlimited CI runs/ month
    • Unlimited cloud storage
    • + previous tier

    Terms of Service · Privacy Policy

    Prices and limits subject to change before release!

    - - + + \ No newline at end of file diff --git a/proto.html b/proto.html index 4c8ef90b6aa..5fa59ffc26a 100644 --- a/proto.html +++ b/proto.html @@ -13,13 +13,13 @@ - - + +
    -

    A version manager for all your favorite languages and tools. A unified toolchain.

    Supports Bun, Deno, Node (npm, pnpm, yarn), Rust, Go, and more.

    • # Install proto
    • curl -fsSL https://moonrepo.dev/install/proto.sh | bash
    • # Install Bun
    • proto install bun 0.5
    • # Use immediately
    • bun run index.ts

    Backed by

    • Lightspeed interface

      Download, install, and run tools with lightspeed, thanks to our Rust based foundation.

    • Universal toolchain

      Manage multiple languages and dependency managers through a single interface.

    • Version detection

      Detects a version at runtime from a language's ecosystem for maximum compatibility.

    • Granular configuration

      Configure tools and their versions per directory, or per project.

    • Pluggable architecture

      Extend the toolchain with custom plugins, enabling new and non-standard tools.

    Get started

    Install proto for Linux, macOS, or WSL:

    curl -fsSL https://moonrepo.dev/install/proto.sh | bash

    Or Windows (full instructions):

    irm https://moonrepo.dev/install/proto.ps1 | iex

    Install a tool

    proto install node 18

    Run the tool

    node ./main.mjs

    # Or with proto
    proto run node -- ./main.mjs

    Supported tools

    + npm, pnpm, yarn

    Why another version manager?

    To start, proto powers moon's toolchain and integrated developer environment. We believed that the toolchain would be extremely beneficial for developers as a whole, and so we extracted proto out into a standalone Rust CLI and Rust crates that moon inherits.

    Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each with different workflows, CLI commands, and configuration files, is a poor developer experience.

    Our goal is to unify all of these into a single performant interface. A toolchain manager is the next step in the version manager evolution.

    - - +

    A version manager for all your favorite languages and tools. A unified toolchain.

    Supports Bun, Deno, Node (npm, pnpm, yarn), Rust, Go, and more.

    • # Install proto
    • curl -fsSL https://moonrepo.dev/install/proto.sh | bash
    • # Install Go
    • proto install go 1.20
    • # Use immediately
    • go run .

    Backed by

    • Lightspeed interface

      Download, install, and run tools with lightspeed, thanks to our Rust based foundation.

    • Universal toolchain

      Manage multiple languages and dependency managers through a single interface.

    • Version detection

      Detects a version at runtime from a language's ecosystem for maximum compatibility.

    • Granular configuration

      Configure tools and their versions per directory, or per project.

    • Pluggable architecture

      Extend the toolchain with custom plugins, enabling new and non-standard tools.

    Get started

    Install proto for Linux, macOS, or WSL:

    curl -fsSL https://moonrepo.dev/install/proto.sh | bash

    Or Windows (full instructions):

    irm https://moonrepo.dev/install/proto.ps1 | iex

    Install a tool

    proto install node 18

    Run the tool

    node ./main.mjs

    # Or with proto
    proto run node -- ./main.mjs

    Supported tools

    + npm, pnpm, yarn

    Why another version manager?

    To start, proto powers moon's toolchain and integrated developer environment. We believed that the toolchain would be extremely beneficial for developers as a whole, and so we extracted proto out into a standalone Rust CLI and Rust crates that moon inherits.

    Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each with different workflows, CLI commands, and configuration files, is a poor developer experience.

    Our goal is to unify all of these into a single performant interface. A toolchain manager is the next step in the version manager evolution.

    + + \ No newline at end of file diff --git a/search.html b/search.html index 0ab6a46a23d..60f162e79d7 100644 --- a/search.html +++ b/search.html @@ -13,13 +13,13 @@ - - + +

    Search the documentation

    - - + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 5ed4aa89266..4288832cfaf 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://moonrepo.dev/blogweekly0.5https://moonrepo.dev/blog/2023-roadmapweekly0.5https://moonrepo.dev/blog/archiveweekly0.5https://moonrepo.dev/blog/moon-v1.0weekly0.5https://moonrepo.dev/blog/moon-v1.1weekly0.5https://moonrepo.dev/blog/moon-v1.10weekly0.5https://moonrepo.dev/blog/moon-v1.11weekly0.5https://moonrepo.dev/blog/moon-v1.12weekly0.5https://moonrepo.dev/blog/moon-v1.13weekly0.5https://moonrepo.dev/blog/moon-v1.14weekly0.5https://moonrepo.dev/blog/moon-v1.15weekly0.5https://moonrepo.dev/blog/moon-v1.2weekly0.5https://moonrepo.dev/blog/moon-v1.3weekly0.5https://moonrepo.dev/blog/moon-v1.4weekly0.5https://moonrepo.dev/blog/moon-v1.5weekly0.5https://moonrepo.dev/blog/moon-v1.6weekly0.5https://moonrepo.dev/blog/moon-v1.7weekly0.5https://moonrepo.dev/blog/moon-v1.8weekly0.5https://moonrepo.dev/blog/moon-v1.9weekly0.5https://moonrepo.dev/blog/moonbaseweekly0.5https://moonrepo.dev/blog/page/2weekly0.5https://moonrepo.dev/blog/page/3weekly0.5https://moonrepo.dev/blog/page/4weekly0.5https://moonrepo.dev/blog/page/5weekly0.5https://moonrepo.dev/blog/page/6weekly0.5https://moonrepo.dev/blog/protoweekly0.5https://moonrepo.dev/blog/proto-v0.11weekly0.5https://moonrepo.dev/blog/proto-v0.12weekly0.5https://moonrepo.dev/blog/proto-v0.13weekly0.5https://moonrepo.dev/blog/proto-v0.14weekly0.5https://moonrepo.dev/blog/proto-v0.15weekly0.5https://moonrepo.dev/blog/proto-v0.16weekly0.5https://moonrepo.dev/blog/proto-v0.17weekly0.5https://moonrepo.dev/blog/proto-v0.18weekly0.5https://moonrepo.dev/blog/proto-v0.19weekly0.5https://moonrepo.dev/blog/proto-v0.3weekly0.5https://moonrepo.dev/blog/proto-v0.4weekly0.5https://moonrepo.dev/blog/proto-v0.5weekly0.5https://moonrepo.dev/blog/proto-v0.6weekly0.5https://moonrepo.dev/blog/proto-v0.7weekly0.5https://moonrepo.dev/blog/proto-v0.8weekly0.5https://moonrepo.dev/blog/proto-v0.9weekly0.5https://moonrepo.dev/blog/tagsweekly0.5https://moonrepo.dev/blog/tags/actionweekly0.5https://moonrepo.dev/blog/tags/affectedweekly0.5https://moonrepo.dev/blog/tags/aliasweekly0.5https://moonrepo.dev/blog/tags/cacheweekly0.5https://moonrepo.dev/blog/tags/canaryweekly0.5https://moonrepo.dev/blog/tags/ciweekly0.5https://moonrepo.dev/blog/tags/cleanweekly0.5https://moonrepo.dev/blog/tags/codeweekly0.5https://moonrepo.dev/blog/tags/configweekly0.5https://moonrepo.dev/blog/tags/constraintsweekly0.5https://moonrepo.dev/blog/tags/debugweekly0.5https://moonrepo.dev/blog/tags/denoweekly0.5https://moonrepo.dev/blog/tags/dep-graphweekly0.5https://moonrepo.dev/blog/tags/dependencyweekly0.5https://moonrepo.dev/blog/tags/detectweekly0.5https://moonrepo.dev/blog/tags/dockerweekly0.5https://moonrepo.dev/blog/tags/editorsweekly0.5https://moonrepo.dev/blog/tags/env-varsweekly0.5https://moonrepo.dev/blog/tags/errorsweekly0.5https://moonrepo.dev/blog/tags/generatorweekly0.5https://moonrepo.dev/blog/tags/gitweekly0.5https://moonrepo.dev/blog/tags/githubweekly0.5https://moonrepo.dev/blog/tags/globalweekly0.5https://moonrepo.dev/blog/tags/globalsweekly0.5https://moonrepo.dev/blog/tags/goweekly0.5https://moonrepo.dev/blog/tags/graphweekly0.5https://moonrepo.dev/blog/tags/hashweekly0.5https://moonrepo.dev/blog/tags/hasherweekly0.5https://moonrepo.dev/blog/tags/hooksweekly0.5https://moonrepo.dev/blog/tags/httpweekly0.5https://moonrepo.dev/blog/tags/hydrationweekly0.5https://moonrepo.dev/blog/tags/ignoreweekly0.5https://moonrepo.dev/blog/tags/indexweekly0.5https://moonrepo.dev/blog/tags/inheritanceweekly0.5https://moonrepo.dev/blog/tags/initweekly0.5https://moonrepo.dev/blog/tags/langweekly0.5https://moonrepo.dev/blog/tags/languageweekly0.5https://moonrepo.dev/blog/tags/lifeweekly0.5https://moonrepo.dev/blog/tags/localweekly0.5https://moonrepo.dev/blog/tags/logweekly0.5https://moonrepo.dev/blog/tags/loggingweekly0.5https://moonrepo.dev/blog/tags/migrateweekly0.5https://moonrepo.dev/blog/tags/monorepoweekly0.5https://moonrepo.dev/blog/tags/moonbaseweekly0.5https://moonrepo.dev/blog/tags/nodeweekly0.5https://moonrepo.dev/blog/tags/notifierweekly0.5https://moonrepo.dev/blog/tags/npmweekly0.5https://moonrepo.dev/blog/tags/offlineweekly0.5https://moonrepo.dev/blog/tags/outdatedweekly0.5https://moonrepo.dev/blog/tags/ownersweekly0.5https://moonrepo.dev/blog/tags/ownershipweekly0.5https://moonrepo.dev/blog/tags/pinweekly0.5https://moonrepo.dev/blog/tags/pipelineweekly0.5https://moonrepo.dev/blog/tags/platformweekly0.5https://moonrepo.dev/blog/tags/pluginweekly0.5https://moonrepo.dev/blog/tags/pluginsweekly0.5https://moonrepo.dev/blog/tags/projectweekly0.5https://moonrepo.dev/blog/tags/project-graphweekly0.5https://moonrepo.dev/blog/tags/projectsweekly0.5https://moonrepo.dev/blog/tags/protoweekly0.5https://moonrepo.dev/blog/tags/proto/page/2weekly0.5https://moonrepo.dev/blog/tags/proto/page/3weekly0.5https://moonrepo.dev/blog/tags/pythonweekly0.5https://moonrepo.dev/blog/tags/qolweekly0.5https://moonrepo.dev/blog/tags/qualityweekly0.5https://moonrepo.dev/blog/tags/queryweekly0.5https://moonrepo.dev/blog/tags/railwayweekly0.5https://moonrepo.dev/blog/tags/registryweekly0.5https://moonrepo.dev/blog/tags/remote-cacheweekly0.5https://moonrepo.dev/blog/tags/rfcweekly0.5https://moonrepo.dev/blog/tags/roadmapweekly0.5https://moonrepo.dev/blog/tags/runweekly0.5https://moonrepo.dev/blog/tags/runnerweekly0.5https://moonrepo.dev/blog/tags/rustweekly0.5https://moonrepo.dev/blog/tags/schemaweekly0.5https://moonrepo.dev/blog/tags/shimweekly0.5https://moonrepo.dev/blog/tags/shorthandweekly0.5https://moonrepo.dev/blog/tags/sourceweekly0.5https://moonrepo.dev/blog/tags/surveyweekly0.5https://moonrepo.dev/blog/tags/tagweekly0.5https://moonrepo.dev/blog/tags/tagsweekly0.5https://moonrepo.dev/blog/tags/targetweekly0.5https://moonrepo.dev/blog/tags/taskweekly0.5https://moonrepo.dev/blog/tags/tasksweekly0.5https://moonrepo.dev/blog/tags/tierweekly0.5https://moonrepo.dev/blog/tags/tokensweekly0.5https://moonrepo.dev/blog/tags/tomlweekly0.5https://moonrepo.dev/blog/tags/toolweekly0.5https://moonrepo.dev/blog/tags/toolchainweekly0.5https://moonrepo.dev/blog/tags/typescriptweekly0.5https://moonrepo.dev/blog/tags/vcsweekly0.5https://moonrepo.dev/blog/tags/versionweekly0.5https://moonrepo.dev/blog/tags/vscodeweekly0.5https://moonrepo.dev/blog/tags/wasmweekly0.5https://moonrepo.dev/blog/typescript-monorepoweekly0.5https://moonrepo.dev/blog/v0.13weekly0.5https://moonrepo.dev/blog/v0.14weekly0.5https://moonrepo.dev/blog/v0.15weekly0.5https://moonrepo.dev/blog/v0.16weekly0.5https://moonrepo.dev/blog/v0.17weekly0.5https://moonrepo.dev/blog/v0.18weekly0.5https://moonrepo.dev/blog/v0.19weekly0.5https://moonrepo.dev/blog/v0.20weekly0.5https://moonrepo.dev/blog/v0.21weekly0.5https://moonrepo.dev/blog/v0.22weekly0.5https://moonrepo.dev/blog/v0.23weekly0.5https://moonrepo.dev/blog/v0.24weekly0.5https://moonrepo.dev/blog/v0.25weekly0.5https://moonrepo.dev/blog/v0.26weekly0.5https://moonrepo.dev/blog/vscode-extensionweekly0.5https://moonrepo.dev/docs/tagsweekly0.5https://moonrepo.dev/docs/tags/codeweekly0.5https://moonrepo.dev/docs/tags/codegenweekly0.5https://moonrepo.dev/docs/tags/codeownersweekly0.5https://moonrepo.dev/docs/tags/generatorweekly0.5https://moonrepo.dev/docs/tags/gitweekly0.5https://moonrepo.dev/docs/tags/git-hooksweekly0.5https://moonrepo.dev/docs/tags/hooksweekly0.5https://moonrepo.dev/docs/tags/langweekly0.5https://moonrepo.dev/docs/tags/mqlweekly0.5https://moonrepo.dev/docs/tags/ownersweekly0.5https://moonrepo.dev/docs/tags/queryweekly0.5https://moonrepo.dev/docs/tags/scaffoldweekly0.5https://moonrepo.dev/docs/tags/solidweekly0.5https://moonrepo.dev/docs/tags/solidjsweekly0.5https://moonrepo.dev/docs/tags/templateweekly0.5https://moonrepo.dev/docs/tags/vcsweekly0.5https://moonrepo.dev/moonweekly0.5https://moonrepo.dev/moonbaseweekly0.5https://moonrepo.dev/protoweekly0.5https://moonrepo.dev/searchweekly0.5https://moonrepo.dev/apiweekly0.5https://moonrepo.dev/api/reportweekly0.5https://moonrepo.dev/api/report/function/formatDurationweekly0.5https://moonrepo.dev/api/report/function/formatTimeweekly0.5https://moonrepo.dev/api/report/function/getDurationInMillisweekly0.5https://moonrepo.dev/api/report/function/getIconForStatusweekly0.5https://moonrepo.dev/api/report/function/hasFailedweekly0.5https://moonrepo.dev/api/report/function/hasPassedweekly0.5https://moonrepo.dev/api/report/function/isFlakyweekly0.5https://moonrepo.dev/api/report/function/isSlowweekly0.5https://moonrepo.dev/api/report/function/prepareReportActionsweekly0.5https://moonrepo.dev/api/report/function/sortReportweekly0.5https://moonrepo.dev/api/report/interface/PreparedActionweekly0.5https://moonrepo.dev/api/runtimeweekly0.5https://moonrepo.dev/api/runtime/function/getContextweekly0.5https://moonrepo.dev/api/runtime/interface/RuntimeContextweekly0.5https://moonrepo.dev/api/typesweekly0.5https://moonrepo.dev/api/types/interface/Actionweekly0.5https://moonrepo.dev/api/types/interface/ActionContextweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeInstallDepsweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeInstallProjectDepsweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeRunTaskweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeSetupToolweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeSyncProjectweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeSyncWorkspaceweekly0.5https://moonrepo.dev/api/types/interface/Attemptweekly0.5https://moonrepo.dev/api/types/interface/BinConfigweekly0.5https://moonrepo.dev/api/types/interface/CodeownersConfigweekly0.5https://moonrepo.dev/api/types/interface/ConstraintsConfigweekly0.5https://moonrepo.dev/api/types/interface/DenoConfigweekly0.5https://moonrepo.dev/api/types/interface/DependencyConfigweekly0.5https://moonrepo.dev/api/types/interface/Durationweekly0.5https://moonrepo.dev/api/types/interface/EventActionFinishedweekly0.5https://moonrepo.dev/api/types/interface/EventActionStartedweekly0.5https://moonrepo.dev/api/types/interface/EventDependenciesInstalledweekly0.5https://moonrepo.dev/api/types/interface/EventDependenciesInstallingweekly0.5https://moonrepo.dev/api/types/interface/EventPipelineAbortedweekly0.5https://moonrepo.dev/api/types/interface/EventPipelineFinishedweekly0.5https://moonrepo.dev/api/types/interface/EventPipelineStartedweekly0.5https://moonrepo.dev/api/types/interface/EventProjectSyncedweekly0.5https://moonrepo.dev/api/types/interface/EventProjectSyncingweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputArchivedweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputArchivingweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputCacheCheckweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputHydratedweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputHydratingweekly0.5https://moonrepo.dev/api/types/interface/EventTargetRanweekly0.5https://moonrepo.dev/api/types/interface/EventTargetRunningweekly0.5https://moonrepo.dev/api/types/interface/EventToolInstalledweekly0.5https://moonrepo.dev/api/types/interface/EventToolInstallingweekly0.5https://moonrepo.dev/api/types/interface/EventWorkspaceSyncedweekly0.5https://moonrepo.dev/api/types/interface/ExperimentsConfigweekly0.5https://moonrepo.dev/api/types/interface/FileGroupweekly0.5https://moonrepo.dev/api/types/interface/GeneratorConfigweekly0.5https://moonrepo.dev/api/types/interface/HasherConfigweekly0.5https://moonrepo.dev/api/types/interface/InheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/NodeConfigweekly0.5https://moonrepo.dev/api/types/interface/NotifierConfigweekly0.5https://moonrepo.dev/api/types/interface/NpmConfigweekly0.5https://moonrepo.dev/api/types/interface/OwnersConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialBinConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialCodeownersConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialConstraintsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialDenoConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialDependencyConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialExperimentsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialGeneratorConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialHasherConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialInheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialNodeConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialNotifierConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialNpmConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialOwnersConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialPnpmConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectMetadataConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectToolchainCommonToolConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectToolchainTypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectWorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectWorkspaceInheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialRunnerConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialRustConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTaskConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTaskOptionsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateFrontmatterConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableBoolSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableEnumSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableEnumValueConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableNumberSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableStringSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialVcsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialWorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialWorkspaceProjectsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialYarnConfigweekly0.5https://moonrepo.dev/api/types/interface/PnpmConfigweekly0.5https://moonrepo.dev/api/types/interface/Projectweekly0.5https://moonrepo.dev/api/types/interface/ProjectConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectMetadataConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectToolchainCommonToolConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectToolchainTypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectWorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectWorkspaceInheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/ProviderEnvironmentweekly0.5https://moonrepo.dev/api/types/interface/RunnerConfigweekly0.5https://moonrepo.dev/api/types/interface/RunReportweekly0.5https://moonrepo.dev/api/types/interface/Runtimeweekly0.5https://moonrepo.dev/api/types/interface/RustConfigweekly0.5https://moonrepo.dev/api/types/interface/TargetStateweekly0.5https://moonrepo.dev/api/types/interface/Taskweekly0.5https://moonrepo.dev/api/types/interface/TaskConfigweekly0.5https://moonrepo.dev/api/types/interface/TaskOptionsweekly0.5https://moonrepo.dev/api/types/interface/TaskOptionsConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateFrontmatterConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableBoolSettingweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableEnumSettingweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableEnumValueConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableNumberSettingweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableStringSettingweekly0.5https://moonrepo.dev/api/types/interface/ToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/TypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/VcsConfigweekly0.5https://moonrepo.dev/api/types/interface/WebhookPayloadweekly0.5https://moonrepo.dev/api/types/interface/WorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/WorkspaceProjectsConfigweekly0.5https://moonrepo.dev/api/types/interface/YarnConfigweekly0.5https://moonrepo.dev/docsweekly0.5https://moonrepo.dev/docs/cheat-sheetweekly0.5https://moonrepo.dev/docs/commandsweekly0.5https://moonrepo.dev/docs/commands/action-graphweekly0.5https://moonrepo.dev/docs/commands/binweekly0.5https://moonrepo.dev/docs/commands/checkweekly0.5https://moonrepo.dev/docs/commands/ciweekly0.5https://moonrepo.dev/docs/commands/cleanweekly0.5https://moonrepo.dev/docs/commands/completionsweekly0.5https://moonrepo.dev/docs/commands/dockerweekly0.5https://moonrepo.dev/docs/commands/docker/pruneweekly0.5https://moonrepo.dev/docs/commands/docker/scaffoldweekly0.5https://moonrepo.dev/docs/commands/docker/setupweekly0.5https://moonrepo.dev/docs/commands/generateweekly0.5https://moonrepo.dev/docs/commands/initweekly0.5https://moonrepo.dev/docs/commands/migrateweekly0.5https://moonrepo.dev/docs/commands/migrate/from-package-jsonweekly0.5https://moonrepo.dev/docs/commands/migrate/from-turborepoweekly0.5https://moonrepo.dev/docs/commands/overviewweekly0.5https://moonrepo.dev/docs/commands/projectweekly0.5https://moonrepo.dev/docs/commands/project-graphweekly0.5https://moonrepo.dev/docs/commands/queryweekly0.5https://moonrepo.dev/docs/commands/query/hashweekly0.5https://moonrepo.dev/docs/commands/query/hash-diffweekly0.5https://moonrepo.dev/docs/commands/query/projectsweekly0.5https://moonrepo.dev/docs/commands/query/tasksweekly0.5https://moonrepo.dev/docs/commands/query/touched-filesweekly0.5https://moonrepo.dev/docs/commands/runweekly0.5https://moonrepo.dev/docs/commands/setupweekly0.5https://moonrepo.dev/docs/commands/syncweekly0.5https://moonrepo.dev/docs/commands/sync/codeownersweekly0.5https://moonrepo.dev/docs/commands/sync/hooksweekly0.5https://moonrepo.dev/docs/commands/sync/projectsweekly0.5https://moonrepo.dev/docs/commands/taskweekly0.5https://moonrepo.dev/docs/commands/teardownweekly0.5https://moonrepo.dev/docs/commands/upgradeweekly0.5https://moonrepo.dev/docs/comparisonweekly0.5https://moonrepo.dev/docs/conceptsweekly0.5https://moonrepo.dev/docs/concepts/cacheweekly0.5https://moonrepo.dev/docs/concepts/file-groupweekly0.5https://moonrepo.dev/docs/concepts/file-patternweekly0.5https://moonrepo.dev/docs/concepts/projectweekly0.5https://moonrepo.dev/docs/concepts/query-langweekly0.5https://moonrepo.dev/docs/concepts/targetweekly0.5https://moonrepo.dev/docs/concepts/taskweekly0.5https://moonrepo.dev/docs/concepts/task-inheritanceweekly0.5https://moonrepo.dev/docs/concepts/tokenweekly0.5https://moonrepo.dev/docs/concepts/toolchainweekly0.5https://moonrepo.dev/docs/concepts/workspaceweekly0.5https://moonrepo.dev/docs/configweekly0.5https://moonrepo.dev/docs/config/projectweekly0.5https://moonrepo.dev/docs/config/tasksweekly0.5https://moonrepo.dev/docs/config/templateweekly0.5https://moonrepo.dev/docs/config/toolchainweekly0.5https://moonrepo.dev/docs/config/workspaceweekly0.5https://moonrepo.dev/docs/create-projectweekly0.5https://moonrepo.dev/docs/create-taskweekly0.5https://moonrepo.dev/docs/editorsweekly0.5https://moonrepo.dev/docs/editors/vscodeweekly0.5https://moonrepo.dev/docs/faqweekly0.5https://moonrepo.dev/docs/guides/ciweekly0.5https://moonrepo.dev/docs/guides/codegenweekly0.5https://moonrepo.dev/docs/guides/codeownersweekly0.5https://moonrepo.dev/docs/guides/debug-taskweekly0.5https://moonrepo.dev/docs/guides/dockerweekly0.5https://moonrepo.dev/docs/guides/examples/angularweekly0.5https://moonrepo.dev/docs/guides/examples/astroweekly0.5https://moonrepo.dev/docs/guides/examples/eslintweekly0.5https://moonrepo.dev/docs/guides/examples/jestweekly0.5https://moonrepo.dev/docs/guides/examples/nestweekly0.5https://moonrepo.dev/docs/guides/examples/nextweekly0.5https://moonrepo.dev/docs/guides/examples/nuxtweekly0.5https://moonrepo.dev/docs/guides/examples/packemonweekly0.5https://moonrepo.dev/docs/guides/examples/prettierweekly0.5https://moonrepo.dev/docs/guides/examples/reactweekly0.5https://moonrepo.dev/docs/guides/examples/remixweekly0.5https://moonrepo.dev/docs/guides/examples/solidweekly0.5https://moonrepo.dev/docs/guides/examples/storybookweekly0.5https://moonrepo.dev/docs/guides/examples/sveltekitweekly0.5https://moonrepo.dev/docs/guides/examples/typescriptweekly0.5https://moonrepo.dev/docs/guides/examples/viteweekly0.5https://moonrepo.dev/docs/guides/examples/vueweekly0.5https://moonrepo.dev/docs/guides/javascript/deno-handbookweekly0.5https://moonrepo.dev/docs/guides/javascript/node-handbookweekly0.5https://moonrepo.dev/docs/guides/javascript/typescript-eslintweekly0.5https://moonrepo.dev/docs/guides/javascript/typescript-project-refsweekly0.5https://moonrepo.dev/docs/guides/node/examplesweekly0.5https://moonrepo.dev/docs/guides/offline-modeweekly0.5https://moonrepo.dev/docs/guides/open-sourceweekly0.5https://moonrepo.dev/docs/guides/profileweekly0.5https://moonrepo.dev/docs/guides/remote-cacheweekly0.5https://moonrepo.dev/docs/guides/root-projectweekly0.5https://moonrepo.dev/docs/guides/rust/handbookweekly0.5https://moonrepo.dev/docs/guides/sharing-configweekly0.5https://moonrepo.dev/docs/guides/vcs-hooksweekly0.5https://moonrepo.dev/docs/guides/webhooksweekly0.5https://moonrepo.dev/docs/how-it-worksweekly0.5https://moonrepo.dev/docs/how-it-works/action-graphweekly0.5https://moonrepo.dev/docs/how-it-works/languagesweekly0.5https://moonrepo.dev/docs/how-it-works/project-graphweekly0.5https://moonrepo.dev/docs/installweekly0.5https://moonrepo.dev/docs/migrate-to-moonweekly0.5https://moonrepo.dev/docs/protoweekly0.5https://moonrepo.dev/docs/proto/commands/add-pluginweekly0.5https://moonrepo.dev/docs/proto/commands/aliasweekly0.5https://moonrepo.dev/docs/proto/commands/binweekly0.5https://moonrepo.dev/docs/proto/commands/cleanweekly0.5https://moonrepo.dev/docs/proto/commands/completionsweekly0.5https://moonrepo.dev/docs/proto/commands/installweekly0.5https://moonrepo.dev/docs/proto/commands/install-globalweekly0.5https://moonrepo.dev/docs/proto/commands/listweekly0.5https://moonrepo.dev/docs/proto/commands/list-globalweekly0.5https://moonrepo.dev/docs/proto/commands/list-remoteweekly0.5https://moonrepo.dev/docs/proto/commands/outdatedweekly0.5https://moonrepo.dev/docs/proto/commands/pinweekly0.5https://moonrepo.dev/docs/proto/commands/pluginsweekly0.5https://moonrepo.dev/docs/proto/commands/remove-pluginweekly0.5https://moonrepo.dev/docs/proto/commands/runweekly0.5https://moonrepo.dev/docs/proto/commands/setupweekly0.5https://moonrepo.dev/docs/proto/commands/toolsweekly0.5https://moonrepo.dev/docs/proto/commands/unaliasweekly0.5https://moonrepo.dev/docs/proto/commands/uninstallweekly0.5https://moonrepo.dev/docs/proto/commands/uninstall-globalweekly0.5https://moonrepo.dev/docs/proto/commands/upgradeweekly0.5https://moonrepo.dev/docs/proto/commands/useweekly0.5https://moonrepo.dev/docs/proto/configweekly0.5https://moonrepo.dev/docs/proto/detectionweekly0.5https://moonrepo.dev/docs/proto/faqweekly0.5https://moonrepo.dev/docs/proto/installweekly0.5https://moonrepo.dev/docs/proto/pluginsweekly0.5https://moonrepo.dev/docs/proto/toml-pluginweekly0.5https://moonrepo.dev/docs/proto/toolsweekly0.5https://moonrepo.dev/docs/proto/wasm-pluginweekly0.5https://moonrepo.dev/docs/run-taskweekly0.5https://moonrepo.dev/docs/setup-toolchainweekly0.5https://moonrepo.dev/docs/setup-workspaceweekly0.5https://moonrepo.dev/docs/terminologyweekly0.5https://moonrepo.dev/weekly0.5 \ No newline at end of file +https://moonrepo.dev/blogweekly0.5https://moonrepo.dev/blog/2023-roadmapweekly0.5https://moonrepo.dev/blog/archiveweekly0.5https://moonrepo.dev/blog/moon-v1.0weekly0.5https://moonrepo.dev/blog/moon-v1.1weekly0.5https://moonrepo.dev/blog/moon-v1.10weekly0.5https://moonrepo.dev/blog/moon-v1.11weekly0.5https://moonrepo.dev/blog/moon-v1.12weekly0.5https://moonrepo.dev/blog/moon-v1.13weekly0.5https://moonrepo.dev/blog/moon-v1.14weekly0.5https://moonrepo.dev/blog/moon-v1.15weekly0.5https://moonrepo.dev/blog/moon-v1.2weekly0.5https://moonrepo.dev/blog/moon-v1.3weekly0.5https://moonrepo.dev/blog/moon-v1.4weekly0.5https://moonrepo.dev/blog/moon-v1.5weekly0.5https://moonrepo.dev/blog/moon-v1.6weekly0.5https://moonrepo.dev/blog/moon-v1.7weekly0.5https://moonrepo.dev/blog/moon-v1.8weekly0.5https://moonrepo.dev/blog/moon-v1.9weekly0.5https://moonrepo.dev/blog/moonbaseweekly0.5https://moonrepo.dev/blog/page/2weekly0.5https://moonrepo.dev/blog/page/3weekly0.5https://moonrepo.dev/blog/page/4weekly0.5https://moonrepo.dev/blog/page/5weekly0.5https://moonrepo.dev/blog/page/6weekly0.5https://moonrepo.dev/blog/protoweekly0.5https://moonrepo.dev/blog/proto-v0.11weekly0.5https://moonrepo.dev/blog/proto-v0.12weekly0.5https://moonrepo.dev/blog/proto-v0.13weekly0.5https://moonrepo.dev/blog/proto-v0.14weekly0.5https://moonrepo.dev/blog/proto-v0.15weekly0.5https://moonrepo.dev/blog/proto-v0.16weekly0.5https://moonrepo.dev/blog/proto-v0.17weekly0.5https://moonrepo.dev/blog/proto-v0.18weekly0.5https://moonrepo.dev/blog/proto-v0.19weekly0.5https://moonrepo.dev/blog/proto-v0.20weekly0.5https://moonrepo.dev/blog/proto-v0.3weekly0.5https://moonrepo.dev/blog/proto-v0.4weekly0.5https://moonrepo.dev/blog/proto-v0.5weekly0.5https://moonrepo.dev/blog/proto-v0.6weekly0.5https://moonrepo.dev/blog/proto-v0.7weekly0.5https://moonrepo.dev/blog/proto-v0.8weekly0.5https://moonrepo.dev/blog/proto-v0.9weekly0.5https://moonrepo.dev/blog/tagsweekly0.5https://moonrepo.dev/blog/tags/actionweekly0.5https://moonrepo.dev/blog/tags/affectedweekly0.5https://moonrepo.dev/blog/tags/aliasweekly0.5https://moonrepo.dev/blog/tags/binweekly0.5https://moonrepo.dev/blog/tags/cacheweekly0.5https://moonrepo.dev/blog/tags/canaryweekly0.5https://moonrepo.dev/blog/tags/checksumweekly0.5https://moonrepo.dev/blog/tags/ciweekly0.5https://moonrepo.dev/blog/tags/cleanweekly0.5https://moonrepo.dev/blog/tags/codeweekly0.5https://moonrepo.dev/blog/tags/configweekly0.5https://moonrepo.dev/blog/tags/constraintsweekly0.5https://moonrepo.dev/blog/tags/debugweekly0.5https://moonrepo.dev/blog/tags/denoweekly0.5https://moonrepo.dev/blog/tags/dep-graphweekly0.5https://moonrepo.dev/blog/tags/dependencyweekly0.5https://moonrepo.dev/blog/tags/detectweekly0.5https://moonrepo.dev/blog/tags/dockerweekly0.5https://moonrepo.dev/blog/tags/editorsweekly0.5https://moonrepo.dev/blog/tags/env-varsweekly0.5https://moonrepo.dev/blog/tags/errorsweekly0.5https://moonrepo.dev/blog/tags/generatorweekly0.5https://moonrepo.dev/blog/tags/gitweekly0.5https://moonrepo.dev/blog/tags/githubweekly0.5https://moonrepo.dev/blog/tags/globalweekly0.5https://moonrepo.dev/blog/tags/globalsweekly0.5https://moonrepo.dev/blog/tags/goweekly0.5https://moonrepo.dev/blog/tags/graphweekly0.5https://moonrepo.dev/blog/tags/hashweekly0.5https://moonrepo.dev/blog/tags/hasherweekly0.5https://moonrepo.dev/blog/tags/hooksweekly0.5https://moonrepo.dev/blog/tags/httpweekly0.5https://moonrepo.dev/blog/tags/hydrationweekly0.5https://moonrepo.dev/blog/tags/ignoreweekly0.5https://moonrepo.dev/blog/tags/indexweekly0.5https://moonrepo.dev/blog/tags/inheritanceweekly0.5https://moonrepo.dev/blog/tags/initweekly0.5https://moonrepo.dev/blog/tags/langweekly0.5https://moonrepo.dev/blog/tags/languageweekly0.5https://moonrepo.dev/blog/tags/lifeweekly0.5https://moonrepo.dev/blog/tags/localweekly0.5https://moonrepo.dev/blog/tags/logweekly0.5https://moonrepo.dev/blog/tags/loggingweekly0.5https://moonrepo.dev/blog/tags/migrateweekly0.5https://moonrepo.dev/blog/tags/monorepoweekly0.5https://moonrepo.dev/blog/tags/moonbaseweekly0.5https://moonrepo.dev/blog/tags/nodeweekly0.5https://moonrepo.dev/blog/tags/notifierweekly0.5https://moonrepo.dev/blog/tags/npmweekly0.5https://moonrepo.dev/blog/tags/offlineweekly0.5https://moonrepo.dev/blog/tags/outdatedweekly0.5https://moonrepo.dev/blog/tags/ownersweekly0.5https://moonrepo.dev/blog/tags/ownershipweekly0.5https://moonrepo.dev/blog/tags/pinweekly0.5https://moonrepo.dev/blog/tags/pipelineweekly0.5https://moonrepo.dev/blog/tags/platformweekly0.5https://moonrepo.dev/blog/tags/pluginweekly0.5https://moonrepo.dev/blog/tags/pluginsweekly0.5https://moonrepo.dev/blog/tags/projectweekly0.5https://moonrepo.dev/blog/tags/project-graphweekly0.5https://moonrepo.dev/blog/tags/projectsweekly0.5https://moonrepo.dev/blog/tags/protoweekly0.5https://moonrepo.dev/blog/tags/proto/page/2weekly0.5https://moonrepo.dev/blog/tags/proto/page/3weekly0.5https://moonrepo.dev/blog/tags/pythonweekly0.5https://moonrepo.dev/blog/tags/qolweekly0.5https://moonrepo.dev/blog/tags/qualityweekly0.5https://moonrepo.dev/blog/tags/queryweekly0.5https://moonrepo.dev/blog/tags/railwayweekly0.5https://moonrepo.dev/blog/tags/registryweekly0.5https://moonrepo.dev/blog/tags/remote-cacheweekly0.5https://moonrepo.dev/blog/tags/rfcweekly0.5https://moonrepo.dev/blog/tags/roadmapweekly0.5https://moonrepo.dev/blog/tags/runweekly0.5https://moonrepo.dev/blog/tags/runnerweekly0.5https://moonrepo.dev/blog/tags/rustweekly0.5https://moonrepo.dev/blog/tags/schemaweekly0.5https://moonrepo.dev/blog/tags/shimweekly0.5https://moonrepo.dev/blog/tags/shorthandweekly0.5https://moonrepo.dev/blog/tags/sourceweekly0.5https://moonrepo.dev/blog/tags/surveyweekly0.5https://moonrepo.dev/blog/tags/tagweekly0.5https://moonrepo.dev/blog/tags/tagsweekly0.5https://moonrepo.dev/blog/tags/targetweekly0.5https://moonrepo.dev/blog/tags/taskweekly0.5https://moonrepo.dev/blog/tags/tasksweekly0.5https://moonrepo.dev/blog/tags/tierweekly0.5https://moonrepo.dev/blog/tags/tokensweekly0.5https://moonrepo.dev/blog/tags/tomlweekly0.5https://moonrepo.dev/blog/tags/toolweekly0.5https://moonrepo.dev/blog/tags/toolchainweekly0.5https://moonrepo.dev/blog/tags/typescriptweekly0.5https://moonrepo.dev/blog/tags/vcsweekly0.5https://moonrepo.dev/blog/tags/versionweekly0.5https://moonrepo.dev/blog/tags/vscodeweekly0.5https://moonrepo.dev/blog/tags/wasmweekly0.5https://moonrepo.dev/blog/typescript-monorepoweekly0.5https://moonrepo.dev/blog/v0.13weekly0.5https://moonrepo.dev/blog/v0.14weekly0.5https://moonrepo.dev/blog/v0.15weekly0.5https://moonrepo.dev/blog/v0.16weekly0.5https://moonrepo.dev/blog/v0.17weekly0.5https://moonrepo.dev/blog/v0.18weekly0.5https://moonrepo.dev/blog/v0.19weekly0.5https://moonrepo.dev/blog/v0.20weekly0.5https://moonrepo.dev/blog/v0.21weekly0.5https://moonrepo.dev/blog/v0.22weekly0.5https://moonrepo.dev/blog/v0.23weekly0.5https://moonrepo.dev/blog/v0.24weekly0.5https://moonrepo.dev/blog/v0.25weekly0.5https://moonrepo.dev/blog/v0.26weekly0.5https://moonrepo.dev/blog/vscode-extensionweekly0.5https://moonrepo.dev/docs/tagsweekly0.5https://moonrepo.dev/docs/tags/codeweekly0.5https://moonrepo.dev/docs/tags/codegenweekly0.5https://moonrepo.dev/docs/tags/codeownersweekly0.5https://moonrepo.dev/docs/tags/generatorweekly0.5https://moonrepo.dev/docs/tags/gitweekly0.5https://moonrepo.dev/docs/tags/git-hooksweekly0.5https://moonrepo.dev/docs/tags/hooksweekly0.5https://moonrepo.dev/docs/tags/langweekly0.5https://moonrepo.dev/docs/tags/mqlweekly0.5https://moonrepo.dev/docs/tags/ownersweekly0.5https://moonrepo.dev/docs/tags/queryweekly0.5https://moonrepo.dev/docs/tags/scaffoldweekly0.5https://moonrepo.dev/docs/tags/solidweekly0.5https://moonrepo.dev/docs/tags/solidjsweekly0.5https://moonrepo.dev/docs/tags/templateweekly0.5https://moonrepo.dev/docs/tags/vcsweekly0.5https://moonrepo.dev/moonweekly0.5https://moonrepo.dev/moonbaseweekly0.5https://moonrepo.dev/protoweekly0.5https://moonrepo.dev/searchweekly0.5https://moonrepo.dev/apiweekly0.5https://moonrepo.dev/api/reportweekly0.5https://moonrepo.dev/api/report/function/formatDurationweekly0.5https://moonrepo.dev/api/report/function/formatTimeweekly0.5https://moonrepo.dev/api/report/function/getDurationInMillisweekly0.5https://moonrepo.dev/api/report/function/getIconForStatusweekly0.5https://moonrepo.dev/api/report/function/hasFailedweekly0.5https://moonrepo.dev/api/report/function/hasPassedweekly0.5https://moonrepo.dev/api/report/function/isFlakyweekly0.5https://moonrepo.dev/api/report/function/isSlowweekly0.5https://moonrepo.dev/api/report/function/prepareReportActionsweekly0.5https://moonrepo.dev/api/report/function/sortReportweekly0.5https://moonrepo.dev/api/report/interface/PreparedActionweekly0.5https://moonrepo.dev/api/runtimeweekly0.5https://moonrepo.dev/api/runtime/function/getContextweekly0.5https://moonrepo.dev/api/runtime/interface/RuntimeContextweekly0.5https://moonrepo.dev/api/typesweekly0.5https://moonrepo.dev/api/types/interface/Actionweekly0.5https://moonrepo.dev/api/types/interface/ActionContextweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeInstallDepsweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeInstallProjectDepsweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeRunTaskweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeSetupToolweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeSyncProjectweekly0.5https://moonrepo.dev/api/types/interface/ActionNodeSyncWorkspaceweekly0.5https://moonrepo.dev/api/types/interface/Attemptweekly0.5https://moonrepo.dev/api/types/interface/BinConfigweekly0.5https://moonrepo.dev/api/types/interface/CodeownersConfigweekly0.5https://moonrepo.dev/api/types/interface/ConstraintsConfigweekly0.5https://moonrepo.dev/api/types/interface/DenoConfigweekly0.5https://moonrepo.dev/api/types/interface/DependencyConfigweekly0.5https://moonrepo.dev/api/types/interface/Durationweekly0.5https://moonrepo.dev/api/types/interface/EventActionFinishedweekly0.5https://moonrepo.dev/api/types/interface/EventActionStartedweekly0.5https://moonrepo.dev/api/types/interface/EventDependenciesInstalledweekly0.5https://moonrepo.dev/api/types/interface/EventDependenciesInstallingweekly0.5https://moonrepo.dev/api/types/interface/EventPipelineAbortedweekly0.5https://moonrepo.dev/api/types/interface/EventPipelineFinishedweekly0.5https://moonrepo.dev/api/types/interface/EventPipelineStartedweekly0.5https://moonrepo.dev/api/types/interface/EventProjectSyncedweekly0.5https://moonrepo.dev/api/types/interface/EventProjectSyncingweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputArchivedweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputArchivingweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputCacheCheckweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputHydratedweekly0.5https://moonrepo.dev/api/types/interface/EventTargetOutputHydratingweekly0.5https://moonrepo.dev/api/types/interface/EventTargetRanweekly0.5https://moonrepo.dev/api/types/interface/EventTargetRunningweekly0.5https://moonrepo.dev/api/types/interface/EventToolInstalledweekly0.5https://moonrepo.dev/api/types/interface/EventToolInstallingweekly0.5https://moonrepo.dev/api/types/interface/EventWorkspaceSyncedweekly0.5https://moonrepo.dev/api/types/interface/ExperimentsConfigweekly0.5https://moonrepo.dev/api/types/interface/FileGroupweekly0.5https://moonrepo.dev/api/types/interface/GeneratorConfigweekly0.5https://moonrepo.dev/api/types/interface/HasherConfigweekly0.5https://moonrepo.dev/api/types/interface/InheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/NodeConfigweekly0.5https://moonrepo.dev/api/types/interface/NotifierConfigweekly0.5https://moonrepo.dev/api/types/interface/NpmConfigweekly0.5https://moonrepo.dev/api/types/interface/OwnersConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialBinConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialCodeownersConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialConstraintsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialDenoConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialDependencyConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialExperimentsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialGeneratorConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialHasherConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialInheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialNodeConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialNotifierConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialNpmConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialOwnersConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialPnpmConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectMetadataConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectToolchainCommonToolConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectToolchainTypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectWorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialProjectWorkspaceInheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialRunnerConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialRustConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTaskConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTaskOptionsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateFrontmatterConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableBoolSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableEnumSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableEnumValueConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableNumberSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialTemplateVariableStringSettingweekly0.5https://moonrepo.dev/api/types/interface/PartialToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialTypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialVcsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialWorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialWorkspaceProjectsConfigweekly0.5https://moonrepo.dev/api/types/interface/PartialYarnConfigweekly0.5https://moonrepo.dev/api/types/interface/PnpmConfigweekly0.5https://moonrepo.dev/api/types/interface/Projectweekly0.5https://moonrepo.dev/api/types/interface/ProjectConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectMetadataConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectToolchainCommonToolConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectToolchainTypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectWorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/ProjectWorkspaceInheritedTasksConfigweekly0.5https://moonrepo.dev/api/types/interface/ProviderEnvironmentweekly0.5https://moonrepo.dev/api/types/interface/RunnerConfigweekly0.5https://moonrepo.dev/api/types/interface/RunReportweekly0.5https://moonrepo.dev/api/types/interface/Runtimeweekly0.5https://moonrepo.dev/api/types/interface/RustConfigweekly0.5https://moonrepo.dev/api/types/interface/TargetStateweekly0.5https://moonrepo.dev/api/types/interface/Taskweekly0.5https://moonrepo.dev/api/types/interface/TaskConfigweekly0.5https://moonrepo.dev/api/types/interface/TaskOptionsweekly0.5https://moonrepo.dev/api/types/interface/TaskOptionsConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateFrontmatterConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableBoolSettingweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableEnumSettingweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableEnumValueConfigweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableNumberSettingweekly0.5https://moonrepo.dev/api/types/interface/TemplateVariableStringSettingweekly0.5https://moonrepo.dev/api/types/interface/ToolchainConfigweekly0.5https://moonrepo.dev/api/types/interface/TypeScriptConfigweekly0.5https://moonrepo.dev/api/types/interface/VcsConfigweekly0.5https://moonrepo.dev/api/types/interface/WebhookPayloadweekly0.5https://moonrepo.dev/api/types/interface/WorkspaceConfigweekly0.5https://moonrepo.dev/api/types/interface/WorkspaceProjectsConfigweekly0.5https://moonrepo.dev/api/types/interface/YarnConfigweekly0.5https://moonrepo.dev/docsweekly0.5https://moonrepo.dev/docs/cheat-sheetweekly0.5https://moonrepo.dev/docs/commandsweekly0.5https://moonrepo.dev/docs/commands/action-graphweekly0.5https://moonrepo.dev/docs/commands/binweekly0.5https://moonrepo.dev/docs/commands/checkweekly0.5https://moonrepo.dev/docs/commands/ciweekly0.5https://moonrepo.dev/docs/commands/cleanweekly0.5https://moonrepo.dev/docs/commands/completionsweekly0.5https://moonrepo.dev/docs/commands/dockerweekly0.5https://moonrepo.dev/docs/commands/docker/pruneweekly0.5https://moonrepo.dev/docs/commands/docker/scaffoldweekly0.5https://moonrepo.dev/docs/commands/docker/setupweekly0.5https://moonrepo.dev/docs/commands/generateweekly0.5https://moonrepo.dev/docs/commands/initweekly0.5https://moonrepo.dev/docs/commands/migrateweekly0.5https://moonrepo.dev/docs/commands/migrate/from-package-jsonweekly0.5https://moonrepo.dev/docs/commands/migrate/from-turborepoweekly0.5https://moonrepo.dev/docs/commands/overviewweekly0.5https://moonrepo.dev/docs/commands/projectweekly0.5https://moonrepo.dev/docs/commands/project-graphweekly0.5https://moonrepo.dev/docs/commands/queryweekly0.5https://moonrepo.dev/docs/commands/query/hashweekly0.5https://moonrepo.dev/docs/commands/query/hash-diffweekly0.5https://moonrepo.dev/docs/commands/query/projectsweekly0.5https://moonrepo.dev/docs/commands/query/tasksweekly0.5https://moonrepo.dev/docs/commands/query/touched-filesweekly0.5https://moonrepo.dev/docs/commands/runweekly0.5https://moonrepo.dev/docs/commands/setupweekly0.5https://moonrepo.dev/docs/commands/syncweekly0.5https://moonrepo.dev/docs/commands/sync/codeownersweekly0.5https://moonrepo.dev/docs/commands/sync/hooksweekly0.5https://moonrepo.dev/docs/commands/sync/projectsweekly0.5https://moonrepo.dev/docs/commands/taskweekly0.5https://moonrepo.dev/docs/commands/teardownweekly0.5https://moonrepo.dev/docs/commands/upgradeweekly0.5https://moonrepo.dev/docs/comparisonweekly0.5https://moonrepo.dev/docs/conceptsweekly0.5https://moonrepo.dev/docs/concepts/cacheweekly0.5https://moonrepo.dev/docs/concepts/file-groupweekly0.5https://moonrepo.dev/docs/concepts/file-patternweekly0.5https://moonrepo.dev/docs/concepts/projectweekly0.5https://moonrepo.dev/docs/concepts/query-langweekly0.5https://moonrepo.dev/docs/concepts/targetweekly0.5https://moonrepo.dev/docs/concepts/taskweekly0.5https://moonrepo.dev/docs/concepts/task-inheritanceweekly0.5https://moonrepo.dev/docs/concepts/tokenweekly0.5https://moonrepo.dev/docs/concepts/toolchainweekly0.5https://moonrepo.dev/docs/concepts/workspaceweekly0.5https://moonrepo.dev/docs/configweekly0.5https://moonrepo.dev/docs/config/projectweekly0.5https://moonrepo.dev/docs/config/tasksweekly0.5https://moonrepo.dev/docs/config/templateweekly0.5https://moonrepo.dev/docs/config/toolchainweekly0.5https://moonrepo.dev/docs/config/workspaceweekly0.5https://moonrepo.dev/docs/create-projectweekly0.5https://moonrepo.dev/docs/create-taskweekly0.5https://moonrepo.dev/docs/editorsweekly0.5https://moonrepo.dev/docs/editors/vscodeweekly0.5https://moonrepo.dev/docs/faqweekly0.5https://moonrepo.dev/docs/guides/ciweekly0.5https://moonrepo.dev/docs/guides/codegenweekly0.5https://moonrepo.dev/docs/guides/codeownersweekly0.5https://moonrepo.dev/docs/guides/debug-taskweekly0.5https://moonrepo.dev/docs/guides/dockerweekly0.5https://moonrepo.dev/docs/guides/examples/angularweekly0.5https://moonrepo.dev/docs/guides/examples/astroweekly0.5https://moonrepo.dev/docs/guides/examples/eslintweekly0.5https://moonrepo.dev/docs/guides/examples/jestweekly0.5https://moonrepo.dev/docs/guides/examples/nestweekly0.5https://moonrepo.dev/docs/guides/examples/nextweekly0.5https://moonrepo.dev/docs/guides/examples/nuxtweekly0.5https://moonrepo.dev/docs/guides/examples/packemonweekly0.5https://moonrepo.dev/docs/guides/examples/prettierweekly0.5https://moonrepo.dev/docs/guides/examples/reactweekly0.5https://moonrepo.dev/docs/guides/examples/remixweekly0.5https://moonrepo.dev/docs/guides/examples/solidweekly0.5https://moonrepo.dev/docs/guides/examples/storybookweekly0.5https://moonrepo.dev/docs/guides/examples/sveltekitweekly0.5https://moonrepo.dev/docs/guides/examples/typescriptweekly0.5https://moonrepo.dev/docs/guides/examples/viteweekly0.5https://moonrepo.dev/docs/guides/examples/vueweekly0.5https://moonrepo.dev/docs/guides/javascript/deno-handbookweekly0.5https://moonrepo.dev/docs/guides/javascript/node-handbookweekly0.5https://moonrepo.dev/docs/guides/javascript/typescript-eslintweekly0.5https://moonrepo.dev/docs/guides/javascript/typescript-project-refsweekly0.5https://moonrepo.dev/docs/guides/node/examplesweekly0.5https://moonrepo.dev/docs/guides/offline-modeweekly0.5https://moonrepo.dev/docs/guides/open-sourceweekly0.5https://moonrepo.dev/docs/guides/profileweekly0.5https://moonrepo.dev/docs/guides/remote-cacheweekly0.5https://moonrepo.dev/docs/guides/root-projectweekly0.5https://moonrepo.dev/docs/guides/rust/handbookweekly0.5https://moonrepo.dev/docs/guides/sharing-configweekly0.5https://moonrepo.dev/docs/guides/vcs-hooksweekly0.5https://moonrepo.dev/docs/guides/webhooksweekly0.5https://moonrepo.dev/docs/how-it-worksweekly0.5https://moonrepo.dev/docs/how-it-works/action-graphweekly0.5https://moonrepo.dev/docs/how-it-works/languagesweekly0.5https://moonrepo.dev/docs/how-it-works/project-graphweekly0.5https://moonrepo.dev/docs/installweekly0.5https://moonrepo.dev/docs/migrate-to-moonweekly0.5https://moonrepo.dev/docs/protoweekly0.5https://moonrepo.dev/docs/proto/commands/add-pluginweekly0.5https://moonrepo.dev/docs/proto/commands/aliasweekly0.5https://moonrepo.dev/docs/proto/commands/binweekly0.5https://moonrepo.dev/docs/proto/commands/cleanweekly0.5https://moonrepo.dev/docs/proto/commands/completionsweekly0.5https://moonrepo.dev/docs/proto/commands/installweekly0.5https://moonrepo.dev/docs/proto/commands/install-globalweekly0.5https://moonrepo.dev/docs/proto/commands/listweekly0.5https://moonrepo.dev/docs/proto/commands/list-globalweekly0.5https://moonrepo.dev/docs/proto/commands/list-remoteweekly0.5https://moonrepo.dev/docs/proto/commands/outdatedweekly0.5https://moonrepo.dev/docs/proto/commands/pinweekly0.5https://moonrepo.dev/docs/proto/commands/pluginsweekly0.5https://moonrepo.dev/docs/proto/commands/remove-pluginweekly0.5https://moonrepo.dev/docs/proto/commands/runweekly0.5https://moonrepo.dev/docs/proto/commands/setupweekly0.5https://moonrepo.dev/docs/proto/commands/toolsweekly0.5https://moonrepo.dev/docs/proto/commands/unaliasweekly0.5https://moonrepo.dev/docs/proto/commands/uninstallweekly0.5https://moonrepo.dev/docs/proto/commands/uninstall-globalweekly0.5https://moonrepo.dev/docs/proto/commands/upgradeweekly0.5https://moonrepo.dev/docs/proto/commands/useweekly0.5https://moonrepo.dev/docs/proto/configweekly0.5https://moonrepo.dev/docs/proto/detectionweekly0.5https://moonrepo.dev/docs/proto/faqweekly0.5https://moonrepo.dev/docs/proto/installweekly0.5https://moonrepo.dev/docs/proto/pluginsweekly0.5https://moonrepo.dev/docs/proto/toml-pluginweekly0.5https://moonrepo.dev/docs/proto/toolsweekly0.5https://moonrepo.dev/docs/proto/wasm-pluginweekly0.5https://moonrepo.dev/docs/run-taskweekly0.5https://moonrepo.dev/docs/setup-toolchainweekly0.5https://moonrepo.dev/docs/setup-workspaceweekly0.5https://moonrepo.dev/docs/terminologyweekly0.5https://moonrepo.dev/weekly0.5 \ No newline at end of file